This module may be appended to a template to check for uses of unknown parameters.
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
{{#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}}
or to use hidden error messages which can be viewed in the HTML source and a preview error message
{{#invoke:check for unknown parameters|check |unknown= |preview=unknown parameter "_VALUE_" |arg1|arg2|...|argN}}
Here, arg1
, arg2
, ..., argN
, are the known parameters. 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. To only track non-blank parameters use |ignoreblank=1
.
This module supports 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 = [[Category:Some tracking category|_VALUE_]] | preview = unknown parameter "_VALUE_" | name | height | weight | website }}
The following is a list of 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 | Category:Pages using authority control with parameters |
Template:Aviation accidents and incidents | Category:Pages using aviation accidents and incidents with unknown parameters |
Template:Country topics | 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 deprecated parameters |
Template:Infobox artery | Category:Medicine infobox template using deprecated parameters |
Template:Infobox astronaut | Category:Pages using infobox astronaut with unknown parameters |
Template:Infobox award | Category:Pages using infobox award with undocumented parameters |
Template:Infobox bone | Category:Medicine infobox template using deprecated parameters |
Template:Infobox brain | Category:Medicine infobox template using deprecated parameters |
Template:Infobox broadcast | Category:Broadcast infoboxes with deprecated parameters |
Template:Infobox city Japan | Category:Pages using infobox city Japan with unsupported parameters |
Template:Infobox Daytona 500 | Category:Pages using infobox Daytona 500 with unknown parameters |
Template:Infobox embryology | Category:Medicine infobox template using deprecated 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 deprecated 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 deprecated parameters |
Template:Infobox lymph | Category:Medicine infobox template using deprecated parameters |
Template:Infobox military installation | Category:Pages using infobox military installation with deprecated syntax |
Template:Infobox Minor League Baseball | Category:Minor League Baseball Infobox using deprecated parameters |
Template:Infobox muscle | Category:Medicine infobox template using deprecated 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 deprecated parameters |
Template:Infobox neuron | Category:Medicine infobox template using deprecated parameters |
Template:Infobox NFL coach | Category:Pages using infobox NFL coach with deprecated syntax |
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 or deprecated parameters |
Template:Infobox sports rivalry | Category:Pages using infobox sports rivalry with unknown parameters |
Template:Infobox vein | Category:Medicine infobox template using deprecated 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 |
-- 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 -- create the list of known args, regular expressions, and the return string local knownargs = {} local regexps = {} 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 -- loop over the parent args, and make sure they are on the list local ignoreblank = isnotempty(args['ignoreblank']) local showblankpos = isnotempty(args['showblankpositional']) local values = {} 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 then local knownflag = false for _, regexp in ipairs(regexps) do if mw.ustring.match(tostring(k), regexp) then knownflag = true break end end if not knownflag and ( showblankpos or isnotempty(v) ) then table.insert(values, k .. ' = ' .. clean(v)) end end end -- add results to the output tables local res = {} if #values > 0 then local unknown_text = args['unknown'] or 'Found _VALUE_, ' if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then local preview_text = args['preview'] if isnotempty(preview_text) then preview_text = require('Module:If preview')._warning({preview_text}) elseif preview == nil then preview_text = unknown_text end unknown_text = preview_text end for _, v in pairs(values) do -- Fix odd bug for | = which gets stripped to the empty string and -- breaks category links if v == '' then v = ' ' end -- avoid error with v = 'example%2' ("invalid capture index") local r = unknown_text: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