Module:Uses TemplateStyles: Difference between revisions

From Zoophilia Wiki
Jump to navigationJump to search
m 1 revision imported
m Update image filename
 
Line 8: Line 8:


local function format(msg, ...)
local function format(msg, ...)
return TNT.format('I18n/Uses TemplateStyles', msg, ...)
  return TNT.format('I18n/Uses TemplateStyles', msg, ...)
end
end


local function getConfig()
local function getConfig()
return mw.loadData('Module:Uses TemplateStyles/config')
  return mw.loadData('Module:Uses TemplateStyles/config')
end
end


local function renderBox(tStyles)
local function renderBox(tStyles)
local boxArgs = {
  local boxArgs = {
type = 'notice',
    type = 'notice',
small = true,
    small = true,
image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
    image = string.format('[[File:Farm-Fresh css add.png|32px|alt=%s|link=]]', format('logo-alt'))
}
  }
if #tStyles < 1 then
  if #tStyles < 1 then
boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
    boxArgs.text =
else
      string.format('<span class="error" style="font-weight: 700;">%s</span>', format('error-emptylist'))
local cfg = getConfig()
  else
local tStylesLinks = {}
    local cfg = getConfig()
for i, ts in ipairs(tStyles) do
    local tStylesLinks = {}
local link = string.format('[[:%s]]', ts)
    for i, ts in ipairs(tStyles) do
local sandboxLink = nil
      local link = string.format('[[:%s]]', ts)
local tsTitle = mw.title.new(ts)
      local sandboxLink = nil
if tsTitle and cfg['sandbox_title'] then
      local tsTitle = mw.title.new(ts)
local tsSandboxTitle = mw.title.new(string.format(
      if tsTitle and cfg['sandbox_title'] then
'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
        local tsSandboxTitle = mw.title.new(
if tsSandboxTitle and tsSandboxTitle.exists then
          string.format(
sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
            '%s:%s/%s/%s',
end
            tsTitle.nsText,
end
            tsTitle.baseText,
tStylesLinks[i] = sandboxLink or link
            cfg['sandbox_title'],
end
            tsTitle.subpageText
local tStylesList = mList.makeList('bulleted', tStylesLinks)
          )
boxArgs.text = format(
        )
mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
        if tsSandboxTitle and tsSandboxTitle.exists then
'\n' .. tStylesList
          sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
end
        end
return mMessageBox.main('mbox', boxArgs)
      end
      tStylesLinks[i] = sandboxLink or link
    end
    local tStylesList = mList.makeList('bulleted', tStylesLinks)
    boxArgs.text =
      format(mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
      '\n' .. tStylesList
  end
  return mMessageBox.main('mbox', boxArgs)
end
end


local function renderTrackingCategories(args, tStyles, titleObj)
local function renderTrackingCategories(args, tStyles, titleObj)
if yesno(args.nocat) then
  if yesno(args.nocat) then
return ''
    return ''
end
  end
 
local cfg = getConfig()
  local cfg = getConfig()
 
local cats = {}
  local cats = {}
 
-- Error category
  -- Error category.
if #tStyles < 1 and cfg['error_category'] then
  if #tStyles < 1 and cfg['error_category'] then
cats[#cats + 1] = cfg['error_category']
    cats[#cats + 1] = cfg['error_category']
end
  end
 
-- TemplateStyles category
  -- TemplateStyles category.
titleObj = titleObj or mw.title.getCurrentTitle()
  titleObj = titleObj or mw.title.getCurrentTitle()
if (titleObj.namespace == 10 or titleObj.namespace == 828)
  if (titleObj.namespace == 10 or titleObj.namespace == 828) and not
and not cfg['subpage_blacklist'][titleObj.subpageText]
      cfg['subpage_blacklist'][titleObj.subpageText] then
then
    local category = args.category or cfg['default_category']
local category = args.category or cfg['default_category']
    if category then
if category then
      cats[#cats + 1] = category
cats[#cats + 1] = category
    end
end
    if not yesno(args.noprotcat) and
if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
        (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
      local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
local addedLevelCat = false
      local addedLevelCat = false
local addedPadlockCat = false
      local addedPadlockCat = false
for i, ts in ipairs(tStyles) do
      for i, ts in ipairs(tStyles) do
local tsTitleObj = mw.title.new(ts)
        local tsTitleObj = mw.title.new(ts)
local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
        local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
        if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
local content = tsTitleObj:getContent()
          local content = tsTitleObj:getContent()
if not content:find(cfg['padlock_pattern']) then
          if not content:find(cfg['padlock_pattern']) then
cats[#cats + 1] = cfg['missing_padlock_category']
            cats[#cats + 1] = cfg['missing_padlock_category']
addedPadlockCat = true
            addedPadlockCat = true
end
          end
end
        end
if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
        if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
currentProt = cfg['protection_hierarchy'][currentProt] or 0
          currentProt = cfg['protection_hierarchy'][currentProt] or 0
tsProt = cfg['protection_hierarchy'][tsProt] or 0
          tsProt = cfg['protection_hierarchy'][tsProt] or 0
if tsProt < currentProt then
          if tsProt < currentProt then
addedLevelCat = true
            addedLevelCat = true
cats[#cats + 1] = cfg['protection_conflict_category']
            cats[#cats + 1] = cfg['protection_conflict_category']
end
          end
end
        end
end
      end
end
    end
end
  end
for i, cat in ipairs(cats) do
  for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
    cats[i] = string.format('[[Category:%s]]', cat)
end
  end
return table.concat(cats)
  return table.concat(cats)
end
end


function p._main(args, cfg)
function p._main(args, cfg)
local tStyles = mTableTools.compressSparseArray(args)
  local tStyles = mTableTools.compressSparseArray(args)
local box = renderBox(tStyles)
  local box = renderBox(tStyles)
local trackingCategories = renderTrackingCategories(args, tStyles)
  local trackingCategories = renderTrackingCategories(args, tStyles)
return box .. trackingCategories
  return box .. trackingCategories
end
end


function p.main(frame)
function p.main(frame)
local origArgs = frame:getParent().args
  local origArgs = frame:getParent().args
local args = {}
  local args = {}
for k, v in pairs(origArgs) do
  for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
    v = v:match('^%s*(.-)%s*$')
if v ~= '' then
    if v ~= '' then
args[k] = v
      args[k] = v
end
    end
end
  end
return p._main(args)
  return p._main(args)
end
end


return p
return p

Latest revision as of 09:52, 21 March 2026

This module implements {{Uses TemplateStyles}} using data stored at Data:I18n/Uses_TemplateStyles.tab on Wikimedia Commons.


local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')

local p = {}

local function format(msg, ...)
  return TNT.format('I18n/Uses TemplateStyles', msg, ...)
end

local function getConfig()
  return mw.loadData('Module:Uses TemplateStyles/config')
end

local function renderBox(tStyles)
  local boxArgs = {
    type = 'notice',
    small = true,
    image = string.format('[[File:Farm-Fresh css add.png|32px|alt=%s|link=]]', format('logo-alt'))
  }
  if #tStyles < 1 then
    boxArgs.text =
      string.format('<span class="error" style="font-weight: 700;">%s</span>', format('error-emptylist'))
  else
    local cfg = getConfig()
    local tStylesLinks = {}
    for i, ts in ipairs(tStyles) do
      local link = string.format('[[:%s]]', ts)
      local sandboxLink = nil
      local tsTitle = mw.title.new(ts)
      if tsTitle and cfg['sandbox_title'] then
        local tsSandboxTitle = mw.title.new(
          string.format(
            '%s:%s/%s/%s',
            tsTitle.nsText,
            tsTitle.baseText,
            cfg['sandbox_title'],
            tsTitle.subpageText
          )
        )
        if tsSandboxTitle and tsSandboxTitle.exists then
          sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
        end
      end
      tStylesLinks[i] = sandboxLink or link
    end
    local tStylesList = mList.makeList('bulleted', tStylesLinks)
    boxArgs.text =
      format(mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
      '\n' .. tStylesList
  end
  return mMessageBox.main('mbox', boxArgs)
end

local function renderTrackingCategories(args, tStyles, titleObj)
  if yesno(args.nocat) then
    return ''
  end

  local cfg = getConfig()

  local cats = {}

  -- Error category.
  if #tStyles < 1 and cfg['error_category'] then
    cats[#cats + 1] = cfg['error_category']
  end

  -- TemplateStyles category.
  titleObj = titleObj or mw.title.getCurrentTitle()
  if (titleObj.namespace == 10 or titleObj.namespace == 828) and not
      cfg['subpage_blacklist'][titleObj.subpageText] then
    local category = args.category or cfg['default_category']
    if category then
      cats[#cats + 1] = category
    end
    if not yesno(args.noprotcat) and
        (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
      local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
      local addedLevelCat = false
      local addedPadlockCat = false
      for i, ts in ipairs(tStyles) do
        local tsTitleObj = mw.title.new(ts)
        local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
        if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
          local content = tsTitleObj:getContent()
          if not content:find(cfg['padlock_pattern']) then
            cats[#cats + 1] = cfg['missing_padlock_category']
            addedPadlockCat = true
          end
        end
        if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
          currentProt = cfg['protection_hierarchy'][currentProt] or 0
          tsProt = cfg['protection_hierarchy'][tsProt] or 0
          if tsProt < currentProt then
            addedLevelCat = true
            cats[#cats + 1] = cfg['protection_conflict_category']
          end
        end
      end
    end
  end
  for i, cat in ipairs(cats) do
    cats[i] = string.format('[[Category:%s]]', cat)
  end
  return table.concat(cats)
end

function p._main(args, cfg)
  local tStyles = mTableTools.compressSparseArray(args)
  local box = renderBox(tStyles)
  local trackingCategories = renderTrackingCategories(args, tStyles)
  return box .. trackingCategories
end

function p.main(frame)
  local origArgs = frame:getParent().args
  local args = {}
  for k, v in pairs(origArgs) do
    v = v:match('^%s*(.-)%s*$')
    if v ~= '' then
      args[k] = v
    end
  end
  return p._main(args)
end

return p