Module:Flag/sandbox
Appearance
![]() | This is the module sandbox page for Module:Flag (diff). See also the companion subpage for test cases. |
![]() | This module is rated as beta, 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 Lua module is used on approximately 314,000 pages, or roughly 1% of all 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. |
![]() | This module depends on the following other modules: |
Lua-native alternative to popular flag templates. Can be used to reduce post-expand include size of pages with lots of templates, since it avoids calling multilevel templates.
Usage
[edit]Generic flag templates
[edit]- {{flag}} → {{#invoke:flag|}}
- {{flag country}} → {{#invoke:flag|country}}
- {{flag decoration}} (or {{flagdeco}}) → {{#invoke:flag|decoration}} (or {{#invoke:flag|deco}})
- {{flag icon}} → {{#invoke:flag|icon}}
- {{flag link}} → {{#invoke:flag|link}}
- {{flag+link}} → {{#invoke:flag|+link}}
Sports flag templates
[edit]- {{flag athlete}} → {{#invoke:flag|athlete}}
- {{flag medalist}} → {{#invoke:flag|medalist}}
- {{flag team}} → {{#invoke:flag|team}}
- {{flag IOC}} → {{#invoke:flag|IOC}}
- {{flag IOC 2}} → {{#invoke:flag|IOC 2}}
- {{flag IOC athlete}} → {{#invoke:flag|IOC athlete}}
- {{fb}} → {{#invoke:flag|fb}}
- {{fb-rt}} → {{#invoke:flag|fb-rt}}
- {{fbicon}} → {{#invoke:flag|fbicon}}
- {{ru}} → {{#invoke:flag|ru}}
Examples
[edit]Template | Module | ||||
---|---|---|---|---|---|
Code | Output | PEIS | Code | Output | PEIS |
{{flag|CHN}} |
![]() |
443b | {{#invoke:flag||CHN}} |
![]() |
128b |
{{flag country|CHN}} |
![]() |
577b | {{#invoke:flag|country|CHN}} |
![]() |
128b |
{{flag decoration|CHN}} /{{flag deco|CHN}} |
![]() |
452b | {{#invoke:flag|decoration|CHN}} /{{#invoke:flag|deco|CHN}} |
![]() |
107b |
{{flag icon|CHN}} |
![]() |
548b | {{#invoke:flag|icon|CHN}} |
![]() |
117b |
{{flag link|CHN|at the 2004 Summer Olympics}} |
![]() |
497b | {{#invoke:flag|link|CHN|at the 2004 Summer Olympics}} |
![]() |
198b |
{{flag+link|History of|CHN}} |
![]() |
663b | {{#invoke:flag|+link|History of|CHN}} |
![]() |
139b |
{{flag team|GBR}} |
![]() |
804b | {{#invoke:flag|team|GBR}} |
![]() |
193b |
{{flag athlete|Andy Murray|GBR}} |
![]() |
617b | {{#invoke:flag|athlete|Andy Murray|GBR}} |
![]() |
210b |
{{flag medalist|Andy Murray|GBR}} |
Andy Murray![]() |
469b | {{#invoke:flag|medalist|Andy Murray|GBR}} |
Andy Murray![]() |
129b |
{{flag IOC|CAN|1924 Winter|1}} |
![]() |
326b | {{#invoke:flag|IOC|CAN|1924 Winter|1}} |
![]() |
163b |
{{flag IOC 2|HKG|1954 Asian Games|1}} |
![]() |
368b | {{#invoke:flag|IOC 2|HKG|1954 Asian Games|1}} |
![]() |
184b |
{{flag IOC athlete|Mark Spitz|USA|1972 Summer}} |
![]() |
346b | {{#invoke:flag|IOC athlete|Mark Spitz|USA|1972 Summer}} |
![]() |
178b |
{{fb|CHN}} |
![]() |
560b | {{#invoke:flag|fb|CHN}} |
![]() |
151b |
{{fb-rt|CHN}} |
China ![]() |
482b | {{#invoke:flag|fb-rt|CHN}} |
China ![]() |
151b |
{{fbicon|CHN}} |
![]() |
444b | {{#invoke:flag|fbicon|CHN}} |
![]() |
163b |
{{ru|CHN}} |
![]() |
646b | {{#invoke:flag|ru|CHN}} |
![]() |
210b |
Caveats
[edit]When used inside a template, parameters from that template are passed to the module. This can be useful in some situations, but can lead to conflicts (for example, if the parent template has a parameter |country=
that is unrelated to the flag it is supposed to display). To prevent this behavior, add the |frameonly=
parameter to the module call, e.g. {{#invoke:flag|deco|CHN|frameonly=true}}
.
local margs = require('Module:Arguments')
local function _main(frame, name, mode)
local categories = {
['Flag icon'] = '[[Category:Flag icons missing country data templates]]',
['Flag decoration'] = '[[Category:Flag decoration missing country data templates]]',
}
local yesno = require('Module:Yesno')
--Get input arguments
local args = margs.getArgs(frame, {
frameOnly = ((frame.args.frameonly or '') ~= ''), valueFunc =
function(key,value)
if value then
value = mw.text.trim(value)
--Change empty string to nil for all args except 'image' and 'border'
if key=="image" or key=="border" or value~="" then
return value
end
end
return nil
end
} )
local preftext = ""
if name == 'Flag+link' then
args.pref = args[1]
elseif name == 'Flag athlete' then
args.preftext = args[1]
args[2] = args.code or args[2] or ""
args.variant = args.variant or args[3]
elseif name == 'Flag medalist' then
preftext = (args[1] or "") .. "<br/>"
args[2] = args.code or args[2] or ""
args.variant = args.variant or args[3]
elseif name == 'Flag link' then
args.suff = args[2]
args[2] = args[1] or ""
args.variant = args.variant or args[3]
else
sports = {fb = 'fb', ['fb-rt'] = 'fb', fbicon = 'fb', ru = 'ru'}
if sports[name] then
args.avar = sports[name]
if name == 'fb' and yesno(args.align) == true then
args.align='c'
end
end
args.variant = args.variant or args[2]
args[2] = args[1] or ""
end
args[1] = mode .. (args.opts or '')
args.missingcategory = categories[name]
args.noredlink = args.noredlink or 'notext'
if args.placeholder and yesno(args.placeholder) ~= true then
args[1] = args[1] .. 'o'
end
if mw.title.getCurrentTitle().namespace == 0 then
local unknown = '[[Category:Pages using ' .. mw.ustring.lower(name) ..
' template with unknown parameters|_VALUE_' .. frame:getParent():getTitle() .. ']]'
else
local unknown = ''
end
check = ''
if name == 'Flag icon' then
local opts = {
unknown=unknown,
preview='Page using [[Template:' .. name .. ']] with unknown parameter "_VALUE_"',
ignoreblank='y',
'1','2','variant','image','size','sz','border','align','al','width',
'w','alt','ilink','noredlink','missingcategory','name','clink','link',
'pref','suff','plink','the','section','altvar','avar','age','nalign',
'nal','text','nodata','opts','placeholder','getParent','frameonly'
}
check = require('Module:Check for unknown parameters')._check(opts,args)
end
return preftext .. require('Module:Flagg').luaMain(frame,args) .. check
end
local p = {
[''] = function (frame) return _main(frame, 'Flag', 'unc' ) end,
decoration = function (frame) return _main(frame, 'Flag decoration', 'uxx' ) end,
icon = function (frame) return _main(frame, 'Flag icon', 'cxxl' ) end,
link = function (frame) return _main(frame, 'Flag link', 'unpe' ) end,
['+link'] = function (frame) return _main(frame, 'Flag+link', 'unpefo') end,
country = function (frame) return _main(frame, 'Flag country', 'unce' ) end,
athlete = function (frame) return _main(frame, 'Flag athlete', 'unape' ) end,
medalist = function (frame) return _main(frame, 'Flag medalist', 'unce' ) end,
fb = function (frame) return _main(frame, 'fb', 'unpe' ) end,
['fb-rt'] = function (frame) return _main(frame, 'fb-rt', 'unpre' ) end,
fbicon = function (frame) return _main(frame, 'fbicon', 'pxxl' ) end,
ru = function (frame) return _main(frame, 'ru', 'unpe' ) end,
IOC = function (frame) return require('Module:Country_alias').flagIOC(frame:newChild{ title = 'Template:Flag IOC' }) end,
IOC2 = function (frame) return require('Module:Country_alias').flagXYZ(frame:newChild{ title = 'Template:Flag IOC 2', args = {name = margs.getArgs(frame).name or '', type = 'name'} }) end,
IOCathlete = function (frame) return require('Module:Country_alias').flagXYZ(frame:newChild{ title = 'Template:Flag IOC athlete', args = {type = 'athlete-O'} }) end,
}
p['deco'] = p.decoration
p['IOC 2'] = p.IOC2
p['IOC athlete'] = p.IOCathlete
return p