 | This module is rated asbeta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
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|...|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}}
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=<span>HIDDEN ERROR: Usage of "_VALUE_" is not recognized</span>|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 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. 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 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 = [[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.
-- 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='Found _VALUE_, 'localpreview=nillocalres={}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=='unknown'andispreview==0thenunknown=velseifk=='preview'andispreview==1thenpreview=velseifk:find('^regexp[1-9][0-9]*$')thentable.insert(regexps,'^'..v..'$')endendifpreviewandpreview~=''thenpreview='<div><strong>Warning:</strong> '..preview..' (this message is shown only in preview).</div>'endifispreview==1andpreviewthenunknown=previewend-- 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