This module may be appended to a template to check for uses of unknown parameters.
{{#invoke:check for unknown parameters|check|unknown=[[Category:Some tracking category]]|arg1|arg2|arg3|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=<span>Sorry, I don't recognize _VALUE_</span>|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 theunknown
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. Toinclude blank positional parameters in the tracking use|showblankpositional=1
.
This module supportsLua patterns which are useful when there are many known parameters which use a systematic pattern. For example,en: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 formheaderNUM
,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|}}}}}<!-- end infobox, start tracking-->{{#invoke:Check for unknown parameters|check| unknown = {{main other|[[Category:Some tracking category|_VALUE_]]}}| preview = unknown parameter "_VALUE_"| name| height | weight| website}}
-- 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 listlocalp={}localfunctiontrim(s)returns:match('^%s*(.-)%s*$')endlocalfunctionisnotempty(s)returnsandtrim(s)~=''endfunctionp.check(frame)localargs=frame.argslocalpargs=frame:getParent().argslocalignoreblank=isnotempty(frame.args['ignoreblank'])localcheckpos=isnotempty(frame.args['checkpositional'])localknownargs={}localunknown=frame.args['unknown']or'Found _VALUE_, 'localpreview=frame.args['preview']localres={}localregexps={}localcomments={}localcommentstr=''localispreview=frame:preprocess("{{REVISIONID}}")==""and1or0-- create the list of known args, regular expressions, and the return stringfork,vinpairs(args)doiftype(k)=='number'thenv=trim(v)knownargs[v]=1elseifk:find('^regexp[1-9][0-9]*$')thentable.insert(regexps,'^'..v..'$')endendifisnotempty(preview)thenpreview='<div><strong>Warning:</strong> '..preview..' (this message is shown only in preview).</div>'elseifpreview==nilthenpreview=unknownendifispreview==1thenunknown=previewignoreblank=falseend-- adds one result to the output tableslocalfunctionaddresult(k)ifk==''then-- Fix odd bug for | = which gets stripped to the empty string and-- breaks category linksk=' 'endlocalr=unknown:gsub('_VALUE_',k)table.insert(res,r)table.insert(comments,'"'..k..'"')end-- loop over the parent args, and make sure they are on the listfork,vinpairs(pargs)doiftype(k)=='string'andknownargs[k]==nilthenlocalknownflag=falsefori,regexpinipairs(regexps)doifmw.ustring.match(k,regexp)thenknownflag=truebreakendendifnotknownflagand(notignoreblankorisnotempty(v))thenk=mw.ustring.gsub(k,'[^%w\-_ ]','?')addresult(k)endelseifcheckposandtype(k)=='number'andknownargs[tostring(k)]==niland(notignoreblankorisnotempty(v))thenaddresult(k)endendif#comments>0thencommentstr='<!-- Module:Check for unknown parameters results: '..table.concat(comments,', ')..'-->'endreturntable.concat(res)..commentstrendreturnp