Wikipidiya
bolwiki
https://bol.wikipedia.org/wiki/Peji_In_Siri
MediaWiki 1.47.0-wmf.18
first-letter
Media
Inmusamman
Mossa
Ruta
Rutta mossa
Wikipidiya
Wikipidiya mossa
Fayil
Fayil mossa
MediaWiki
MediaWiki mossa
Tempilet
Tempilet mossa
Taimako
Taimako mossa
Panni
Panni mossa
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Tempilet:Template rating
10
177
11643
882
2026-06-25T04:39:27Z
en>Jonesey95
0
Fix name of error category that is not an unknown parameter category
11643
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}}<!-- Escape empty required first unnamed parameter -->|{{#switch:{{Namespace detect|template=t|module=m|demospace={{{demospace|}}}|page={{{demopage|}}}}}
|m
|t = <!-- ***** IF IN MODULE OR TEMPLATE NAMESPACE ***** -->{{ombox
| type = notice
| image = {{#switch: {{lc:{{{1|}}}}}
| pre-alpha | prealpha | pa | experimental = [[File:Ambox warning blue construction.svg|40x40px|link=|alt=]]
| alpha | a = [[File:Greek lc alpha icon.svg|class=skin-invert|26x26px|link=|alt=]]
| beta | b = [[File:Greek lc beta icon.svg|class=skin-invert|40x40px|link=|alt=]]
| release | r | general | g | stable | protected | protect | p | semiprotected | semiprotect | semi = [[File:Green check.svg|40x40px|link=|alt=]]
| broken | br | unstable = [[File:Red x.svg|40x40px|link=|alt=]]
| deprecated | d | defunct = [[File:Historical.svg|40x40px|link=|alt=]]
}}
| style =
| textstyle =
| text = {{#switch: {{lc:{{{1|}}}}}
| pre-alpha | prealpha | pa | experimental = This [[Wikipedia:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}|{{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}]] is rated as [[:Category:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}s in pre-alpha development|pre-alpha]]. It is incomplete and may or may not be in active development. Do not use it in [[Wikipedia:Article namespace|article namespace]] pages. A {{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}} remains in pre-alpha until its developer, or another editor who adopts it if it is abandoned for some time, considers the basic structure complete.
| alpha | a = This [[Wikipedia:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}|{{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}]] is rated as [[:Category:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}s in alpha|alpha]]. It is ready for limited use and third-party feedback. It may be used on a small number of pages, but should be monitored closely. Suggestions for new features or adjustments to input and output are welcome.
| beta | b = This [[Wikipedia:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}|{{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}]] is rated as [[:Category:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}s in beta|beta]]. It is considered ready for widespread use, but as it is still relatively new, it should be applied with some caution to ensure results are as expected.
| release | r | general | g | stable | protected | protect | p | semiprotected | semiprotect | semi = This [[Wikipedia:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}|{{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}]] is rated as [[:Category:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}s for general use|ready for general use]]. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on [[Wikipedia:Help pages|help pages]] and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through [[Wikipedia:Template sandbox and test cases|sandbox testing]] rather than repeated trial-and-error editing.
| broken | br | unstable = This [[Wikipedia:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}|{{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}]] is rated as [[:Category:Unstable {{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}s|unstable]]. It has missing dependencies, compatibility issues, or output errors that make it unusable. Editors are encouraged to [[Special:EditPage/{{FULLPAGENAME}}|improve its compatibility]] or [[Wikipedia:Templates for discussion|nominate it for deletion]] if it cannot be fixed.
| deprecated | d | defunct = This [[Wikipedia:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}|{{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}]] is rated as '''[[:Category:Deprecated {{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}s|deprecated]]''' and defunct.{{#if:{{{replaced|}}}|{{space}}It is recommended editors use [[{{{replaced}}}]].}}{{#if:{{{message|}}}|{{space}}{{{message}}}}}
| #default = {{error|Page using [[Template:Template rating]] with <u>invalid</u> template or module rating in {{para|1}} parameter.}}[[Category:Pages using template rating template with invalid rating|{{FULLPAGENAME}}]]
}}
}}<!-- Categorize.
-->{{#if:{{{demopage|}}}{{{demospace|}}}||
{{#switch: {{lc:{{SUBPAGENAME}}}}
| doc | sandbox =<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true
| <!-- No category if user sets nocat=true -->
| {{#switch: {{lc:{{{1|}}}}}
| pre-alpha | prealpha | pa | experimental = [[Category:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}s in pre-alpha development|{{PAGENAME}}]]
| alpha | a = [[Category:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}s in alpha|{{PAGENAME}}]]
| beta | b = [[Category:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}s in beta|{{PAGENAME}}]]
| release | r | general | g | stable | protected | p | semiprotected | semiprotect | semi = [[Category:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}s for general use|{{PAGENAME}}]]
| deprecated | d | defunct = [[Category:Deprecated {{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}s|{{PAGENAME}}]]
| broken | br | unstable = [[Category:Unstable {{lc:{{NAMESPACE:{{{demopage|{{FULLPAGENAME}}}}}}}}}s|{{PAGENAME}}]]
}}
}}
}}
}}
| #default = <!-- ***** Error not in Template or Module namespaces ***** -->{{if preview|1={{error|Error: {{tl|Template rating}} can only be used on pages in the [[Wikipedia:Template namespace|Template:]] or [[Wikipedia:Module namespace|Module: namespaces]].}}}}[[Category:Pages with templates in the wrong namespace]]
}}<!-- End switch. -->|{{If preview|1={{error|Page using [[Template:Template rating]] with <u>empty</u> {{para|1}} module rating parameter.}}}}[[Category:Pages using template rating template with invalid rating|{{FULLPAGENAME}}]]<!--
-->}}<!-- End if. Display protection template if necessary, this will obviously show it for /doc page too since it uses {{FULLPAGENAME}}: -->{{#switch:{{Namespace detect|template=t|module=m|demospace={{{demospace|}}}}}
|t|m = {{#if:{{{suppress-pp|}}}
|
|{{#switch:{{#invoke:Effective protection level|edit|1={{{demopage|{{FULLPAGENAME}}}}}}}
|*|user = <!-- If not protected page, do nothing. -->
|#default = {{#ifeq:{{lc:{{SUBPAGENAME}}}}|doc
|<!-- {{#if:{{{2|}}}{{{doc-reason|}}}{{{3|}}}{{{doc-action|}}} --><!--
--><!-- | -->{{pp|{{{2|{{{doc-reason|}}}}}}|action={{{3|{{{doc-action|}}}}}}}}<!--
--><!-- }} -->
-->|{{pp|1={{{reason|{{{doc-reason|}}}}}}|action={{{action|{{{doc-action|}}}}}}|demolevel={{{demolevel|}}}}}<!--
-->}}<!--
-->}}<!--
-->}}
|#default = <!-- If not in template or module namespace, do nothing
-->}}<!--
End template, start tracking.
-->{{#invoke:Check for unknown parameters| check
| unknown = {{#if:{{{demopage|}}}{{{demospace|}}}||{{#switch:{{Namespace detect|template=t|module=m}}|m|t=[[Category:Pages using template rating template with unknown parameters|_VALUE_{{FULLPAGENAME}}]]}}}}
| preview = Page using [[Template:Template rating]] with unknown parameter "_VALUE_"
| ignoreblank=y | demospace | demopage | 1 | 2 | 3 | reason | action | doc-reason | doc-action | nocat | replaced | message | demolevel | suppress-pp | demopage
}}</includeonly><!-- End tracking. --><noinclude>
{{template rating/sandbox|release|nocat=true|demospace=template|demopage=template:template rating|demolevel=edit}}
{{mbox|text=The above template is a demo.}}
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
1uyrkb0aphrohrsebghuak589eymdnp
11644
8308
2026-09-07T03:19:00Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Template_rating]]
8308
wikitext
text/x-wiki
<includeonly>{{#switch:{{{1}}}
| pre-alpha = {{Ombox
| image = [[Fayil:Ambox_warning_blue_construction.svg|40px|link=]]
| text = This template/module is rated as <b>pre-alpha</b>. It is incomplete and may or may not be in active development. <b>Do not use it in article namespace pages.</b> A template remains in pre-alpha until its developer, or another editor who adopts it if it is abandoned for some time, considers the basic structure complete.}}[[Panni:Templates or Modules in pre-alpha stage]]
| alpha = {{Ombox
| type = content
| image = [[Fayil:Greek_lc_alpha_icon.svg|20px|link=]]
| text = This template/module is rated as <b>alpha</b>. It is ready for <b>limited use and third-party feedback</b>. It may be used on a <b>small number of pages</b>, but should be monitored closely. Suggestions for new features or adjustments to input and output are welcome.}}[[Panni:Templates or modules in alpha stage]]
| beta = {{Ombox
| type = style
| image = [[Fayil:Greek_lc_beta_icon.svg|20px|link=]]
| text = This template/module is rated as <b>beta</b>. It is considered ready for widespread use, but as it is still relatively new, it should be <b>applied with some caution</b> to ensure results are as expected.}}[[Panni:Templates or modules in beta stage]]
| release = {{Ombox
| style = border: 2px solid #181;
| image = [[Fayil:Green check.svg|40px|link=]]
| text = This template/module is rated as <b><span style="color:#181;">ready for general use.</span></b> It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be <b>developed through sandbox testing</b> rather than repeated trial-and-error editing.}}[[Panni:Templates or modules ready to use]]
| broken = {{Ombox
| type = delete
| image = [[Fayil:Red x.svg|40px|link=]]
| text = This template/module is rated as <b><span style="color:#b32424;">unstable</span></b>. It has missing dependencies, compatibility issues, or output errors that make it unusable. Editors are encouraged to <b>improve its compatibility</b> or nominate it for deletion if it cannot be fixed.}}[[Panni:Broken templates or modules]]
| deprecated = {{Ombox
| type = speedy
| image = [[Fayil:Historical.svg|30px|link=]]
| text = This template/module is rated as <b><span style="color:#b32424;">deprecated</span></b> and defunct.}}[[Panni:Deprecated templates or modules]]
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
rl3vdnlj43ligeygdy3ag55vf7i9o29
Module:List
828
247
11629
10702
2026-09-06T09:38:18Z
en>Primefac
0
deprecated parameter tracking cat empty; removing code
11629
Scribunto
text/plain
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes and TemplateStyles
data.classes = {}
data.templatestyles = ''
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Hlist/styles.css' }
}
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
}
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for _, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create('div')
for _, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for _, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return data.templatestyles .. tostring(root)
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
local list = p.renderList(data)
return list
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame, {
frameOnly = ((frame and frame.args and frame.args.frameonly or '') ~= ''),
valueFunc = function (key, value)
if not value or not mw.ustring.find(value, '%S') then return nil end
if mw.ustring.find(value, '^%s*[%*#;:]') then
return value
else
return value:match('^%s*(.-)%s*$')
end
return nil
end
})
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
lyheh2t5yqhjixmg8vlktt3t9sq2ewi
11630
11629
2026-09-07T03:19:00Z
RAPTOR7762
18
1 revision imported from [[:en:Module:List]]
11629
Scribunto
text/plain
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes and TemplateStyles
data.classes = {}
data.templatestyles = ''
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Hlist/styles.css' }
}
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
}
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for _, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create('div')
for _, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for _, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return data.templatestyles .. tostring(root)
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
local list = p.renderList(data)
return list
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame, {
frameOnly = ((frame and frame.args and frame.args.frameonly or '') ~= ''),
valueFunc = function (key, value)
if not value or not mw.ustring.find(value, '%S') then return nil end
if mw.ustring.find(value, '^%s*[%*#;:]') then
return value
else
return value:match('^%s*(.-)%s*$')
end
return nil
end
})
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
lyheh2t5yqhjixmg8vlktt3t9sq2ewi
Module:Namespace detect
828
260
11627
2014-04-05T17:01:23Z
en>Mr. Stradivarius
0
use demopage instead of page as the main "page" parameter
11627
Scribunto
text/plain
--[[
--------------------------------------------------------------------------------
-- --
-- NAMESPACE DETECT --
-- --
-- This module implements the {{namespace detect}} template in Lua, with a --
-- few improvements: all namespaces and all namespace aliases are supported, --
-- and namespace names are detected automatically for the local wiki. The --
-- module can also use the corresponding subject namespace value if it is --
-- used on a talk page. Parameter names can be configured for different wikis --
-- by altering the values in the "cfg" table in --
-- Module:Namespace detect/config. --
-- --
--------------------------------------------------------------------------------
--]]
local data = mw.loadData('Module:Namespace detect/data')
local argKeys = data.argKeys
local cfg = data.cfg
local mappings = data.mappings
local yesno = require('Module:Yesno')
local mArguments -- Lazily initialise Module:Arguments
local mTableTools -- Lazily initilalise Module:TableTools
local ustringLower = mw.ustring.lower
local p = {}
local function fetchValue(t1, t2)
-- Fetches a value from the table t1 for the first key in array t2 where
-- a non-nil value of t1 exists.
for i, key in ipairs(t2) do
local value = t1[key]
if value ~= nil then
return value
end
end
return nil
end
local function equalsArrayValue(t, value)
-- Returns true if value equals a value in the array t. Otherwise
-- returns false.
for i, arrayValue in ipairs(t) do
if value == arrayValue then
return true
end
end
return false
end
function p.getPageObject(page)
-- Get the page object, passing the function through pcall in case of
-- errors, e.g. being over the expensive function count limit.
if page then
local success, pageObject = pcall(mw.title.new, page)
if success then
return pageObject
else
return nil
end
else
return mw.title.getCurrentTitle()
end
end
-- Provided for backward compatibility with other modules
function p.getParamMappings()
return mappings
end
local function getNamespace(args)
-- This function gets the namespace name from the page object.
local page = fetchValue(args, argKeys.demopage)
if page == '' then
page = nil
end
local demospace = fetchValue(args, argKeys.demospace)
if demospace == '' then
demospace = nil
end
local subjectns = fetchValue(args, argKeys.subjectns)
local ret
if demospace then
-- Handle "demospace = main" properly.
if equalsArrayValue(argKeys.main, ustringLower(demospace)) then
ret = mw.site.namespaces[0].name
else
ret = demospace
end
else
local pageObject = p.getPageObject(page)
if pageObject then
if pageObject.isTalkPage then
-- Get the subject namespace if the option is set,
-- otherwise use "talk".
if yesno(subjectns) then
ret = mw.site.namespaces[pageObject.namespace].subject.name
else
ret = 'talk'
end
else
ret = pageObject.nsText
end
else
return nil -- return nil if the page object doesn't exist.
end
end
ret = ret:gsub('_', ' ')
return ustringLower(ret)
end
function p._main(args)
-- Check the parameters stored in the mappings table for any matches.
local namespace = getNamespace(args) or 'other' -- "other" avoids nil table keys
local params = mappings[namespace] or {}
local ret = fetchValue(args, params)
--[[
-- If there were no matches, return parameters for other namespaces.
-- This happens if there was no text specified for the namespace that
-- was detected or if the demospace parameter is not a valid
-- namespace. Note that the parameter for the detected namespace must be
-- completely absent for this to happen, not merely blank.
--]]
if ret == nil then
ret = fetchValue(args, argKeys.other)
end
return ret
end
function p.main(frame)
mArguments = require('Module:Arguments')
local args = mArguments.getArgs(frame, {removeBlanks = false})
local ret = p._main(args)
return ret or ''
end
function p.table(frame)
--[[
-- Create a wikitable of all subject namespace parameters, for
-- documentation purposes. The talk parameter is optional, in case it
-- needs to be excluded in the documentation.
--]]
-- Load modules and initialise variables.
mTableTools = require('Module:TableTools')
local namespaces = mw.site.namespaces
local cfg = data.cfg
local useTalk = type(frame) == 'table'
and type(frame.args) == 'table'
and yesno(frame.args.talk) -- Whether to use the talk parameter.
-- Get the header names.
local function checkValue(value, default)
if type(value) == 'string' then
return value
else
return default
end
end
local nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Namespace')
local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Aliases')
-- Put the namespaces in order.
local mappingsOrdered = {}
for nsname, params in pairs(mappings) do
if useTalk or nsname ~= 'talk' then
local nsid = namespaces[nsname].id
-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.
nsid = nsid + 1
mappingsOrdered[nsid] = params
end
end
mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)
-- Build the table.
local ret = '{| class="wikitable"'
.. '\n|-'
.. '\n! ' .. nsHeader
.. '\n! ' .. aliasesHeader
for i, params in ipairs(mappingsOrdered) do
for j, param in ipairs(params) do
if j == 1 then
ret = ret .. '\n|-'
.. '\n| <code>' .. param .. '</code>'
.. '\n| '
elseif j == 2 then
ret = ret .. '<code>' .. param .. '</code>'
else
ret = ret .. ', <code>' .. param .. '</code>'
end
end
end
ret = ret .. '\n|-'
.. '\n|}'
return ret
end
return p
j7kygz1y56jpz4doq0m2c6x1td5d8ar
11628
1123
2026-09-07T03:19:00Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Namespace_detect]]
1122
Scribunto
text/plain
--[[
--------------------------------------------------------------------------------
-- --
-- NAMESPACE DETECT --
-- --
-- This module implements the {{namespace detect}} template in Lua, with a --
-- few improvements: all namespaces and all namespace aliases are supported, --
-- and namespace names are detected automatically for the local wiki. The --
-- module can also use the corresponding subject namespace value if it is --
-- used on a talk page. Parameter names can be configured for different wikis --
-- by altering the values in the "cfg" table in --
-- Module:Namespace detect/config. --
-- --
--------------------------------------------------------------------------------
--]]
local data = mw.loadData('Module:Namespace detect/data')
local argKeys = data.argKeys
local cfg = data.cfg
local mappings = data.mappings
local yesno = require('Module:Yesno')
local mArguments -- Lazily initialise Module:Arguments
local mTableTools -- Lazily initilalise Module:TableTools
local ustringLower = mw.ustring.lower
local p = {}
local function fetchValue(t1, t2)
-- Fetches a value from the table t1 for the first key in array t2 where
-- a non-nil value of t1 exists.
for i, key in ipairs(t2) do
local value = t1[key]
if value ~= nil then
return value
end
end
return nil
end
local function equalsArrayValue(t, value)
-- Returns true if value equals a value in the array t. Otherwise
-- returns false.
for i, arrayValue in ipairs(t) do
if value == arrayValue then
return true
end
end
return false
end
function p.getPageObject(page)
-- Get the page object, passing the function through pcall in case of
-- errors, e.g. being over the expensive function count limit.
if page then
local success, pageObject = pcall(mw.title.new, page)
if success then
return pageObject
else
return nil
end
else
return mw.title.getCurrentTitle()
end
end
-- Provided for backward compatibility with other modules
function p.getParamMappings()
return mappings
end
local function getNamespace(args)
-- This function gets the namespace name from the page object.
local page = fetchValue(args, argKeys.demopage)
if page == '' then
page = nil
end
local demospace = fetchValue(args, argKeys.demospace)
if demospace == '' then
demospace = nil
end
local subjectns = fetchValue(args, argKeys.subjectns)
local ret
if demospace then
-- Handle "demospace = main" properly.
if equalsArrayValue(argKeys.main, ustringLower(demospace)) then
ret = mw.site.namespaces[0].name
else
ret = demospace
end
else
local pageObject = p.getPageObject(page)
if pageObject then
if pageObject.isTalkPage then
-- Get the subject namespace if the option is set,
-- otherwise use "talk".
if yesno(subjectns) then
ret = mw.site.namespaces[pageObject.namespace].subject.name
else
ret = 'talk'
end
else
ret = pageObject.nsText
end
else
return nil -- return nil if the page object doesn't exist.
end
end
ret = ret:gsub('_', ' ')
return ustringLower(ret)
end
function p._main(args)
-- Check the parameters stored in the mappings table for any matches.
local namespace = getNamespace(args) or 'other' -- "other" avoids nil table keys
local params = mappings[namespace] or {}
local ret = fetchValue(args, params)
--[[
-- If there were no matches, return parameters for other namespaces.
-- This happens if there was no text specified for the namespace that
-- was detected or if the demospace parameter is not a valid
-- namespace. Note that the parameter for the detected namespace must be
-- completely absent for this to happen, not merely blank.
--]]
if ret == nil then
ret = fetchValue(args, argKeys.other)
end
return ret
end
function p.main(frame)
mArguments = require('Module:Arguments')
local args = mArguments.getArgs(frame, {removeBlanks = false})
local ret = p._main(args)
return ret or ''
end
function p.table(frame)
--[[
-- Create a wikitable of all subject namespace parameters, for
-- documentation purposes. The talk parameter is optional, in case it
-- needs to be excluded in the documentation.
--]]
-- Load modules and initialise variables.
mTableTools = require('Module:TableTools')
local namespaces = mw.site.namespaces
local cfg = data.cfg
local useTalk = type(frame) == 'table'
and type(frame.args) == 'table'
and yesno(frame.args.talk) -- Whether to use the talk parameter.
-- Get the header names.
local function checkValue(value, default)
if type(value) == 'string' then
return value
else
return default
end
end
local nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Namespace')
local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Aliases')
-- Put the namespaces in order.
local mappingsOrdered = {}
for nsname, params in pairs(mappings) do
if useTalk or nsname ~= 'talk' then
local nsid = namespaces[nsname].id
-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.
nsid = nsid + 1
mappingsOrdered[nsid] = params
end
end
mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)
-- Build the table.
local ret = '{| class="wikitable"'
.. '\n|-'
.. '\n! ' .. nsHeader
.. '\n! ' .. aliasesHeader
for i, params in ipairs(mappingsOrdered) do
for j, param in ipairs(params) do
if j == 1 then
ret = ret .. '\n|-'
.. '\n| <code>' .. param .. '</code>'
.. '\n| '
elseif j == 2 then
ret = ret .. '<code>' .. param .. '</code>'
else
ret = ret .. ', <code>' .. param .. '</code>'
end
end
end
ret = ret .. '\n|-'
.. '\n|}'
return ret
end
return p
j7kygz1y56jpz4doq0m2c6x1td5d8ar
Module:Protection banner
828
268
11633
11253
2026-08-30T17:20:50Z
en>Primefac
0
Primefac moved page [[Module:Protection banner]] to [[Module:Protected page]]: update following [[Special:Permalink/1372151970#Requested_move_16_August_2026|RM]]
11633
Scribunto
text/plain
return require [[Module:Protected page]]
szdce6cijto5md3vglrgsqmjww4leo2
11634
11633
2026-09-07T03:19:00Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Protection_banner]]
11633
Scribunto
text/plain
return require [[Module:Protected page]]
szdce6cijto5md3vglrgsqmjww4leo2
Tempilet:Color
10
1329
11635
10687
2026-07-06T06:00:56Z
en>Izno
0
Restored revision 1240326979 by [[Special:Contributions/Jonesey95|Jonesey95]] ([[User talk:Jonesey95|talk]]): Revert per talk page
11635
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>ifsubst|1=<span|2=<templatestyles src="Template:Color/styles.css" /><span class="tmp-color"}} style="color:{{{1|}}}">{{{2|{{{1|}}}}}}<includeonly></span></includeonly><noinclude>{{Documentation}}<!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --></noinclude>
mir66vdgg1ofukylprfapm1rh3vaahk
11636
10688
2026-09-07T03:19:00Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Color]]
10687
wikitext
text/x-wiki
<span style="background:{{{bg|{{{3|transparent}}}}}};{{#invoke:String|replace|color:{{#switch:{{{1}}}|b=#000|w=#FFF|=red|{{{1}}}}};font-weight:{{{bold|{{{b|{{#switch:{{{6}}}|b=7|bold=9|4}}00}}}}}};{{{style|{{{css|{{{5|}}}}}}}}}|[
]||plain=false}}" title="{{{title|{{{bg|{{{4|transparent}}}}}}}}}">{{{2|{{0|!}}}}}</span><noinclude>
{{documentation}}
</noinclude>
rc0p6n6hke6px3112zdnsa1l2gnuhtn
Module:Transclusion count/data/C
828
1498
11639
11322
2026-09-06T05:07:34Z
en>Ahechtbot
0
[[Wikipedia:BOT|Bot]]: Updated page.
11639
Scribunto
text/plain
return {
["C"] = 802000,
["C-Class"] = 17000,
["C-SPAN"] = 13000,
["C-cmn"] = 2800,
["C-pl"] = 51000,
["C."] = 353000,
["CAN"] = 20000,
["CANelec"] = 18000,
["CANelec/gain"] = 3500,
["CANelec/hold"] = 6700,
["CANelec/source"] = 11000,
["CANelec/top"] = 9000,
["CANelec/total"] = 9600,
["CAS"] = 3800,
["CAS_Registry_Number"] = 3800,
["CBB_Yearly_Record_End"] = 3500,
["CBB_Yearly_Record_Entry"] = 3600,
["CBB_Yearly_Record_Start"] = 3400,
["CBB_Yearly_Record_Subhead"] = 4200,
["CBB_Yearly_Record_Subtotal"] = 3300,
["CBB_roster/Footer"] = 11000,
["CBB_roster/Header"] = 11000,
["CBB_roster/Player"] = 11000,
["CBB_schedule_end"] = 14000,
["CBB_schedule_entry"] = 14000,
["CBB_schedule_start"] = 14000,
["CBB_standings_end"] = 19000,
["CBB_standings_entry"] = 19000,
["CBB_standings_start"] = 19000,
["CBB_yearly_record_end"] = 4700,
["CBB_yearly_record_end/legend"] = 4100,
["CBB_yearly_record_entry"] = 4600,
["CBB_yearly_record_start"] = 4500,
["CBB_yearly_record_subhead"] = 4300,
["CBB_yearly_record_subtotal"] = 4400,
["CBSB_Standings_End"] = 2700,
["CBSB_Standings_Entry"] = 2700,
["CBSB_Standings_Start"] = 2600,
["CBSB_link"] = 4100,
["CBSB_standings_end"] = 5500,
["CBSB_standings_entry"] = 5600,
["CBSB_standings_start"] = 5500,
["CC0"] = 4000,
["CC_BY-SA_2.5"] = 2100,
["CC_BY-SA_2.5,_2.0,_1.0"] = 2100,
["CC_BY-SA_3.0"] = 20000,
["CC_BY-SA_3.0_migrated"] = 19000,
["CC_BY-SA_4.0"] = 13000,
["CC_BY_2.5"] = 2600,
["CC_BY_3.0"] = 7000,
["CFB_Standings_End"] = 16000,
["CFB_Standings_Entry"] = 16000,
["CFB_Standings_Start"] = 16000,
["CFB_Yearly_Record_End"] = 7900,
["CFB_Yearly_Record_End/legend"] = 2900,
["CFB_Yearly_Record_Entry"] = 7900,
["CFB_Yearly_Record_Start"] = 7900,
["CFB_Yearly_Record_Subhead"] = 8000,
["CFB_Yearly_Record_Subtotal"] = 7800,
["CFB_schedule"] = 29000,
["CFB_schedule_entry"] = 22000,
["CFB_standings_end"] = 39000,
["CFB_standings_entry"] = 39000,
["CFB_standings_start"] = 39000,
["CFL_Year"] = 7300,
["CGF_year"] = 3800,
["CGNDB_URL"] = 5400,
["CHE"] = 12000,
["CHI"] = 3300,
["CHL"] = 4300,
["CHN"] = 15000,
["CN"] = 4000,
["CO2"] = 3500,
["COI"] = 14000,
["COIUL"] = 131000,
["COI_editnotice"] = 7800,
["COL"] = 5600,
["COLON"] = 14000,
["CRI"] = 2300,
["CRO"] = 6600,
["CS1_config"] = 15000,
["CSK"] = 2800,
["CSS_crop"] = 2100,
["CSS_image_crop"] = 9600,
["CUB"] = 4200,
["CURRENTDATE"] = 3600,
["CYP"] = 2200,
["CZE"] = 16000,
["Calendar"] = 2500,
["Calendar/styles.css"] = 2800,
["California/color"] = 12000,
["Call_sign_disambiguation"] = 3100,
["Campaignbox"] = 26000,
["CanProvName"] = 19000,
["CanadaByProvinceCatNav"] = 9500,
["CanadaProvinceThe"] = 4500,
["Canada_NTS_Map_Sheet"] = 2200,
["Canada_by_province_category_navigation"] = 9900,
["Canadian_English"] = 13000,
["Canadian_Parliament_links"] = 5100,
["Canadian_election_result"] = 18000,
["Canadian_election_result/gain"] = 3600,
["Canadian_election_result/hold"] = 7000,
["Canadian_election_result/source"] = 13000,
["Canadian_election_result/top"] = 19000,
["Canadian_election_result/total"] = 14000,
["Canadian_party_colour"] = 11000,
["Canadian_party_colour/colour"] = 23000,
["Canadian_party_colour/colour/default"] = 23000,
["Canadian_party_colour/name"] = 19000,
["Canadian_party_colour/name/default"] = 8300,
["Canadian_province_name"] = 19000,
["Canned_search"] = 8500,
["Cascite"] = 17000,
["Caselaw_source"] = 4800,
["Cassini-Ehess"] = 3300,
["Cast_listing"] = 30000,
["Castlist"] = 5800,
["Cat"] = 504000,
["CatAutoTOC"] = 372000,
["CatRel"] = 4100,
["CatTrack"] = 20000,
["Cat_class"] = 6100,
["Cat_main"] = 149000,
["Cat_more"] = 102000,
["Cat_more_if_exists"] = 29000,
["Cat_see_also"] = 3800,
["Catalog_lookup_link"] = 61000,
["Catalog_of_Fishes"] = 9800,
["Catalogue_of_Life"] = 24000,
["Category"] = 2400,
["Category-Class"] = 14000,
["Category-inline"] = 11000,
["Category_TOC"] = 81000,
["Category_U.S._State_elections_by_year"] = 7500,
["Category_U.S._State_elections_by_year/core"] = 7500,
["Category_class"] = 25000,
["Category_described_in_year"] = 6400,
["Category_diffuse"] = 11000,
["Category_disambiguation"] = 2700,
["Category_explanation"] = 416000,
["Category_handler"] = 2730000,
["Category_if_exists"] = 130000,
["Category_ifexist"] = 4900,
["Category_importance"] = 8800,
["Category_link"] = 725000,
["Category_link/core"] = 725000,
["Category_link_if_exists"] = 81000,
["Category_link_with_count"] = 9300,
["Category_link_without_namespace"] = 803000,
["Category_links"] = 9900,
["Category_main_article"] = 221000,
["Category_more"] = 143000,
["Category_more_if_exists"] = 49000,
["Category_ordered_by_date"] = 13000,
["Category_other"] = 1130000,
["Category_pair"] = 2200,
["Category_redirect"] = 159000,
["Category_redirect/core"] = 159000,
["Category_see_also"] = 55000,
["Category_see_also/Category_pair_check"] = 55000,
["Category_see_also_if_exists"] = 95000,
["Category_see_also_if_exists_2"] = 101000,
["Category_series_navigation"] = 599000,
["Category_title"] = 2400,
["Catexp"] = 5900,
["CathEncy"] = 2300,
["Catholic"] = 3700,
["Catholic_Encyclopedia"] = 5100,
["Catmain"] = 29000,
["Catmore"] = 9800,
["Catseealso"] = 2300,
["Cbb_link"] = 10000,
["Cbignore"] = 132000,
["Cbsb_link"] = 2500,
["Cc-by-2.5"] = 2600,
["Cc-by-3.0"] = 7000,
["Cc-by-sa-2.5"] = 2100,
["Cc-by-sa-2.5,2.0,1.0"] = 2100,
["Cc-by-sa-3.0"] = 20000,
["Cc-by-sa-3.0-migrated"] = 19000,
["Cc-by-sa-4.0"] = 13000,
["Cc-zero"] = 3800,
["CensusAU"] = 9100,
["Census_2016_AUS"] = 5700,
["Census_2021_AUS"] = 6200,
["Cent"] = 6900,
["Center"] = 301000,
["Centered_quote"] = 37000,
["Centralized_discussion"] = 7300,
["Centralized_discussion/core"] = 7200,
["Centralized_discussion/styles.css"] = 7200,
["Centre"] = 4200,
["Century"] = 16000,
["Century_name_from_decade"] = 2400,
["Century_name_from_decade_or_year"] = 127000,
["Century_name_from_title_decade"] = 7600,
["Century_name_from_title_year"] = 9300,
["Certification_Cite_Ref"] = 38000,
["Certification_Table_Bottom"] = 37000,
["Certification_Table_Entry"] = 39000,
["Certification_Table_Entry/Foot"] = 37000,
["Certification_Table_Entry/Foot/helper"] = 37000,
["Certification_Table_Entry/MexicanAward"] = 2400,
["Certification_Table_Entry/Region"] = 38000,
["Certification_Table_Entry/Sales"] = 37000,
["Certification_Table_Entry/Sales/AustrianPeriod"] = 2500,
["Certification_Table_Entry/Sales/BelgianPeriod"] = 2400,
["Certification_Table_Entry/Sales/DanishPeriod"] = 4400,
["Certification_Table_Entry/Sales/DanishPeriodHelper1"] = 4400,
["Certification_Table_Entry/Sales/DanishPeriodHelper2"] = 4400,
["Certification_Table_Entry/Sales/FrenchPeriod"] = 2300,
["Certification_Table_Entry/Sales/FrenchPeriodAlbum"] = 2100,
["Certification_Table_Entry/Sales/GermanPeriod"] = 4100,
["Certification_Table_Entry/Sales/ItalianHelper"] = 4500,
["Certification_Table_Entry/Sales/MexicanSales"] = 2200,
["Certification_Table_Entry/Sales/NewZealandPeriod"] = 7900,
["Certification_Table_Entry/Sales/SpanishSinglesPeriod"] = 2800,
["Certification_Table_Entry/Sales/SwedishPeriod"] = 2300,
["Certification_Table_Separator"] = 3300,
["Certification_Table_Top"] = 39000,
["Cfb_link"] = 26000,
["Cfd_all"] = 6500,
["Cfm_full"] = 2700,
["Cfr_full"] = 3500,
["Chart_bottom"] = 4500,
["Chart_top"] = 4500,
["Check_completeness_of_transclusions"] = 65000,
["Check_talk"] = 64000,
["Check_talk_wp"] = 1460000,
["Check_winner_by_scores"] = 16000,
["CheckedSockpuppet"] = 7200,
["Checked_sockpuppet"] = 18000,
["Checkedsockpuppet"] = 5300,
["Checkip"] = 12000,
["Checkuser"] = 90000,
["Checkuserblock-account"] = 46000,
["Chem"] = 6000,
["Chem/atom"] = 5900,
["Chem/link"] = 6000,
["Chem2"] = 11000,
["Chem_molar_mass"] = 22000,
["Chem_molar_mass/format"] = 22000,
["Chembox"] = 16000,
["Chembox/styles.css"] = 16000,
["Chembox_3DMet"] = 15000,
["Chembox_AllOtherNames"] = 14000,
["Chembox_AllOtherNames/format"] = 14000,
["Chembox_Appearance"] = 7200,
["Chembox_BoilingPt"] = 4200,
["Chembox_CASNo"] = 15000,
["Chembox_CASNo/format"] = 15000,
["Chembox_CalcTemperatures"] = 7600,
["Chembox_ChEBI"] = 15000,
["Chembox_ChEBI/format"] = 15000,
["Chembox_ChEMBL"] = 15000,
["Chembox_ChEMBL/format"] = 15000,
["Chembox_ChemSpiderID"] = 15000,
["Chembox_ChemSpiderID/format"] = 15000,
["Chembox_CompTox"] = 15000,
["Chembox_CompTox/format"] = 15000,
["Chembox_Datapage_check"] = 16000,
["Chembox_Density"] = 5700,
["Chembox_DrugBank"] = 15000,
["Chembox_DrugBank/format"] = 15000,
["Chembox_ECHA"] = 8300,
["Chembox_ECNumber"] = 15000,
["Chembox_ECNumber/format"] = 15000,
["Chembox_Elements"] = 15000,
["Chembox_Elements/molecular_formula"] = 21000,
["Chembox_FlashPt"] = 2100,
["Chembox_Footer"] = 15000,
["Chembox_Footer/tracking"] = 16000,
["Chembox_GHS_(set)"] = 4500,
["Chembox_Hazards"] = 13000,
["Chembox_IUPHAR_ligand"] = 15000,
["Chembox_IUPHAR_ligand/format"] = 15000,
["Chembox_Identifiers"] = 15000,
["Chembox_InChI"] = 15000,
["Chembox_InChI/format"] = 15000,
["Chembox_Indexlist"] = 15000,
["Chembox_Jmol"] = 15000,
["Chembox_Jmol/format"] = 15000,
["Chembox_KEGG"] = 15000,
["Chembox_KEGG/format"] = 15000,
["Chembox_MeltingPt"] = 6600,
["Chembox_OtherCpds"] = 2100,
["Chembox_Properties"] = 15000,
["Chembox_PubChem"] = 15000,
["Chembox_PubChem/format"] = 15000,
["Chembox_RTECS"] = 15000,
["Chembox_RTECS/format"] = 15000,
["Chembox_Related"] = 4200,
["Chembox_SMILES"] = 15000,
["Chembox_SMILES/format"] = 15000,
["Chembox_SolubilityInWater"] = 4500,
["Chembox_Structure"] = 2400,
["Chembox_UNII"] = 15000,
["Chembox_UNII/format"] = 15000,
["Chembox_headerbar"] = 16000,
["Chembox_image"] = 14000,
["Chembox_image_cell"] = 14000,
["Chembox_image_sbs"] = 14000,
["Chembox_parametercheck"] = 15000,
["Chembox_setDatarow"] = 5500,
["Chembox_setHeader"] = 5500,
["Chembox_templatePar/formatPreviewMessage"] = 16000,
["Chembox_verification"] = 6900,
["Chemspidercite"] = 11000,
["Chessgames_player"] = 3800,
["Chinese"] = 3500,
["Circa"] = 470000,
["Circular_reference"] = 4100,
["Citation"] = 413000,
["Citation/make_link"] = 7900,
["Citation/styles.css"] = 53000,
["Citation_needed"] = 637000,
["Citation_needed_span"] = 3600,
["Citation_style"] = 4500,
["Cite_AV_media"] = 81000,
["Cite_AV_media_notes"] = 34000,
["Cite_Appletons'"] = 2400,
["Cite_Australian_Dictionary_of_Biography"] = 5000,
["Cite_Box_Office_Mojo"] = 2500,
["Cite_Catholic_Encyclopedia"] = 8600,
["Cite_DCB"] = 3300,
["Cite_DGRBM"] = 2200,
["Cite_DNB"] = 20000,
["Cite_EB1911"] = 26000,
["Cite_FTP"] = 2500,
["Cite_GBIF"] = 4300,
["Cite_GNIS"] = 2400,
["Cite_Gaia_DR3"] = 3100,
["Cite_Google_Maps"] = 20000,
["Cite_Hansard"] = 2700,
["Cite_IUCN"] = 71000,
["Cite_Instagram"] = 7500,
["Cite_Jewish_Encyclopedia"] = 3200,
["Cite_LCDB"] = 2000,
["Cite_Metacritic"] = 2300,
["Cite_NIE"] = 3500,
["Cite_NSW_Parliament"] = 3300,
["Cite_NSW_SHR"] = 2700,
["Cite_NatureServe"] = 3100,
["Cite_ODNB"] = 22000,
["Cite_OED"] = 2500,
["Cite_POWO"] = 6600,
["Cite_Q"] = 17000,
["Cite_QHR"] = 3100,
["Cite_QPN"] = 4100,
["Cite_Rotten_Tomatoes"] = 2900,
["Cite_Rowlett"] = 2500,
["Cite_Russian_law"] = 7800,
["Cite_Ryan"] = 3300,
["Cite_SNL"] = 2100,
["Cite_Sports-Reference"] = 55000,
["Cite_USGov"] = 13000,
["Cite_WoRMS"] = 13000,
["Cite_act"] = 4000,
["Cite_arXiv"] = 7100,
["Cite_bcgnis"] = 3700,
["Cite_book"] = 1910000,
["Cite_certification"] = 43000,
["Cite_certification/Title"] = 40000,
["Cite_certification/URL"] = 43000,
["Cite_certification/archivedate"] = 7700,
["Cite_certification/archiveurl"] = 7700,
["Cite_cgndb"] = 5400,
["Cite_comic"] = 2100,
["Cite_conference"] = 23000,
["Cite_court"] = 6900,
["Cite_dictionary"] = 3600,
["Cite_document"] = 2000,
["Cite_encyclopedia"] = 244000,
["Cite_episode"] = 20000,
["Cite_gnis"] = 35000,
["Cite_instagram"] = 3100,
["Cite_interview"] = 11000,
["Cite_iucn"] = 70000,
["Cite_journal"] = 1180000,
["Cite_legislation_UK"] = 4000,
["Cite_magazine"] = 383000,
["Cite_map"] = 60000,
["Cite_news"] = 1940000,
["Cite_newspaper"] = 2000,
["Cite_newspaper_The_Times"] = 7200,
["Cite_patent"] = 7300,
["Cite_patent/authors"] = 6100,
["Cite_patent/core"] = 7600,
["Cite_peakbagger"] = 5300,
["Cite_podcast"] = 6300,
["Cite_press_release"] = 86000,
["Cite_report"] = 77000,
["Cite_rowlett"] = 2500,
["Cite_ship_register"] = 2000,
["Cite_simbad"] = 5700,
["Cite_sports-reference"] = 60000,
["Cite_taxon"] = 5600,
["Cite_tech_report"] = 3100,
["Cite_thesis"] = 50000,
["Cite_tweet"] = 48000,
["Cite_video"] = 13000,
["Cite_video_game"] = 3500,
["Cite_web"] = 5430000,
["Cite_wikisource"] = 7100,
["Cite_wikisource/make_link"] = 65000,
["Citeweb"] = 4300,
["Civil_navigation"] = 2100,
["Cjersey"] = 3000,
["Cl"] = 219000,
["Clade"] = 10000,
["Clade/styles.css"] = 10000,
["Clarification_needed"] = 2600,
["Clarify"] = 45000,
["Class"] = 38000,
["Class/colour"] = 19000,
["Class/icon"] = 21000,
["Class_mask"] = 463000,
["Classicon"] = 5200,
["Clc"] = 7400,
["Cleanup"] = 8300,
["Cleanup_reorganize"] = 2300,
["Cleanup_rewrite"] = 6800,
["Clear"] = 3760000,
["Clear_left"] = 23000,
["Clear_right"] = 2800,
["Clerk_Request"] = 2500,
["Clerk_note"] = 11000,
["Clerknote"] = 8600,
["Clickable_button"] = 1870000,
["Clickable_button_2"] = 227000,
["Closed_access"] = 5600,
["Closed_peer_review_page"] = 3200,
["Closed_rfc_bottom"] = 2300,
["Closed_rfc_top"] = 2900,
["Clr"] = 3100,
["Club_players_category"] = 9500,
["Clubplayerscat"] = 9500,
["Cmbox"] = 540000,
["Cn"] = 114000,
["Cnote2"] = 2900,
["Cnote2_Begin"] = 2900,
["Cnote2_End"] = 2900,
["Coat_of_arms"] = 2500,
["Cob"] = 15000,
["Code"] = 188000,
["Cof_family"] = 4600,
["Cof_genus"] = 5400,
["Col-1-of-2"] = 2400,
["Col-2"] = 186000,
["Col-2-of-2"] = 2300,
["Col-3"] = 11000,
["Col-4"] = 3800,
["Col-begin"] = 232000,
["Col-begin/styles.css"] = 232000,
["Col-break"] = 229000,
["Col-end"] = 231000,
["Col-float"] = 4900,
["Col-float-break"] = 4800,
["Col-float-end"] = 4800,
["Col-float/styles.css"] = 4900,
["Col-start"] = 9900,
["Col_div"] = 2200,
["Colbegin"] = 24000,
["Colend"] = 27000,
["Collapse"] = 8900,
["Collapse_bottom"] = 57000,
["Collapse_top"] = 57000,
["Collapse_top/styles.css"] = 57000,
["Collapsebottom"] = 4100,
["Collapsed_infobox_section_begin"] = 4500,
["Collapsed_infobox_section_begin/cont"] = 4500,
["Collapsed_infobox_section_begin/styles.css"] = 4500,
["Collapsed_infobox_section_end"] = 4500,
["Collapsetop"] = 4100,
["Collapsible_list"] = 68000,
["Collapsible_option"] = 152000,
["Colledge:_Ships_RN"] = 3000,
["College"] = 12000,
["CollegePrimaryHeader"] = 8300,
["CollegePrimaryStyle"] = 111000,
["CollegeSecondaryStyle"] = 11000,
["College_Athlete_Recruit_End"] = 2800,
["College_Athlete_Recruit_Entry"] = 2900,
["College_Athlete_Recruit_Start"] = 2900,
["College_athlete_recruit_end"] = 5000,
["College_athlete_recruit_entry"] = 5200,
["College_athlete_recruit_start"] = 5200,
["College_color_list"] = 4400,
["College_sports_team_link"] = 31000,
["Colon"] = 20000,
["Color"] = 506000,
["Color/styles.css"] = 506000,
["Color_box"] = 86000,
["Colorbox"] = 2600,
["Colorbull"] = 4600,
["Colored_link"] = 106000,
["Coloredlink"] = 3200,
["Colors"] = 3600,
["Colour"] = 5600,
["Colour_box"] = 2500,
["Coloured_link"] = 12000,
["Column"] = 4300,
["Column/styles.css"] = 4400,
["Columns-end"] = 4000,
["Columns-list"] = 126000,
["Columns-start"] = 4000,
["Comic_Book_DB"] = 3500,
["Comicbookdb"] = 3400,
["Comics-replaceability"] = 2700,
["Comics_infobox_sec/formcat"] = 3400,
["Comics_infobox_sec/genre"] = 4200,
["Comics_infobox_sec/genrecat"] = 3800,
["Comics_infobox_sec/styles.css"] = 8100,
["Comma-separated_list"] = 3700,
["Comma-separated_list/styles.css"] = 3700,
["Comma_separated_entries"] = 523000,
["Comment"] = 7700,
["Committed_identity"] = 3200,
["Committed_identity/styles.css"] = 3200,
["Commons"] = 73000,
["Commons-inline"] = 25000,
["Commons_cat"] = 45000,
["Commons_category"] = 906000,
["Commons_category-inline"] = 178000,
["Commons_category_inline"] = 5700,
["Commonscat"] = 59000,
["Commonscat-inline"] = 14000,
["Commonscat_inline"] = 2200,
["Commonscatinline"] = 7200,
["Compact_TOC"] = 7300,
["Compact_ToC"] = 3200,
["Compose_molecular_formula"] = 2400,
["Composition_bar"] = 13000,
["Confirmed"] = 20000,
["Confused"] = 3200,
["Confusing"] = 2400,
["CongBio"] = 9400,
["CongLinks"] = 4800,
["Connected_contributor"] = 21000,
["Connected_contributor_(paid)"] = 10000,
["Constellation_navbox"] = 10000,
["Container"] = 14000,
["Container_cat"] = 9100,
["Container_category"] = 93000,
["Containercat"] = 2800,
["Contains_special_characters"] = 5300,
["Contains_special_characters/core"] = 5300,
["Contains_special_characters/styles.css"] = 5300,
["Content_category"] = 7900,
["Contentious_topics/Additional_restrictions.json"] = 21000,
["Contentious_topics/Arab-Israeli_editnotice"] = 6900,
["Contentious_topics/Arab-Israeli_talk_notice"] = 6100,
["Contentious_topics/Category_database.json"] = 21000,
["Contentious_topics/Restrictions_definition.json"] = 21000,
["Contentious_topics/Standard_set.json"] = 21000,
["Contentious_topics/list"] = 30000,
["Contentious_topics/page_restriction_editnotice_base"] = 7400,
["Contentious_topics/page_restriction_talk_notice"] = 2700,
["Contentious_topics/talk_notice"] = 21000,
["Context"] = 2600,
["Continent2continental"] = 46000,
["Continent_adjective_to_noun"] = 10000,
["Continental2continent"] = 23000,
["Controversial"] = 3000,
["Convert"] = 1420000,
["Convert_abbreviated"] = 174000,
["Convinfobox"] = 308000,
["Coord"] = 1400000,
["Coord_missing"] = 70000,
["Coord_missing/CheckCat"] = 69000,
["Coords"] = 6600,
["Copied"] = 22000,
["Copy_edit"] = 2000,
["Copy_to_Commons"] = 2600,
["Copy_to_Wikimedia_Commons"] = 86000,
["Copy_to_Wikimedia_Commons_in"] = 4300,
["Cospar"] = 2800,
["Cot"] = 14000,
["Count"] = 1030000,
["Country2continent"] = 125000,
["Country2continental"] = 32000,
["Country2nationality"] = 35000,
["Country2parent"] = 36000,
["Country2parent/core"] = 36000,
["CountryPrefixThe"] = 65000,
["Country_abbreviation"] = 94000,
["Country_alias"] = 17000,
["Country_at_games_navbox"] = 5800,
["Country_at_games_navbox/below"] = 5800,
["Country_data"] = 12000,
["Country_data_AFG"] = 2600,
["Country_data_ALB"] = 7300,
["Country_data_ALG"] = 11000,
["Country_data_AND"] = 3700,
["Country_data_ANG"] = 4500,
["Country_data_ARG"] = 53000,
["Country_data_ARM"] = 8400,
["Country_data_AUS"] = 89000,
["Country_data_AUT"] = 53000,
["Country_data_AZE"] = 11000,
["Country_data_Afghanistan"] = 21000,
["Country_data_Alabama"] = 2600,
["Country_data_Alaska"] = 2100,
["Country_data_Albania"] = 35000,
["Country_data_Alberta"] = 3100,
["Country_data_Algeria"] = 47000,
["Country_data_American_Samoa"] = 2900,
["Country_data_Andorra"] = 9400,
["Country_data_Angola"] = 21000,
["Country_data_Anguilla"] = 2400,
["Country_data_Antigua_and_Barbuda"] = 6500,
["Country_data_Apulia"] = 7900,
["Country_data_Argentina"] = 151000,
["Country_data_Arizona"] = 2500,
["Country_data_Arkansas"] = 2800,
["Country_data_Armenia"] = 46000,
["Country_data_Aruba"] = 4000,
["Country_data_Australia"] = 274000,
["Country_data_Austria"] = 144000,
["Country_data_Austria-Hungary"] = 2300,
["Country_data_Azerbaijan"] = 51000,
["Country_data_BAH"] = 4700,
["Country_data_BAN"] = 4500,
["Country_data_BAR"] = 2700,
["Country_data_BDI"] = 2000,
["Country_data_BEL"] = 60000,
["Country_data_BEN"] = 2000,
["Country_data_BER"] = 2500,
["Country_data_BFA"] = 2000,
["Country_data_BHR"] = 5800,
["Country_data_BIH"] = 14000,
["Country_data_BLR"] = 26000,
["Country_data_BOL"] = 6700,
["Country_data_BOT"] = 3200,
["Country_data_BRA"] = 65000,
["Country_data_BUL"] = 31000,
["Country_data_Bahamas"] = 11000,
["Country_data_Bahrain"] = 22000,
["Country_data_Bangladesh"] = 34000,
["Country_data_Barbados"] = 8800,
["Country_data_Belarus"] = 90000,
["Country_data_Belgium"] = 156000,
["Country_data_Belize"] = 5300,
["Country_data_Benin"] = 8100,
["Country_data_Bermuda"] = 6400,
["Country_data_Bhutan"] = 4900,
["Country_data_Bolivia"] = 24000,
["Country_data_Bosnia_and_Herzegovina"] = 53000,
["Country_data_Botswana"] = 10000,
["Country_data_Brazil"] = 170000,
["Country_data_British_Columbia"] = 3700,
["Country_data_British_Empire"] = 2100,
["Country_data_British_Raj"] = 2500,
["Country_data_British_Virgin_Islands"] = 3400,
["Country_data_Brunei"] = 6900,
["Country_data_Bulgaria"] = 101000,
["Country_data_Burkina_Faso"] = 11000,
["Country_data_Burma"] = 2300,
["Country_data_Burundi"] = 6900,
["Country_data_CAM"] = 2600,
["Country_data_CAN"] = 69000,
["Country_data_CGO"] = 2500,
["Country_data_CHE"] = 5900,
["Country_data_CHI"] = 20000,
["Country_data_CHL"] = 2400,
["Country_data_CHN"] = 49000,
["Country_data_CIV"] = 8700,
["Country_data_CMR"] = 8800,
["Country_data_COD"] = 3500,
["Country_data_COL"] = 28000,
["Country_data_CPV"] = 2300,
["Country_data_CRC"] = 7000,
["Country_data_CRO"] = 37000,
["Country_data_CUB"] = 13000,
["Country_data_CYP"] = 11000,
["Country_data_CZE"] = 54000,
["Country_data_California"] = 6300,
["Country_data_Cambodia"] = 9900,
["Country_data_Cameroon"] = 31000,
["Country_data_Canada"] = 261000,
["Country_data_Cape_Verde"] = 7100,
["Country_data_Castile_and_León"] = 2000,
["Country_data_Catalonia"] = 3400,
["Country_data_Cayman_Islands"] = 4600,
["Country_data_Central_African_Republic"] = 5200,
["Country_data_Chad"] = 5500,
["Country_data_Chile"] = 90000,
["Country_data_China"] = 149000,
["Country_data_Chinese_Taipei"] = 39000,
["Country_data_Colombia"] = 96000,
["Country_data_Colorado"] = 5200,
["Country_data_Commonwealth_of_Independent_States"] = 2100,
["Country_data_Comoros"] = 4700,
["Country_data_Confederate_States_of_America"] = 3100,
["Country_data_Connecticut"] = 3400,
["Country_data_Cook_Islands"] = 3900,
["Country_data_Costa_Rica"] = 33000,
["Country_data_Croatia"] = 105000,
["Country_data_Cuba"] = 46000,
["Country_data_Curaçao"] = 4400,
["Country_data_Cyprus"] = 46000,
["Country_data_Czech_Republic"] = 152000,
["Country_data_Czechoslovakia"] = 34000,
["Country_data_DEN"] = 40000,
["Country_data_DEU"] = 11000,
["Country_data_DNK"] = 4400,
["Country_data_DOM"] = 8400,
["Country_data_DRC"] = 2100,
["Country_data_Delaware"] = 2700,
["Country_data_Democratic_Republic_of_the_Congo"] = 22000,
["Country_data_Denmark"] = 120000,
["Country_data_Djibouti"] = 5000,
["Country_data_Dominica"] = 4300,
["Country_data_Dominican_Republic"] = 35000,
["Country_data_ECU"] = 13000,
["Country_data_EGY"] = 16000,
["Country_data_ENG"] = 52000,
["Country_data_ESA"] = 2500,
["Country_data_ESP"] = 85000,
["Country_data_EST"] = 17000,
["Country_data_ETH"] = 4600,
["Country_data_EU"] = 2700,
["Country_data_East_Germany"] = 28000,
["Country_data_Ecuador"] = 48000,
["Country_data_Egypt"] = 65000,
["Country_data_El_Salvador"] = 22000,
["Country_data_Empire_of_Japan"] = 4400,
["Country_data_England"] = 162000,
["Country_data_Equatorial_Guinea"] = 5500,
["Country_data_Eritrea"] = 5500,
["Country_data_Estonia"] = 68000,
["Country_data_Eswatini"] = 5100,
["Country_data_Ethiopia"] = 21000,
["Country_data_Europe"] = 2800,
["Country_data_European_Union"] = 8200,
["Country_data_FIJ"] = 4500,
["Country_data_FIN"] = 40000,
["Country_data_FRA"] = 115000,
["Country_data_FRG"] = 18000,
["Country_data_FRO"] = 2200,
["Country_data_FR_Yugoslavia"] = 4400,
["Country_data_Faroe_Islands"] = 5800,
["Country_data_Federated_States_of_Micronesia"] = 2700,
["Country_data_Fiji"] = 21000,
["Country_data_Finland"] = 113000,
["Country_data_Florida"] = 5900,
["Country_data_France"] = 334000,
["Country_data_French_Polynesia"] = 3900,
["Country_data_GAB"] = 2500,
["Country_data_GAM"] = 2300,
["Country_data_GBR"] = 67000,
["Country_data_GDR"] = 11000,
["Country_data_GEO"] = 16000,
["Country_data_GER"] = 96000,
["Country_data_GHA"] = 10000,
["Country_data_GIB"] = 2100,
["Country_data_GRE"] = 30000,
["Country_data_GUA"] = 5400,
["Country_data_GUI"] = 3400,
["Country_data_GUY"] = 2600,
["Country_data_Gabon"] = 8200,
["Country_data_Gambia"] = 7700,
["Country_data_Georgia"] = 8600,
["Country_data_Georgia_(U.S._state)"] = 3200,
["Country_data_Georgia_(country)"] = 54000,
["Country_data_German_Empire"] = 5700,
["Country_data_Germany"] = 291000,
["Country_data_Ghana"] = 46000,
["Country_data_Gibraltar"] = 5200,
["Country_data_Great_Britain"] = 127000,
["Country_data_Greece"] = 105000,
["Country_data_Greenland"] = 2800,
["Country_data_Grenada"] = 5700,
["Country_data_Guadeloupe"] = 2800,
["Country_data_Guam"] = 4600,
["Country_data_Guatemala"] = 22000,
["Country_data_Guinea"] = 9500,
["Country_data_Guinea-Bissau"] = 5500,
["Country_data_Guyana"] = 7800,
["Country_data_HAI"] = 3300,
["Country_data_HKG"] = 15000,
["Country_data_HON"] = 4400,
["Country_data_HUN"] = 45000,
["Country_data_Haiti"] = 9800,
["Country_data_Hawaii"] = 2200,
["Country_data_Honduras"] = 21000,
["Country_data_Hong_Kong"] = 51000,
["Country_data_Hungary"] = 114000,
["Country_data_IDN"] = 5800,
["Country_data_INA"] = 12000,
["Country_data_IND"] = 34000,
["Country_data_IRE"] = 13000,
["Country_data_IRI"] = 6700,
["Country_data_IRL"] = 24000,
["Country_data_IRN"] = 7400,
["Country_data_IRQ"] = 4800,
["Country_data_ISL"] = 9300,
["Country_data_ISR"] = 23000,
["Country_data_ITA"] = 102000,
["Country_data_Iceland"] = 46000,
["Country_data_Idaho"] = 2200,
["Country_data_Illinois"] = 4500,
["Country_data_India"] = 258000,
["Country_data_Indiana"] = 3400,
["Country_data_Indonesia"] = 71000,
["Country_data_Iowa"] = 2400,
["Country_data_Iran"] = 160000,
["Country_data_Iraq"] = 23000,
["Country_data_Ireland"] = 66000,
["Country_data_Isle_of_Man"] = 2900,
["Country_data_Israel"] = 93000,
["Country_data_Italy"] = 287000,
["Country_data_Ivory_Coast"] = 33000,
["Country_data_JAM"] = 12000,
["Country_data_JAP"] = 2300,
["Country_data_JOR"] = 4800,
["Country_data_JP"] = 8700,
["Country_data_JPN"] = 69000,
["Country_data_Jamaica"] = 44000,
["Country_data_Japan"] = 263000,
["Country_data_Jersey"] = 2600,
["Country_data_Jordan"] = 22000,
["Country_data_KAZ"] = 24000,
["Country_data_KEN"] = 10000,
["Country_data_KGZ"] = 4500,
["Country_data_KOR"] = 36000,
["Country_data_KOS"] = 3200,
["Country_data_KSA"] = 7600,
["Country_data_KUW"] = 4600,
["Country_data_Kazakhstan"] = 68000,
["Country_data_Kentucky"] = 2100,
["Country_data_Kenya"] = 35000,
["Country_data_Kingdom_of_France"] = 2200,
["Country_data_Kingdom_of_Great_Britain"] = 4600,
["Country_data_Kingdom_of_Italy"] = 4900,
["Country_data_Kiribati"] = 2600,
["Country_data_Kosovo"] = 10000,
["Country_data_Kuwait"] = 20000,
["Country_data_Kyrgyzstan"] = 11000,
["Country_data_LAO"] = 2200,
["Country_data_LAT"] = 17000,
["Country_data_LBN"] = 3000,
["Country_data_LBR"] = 2000,
["Country_data_LIB"] = 2600,
["Country_data_LIE"] = 3800,
["Country_data_LIT"] = 3700,
["Country_data_LTU"] = 15000,
["Country_data_LUX"] = 12000,
["Country_data_LVA"] = 3100,
["Country_data_Laos"] = 8000,
["Country_data_Latvia"] = 55000,
["Country_data_Lebanon"] = 24000,
["Country_data_Lesotho"] = 5400,
["Country_data_Liberia"] = 7900,
["Country_data_Libya"] = 9100,
["Country_data_Liechtenstein"] = 8900,
["Country_data_Lithuania"] = 54000,
["Country_data_Louisiana"] = 2300,
["Country_data_Luxembourg"] = 48000,
["Country_data_MAC"] = 3000,
["Country_data_MAD"] = 2400,
["Country_data_MAR"] = 15000,
["Country_data_MAS"] = 13000,
["Country_data_MDA"] = 8900,
["Country_data_MEX"] = 35000,
["Country_data_MGL"] = 3600,
["Country_data_MKD"] = 8600,
["Country_data_MLI"] = 4700,
["Country_data_MLT"] = 6500,
["Country_data_MNE"] = 8600,
["Country_data_MON"] = 4700,
["Country_data_MOZ"] = 2700,
["Country_data_MRI"] = 2300,
["Country_data_MYA"] = 3400,
["Country_data_MYS"] = 4200,
["Country_data_Macau"] = 6900,
["Country_data_Macedonia"] = 4600,
["Country_data_Madagascar"] = 9700,
["Country_data_Malawi"] = 6200,
["Country_data_Malaysia"] = 71000,
["Country_data_Maldives"] = 6700,
["Country_data_Mali"] = 21000,
["Country_data_Malta"] = 31000,
["Country_data_Manitoba"] = 3000,
["Country_data_Marshall_Islands"] = 3400,
["Country_data_Martinique"] = 2700,
["Country_data_Maryland"] = 3300,
["Country_data_Massachusetts"] = 2600,
["Country_data_Mauritania"] = 6000,
["Country_data_Mauritius"] = 8500,
["Country_data_Mexico"] = 114000,
["Country_data_Michigan"] = 3900,
["Country_data_Minas_Gerais"] = 2100,
["Country_data_Minnesota"] = 3700,
["Country_data_Missouri"] = 2500,
["Country_data_Moldova"] = 33000,
["Country_data_Monaco"] = 12000,
["Country_data_Mongolia"] = 11000,
["Country_data_Montana"] = 2400,
["Country_data_Montenegro"] = 33000,
["Country_data_Montserrat"] = 2500,
["Country_data_Morocco"] = 51000,
["Country_data_Mozambique"] = 8000,
["Country_data_Myanmar"] = 23000,
["Country_data_NAM"] = 4000,
["Country_data_NED"] = 72000,
["Country_data_NEP"] = 3400,
["Country_data_NGA"] = 8700,
["Country_data_NGR"] = 9400,
["Country_data_NIR"] = 11000,
["Country_data_NLD"] = 7400,
["Country_data_NOR"] = 35000,
["Country_data_NZ"] = 3700,
["Country_data_NZL"] = 39000,
["Country_data_Namibia"] = 11000,
["Country_data_Nauru"] = 2600,
["Country_data_Nazi_Germany"] = 10000,
["Country_data_Nepal"] = 32000,
["Country_data_Netherlands"] = 261000,
["Country_data_Netherlands_Antilles"] = 2400,
["Country_data_Nevada"] = 2100,
["Country_data_New_Brunswick"] = 2600,
["Country_data_New_Caledonia"] = 3300,
["Country_data_New_Hampshire"] = 2100,
["Country_data_New_Jersey"] = 4300,
["Country_data_New_South_Wales"] = 6400,
["Country_data_New_York"] = 4300,
["Country_data_New_York_(state)"] = 6800,
["Country_data_New_Zealand"] = 119000,
["Country_data_Newfoundland_and_Labrador"] = 2900,
["Country_data_Nicaragua"] = 9000,
["Country_data_Niger"] = 6300,
["Country_data_Nigeria"] = 67000,
["Country_data_North_Carolina"] = 3500,
["Country_data_North_Korea"] = 23000,
["Country_data_North_Macedonia"] = 33000,
["Country_data_Northern_Ireland"] = 27000,
["Country_data_Northern_Mariana_Islands"] = 2800,
["Country_data_Norway"] = 117000,
["Country_data_Nova_Scotia"] = 2800,
["Country_data_OMA"] = 3300,
["Country_data_Ohio"] = 6000,
["Country_data_Oklahoma"] = 2500,
["Country_data_Oman"] = 10000,
["Country_data_Ontario"] = 3900,
["Country_data_Ottoman_Empire"] = 3200,
["Country_data_PAK"] = 9100,
["Country_data_PAN"] = 6000,
["Country_data_PAR"] = 11000,
["Country_data_PER"] = 14000,
["Country_data_PHI"] = 13000,
["Country_data_PLE"] = 2000,
["Country_data_PNG"] = 3200,
["Country_data_POL"] = 61000,
["Country_data_POR"] = 37000,
["Country_data_PRK"] = 5000,
["Country_data_PRT"] = 3600,
["Country_data_PUR"] = 8100,
["Country_data_Pakistan"] = 51000,
["Country_data_Palau"] = 2600,
["Country_data_Palestine"] = 7700,
["Country_data_Panama"] = 30000,
["Country_data_Papua_New_Guinea"] = 8400,
["Country_data_Paraguay"] = 45000,
["Country_data_Pennsylvania"] = 3600,
["Country_data_Peru"] = 64000,
["Country_data_Philippines"] = 68000,
["Country_data_Poland"] = 241000,
["Country_data_Portugal"] = 117000,
["Country_data_Prussia"] = 2800,
["Country_data_Puerto_Rico"] = 34000,
["Country_data_QAT"] = 9600,
["Country_data_Qatar"] = 32000,
["Country_data_Quebec"] = 4400,
["Country_data_Queensland"] = 2400,
["Country_data_ROM"] = 15000,
["Country_data_ROU"] = 31000,
["Country_data_RSA"] = 36000,
["Country_data_RUS"] = 68000,
["Country_data_RWA"] = 2500,
["Country_data_Republic_of_China"] = 4600,
["Country_data_Republic_of_Ireland"] = 54000,
["Country_data_Republic_of_the_Congo"] = 8300,
["Country_data_Romania"] = 113000,
["Country_data_Russia"] = 254000,
["Country_data_Russian_Empire"] = 5700,
["Country_data_Rwanda"] = 8500,
["Country_data_SAM"] = 3700,
["Country_data_SCG"] = 2900,
["Country_data_SCO"] = 29000,
["Country_data_SEN"] = 8500,
["Country_data_SER"] = 3700,
["Country_data_SGP"] = 4500,
["Country_data_SIN"] = 7500,
["Country_data_SLE"] = 2100,
["Country_data_SLO"] = 22000,
["Country_data_SLV"] = 3200,
["Country_data_SMR"] = 3600,
["Country_data_SPA"] = 5500,
["Country_data_SRB"] = 31000,
["Country_data_SRI"] = 5300,
["Country_data_SUI"] = 51000,
["Country_data_SUR"] = 2300,
["Country_data_SVK"] = 32000,
["Country_data_SVN"] = 7400,
["Country_data_SWE"] = 65000,
["Country_data_SWI"] = 5100,
["Country_data_SYR"] = 4000,
["Country_data_Saint_Kitts_and_Nevis"] = 4900,
["Country_data_Saint_Lucia"] = 5300,
["Country_data_Saint_Vincent_and_the_Grenadines"] = 5000,
["Country_data_Samoa"] = 8100,
["Country_data_San_Marino"] = 9700,
["Country_data_Saskatchewan"] = 4000,
["Country_data_Saudi_Arabia"] = 37000,
["Country_data_Scotland"] = 101000,
["Country_data_Senegal"] = 31000,
["Country_data_Serbia"] = 104000,
["Country_data_Serbia_and_Montenegro"] = 5400,
["Country_data_Seychelles"] = 5800,
["Country_data_Sierra_Leone"] = 7600,
["Country_data_Singapore"] = 50000,
["Country_data_Slovakia"] = 95000,
["Country_data_Slovenia"] = 91000,
["Country_data_Solomon_Islands"] = 4700,
["Country_data_Somalia"] = 6400,
["Country_data_South_Africa"] = 121000,
["Country_data_South_Australia"] = 2300,
["Country_data_South_Carolina"] = 3100,
["Country_data_South_Korea"] = 116000,
["Country_data_South_Sudan"] = 4800,
["Country_data_Soviet_Union"] = 77000,
["Country_data_Spain"] = 276000,
["Country_data_Sri_Lanka"] = 35000,
["Country_data_Sudan"] = 8700,
["Country_data_Suriname"] = 6800,
["Country_data_Sweden"] = 166000,
["Country_data_Switzerland"] = 150000,
["Country_data_Syria"] = 21000,
["Country_data_São_Tomé_and_Príncipe"] = 3400,
["Country_data_TAN"] = 3500,
["Country_data_TCH"] = 12000,
["Country_data_THA"] = 25000,
["Country_data_TJK"] = 2900,
["Country_data_TKM"] = 3100,
["Country_data_TOG"] = 2100,
["Country_data_TON"] = 2000,
["Country_data_TPE"] = 19000,
["Country_data_TRI"] = 5100,
["Country_data_TTO"] = 2200,
["Country_data_TUN"] = 12000,
["Country_data_TUR"] = 33000,
["Country_data_TWN"] = 2200,
["Country_data_Taiwan"] = 27000,
["Country_data_Tajikistan"] = 9700,
["Country_data_Tanzania"] = 22000,
["Country_data_Tennessee"] = 2300,
["Country_data_Texas"] = 5800,
["Country_data_Thailand"] = 96000,
["Country_data_Timor-Leste"] = 5100,
["Country_data_Togo"] = 7600,
["Country_data_Tonga"] = 6700,
["Country_data_Trinidad_and_Tobago"] = 24000,
["Country_data_Tunisia"] = 46000,
["Country_data_Turkey"] = 139000,
["Country_data_Turkmenistan"] = 8400,
["Country_data_Turks_and_Caicos_Islands"] = 2800,
["Country_data_Tuvalu"] = 2600,
["Country_data_U.S."] = 2000,
["Country_data_U.S._Virgin_Islands"] = 4900,
["Country_data_UAE"] = 11000,
["Country_data_UGA"] = 5300,
["Country_data_UK"] = 19000,
["Country_data_UKGBI"] = 3500,
["Country_data_UKR"] = 44000,
["Country_data_URS"] = 19000,
["Country_data_URU"] = 16000,
["Country_data_US"] = 5600,
["Country_data_USA"] = 151000,
["Country_data_USSR"] = 5300,
["Country_data_UZB"] = 14000,
["Country_data_Uganda"] = 22000,
["Country_data_Ukraine"] = 118000,
["Country_data_United_Arab_Emirates"] = 38000,
["Country_data_United_Kingdom"] = 158000,
["Country_data_United_Kingdom_of_Great_Britain_and_Ireland"] = 4900,
["Country_data_United_Nations"] = 4400,
["Country_data_United_States"] = 438000,
["Country_data_United_States_of_America"] = 4500,
["Country_data_Uruguay"] = 52000,
["Country_data_Uzbekistan"] = 36000,
["Country_data_VEN"] = 18000,
["Country_data_VIE"] = 7400,
["Country_data_Vanuatu"] = 5100,
["Country_data_Vatican_City"] = 3000,
["Country_data_Venezuela"] = 66000,
["Country_data_Victoria"] = 2400,
["Country_data_Vietnam"] = 46000,
["Country_data_Virginia"] = 3100,
["Country_data_WAL"] = 19000,
["Country_data_Wales"] = 68000,
["Country_data_Washington"] = 2700,
["Country_data_Washington,_D.C."] = 2200,
["Country_data_Washington_(state)"] = 3400,
["Country_data_West_Germany"] = 52000,
["Country_data_West_Indies"] = 2900,
["Country_data_Wisconsin"] = 5600,
["Country_data_Wyoming"] = 2100,
["Country_data_YUG"] = 11000,
["Country_data_Yemen"] = 8000,
["Country_data_Yugoslavia"] = 34000,
["Country_data_ZAF"] = 5400,
["Country_data_ZAM"] = 3800,
["Country_data_ZIM"] = 9200,
["Country_data_Zambia"] = 11000,
["Country_data_Zimbabwe"] = 32000,
["Country_data_none"] = 2100,
["Country_flagbio"] = 40000,
["Country_in_the_Eurovision_Song_Contest"] = 2900,
["Country_name"] = 59000,
["Country_prefix_the"] = 176000,
["Country_showdata"] = 7000,
["Country_topics"] = 25000,
["County"] = 7000,
["County_(judet)_of_Romania"] = 3300,
["Course_assignment"] = 4200,
["Course_details"] = 8600,
["Course_instructor"] = 3200,
["Cquote"] = 35000,
["Cr"] = 5000,
["Cr-rt"] = 2400,
["Create_taxonomy/link"] = 150000,
["Creative_Commons_text_attribution_notice"] = 6500,
["Cref2"] = 2900,
["Cricinfo"] = 24000,
["Cricket_squad2_player"] = 2800,
["Cricketarchive"] = 3000,
["Croatian_Census_2021"] = 4200,
["Cross"] = 4100,
["Crossreference"] = 2600,
["Crossreference/styles.css"] = 2600,
["Cs1_config"] = 13000,
["Cslist"] = 3700,
["Csv"] = 76000,
["Currency"] = 5500,
["Current_events"] = 9400,
["Current_events/styles.css"] = 9400,
["Current_leader"] = 5300,
["Currentdate"] = 24000,
["Cvt"] = 173000,
["Cycling_Archives"] = 4300,
["Cycling_data_DAT"] = 2000,
["Cycling_data_LTD"] = 2400,
["Cycling_data_MOV_men"] = 2300,
["Cycling_data_SOQ"] = 2200,
["Cycling_data_TVL"] = 2400,
["Cycling_data_UEX"] = 2300,
["Cycling_team_link"] = 14000,
["Module:CFB_schedule"] = 29000,
["Module:CS1_identifiers"] = 507000,
["Module:CallAssert"] = 122000,
["Module:Canada_NTS"] = 2200,
["Module:Canada_NTS/data"] = 2200,
["Module:Canada_by_province_category_navigation"] = 9900,
["Module:Catalog_lookup_link"] = 62000,
["Module:Category_described_in_year"] = 6400,
["Module:Category_described_in_year/config"] = 6400,
["Module:Category_disambiguation"] = 2700,
["Module:Category_handler"] = 5000000,
["Module:Category_handler/blacklist"] = 5000000,
["Module:Category_handler/config"] = 5000000,
["Module:Category_handler/data"] = 5000000,
["Module:Category_handler/shared"] = 5000000,
["Module:Category_main_article"] = 221000,
["Module:Category_more_if_exists"] = 49000,
["Module:Category_pair"] = 7100,
["Module:Category_see_also"] = 55000,
["Module:Category_series_navigation"] = 599000,
["Module:Category_series_navigation/styles.css"] = 599000,
["Module:Celestial_object_quadrangle"] = 2100,
["Module:Chart"] = 2900,
["Module:Chart/Default_colors"] = 2900,
["Module:Check_DYK_hook"] = 126000,
["Module:Check_blp_parameter"] = 2920000,
["Module:Check_for_conflicting_parameters"] = 4720000,
["Module:Check_for_deprecated_parameters"] = 943000,
["Module:Check_for_unknown_parameters"] = 23400000,
["Module:Check_height"] = 153000,
["Module:Check_isxn"] = 16000,
["Module:Check_winner_by_scores"] = 16000,
["Module:Checkuser"] = 91000,
["Module:Chem2"] = 11000,
["Module:Chem2/styles.css"] = 11000,
["Module:Citation/CS1"] = 6560000,
["Module:Citation/CS1/COinS"] = 6560000,
["Module:Citation/CS1/Configuration"] = 6680000,
["Module:Citation/CS1/Date_validation"] = 6560000,
["Module:Citation/CS1/Identifiers"] = 6680000,
["Module:Citation/CS1/Suggestions"] = 26000,
["Module:Citation/CS1/Utilities"] = 6680000,
["Module:Citation/CS1/Whitelist"] = 6560000,
["Module:Citation/CS1/styles.css"] = 6690000,
["Module:Citation_mode"] = 49000,
["Module:Cite"] = 53000,
["Module:Cite/config"] = 70000,
["Module:Cite_IUCN"] = 71000,
["Module:Cite_Q"] = 18000,
["Module:Cite_Q/config"] = 18000,
["Module:Cite_taxon"] = 56000,
["Module:Cite_tweet"] = 48000,
["Module:Clade"] = 10000,
["Module:Class"] = 61000,
["Module:Class/definition.json"] = 61000,
["Module:Class/styles.css"] = 39000,
["Module:Class_mask"] = 463000,
["Module:Clickable_button"] = 1870000,
["Module:Collapsible_list"] = 70000,
["Module:College_color"] = 137000,
["Module:College_color/data"] = 137000,
["Module:Color_contrast"] = 577000,
["Module:Color_contrast/colors"] = 579000,
["Module:Comma-separated_list"] = 3700,
["Module:Commons_link"] = 1100000,
["Module:Compact_list"] = 2000,
["Module:Complex_date"] = 48000,
["Module:Conservation_status"] = 89000,
["Module:Contentious_topics/talk_notice"] = 21000,
["Module:Convert"] = 1520000,
["Module:Convert/data"] = 1520000,
["Module:Convert/helper"] = 13000,
["Module:Convert/text"] = 1520000,
["Module:Convert/wikidata"] = 2700,
["Module:Convert/wikidata/data"] = 2700,
["Module:ConvertIB"] = 800000,
["Module:ConvertIB/data"] = 274000,
["Module:ConvertNumeric"] = 21000,
["Module:Convert_character_width"] = 3100,
["Module:Convert_character_width/data"] = 3100,
["Module:Coordinates"] = 1410000,
["Module:Coordinates/styles.css"] = 1410000,
["Module:Copied"] = 43000,
["Module:Country2nationality"] = 97000,
["Module:CountryAdjectiveDemonym"] = 117000,
["Module:CountryAdjectiveDemonym/Adjectives"] = 117000,
["Module:CountryAdjectiveDemonym/Demonyms"] = 117000,
["Module:CountryAdjectiveDemonym/The"] = 117000,
["Module:CountryData"] = 476000,
["Module:CountryData/cacheA"] = 165000,
["Module:CountryData/cacheB"] = 81000,
["Module:CountryData/cacheC"] = 59000,
["Module:CountryData/cacheD"] = 57000,
["Module:CountryData/cacheE"] = 38000,
["Module:CountryData/cacheF"] = 26000,
["Module:CountryData/cacheG"] = 27000,
["Module:CountryData/cacheH"] = 18000,
["Module:CountryData/cacheI"] = 17000,
["Module:CountryData/cacheJ"] = 11000,
["Module:CountryData/cacheK"] = 11000,
["Module:CountryData/summary"] = 476000,
["Module:Country_adjective"] = 4700,
["Module:Country_alias"] = 62000,
["Module:Country_alias/data"] = 63000,
["Module:Cslist"] = 3700,
["Module:Currency"] = 5600,
["Module:Currency/Presentation"] = 5600,
["Module:Current_leader"] = 5500,
["Module:Current_leader/data"] = 5500,
}
e0tu51tk69nu71yupyi75470ixuudbq
11640
11639
2026-09-07T03:19:00Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Transclusion_count/data/C]]
11639
Scribunto
text/plain
return {
["C"] = 802000,
["C-Class"] = 17000,
["C-SPAN"] = 13000,
["C-cmn"] = 2800,
["C-pl"] = 51000,
["C."] = 353000,
["CAN"] = 20000,
["CANelec"] = 18000,
["CANelec/gain"] = 3500,
["CANelec/hold"] = 6700,
["CANelec/source"] = 11000,
["CANelec/top"] = 9000,
["CANelec/total"] = 9600,
["CAS"] = 3800,
["CAS_Registry_Number"] = 3800,
["CBB_Yearly_Record_End"] = 3500,
["CBB_Yearly_Record_Entry"] = 3600,
["CBB_Yearly_Record_Start"] = 3400,
["CBB_Yearly_Record_Subhead"] = 4200,
["CBB_Yearly_Record_Subtotal"] = 3300,
["CBB_roster/Footer"] = 11000,
["CBB_roster/Header"] = 11000,
["CBB_roster/Player"] = 11000,
["CBB_schedule_end"] = 14000,
["CBB_schedule_entry"] = 14000,
["CBB_schedule_start"] = 14000,
["CBB_standings_end"] = 19000,
["CBB_standings_entry"] = 19000,
["CBB_standings_start"] = 19000,
["CBB_yearly_record_end"] = 4700,
["CBB_yearly_record_end/legend"] = 4100,
["CBB_yearly_record_entry"] = 4600,
["CBB_yearly_record_start"] = 4500,
["CBB_yearly_record_subhead"] = 4300,
["CBB_yearly_record_subtotal"] = 4400,
["CBSB_Standings_End"] = 2700,
["CBSB_Standings_Entry"] = 2700,
["CBSB_Standings_Start"] = 2600,
["CBSB_link"] = 4100,
["CBSB_standings_end"] = 5500,
["CBSB_standings_entry"] = 5600,
["CBSB_standings_start"] = 5500,
["CC0"] = 4000,
["CC_BY-SA_2.5"] = 2100,
["CC_BY-SA_2.5,_2.0,_1.0"] = 2100,
["CC_BY-SA_3.0"] = 20000,
["CC_BY-SA_3.0_migrated"] = 19000,
["CC_BY-SA_4.0"] = 13000,
["CC_BY_2.5"] = 2600,
["CC_BY_3.0"] = 7000,
["CFB_Standings_End"] = 16000,
["CFB_Standings_Entry"] = 16000,
["CFB_Standings_Start"] = 16000,
["CFB_Yearly_Record_End"] = 7900,
["CFB_Yearly_Record_End/legend"] = 2900,
["CFB_Yearly_Record_Entry"] = 7900,
["CFB_Yearly_Record_Start"] = 7900,
["CFB_Yearly_Record_Subhead"] = 8000,
["CFB_Yearly_Record_Subtotal"] = 7800,
["CFB_schedule"] = 29000,
["CFB_schedule_entry"] = 22000,
["CFB_standings_end"] = 39000,
["CFB_standings_entry"] = 39000,
["CFB_standings_start"] = 39000,
["CFL_Year"] = 7300,
["CGF_year"] = 3800,
["CGNDB_URL"] = 5400,
["CHE"] = 12000,
["CHI"] = 3300,
["CHL"] = 4300,
["CHN"] = 15000,
["CN"] = 4000,
["CO2"] = 3500,
["COI"] = 14000,
["COIUL"] = 131000,
["COI_editnotice"] = 7800,
["COL"] = 5600,
["COLON"] = 14000,
["CRI"] = 2300,
["CRO"] = 6600,
["CS1_config"] = 15000,
["CSK"] = 2800,
["CSS_crop"] = 2100,
["CSS_image_crop"] = 9600,
["CUB"] = 4200,
["CURRENTDATE"] = 3600,
["CYP"] = 2200,
["CZE"] = 16000,
["Calendar"] = 2500,
["Calendar/styles.css"] = 2800,
["California/color"] = 12000,
["Call_sign_disambiguation"] = 3100,
["Campaignbox"] = 26000,
["CanProvName"] = 19000,
["CanadaByProvinceCatNav"] = 9500,
["CanadaProvinceThe"] = 4500,
["Canada_NTS_Map_Sheet"] = 2200,
["Canada_by_province_category_navigation"] = 9900,
["Canadian_English"] = 13000,
["Canadian_Parliament_links"] = 5100,
["Canadian_election_result"] = 18000,
["Canadian_election_result/gain"] = 3600,
["Canadian_election_result/hold"] = 7000,
["Canadian_election_result/source"] = 13000,
["Canadian_election_result/top"] = 19000,
["Canadian_election_result/total"] = 14000,
["Canadian_party_colour"] = 11000,
["Canadian_party_colour/colour"] = 23000,
["Canadian_party_colour/colour/default"] = 23000,
["Canadian_party_colour/name"] = 19000,
["Canadian_party_colour/name/default"] = 8300,
["Canadian_province_name"] = 19000,
["Canned_search"] = 8500,
["Cascite"] = 17000,
["Caselaw_source"] = 4800,
["Cassini-Ehess"] = 3300,
["Cast_listing"] = 30000,
["Castlist"] = 5800,
["Cat"] = 504000,
["CatAutoTOC"] = 372000,
["CatRel"] = 4100,
["CatTrack"] = 20000,
["Cat_class"] = 6100,
["Cat_main"] = 149000,
["Cat_more"] = 102000,
["Cat_more_if_exists"] = 29000,
["Cat_see_also"] = 3800,
["Catalog_lookup_link"] = 61000,
["Catalog_of_Fishes"] = 9800,
["Catalogue_of_Life"] = 24000,
["Category"] = 2400,
["Category-Class"] = 14000,
["Category-inline"] = 11000,
["Category_TOC"] = 81000,
["Category_U.S._State_elections_by_year"] = 7500,
["Category_U.S._State_elections_by_year/core"] = 7500,
["Category_class"] = 25000,
["Category_described_in_year"] = 6400,
["Category_diffuse"] = 11000,
["Category_disambiguation"] = 2700,
["Category_explanation"] = 416000,
["Category_handler"] = 2730000,
["Category_if_exists"] = 130000,
["Category_ifexist"] = 4900,
["Category_importance"] = 8800,
["Category_link"] = 725000,
["Category_link/core"] = 725000,
["Category_link_if_exists"] = 81000,
["Category_link_with_count"] = 9300,
["Category_link_without_namespace"] = 803000,
["Category_links"] = 9900,
["Category_main_article"] = 221000,
["Category_more"] = 143000,
["Category_more_if_exists"] = 49000,
["Category_ordered_by_date"] = 13000,
["Category_other"] = 1130000,
["Category_pair"] = 2200,
["Category_redirect"] = 159000,
["Category_redirect/core"] = 159000,
["Category_see_also"] = 55000,
["Category_see_also/Category_pair_check"] = 55000,
["Category_see_also_if_exists"] = 95000,
["Category_see_also_if_exists_2"] = 101000,
["Category_series_navigation"] = 599000,
["Category_title"] = 2400,
["Catexp"] = 5900,
["CathEncy"] = 2300,
["Catholic"] = 3700,
["Catholic_Encyclopedia"] = 5100,
["Catmain"] = 29000,
["Catmore"] = 9800,
["Catseealso"] = 2300,
["Cbb_link"] = 10000,
["Cbignore"] = 132000,
["Cbsb_link"] = 2500,
["Cc-by-2.5"] = 2600,
["Cc-by-3.0"] = 7000,
["Cc-by-sa-2.5"] = 2100,
["Cc-by-sa-2.5,2.0,1.0"] = 2100,
["Cc-by-sa-3.0"] = 20000,
["Cc-by-sa-3.0-migrated"] = 19000,
["Cc-by-sa-4.0"] = 13000,
["Cc-zero"] = 3800,
["CensusAU"] = 9100,
["Census_2016_AUS"] = 5700,
["Census_2021_AUS"] = 6200,
["Cent"] = 6900,
["Center"] = 301000,
["Centered_quote"] = 37000,
["Centralized_discussion"] = 7300,
["Centralized_discussion/core"] = 7200,
["Centralized_discussion/styles.css"] = 7200,
["Centre"] = 4200,
["Century"] = 16000,
["Century_name_from_decade"] = 2400,
["Century_name_from_decade_or_year"] = 127000,
["Century_name_from_title_decade"] = 7600,
["Century_name_from_title_year"] = 9300,
["Certification_Cite_Ref"] = 38000,
["Certification_Table_Bottom"] = 37000,
["Certification_Table_Entry"] = 39000,
["Certification_Table_Entry/Foot"] = 37000,
["Certification_Table_Entry/Foot/helper"] = 37000,
["Certification_Table_Entry/MexicanAward"] = 2400,
["Certification_Table_Entry/Region"] = 38000,
["Certification_Table_Entry/Sales"] = 37000,
["Certification_Table_Entry/Sales/AustrianPeriod"] = 2500,
["Certification_Table_Entry/Sales/BelgianPeriod"] = 2400,
["Certification_Table_Entry/Sales/DanishPeriod"] = 4400,
["Certification_Table_Entry/Sales/DanishPeriodHelper1"] = 4400,
["Certification_Table_Entry/Sales/DanishPeriodHelper2"] = 4400,
["Certification_Table_Entry/Sales/FrenchPeriod"] = 2300,
["Certification_Table_Entry/Sales/FrenchPeriodAlbum"] = 2100,
["Certification_Table_Entry/Sales/GermanPeriod"] = 4100,
["Certification_Table_Entry/Sales/ItalianHelper"] = 4500,
["Certification_Table_Entry/Sales/MexicanSales"] = 2200,
["Certification_Table_Entry/Sales/NewZealandPeriod"] = 7900,
["Certification_Table_Entry/Sales/SpanishSinglesPeriod"] = 2800,
["Certification_Table_Entry/Sales/SwedishPeriod"] = 2300,
["Certification_Table_Separator"] = 3300,
["Certification_Table_Top"] = 39000,
["Cfb_link"] = 26000,
["Cfd_all"] = 6500,
["Cfm_full"] = 2700,
["Cfr_full"] = 3500,
["Chart_bottom"] = 4500,
["Chart_top"] = 4500,
["Check_completeness_of_transclusions"] = 65000,
["Check_talk"] = 64000,
["Check_talk_wp"] = 1460000,
["Check_winner_by_scores"] = 16000,
["CheckedSockpuppet"] = 7200,
["Checked_sockpuppet"] = 18000,
["Checkedsockpuppet"] = 5300,
["Checkip"] = 12000,
["Checkuser"] = 90000,
["Checkuserblock-account"] = 46000,
["Chem"] = 6000,
["Chem/atom"] = 5900,
["Chem/link"] = 6000,
["Chem2"] = 11000,
["Chem_molar_mass"] = 22000,
["Chem_molar_mass/format"] = 22000,
["Chembox"] = 16000,
["Chembox/styles.css"] = 16000,
["Chembox_3DMet"] = 15000,
["Chembox_AllOtherNames"] = 14000,
["Chembox_AllOtherNames/format"] = 14000,
["Chembox_Appearance"] = 7200,
["Chembox_BoilingPt"] = 4200,
["Chembox_CASNo"] = 15000,
["Chembox_CASNo/format"] = 15000,
["Chembox_CalcTemperatures"] = 7600,
["Chembox_ChEBI"] = 15000,
["Chembox_ChEBI/format"] = 15000,
["Chembox_ChEMBL"] = 15000,
["Chembox_ChEMBL/format"] = 15000,
["Chembox_ChemSpiderID"] = 15000,
["Chembox_ChemSpiderID/format"] = 15000,
["Chembox_CompTox"] = 15000,
["Chembox_CompTox/format"] = 15000,
["Chembox_Datapage_check"] = 16000,
["Chembox_Density"] = 5700,
["Chembox_DrugBank"] = 15000,
["Chembox_DrugBank/format"] = 15000,
["Chembox_ECHA"] = 8300,
["Chembox_ECNumber"] = 15000,
["Chembox_ECNumber/format"] = 15000,
["Chembox_Elements"] = 15000,
["Chembox_Elements/molecular_formula"] = 21000,
["Chembox_FlashPt"] = 2100,
["Chembox_Footer"] = 15000,
["Chembox_Footer/tracking"] = 16000,
["Chembox_GHS_(set)"] = 4500,
["Chembox_Hazards"] = 13000,
["Chembox_IUPHAR_ligand"] = 15000,
["Chembox_IUPHAR_ligand/format"] = 15000,
["Chembox_Identifiers"] = 15000,
["Chembox_InChI"] = 15000,
["Chembox_InChI/format"] = 15000,
["Chembox_Indexlist"] = 15000,
["Chembox_Jmol"] = 15000,
["Chembox_Jmol/format"] = 15000,
["Chembox_KEGG"] = 15000,
["Chembox_KEGG/format"] = 15000,
["Chembox_MeltingPt"] = 6600,
["Chembox_OtherCpds"] = 2100,
["Chembox_Properties"] = 15000,
["Chembox_PubChem"] = 15000,
["Chembox_PubChem/format"] = 15000,
["Chembox_RTECS"] = 15000,
["Chembox_RTECS/format"] = 15000,
["Chembox_Related"] = 4200,
["Chembox_SMILES"] = 15000,
["Chembox_SMILES/format"] = 15000,
["Chembox_SolubilityInWater"] = 4500,
["Chembox_Structure"] = 2400,
["Chembox_UNII"] = 15000,
["Chembox_UNII/format"] = 15000,
["Chembox_headerbar"] = 16000,
["Chembox_image"] = 14000,
["Chembox_image_cell"] = 14000,
["Chembox_image_sbs"] = 14000,
["Chembox_parametercheck"] = 15000,
["Chembox_setDatarow"] = 5500,
["Chembox_setHeader"] = 5500,
["Chembox_templatePar/formatPreviewMessage"] = 16000,
["Chembox_verification"] = 6900,
["Chemspidercite"] = 11000,
["Chessgames_player"] = 3800,
["Chinese"] = 3500,
["Circa"] = 470000,
["Circular_reference"] = 4100,
["Citation"] = 413000,
["Citation/make_link"] = 7900,
["Citation/styles.css"] = 53000,
["Citation_needed"] = 637000,
["Citation_needed_span"] = 3600,
["Citation_style"] = 4500,
["Cite_AV_media"] = 81000,
["Cite_AV_media_notes"] = 34000,
["Cite_Appletons'"] = 2400,
["Cite_Australian_Dictionary_of_Biography"] = 5000,
["Cite_Box_Office_Mojo"] = 2500,
["Cite_Catholic_Encyclopedia"] = 8600,
["Cite_DCB"] = 3300,
["Cite_DGRBM"] = 2200,
["Cite_DNB"] = 20000,
["Cite_EB1911"] = 26000,
["Cite_FTP"] = 2500,
["Cite_GBIF"] = 4300,
["Cite_GNIS"] = 2400,
["Cite_Gaia_DR3"] = 3100,
["Cite_Google_Maps"] = 20000,
["Cite_Hansard"] = 2700,
["Cite_IUCN"] = 71000,
["Cite_Instagram"] = 7500,
["Cite_Jewish_Encyclopedia"] = 3200,
["Cite_LCDB"] = 2000,
["Cite_Metacritic"] = 2300,
["Cite_NIE"] = 3500,
["Cite_NSW_Parliament"] = 3300,
["Cite_NSW_SHR"] = 2700,
["Cite_NatureServe"] = 3100,
["Cite_ODNB"] = 22000,
["Cite_OED"] = 2500,
["Cite_POWO"] = 6600,
["Cite_Q"] = 17000,
["Cite_QHR"] = 3100,
["Cite_QPN"] = 4100,
["Cite_Rotten_Tomatoes"] = 2900,
["Cite_Rowlett"] = 2500,
["Cite_Russian_law"] = 7800,
["Cite_Ryan"] = 3300,
["Cite_SNL"] = 2100,
["Cite_Sports-Reference"] = 55000,
["Cite_USGov"] = 13000,
["Cite_WoRMS"] = 13000,
["Cite_act"] = 4000,
["Cite_arXiv"] = 7100,
["Cite_bcgnis"] = 3700,
["Cite_book"] = 1910000,
["Cite_certification"] = 43000,
["Cite_certification/Title"] = 40000,
["Cite_certification/URL"] = 43000,
["Cite_certification/archivedate"] = 7700,
["Cite_certification/archiveurl"] = 7700,
["Cite_cgndb"] = 5400,
["Cite_comic"] = 2100,
["Cite_conference"] = 23000,
["Cite_court"] = 6900,
["Cite_dictionary"] = 3600,
["Cite_document"] = 2000,
["Cite_encyclopedia"] = 244000,
["Cite_episode"] = 20000,
["Cite_gnis"] = 35000,
["Cite_instagram"] = 3100,
["Cite_interview"] = 11000,
["Cite_iucn"] = 70000,
["Cite_journal"] = 1180000,
["Cite_legislation_UK"] = 4000,
["Cite_magazine"] = 383000,
["Cite_map"] = 60000,
["Cite_news"] = 1940000,
["Cite_newspaper"] = 2000,
["Cite_newspaper_The_Times"] = 7200,
["Cite_patent"] = 7300,
["Cite_patent/authors"] = 6100,
["Cite_patent/core"] = 7600,
["Cite_peakbagger"] = 5300,
["Cite_podcast"] = 6300,
["Cite_press_release"] = 86000,
["Cite_report"] = 77000,
["Cite_rowlett"] = 2500,
["Cite_ship_register"] = 2000,
["Cite_simbad"] = 5700,
["Cite_sports-reference"] = 60000,
["Cite_taxon"] = 5600,
["Cite_tech_report"] = 3100,
["Cite_thesis"] = 50000,
["Cite_tweet"] = 48000,
["Cite_video"] = 13000,
["Cite_video_game"] = 3500,
["Cite_web"] = 5430000,
["Cite_wikisource"] = 7100,
["Cite_wikisource/make_link"] = 65000,
["Citeweb"] = 4300,
["Civil_navigation"] = 2100,
["Cjersey"] = 3000,
["Cl"] = 219000,
["Clade"] = 10000,
["Clade/styles.css"] = 10000,
["Clarification_needed"] = 2600,
["Clarify"] = 45000,
["Class"] = 38000,
["Class/colour"] = 19000,
["Class/icon"] = 21000,
["Class_mask"] = 463000,
["Classicon"] = 5200,
["Clc"] = 7400,
["Cleanup"] = 8300,
["Cleanup_reorganize"] = 2300,
["Cleanup_rewrite"] = 6800,
["Clear"] = 3760000,
["Clear_left"] = 23000,
["Clear_right"] = 2800,
["Clerk_Request"] = 2500,
["Clerk_note"] = 11000,
["Clerknote"] = 8600,
["Clickable_button"] = 1870000,
["Clickable_button_2"] = 227000,
["Closed_access"] = 5600,
["Closed_peer_review_page"] = 3200,
["Closed_rfc_bottom"] = 2300,
["Closed_rfc_top"] = 2900,
["Clr"] = 3100,
["Club_players_category"] = 9500,
["Clubplayerscat"] = 9500,
["Cmbox"] = 540000,
["Cn"] = 114000,
["Cnote2"] = 2900,
["Cnote2_Begin"] = 2900,
["Cnote2_End"] = 2900,
["Coat_of_arms"] = 2500,
["Cob"] = 15000,
["Code"] = 188000,
["Cof_family"] = 4600,
["Cof_genus"] = 5400,
["Col-1-of-2"] = 2400,
["Col-2"] = 186000,
["Col-2-of-2"] = 2300,
["Col-3"] = 11000,
["Col-4"] = 3800,
["Col-begin"] = 232000,
["Col-begin/styles.css"] = 232000,
["Col-break"] = 229000,
["Col-end"] = 231000,
["Col-float"] = 4900,
["Col-float-break"] = 4800,
["Col-float-end"] = 4800,
["Col-float/styles.css"] = 4900,
["Col-start"] = 9900,
["Col_div"] = 2200,
["Colbegin"] = 24000,
["Colend"] = 27000,
["Collapse"] = 8900,
["Collapse_bottom"] = 57000,
["Collapse_top"] = 57000,
["Collapse_top/styles.css"] = 57000,
["Collapsebottom"] = 4100,
["Collapsed_infobox_section_begin"] = 4500,
["Collapsed_infobox_section_begin/cont"] = 4500,
["Collapsed_infobox_section_begin/styles.css"] = 4500,
["Collapsed_infobox_section_end"] = 4500,
["Collapsetop"] = 4100,
["Collapsible_list"] = 68000,
["Collapsible_option"] = 152000,
["Colledge:_Ships_RN"] = 3000,
["College"] = 12000,
["CollegePrimaryHeader"] = 8300,
["CollegePrimaryStyle"] = 111000,
["CollegeSecondaryStyle"] = 11000,
["College_Athlete_Recruit_End"] = 2800,
["College_Athlete_Recruit_Entry"] = 2900,
["College_Athlete_Recruit_Start"] = 2900,
["College_athlete_recruit_end"] = 5000,
["College_athlete_recruit_entry"] = 5200,
["College_athlete_recruit_start"] = 5200,
["College_color_list"] = 4400,
["College_sports_team_link"] = 31000,
["Colon"] = 20000,
["Color"] = 506000,
["Color/styles.css"] = 506000,
["Color_box"] = 86000,
["Colorbox"] = 2600,
["Colorbull"] = 4600,
["Colored_link"] = 106000,
["Coloredlink"] = 3200,
["Colors"] = 3600,
["Colour"] = 5600,
["Colour_box"] = 2500,
["Coloured_link"] = 12000,
["Column"] = 4300,
["Column/styles.css"] = 4400,
["Columns-end"] = 4000,
["Columns-list"] = 126000,
["Columns-start"] = 4000,
["Comic_Book_DB"] = 3500,
["Comicbookdb"] = 3400,
["Comics-replaceability"] = 2700,
["Comics_infobox_sec/formcat"] = 3400,
["Comics_infobox_sec/genre"] = 4200,
["Comics_infobox_sec/genrecat"] = 3800,
["Comics_infobox_sec/styles.css"] = 8100,
["Comma-separated_list"] = 3700,
["Comma-separated_list/styles.css"] = 3700,
["Comma_separated_entries"] = 523000,
["Comment"] = 7700,
["Committed_identity"] = 3200,
["Committed_identity/styles.css"] = 3200,
["Commons"] = 73000,
["Commons-inline"] = 25000,
["Commons_cat"] = 45000,
["Commons_category"] = 906000,
["Commons_category-inline"] = 178000,
["Commons_category_inline"] = 5700,
["Commonscat"] = 59000,
["Commonscat-inline"] = 14000,
["Commonscat_inline"] = 2200,
["Commonscatinline"] = 7200,
["Compact_TOC"] = 7300,
["Compact_ToC"] = 3200,
["Compose_molecular_formula"] = 2400,
["Composition_bar"] = 13000,
["Confirmed"] = 20000,
["Confused"] = 3200,
["Confusing"] = 2400,
["CongBio"] = 9400,
["CongLinks"] = 4800,
["Connected_contributor"] = 21000,
["Connected_contributor_(paid)"] = 10000,
["Constellation_navbox"] = 10000,
["Container"] = 14000,
["Container_cat"] = 9100,
["Container_category"] = 93000,
["Containercat"] = 2800,
["Contains_special_characters"] = 5300,
["Contains_special_characters/core"] = 5300,
["Contains_special_characters/styles.css"] = 5300,
["Content_category"] = 7900,
["Contentious_topics/Additional_restrictions.json"] = 21000,
["Contentious_topics/Arab-Israeli_editnotice"] = 6900,
["Contentious_topics/Arab-Israeli_talk_notice"] = 6100,
["Contentious_topics/Category_database.json"] = 21000,
["Contentious_topics/Restrictions_definition.json"] = 21000,
["Contentious_topics/Standard_set.json"] = 21000,
["Contentious_topics/list"] = 30000,
["Contentious_topics/page_restriction_editnotice_base"] = 7400,
["Contentious_topics/page_restriction_talk_notice"] = 2700,
["Contentious_topics/talk_notice"] = 21000,
["Context"] = 2600,
["Continent2continental"] = 46000,
["Continent_adjective_to_noun"] = 10000,
["Continental2continent"] = 23000,
["Controversial"] = 3000,
["Convert"] = 1420000,
["Convert_abbreviated"] = 174000,
["Convinfobox"] = 308000,
["Coord"] = 1400000,
["Coord_missing"] = 70000,
["Coord_missing/CheckCat"] = 69000,
["Coords"] = 6600,
["Copied"] = 22000,
["Copy_edit"] = 2000,
["Copy_to_Commons"] = 2600,
["Copy_to_Wikimedia_Commons"] = 86000,
["Copy_to_Wikimedia_Commons_in"] = 4300,
["Cospar"] = 2800,
["Cot"] = 14000,
["Count"] = 1030000,
["Country2continent"] = 125000,
["Country2continental"] = 32000,
["Country2nationality"] = 35000,
["Country2parent"] = 36000,
["Country2parent/core"] = 36000,
["CountryPrefixThe"] = 65000,
["Country_abbreviation"] = 94000,
["Country_alias"] = 17000,
["Country_at_games_navbox"] = 5800,
["Country_at_games_navbox/below"] = 5800,
["Country_data"] = 12000,
["Country_data_AFG"] = 2600,
["Country_data_ALB"] = 7300,
["Country_data_ALG"] = 11000,
["Country_data_AND"] = 3700,
["Country_data_ANG"] = 4500,
["Country_data_ARG"] = 53000,
["Country_data_ARM"] = 8400,
["Country_data_AUS"] = 89000,
["Country_data_AUT"] = 53000,
["Country_data_AZE"] = 11000,
["Country_data_Afghanistan"] = 21000,
["Country_data_Alabama"] = 2600,
["Country_data_Alaska"] = 2100,
["Country_data_Albania"] = 35000,
["Country_data_Alberta"] = 3100,
["Country_data_Algeria"] = 47000,
["Country_data_American_Samoa"] = 2900,
["Country_data_Andorra"] = 9400,
["Country_data_Angola"] = 21000,
["Country_data_Anguilla"] = 2400,
["Country_data_Antigua_and_Barbuda"] = 6500,
["Country_data_Apulia"] = 7900,
["Country_data_Argentina"] = 151000,
["Country_data_Arizona"] = 2500,
["Country_data_Arkansas"] = 2800,
["Country_data_Armenia"] = 46000,
["Country_data_Aruba"] = 4000,
["Country_data_Australia"] = 274000,
["Country_data_Austria"] = 144000,
["Country_data_Austria-Hungary"] = 2300,
["Country_data_Azerbaijan"] = 51000,
["Country_data_BAH"] = 4700,
["Country_data_BAN"] = 4500,
["Country_data_BAR"] = 2700,
["Country_data_BDI"] = 2000,
["Country_data_BEL"] = 60000,
["Country_data_BEN"] = 2000,
["Country_data_BER"] = 2500,
["Country_data_BFA"] = 2000,
["Country_data_BHR"] = 5800,
["Country_data_BIH"] = 14000,
["Country_data_BLR"] = 26000,
["Country_data_BOL"] = 6700,
["Country_data_BOT"] = 3200,
["Country_data_BRA"] = 65000,
["Country_data_BUL"] = 31000,
["Country_data_Bahamas"] = 11000,
["Country_data_Bahrain"] = 22000,
["Country_data_Bangladesh"] = 34000,
["Country_data_Barbados"] = 8800,
["Country_data_Belarus"] = 90000,
["Country_data_Belgium"] = 156000,
["Country_data_Belize"] = 5300,
["Country_data_Benin"] = 8100,
["Country_data_Bermuda"] = 6400,
["Country_data_Bhutan"] = 4900,
["Country_data_Bolivia"] = 24000,
["Country_data_Bosnia_and_Herzegovina"] = 53000,
["Country_data_Botswana"] = 10000,
["Country_data_Brazil"] = 170000,
["Country_data_British_Columbia"] = 3700,
["Country_data_British_Empire"] = 2100,
["Country_data_British_Raj"] = 2500,
["Country_data_British_Virgin_Islands"] = 3400,
["Country_data_Brunei"] = 6900,
["Country_data_Bulgaria"] = 101000,
["Country_data_Burkina_Faso"] = 11000,
["Country_data_Burma"] = 2300,
["Country_data_Burundi"] = 6900,
["Country_data_CAM"] = 2600,
["Country_data_CAN"] = 69000,
["Country_data_CGO"] = 2500,
["Country_data_CHE"] = 5900,
["Country_data_CHI"] = 20000,
["Country_data_CHL"] = 2400,
["Country_data_CHN"] = 49000,
["Country_data_CIV"] = 8700,
["Country_data_CMR"] = 8800,
["Country_data_COD"] = 3500,
["Country_data_COL"] = 28000,
["Country_data_CPV"] = 2300,
["Country_data_CRC"] = 7000,
["Country_data_CRO"] = 37000,
["Country_data_CUB"] = 13000,
["Country_data_CYP"] = 11000,
["Country_data_CZE"] = 54000,
["Country_data_California"] = 6300,
["Country_data_Cambodia"] = 9900,
["Country_data_Cameroon"] = 31000,
["Country_data_Canada"] = 261000,
["Country_data_Cape_Verde"] = 7100,
["Country_data_Castile_and_León"] = 2000,
["Country_data_Catalonia"] = 3400,
["Country_data_Cayman_Islands"] = 4600,
["Country_data_Central_African_Republic"] = 5200,
["Country_data_Chad"] = 5500,
["Country_data_Chile"] = 90000,
["Country_data_China"] = 149000,
["Country_data_Chinese_Taipei"] = 39000,
["Country_data_Colombia"] = 96000,
["Country_data_Colorado"] = 5200,
["Country_data_Commonwealth_of_Independent_States"] = 2100,
["Country_data_Comoros"] = 4700,
["Country_data_Confederate_States_of_America"] = 3100,
["Country_data_Connecticut"] = 3400,
["Country_data_Cook_Islands"] = 3900,
["Country_data_Costa_Rica"] = 33000,
["Country_data_Croatia"] = 105000,
["Country_data_Cuba"] = 46000,
["Country_data_Curaçao"] = 4400,
["Country_data_Cyprus"] = 46000,
["Country_data_Czech_Republic"] = 152000,
["Country_data_Czechoslovakia"] = 34000,
["Country_data_DEN"] = 40000,
["Country_data_DEU"] = 11000,
["Country_data_DNK"] = 4400,
["Country_data_DOM"] = 8400,
["Country_data_DRC"] = 2100,
["Country_data_Delaware"] = 2700,
["Country_data_Democratic_Republic_of_the_Congo"] = 22000,
["Country_data_Denmark"] = 120000,
["Country_data_Djibouti"] = 5000,
["Country_data_Dominica"] = 4300,
["Country_data_Dominican_Republic"] = 35000,
["Country_data_ECU"] = 13000,
["Country_data_EGY"] = 16000,
["Country_data_ENG"] = 52000,
["Country_data_ESA"] = 2500,
["Country_data_ESP"] = 85000,
["Country_data_EST"] = 17000,
["Country_data_ETH"] = 4600,
["Country_data_EU"] = 2700,
["Country_data_East_Germany"] = 28000,
["Country_data_Ecuador"] = 48000,
["Country_data_Egypt"] = 65000,
["Country_data_El_Salvador"] = 22000,
["Country_data_Empire_of_Japan"] = 4400,
["Country_data_England"] = 162000,
["Country_data_Equatorial_Guinea"] = 5500,
["Country_data_Eritrea"] = 5500,
["Country_data_Estonia"] = 68000,
["Country_data_Eswatini"] = 5100,
["Country_data_Ethiopia"] = 21000,
["Country_data_Europe"] = 2800,
["Country_data_European_Union"] = 8200,
["Country_data_FIJ"] = 4500,
["Country_data_FIN"] = 40000,
["Country_data_FRA"] = 115000,
["Country_data_FRG"] = 18000,
["Country_data_FRO"] = 2200,
["Country_data_FR_Yugoslavia"] = 4400,
["Country_data_Faroe_Islands"] = 5800,
["Country_data_Federated_States_of_Micronesia"] = 2700,
["Country_data_Fiji"] = 21000,
["Country_data_Finland"] = 113000,
["Country_data_Florida"] = 5900,
["Country_data_France"] = 334000,
["Country_data_French_Polynesia"] = 3900,
["Country_data_GAB"] = 2500,
["Country_data_GAM"] = 2300,
["Country_data_GBR"] = 67000,
["Country_data_GDR"] = 11000,
["Country_data_GEO"] = 16000,
["Country_data_GER"] = 96000,
["Country_data_GHA"] = 10000,
["Country_data_GIB"] = 2100,
["Country_data_GRE"] = 30000,
["Country_data_GUA"] = 5400,
["Country_data_GUI"] = 3400,
["Country_data_GUY"] = 2600,
["Country_data_Gabon"] = 8200,
["Country_data_Gambia"] = 7700,
["Country_data_Georgia"] = 8600,
["Country_data_Georgia_(U.S._state)"] = 3200,
["Country_data_Georgia_(country)"] = 54000,
["Country_data_German_Empire"] = 5700,
["Country_data_Germany"] = 291000,
["Country_data_Ghana"] = 46000,
["Country_data_Gibraltar"] = 5200,
["Country_data_Great_Britain"] = 127000,
["Country_data_Greece"] = 105000,
["Country_data_Greenland"] = 2800,
["Country_data_Grenada"] = 5700,
["Country_data_Guadeloupe"] = 2800,
["Country_data_Guam"] = 4600,
["Country_data_Guatemala"] = 22000,
["Country_data_Guinea"] = 9500,
["Country_data_Guinea-Bissau"] = 5500,
["Country_data_Guyana"] = 7800,
["Country_data_HAI"] = 3300,
["Country_data_HKG"] = 15000,
["Country_data_HON"] = 4400,
["Country_data_HUN"] = 45000,
["Country_data_Haiti"] = 9800,
["Country_data_Hawaii"] = 2200,
["Country_data_Honduras"] = 21000,
["Country_data_Hong_Kong"] = 51000,
["Country_data_Hungary"] = 114000,
["Country_data_IDN"] = 5800,
["Country_data_INA"] = 12000,
["Country_data_IND"] = 34000,
["Country_data_IRE"] = 13000,
["Country_data_IRI"] = 6700,
["Country_data_IRL"] = 24000,
["Country_data_IRN"] = 7400,
["Country_data_IRQ"] = 4800,
["Country_data_ISL"] = 9300,
["Country_data_ISR"] = 23000,
["Country_data_ITA"] = 102000,
["Country_data_Iceland"] = 46000,
["Country_data_Idaho"] = 2200,
["Country_data_Illinois"] = 4500,
["Country_data_India"] = 258000,
["Country_data_Indiana"] = 3400,
["Country_data_Indonesia"] = 71000,
["Country_data_Iowa"] = 2400,
["Country_data_Iran"] = 160000,
["Country_data_Iraq"] = 23000,
["Country_data_Ireland"] = 66000,
["Country_data_Isle_of_Man"] = 2900,
["Country_data_Israel"] = 93000,
["Country_data_Italy"] = 287000,
["Country_data_Ivory_Coast"] = 33000,
["Country_data_JAM"] = 12000,
["Country_data_JAP"] = 2300,
["Country_data_JOR"] = 4800,
["Country_data_JP"] = 8700,
["Country_data_JPN"] = 69000,
["Country_data_Jamaica"] = 44000,
["Country_data_Japan"] = 263000,
["Country_data_Jersey"] = 2600,
["Country_data_Jordan"] = 22000,
["Country_data_KAZ"] = 24000,
["Country_data_KEN"] = 10000,
["Country_data_KGZ"] = 4500,
["Country_data_KOR"] = 36000,
["Country_data_KOS"] = 3200,
["Country_data_KSA"] = 7600,
["Country_data_KUW"] = 4600,
["Country_data_Kazakhstan"] = 68000,
["Country_data_Kentucky"] = 2100,
["Country_data_Kenya"] = 35000,
["Country_data_Kingdom_of_France"] = 2200,
["Country_data_Kingdom_of_Great_Britain"] = 4600,
["Country_data_Kingdom_of_Italy"] = 4900,
["Country_data_Kiribati"] = 2600,
["Country_data_Kosovo"] = 10000,
["Country_data_Kuwait"] = 20000,
["Country_data_Kyrgyzstan"] = 11000,
["Country_data_LAO"] = 2200,
["Country_data_LAT"] = 17000,
["Country_data_LBN"] = 3000,
["Country_data_LBR"] = 2000,
["Country_data_LIB"] = 2600,
["Country_data_LIE"] = 3800,
["Country_data_LIT"] = 3700,
["Country_data_LTU"] = 15000,
["Country_data_LUX"] = 12000,
["Country_data_LVA"] = 3100,
["Country_data_Laos"] = 8000,
["Country_data_Latvia"] = 55000,
["Country_data_Lebanon"] = 24000,
["Country_data_Lesotho"] = 5400,
["Country_data_Liberia"] = 7900,
["Country_data_Libya"] = 9100,
["Country_data_Liechtenstein"] = 8900,
["Country_data_Lithuania"] = 54000,
["Country_data_Louisiana"] = 2300,
["Country_data_Luxembourg"] = 48000,
["Country_data_MAC"] = 3000,
["Country_data_MAD"] = 2400,
["Country_data_MAR"] = 15000,
["Country_data_MAS"] = 13000,
["Country_data_MDA"] = 8900,
["Country_data_MEX"] = 35000,
["Country_data_MGL"] = 3600,
["Country_data_MKD"] = 8600,
["Country_data_MLI"] = 4700,
["Country_data_MLT"] = 6500,
["Country_data_MNE"] = 8600,
["Country_data_MON"] = 4700,
["Country_data_MOZ"] = 2700,
["Country_data_MRI"] = 2300,
["Country_data_MYA"] = 3400,
["Country_data_MYS"] = 4200,
["Country_data_Macau"] = 6900,
["Country_data_Macedonia"] = 4600,
["Country_data_Madagascar"] = 9700,
["Country_data_Malawi"] = 6200,
["Country_data_Malaysia"] = 71000,
["Country_data_Maldives"] = 6700,
["Country_data_Mali"] = 21000,
["Country_data_Malta"] = 31000,
["Country_data_Manitoba"] = 3000,
["Country_data_Marshall_Islands"] = 3400,
["Country_data_Martinique"] = 2700,
["Country_data_Maryland"] = 3300,
["Country_data_Massachusetts"] = 2600,
["Country_data_Mauritania"] = 6000,
["Country_data_Mauritius"] = 8500,
["Country_data_Mexico"] = 114000,
["Country_data_Michigan"] = 3900,
["Country_data_Minas_Gerais"] = 2100,
["Country_data_Minnesota"] = 3700,
["Country_data_Missouri"] = 2500,
["Country_data_Moldova"] = 33000,
["Country_data_Monaco"] = 12000,
["Country_data_Mongolia"] = 11000,
["Country_data_Montana"] = 2400,
["Country_data_Montenegro"] = 33000,
["Country_data_Montserrat"] = 2500,
["Country_data_Morocco"] = 51000,
["Country_data_Mozambique"] = 8000,
["Country_data_Myanmar"] = 23000,
["Country_data_NAM"] = 4000,
["Country_data_NED"] = 72000,
["Country_data_NEP"] = 3400,
["Country_data_NGA"] = 8700,
["Country_data_NGR"] = 9400,
["Country_data_NIR"] = 11000,
["Country_data_NLD"] = 7400,
["Country_data_NOR"] = 35000,
["Country_data_NZ"] = 3700,
["Country_data_NZL"] = 39000,
["Country_data_Namibia"] = 11000,
["Country_data_Nauru"] = 2600,
["Country_data_Nazi_Germany"] = 10000,
["Country_data_Nepal"] = 32000,
["Country_data_Netherlands"] = 261000,
["Country_data_Netherlands_Antilles"] = 2400,
["Country_data_Nevada"] = 2100,
["Country_data_New_Brunswick"] = 2600,
["Country_data_New_Caledonia"] = 3300,
["Country_data_New_Hampshire"] = 2100,
["Country_data_New_Jersey"] = 4300,
["Country_data_New_South_Wales"] = 6400,
["Country_data_New_York"] = 4300,
["Country_data_New_York_(state)"] = 6800,
["Country_data_New_Zealand"] = 119000,
["Country_data_Newfoundland_and_Labrador"] = 2900,
["Country_data_Nicaragua"] = 9000,
["Country_data_Niger"] = 6300,
["Country_data_Nigeria"] = 67000,
["Country_data_North_Carolina"] = 3500,
["Country_data_North_Korea"] = 23000,
["Country_data_North_Macedonia"] = 33000,
["Country_data_Northern_Ireland"] = 27000,
["Country_data_Northern_Mariana_Islands"] = 2800,
["Country_data_Norway"] = 117000,
["Country_data_Nova_Scotia"] = 2800,
["Country_data_OMA"] = 3300,
["Country_data_Ohio"] = 6000,
["Country_data_Oklahoma"] = 2500,
["Country_data_Oman"] = 10000,
["Country_data_Ontario"] = 3900,
["Country_data_Ottoman_Empire"] = 3200,
["Country_data_PAK"] = 9100,
["Country_data_PAN"] = 6000,
["Country_data_PAR"] = 11000,
["Country_data_PER"] = 14000,
["Country_data_PHI"] = 13000,
["Country_data_PLE"] = 2000,
["Country_data_PNG"] = 3200,
["Country_data_POL"] = 61000,
["Country_data_POR"] = 37000,
["Country_data_PRK"] = 5000,
["Country_data_PRT"] = 3600,
["Country_data_PUR"] = 8100,
["Country_data_Pakistan"] = 51000,
["Country_data_Palau"] = 2600,
["Country_data_Palestine"] = 7700,
["Country_data_Panama"] = 30000,
["Country_data_Papua_New_Guinea"] = 8400,
["Country_data_Paraguay"] = 45000,
["Country_data_Pennsylvania"] = 3600,
["Country_data_Peru"] = 64000,
["Country_data_Philippines"] = 68000,
["Country_data_Poland"] = 241000,
["Country_data_Portugal"] = 117000,
["Country_data_Prussia"] = 2800,
["Country_data_Puerto_Rico"] = 34000,
["Country_data_QAT"] = 9600,
["Country_data_Qatar"] = 32000,
["Country_data_Quebec"] = 4400,
["Country_data_Queensland"] = 2400,
["Country_data_ROM"] = 15000,
["Country_data_ROU"] = 31000,
["Country_data_RSA"] = 36000,
["Country_data_RUS"] = 68000,
["Country_data_RWA"] = 2500,
["Country_data_Republic_of_China"] = 4600,
["Country_data_Republic_of_Ireland"] = 54000,
["Country_data_Republic_of_the_Congo"] = 8300,
["Country_data_Romania"] = 113000,
["Country_data_Russia"] = 254000,
["Country_data_Russian_Empire"] = 5700,
["Country_data_Rwanda"] = 8500,
["Country_data_SAM"] = 3700,
["Country_data_SCG"] = 2900,
["Country_data_SCO"] = 29000,
["Country_data_SEN"] = 8500,
["Country_data_SER"] = 3700,
["Country_data_SGP"] = 4500,
["Country_data_SIN"] = 7500,
["Country_data_SLE"] = 2100,
["Country_data_SLO"] = 22000,
["Country_data_SLV"] = 3200,
["Country_data_SMR"] = 3600,
["Country_data_SPA"] = 5500,
["Country_data_SRB"] = 31000,
["Country_data_SRI"] = 5300,
["Country_data_SUI"] = 51000,
["Country_data_SUR"] = 2300,
["Country_data_SVK"] = 32000,
["Country_data_SVN"] = 7400,
["Country_data_SWE"] = 65000,
["Country_data_SWI"] = 5100,
["Country_data_SYR"] = 4000,
["Country_data_Saint_Kitts_and_Nevis"] = 4900,
["Country_data_Saint_Lucia"] = 5300,
["Country_data_Saint_Vincent_and_the_Grenadines"] = 5000,
["Country_data_Samoa"] = 8100,
["Country_data_San_Marino"] = 9700,
["Country_data_Saskatchewan"] = 4000,
["Country_data_Saudi_Arabia"] = 37000,
["Country_data_Scotland"] = 101000,
["Country_data_Senegal"] = 31000,
["Country_data_Serbia"] = 104000,
["Country_data_Serbia_and_Montenegro"] = 5400,
["Country_data_Seychelles"] = 5800,
["Country_data_Sierra_Leone"] = 7600,
["Country_data_Singapore"] = 50000,
["Country_data_Slovakia"] = 95000,
["Country_data_Slovenia"] = 91000,
["Country_data_Solomon_Islands"] = 4700,
["Country_data_Somalia"] = 6400,
["Country_data_South_Africa"] = 121000,
["Country_data_South_Australia"] = 2300,
["Country_data_South_Carolina"] = 3100,
["Country_data_South_Korea"] = 116000,
["Country_data_South_Sudan"] = 4800,
["Country_data_Soviet_Union"] = 77000,
["Country_data_Spain"] = 276000,
["Country_data_Sri_Lanka"] = 35000,
["Country_data_Sudan"] = 8700,
["Country_data_Suriname"] = 6800,
["Country_data_Sweden"] = 166000,
["Country_data_Switzerland"] = 150000,
["Country_data_Syria"] = 21000,
["Country_data_São_Tomé_and_Príncipe"] = 3400,
["Country_data_TAN"] = 3500,
["Country_data_TCH"] = 12000,
["Country_data_THA"] = 25000,
["Country_data_TJK"] = 2900,
["Country_data_TKM"] = 3100,
["Country_data_TOG"] = 2100,
["Country_data_TON"] = 2000,
["Country_data_TPE"] = 19000,
["Country_data_TRI"] = 5100,
["Country_data_TTO"] = 2200,
["Country_data_TUN"] = 12000,
["Country_data_TUR"] = 33000,
["Country_data_TWN"] = 2200,
["Country_data_Taiwan"] = 27000,
["Country_data_Tajikistan"] = 9700,
["Country_data_Tanzania"] = 22000,
["Country_data_Tennessee"] = 2300,
["Country_data_Texas"] = 5800,
["Country_data_Thailand"] = 96000,
["Country_data_Timor-Leste"] = 5100,
["Country_data_Togo"] = 7600,
["Country_data_Tonga"] = 6700,
["Country_data_Trinidad_and_Tobago"] = 24000,
["Country_data_Tunisia"] = 46000,
["Country_data_Turkey"] = 139000,
["Country_data_Turkmenistan"] = 8400,
["Country_data_Turks_and_Caicos_Islands"] = 2800,
["Country_data_Tuvalu"] = 2600,
["Country_data_U.S."] = 2000,
["Country_data_U.S._Virgin_Islands"] = 4900,
["Country_data_UAE"] = 11000,
["Country_data_UGA"] = 5300,
["Country_data_UK"] = 19000,
["Country_data_UKGBI"] = 3500,
["Country_data_UKR"] = 44000,
["Country_data_URS"] = 19000,
["Country_data_URU"] = 16000,
["Country_data_US"] = 5600,
["Country_data_USA"] = 151000,
["Country_data_USSR"] = 5300,
["Country_data_UZB"] = 14000,
["Country_data_Uganda"] = 22000,
["Country_data_Ukraine"] = 118000,
["Country_data_United_Arab_Emirates"] = 38000,
["Country_data_United_Kingdom"] = 158000,
["Country_data_United_Kingdom_of_Great_Britain_and_Ireland"] = 4900,
["Country_data_United_Nations"] = 4400,
["Country_data_United_States"] = 438000,
["Country_data_United_States_of_America"] = 4500,
["Country_data_Uruguay"] = 52000,
["Country_data_Uzbekistan"] = 36000,
["Country_data_VEN"] = 18000,
["Country_data_VIE"] = 7400,
["Country_data_Vanuatu"] = 5100,
["Country_data_Vatican_City"] = 3000,
["Country_data_Venezuela"] = 66000,
["Country_data_Victoria"] = 2400,
["Country_data_Vietnam"] = 46000,
["Country_data_Virginia"] = 3100,
["Country_data_WAL"] = 19000,
["Country_data_Wales"] = 68000,
["Country_data_Washington"] = 2700,
["Country_data_Washington,_D.C."] = 2200,
["Country_data_Washington_(state)"] = 3400,
["Country_data_West_Germany"] = 52000,
["Country_data_West_Indies"] = 2900,
["Country_data_Wisconsin"] = 5600,
["Country_data_Wyoming"] = 2100,
["Country_data_YUG"] = 11000,
["Country_data_Yemen"] = 8000,
["Country_data_Yugoslavia"] = 34000,
["Country_data_ZAF"] = 5400,
["Country_data_ZAM"] = 3800,
["Country_data_ZIM"] = 9200,
["Country_data_Zambia"] = 11000,
["Country_data_Zimbabwe"] = 32000,
["Country_data_none"] = 2100,
["Country_flagbio"] = 40000,
["Country_in_the_Eurovision_Song_Contest"] = 2900,
["Country_name"] = 59000,
["Country_prefix_the"] = 176000,
["Country_showdata"] = 7000,
["Country_topics"] = 25000,
["County"] = 7000,
["County_(judet)_of_Romania"] = 3300,
["Course_assignment"] = 4200,
["Course_details"] = 8600,
["Course_instructor"] = 3200,
["Cquote"] = 35000,
["Cr"] = 5000,
["Cr-rt"] = 2400,
["Create_taxonomy/link"] = 150000,
["Creative_Commons_text_attribution_notice"] = 6500,
["Cref2"] = 2900,
["Cricinfo"] = 24000,
["Cricket_squad2_player"] = 2800,
["Cricketarchive"] = 3000,
["Croatian_Census_2021"] = 4200,
["Cross"] = 4100,
["Crossreference"] = 2600,
["Crossreference/styles.css"] = 2600,
["Cs1_config"] = 13000,
["Cslist"] = 3700,
["Csv"] = 76000,
["Currency"] = 5500,
["Current_events"] = 9400,
["Current_events/styles.css"] = 9400,
["Current_leader"] = 5300,
["Currentdate"] = 24000,
["Cvt"] = 173000,
["Cycling_Archives"] = 4300,
["Cycling_data_DAT"] = 2000,
["Cycling_data_LTD"] = 2400,
["Cycling_data_MOV_men"] = 2300,
["Cycling_data_SOQ"] = 2200,
["Cycling_data_TVL"] = 2400,
["Cycling_data_UEX"] = 2300,
["Cycling_team_link"] = 14000,
["Module:CFB_schedule"] = 29000,
["Module:CS1_identifiers"] = 507000,
["Module:CallAssert"] = 122000,
["Module:Canada_NTS"] = 2200,
["Module:Canada_NTS/data"] = 2200,
["Module:Canada_by_province_category_navigation"] = 9900,
["Module:Catalog_lookup_link"] = 62000,
["Module:Category_described_in_year"] = 6400,
["Module:Category_described_in_year/config"] = 6400,
["Module:Category_disambiguation"] = 2700,
["Module:Category_handler"] = 5000000,
["Module:Category_handler/blacklist"] = 5000000,
["Module:Category_handler/config"] = 5000000,
["Module:Category_handler/data"] = 5000000,
["Module:Category_handler/shared"] = 5000000,
["Module:Category_main_article"] = 221000,
["Module:Category_more_if_exists"] = 49000,
["Module:Category_pair"] = 7100,
["Module:Category_see_also"] = 55000,
["Module:Category_series_navigation"] = 599000,
["Module:Category_series_navigation/styles.css"] = 599000,
["Module:Celestial_object_quadrangle"] = 2100,
["Module:Chart"] = 2900,
["Module:Chart/Default_colors"] = 2900,
["Module:Check_DYK_hook"] = 126000,
["Module:Check_blp_parameter"] = 2920000,
["Module:Check_for_conflicting_parameters"] = 4720000,
["Module:Check_for_deprecated_parameters"] = 943000,
["Module:Check_for_unknown_parameters"] = 23400000,
["Module:Check_height"] = 153000,
["Module:Check_isxn"] = 16000,
["Module:Check_winner_by_scores"] = 16000,
["Module:Checkuser"] = 91000,
["Module:Chem2"] = 11000,
["Module:Chem2/styles.css"] = 11000,
["Module:Citation/CS1"] = 6560000,
["Module:Citation/CS1/COinS"] = 6560000,
["Module:Citation/CS1/Configuration"] = 6680000,
["Module:Citation/CS1/Date_validation"] = 6560000,
["Module:Citation/CS1/Identifiers"] = 6680000,
["Module:Citation/CS1/Suggestions"] = 26000,
["Module:Citation/CS1/Utilities"] = 6680000,
["Module:Citation/CS1/Whitelist"] = 6560000,
["Module:Citation/CS1/styles.css"] = 6690000,
["Module:Citation_mode"] = 49000,
["Module:Cite"] = 53000,
["Module:Cite/config"] = 70000,
["Module:Cite_IUCN"] = 71000,
["Module:Cite_Q"] = 18000,
["Module:Cite_Q/config"] = 18000,
["Module:Cite_taxon"] = 56000,
["Module:Cite_tweet"] = 48000,
["Module:Clade"] = 10000,
["Module:Class"] = 61000,
["Module:Class/definition.json"] = 61000,
["Module:Class/styles.css"] = 39000,
["Module:Class_mask"] = 463000,
["Module:Clickable_button"] = 1870000,
["Module:Collapsible_list"] = 70000,
["Module:College_color"] = 137000,
["Module:College_color/data"] = 137000,
["Module:Color_contrast"] = 577000,
["Module:Color_contrast/colors"] = 579000,
["Module:Comma-separated_list"] = 3700,
["Module:Commons_link"] = 1100000,
["Module:Compact_list"] = 2000,
["Module:Complex_date"] = 48000,
["Module:Conservation_status"] = 89000,
["Module:Contentious_topics/talk_notice"] = 21000,
["Module:Convert"] = 1520000,
["Module:Convert/data"] = 1520000,
["Module:Convert/helper"] = 13000,
["Module:Convert/text"] = 1520000,
["Module:Convert/wikidata"] = 2700,
["Module:Convert/wikidata/data"] = 2700,
["Module:ConvertIB"] = 800000,
["Module:ConvertIB/data"] = 274000,
["Module:ConvertNumeric"] = 21000,
["Module:Convert_character_width"] = 3100,
["Module:Convert_character_width/data"] = 3100,
["Module:Coordinates"] = 1410000,
["Module:Coordinates/styles.css"] = 1410000,
["Module:Copied"] = 43000,
["Module:Country2nationality"] = 97000,
["Module:CountryAdjectiveDemonym"] = 117000,
["Module:CountryAdjectiveDemonym/Adjectives"] = 117000,
["Module:CountryAdjectiveDemonym/Demonyms"] = 117000,
["Module:CountryAdjectiveDemonym/The"] = 117000,
["Module:CountryData"] = 476000,
["Module:CountryData/cacheA"] = 165000,
["Module:CountryData/cacheB"] = 81000,
["Module:CountryData/cacheC"] = 59000,
["Module:CountryData/cacheD"] = 57000,
["Module:CountryData/cacheE"] = 38000,
["Module:CountryData/cacheF"] = 26000,
["Module:CountryData/cacheG"] = 27000,
["Module:CountryData/cacheH"] = 18000,
["Module:CountryData/cacheI"] = 17000,
["Module:CountryData/cacheJ"] = 11000,
["Module:CountryData/cacheK"] = 11000,
["Module:CountryData/summary"] = 476000,
["Module:Country_adjective"] = 4700,
["Module:Country_alias"] = 62000,
["Module:Country_alias/data"] = 63000,
["Module:Cslist"] = 3700,
["Module:Currency"] = 5600,
["Module:Currency/Presentation"] = 5600,
["Module:Current_leader"] = 5500,
["Module:Current_leader/data"] = 5500,
}
e0tu51tk69nu71yupyi75470ixuudbq
Tempilet:Namespace detect
10
1579
11631
2018-01-27T23:54:39Z
en>JJMC89
0
clean subst
11631
wikitext
text/x-wiki
{{SAFESUBST:<noinclude />#invoke:Namespace detect|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
l3ti6zjxip68spdlt018btofjtao8um
11632
11631
2026-09-07T03:19:00Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Namespace_detect]]
11631
wikitext
text/x-wiki
{{SAFESUBST:<noinclude />#invoke:Namespace detect|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
l3ti6zjxip68spdlt018btofjtao8um
Tempilet:Pp
10
1580
11637
2026-08-30T17:52:03Z
en>Asukite
0
fix double redirect [[:w:en:User:Ponor/wAwB| #wAwB]]
11637
wikitext
text/x-wiki
#REDIRECT [[Template:Protected page]]
{{Redirect category shell|
{{R from move}}
{{R from template shortcut}}
}}
isvqshsbl6kwg3hu0omhis38t2yg816
11638
11637
2026-09-07T03:19:00Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Pp]]
11637
wikitext
text/x-wiki
#REDIRECT [[Template:Protected page]]
{{Redirect category shell|
{{R from move}}
{{R from template shortcut}}
}}
isvqshsbl6kwg3hu0omhis38t2yg816
Tempilet:Module rating
10
1581
11641
2025-09-10T15:49:37Z
en>Waddie96
0
Modifying [[WP:RCAT|redirect categories]] using [[User:Wugapodes/Capricorn|Capricorn ♑]]
11641
wikitext
text/x-wiki
#REDIRECT [[Template:Template rating]]
{{Redirect category shell|
{{R from merge}}
{{R mentioned in hatnote}}
}}
1foept7zoaam5vjrfz3pyntp5xbpjv4
11642
11641
2026-09-07T03:19:00Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Module_rating]]
11641
wikitext
text/x-wiki
#REDIRECT [[Template:Template rating]]
{{Redirect category shell|
{{R from merge}}
{{R mentioned in hatnote}}
}}
1foept7zoaam5vjrfz3pyntp5xbpjv4
Tempilet:\sandbox
10
1582
11645
2020-02-11T15:54:10Z
en>Christian75
0
{{sandbox other}} was changed so its now like (sandbox OR doc) other - fixing that
11645
wikitext
text/x-wiki
{{#ifeq:{{SUBPAGENAME}}|sandbox |/sandbox}}<noinclude>{{Documentation}}</noinclude>
4bi6p9anqjrmow6hq8drhyoha2jc6x2
11646
11645
2026-09-07T03:19:01Z
RAPTOR7762
18
1 revision imported from [[:en:Template:\sandbox]]
11645
wikitext
text/x-wiki
{{#ifeq:{{SUBPAGENAME}}|sandbox |/sandbox}}<noinclude>{{Documentation}}</noinclude>
4bi6p9anqjrmow6hq8drhyoha2jc6x2
Tempilet:Protected page
10
1584
11649
2026-08-30T17:26:39Z
en>Primefac
0
/* top */ clean up post-move
11649
wikitext
text/x-wiki
<includeonly>{{#invoke:Protected page|main}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
6y1fepgg5duiitvvcck1nbt4hrqzfwb
11650
11649
2026-09-07T03:19:01Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Protected_page]]
11649
wikitext
text/x-wiki
<includeonly>{{#invoke:Protected page|main}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
6y1fepgg5duiitvvcck1nbt4hrqzfwb
Tempilet:Color/styles.css
10
1585
11651
2024-08-08T18:04:34Z
en>Jon (WMF)
0
Fixes [[phab:T369874]]. Please see talk page and do not revert without discussion (and good reason). See also [[meta:User:Jon_(WMF)/Edit_for_dark_mode_support]]
11651
sanitized-css
text/css
/* {{pp-template}} */
/* [[phab:T360683]]: This stylesheet removes the function of this template in
* dark mode
*/
@media screen {
html.skin-theme-clientpref-night div:not(.notheme) > .tmp-color,
html.skin-theme-clientpref-night p > .tmp-color,
html.skin-theme-clientpref-night table:not(.notheme) .tmp-color {
color: inherit !important;
}
}
@media screen and ( prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os div:not(.notheme) > .tmp-color,
html.skin-theme-clientpref-os p > .tmp-color,
html.skin-theme-clientpref-os table:not(.notheme) .tmp-color {
color: inherit !important;
}
}
dl8bwbkew3oeno6jka06uesbas1lvul
11652
11651
2026-09-07T03:19:01Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Color/styles.css]]
11651
sanitized-css
text/css
/* {{pp-template}} */
/* [[phab:T360683]]: This stylesheet removes the function of this template in
* dark mode
*/
@media screen {
html.skin-theme-clientpref-night div:not(.notheme) > .tmp-color,
html.skin-theme-clientpref-night p > .tmp-color,
html.skin-theme-clientpref-night table:not(.notheme) .tmp-color {
color: inherit !important;
}
}
@media screen and ( prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os div:not(.notheme) > .tmp-color,
html.skin-theme-clientpref-os p > .tmp-color,
html.skin-theme-clientpref-os table:not(.notheme) .tmp-color {
color: inherit !important;
}
}
dl8bwbkew3oeno6jka06uesbas1lvul
Module:Clickable button/doc
828
1586
11653
2025-12-28T15:33:38Z
en>Gonnym
0
Really? In what world using a /sandbox for anything seem like the correct thing here?
11653
wikitext
text/x-wiki
{{Module rating|protected}}
{{Used in system}}
{{Lua|Module:Yesno|Module:Arguments|Module:Delink<!--|Module:URL-->}}
This module implements the {{Template link|Clickable button}} template.
{{#invoke:Clickable button{{\sandbox}}|main|Click me|label=Click here|link=Example}}
{{#invoke:Clickable button{{\sandbox}}|main|Click me|Click2|link=Example}}
{{#invoke:Clickable button{{\sandbox}}|main|Click me|blue|link=Example}}
{{#invoke:Clickable button{{\sandbox}}|main|Click me|class=progressive}}
== Usage from wikitext ==
To use this module from wikitext, you should normally use the {{Template link|Clickable button}} template. However, it can also be used with the syntax <code><nowiki>{{#invoke:Clickable button|main|</nowiki>{{color|olive|''arguments''}}<nowiki>}}</nowiki></code>. Please see the template page for a list of available parameters.
== Usage from Lua modules ==
To use this module from other Lua modules, first load the module.
<syntaxhighlight lang="lua">
local mClickableButton = require('Module:Clickable button')
</syntaxhighlight>
You can then generate a button using the <syntaxhighlight lang="lua" inline>.main</syntaxhighlight> function.
<syntaxhighlight lang="lua">
mClickableButton.main(args)
</syntaxhighlight>
The <var>args</var> variable should be a table containing the arguments to pass to the module. To see the different arguments that can be specified and how they affect the module output, please refer to the {{Template link|Clickable button}} template documentation.
<includeonly>{{Sandbox other||
<!-- Categories go here and interwikis go in Wikidata. -->
}}</includeonly>
<noinclude>
[[Category:Module documentation pages]]
</noinclude>
5iqgof8odlx8bg6pbth0gvuvbsam7o2
11654
11653
2026-09-07T03:19:01Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Clickable_button/doc]]
11653
wikitext
text/x-wiki
{{Module rating|protected}}
{{Used in system}}
{{Lua|Module:Yesno|Module:Arguments|Module:Delink<!--|Module:URL-->}}
This module implements the {{Template link|Clickable button}} template.
{{#invoke:Clickable button{{\sandbox}}|main|Click me|label=Click here|link=Example}}
{{#invoke:Clickable button{{\sandbox}}|main|Click me|Click2|link=Example}}
{{#invoke:Clickable button{{\sandbox}}|main|Click me|blue|link=Example}}
{{#invoke:Clickable button{{\sandbox}}|main|Click me|class=progressive}}
== Usage from wikitext ==
To use this module from wikitext, you should normally use the {{Template link|Clickable button}} template. However, it can also be used with the syntax <code><nowiki>{{#invoke:Clickable button|main|</nowiki>{{color|olive|''arguments''}}<nowiki>}}</nowiki></code>. Please see the template page for a list of available parameters.
== Usage from Lua modules ==
To use this module from other Lua modules, first load the module.
<syntaxhighlight lang="lua">
local mClickableButton = require('Module:Clickable button')
</syntaxhighlight>
You can then generate a button using the <syntaxhighlight lang="lua" inline>.main</syntaxhighlight> function.
<syntaxhighlight lang="lua">
mClickableButton.main(args)
</syntaxhighlight>
The <var>args</var> variable should be a table containing the arguments to pass to the module. To see the different arguments that can be specified and how they affect the module output, please refer to the {{Template link|Clickable button}} template documentation.
<includeonly>{{Sandbox other||
<!-- Categories go here and interwikis go in Wikidata. -->
}}</includeonly>
<noinclude>
[[Category:Module documentation pages]]
</noinclude>
5iqgof8odlx8bg6pbth0gvuvbsam7o2
Module:Protected page
828
1588
11657
2026-08-30T17:24:01Z
en>Primefac
0
update /config call
11657
Scribunto
text/plain
-- This module implements {{pp-meta}} and its daughter templates such as
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
-- Initialise necessary modules.
require('strict')
local makeFileLink = require('Module:File link')._main
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main
local yesno = require('Module:Yesno')
-- Lazily initialise modules and objects we don't always need.
local getArgs, makeMessageBox, lang
-- Set constants.
local CONFIG_MODULE = 'Module:Protected page/config'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function makeCategoryLink(cat, sort)
if cat then
return string.format(
'[[%s:%s|%s]]',
mw.site.namespaces[14].name,
cat,
sort
)
end
end
-- Validation function for the expiry and the protection date
local function validateDate(dateString, dateType)
if not lang then
lang = mw.language.getContentLanguage()
end
local success, result = pcall(lang.formatDate, lang, 'U', dateString)
if success then
result = tonumber(result)
if result then
return result
end
end
error(string.format(
'invalid %s: %s',
dateType,
tostring(dateString)
), 4)
end
local function makeFullUrl(page, query, display)
return string.format(
'[%s %s]',
tostring(mw.uri.fullUrl(page, query)),
display
)
end
-- Given a directed graph formatted as node -> table of direct successors,
-- get a table of all nodes reachable from a given node (though always
-- including the given node).
local function getReachableNodes(graph, start)
local toWalk, retval = {[start] = true}, {}
while true do
-- Can't use pairs() since we're adding and removing things as we're iterating
local k = next(toWalk) -- This always gets the "first" key
if k == nil then
return retval
end
toWalk[k] = nil
retval[k] = true
for _,v in ipairs(graph[k]) do
if not retval[v] then
toWalk[v] = true
end
end
end
end
--------------------------------------------------------------------------------
-- Protection class
--------------------------------------------------------------------------------
local Protection = {}
Protection.__index = Protection
Protection.supportedActions = {
edit = true,
move = true,
autoreview = true,
upload = true
}
Protection.bannerConfigFields = {
'text',
'explanation',
'tooltip',
'alt',
'link',
'image'
}
function Protection.new(args, cfg, title)
local obj = {}
obj._cfg = cfg
obj.title = title or mw.title.getCurrentTitle()
-- Set action
if not args.action then
obj.action = 'edit'
elseif Protection.supportedActions[args.action] then
obj.action = args.action
else
error(string.format(
'invalid action: %s',
tostring(args.action)
), 3)
end
-- Set level
obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)
if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then
-- Users need to be autoconfirmed to move pages anyway, so treat
-- semi-move-protected pages as unprotected.
obj.level = '*'
end
-- Set expiry
local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)
if effectiveExpiry == 'infinity' then
obj.expiry = 'indef'
elseif effectiveExpiry ~= 'unknown' then
obj.expiry = validateDate(effectiveExpiry, 'expiry date')
end
-- Set reason
if args[1] then
obj.reason = mw.ustring.lower(args[1])
if obj.reason:find('|') then
error('reasons cannot contain the pipe character ("|")', 3)
end
end
-- Set protection date
if args.date then
obj.protectionDate = validateDate(args.date, 'protection date')
end
-- Set banner config
do
obj.bannerConfig = {}
local configTables = {}
if cfg.banners[obj.action] then
configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]
end
if cfg.defaultBanners[obj.action] then
configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]
configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default
end
configTables[#configTables + 1] = cfg.masterBanner
for i, field in ipairs(Protection.bannerConfigFields) do
for j, t in ipairs(configTables) do
if t[field] then
obj.bannerConfig[field] = t[field]
break
end
end
end
end
return setmetatable(obj, Protection)
end
function Protection:isUserScript()
-- Whether the page is a user JavaScript or CSS page.
local title = self.title
return title.namespace == 2 and (
title.contentModel == 'javascript' or title.contentModel == 'css'
)
end
function Protection:isProtected()
return self.level ~= '*'
end
function Protection:shouldShowLock()
-- Whether we should output a banner/padlock
return self:isProtected() and not self:isUserScript()
end
-- Whether this page needs a protection category.
Protection.shouldHaveProtectionCategory = Protection.shouldShowLock
function Protection:isTemporary()
return type(self.expiry) == 'number'
end
function Protection:makeProtectionCategory()
if not self:shouldHaveProtectionCategory() then
return ''
end
local cfg = self._cfg
local title = self.title
-- Get the expiry key fragment.
local expiryFragment
if self.expiry == 'indef' then
expiryFragment = self.expiry
elseif type(self.expiry) == 'number' then
expiryFragment = 'temp'
end
-- Get the namespace key fragment.
local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]
if not namespaceFragment and title.namespace % 2 == 1 then
namespaceFragment = 'talk'
end
-- Define the order that key fragments are tested in. This is done with an
-- array of tables containing the value to be tested, along with its
-- position in the cfg.protectionCategories table.
local order = {
{val = expiryFragment, keypos = 1},
{val = namespaceFragment, keypos = 2},
{val = self.reason, keypos = 3},
{val = self.level, keypos = 4},
{val = self.action, keypos = 5}
}
--[[
-- The old protection templates used an ad-hoc protection category system,
-- with some templates prioritising namespaces in their categories, and
-- others prioritising the protection reason. To emulate this in this module
-- we use the config table cfg.reasonsWithNamespacePriority to set the
-- reasons for which namespaces have priority over protection reason.
-- If we are dealing with one of those reasons, move the namespace table to
-- the end of the order table, i.e. give it highest priority. If not, the
-- reason should have highest priority, so move that to the end of the table
-- instead.
--]]
table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))
--[[
-- Define the attempt order. Inactive subtables (subtables with nil "value"
-- fields) are moved to the end, where they will later be given the key
-- "all". This is to cut down on the number of table lookups in
-- cfg.protectionCategories, which grows exponentially with the number of
-- non-nil keys. We keep track of the number of active subtables with the
-- noActive parameter.
--]]
local noActive, attemptOrder
do
local active, inactive = {}, {}
for i, t in ipairs(order) do
if t.val then
active[#active + 1] = t
else
inactive[#inactive + 1] = t
end
end
noActive = #active
attemptOrder = active
for i, t in ipairs(inactive) do
attemptOrder[#attemptOrder + 1] = t
end
end
--[[
-- Check increasingly generic key combinations until we find a match. If a
-- specific category exists for the combination of key fragments we are
-- given, that match will be found first. If not, we keep trying different
-- key fragment combinations until we match using the key
-- "all-all-all-all-all".
--
-- To generate the keys, we index the key subtables using a binary matrix
-- with indexes i and j. j is only calculated up to the number of active
-- subtables. For example, if there were three active subtables, the matrix
-- would look like this, with 0 corresponding to the key fragment "all", and
-- 1 corresponding to other key fragments.
--
-- j 1 2 3
-- i
-- 1 1 1 1
-- 2 0 1 1
-- 3 1 0 1
-- 4 0 0 1
-- 5 1 1 0
-- 6 0 1 0
-- 7 1 0 0
-- 8 0 0 0
--
-- Values of j higher than the number of active subtables are set
-- to the string "all".
--
-- A key for cfg.protectionCategories is constructed for each value of i.
-- The position of the value in the key is determined by the keypos field in
-- each subtable.
--]]
local cats = cfg.protectionCategories
for i = 1, 2^noActive do
local key = {}
for j, t in ipairs(attemptOrder) do
if j > noActive then
key[t.keypos] = 'all'
else
local quotient = i / 2 ^ (j - 1)
quotient = math.ceil(quotient)
if quotient % 2 == 1 then
key[t.keypos] = t.val
else
key[t.keypos] = 'all'
end
end
end
key = table.concat(key, '|')
local attempt = cats[key]
if attempt then
return makeCategoryLink(attempt, title.text)
end
end
return ''
end
function Protection:isIncorrect()
if not self:shouldHaveProtectionCategory() then
return true
end
if type(self.expiry) ~= 'number' then
return false
end
local expiry = os.date('*t', self.expiry)
-- Avoid checking today.day or os.time(), unless close. https://phabricator.wikimedia.org/T416616
local today = os.date('*t')
return (expiry.year < today.year)
or (expiry.year == today.year and expiry.month < today.month)
or (expiry.year == today.year and expiry.month == today.month and expiry.day < today.day)
or (expiry.year == today.year and expiry.month == today.month and expiry.day == today.day and self.expiry < os.time())
end
function Protection:isTemplateProtectedNonTemplate()
local action, namespace = self.action, self.title.namespace
return self.level == 'templateeditor'
and (
(action ~= 'edit' and action ~= 'move')
or (namespace ~= 10 and namespace ~= 828)
)
end
function Protection:makeCategoryLinks()
local msg = self._cfg.msg
local ret = {self:makeProtectionCategory()}
if self:isIncorrect() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-incorrect'],
self.title.text
)
end
if self:isTemplateProtectedNonTemplate() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-template'],
self.title.text
)
end
return table.concat(ret)
end
--------------------------------------------------------------------------------
-- Blurb class
--------------------------------------------------------------------------------
local Blurb = {}
Blurb.__index = Blurb
Blurb.bannerTextFields = {
text = true,
explanation = true,
tooltip = true,
alt = true,
link = true
}
function Blurb.new(protectionObj, args, cfg)
return setmetatable({
_cfg = cfg,
_protectionObj = protectionObj,
_args = args
}, Blurb)
end
-- Private methods --
function Blurb:_formatDate(num)
-- Formats a Unix timestamp into dd Month, YYYY format.
lang = lang or mw.language.getContentLanguage()
local success, date = pcall(
lang.formatDate,
lang,
self._cfg.msg['expiry-date-format'] or 'j F Y',
'@' .. tostring(num)
)
if success then
return date
end
end
function Blurb:_getExpandedMessage(msgKey)
return self:_substituteParameters(self._cfg.msg[msgKey])
end
function Blurb:_substituteParameters(msg)
if not self._params then
local parameterFuncs = {}
parameterFuncs.CURRENTVERSION = self._makeCurrentVersionParameter
parameterFuncs.EDITREQUEST = self._makeEditRequestParameter
parameterFuncs.EXPIRY = self._makeExpiryParameter
parameterFuncs.EXPLANATIONBLURB = self._makeExplanationBlurbParameter
parameterFuncs.IMAGELINK = self._makeImageLinkParameter
parameterFuncs.INTROBLURB = self._makeIntroBlurbParameter
parameterFuncs.INTROFRAGMENT = self._makeIntroFragmentParameter
parameterFuncs.PAGETYPE = self._makePagetypeParameter
parameterFuncs.PROTECTIONBLURB = self._makeProtectionBlurbParameter
parameterFuncs.PROTECTIONDATE = self._makeProtectionDateParameter
parameterFuncs.PROTECTIONLEVEL = self._makeProtectionLevelParameter
parameterFuncs.PROTECTIONLOG = self._makeProtectionLogParameter
parameterFuncs.TALKPAGE = self._makeTalkPageParameter
parameterFuncs.TOOLTIPBLURB = self._makeTooltipBlurbParameter
parameterFuncs.TOOLTIPFRAGMENT = self._makeTooltipFragmentParameter
parameterFuncs.VANDAL = self._makeVandalTemplateParameter
self._params = setmetatable({}, {
__index = function (t, k)
local param
if parameterFuncs[k] then
param = parameterFuncs[k](self)
end
param = param or ''
t[k] = param
return param
end
})
end
msg = msg:gsub('${(%u+)}', self._params)
return msg
end
function Blurb:_makeCurrentVersionParameter()
-- A link to the page history or the move log, depending on the kind of
-- protection.
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'move' then
-- We need the move log link.
return makeFullUrl(
'Special:Log',
{type = 'move', page = pagename},
self:_getExpandedMessage('current-version-move-display')
)
else
-- We need the history link.
return makeFullUrl(
pagename,
{action = 'history'},
self:_getExpandedMessage('current-version-edit-display')
)
end
end
function Blurb:_makeEditRequestParameter()
local mEditRequest = require('Module:Submit an edit request')
local action = self._protectionObj.action
local level = self._protectionObj.level
-- Get the edit request type.
local requestType
if action == 'edit' then
if level == 'autoconfirmed' then
requestType = 'semi'
elseif level == 'extendedconfirmed' then
requestType = 'extended'
elseif level == 'templateeditor' then
requestType = 'template'
end
end
requestType = requestType or 'full'
-- Get the display value.
local display = self:_getExpandedMessage('edit-request-display')
return mEditRequest._link{type = requestType, display = display}
end
function Blurb:_makeExpiryParameter()
local expiry = self._protectionObj.expiry
if type(expiry) == 'number' then
return self:_formatDate(expiry)
else
return expiry
end
end
function Blurb:_makeExplanationBlurbParameter()
-- Cover special cases first.
if self._protectionObj.title.namespace == 8 then
-- MediaWiki namespace
return self:_getExpandedMessage('explanation-blurb-nounprotect')
end
-- Get explanation blurb table keys
local action = self._protectionObj.action
local level = self._protectionObj.level
local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject'
-- Find the message in the explanation blurb table and substitute any
-- parameters.
local explanations = self._cfg.explanationBlurbs
local msg
if explanations[action][level] and explanations[action][level][talkKey] then
msg = explanations[action][level][talkKey]
elseif explanations[action][level] and explanations[action][level].default then
msg = explanations[action][level].default
elseif explanations[action].default and explanations[action].default[talkKey] then
msg = explanations[action].default[talkKey]
elseif explanations[action].default and explanations[action].default.default then
msg = explanations[action].default.default
else
error(string.format(
'could not find explanation blurb for action "%s", level "%s" and talk key "%s"',
action,
level,
talkKey
), 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeImageLinkParameter()
local imageLinks = self._cfg.imageLinks
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if imageLinks[action][level] then
msg = imageLinks[action][level]
elseif imageLinks[action].default then
msg = imageLinks[action].default
else
msg = imageLinks.edit.default
end
return self:_substituteParameters(msg)
end
function Blurb:_makeIntroBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-blurb-expiry')
else
return self:_getExpandedMessage('intro-blurb-noexpiry')
end
end
function Blurb:_makeIntroFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-fragment-expiry')
else
return self:_getExpandedMessage('intro-fragment-noexpiry')
end
end
function Blurb:_makePagetypeParameter()
local pagetypes = self._cfg.pagetypes
return pagetypes[self._protectionObj.title.namespace]
or pagetypes.default
or error('no default pagetype defined', 8)
end
function Blurb:_makeProtectionBlurbParameter()
local protectionBlurbs = self._cfg.protectionBlurbs
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionBlurbs[action][level] then
msg = protectionBlurbs[action][level]
elseif protectionBlurbs[action].default then
msg = protectionBlurbs[action].default
elseif protectionBlurbs.edit.default then
msg = protectionBlurbs.edit.default
else
error('no protection blurb defined for protectionBlurbs.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionDateParameter()
local protectionDate = self._protectionObj.protectionDate
if type(protectionDate) == 'number' then
return self:_formatDate(protectionDate)
else
return protectionDate
end
end
function Blurb:_makeProtectionLevelParameter()
local protectionLevels = self._cfg.protectionLevels
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionLevels[action][level] then
msg = protectionLevels[action][level]
elseif protectionLevels[action].default then
msg = protectionLevels[action].default
elseif protectionLevels.edit.default then
msg = protectionLevels.edit.default
else
error('no protection level defined for protectionLevels.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionLogParameter()
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'autoreview' then
-- We need the pending changes log.
return makeFullUrl(
'Special:Log',
{type = 'stable', page = pagename},
self:_getExpandedMessage('pc-log-display')
)
else
-- We need the protection log.
return makeFullUrl(
'Special:Log',
{type = 'protect', page = pagename},
self:_getExpandedMessage('protection-log-display')
)
end
end
function Blurb:_makeTalkPageParameter()
return string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[self._protectionObj.title.namespace].talk.name,
self._protectionObj.title.text,
self._args.section or 'top',
self:_getExpandedMessage('talk-page-link-display')
)
end
function Blurb:_makeTooltipBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-blurb-expiry')
else
return self:_getExpandedMessage('tooltip-blurb-noexpiry')
end
end
function Blurb:_makeTooltipFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-fragment-expiry')
else
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
end
end
function Blurb:_makeVandalTemplateParameter()
return mw.getCurrentFrame():expandTemplate{
title="vandal-m",
args={self._args.user or self._protectionObj.title.baseText}
}
end
-- Public methods --
function Blurb:makeBannerText(key)
-- Validate input.
if not key or not Blurb.bannerTextFields[key] then
error(string.format(
'"%s" is not a valid banner config field',
tostring(key)
), 2)
end
-- Generate the text.
local msg = self._protectionObj.bannerConfig[key]
if type(msg) == 'string' then
return self:_substituteParameters(msg)
elseif type(msg) == 'function' then
msg = msg(self._protectionObj, self._args)
if type(msg) ~= 'string' then
error(string.format(
'bad output from banner config function with key "%s"'
.. ' (expected string, got %s)',
tostring(key),
type(msg)
), 4)
end
return self:_substituteParameters(msg)
end
end
--------------------------------------------------------------------------------
-- BannerTemplate class
--------------------------------------------------------------------------------
local BannerTemplate = {}
BannerTemplate.__index = BannerTemplate
function BannerTemplate.new(protectionObj, cfg)
local obj = {}
obj._cfg = cfg
-- Set the image filename.
local imageFilename = protectionObj.bannerConfig.image
if imageFilename then
obj._imageFilename = imageFilename
else
-- If an image filename isn't specified explicitly in the banner config,
-- generate it from the protection status and the namespace.
local action = protectionObj.action
local level = protectionObj.level
local namespace = protectionObj.title.namespace
local reason = protectionObj.reason
-- Deal with special cases first.
if (
namespace == 10
or namespace == 828
or reason and obj._cfg.indefImageReasons[reason]
)
and action == 'edit'
and level == 'sysop'
and not protectionObj:isTemporary()
then
-- Fully protected modules and templates get the special red "indef"
-- padlock.
obj._imageFilename = obj._cfg.msg['image-filename-indef']
else
-- Deal with regular protection types.
local images = obj._cfg.images
if images[action] then
if images[action][level] then
obj._imageFilename = images[action][level]
elseif images[action].default then
obj._imageFilename = images[action].default
end
end
end
end
return setmetatable(obj, BannerTemplate)
end
function BannerTemplate:renderImage()
local filename = self._imageFilename
or self._cfg.msg['image-filename-default']
or 'Transparent.gif'
return makeFileLink{
file = filename,
size = (self.imageWidth or 20) .. 'px',
alt = self._imageAlt,
link = self._imageLink,
caption = self.imageCaption
}
end
--------------------------------------------------------------------------------
-- Banner class
--------------------------------------------------------------------------------
local Banner = setmetatable({}, BannerTemplate)
Banner.__index = Banner
function Banner.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 40
obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip.
obj._reasonText = blurbObj:makeBannerText('text')
obj._explanationText = blurbObj:makeBannerText('explanation')
obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.
return setmetatable(obj, Banner)
end
function Banner:__tostring()
-- Renders the banner.
makeMessageBox = makeMessageBox or require('Module:Message box').main
local reasonText = self._reasonText or error('no reason text set', 2)
local explanationText = self._explanationText
local mbargs = {
page = self._page,
type = 'protection',
image = self:renderImage(),
text = string.format(
"'''%s'''%s",
reasonText,
explanationText and '<br />' .. explanationText or ''
)
}
return makeMessageBox('mbox', mbargs)
end
--------------------------------------------------------------------------------
-- Padlock class
--------------------------------------------------------------------------------
local Padlock = setmetatable({}, BannerTemplate)
Padlock.__index = Padlock
function Padlock.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 20
obj.imageCaption = blurbObj:makeBannerText('tooltip')
obj._imageAlt = blurbObj:makeBannerText('alt')
obj._imageLink = blurbObj:makeBannerText('link')
obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]
or cfg.padlockIndicatorNames.default
or 'pp-default'
return setmetatable(obj, Padlock)
end
function Padlock:__tostring()
local frame = mw.getCurrentFrame()
-- The nowiki tag helps prevent whitespace at the top of articles.
return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{
name = 'indicator',
args = {name = self._indicatorName},
content = self:renderImage()
}
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- This is used for testing purposes.
return {
Protection = Protection,
Blurb = Blurb,
BannerTemplate = BannerTemplate,
Banner = Banner,
Padlock = Padlock,
}
end
function p._main(args, cfg, title)
args = args or {}
cfg = cfg or require(CONFIG_MODULE)
local protectionObj = Protection.new(args, cfg, title)
local ret = {}
-- If a page's edit protection is equally or more restrictive than its
-- protection from some other action, then don't bother displaying anything
-- for the other action (except categories).
if not yesno(args.catonly) and (protectionObj.action == 'edit' or
args.demolevel or
not getReachableNodes(
cfg.hierarchy,
protectionObj.level
)[effectiveProtectionLevel('edit', protectionObj.title)])
then
-- Initialise the blurb object
local blurbObj = Blurb.new(protectionObj, args, cfg)
-- Render the banner
if protectionObj:shouldShowLock() then
ret[#ret + 1] = tostring(
(yesno(args.small) and Padlock or Banner)
.new(protectionObj, blurbObj, cfg)
)
end
end
-- Render the categories
if yesno(args.category) ~= false then
ret[#ret + 1] = protectionObj:makeCategoryLinks()
end
-- For arbitration enforcement, flagging [[WP:PIA]] pages to enable [[Special:AbuseFilter/1339]] to flag edits to them
if protectionObj.level == "extendedconfirmed" then
if require("Module:TableTools").inArray(protectionObj.title.talkPageTitle.categories, "Wikipedia pages subject to the extended confirmed restriction related to the Arab-Israeli conflict") then
ret[#ret + 1] = "<p class='PIA-flag' style='display:none; visibility:hidden;' title='This page is subject to the extended confirmed restriction related to the Arab-Israeli conflict.'></p>"
end
end
return table.concat(ret)
end
function p.main(frame, cfg)
cfg = cfg or require(CONFIG_MODULE)
-- Find default args, if any.
local parent = frame.getParent and frame:getParent()
local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]
-- Find user args, and use the parent frame if we are being called from a
-- wrapper template.
getArgs = getArgs or require('Module:Arguments').getArgs
local userArgs = getArgs(frame, {
parentOnly = defaultArgs,
frameOnly = not defaultArgs
})
-- Build the args table. User-specified args overwrite default args.
local args = {}
for k, v in pairs(defaultArgs or {}) do
args[k] = v
end
for k, v in pairs(userArgs) do
args[k] = v
end
return p._main(args, cfg)
end
return p
p8ryzquso3eyufqyguwh2oyqz5eu1l6
11658
11657
2026-09-07T03:19:01Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Protected_page]]
11657
Scribunto
text/plain
-- This module implements {{pp-meta}} and its daughter templates such as
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
-- Initialise necessary modules.
require('strict')
local makeFileLink = require('Module:File link')._main
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main
local yesno = require('Module:Yesno')
-- Lazily initialise modules and objects we don't always need.
local getArgs, makeMessageBox, lang
-- Set constants.
local CONFIG_MODULE = 'Module:Protected page/config'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function makeCategoryLink(cat, sort)
if cat then
return string.format(
'[[%s:%s|%s]]',
mw.site.namespaces[14].name,
cat,
sort
)
end
end
-- Validation function for the expiry and the protection date
local function validateDate(dateString, dateType)
if not lang then
lang = mw.language.getContentLanguage()
end
local success, result = pcall(lang.formatDate, lang, 'U', dateString)
if success then
result = tonumber(result)
if result then
return result
end
end
error(string.format(
'invalid %s: %s',
dateType,
tostring(dateString)
), 4)
end
local function makeFullUrl(page, query, display)
return string.format(
'[%s %s]',
tostring(mw.uri.fullUrl(page, query)),
display
)
end
-- Given a directed graph formatted as node -> table of direct successors,
-- get a table of all nodes reachable from a given node (though always
-- including the given node).
local function getReachableNodes(graph, start)
local toWalk, retval = {[start] = true}, {}
while true do
-- Can't use pairs() since we're adding and removing things as we're iterating
local k = next(toWalk) -- This always gets the "first" key
if k == nil then
return retval
end
toWalk[k] = nil
retval[k] = true
for _,v in ipairs(graph[k]) do
if not retval[v] then
toWalk[v] = true
end
end
end
end
--------------------------------------------------------------------------------
-- Protection class
--------------------------------------------------------------------------------
local Protection = {}
Protection.__index = Protection
Protection.supportedActions = {
edit = true,
move = true,
autoreview = true,
upload = true
}
Protection.bannerConfigFields = {
'text',
'explanation',
'tooltip',
'alt',
'link',
'image'
}
function Protection.new(args, cfg, title)
local obj = {}
obj._cfg = cfg
obj.title = title or mw.title.getCurrentTitle()
-- Set action
if not args.action then
obj.action = 'edit'
elseif Protection.supportedActions[args.action] then
obj.action = args.action
else
error(string.format(
'invalid action: %s',
tostring(args.action)
), 3)
end
-- Set level
obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)
if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then
-- Users need to be autoconfirmed to move pages anyway, so treat
-- semi-move-protected pages as unprotected.
obj.level = '*'
end
-- Set expiry
local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)
if effectiveExpiry == 'infinity' then
obj.expiry = 'indef'
elseif effectiveExpiry ~= 'unknown' then
obj.expiry = validateDate(effectiveExpiry, 'expiry date')
end
-- Set reason
if args[1] then
obj.reason = mw.ustring.lower(args[1])
if obj.reason:find('|') then
error('reasons cannot contain the pipe character ("|")', 3)
end
end
-- Set protection date
if args.date then
obj.protectionDate = validateDate(args.date, 'protection date')
end
-- Set banner config
do
obj.bannerConfig = {}
local configTables = {}
if cfg.banners[obj.action] then
configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]
end
if cfg.defaultBanners[obj.action] then
configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]
configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default
end
configTables[#configTables + 1] = cfg.masterBanner
for i, field in ipairs(Protection.bannerConfigFields) do
for j, t in ipairs(configTables) do
if t[field] then
obj.bannerConfig[field] = t[field]
break
end
end
end
end
return setmetatable(obj, Protection)
end
function Protection:isUserScript()
-- Whether the page is a user JavaScript or CSS page.
local title = self.title
return title.namespace == 2 and (
title.contentModel == 'javascript' or title.contentModel == 'css'
)
end
function Protection:isProtected()
return self.level ~= '*'
end
function Protection:shouldShowLock()
-- Whether we should output a banner/padlock
return self:isProtected() and not self:isUserScript()
end
-- Whether this page needs a protection category.
Protection.shouldHaveProtectionCategory = Protection.shouldShowLock
function Protection:isTemporary()
return type(self.expiry) == 'number'
end
function Protection:makeProtectionCategory()
if not self:shouldHaveProtectionCategory() then
return ''
end
local cfg = self._cfg
local title = self.title
-- Get the expiry key fragment.
local expiryFragment
if self.expiry == 'indef' then
expiryFragment = self.expiry
elseif type(self.expiry) == 'number' then
expiryFragment = 'temp'
end
-- Get the namespace key fragment.
local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]
if not namespaceFragment and title.namespace % 2 == 1 then
namespaceFragment = 'talk'
end
-- Define the order that key fragments are tested in. This is done with an
-- array of tables containing the value to be tested, along with its
-- position in the cfg.protectionCategories table.
local order = {
{val = expiryFragment, keypos = 1},
{val = namespaceFragment, keypos = 2},
{val = self.reason, keypos = 3},
{val = self.level, keypos = 4},
{val = self.action, keypos = 5}
}
--[[
-- The old protection templates used an ad-hoc protection category system,
-- with some templates prioritising namespaces in their categories, and
-- others prioritising the protection reason. To emulate this in this module
-- we use the config table cfg.reasonsWithNamespacePriority to set the
-- reasons for which namespaces have priority over protection reason.
-- If we are dealing with one of those reasons, move the namespace table to
-- the end of the order table, i.e. give it highest priority. If not, the
-- reason should have highest priority, so move that to the end of the table
-- instead.
--]]
table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))
--[[
-- Define the attempt order. Inactive subtables (subtables with nil "value"
-- fields) are moved to the end, where they will later be given the key
-- "all". This is to cut down on the number of table lookups in
-- cfg.protectionCategories, which grows exponentially with the number of
-- non-nil keys. We keep track of the number of active subtables with the
-- noActive parameter.
--]]
local noActive, attemptOrder
do
local active, inactive = {}, {}
for i, t in ipairs(order) do
if t.val then
active[#active + 1] = t
else
inactive[#inactive + 1] = t
end
end
noActive = #active
attemptOrder = active
for i, t in ipairs(inactive) do
attemptOrder[#attemptOrder + 1] = t
end
end
--[[
-- Check increasingly generic key combinations until we find a match. If a
-- specific category exists for the combination of key fragments we are
-- given, that match will be found first. If not, we keep trying different
-- key fragment combinations until we match using the key
-- "all-all-all-all-all".
--
-- To generate the keys, we index the key subtables using a binary matrix
-- with indexes i and j. j is only calculated up to the number of active
-- subtables. For example, if there were three active subtables, the matrix
-- would look like this, with 0 corresponding to the key fragment "all", and
-- 1 corresponding to other key fragments.
--
-- j 1 2 3
-- i
-- 1 1 1 1
-- 2 0 1 1
-- 3 1 0 1
-- 4 0 0 1
-- 5 1 1 0
-- 6 0 1 0
-- 7 1 0 0
-- 8 0 0 0
--
-- Values of j higher than the number of active subtables are set
-- to the string "all".
--
-- A key for cfg.protectionCategories is constructed for each value of i.
-- The position of the value in the key is determined by the keypos field in
-- each subtable.
--]]
local cats = cfg.protectionCategories
for i = 1, 2^noActive do
local key = {}
for j, t in ipairs(attemptOrder) do
if j > noActive then
key[t.keypos] = 'all'
else
local quotient = i / 2 ^ (j - 1)
quotient = math.ceil(quotient)
if quotient % 2 == 1 then
key[t.keypos] = t.val
else
key[t.keypos] = 'all'
end
end
end
key = table.concat(key, '|')
local attempt = cats[key]
if attempt then
return makeCategoryLink(attempt, title.text)
end
end
return ''
end
function Protection:isIncorrect()
if not self:shouldHaveProtectionCategory() then
return true
end
if type(self.expiry) ~= 'number' then
return false
end
local expiry = os.date('*t', self.expiry)
-- Avoid checking today.day or os.time(), unless close. https://phabricator.wikimedia.org/T416616
local today = os.date('*t')
return (expiry.year < today.year)
or (expiry.year == today.year and expiry.month < today.month)
or (expiry.year == today.year and expiry.month == today.month and expiry.day < today.day)
or (expiry.year == today.year and expiry.month == today.month and expiry.day == today.day and self.expiry < os.time())
end
function Protection:isTemplateProtectedNonTemplate()
local action, namespace = self.action, self.title.namespace
return self.level == 'templateeditor'
and (
(action ~= 'edit' and action ~= 'move')
or (namespace ~= 10 and namespace ~= 828)
)
end
function Protection:makeCategoryLinks()
local msg = self._cfg.msg
local ret = {self:makeProtectionCategory()}
if self:isIncorrect() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-incorrect'],
self.title.text
)
end
if self:isTemplateProtectedNonTemplate() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-template'],
self.title.text
)
end
return table.concat(ret)
end
--------------------------------------------------------------------------------
-- Blurb class
--------------------------------------------------------------------------------
local Blurb = {}
Blurb.__index = Blurb
Blurb.bannerTextFields = {
text = true,
explanation = true,
tooltip = true,
alt = true,
link = true
}
function Blurb.new(protectionObj, args, cfg)
return setmetatable({
_cfg = cfg,
_protectionObj = protectionObj,
_args = args
}, Blurb)
end
-- Private methods --
function Blurb:_formatDate(num)
-- Formats a Unix timestamp into dd Month, YYYY format.
lang = lang or mw.language.getContentLanguage()
local success, date = pcall(
lang.formatDate,
lang,
self._cfg.msg['expiry-date-format'] or 'j F Y',
'@' .. tostring(num)
)
if success then
return date
end
end
function Blurb:_getExpandedMessage(msgKey)
return self:_substituteParameters(self._cfg.msg[msgKey])
end
function Blurb:_substituteParameters(msg)
if not self._params then
local parameterFuncs = {}
parameterFuncs.CURRENTVERSION = self._makeCurrentVersionParameter
parameterFuncs.EDITREQUEST = self._makeEditRequestParameter
parameterFuncs.EXPIRY = self._makeExpiryParameter
parameterFuncs.EXPLANATIONBLURB = self._makeExplanationBlurbParameter
parameterFuncs.IMAGELINK = self._makeImageLinkParameter
parameterFuncs.INTROBLURB = self._makeIntroBlurbParameter
parameterFuncs.INTROFRAGMENT = self._makeIntroFragmentParameter
parameterFuncs.PAGETYPE = self._makePagetypeParameter
parameterFuncs.PROTECTIONBLURB = self._makeProtectionBlurbParameter
parameterFuncs.PROTECTIONDATE = self._makeProtectionDateParameter
parameterFuncs.PROTECTIONLEVEL = self._makeProtectionLevelParameter
parameterFuncs.PROTECTIONLOG = self._makeProtectionLogParameter
parameterFuncs.TALKPAGE = self._makeTalkPageParameter
parameterFuncs.TOOLTIPBLURB = self._makeTooltipBlurbParameter
parameterFuncs.TOOLTIPFRAGMENT = self._makeTooltipFragmentParameter
parameterFuncs.VANDAL = self._makeVandalTemplateParameter
self._params = setmetatable({}, {
__index = function (t, k)
local param
if parameterFuncs[k] then
param = parameterFuncs[k](self)
end
param = param or ''
t[k] = param
return param
end
})
end
msg = msg:gsub('${(%u+)}', self._params)
return msg
end
function Blurb:_makeCurrentVersionParameter()
-- A link to the page history or the move log, depending on the kind of
-- protection.
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'move' then
-- We need the move log link.
return makeFullUrl(
'Special:Log',
{type = 'move', page = pagename},
self:_getExpandedMessage('current-version-move-display')
)
else
-- We need the history link.
return makeFullUrl(
pagename,
{action = 'history'},
self:_getExpandedMessage('current-version-edit-display')
)
end
end
function Blurb:_makeEditRequestParameter()
local mEditRequest = require('Module:Submit an edit request')
local action = self._protectionObj.action
local level = self._protectionObj.level
-- Get the edit request type.
local requestType
if action == 'edit' then
if level == 'autoconfirmed' then
requestType = 'semi'
elseif level == 'extendedconfirmed' then
requestType = 'extended'
elseif level == 'templateeditor' then
requestType = 'template'
end
end
requestType = requestType or 'full'
-- Get the display value.
local display = self:_getExpandedMessage('edit-request-display')
return mEditRequest._link{type = requestType, display = display}
end
function Blurb:_makeExpiryParameter()
local expiry = self._protectionObj.expiry
if type(expiry) == 'number' then
return self:_formatDate(expiry)
else
return expiry
end
end
function Blurb:_makeExplanationBlurbParameter()
-- Cover special cases first.
if self._protectionObj.title.namespace == 8 then
-- MediaWiki namespace
return self:_getExpandedMessage('explanation-blurb-nounprotect')
end
-- Get explanation blurb table keys
local action = self._protectionObj.action
local level = self._protectionObj.level
local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject'
-- Find the message in the explanation blurb table and substitute any
-- parameters.
local explanations = self._cfg.explanationBlurbs
local msg
if explanations[action][level] and explanations[action][level][talkKey] then
msg = explanations[action][level][talkKey]
elseif explanations[action][level] and explanations[action][level].default then
msg = explanations[action][level].default
elseif explanations[action].default and explanations[action].default[talkKey] then
msg = explanations[action].default[talkKey]
elseif explanations[action].default and explanations[action].default.default then
msg = explanations[action].default.default
else
error(string.format(
'could not find explanation blurb for action "%s", level "%s" and talk key "%s"',
action,
level,
talkKey
), 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeImageLinkParameter()
local imageLinks = self._cfg.imageLinks
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if imageLinks[action][level] then
msg = imageLinks[action][level]
elseif imageLinks[action].default then
msg = imageLinks[action].default
else
msg = imageLinks.edit.default
end
return self:_substituteParameters(msg)
end
function Blurb:_makeIntroBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-blurb-expiry')
else
return self:_getExpandedMessage('intro-blurb-noexpiry')
end
end
function Blurb:_makeIntroFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-fragment-expiry')
else
return self:_getExpandedMessage('intro-fragment-noexpiry')
end
end
function Blurb:_makePagetypeParameter()
local pagetypes = self._cfg.pagetypes
return pagetypes[self._protectionObj.title.namespace]
or pagetypes.default
or error('no default pagetype defined', 8)
end
function Blurb:_makeProtectionBlurbParameter()
local protectionBlurbs = self._cfg.protectionBlurbs
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionBlurbs[action][level] then
msg = protectionBlurbs[action][level]
elseif protectionBlurbs[action].default then
msg = protectionBlurbs[action].default
elseif protectionBlurbs.edit.default then
msg = protectionBlurbs.edit.default
else
error('no protection blurb defined for protectionBlurbs.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionDateParameter()
local protectionDate = self._protectionObj.protectionDate
if type(protectionDate) == 'number' then
return self:_formatDate(protectionDate)
else
return protectionDate
end
end
function Blurb:_makeProtectionLevelParameter()
local protectionLevels = self._cfg.protectionLevels
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionLevels[action][level] then
msg = protectionLevels[action][level]
elseif protectionLevels[action].default then
msg = protectionLevels[action].default
elseif protectionLevels.edit.default then
msg = protectionLevels.edit.default
else
error('no protection level defined for protectionLevels.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionLogParameter()
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'autoreview' then
-- We need the pending changes log.
return makeFullUrl(
'Special:Log',
{type = 'stable', page = pagename},
self:_getExpandedMessage('pc-log-display')
)
else
-- We need the protection log.
return makeFullUrl(
'Special:Log',
{type = 'protect', page = pagename},
self:_getExpandedMessage('protection-log-display')
)
end
end
function Blurb:_makeTalkPageParameter()
return string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[self._protectionObj.title.namespace].talk.name,
self._protectionObj.title.text,
self._args.section or 'top',
self:_getExpandedMessage('talk-page-link-display')
)
end
function Blurb:_makeTooltipBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-blurb-expiry')
else
return self:_getExpandedMessage('tooltip-blurb-noexpiry')
end
end
function Blurb:_makeTooltipFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-fragment-expiry')
else
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
end
end
function Blurb:_makeVandalTemplateParameter()
return mw.getCurrentFrame():expandTemplate{
title="vandal-m",
args={self._args.user or self._protectionObj.title.baseText}
}
end
-- Public methods --
function Blurb:makeBannerText(key)
-- Validate input.
if not key or not Blurb.bannerTextFields[key] then
error(string.format(
'"%s" is not a valid banner config field',
tostring(key)
), 2)
end
-- Generate the text.
local msg = self._protectionObj.bannerConfig[key]
if type(msg) == 'string' then
return self:_substituteParameters(msg)
elseif type(msg) == 'function' then
msg = msg(self._protectionObj, self._args)
if type(msg) ~= 'string' then
error(string.format(
'bad output from banner config function with key "%s"'
.. ' (expected string, got %s)',
tostring(key),
type(msg)
), 4)
end
return self:_substituteParameters(msg)
end
end
--------------------------------------------------------------------------------
-- BannerTemplate class
--------------------------------------------------------------------------------
local BannerTemplate = {}
BannerTemplate.__index = BannerTemplate
function BannerTemplate.new(protectionObj, cfg)
local obj = {}
obj._cfg = cfg
-- Set the image filename.
local imageFilename = protectionObj.bannerConfig.image
if imageFilename then
obj._imageFilename = imageFilename
else
-- If an image filename isn't specified explicitly in the banner config,
-- generate it from the protection status and the namespace.
local action = protectionObj.action
local level = protectionObj.level
local namespace = protectionObj.title.namespace
local reason = protectionObj.reason
-- Deal with special cases first.
if (
namespace == 10
or namespace == 828
or reason and obj._cfg.indefImageReasons[reason]
)
and action == 'edit'
and level == 'sysop'
and not protectionObj:isTemporary()
then
-- Fully protected modules and templates get the special red "indef"
-- padlock.
obj._imageFilename = obj._cfg.msg['image-filename-indef']
else
-- Deal with regular protection types.
local images = obj._cfg.images
if images[action] then
if images[action][level] then
obj._imageFilename = images[action][level]
elseif images[action].default then
obj._imageFilename = images[action].default
end
end
end
end
return setmetatable(obj, BannerTemplate)
end
function BannerTemplate:renderImage()
local filename = self._imageFilename
or self._cfg.msg['image-filename-default']
or 'Transparent.gif'
return makeFileLink{
file = filename,
size = (self.imageWidth or 20) .. 'px',
alt = self._imageAlt,
link = self._imageLink,
caption = self.imageCaption
}
end
--------------------------------------------------------------------------------
-- Banner class
--------------------------------------------------------------------------------
local Banner = setmetatable({}, BannerTemplate)
Banner.__index = Banner
function Banner.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 40
obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip.
obj._reasonText = blurbObj:makeBannerText('text')
obj._explanationText = blurbObj:makeBannerText('explanation')
obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.
return setmetatable(obj, Banner)
end
function Banner:__tostring()
-- Renders the banner.
makeMessageBox = makeMessageBox or require('Module:Message box').main
local reasonText = self._reasonText or error('no reason text set', 2)
local explanationText = self._explanationText
local mbargs = {
page = self._page,
type = 'protection',
image = self:renderImage(),
text = string.format(
"'''%s'''%s",
reasonText,
explanationText and '<br />' .. explanationText or ''
)
}
return makeMessageBox('mbox', mbargs)
end
--------------------------------------------------------------------------------
-- Padlock class
--------------------------------------------------------------------------------
local Padlock = setmetatable({}, BannerTemplate)
Padlock.__index = Padlock
function Padlock.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 20
obj.imageCaption = blurbObj:makeBannerText('tooltip')
obj._imageAlt = blurbObj:makeBannerText('alt')
obj._imageLink = blurbObj:makeBannerText('link')
obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]
or cfg.padlockIndicatorNames.default
or 'pp-default'
return setmetatable(obj, Padlock)
end
function Padlock:__tostring()
local frame = mw.getCurrentFrame()
-- The nowiki tag helps prevent whitespace at the top of articles.
return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{
name = 'indicator',
args = {name = self._indicatorName},
content = self:renderImage()
}
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- This is used for testing purposes.
return {
Protection = Protection,
Blurb = Blurb,
BannerTemplate = BannerTemplate,
Banner = Banner,
Padlock = Padlock,
}
end
function p._main(args, cfg, title)
args = args or {}
cfg = cfg or require(CONFIG_MODULE)
local protectionObj = Protection.new(args, cfg, title)
local ret = {}
-- If a page's edit protection is equally or more restrictive than its
-- protection from some other action, then don't bother displaying anything
-- for the other action (except categories).
if not yesno(args.catonly) and (protectionObj.action == 'edit' or
args.demolevel or
not getReachableNodes(
cfg.hierarchy,
protectionObj.level
)[effectiveProtectionLevel('edit', protectionObj.title)])
then
-- Initialise the blurb object
local blurbObj = Blurb.new(protectionObj, args, cfg)
-- Render the banner
if protectionObj:shouldShowLock() then
ret[#ret + 1] = tostring(
(yesno(args.small) and Padlock or Banner)
.new(protectionObj, blurbObj, cfg)
)
end
end
-- Render the categories
if yesno(args.category) ~= false then
ret[#ret + 1] = protectionObj:makeCategoryLinks()
end
-- For arbitration enforcement, flagging [[WP:PIA]] pages to enable [[Special:AbuseFilter/1339]] to flag edits to them
if protectionObj.level == "extendedconfirmed" then
if require("Module:TableTools").inArray(protectionObj.title.talkPageTitle.categories, "Wikipedia pages subject to the extended confirmed restriction related to the Arab-Israeli conflict") then
ret[#ret + 1] = "<p class='PIA-flag' style='display:none; visibility:hidden;' title='This page is subject to the extended confirmed restriction related to the Arab-Israeli conflict.'></p>"
end
end
return table.concat(ret)
end
function p.main(frame, cfg)
cfg = cfg or require(CONFIG_MODULE)
-- Find default args, if any.
local parent = frame.getParent and frame:getParent()
local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]
-- Find user args, and use the parent frame if we are being called from a
-- wrapper template.
getArgs = getArgs or require('Module:Arguments').getArgs
local userArgs = getArgs(frame, {
parentOnly = defaultArgs,
frameOnly = not defaultArgs
})
-- Build the args table. User-specified args overwrite default args.
local args = {}
for k, v in pairs(defaultArgs or {}) do
args[k] = v
end
for k, v in pairs(userArgs) do
args[k] = v
end
return p._main(args, cfg)
end
return p
p8ryzquso3eyufqyguwh2oyqz5eu1l6
Module:Protected page/config
828
1589
11659
2026-08-30T17:22:32Z
en>Primefac
0
per prev, old wrappers moved, removing from this list
11659
Scribunto
text/plain
-- This module provides configuration data for [[Module:Protection banner]].
return {
--------------------------------------------------------------------------------
--
-- BANNER DATA
--
--------------------------------------------------------------------------------
--[[
-- Banner data consists of six fields:
-- * text - the main protection text that appears at the top of protection
-- banners.
-- * explanation - the text that appears below the main protection text, used
-- to explain the details of the protection.
-- * tooltip - the tooltip text you see when you move the mouse over a small
-- padlock icon.
-- * link - the page that the small padlock icon links to.
-- * alt - the alt text for the small padlock icon. This is also used as tooltip
-- text for the large protection banners.
-- * image - the padlock image used in both protection banners and small padlock
-- icons.
--
-- The module checks in three separate tables to find a value for each field.
-- First it checks the banners table, which has values specific to the reason
-- for the page being protected. Then the module checks the defaultBanners
-- table, which has values specific to each protection level. Finally, the
-- module checks the masterBanner table, which holds data for protection
-- templates to use if no data has been found in the previous two tables.
--
-- The values in the banner data can take parameters. These are specified
-- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name
-- enclosed in curly braces).
--
-- Available parameters:
--
-- ${CURRENTVERSION} - a link to the page history or the move log, with the
-- display message "current-version-edit-display" or
-- "current-version-move-display".
--
-- ${EDITREQUEST} - a link to create an edit request for the current page.
--
-- ${EXPLANATIONBLURB} - an explanation blurb, e.g. "Please discuss any changes
-- on the talk page; you may submit a request to ask an administrator to make
-- an edit if it is minor or supported by consensus."
--
-- ${IMAGELINK} - a link to set the image to, depending on the protection
-- action and protection level.
--
-- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry
-- is set. E.g. "Editing of this page by new or unregistered users is currently
-- disabled until dd Month YYYY."
--
-- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation
-- so that it can be used in run-on sentences.
--
-- ${PAGETYPE} - the type of the page, e.g. "article" or "template".
-- Defined in the cfg.pagetypes table.
--
-- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g.
-- "Editing of this page by new or unregistered users is currently disabled"
--
-- ${PROTECTIONDATE} - the protection date, if it has been supplied to the
-- template.
--
-- ${PROTECTIONLEVEL} - the protection level, e.g. "fully protected" or
-- "semi-protected".
--
-- ${PROTECTIONLOG} - a link to the protection log or the pending changes log,
-- depending on the protection action.
--
-- ${TALKPAGE} - a link to the talk page. If a section is specified, links
-- straight to that talk page section.
--
-- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to
-- create a blurb like "This template is semi-protected", or "This article is
-- move-protected until DD Month YYYY".
--
-- ${VANDAL} - links for the specified username (or the root page name)
-- using Module:Vandal-m.
--
-- Functions
--
-- For advanced users, it is possible to use Lua functions instead of strings
-- in the banner config tables. Using functions gives flexibility that is not
-- possible just by using parameters. Functions take two arguments, the
-- protection object and the template arguments, and they must output a string.
--
-- For example:
--
-- text = function (protectionObj, args)
-- if protectionObj.level == 'autoconfirmed' then
-- return 'foo'
-- else
-- return 'bar'
-- end
-- end
--
-- Some protection object properties and methods that may be useful:
-- protectionObj.action - the protection action
-- protectionObj.level - the protection level
-- protectionObj.reason - the protection reason
-- protectionObj.expiry - the expiry. Nil if unset, the string "indef" if set
-- to indefinite, and the protection time in unix time if temporary.
-- protectionObj.protectionDate - the protection date in unix time, or nil if
-- unspecified.
-- protectionObj.bannerConfig - the banner config found by the module. Beware
-- of editing the config field used by the function, as it could create an
-- infinite loop.
-- protectionObj:isProtected - returns a boolean showing whether the page is
-- protected.
-- protectionObj:isTemporary - returns a boolean showing whether the expiry is
-- temporary.
-- protectionObj:isIncorrect - returns a boolean showing whether the protection
-- template is incorrect.
--]]
-- The master banner data, used if no values have been found in banners or
-- defaultBanners.
masterBanner = {
text = '${INTROBLURB}',
explanation = '${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPBLURB}',
link = '${IMAGELINK}',
alt = 'Page ${PROTECTIONLEVEL}'
},
-- The default banner data. This holds banner data for different protection
-- levels.
-- *required* - this table needs edit, move, autoreview and upload subtables.
defaultBanners = {
edit = {},
move = {},
autoreview = {
default = {
alt = 'Page protected with pending changes',
tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users',
image = 'Pending-protection-shackle.svg'
}
},
upload = {}
},
-- The banner data. This holds banner data for different protection reasons.
-- In fact, the reasons specified in this table control which reasons are
-- valid inputs to the first positional parameter.
--
-- There is also a non-standard "description" field that can be used for items
-- in this table. This is a description of the protection reason for use in the
-- module documentation.
--
-- *required* - this table needs edit, move, autoreview and upload subtables.
banners = {
edit = {
blp = {
description = 'For pages protected to promote compliance with the'
.. ' [[Wikipedia:Biographies of living persons'
.. '|biographies of living persons]] policy',
text = '${INTROFRAGMENT} to promote compliance with'
.. ' [[Wikipedia:Biographies of living persons'
.. "|Wikipedia's policy on the biographies"
.. ' of living people]].',
tooltip = '${TOOLTIPFRAGMENT} to promote compliance with the policy on'
.. ' biographies of living persons',
},
deceased = {
description = 'For user pages of Wikipedia users who are deceased',
text = '${INTROFRAGMENT} to prevent vandalism of a deceased'
.. ' Wikipedian\'s user page.'
.. ' A family member who wishes to edit this user page can use this'
.. ' user\'s ${TALKPAGE} or submit a request to [[Wikipedia:VRT|the'
.. ' Volunteer Response Team]].',
tooltip = '${TOOLTIPFRAGMENT} because this Wikipedian is deceased'
},
dmca = {
description = 'For pages protected by the Wikimedia Foundation'
.. ' due to [[Digital Millennium Copyright Act]] takedown requests',
explanation = function (protectionObj, args)
local ret = 'Pursuant to a rights owner notice under the Digital'
.. ' Millennium Copyright Act (DMCA) regarding some content'
.. ' in this article, the Wikimedia Foundation acted under'
.. ' applicable law and took down and restricted the content'
.. ' in question.'
if args.notice then
ret = ret .. ' A copy of the received notice can be found here: '
.. args.notice .. '.'
end
ret = ret .. ' For more information, including websites discussing'
.. ' how to file a counter-notice, please see'
.. " [[Wikipedia:Office actions]] and the article's ${TALKPAGE}."
.. "'''Do not remove this template from the article until the"
.. " restrictions are withdrawn'''."
return ret
end,
image = 'Office-protection-shackle.svg',
link = 'Wikipedia:Protection policy#office',
},
dispute = {
description = 'For pages protected due to editing disputes',
text = function (protectionObj, args)
-- Find the value of "disputes".
local display = 'disputes'
local disputes
if args.section then
disputes = string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[protectionObj.title.namespace].talk.name,
protectionObj.title.text,
args.section,
display
)
else
disputes = display
end
-- Make the blurb, depending on the expiry.
local msg
if type(protectionObj.expiry) == 'number' then
msg = '${INTROFRAGMENT} or until editing %s have been resolved.'
else
msg = '${INTROFRAGMENT} until editing %s have been resolved.'
end
return string.format(msg, disputes)
end,
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPFRAGMENT} due to editing disputes',
},
ecp = {
description = 'For articles in topic areas authorized by'
.. ' [[Wikipedia:Arbitration Committee|ArbCom]] or'
.. ' meets the criteria for community use',
alt = 'Extended-protected ${PAGETYPE}',
},
mainpage = {
description = 'For pages protected for being displayed on the [[Main Page]]',
text = 'This file is currently'
.. ' [[Wikipedia:This page is protected|protected]] from'
.. ' editing because it is currently or will soon be displayed'
.. ' on the [[Main Page]].',
explanation = 'Images on the Main Page are protected due to their high'
.. ' visibility. Please discuss any necessary changes on the ${TALKPAGE}.'
.. '<br /><span style="font-size:90%;">'
.. "'''Administrators:''' Once this image is definitely off the Main Page,"
.. ' please unprotect this file, or reduce to semi-protection,'
.. ' as appropriate.</span>',
},
office = {
description = 'For pages protected by the Wikimedia Foundation',
text = function (protectionObj, args)
local ret = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.'
if protectionObj.protectionDate then
ret = ret .. ' It has been protected since ${PROTECTIONDATE}.'
end
return ret
end,
explanation = "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not remove protection from this"
.. " page unless you are authorized by the Wikimedia Foundation to do"
.. " so.'''",
image = 'Office-protection-shackle.svg',
link = 'Wikipedia:Protection policy#office',
},
reset = {
description = 'For pages protected by the Wikimedia Foundation and'
.. ' "reset" to a bare-bones version',
text = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.protectionDate then
ret = ret .. 'On ${PROTECTIONDATE} this ${PAGETYPE} was'
else
ret = ret .. 'This ${PAGETYPE} has been'
end
ret = ret .. ' reduced to a'
.. ' simplified, "bare bones" version so that it may be completely'
.. ' rewritten to ensure it meets the policies of'
.. ' [[WP:NPOV|Neutral Point of View]] and [[WP:V|Verifiability]].'
.. ' Standard Wikipedia policies will apply to its rewriting—which'
.. ' will eventually be open to all editors—and will be strictly'
.. ' enforced. The ${PAGETYPE} has been ${PROTECTIONLEVEL} while'
.. ' it is being rebuilt.\n\n'
.. 'Any insertion of material directly from'
.. ' pre-protection revisions of the ${PAGETYPE} will be removed, as'
.. ' will any material added to the ${PAGETYPE} that is not properly'
.. ' sourced. The associated talk page(s) were also cleared on the'
.. " same date.\n\n"
.. "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not override"
.. " this action, and do not remove protection from this page,"
.. " unless you are authorized by the Wikimedia Foundation"
.. " to do so. No editor may remove this notice.'''"
return ret
end,
image = 'Office-protection-shackle.svg',
link = 'Wikipedia:Protection policy#office',
},
sock = {
description = 'For pages protected due to'
.. ' [[Wikipedia:Sock puppetry|sock puppetry]]',
text = '${INTROFRAGMENT} to prevent [[Wikipedia:Sock puppetry|sock puppets]] of'
.. ' [[Wikipedia:Blocking policy|blocked]] or'
.. ' [[Wikipedia:Banning policy|banned users]]'
.. ' from editing it.',
tooltip = '${TOOLTIPFRAGMENT} to prevent sock puppets of blocked or banned users from'
.. ' editing it',
},
template = {
description = 'For [[Wikipedia:High-risk templates|high-risk]]'
.. ' templates and Lua modules',
text = 'This is a permanently [[Wikipedia:Protection policy|protected]] ${PAGETYPE},'
.. ' as it is [[Wikipedia:High-risk templates|high-risk]].',
explanation = 'Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] or'
.. ' [[Wikipedia:Template editor|template editor]] to make an edit if'
.. ' it is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by'
.. ' [[Wikipedia:Consensus|consensus]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
tooltip = 'This high-risk ${PAGETYPE} is permanently ${PROTECTIONLEVEL}'
.. ' to prevent vandalism',
alt = 'Permanently protected ${PAGETYPE}',
},
usertalk = {
description = 'For pages protected against disruptive edits by a'
.. ' particular user',
text = '${INTROFRAGMENT} to prevent ${VANDAL} from using it to make disruptive edits,'
.. ' such as abusing the'
.. ' {{[[Template:unblock|unblock]]}} template.',
explanation = 'If you cannot edit this user talk page and you need to'
.. ' make a change or leave a message, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for edits to a protected page'
.. '|request an edit]],'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]],'
.. ' [[Special:Userlogin|log in]],'
.. ' or [[Special:UserLogin/signup|create an account]].',
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism|vandalism]]',
text = '${INTROFRAGMENT} due to [[Wikipedia:Vandalism|vandalism]].',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.level == 'sysop' then
ret = ret .. "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. '
end
return ret .. '${EXPLANATIONBLURB}'
end,
tooltip = '${TOOLTIPFRAGMENT} due to vandalism',
}
},
move = {
dispute = {
description = 'For pages protected against page moves due to'
.. ' disputes over the page title',
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
image = 'Move-protection-shackle.svg'
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism#Page-move vandalism'
.. ' |page-move vandalism]]'
}
},
autoreview = {},
upload = {}
},
--------------------------------------------------------------------------------
--
-- GENERAL DATA TABLES
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Protection blurbs
--------------------------------------------------------------------------------
-- This table produces the protection blurbs available with the
-- ${PROTECTIONBLURB} parameter. It is sorted by protection action and
-- protection level, and is checked by the module in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionBlurbs = {
edit = {
default = 'This ${PAGETYPE} is currently [[Wikipedia:Protection policy#full|'
.. 'protected]] from editing',
templateeditor = 'This ${PAGETYPE} is currently [[Wikipedia:Protection policy#template'
.. '|protected]] from editing',
autoconfirmed = 'Editing of this ${PAGETYPE} by [[Wikipedia:User access'
.. ' levels#New users|new]] or [[Wikipedia:User access levels#Unregistered'
.. ' users|unregistered]] users is currently [[Wikipedia:Protection'
.. ' policy#semi|disabled]]',
extendedconfirmed = 'This ${PAGETYPE} is currently under [[Wikipedia:Protection'
.. ' policy#extended|extended confirmed protection]]',
},
move = {
default = 'This ${PAGETYPE} is currently [[Wikipedia:Protection policy#Move'
.. ' protection|protected]] from [[Help:Moving a page|page moves]]'
},
autoreview = {
default = 'All edits made to this ${PAGETYPE} by'
.. ' [[Wikipedia:User access levels#New users|new]] or'
.. ' [[Wikipedia:User access levels#Unregistered users|unregistered]]'
.. ' users are currently'
.. ' [[Wikipedia:Pending changes|subject to review]]'
},
upload = {
default = 'Uploading new versions of this ${PAGETYPE} is currently disabled'
}
},
--------------------------------------------------------------------------------
-- Explanation blurbs
--------------------------------------------------------------------------------
-- This table produces the explanation blurbs available with the
-- ${EXPLANATIONBLURB} parameter. It is sorted by protection action,
-- protection level, and whether the page is a talk page or not. If the page is
-- a talk page it will have a talk key of "talk"; otherwise it will have a talk
-- key of "subject". The table is checked in the following order:
-- 1. page's protection action, page's protection level, page's talk key
-- 2. page's protection action, page's protection level, default talk key
-- 3. page's protection action, default protection level, page's talk key
-- 4. page's protection action, default protection level, default talk key
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
explanationBlurbs = {
edit = {
autoconfirmed = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' ${EDITREQUEST}, discuss changes on the ${TALKPAGE},'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
},
extendedconfirmed = {
default = 'Extended confirmed protection prevents edits from all unregistered editors'
.. ' and registered users with fewer than 30 days tenure and 500 edits.'
.. ' The [[Wikipedia:Protection policy#extended|policy on community use]]'
.. ' specifies that extended confirmed protection can be applied to combat'
.. ' disruption, if semi-protection has proven to be ineffective.'
.. ' Extended confirmed protection may also be applied to enforce'
.. ' [[Wikipedia:Arbitration Committee|arbitration sanctions]].'
.. ' Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask for uncontroversial changes supported by'
.. ' [[Wikipedia:Consensus|consensus]].'
},
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]]. You may also [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|request]] that this page be unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' You may [[Wikipedia:Requests for page'
.. ' protection#Current requests for edits to a protected page|request an'
.. ' edit]] to this page, or [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|ask]] for it to be unprotected.'
}
},
move = {
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves on the'
.. ' ${TALKPAGE} or at [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves at'
.. ' [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.'
}
},
autoreview = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Edits to this ${PAGETYPE} by new and unregistered users'
.. ' will not be visible to readers until they are accepted by'
.. ' a reviewer. To avoid the need for your edits to be'
.. ' reviewed, you may'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].'
},
},
upload = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but new versions of the file'
.. ' cannot be uploaded until it is unprotected. You can'
.. ' request that a new version be uploaded by using a'
.. ' [[Wikipedia:Edit requests|protected edit request]], or you'
.. ' can [[Wikipedia:Requests for page protection|request]]'
.. ' that the file be unprotected.'
}
}
},
--------------------------------------------------------------------------------
-- Protection levels
--------------------------------------------------------------------------------
-- This table provides the data for the ${PROTECTIONLEVEL} parameter, which
-- produces a short label for different protection levels. It is sorted by
-- protection action and protection level, and is checked in the following
-- order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionLevels = {
edit = {
default = 'protected',
templateeditor = 'template-protected',
extendedconfirmed = 'extended-confirmed-protected',
autoconfirmed = 'semi-protected',
},
move = {
default = 'move-protected'
},
autoreview = {
},
upload = {
default = 'upload-protected'
}
},
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- This table lists different padlock images for each protection action and
-- protection level. It is used if an image is not specified in any of the
-- banner data tables, and if the page does not satisfy the conditions for using
-- the ['image-filename-indef'] image. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
images = {
edit = {
default = 'Full-protection-shackle.svg',
templateeditor = 'Template-protection-shackle.svg',
extendedconfirmed = 'Extended-protection-shackle.svg',
autoconfirmed = 'Semi-protection-shackle.svg'
},
move = {
default = 'Move-protection-shackle.svg',
},
autoreview = {
default = 'Pending-protection-shackle.svg'
},
upload = {
default = 'Upload-protection-shackle.svg'
}
},
-- Pages with a reason specified in this table will show the special "indef"
-- padlock, defined in the 'image-filename-indef' message, if no expiry is set.
indefImageReasons = {
template = true
},
--------------------------------------------------------------------------------
-- Image links
--------------------------------------------------------------------------------
-- This table provides the data for the ${IMAGELINK} parameter, which gets
-- the image link for small padlock icons based on the page's protection action
-- and protection level. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
imageLinks = {
edit = {
default = 'Wikipedia:Protection policy#full',
templateeditor = 'Wikipedia:Protection policy#template',
extendedconfirmed = 'Wikipedia:Protection policy#extended',
autoconfirmed = 'Wikipedia:Protection policy#semi'
},
move = {
default = 'Wikipedia:Protection policy#move'
},
autoreview = {
default = 'Wikipedia:Protection policy#pending'
},
upload = {
default = 'Wikipedia:Protection policy#upload'
}
},
--------------------------------------------------------------------------------
-- Padlock indicator names
--------------------------------------------------------------------------------
-- This table provides the "name" attribute for the <indicator> extension tag
-- with which small padlock icons are generated. All indicator tags on a page
-- are displayed in alphabetical order based on this attribute, and with
-- indicator tags with duplicate names, the last tag on the page wins.
-- The attribute is chosen based on the protection action; table keys must be a
-- protection action name or the string "default".
padlockIndicatorNames = {
autoreview = 'pp-autoreview',
default = 'pp-default'
},
--------------------------------------------------------------------------------
-- Protection categories
--------------------------------------------------------------------------------
--[[
-- The protection categories are stored in the protectionCategories table.
-- Keys to this table are made up of the following strings:
--
-- 1. the expiry date
-- 2. the namespace
-- 3. the protection reason (e.g. "dispute" or "vandalism")
-- 4. the protection level (e.g. "sysop" or "autoconfirmed")
-- 5. the action (e.g. "edit" or "move")
--
-- When the module looks up a category in the table, first it will will check to
-- see a key exists that corresponds to all five parameters. For example, a
-- user page semi-protected from vandalism for two weeks would have the key
-- "temp-user-vandalism-autoconfirmed-edit". If no match is found, the module
-- changes the first part of the key to "all" and checks the table again. It
-- keeps checking increasingly generic key combinations until it finds the
-- field, or until it reaches the key "all-all-all-all-all".
--
-- The module uses a binary matrix to determine the order in which to search.
-- This is best demonstrated by a table. In this table, the "0" values
-- represent "all", and the "1" values represent the original data (e.g.
-- "indef" or "file" or "vandalism").
--
-- expiry namespace reason level action
-- order
-- 1 1 1 1 1 1
-- 2 0 1 1 1 1
-- 3 1 0 1 1 1
-- 4 0 0 1 1 1
-- 5 1 1 0 1 1
-- 6 0 1 0 1 1
-- 7 1 0 0 1 1
-- 8 0 0 0 1 1
-- 9 1 1 1 0 1
-- 10 0 1 1 0 1
-- 11 1 0 1 0 1
-- 12 0 0 1 0 1
-- 13 1 1 0 0 1
-- 14 0 1 0 0 1
-- 15 1 0 0 0 1
-- 16 0 0 0 0 1
-- 17 1 1 1 1 0
-- 18 0 1 1 1 0
-- 19 1 0 1 1 0
-- 20 0 0 1 1 0
-- 21 1 1 0 1 0
-- 22 0 1 0 1 0
-- 23 1 0 0 1 0
-- 24 0 0 0 1 0
-- 25 1 1 1 0 0
-- 26 0 1 1 0 0
-- 27 1 0 1 0 0
-- 28 0 0 1 0 0
-- 29 1 1 0 0 0
-- 30 0 1 0 0 0
-- 31 1 0 0 0 0
-- 32 0 0 0 0 0
--
-- In this scheme the action has the highest priority, as it is the last
-- to change, and the expiry has the least priority, as it changes the most.
-- The priorities of the expiry, the protection level and the action are
-- fixed, but the priorities of the reason and the namespace can be swapped
-- through the use of the cfg.bannerDataNamespaceHasPriority table.
--]]
-- If the reason specified to the template is listed in this table,
-- namespace data will take priority over reason data in the protectionCategories
-- table.
reasonsWithNamespacePriority = {
vandalism = true,
},
-- The string to use as a namespace key for the protectionCategories table for each
-- namespace number.
categoryNamespaceKeys = {
[ 2] = 'user',
[ 3] = 'user',
[ 4] = 'project',
[ 6] = 'file',
[ 8] = 'mediawiki',
[ 10] = 'template',
[ 12] = 'project',
[ 14] = 'category',
[100] = 'portal',
[828] = 'module',
},
protectionCategories = {
['all|all|all|all|all'] = 'Wikipedia fully protected pages',
['all|all|office|all|all'] = 'Wikipedia Office-protected pages',
['all|all|reset|all|all'] = 'Wikipedia Office-protected pages',
['all|all|dmca|all|all'] = 'Wikipedia Office-protected pages',
['all|all|mainpage|all|all'] = 'Wikipedia fully protected main page files',
['all|all|all|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|all|ecp|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|template|all|all|edit'] = 'Wikipedia fully protected templates',
['all|all|all|autoconfirmed|edit'] = 'Wikipedia semi-protected pages',
['indef|all|all|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected pages',
['all|all|blp|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected biographies of living people',
['temp|all|blp|autoconfirmed|edit'] = 'Wikipedia temporarily semi-protected biographies of living people',
['all|all|dispute|autoconfirmed|edit'] = 'Wikipedia pages semi-protected due to dispute',
['all|all|sock|autoconfirmed|edit'] = 'Wikipedia pages semi-protected from banned users',
['all|all|vandalism|autoconfirmed|edit'] = 'Wikipedia pages semi-protected against vandalism',
['all|category|all|autoconfirmed|edit'] = 'Wikipedia semi-protected categories',
['all|file|all|autoconfirmed|edit'] = 'Wikipedia semi-protected files',
['all|portal|all|autoconfirmed|edit'] = 'Wikipedia semi-protected portals',
['all|project|all|autoconfirmed|edit'] = 'Wikipedia semi-protected project pages',
['all|talk|all|autoconfirmed|edit'] = 'Wikipedia semi-protected talk pages',
['all|template|all|autoconfirmed|edit'] = 'Wikipedia semi-protected templates',
['all|user|all|autoconfirmed|edit'] = 'Wikipedia semi-protected user and user talk pages',
['all|all|all|templateeditor|move'] = 'Wikipedia template-protected pages other than templates and modules',
['all|all|all|templateeditor|edit'] = 'Wikipedia template-protected pages other than templates and modules',
['all|template|all|templateeditor|edit'] = 'Wikipedia template-protected templates',
['all|template|all|templateeditor|move'] = 'Wikipedia template-protected templates', -- move-protected templates
['all|all|blp|sysop|edit'] = 'Wikipedia indefinitely protected biographies of living people',
['temp|all|blp|sysop|edit'] = 'Wikipedia temporarily protected biographies of living people',
['all|all|dispute|sysop|edit'] = 'Wikipedia pages protected due to dispute',
['all|all|sock|sysop|edit'] = 'Wikipedia pages protected from banned users',
['all|all|vandalism|sysop|edit'] = 'Wikipedia pages protected against vandalism',
['all|category|all|sysop|edit'] = 'Wikipedia fully protected categories',
['all|file|all|sysop|edit'] = 'Wikipedia fully protected files',
['all|project|all|sysop|edit'] = 'Wikipedia fully protected project pages',
['all|talk|all|sysop|edit'] = 'Wikipedia fully protected talk pages',
['all|template|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected templates',
['all|template|all|extendedconfirmed|move'] = 'Wikipedia extended-confirmed-protected templates',
['all|template|all|sysop|edit'] = 'Wikipedia fully protected templates',
['all|user|all|sysop|edit'] = 'Wikipedia fully protected user and user talk pages',
['all|module|all|all|edit'] = 'Wikipedia fully protected modules',
['all|module|all|templateeditor|edit'] = 'Wikipedia template-protected modules',
['all|module|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected modules',
['all|module|all|autoconfirmed|edit'] = 'Wikipedia semi-protected modules',
['all|all|all|sysop|move'] = 'Wikipedia move-protected pages',
['indef|all|all|sysop|move'] = 'Wikipedia indefinitely move-protected pages',
['all|all|dispute|sysop|move'] = 'Wikipedia pages move-protected due to dispute',
['all|all|vandalism|sysop|move'] = 'Wikipedia pages move-protected due to vandalism',
['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals',
['all|project|all|sysop|move'] = 'Wikipedia move-protected project pages',
['all|talk|all|sysop|move'] = 'Wikipedia move-protected talk pages',
['all|template|all|sysop|move'] = 'Wikipedia move-protected templates',
['all|user|all|sysop|move'] = 'Wikipedia move-protected user and user talk pages',
['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages',
['all|file|all|all|upload'] = 'Wikipedia upload-protected files',
},
--------------------------------------------------------------------------------
-- Expiry category config
--------------------------------------------------------------------------------
-- This table configures the expiry category behaviour for each protection
-- action.
-- * If set to true, setting that action will always categorise the page if
-- an expiry parameter is not set.
-- * If set to false, setting that action will never categorise the page.
-- * If set to nil, the module will categorise the page if:
-- 1) an expiry parameter is not set, and
-- 2) a reason is provided, and
-- 3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck
-- table.
expiryCheckActions = {
edit = nil,
move = false,
autoreview = true,
upload = false
},
reasonsWithoutExpiryCheck = {
blp = true,
template = true,
},
--------------------------------------------------------------------------------
-- Pagetypes
--------------------------------------------------------------------------------
-- This table produces the page types available with the ${PAGETYPE} parameter.
-- Keys are namespace numbers, or the string "default" for the default value.
pagetypes = {
[0] = 'article',
[6] = 'file',
[10] = 'template',
[14] = 'category',
[828] = 'module',
default = 'page'
},
--------------------------------------------------------------------------------
-- Strings marking indefinite protection
--------------------------------------------------------------------------------
-- This table contains values passed to the expiry parameter that mean the page
-- is protected indefinitely.
indefStrings = {
['indef'] = true,
['indefinite'] = true,
['indefinitely'] = true,
['infinite'] = true,
},
--------------------------------------------------------------------------------
-- Group hierarchy
--------------------------------------------------------------------------------
-- This table maps each group to all groups that have a superset of the original
-- group's page editing permissions.
hierarchy = {
sysop = {},
reviewer = {'sysop'},
filemover = {'sysop'},
templateeditor = {'sysop'},
extendedconfirmed = {'sysop'},
autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'},
user = {'autoconfirmed'},
['*'] = {'user'}
},
--------------------------------------------------------------------------------
-- Wrapper templates and their default arguments
--------------------------------------------------------------------------------
-- This table contains wrapper templates used with the module, and their
-- default arguments. Templates specified in this table should contain the
-- following invocation, and no other template content:
--
-- {{#invoke:Protection banner|main}}
--
-- If other content is desired, it can be added between
-- <noinclude>...</noinclude> tags.
--
-- When a user calls one of these wrapper templates, they will use the
-- default arguments automatically. However, users can override any of the
-- arguments.
wrappers = {
['Template:Protected page'] = {},
['Template:Extended confirmed–protected'] = {'ecp'},
['Template:Protected biography of a living person'] = {'blp'},
['Template:Protected due to a dispute'] = {'dispute'},
['Template:Move-protected'] = {action = 'move', catonly = 'yes'},
['Template:Move-protected due to a dispute'] = {'dispute', action = 'move', catonly = 'yes'},
['Template:Move-protected due to vandalism'] = {'vandalism', action = 'move', catonly = 'yes'},
['Template:Office-protected'] = {'office'},
['Template:Pending changes–protected'] = {action = 'autoreview', small = true},
['Template:Semi-protected indefinitely'] = {small = true},
['Template:Protected due to sockpuppetry'] = {'sock'},
['Template:Template-protected'] = {'template', small = true},
['Template:Upload-protected'] = {action = 'upload'},
['Template:Protected talk page of a blocked user'] = {'usertalk'},
['Template:Protected due to vandalism'] = {'vandalism'},
},
--------------------------------------------------------------------------------
--
-- MESSAGES
--
--------------------------------------------------------------------------------
msg = {
--------------------------------------------------------------------------------
-- Intro blurb and intro fragment
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${INTROBLURB} and
-- ${INTROFRAGMENT} parameters. If the protection is temporary they use the
-- intro-blurb-expiry or intro-fragment-expiry, and if not they use
-- intro-blurb-noexpiry or intro-fragment-noexpiry.
-- It is possible to use banner parameters in these messages.
['intro-blurb-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY}.',
['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}.',
['intro-fragment-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY},',
['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}',
--------------------------------------------------------------------------------
-- Tooltip blurb
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${TOOLTIPBLURB} parameter.
-- If the protection is temporary the tooltip-blurb-expiry message is used, and
-- if not the tooltip-blurb-noexpiry message is used.
-- It is possible to use banner parameters in these messages.
['tooltip-blurb-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY}.',
['tooltip-blurb-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}.',
['tooltip-fragment-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY},',
['tooltip-fragment-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
--------------------------------------------------------------------------------
-- Special explanation blurb
--------------------------------------------------------------------------------
-- An explanation blurb for pages that cannot be unprotected, e.g. for pages
-- in the MediaWiki namespace.
-- It is possible to use banner parameters in this message.
['explanation-blurb-nounprotect'] = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]].',
--------------------------------------------------------------------------------
-- Protection log display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the protection log link
-- or the pending changes log link produced by the ${PROTECTIONLOG} parameter.
-- It is possible to use banner parameters in these messages.
['protection-log-display'] = 'protection log',
['pc-log-display'] = 'pending changes log',
--------------------------------------------------------------------------------
-- Current version display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the page history link
-- or the move log link produced by the ${CURRENTVERSION} parameter.
-- It is possible to use banner parameters in these messages.
['current-version-move-display'] = 'current title',
['current-version-edit-display'] = 'current version',
--------------------------------------------------------------------------------
-- Talk page
--------------------------------------------------------------------------------
-- This message determines the display value of the talk page link produced
-- with the ${TALKPAGE} parameter.
-- It is possible to use banner parameters in this message.
['talk-page-link-display'] = 'talk page',
--------------------------------------------------------------------------------
-- Edit requests
--------------------------------------------------------------------------------
-- This message determines the display value of the edit request link produced
-- with the ${EDITREQUEST} parameter.
-- It is possible to use banner parameters in this message.
['edit-request-display'] = 'submit an edit request',
--------------------------------------------------------------------------------
-- Expiry date format
--------------------------------------------------------------------------------
-- This is the format for the blurb expiry date. It should be valid input for
-- the first parameter of the #time parser function.
['expiry-date-format'] = 'F j, Y "at" H:i e',
--------------------------------------------------------------------------------
-- Tracking categories
--------------------------------------------------------------------------------
-- These messages determine which tracking categories the module outputs.
['tracking-category-incorrect'] = 'Wikipedia pages with incorrect protection templates',
['tracking-category-template'] = 'Wikipedia template-protected pages other than templates and modules',
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- These are images that are not defined by their protection action and protection level.
['image-filename-indef'] = 'Full-protection-shackle.svg',
['image-filename-default'] = 'Transparent.gif',
--------------------------------------------------------------------------------
-- End messages
--------------------------------------------------------------------------------
}
--------------------------------------------------------------------------------
-- End configuration
--------------------------------------------------------------------------------
}
pj6zo6l44p4bk4pwax9tlbkyf7cpx34
11660
11659
2026-09-07T03:19:01Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Protected_page/config]]
11659
Scribunto
text/plain
-- This module provides configuration data for [[Module:Protection banner]].
return {
--------------------------------------------------------------------------------
--
-- BANNER DATA
--
--------------------------------------------------------------------------------
--[[
-- Banner data consists of six fields:
-- * text - the main protection text that appears at the top of protection
-- banners.
-- * explanation - the text that appears below the main protection text, used
-- to explain the details of the protection.
-- * tooltip - the tooltip text you see when you move the mouse over a small
-- padlock icon.
-- * link - the page that the small padlock icon links to.
-- * alt - the alt text for the small padlock icon. This is also used as tooltip
-- text for the large protection banners.
-- * image - the padlock image used in both protection banners and small padlock
-- icons.
--
-- The module checks in three separate tables to find a value for each field.
-- First it checks the banners table, which has values specific to the reason
-- for the page being protected. Then the module checks the defaultBanners
-- table, which has values specific to each protection level. Finally, the
-- module checks the masterBanner table, which holds data for protection
-- templates to use if no data has been found in the previous two tables.
--
-- The values in the banner data can take parameters. These are specified
-- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name
-- enclosed in curly braces).
--
-- Available parameters:
--
-- ${CURRENTVERSION} - a link to the page history or the move log, with the
-- display message "current-version-edit-display" or
-- "current-version-move-display".
--
-- ${EDITREQUEST} - a link to create an edit request for the current page.
--
-- ${EXPLANATIONBLURB} - an explanation blurb, e.g. "Please discuss any changes
-- on the talk page; you may submit a request to ask an administrator to make
-- an edit if it is minor or supported by consensus."
--
-- ${IMAGELINK} - a link to set the image to, depending on the protection
-- action and protection level.
--
-- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry
-- is set. E.g. "Editing of this page by new or unregistered users is currently
-- disabled until dd Month YYYY."
--
-- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation
-- so that it can be used in run-on sentences.
--
-- ${PAGETYPE} - the type of the page, e.g. "article" or "template".
-- Defined in the cfg.pagetypes table.
--
-- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g.
-- "Editing of this page by new or unregistered users is currently disabled"
--
-- ${PROTECTIONDATE} - the protection date, if it has been supplied to the
-- template.
--
-- ${PROTECTIONLEVEL} - the protection level, e.g. "fully protected" or
-- "semi-protected".
--
-- ${PROTECTIONLOG} - a link to the protection log or the pending changes log,
-- depending on the protection action.
--
-- ${TALKPAGE} - a link to the talk page. If a section is specified, links
-- straight to that talk page section.
--
-- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to
-- create a blurb like "This template is semi-protected", or "This article is
-- move-protected until DD Month YYYY".
--
-- ${VANDAL} - links for the specified username (or the root page name)
-- using Module:Vandal-m.
--
-- Functions
--
-- For advanced users, it is possible to use Lua functions instead of strings
-- in the banner config tables. Using functions gives flexibility that is not
-- possible just by using parameters. Functions take two arguments, the
-- protection object and the template arguments, and they must output a string.
--
-- For example:
--
-- text = function (protectionObj, args)
-- if protectionObj.level == 'autoconfirmed' then
-- return 'foo'
-- else
-- return 'bar'
-- end
-- end
--
-- Some protection object properties and methods that may be useful:
-- protectionObj.action - the protection action
-- protectionObj.level - the protection level
-- protectionObj.reason - the protection reason
-- protectionObj.expiry - the expiry. Nil if unset, the string "indef" if set
-- to indefinite, and the protection time in unix time if temporary.
-- protectionObj.protectionDate - the protection date in unix time, or nil if
-- unspecified.
-- protectionObj.bannerConfig - the banner config found by the module. Beware
-- of editing the config field used by the function, as it could create an
-- infinite loop.
-- protectionObj:isProtected - returns a boolean showing whether the page is
-- protected.
-- protectionObj:isTemporary - returns a boolean showing whether the expiry is
-- temporary.
-- protectionObj:isIncorrect - returns a boolean showing whether the protection
-- template is incorrect.
--]]
-- The master banner data, used if no values have been found in banners or
-- defaultBanners.
masterBanner = {
text = '${INTROBLURB}',
explanation = '${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPBLURB}',
link = '${IMAGELINK}',
alt = 'Page ${PROTECTIONLEVEL}'
},
-- The default banner data. This holds banner data for different protection
-- levels.
-- *required* - this table needs edit, move, autoreview and upload subtables.
defaultBanners = {
edit = {},
move = {},
autoreview = {
default = {
alt = 'Page protected with pending changes',
tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users',
image = 'Pending-protection-shackle.svg'
}
},
upload = {}
},
-- The banner data. This holds banner data for different protection reasons.
-- In fact, the reasons specified in this table control which reasons are
-- valid inputs to the first positional parameter.
--
-- There is also a non-standard "description" field that can be used for items
-- in this table. This is a description of the protection reason for use in the
-- module documentation.
--
-- *required* - this table needs edit, move, autoreview and upload subtables.
banners = {
edit = {
blp = {
description = 'For pages protected to promote compliance with the'
.. ' [[Wikipedia:Biographies of living persons'
.. '|biographies of living persons]] policy',
text = '${INTROFRAGMENT} to promote compliance with'
.. ' [[Wikipedia:Biographies of living persons'
.. "|Wikipedia's policy on the biographies"
.. ' of living people]].',
tooltip = '${TOOLTIPFRAGMENT} to promote compliance with the policy on'
.. ' biographies of living persons',
},
deceased = {
description = 'For user pages of Wikipedia users who are deceased',
text = '${INTROFRAGMENT} to prevent vandalism of a deceased'
.. ' Wikipedian\'s user page.'
.. ' A family member who wishes to edit this user page can use this'
.. ' user\'s ${TALKPAGE} or submit a request to [[Wikipedia:VRT|the'
.. ' Volunteer Response Team]].',
tooltip = '${TOOLTIPFRAGMENT} because this Wikipedian is deceased'
},
dmca = {
description = 'For pages protected by the Wikimedia Foundation'
.. ' due to [[Digital Millennium Copyright Act]] takedown requests',
explanation = function (protectionObj, args)
local ret = 'Pursuant to a rights owner notice under the Digital'
.. ' Millennium Copyright Act (DMCA) regarding some content'
.. ' in this article, the Wikimedia Foundation acted under'
.. ' applicable law and took down and restricted the content'
.. ' in question.'
if args.notice then
ret = ret .. ' A copy of the received notice can be found here: '
.. args.notice .. '.'
end
ret = ret .. ' For more information, including websites discussing'
.. ' how to file a counter-notice, please see'
.. " [[Wikipedia:Office actions]] and the article's ${TALKPAGE}."
.. "'''Do not remove this template from the article until the"
.. " restrictions are withdrawn'''."
return ret
end,
image = 'Office-protection-shackle.svg',
link = 'Wikipedia:Protection policy#office',
},
dispute = {
description = 'For pages protected due to editing disputes',
text = function (protectionObj, args)
-- Find the value of "disputes".
local display = 'disputes'
local disputes
if args.section then
disputes = string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[protectionObj.title.namespace].talk.name,
protectionObj.title.text,
args.section,
display
)
else
disputes = display
end
-- Make the blurb, depending on the expiry.
local msg
if type(protectionObj.expiry) == 'number' then
msg = '${INTROFRAGMENT} or until editing %s have been resolved.'
else
msg = '${INTROFRAGMENT} until editing %s have been resolved.'
end
return string.format(msg, disputes)
end,
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPFRAGMENT} due to editing disputes',
},
ecp = {
description = 'For articles in topic areas authorized by'
.. ' [[Wikipedia:Arbitration Committee|ArbCom]] or'
.. ' meets the criteria for community use',
alt = 'Extended-protected ${PAGETYPE}',
},
mainpage = {
description = 'For pages protected for being displayed on the [[Main Page]]',
text = 'This file is currently'
.. ' [[Wikipedia:This page is protected|protected]] from'
.. ' editing because it is currently or will soon be displayed'
.. ' on the [[Main Page]].',
explanation = 'Images on the Main Page are protected due to their high'
.. ' visibility. Please discuss any necessary changes on the ${TALKPAGE}.'
.. '<br /><span style="font-size:90%;">'
.. "'''Administrators:''' Once this image is definitely off the Main Page,"
.. ' please unprotect this file, or reduce to semi-protection,'
.. ' as appropriate.</span>',
},
office = {
description = 'For pages protected by the Wikimedia Foundation',
text = function (protectionObj, args)
local ret = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.'
if protectionObj.protectionDate then
ret = ret .. ' It has been protected since ${PROTECTIONDATE}.'
end
return ret
end,
explanation = "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not remove protection from this"
.. " page unless you are authorized by the Wikimedia Foundation to do"
.. " so.'''",
image = 'Office-protection-shackle.svg',
link = 'Wikipedia:Protection policy#office',
},
reset = {
description = 'For pages protected by the Wikimedia Foundation and'
.. ' "reset" to a bare-bones version',
text = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.protectionDate then
ret = ret .. 'On ${PROTECTIONDATE} this ${PAGETYPE} was'
else
ret = ret .. 'This ${PAGETYPE} has been'
end
ret = ret .. ' reduced to a'
.. ' simplified, "bare bones" version so that it may be completely'
.. ' rewritten to ensure it meets the policies of'
.. ' [[WP:NPOV|Neutral Point of View]] and [[WP:V|Verifiability]].'
.. ' Standard Wikipedia policies will apply to its rewriting—which'
.. ' will eventually be open to all editors—and will be strictly'
.. ' enforced. The ${PAGETYPE} has been ${PROTECTIONLEVEL} while'
.. ' it is being rebuilt.\n\n'
.. 'Any insertion of material directly from'
.. ' pre-protection revisions of the ${PAGETYPE} will be removed, as'
.. ' will any material added to the ${PAGETYPE} that is not properly'
.. ' sourced. The associated talk page(s) were also cleared on the'
.. " same date.\n\n"
.. "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not override"
.. " this action, and do not remove protection from this page,"
.. " unless you are authorized by the Wikimedia Foundation"
.. " to do so. No editor may remove this notice.'''"
return ret
end,
image = 'Office-protection-shackle.svg',
link = 'Wikipedia:Protection policy#office',
},
sock = {
description = 'For pages protected due to'
.. ' [[Wikipedia:Sock puppetry|sock puppetry]]',
text = '${INTROFRAGMENT} to prevent [[Wikipedia:Sock puppetry|sock puppets]] of'
.. ' [[Wikipedia:Blocking policy|blocked]] or'
.. ' [[Wikipedia:Banning policy|banned users]]'
.. ' from editing it.',
tooltip = '${TOOLTIPFRAGMENT} to prevent sock puppets of blocked or banned users from'
.. ' editing it',
},
template = {
description = 'For [[Wikipedia:High-risk templates|high-risk]]'
.. ' templates and Lua modules',
text = 'This is a permanently [[Wikipedia:Protection policy|protected]] ${PAGETYPE},'
.. ' as it is [[Wikipedia:High-risk templates|high-risk]].',
explanation = 'Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] or'
.. ' [[Wikipedia:Template editor|template editor]] to make an edit if'
.. ' it is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by'
.. ' [[Wikipedia:Consensus|consensus]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
tooltip = 'This high-risk ${PAGETYPE} is permanently ${PROTECTIONLEVEL}'
.. ' to prevent vandalism',
alt = 'Permanently protected ${PAGETYPE}',
},
usertalk = {
description = 'For pages protected against disruptive edits by a'
.. ' particular user',
text = '${INTROFRAGMENT} to prevent ${VANDAL} from using it to make disruptive edits,'
.. ' such as abusing the'
.. ' {{[[Template:unblock|unblock]]}} template.',
explanation = 'If you cannot edit this user talk page and you need to'
.. ' make a change or leave a message, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for edits to a protected page'
.. '|request an edit]],'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]],'
.. ' [[Special:Userlogin|log in]],'
.. ' or [[Special:UserLogin/signup|create an account]].',
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism|vandalism]]',
text = '${INTROFRAGMENT} due to [[Wikipedia:Vandalism|vandalism]].',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.level == 'sysop' then
ret = ret .. "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. '
end
return ret .. '${EXPLANATIONBLURB}'
end,
tooltip = '${TOOLTIPFRAGMENT} due to vandalism',
}
},
move = {
dispute = {
description = 'For pages protected against page moves due to'
.. ' disputes over the page title',
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
image = 'Move-protection-shackle.svg'
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism#Page-move vandalism'
.. ' |page-move vandalism]]'
}
},
autoreview = {},
upload = {}
},
--------------------------------------------------------------------------------
--
-- GENERAL DATA TABLES
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Protection blurbs
--------------------------------------------------------------------------------
-- This table produces the protection blurbs available with the
-- ${PROTECTIONBLURB} parameter. It is sorted by protection action and
-- protection level, and is checked by the module in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionBlurbs = {
edit = {
default = 'This ${PAGETYPE} is currently [[Wikipedia:Protection policy#full|'
.. 'protected]] from editing',
templateeditor = 'This ${PAGETYPE} is currently [[Wikipedia:Protection policy#template'
.. '|protected]] from editing',
autoconfirmed = 'Editing of this ${PAGETYPE} by [[Wikipedia:User access'
.. ' levels#New users|new]] or [[Wikipedia:User access levels#Unregistered'
.. ' users|unregistered]] users is currently [[Wikipedia:Protection'
.. ' policy#semi|disabled]]',
extendedconfirmed = 'This ${PAGETYPE} is currently under [[Wikipedia:Protection'
.. ' policy#extended|extended confirmed protection]]',
},
move = {
default = 'This ${PAGETYPE} is currently [[Wikipedia:Protection policy#Move'
.. ' protection|protected]] from [[Help:Moving a page|page moves]]'
},
autoreview = {
default = 'All edits made to this ${PAGETYPE} by'
.. ' [[Wikipedia:User access levels#New users|new]] or'
.. ' [[Wikipedia:User access levels#Unregistered users|unregistered]]'
.. ' users are currently'
.. ' [[Wikipedia:Pending changes|subject to review]]'
},
upload = {
default = 'Uploading new versions of this ${PAGETYPE} is currently disabled'
}
},
--------------------------------------------------------------------------------
-- Explanation blurbs
--------------------------------------------------------------------------------
-- This table produces the explanation blurbs available with the
-- ${EXPLANATIONBLURB} parameter. It is sorted by protection action,
-- protection level, and whether the page is a talk page or not. If the page is
-- a talk page it will have a talk key of "talk"; otherwise it will have a talk
-- key of "subject". The table is checked in the following order:
-- 1. page's protection action, page's protection level, page's talk key
-- 2. page's protection action, page's protection level, default talk key
-- 3. page's protection action, default protection level, page's talk key
-- 4. page's protection action, default protection level, default talk key
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
explanationBlurbs = {
edit = {
autoconfirmed = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' ${EDITREQUEST}, discuss changes on the ${TALKPAGE},'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
},
extendedconfirmed = {
default = 'Extended confirmed protection prevents edits from all unregistered editors'
.. ' and registered users with fewer than 30 days tenure and 500 edits.'
.. ' The [[Wikipedia:Protection policy#extended|policy on community use]]'
.. ' specifies that extended confirmed protection can be applied to combat'
.. ' disruption, if semi-protection has proven to be ineffective.'
.. ' Extended confirmed protection may also be applied to enforce'
.. ' [[Wikipedia:Arbitration Committee|arbitration sanctions]].'
.. ' Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask for uncontroversial changes supported by'
.. ' [[Wikipedia:Consensus|consensus]].'
},
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]]. You may also [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|request]] that this page be unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' You may [[Wikipedia:Requests for page'
.. ' protection#Current requests for edits to a protected page|request an'
.. ' edit]] to this page, or [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|ask]] for it to be unprotected.'
}
},
move = {
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves on the'
.. ' ${TALKPAGE} or at [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves at'
.. ' [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.'
}
},
autoreview = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Edits to this ${PAGETYPE} by new and unregistered users'
.. ' will not be visible to readers until they are accepted by'
.. ' a reviewer. To avoid the need for your edits to be'
.. ' reviewed, you may'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].'
},
},
upload = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but new versions of the file'
.. ' cannot be uploaded until it is unprotected. You can'
.. ' request that a new version be uploaded by using a'
.. ' [[Wikipedia:Edit requests|protected edit request]], or you'
.. ' can [[Wikipedia:Requests for page protection|request]]'
.. ' that the file be unprotected.'
}
}
},
--------------------------------------------------------------------------------
-- Protection levels
--------------------------------------------------------------------------------
-- This table provides the data for the ${PROTECTIONLEVEL} parameter, which
-- produces a short label for different protection levels. It is sorted by
-- protection action and protection level, and is checked in the following
-- order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionLevels = {
edit = {
default = 'protected',
templateeditor = 'template-protected',
extendedconfirmed = 'extended-confirmed-protected',
autoconfirmed = 'semi-protected',
},
move = {
default = 'move-protected'
},
autoreview = {
},
upload = {
default = 'upload-protected'
}
},
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- This table lists different padlock images for each protection action and
-- protection level. It is used if an image is not specified in any of the
-- banner data tables, and if the page does not satisfy the conditions for using
-- the ['image-filename-indef'] image. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
images = {
edit = {
default = 'Full-protection-shackle.svg',
templateeditor = 'Template-protection-shackle.svg',
extendedconfirmed = 'Extended-protection-shackle.svg',
autoconfirmed = 'Semi-protection-shackle.svg'
},
move = {
default = 'Move-protection-shackle.svg',
},
autoreview = {
default = 'Pending-protection-shackle.svg'
},
upload = {
default = 'Upload-protection-shackle.svg'
}
},
-- Pages with a reason specified in this table will show the special "indef"
-- padlock, defined in the 'image-filename-indef' message, if no expiry is set.
indefImageReasons = {
template = true
},
--------------------------------------------------------------------------------
-- Image links
--------------------------------------------------------------------------------
-- This table provides the data for the ${IMAGELINK} parameter, which gets
-- the image link for small padlock icons based on the page's protection action
-- and protection level. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
imageLinks = {
edit = {
default = 'Wikipedia:Protection policy#full',
templateeditor = 'Wikipedia:Protection policy#template',
extendedconfirmed = 'Wikipedia:Protection policy#extended',
autoconfirmed = 'Wikipedia:Protection policy#semi'
},
move = {
default = 'Wikipedia:Protection policy#move'
},
autoreview = {
default = 'Wikipedia:Protection policy#pending'
},
upload = {
default = 'Wikipedia:Protection policy#upload'
}
},
--------------------------------------------------------------------------------
-- Padlock indicator names
--------------------------------------------------------------------------------
-- This table provides the "name" attribute for the <indicator> extension tag
-- with which small padlock icons are generated. All indicator tags on a page
-- are displayed in alphabetical order based on this attribute, and with
-- indicator tags with duplicate names, the last tag on the page wins.
-- The attribute is chosen based on the protection action; table keys must be a
-- protection action name or the string "default".
padlockIndicatorNames = {
autoreview = 'pp-autoreview',
default = 'pp-default'
},
--------------------------------------------------------------------------------
-- Protection categories
--------------------------------------------------------------------------------
--[[
-- The protection categories are stored in the protectionCategories table.
-- Keys to this table are made up of the following strings:
--
-- 1. the expiry date
-- 2. the namespace
-- 3. the protection reason (e.g. "dispute" or "vandalism")
-- 4. the protection level (e.g. "sysop" or "autoconfirmed")
-- 5. the action (e.g. "edit" or "move")
--
-- When the module looks up a category in the table, first it will will check to
-- see a key exists that corresponds to all five parameters. For example, a
-- user page semi-protected from vandalism for two weeks would have the key
-- "temp-user-vandalism-autoconfirmed-edit". If no match is found, the module
-- changes the first part of the key to "all" and checks the table again. It
-- keeps checking increasingly generic key combinations until it finds the
-- field, or until it reaches the key "all-all-all-all-all".
--
-- The module uses a binary matrix to determine the order in which to search.
-- This is best demonstrated by a table. In this table, the "0" values
-- represent "all", and the "1" values represent the original data (e.g.
-- "indef" or "file" or "vandalism").
--
-- expiry namespace reason level action
-- order
-- 1 1 1 1 1 1
-- 2 0 1 1 1 1
-- 3 1 0 1 1 1
-- 4 0 0 1 1 1
-- 5 1 1 0 1 1
-- 6 0 1 0 1 1
-- 7 1 0 0 1 1
-- 8 0 0 0 1 1
-- 9 1 1 1 0 1
-- 10 0 1 1 0 1
-- 11 1 0 1 0 1
-- 12 0 0 1 0 1
-- 13 1 1 0 0 1
-- 14 0 1 0 0 1
-- 15 1 0 0 0 1
-- 16 0 0 0 0 1
-- 17 1 1 1 1 0
-- 18 0 1 1 1 0
-- 19 1 0 1 1 0
-- 20 0 0 1 1 0
-- 21 1 1 0 1 0
-- 22 0 1 0 1 0
-- 23 1 0 0 1 0
-- 24 0 0 0 1 0
-- 25 1 1 1 0 0
-- 26 0 1 1 0 0
-- 27 1 0 1 0 0
-- 28 0 0 1 0 0
-- 29 1 1 0 0 0
-- 30 0 1 0 0 0
-- 31 1 0 0 0 0
-- 32 0 0 0 0 0
--
-- In this scheme the action has the highest priority, as it is the last
-- to change, and the expiry has the least priority, as it changes the most.
-- The priorities of the expiry, the protection level and the action are
-- fixed, but the priorities of the reason and the namespace can be swapped
-- through the use of the cfg.bannerDataNamespaceHasPriority table.
--]]
-- If the reason specified to the template is listed in this table,
-- namespace data will take priority over reason data in the protectionCategories
-- table.
reasonsWithNamespacePriority = {
vandalism = true,
},
-- The string to use as a namespace key for the protectionCategories table for each
-- namespace number.
categoryNamespaceKeys = {
[ 2] = 'user',
[ 3] = 'user',
[ 4] = 'project',
[ 6] = 'file',
[ 8] = 'mediawiki',
[ 10] = 'template',
[ 12] = 'project',
[ 14] = 'category',
[100] = 'portal',
[828] = 'module',
},
protectionCategories = {
['all|all|all|all|all'] = 'Wikipedia fully protected pages',
['all|all|office|all|all'] = 'Wikipedia Office-protected pages',
['all|all|reset|all|all'] = 'Wikipedia Office-protected pages',
['all|all|dmca|all|all'] = 'Wikipedia Office-protected pages',
['all|all|mainpage|all|all'] = 'Wikipedia fully protected main page files',
['all|all|all|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|all|ecp|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|template|all|all|edit'] = 'Wikipedia fully protected templates',
['all|all|all|autoconfirmed|edit'] = 'Wikipedia semi-protected pages',
['indef|all|all|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected pages',
['all|all|blp|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected biographies of living people',
['temp|all|blp|autoconfirmed|edit'] = 'Wikipedia temporarily semi-protected biographies of living people',
['all|all|dispute|autoconfirmed|edit'] = 'Wikipedia pages semi-protected due to dispute',
['all|all|sock|autoconfirmed|edit'] = 'Wikipedia pages semi-protected from banned users',
['all|all|vandalism|autoconfirmed|edit'] = 'Wikipedia pages semi-protected against vandalism',
['all|category|all|autoconfirmed|edit'] = 'Wikipedia semi-protected categories',
['all|file|all|autoconfirmed|edit'] = 'Wikipedia semi-protected files',
['all|portal|all|autoconfirmed|edit'] = 'Wikipedia semi-protected portals',
['all|project|all|autoconfirmed|edit'] = 'Wikipedia semi-protected project pages',
['all|talk|all|autoconfirmed|edit'] = 'Wikipedia semi-protected talk pages',
['all|template|all|autoconfirmed|edit'] = 'Wikipedia semi-protected templates',
['all|user|all|autoconfirmed|edit'] = 'Wikipedia semi-protected user and user talk pages',
['all|all|all|templateeditor|move'] = 'Wikipedia template-protected pages other than templates and modules',
['all|all|all|templateeditor|edit'] = 'Wikipedia template-protected pages other than templates and modules',
['all|template|all|templateeditor|edit'] = 'Wikipedia template-protected templates',
['all|template|all|templateeditor|move'] = 'Wikipedia template-protected templates', -- move-protected templates
['all|all|blp|sysop|edit'] = 'Wikipedia indefinitely protected biographies of living people',
['temp|all|blp|sysop|edit'] = 'Wikipedia temporarily protected biographies of living people',
['all|all|dispute|sysop|edit'] = 'Wikipedia pages protected due to dispute',
['all|all|sock|sysop|edit'] = 'Wikipedia pages protected from banned users',
['all|all|vandalism|sysop|edit'] = 'Wikipedia pages protected against vandalism',
['all|category|all|sysop|edit'] = 'Wikipedia fully protected categories',
['all|file|all|sysop|edit'] = 'Wikipedia fully protected files',
['all|project|all|sysop|edit'] = 'Wikipedia fully protected project pages',
['all|talk|all|sysop|edit'] = 'Wikipedia fully protected talk pages',
['all|template|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected templates',
['all|template|all|extendedconfirmed|move'] = 'Wikipedia extended-confirmed-protected templates',
['all|template|all|sysop|edit'] = 'Wikipedia fully protected templates',
['all|user|all|sysop|edit'] = 'Wikipedia fully protected user and user talk pages',
['all|module|all|all|edit'] = 'Wikipedia fully protected modules',
['all|module|all|templateeditor|edit'] = 'Wikipedia template-protected modules',
['all|module|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected modules',
['all|module|all|autoconfirmed|edit'] = 'Wikipedia semi-protected modules',
['all|all|all|sysop|move'] = 'Wikipedia move-protected pages',
['indef|all|all|sysop|move'] = 'Wikipedia indefinitely move-protected pages',
['all|all|dispute|sysop|move'] = 'Wikipedia pages move-protected due to dispute',
['all|all|vandalism|sysop|move'] = 'Wikipedia pages move-protected due to vandalism',
['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals',
['all|project|all|sysop|move'] = 'Wikipedia move-protected project pages',
['all|talk|all|sysop|move'] = 'Wikipedia move-protected talk pages',
['all|template|all|sysop|move'] = 'Wikipedia move-protected templates',
['all|user|all|sysop|move'] = 'Wikipedia move-protected user and user talk pages',
['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages',
['all|file|all|all|upload'] = 'Wikipedia upload-protected files',
},
--------------------------------------------------------------------------------
-- Expiry category config
--------------------------------------------------------------------------------
-- This table configures the expiry category behaviour for each protection
-- action.
-- * If set to true, setting that action will always categorise the page if
-- an expiry parameter is not set.
-- * If set to false, setting that action will never categorise the page.
-- * If set to nil, the module will categorise the page if:
-- 1) an expiry parameter is not set, and
-- 2) a reason is provided, and
-- 3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck
-- table.
expiryCheckActions = {
edit = nil,
move = false,
autoreview = true,
upload = false
},
reasonsWithoutExpiryCheck = {
blp = true,
template = true,
},
--------------------------------------------------------------------------------
-- Pagetypes
--------------------------------------------------------------------------------
-- This table produces the page types available with the ${PAGETYPE} parameter.
-- Keys are namespace numbers, or the string "default" for the default value.
pagetypes = {
[0] = 'article',
[6] = 'file',
[10] = 'template',
[14] = 'category',
[828] = 'module',
default = 'page'
},
--------------------------------------------------------------------------------
-- Strings marking indefinite protection
--------------------------------------------------------------------------------
-- This table contains values passed to the expiry parameter that mean the page
-- is protected indefinitely.
indefStrings = {
['indef'] = true,
['indefinite'] = true,
['indefinitely'] = true,
['infinite'] = true,
},
--------------------------------------------------------------------------------
-- Group hierarchy
--------------------------------------------------------------------------------
-- This table maps each group to all groups that have a superset of the original
-- group's page editing permissions.
hierarchy = {
sysop = {},
reviewer = {'sysop'},
filemover = {'sysop'},
templateeditor = {'sysop'},
extendedconfirmed = {'sysop'},
autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'},
user = {'autoconfirmed'},
['*'] = {'user'}
},
--------------------------------------------------------------------------------
-- Wrapper templates and their default arguments
--------------------------------------------------------------------------------
-- This table contains wrapper templates used with the module, and their
-- default arguments. Templates specified in this table should contain the
-- following invocation, and no other template content:
--
-- {{#invoke:Protection banner|main}}
--
-- If other content is desired, it can be added between
-- <noinclude>...</noinclude> tags.
--
-- When a user calls one of these wrapper templates, they will use the
-- default arguments automatically. However, users can override any of the
-- arguments.
wrappers = {
['Template:Protected page'] = {},
['Template:Extended confirmed–protected'] = {'ecp'},
['Template:Protected biography of a living person'] = {'blp'},
['Template:Protected due to a dispute'] = {'dispute'},
['Template:Move-protected'] = {action = 'move', catonly = 'yes'},
['Template:Move-protected due to a dispute'] = {'dispute', action = 'move', catonly = 'yes'},
['Template:Move-protected due to vandalism'] = {'vandalism', action = 'move', catonly = 'yes'},
['Template:Office-protected'] = {'office'},
['Template:Pending changes–protected'] = {action = 'autoreview', small = true},
['Template:Semi-protected indefinitely'] = {small = true},
['Template:Protected due to sockpuppetry'] = {'sock'},
['Template:Template-protected'] = {'template', small = true},
['Template:Upload-protected'] = {action = 'upload'},
['Template:Protected talk page of a blocked user'] = {'usertalk'},
['Template:Protected due to vandalism'] = {'vandalism'},
},
--------------------------------------------------------------------------------
--
-- MESSAGES
--
--------------------------------------------------------------------------------
msg = {
--------------------------------------------------------------------------------
-- Intro blurb and intro fragment
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${INTROBLURB} and
-- ${INTROFRAGMENT} parameters. If the protection is temporary they use the
-- intro-blurb-expiry or intro-fragment-expiry, and if not they use
-- intro-blurb-noexpiry or intro-fragment-noexpiry.
-- It is possible to use banner parameters in these messages.
['intro-blurb-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY}.',
['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}.',
['intro-fragment-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY},',
['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}',
--------------------------------------------------------------------------------
-- Tooltip blurb
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${TOOLTIPBLURB} parameter.
-- If the protection is temporary the tooltip-blurb-expiry message is used, and
-- if not the tooltip-blurb-noexpiry message is used.
-- It is possible to use banner parameters in these messages.
['tooltip-blurb-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY}.',
['tooltip-blurb-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}.',
['tooltip-fragment-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY},',
['tooltip-fragment-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
--------------------------------------------------------------------------------
-- Special explanation blurb
--------------------------------------------------------------------------------
-- An explanation blurb for pages that cannot be unprotected, e.g. for pages
-- in the MediaWiki namespace.
-- It is possible to use banner parameters in this message.
['explanation-blurb-nounprotect'] = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]].',
--------------------------------------------------------------------------------
-- Protection log display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the protection log link
-- or the pending changes log link produced by the ${PROTECTIONLOG} parameter.
-- It is possible to use banner parameters in these messages.
['protection-log-display'] = 'protection log',
['pc-log-display'] = 'pending changes log',
--------------------------------------------------------------------------------
-- Current version display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the page history link
-- or the move log link produced by the ${CURRENTVERSION} parameter.
-- It is possible to use banner parameters in these messages.
['current-version-move-display'] = 'current title',
['current-version-edit-display'] = 'current version',
--------------------------------------------------------------------------------
-- Talk page
--------------------------------------------------------------------------------
-- This message determines the display value of the talk page link produced
-- with the ${TALKPAGE} parameter.
-- It is possible to use banner parameters in this message.
['talk-page-link-display'] = 'talk page',
--------------------------------------------------------------------------------
-- Edit requests
--------------------------------------------------------------------------------
-- This message determines the display value of the edit request link produced
-- with the ${EDITREQUEST} parameter.
-- It is possible to use banner parameters in this message.
['edit-request-display'] = 'submit an edit request',
--------------------------------------------------------------------------------
-- Expiry date format
--------------------------------------------------------------------------------
-- This is the format for the blurb expiry date. It should be valid input for
-- the first parameter of the #time parser function.
['expiry-date-format'] = 'F j, Y "at" H:i e',
--------------------------------------------------------------------------------
-- Tracking categories
--------------------------------------------------------------------------------
-- These messages determine which tracking categories the module outputs.
['tracking-category-incorrect'] = 'Wikipedia pages with incorrect protection templates',
['tracking-category-template'] = 'Wikipedia template-protected pages other than templates and modules',
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- These are images that are not defined by their protection action and protection level.
['image-filename-indef'] = 'Full-protection-shackle.svg',
['image-filename-default'] = 'Transparent.gif',
--------------------------------------------------------------------------------
-- End messages
--------------------------------------------------------------------------------
}
--------------------------------------------------------------------------------
-- End configuration
--------------------------------------------------------------------------------
}
pj6zo6l44p4bk4pwax9tlbkyf7cpx34