| 这是Module:Check for unknown parameters(差异)的沙盒。 |
| 此模块sandbox被引用於約355,000個頁面。 為了避免造成大規模的影響,所有對此模块sandbox的編輯應先於沙盒或測試樣例上測試。 測試後無誤的版本可以一次性地加入此模块sandbox中,但是修改前請務必於討論頁發起討論。 模板引用數量會自動更新。 |
| 此模块sandbox已被保护。此为高度可见模块sandbox,其已用于大量条目或被频繁替换引用。由于破坏或失误会影响诸多页面,即便细小的改动也可能导致大量服务器负载,因此已被保护,不可编辑。 |
| 此模块使用Lua语言: |
此模块附于模板来检测未知参数的使用。
{{#invoke:check for unknown parameters|check|unknown=[[分类:某追踪分类]]|arg1|arg2|...|argN}}或使用带预览错误信息的参数来排序追踪分类中的条目
{{#invoke:check for unknown parameters|check|unknown=[[Category:某追踪分类|_VALUE_]]|preview=未知参数“_VALUE_”|arg1|arg2|...|argN}}或直接显示红色错误信息
{{#invoke:check for unknown parameters|check|unknown=<span>不好意思,_VALUE_是什么?</span>|arg1|arg2|...|argN}}以上代码中,arg1、arg2、...、argN为已知参数。任何被使用的未列出参数都会导致模块返回unknown参数中的内容。这样有利于排序追踪列表中的条目,亦有利于提供具体信息。
默认情况下,模块不区分已定义但留空的参数和非空参数。要仅追踪非空参数,请使用|ignoreblank=1。
默认情况下,模块忽略空白位置参数。要追踪空白位置参数,请使用|showblankpositional=1。
本模块支持正则表达式,可在使用大量有规律格式的参数时使用。如,template:infobox3cols中有
| 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]*
即可匹配所有headerNUM、labelNUM、dataNUM、dataNUMa、dataNUMb、dataNUMc、...、rowcellstyleNUM格式的参数,其中NUM为一段数字。
{{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}}-- 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 listrequire('strict');localp={}localmapframe_params={'coord','coordinates','id','qid','mapframe','mapframe-area_km2','mapframe-area_mi2','mapframe-caption','mapframe-coord','mapframe-coordinates','mapframe-custom','mapframe-frame-coord','mapframe-frame-coordinates','mapframe-frame-height','mapframe-frame-width','mapframe-geomask','mapframe-geomask-fill','mapframe-geomask-fill-opacity','mapframe-geomask-stroke-color','mapframe-geomask-stroke-colour','mapframe-geomask-stroke-width','mapframe-height','mapframe-id','mapframe-length_km','mapframe-length_mi','mapframe-line','mapframe-line-stroke-color','mapframe-line-stroke-colour','mapframe-marker','mapframe-marker-color','mapframe-marker-colour','mapframe-point','mapframe-population','mapframe-shape','mapframe-shape-fill','mapframe-shape-fill-opacity','mapframe-shape-stroke-color','mapframe-shape-stroke-colour','mapframe-stroke-color','mapframe-stroke-colour','mapframe-stroke-width','mapframe-switcher','mapframe-type','mapframe-width','mapframe-wikidata','mapframe-zoom'}localfunctiontrim(s)returns:match('^%s*(.-)%s*$')endlocalfunctionisnotempty(s)returnsands:match('%S')endlocalfunctionclean(text)-- Return text cleaned for display and truncated if too long.-- Strip markers are replaced with dummy text representing the original wikitext.localpos,truncatedlocalfunctiontruncate(text)iftruncatedthenreturn''endifmw.ustring.len(text)>25thentruncated=truetext=mw.ustring.sub(text,1,25)..'...'endreturnmw.text.nowiki(text)endlocalparts={}forbefore,tag,remainderintext:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()')dopos=remaindertable.insert(parts,truncate(before)..'<'..tag..'>...</'..tag..'>')endtable.insert(parts,truncate(text:sub(posor1)))returntable.concat(parts)endfunctionp._check(args,pargs)iftype(args)~="table"ortype(pargs)~="table"then-- TODO: error handlingreturnend-- create the list of known args, regular expressions, and the return stringlocalknownargs={}ifisnotempty(args['mapframe_args'])thenfor_,vinipairs(mapframe_params)doknownargs[v]=1endendlocalregexps={}fork,vinpairs(args)doiftype(k)=='number'thenv=trim(v)knownargs[v]=1elseifk:find('^regexp[1-9][0-9]*$')thentable.insert(regexps,'^'..v..'$')endend-- loop over the parent args, and make sure they are on the listlocalignoreblank=isnotempty(args['ignoreblank'])localshowblankpos=isnotempty(args['showblankpositional'])localvalues={}fork,vinpairs(pargs)doiftype(k)=='string'andknownargs[k]==nilthenlocalknownflag=falsefor_,regexpinipairs(regexps)doifmw.ustring.match(k,regexp)thenknownflag=truebreakendendifnotknownflagand(notignoreblankorisnotempty(v))thentable.insert(values,clean(k))endelseiftype(k)=='number'andknownargs[tostring(k)]==nilthenlocalknownflag=falsefor_,regexpinipairs(regexps)doifmw.ustring.match(tostring(k),regexp)thenknownflag=truebreakendendifnotknownflagand(showblankposorisnotempty(v))thentable.insert(values,k..' = '..clean(v))endendend-- add results to the output tableslocalres={}if#values>0thenlocalunknown_text=args['unknown']or'Found _VALUE_, 'ifmw.getCurrentFrame():preprocess("{{REVISIONID}}")==""thenlocalpreview_text=args['preview']ifisnotempty(preview_text)thenpreview_text=require('Module:If preview')._warning({preview_text})elseifpreview_text==nilthenpreview_text=unknown_textendunknown_text=preview_textendfor_,vinpairs(values)do-- Fix odd bug for | = which gets stripped to the empty string and-- breaks category linksifv==''thenv=' 'end-- avoid error with v = 'example%2' ("invalid capture index")localr=unknown_text:gsub('_VALUE_',{_VALUE_=v})table.insert(res,r)endendreturntable.concat(res)endfunctionp.check(frame)localargs=frame.argslocalpargs=frame:getParent().argsreturnp._check(args,pargs)endreturnp