Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Usage  



1.1  Advanced  







2 Example  














Module:Unsubst






Acèh
Afrikaans
Anarâškielâ
Аԥсшәа
العربية
Արեւմտահայերէն

Asturianu
Avañe'
Azərbaycanca
تۆرکجه
Basa Bali

 / Bân-lâm-gú
Башҡортса
Беларуская
Беларуская (тарашкевіца)

Bikol Central
Български
Bosanski
Brezhoneg
Буряад
Català
Чӑвашла
Cebuano
Chamoru
ChiShona
Dansk
الدارجة
ދިވެހިބަސް
Eesti
Ελληνικά
Эрзянь
Español
فارسی
Føroyskt
Français
Gàidhlig
Galego
ГӀалгӀай
گیلکی

  / Gõychi Konknni

Hausa
Hawaiʻi
Հայերեն
ि
Hrvatski
Ilokano
Bahasa Indonesia
Ирон
Íslenska
עברית
Jawa


Қазақша
Kernowek
Ikirundi
Kurdî
Ladin
Latviešu
Lëtzebuergesch
Lietuvių
Magyar
ि
Македонски

Malti
Māori

مصرى
مازِرونی
Bahasa Melayu
Minangkabau
 / Mìng-dĕ̤ng-nḡ
Мокшень

Nāhuatl
Na Vosa Vakaviti


Нохчийн
ି
Oʻzbekcha / ўзбекча

Pangasinan

پښتو
Polski
Português
Română
Русский

سرائیکی
Scots
Setswana
Shqip
Sicilianu

Simple English
سنڌي
Slovenščina
کوردی
Српски / srpski
Srpskohrvatski / српскохрватски
Svenska
Tagalog
ி
Татарча / tatarça
 


Тоҷикӣ
Türkçe
Türkmençe
Удмурт
Українська
اردو
Vèneto
Tiếng Vit

Winaray



Batak Toba
 

Edit links
 









Module
Talk
 

















Read
View source
View history
 








Tools
   


Actions  



Read
View source
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




In other projects  



Wikimedia Commons
MediaWiki
Meta-Wiki
Wikimedia Outreach
Wikispecies
Wikibooks
Wikidata
Wikimania
Wikiquote
Wikisource
Wikiversity
Wiktionary
 
















Appearance
   

 





Permanently protected module

From Wikipedia, the free encyclopedia
 


Maintenance templates, such as {{Citation needed}}or{{Refimprove}}, should never be substituted. A trick to avoid that is to make a template substitute to its transcluded form. This module implements that trick.

Infoboxes should use Module:Unsubst-infobox, as should any other templates with parameters listed in block format by default.

Usage

To turn a template into a self-substituting template, wrap the existing template code with:

{{SAFESUBST:<noinclude />#invoke:Unsubst||$B=

 [ ... existing template code ... ]

}}

The wikitext to display when not substed must be given as "$B". All other parameters passed to the #invoke will be copied to the generated template invocation as default values. If the value of any of these default parameters is __DATE__, that value in the generated template invocation will be the current month and year.

Some templates have a <noinclude> but no matching </noinclude> at the end of the template. In such cases the missing </noinclude> must be added before the ending }}.

Advanced

{{SAFESUBST:<noinclude />#invoke:Unsubst||$params=[ parameters ]|$aliases=[ aliases ]|$flags=[ flags ]|$B=

 [ ... existing template code ... ]

}}

Due to Lua limitations, parameters are normally ordered randomly when the template is substituted. |$params= can be used in #invoke:Unsubst to list template parameters in order, comma-separated (e.g. egg,bacon,sausage,cheese,spam). Numbered parameters should be before others in the list. Any remaining parameters are tacked onto the end of the generated invocation.

Parameter aliases can be listed in |$aliases= (and shouldn't be listed in |$params=), and will be replaced automatically. Each alias and its replacement should be formatted as alias>replacement, and each of those pairs should be comma-separated (e.g. œuf>egg,melt>cheese). Note that this parameter can function with or without |$params=.

Parameter |$flags= can be used to modify other facets of the module's behaviour; entries are comma-separated. Valid flags are override (allows parameters in the #invoke: to take precedence over parameters in the original template invocation); keep-whitespace (prevents whitespace from being trimmed from unnamed parameters); and remove-empty (removes empty parameters).

These parameters can be manipulated using parser functions to provide more complicated options (note that in the parameters any parser function, or template or module invocation, should also have SAFESUBST:<noinclude />).

Parameter |$template-name= will override the subst'd templates name with the template name assigned to this parameter.

Example

Consider a template Template:Example containing the following code:

{{SAFESUBST:<noinclude />#invoke:Unsubst||foo=bar |date=__DATE__ |$B=

 [ ... Template code goes here ... ]

}}
Original Result
{{subst:example}} {{Example|date=June 2024}}
{{subst:example|foo=X}} {{Example|foo=X|date=June 2024}}
{{subst:example|baz=X}} {{Example|baz=X|date=June 2024}}
{{subst:example|date=January 2001}} {{Example|foo=bar|date=January 2001}}

local checkType = require('libraryUtil').checkType

local p = {}

local BODY_PARAM = '$B'

local specialParams = {
 ['$params'] = 'parameter list',
 ['$aliases'] = 'parameter aliases',
 ['$flags'] = 'flags',
 ['$B'] = 'template content',
 ['$template-name'] = 'template invocation name override',
}

function p.main(frame, body)
 -- If we are substing, this function returns a template invocation, and if
 -- not, it returns the template body. The template body can be specified in
 -- the body parameter, or in the template parameter defined in the
 -- BODY_PARAM variable. This function can be called from Lua or from
 -- #invoke.

 -- Return the template body if we aren't substing.
 if not mw.isSubsting() then
  if body ~= nil then
   return body
  elseif frame.args[BODY_PARAM] ~= nil then
   return frame.args[BODY_PARAM]
  else
   error(string.format(
    "no template content specified (use parameter '%s' from #invoke)",
    BODY_PARAM
   ), 2)
  end
 end

 -- Sanity check for the frame object.
 if type(frame) ~= 'table'
  or type(frame.getParent) ~= 'function'
  or not frame:getParent()
 then
  error(
   "argument #1 to 'main' must be a frame object with a parent " ..
   "frame available",
   2
  )
 end

 -- Find the invocation name.
 local mTemplateInvocation = require('Module:Template invocation')
 local name

 if frame.args['$template-name'] and '' ~= frame.args['$template-name'] then
  name = frame.args['$template-name']          -- override whatever the template name is with this name
 else
  name = mTemplateInvocation.name(frame:getParent():getTitle())
 end

 -- Combine passed args with passed defaults
 local args = {}
 if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*override%s*,' ) then
  for k, v in pairs( frame:getParent().args ) do
   args[k] = v
  end
  for k, v in pairs( frame.args ) do
   if not specialParams[k] then
    if v == '__DATE__' then
     v = mw.getContentLanguage():formatDate( 'F Y' )
    end
    args[k] = v
   end
  end
 else
  for k, v in pairs( frame.args ) do
   if not specialParams[k] then
    if v == '__DATE__' then
     v = mw.getContentLanguage():formatDate( 'F Y' )
    end
    args[k] = v
   end
  end
  for k, v in pairs( frame:getParent().args ) do
   args[k] = v
  end
 end

 -- Trim parameters, if not specified otherwise
 if not string.find( ','..(frame.args['$flags'] or '')..',', ',%s*keep%-whitespace%s*,' ) then
  for k, v in pairs( args ) do args[k] = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end
 end

 -- Pull information from parameter aliases
 local aliases = {}
 if frame.args['$aliases'] then
  local list = mw.text.split( frame.args['$aliases'], '%s*,%s*' )
  for k, v in ipairs( list ) do
   local tmp = mw.text.split( v, '%s*>%s*' )
   aliases[tonumber(mw.ustring.match(tmp[1], '^[1-9][0-9]*$')) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], '^[1-9][0-9]*$'))) or tmp[2])
  end
 end
 for k, v in pairs( aliases ) do
  if args[k] and ( not args[v] or args[v] == '' ) then
   args[v] = args[k]
  end
  args[k] = nil
 end

 -- Remove empty parameters, if specified
 if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*remove%-empty%s*,' ) then
  local tmp = 0
  for k, v in ipairs( args ) do
   if v ~= '' or ( args[k+1] and args[k+1] ~= '' ) or ( args[k+2] and args[k+2] ~= '' ) then
    tmp = k
   else
    break
   end
  end
  for k, v in pairs( args ) do
   if v == '' then
    if not (type(k) == 'number' and k < tmp) then args[k] = nil end
   end
  end
 end

 -- Order parameters
 if frame.args['$params'] then
  local params, tmp = mw.text.split( frame.args['$params'], '%s*,%s*' ), {}
  for k, v in ipairs(params) do
   v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v
   if args[v] then tmp[v], args[v] = args[v], nil end
  end
  for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end
  args = tmp
 end

 return mTemplateInvocation.invocation(name, args)
end

p[''] = p.main -- For backwards compatibility

return p

Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:Unsubst&oldid=1048913973"

Category: 
Modules subject to page protection
Hidden category: 
Wikipedia fully protected modules
 



This page was last edited on 8 October 2021, at 18:22 (UTC).

Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



Privacy policy

About Wikipedia

Disclaimers

Contact Wikipedia

Code of Conduct

Developers

Statistics

Cookie statement

Mobile view



Wikimedia Foundation
Powered by MediaWiki