Module:Unsubst-infobox
- Afrikaans
- العربية
- অসমীয়া
- Azərbaycanca
- تۆرکجه
- Basa Bali
- বাংলা
- 閩南語 / Bân-lâm-gí
- भोजपुरी
- Bikol Central
- Bosanski
- Cebuano
- Ελληνικά
- فارسی
- ગુજરાતી
- 한국어
- Ilokano
- Bahasa Indonesia
- Kurdî
- ລາວ
- मैथिली
- മലയാളം
- मराठी
- Bahasa Melayu
- Монгол
- မြန်မာဘာသာ
- 日本語
- Oʻzbekcha / ўзбекча
- ਪੰਜਾਬੀ
- پښتو
- ᱥᱟᱱᱛᱟᱲᱤ
- سرائیکی
- Scots
- සිංහල
- Simple English
- سنڌي
- Slovenščina
- کوردی
- Српски / srpski
- Srpskohrvatski / српскохрватски
- Sunda
- Tagalog
- တႆး
- ไทย
- Тоҷикӣ
- Türkçe
- اردو
- Tiếng Việt
- Winaray
- 粵語
- 中文
- Bajau Sama
- ᥖᥭᥰ ᥖᥬᥲ ᥑᥨᥒᥰ
See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected.
To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them.
Usage
{{SAFESUBST:<noinclude />#invoke:Unsubst-infobox||$B=template body|$params=parameters}}
Infoboxes should never be substituted. A trick to avoid that is to make a template substitute to its transcluded form. This module is similar to Module:Unsubst. parameters is a comma-separated list of the names of parameters the invoking infobox template can take.
Parameter list
- $B
- The content of the template, as it would be without the module being used.
- $params
- A comma-separated list of template parameters, without any aliases. There is a bug when including positional parameters like
$params=1in the template and{{subst:example|a}}in the article where it will be overwritten like{{subst:example|a|1=}}. - $aliases
- A comma-separated list of parameter replacements, in the format
old1>new1,old2>new2. There is a bug when including positional parameters like|$aliases=2>details|$params=detailsin the template and{{subst:example|abc|def|ghi}}in the article where there is an inconsistency that causes data to be lost like{{subst:example|abc|details=def}} - $set3
- Usually a shorter list of parameters, comma-separated. Replaces $params when all the parameters used in a substitution (ignoring those erroneously absent from $params) are in this list. This might be used if an infobox has multiple parameters that are only applicable to some group of articles.
- $set2
- Conditionally replaces $set3 or $params, whichever was last chosen. Usually bigger than them.
- $set1
- Conditionally replaces $set3, $set2 or $params, whichever was last chosen. Usually bigger than them.
- $extra
- A comma-separated list of any parameters listed in $params (or $set1, $set2, or $set3, whichever was chosen) which don't need to be shown after substitution unless they are already being used in the template; i.e. if a parameter is in both lists and is not used or blank in a particular transclusion, then on substitution the parameter will not be displayed.
- $indent
- The number of additional spaces before each line. Useful for child infoboxes.
- $flags
- A list of comma-separated flags. The only valid input for this parameter at present is "override", which tells the template to supersede the original input to the template with any parameters which are set in the module; i.e. if the template transclusion uses
|number=6but the module invocation uses|date=7, if the module invocation containsoverridein|$flags=then the output will be|date=7and if it doesn't then the output will be|date=6. - $template-name
- May be used to override the default template name.
All other parameters are treated as input to the template. If the input value is not blank and the input parameter is a valid parameter of the template, then the value will appear in the post-substitution content if the transclusion's value is blank; if the module invocation contains override in |$flags= then the value will appear in the post-substitution content regardless of what the transclusion's value is.
Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Subpages of this module.
localp={} localspecialParams={ ['$params']='all parameters', ['$extra']='extra parameters', ['$set1']='parameter set 1', ['$set2']='parameter set 2', ['$set3']='parameter set 3', ['$aliases']='parameter aliases', ['$indent']='indent', ['$flags']='flags', ['$B']='template content', ['$template-name']='template invocation name override' } p['']=function(frame) ifnotframe:getParent()then error('{{#invoke:Unsubst-infobox|}} makes no sense without a parent frame') end ifnotframe.args['$B']then error('{{#invoke:Unsubst-infobox|}} requires parameter $B (template content)') end ifnotframe.args['$params']then error('{{#invoke:Unsubst-infobox|}} requires parameter $params (parameter list)') end ifmw.isSubsting()then ---- substing -- Combine passed args with passed defaults localargs={} ifstring.find(','..(frame.args['$flags']or'')..',',',%s*override%s*,')then fork,vinpairs(frame:getParent().args)do args[k]=v end fork,vinpairs(frame.args)do ifnotspecialParams[k]then ifv=='__DATE__'then v=mw.getContentLanguage():formatDate('F Y') end args[k]=v end end else fork,vinpairs(frame.args)do ifnotspecialParams[k]then ifv=='__DATE__'then v=mw.getContentLanguage():formatDate('F Y') end args[k]=v end end fork,vinpairs(frame:getParent().args)do args[k]=v end end -- Build an equivalent template invocation -- First, find the title to use localtitleobj=mw.title.new(frame:getParent():getTitle()) localtitle iftitleobj.namespace==10then-- NS_TEMPLATE title=titleobj.text elseiftitleobj.namespace==0then-- NS_MAIN title=':'..titleobj.text else title=titleobj.prefixedText end ifframe.args['$template-name']and''~=frame.args['$template-name']then title=frame.args['$template-name']-- override whatever the template name is with this name end -- Remove empty fields fork,vinpairs(args)do ifv==''thenargs[k]=nilend end -- Pull information from parameter aliases localaliases,extra={},{} ifframe.args['$aliases']then locallist=mw.text.split(frame.args['$aliases'],'%s*,%s*') fork,vinipairs(list)do localtmp=mw.text.split(v,'%s*>%s*') localalias=(tonumber(mw.ustring.match(tmp[1],'^[1-9][0-9]*$')))ortmp[1] aliases[alias]=((tonumber(mw.ustring.match(tmp[2],'^[1-9][0-9]*$')))ortmp[2]) extra[alias]=true end end fork,vinpairs(aliases)do ifargs[k]andnotargs[v]thenargs[v],args[k]=args[k],nilend end -- Build the invocation body with numbered args first, then named localret='{{'..title fork,vinipairs(args)do ifmw.ustring.find(v,'=',1,true)then -- likely something like 1=foo=bar, we need to do it as a named arg break end ret=ret..'|'..v args[k]=nil end -- Pull lists from special parameters localdiscard={} localparams=mw.text.split(frame.args['$params'],'%s*,%s*') fork,vinipairs(params)do -- Numbered args don't go here ifmw.ustring.match(v,'^[1-9][0-9]*$')then table.insert(discard,1,k) end end fork,vinipairs(discard)dotable.remove(params,v)end localsets,setparams={{},{},{}},{} fork=1,3do localv=frame.args['$set'..k] ifvthen setparams[k]=mw.text.split(v,'%s*,%s*') discard={} forx,yinipairs(setparams[k])do sets[k][setparams[k][x]]=true -- Numbered args don't go here ifmw.ustring.match(y,'^[1-9][0-9]*$')then table.insert(discard,1,x) end end forx,yinipairs(discard)dotable.remove(setparams[k],y)end end end ifframe.args['$extra']then localtmp=mw.text.split(frame.args['$extra'],'%s*,%s*') fork,vinipairs(tmp)doextra[(tonumber(mw.ustring.match(v,'^[1-9][0-9]*$')))orv]=trueend end -- Replace parameter list with short version if full version not necessary localtmp={} fork,vinipairs(sets)do ifnext(v)then-- if table v is not empty for_,xinipairs(params)do ifargs[x]andnotv[x]then tmp[k]=true break end end ifnottmp[k]thenparams=setparams[k]end end end -- Align parameters correctly and remove extra ones localmaxlength=0 discard={} fork,vinipairs(params)do if(notextra[v])orargs[v]then localtmp=mw.ustring.len(tostring(v)) iftmp>maxlengththenmaxlength=tmpend else table.insert(discard,1,k) end end fork,vinipairs(discard)dotable.remove(params,v)end localindent=mw.ustring.rep(' ',(tonumber(frame.args['$indent'])or0)) -- Numbered args after discontinuity continue first discard={} fork,vinpairs(args)do ifmw.ustring.match(k,'^[1-9][0-9]*$')thentable.insert(discard,1,k)end end fork,vinipairs(discard)dotable.insert(params,1,v)end localspace,newline=' ','\n' ifnotnext(params)thenspace,newline='',''end fork,vinipairs(params)do localtmp=space ifmw.ustring.match(mw.ustring.sub((args[v]or'')..' ',1,1),'[%*:;#]')thentmp='\n'end ret=ret..newline..indent..'|'..space..v..string.rep(' ',(maxlength-mw.ustring.len(v)))..space..'='..tmp..(args[v]or'') end ret=ret..newline..'}}' ret=mw.ustring.gsub(ret,'%s+\n','\n') returnret else -- Not substing -- Just return the "body" returnframe.args['$B'] end end returnp