Module:Uses TemplateStyles: Difference between revisions

No edit summary
 
m 1 revision imported: Content from Template:Legend on Wikipedia
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 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')
Line 16: Line 15:
end
end


function p.main(frame)
local function makeEditSup(pageName)
local origArgs = frame:getParent().args
return string.format('<sup>&lbrack;[[Special:Edit/%s|e]]&rbrack;</sup>', pageName)
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


function p._main(args, cfg)
-- Build just the "(sandbox)" suffix using the i18n message, without duplicating the main link.
local tStyles = mTableTools.compressSparseArray(args)
local function makeSandboxSuffix(tsSandboxPrefixed)
local box = p.renderBox(tStyles)
-- i18n message is: "$1 ([[$2|sandbox]])"
local trackingCategories = p.renderTrackingCategories(args, tStyles)
-- Passing empty $1 yields " ([[:...|sandbox]])" -> trim leading whitespace to get "(sandbox)" portion.
return box .. trackingCategories
local s = format('sandboxlink', '', ':' .. tsSandboxPrefixed)
return (s:gsub('^%s+', ''))
end
end


function p.renderBox(tStyles)
local function 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 = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
Line 42: Line 39:
local cfg = getConfig()
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 viewLink = string.format('[[:%s]]', ts)
local sandboxLink = nil
local editSup = makeEditSup(ts)
 
local out = viewLink .. editSup
 
-- Optional sandbox link + sandbox edit link
local tsTitle = mw.title.new(ts)
local tsTitle = mw.title.new(ts)
if tsTitle and cfg['sandbox_title'] then
if tsTitle and cfg['sandbox_title'] then
local tsSandboxTitle = mw.title.new(string.format(
local tsSandboxTitle = mw.title.new(string.format(
'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], 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)
local sandboxSuffix = makeSandboxSuffix(tsSandboxTitle.prefixedText)
local sandboxEditSup = makeEditSup(tsSandboxTitle.prefixedText)
out = out .. ' ' .. sandboxSuffix .. ' ' .. sandboxEditSup
end
end
end
end
tStylesLinks[i] = sandboxLink or link
 
tStylesLinks[i] = out
end
end
local tStylesList = mList.makeList('bulleted', tStylesLinks)
local tStylesList = mList.makeList('bulleted', tStylesLinks)
boxArgs.text = format(
boxArgs.text = format(
mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
mw.title.getCurrentTitle():inNamespaces(828, 829) and 'header-module' or 'header-template'
'\n' .. tStylesList
) .. '\n' .. tStylesList
end
end
boxArgs.type = 'notice'
 
boxArgs.small = true
boxArgs.image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
return mMessageBox.main('mbox', boxArgs)
return mMessageBox.main('mbox', boxArgs)
end
end


function p.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()
Line 93: Line 102:
local addedLevelCat = false
local addedLevelCat = false
local addedPadlockCat = false
local addedPadlockCat = false
for i, ts in ipairs(tStyles) do
for _, 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['protection_conflict_category'] and tsProt ~= currentProt and not addedLevelCat then
addedLevelCat = true
cats[#cats + 1] = cfg['protection_conflict_category']
end
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()
Line 105: Line 110:
cats[#cats + 1] = cfg['missing_padlock_category']
cats[#cats + 1] = cfg['missing_padlock_category']
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
Line 110: Line 123:
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
function p._main(args)
local cfg = getConfig()
if #args == 0 then
local prefixed = mw.title.getCurrentTitle().prefixedText
prefixed = prefixed:gsub("/doc", "")
args[1] = prefixed .. "/" .. cfg["default_subpage_name"]
end
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