Jump to content
Wikipedia The Free Encyclopedia

Module:Unsubst-infobox

From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing.
Page template-protected This module is currently protected from editing.
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.
Warning This Lua module is used on approximately 203,000 pages .
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=1 in 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=details in 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=6 but the module invocation uses |date=7, if the module invocation contains override in |$flags= then the output will be |date=7 and 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.

The above documentation is transcluded from Module:Unsubst-infobox/doc. (edit | history)
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

AltStyle によって変換されたページ (->オリジナル) /