모듈:Uses TemplateStyles: 두 판 사이의 차이

402 바이트 제거됨 ,  2023년 4월 17일 (월)
잔글
판 6개를 가져왔습니다
(Matching reality rather than 2018 me's wishful thinking)
잔글 (판 6개를 가져왔습니다)
1번째 줄: 1번째 줄:
-- This module implements the {{Uses TemplateStyles}} template.
local yesno = require('Module:Yesno')
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')


local p = {}
local p = {}


local function format(msg, ...)
function p.main(frame)
return TNT.format('I18n/Uses TemplateStyles', msg, ...)
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
end


local function getConfig()
function p._main(args)
return mw.loadData('Module:Uses TemplateStyles/config')
local tStyles = mTableTools.compressSparseArray(args)
local box = p.renderBox(tStyles)
local trackingCategories = p.renderTrackingCategories(args, tStyles)
return box .. trackingCategories
end
end


local function renderBox(tStyles)
function p.renderBox(tStyles)
local boxArgs = {
local boxArgs = {}
type = 'notice',
small = true,
image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', 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 = '<strong class="error">Error: no TemplateStyles specified</strong>'
else
else
local cfg = getConfig()
local tStylesLinks = {}
local tStylesLinks = {}
for i, ts in ipairs(tStyles) do
for i, ts in ipairs(tStyles) do
local link = string.format('[[:%s]]', ts)
local sandboxLink = nil
local sandboxLink = nil
local tsTitle = mw.title.new(ts)
local tsTitle = mw.title.new(ts)
if tsTitle and cfg['sandbox_title'] then
if tsTitle then
local tsSandboxTitle = mw.title.new(string.format(
local tsSandboxTitle = mw.title.new(string.format('%s:%s/sandbox/%s', tsTitle.nsText, tsTitle.baseText, tsTitle.subpageText))
'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
if tsSandboxTitle and tsSandboxTitle.exists then
if tsSandboxTitle and tsSandboxTitle.exists then
sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
sandboxLink = string.format(' ([[:%s|sandbox]])', tsSandboxTitle.prefixedText)
end
end
end
end
tStylesLinks[i] = sandboxLink or link
tStylesLinks[i] = string.format('[[:%s]]%s', ts, sandboxLink or '')
end
end
local tStylesList = mList.makeList('bulleted', tStylesLinks)
local tStylesList = mList.makeList('bulleted', tStylesLinks)
boxArgs.text = format(
boxArgs.text = '이 ' ..
mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
(mw.title.getCurrentTitle():inNamespaces(828,829) and '모듈' or '') ..
'\n' .. tStylesList
'은 [[위키백과:틀스타일|틀스타일]]을 사용합니다:\n' .. tStylesList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[File:Farm-Fresh css add.svg|32px|alt=CSS]]'
return mMessageBox.main('mbox', boxArgs)
return mMessageBox.main('mbox', boxArgs)
end
end


local function renderTrackingCategories(args, tStyles, titleObj)
function p.renderTrackingCategories(args, tStyles, titleObj)
if yesno(args.nocat) then
if yesno(args.nocat) then
return ''
return ''
end
end
local cfg = getConfig()
local cats = {}
local cats = {}
-- Error category
-- Error category
if #tStyles < 1 and cfg['error_category'] then
if #tStyles < 1 then
cats[#cats + 1] = cfg['error_category']
--cats[#cats + 1] = 'Uses TemplateStyles templates with errors'
end
end
-- TemplateStyles category
-- TemplateStyles category
titleObj = titleObj or mw.title.getCurrentTitle()
titleObj = titleObj or mw.title.getCurrentTitle()
local subpageBlacklist = {
['설명문서'] = true,
['연습장'] = true,
['연습장2'] = true,
['시험장'] = true
}
if (titleObj.namespace == 10 or titleObj.namespace == 828)
if (titleObj.namespace == 10 or titleObj.namespace == 828)
and not cfg['subpage_blacklist'][titleObj.subpageText]
and not subpageBlacklist[titleObj.subpageText]
then
then
local category = args.category or cfg['default_category']
local category = args.category
if category then
if not category then
cats[#cats + 1] = category
category = category or '틀스타일을 사용하는 틀'
end
end
if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
cats[#cats + 1] = category
if not yesno(args.noprotcat) 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
77번째 줄: 89번째 줄:
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 tsProt ~= currentProt and not addedLevelCat then
--cats[#cats + 1] = "Templates using TemplateStyles with a different protection level"
end
if 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("{{pp-") then
cats[#cats + 1] = cfg['missing_padlock_category']
--cats[#cats + 1] = "Templates using TemplateStyles without padlocks"
addedPadlockCat = true
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
96번째 줄: 103번째 줄:
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('[[분류:%s]]', cat)
end
end
return table.concat(cats)
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
end


return p
return p