This module may be appended to a template to check for uses of unknown parameters.
This Lua module is used on ७,५५०,०००+ pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
{{#invoke:check for unknown parameters|check |unknown=[[Category:Some tracking category]] |arg1|arg2|...|argN}}
or to sort the entries in the tracking category by parameter with a preview error message
{{#invoke:check for unknown parameters|check |unknown=[[Category:Some tracking category|_VALUE_]] |preview=unknown parameter "_VALUE_" |arg1|arg2|...|argN}}
or for an explicit red error message
{{#invoke:check for unknown parameters|check |unknown= |arg1|arg2|...|argN}}
Here, arg1
, arg2
, ..., argN
, are the known parameters. Unnamed (positional) parameters can be added too: |1|2|argname1|argname2|...
. Any parameter which is used, but not on this list, will cause the module to return whatever is passed with the unknown
parameter. The _VALUE_
keyword, if used, will be changed to the name of the parameter. This is useful for either sorting the entries in a tracking category, or for provide more explicit information.
By default, the module makes no distinction between a defined-but-blank parameter and a non-blank parameter. That is, both unlisted |foo=x
and |foo=
are reported. To only track non-blank parameters use |ignoreblank=1
.
By default, the module ignores blank positional parameters. That is, an unlisted |2=
is ignored. To include blank positional parameters in the tracking use |showblankpositional=1
.
This module supports Lua patterns (similar to regular expressions), which are useful when there are many known parameters which use a systematic pattern. For example, template:infobox3cols uses
| regexp1 = header[%d][%d]* | regexp2 = label[%d][%d]* | regexp3 = data[%d][%d]*[abc]? | regexp4 = class[%d][%d]*[abc]? | regexp5 = rowclass[%d][%d]* | regexp6 = rowstyle[%d][%d]* | regexp7 = rowcellstyle[%d][%d]*
to match all parameters of the form headerNUM
, labelNUM
, dataNUM
, dataNUMa
, dataNUMb
, dataNUMc
, ..., rowcellstyleNUM
, where NUM is a string of digits.
{{Infobox | above = {{{name|}}} | label1 = Height | data1 = {{{height|}}} | label2 = Weight | data2 = {{{weight|}}} | label3 = Website | data3 = {{{website|}}} }}{{#invoke:Check for unknown parameters|check | unknown = {{main other|[[Category:Some tracking category|_VALUE_]]}} | preview = unknown parameter "_VALUE_" | name | height | weight | website }}
The following is a list of some of the templates which invoke this module, with the associated category for each.
List of templates which invoke "Module:Check for unknown parameters" | |
---|---|
Template | Tracking/maintenance category |
Template:Authority control (talk⧼dot-separator⧽links⧼dot-separator⧽edit) | Category:Pages using authority control with parameters ( २ ) |
Template:Aviation accidents and incidents (talk⧼dot-separator⧽links⧼dot-separator⧽edit) | Category:Pages using aviation accidents and incidents with unknown parameters ( ० ) |
Template:Country topics (talk⧼dot-separator⧽links⧼dot-separator⧽edit) | Category:Pages using country topics with unknown parameters ( ० ) |
Template:Infobox3cols | Category:Pages using infobox3cols with undocumented parameters |
Template:Infobox academic division | Category:Pages using infobox academic division with unknown parameters |
Template:Infobox amateur wrestler | Category:Pages using infobox amateur wrestler with unknown parameters |
Template:Infobox anatomy | Category:Medicine infobox template using unsupported parameters |
Template:Infobox artery | Category:Medicine infobox template using unsupported parameters |
Template:Infobox astronaut | Category:Pages using infobox astronaut with unknown parameters |
Template:Infobox award | Category:Pages using infobox award with unknown parameters |
Template:Infobox bone | Category:Medicine infobox template using unsupported parameters |
Template:Infobox brain | Category:Medicine infobox template using unsupported parameters |
Template:Infobox broadcast | Category:Pages using infobox broadcast with unknown parameters |
Template:Infobox city Japan | Category:Pages using infobox city Japan with unknown parameters |
Template:Infobox Daytona 500 | Category:Pages using infobox Daytona 500 with unknown parameters |
Template:Infobox embryology | Category:Medicine infobox template using unsupported parameters |
Template:Infobox event | Category:Pages using infobox event with unknown parameters |
Template:Infobox Grand Prix race report | Category:Pages using infobox Grand Prix race report with unknown parameters |
Template:Infobox Hindu temple | Category:Pages using infobox Hindu temple with deprecated parameters |
Template:Infobox horseraces | Category:Pages using infobox horseraces with unknown parameters |
Template:Infobox language | Category:Language articles with unsupported infobox fields |
Template:Infobox language family | Category:Language articles with unsupported infobox fields |
Template:Infobox ligament | Category:Medicine infobox template using unsupported parameters |
Template:Infobox lymph | Category:Medicine infobox template using unsupported parameters |
Template:Infobox military installation | Category:Pages using infobox military installation with deprecated syntax |
Template:Infobox Minor League Baseball | Category:Pages using infobox Minor League Baseball with unknown parameters |
Template:Infobox muscle | Category:Medicine infobox template using unsupported parameters |
Template:Infobox musical artist | Category:Pages using Template:Infobox musical artist with unknown parameters |
Template:Infobox NASCAR race report | Category:Pages using infobox NASCAR race report with unknown parameters |
Template:Infobox nerve | Category:Medicine infobox template using unsupported parameters |
Template:Infobox neuron | Category:Medicine infobox template using unsupported parameters |
Template:Infobox political party | Category:Political party articles using deprecated parameters |
Template:Infobox public transit | Category:Public transit articles with unsupported infobox fields |
Template:Infobox restaurant | Category:Pages using infobox restaurant with unsupported parameters |
Template:Infobox school district | Category:Pages using infobox school district with unsupported parameters |
Template:Infobox settlement | Category:Settlement articles requiring maintenance |
Template:Infobox speedway rider | Category:Pages using Infobox Speedway rider with unknown parameters |
Template:Infobox sports rivalry | Category:Pages using infobox sports rivalry with unknown parameters |
Template:Infobox vein | Category:Medicine infobox template using unsupported parameters |
Template:Multiple issues | Category:Pages using multiple issues with incorrect parameters |
Template:WikiProject Africa | Category:Africa articles with invalid parameters |
Template:WikiProject Central America | Category:Central America articles with invalid parameters |
Template:WikiProject United States | Category:United States articles with invalid parameters |
Template:Year box | Category:Pages using year box with unknown parameters |
For a more up-to-date list, search for the "check for unknown parameters" within the template namespace.
-- This module may be used to compare the arguments passed to the parent -- with a list of arguments, returning a specified result if an argument is -- not on the list local p = {} local function trim(s) return s:match('^%s*(.-)%s*$') end local function isnotempty(s) return s and s:match('%S') end local function clean(text) -- Return text cleaned for display and truncated if too long. -- Strip markers are replaced with dummy text representing the original wikitext. local pos, truncated local function truncate(text) if truncated then return '' end if mw.ustring.len(text) > 25 then truncated = true text = mw.ustring.sub(text, 1, 25) .. '...' end return mw.text.nowiki(text) end local parts = {} for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do pos = remainder table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>') end table.insert(parts, truncate(text:sub(pos or 1))) return table.concat(parts) end function p._check(args, pargs) if type(args) ~= "table" or type(pargs) ~= "table" then -- TODO: error handling return end local ignoreblank = isnotempty(args['ignoreblank']) local showblankpos = isnotempty(args['showblankpositional']) local knownargs = {} local unknown = args['unknown'] or 'Found _VALUE_, ' local preview = args['preview'] local values = {} local res = {} local regexps = {} -- create the list of known args, regular expressions, and the return string for k, v in pairs(args) do if type(k) == 'number' then v = trim(v) knownargs[v] = 1 elseif k:find('^regexp[1-9][0-9]*$') then table.insert(regexps, '^' .. v .. '$') end end if isnotempty(preview) then preview = 'Warning: ' .. preview .. ' (this message is shown only in preview).' elseif preview == nil then preview = unknown end -- loop over the parent args, and make sure they are on the list for k, v in pairs(pargs) do if type(k) == 'string' and knownargs[k] == nil then local knownflag = false for _, regexp in ipairs(regexps) do if mw.ustring.match(k, regexp) then knownflag = true break end end if not knownflag and ( not ignoreblank or isnotempty(v) ) then table.insert(values, clean(k)) end elseif type(k) == 'number' and knownargs[tostring(k)] == nil and ( showblankpos or isnotempty(v) ) then table.insert(values, k .. ' = ' .. clean(v)) end end -- add results to the output tables if #values > 0 then if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then unknown = preview end for _, v in pairs(values) do if v == '' then -- Fix odd bug for | = which gets stripped to the empty string and -- breaks category links v = ' ' end -- avoid error with v = 'example%2' ("invalid capture index") local r = unknown:gsub('_VALUE_', {_VALUE_ = v}) table.insert(res, r) end end return table.concat(res) end function p.check(frame) local args = frame.args local pargs = frame:getParent().args return p._check(args, pargs) end return p