Module:Flag: Difference between revisions
Appearance
Content deleted Content added
m 1 revision imported from en:Module:Flag: updating here |
MrMeAndMrMe (talk | changes) updating to fix issues |
||
| Line 1: | Line 1: | ||
local |
local = |
||
function |
function _main(frame, name, mode, ) |
||
local categories = { |
local categories = { |
||
= '[[Category: missing country data templates]]', |
|||
= '[[Category: missing country data templates]]', |
|||
} |
} |
||
| Line 10: | Line 10: | ||
--Get input arguments |
--Get input arguments |
||
local args = |
local args = .getArgs(frame,{ |
||
frameOnly = ((frame.args.frameonly or '') ~= ''), valueFunc = |
|||
function(key,value) |
|||
if value then |
if value then |
||
value = mw.text.trim(value) |
value = mw.text.trim(value) |
||
--Change empty string to nil for all args except 'image' and 'border' |
--Change empty string to nil for all args except 'image' and 'border' |
||
if key=="image" or key=="border" or value~="" then |
if key=="image" or key=="border" or value~="" then |
||
return value |
return value |
||
end |
|||
end |
|||
return nil |
|||
end |
end |
||
} ) |
|||
end |
|||
return nil |
|||
end |
|||
}) |
|||
local preftext = "" |
local preftext = "" |
||
if name == 'Flag+link' then |
if name == 'Flag+link' then |
||
args.pref = args[1] |
args.pref = args[1] |
||
elseif name == ' |
elseif name == '' then |
||
args.preftext = args[1] |
args.preftext = args[1] |
||
args[2] = args.code or args[2] or "" |
args[2] = args.code or args[2] or "" |
||
args.variant = args.variant or args[3] |
args.variant = args.variant or args[3] |
||
elseif name == ' |
elseif name == '' then |
||
preftext = (args[1] or "") .. "<br/>" |
preftext = (args[1] or "") .. "<br/>" |
||
args[2] = args.code or args[2] or "" |
args[2] = args.code or args[2] or "" |
||
args.variant = args.variant or args[3] |
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] |
|||
elseif key ~= nil then |
|||
args.variant = args.variant or args[1] |
|||
args[2] = key |
|||
else |
else |
||
sports = { |
|||
fb = 'fb', |
|||
['fb-rt'] = 'fb', |
|||
fbicon = 'fb', |
|||
ru = 'ru', |
|||
fba = 'fba', |
|||
fbaicon = 'fba' |
|||
} |
|||
if sports[name] and args[1] then |
|||
args.avar = sports[name] |
|||
if name == 'fb' and yesno(args.align) == true then |
|||
args.align='c' |
|||
elseif args.avar == 'fba' then |
|||
local list = require("Module:Fba/list") |
|||
local old = ((args.old or "") ~= "") and "_old" or "" |
|||
local fba = list.fbas[args[1] .. old] |
|||
if not fba and string.len(args[1]) == 3 then |
|||
for k, v in pairs(list.codes) do |
|||
if v == args[1] then fba = list.fbas[k]; break end |
|||
end |
|||
end |
|||
if args.name == "code" then |
|||
args.name = list.codes[args[1]] |
|||
elseif args.name == "full" then |
|||
args.name = fba |
|||
end |
|||
if fba then |
|||
mode = string.gsub(mode, "p", "c") |
|||
args.link = fba |
|||
end |
|||
args.altlink = args.old |
|||
end |
|||
elseif name == "Flag team" and (args.code or args[1]) then |
|||
sufftext = ' <span style="font-size:90%;">('..(args.code or args[1])..')</span>' |
|||
end |
|||
args.variant = args.variant or args[2] |
args.variant = args.variant or args[2] |
||
args[2] = args[1] or "" |
args[2] = args[1] or "" |
||
| Line 48: | Line 91: | ||
end |
end |
||
check = '' |
|||
if mw.title.getCurrentTitle().namespace == 0 then |
|||
local unknown = '[[Category:Pages using ' .. mw.ustring.lower(name) .. ' template with unknown parameters|_VALUE_' .. |
|||
if name == 'Flag icon' and mw.title.getCurrentTitle().namespace == 0 then |
|||
frame:getParent():getTitle() .. ']]' |
|||
local unknown = '[[Category:Pages using ' .. mw.ustring.lower(name) .. |
|||
else |
|||
' template with unknown parameters|_VALUE_' .. frame:getParent():getTitle() .. ']]' |
|||
local unknown = '' |
|||
end |
|||
if check then |
|||
local opts = { |
local opts = { |
||
unknown=unknown, |
unknown=unknown, |
||
preview='Page using [[Template:' .. name .. ']] with unknown parameter "_VALUE_"', |
preview='Page using [[Template:' .. name .. ']] with unknown parameter "_VALUE_"', |
||
ignoreblank='y', |
ignoreblank='y', |
||
'1','2','variant','image','size','sz','border','align','al','width', |
|||
'1', |
|||
'w','alt','ilink','noredlink','missingcategory','name','clink','link', |
|||
'2', |
|||
'pref','suff','plink','the','section','altvar','avar','age','nalign', |
|||
'variant', |
|||
'nal','text','nodata','opts','placeholder','getParent','frameonly' |
|||
'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' |
|||
} |
} |
||
check = require('Module:Check for unknown parameters')._check(opts,args) |
check = require('Module:Check for unknown parameters')._check(opts,args) |
||
else |
|||
check = '' |
|||
end |
end |
||
return preftext .. require('Module:Flagg').luaMain(frame,args) .. check |
return preftext .. require('Module:Flagg').luaMain(frame,args) .. check |
||
end |
end |
||
local p = { |
|||
function p.main(frame) return p._main(frame, 'Flag', 'unc', false) end |
|||
[''] = function (frame) return _main(frame, 'Flag', 'unc' ) end, |
|||
p.flag = p.main |
|||
decoration = function (frame) return _main(frame, 'Flag decoration', 'uxx' ) end, |
|||
p[''] = p.main |
|||
function |
function (frame) return _main(frame, '' ) end |
||
link = function (frame) return _main(frame, 'Flag link', 'unpe' ) end, |
|||
p.flagdeco = p.deco |
|||
function |
function (frame) return _main(frame, '', ) end |
||
country = function (frame) return _main(frame, 'Flag country', 'unce' ) end, |
|||
p.flagicon = p.icon |
|||
function |
function (frame) return _main(frame, 'Flag', '' ) end |
||
athlete = function (frame) return _main(frame, 'Flag athlete', 'unape' ) end, |
|||
p['+link'] = p.pluslink |
|||
medalist = function (frame) return _main(frame, 'Flag medalist', 'unce' ) end, |
|||
p['flag+link'] = p.pluslink |
|||
function |
function (frame) return _main(frame, '', '' ) end |
||
fba = function (frame) return _main(frame, 'fba', 'unpe' ) end, |
|||
p.flagcountry = p.country |
|||
function |
function (frame) return _main(frame, '', ) end |
||
fbicon = function (frame) return _main(frame, 'fbicon', 'pxxl' ) end, |
|||
p.flagathlete = p.athlete |
|||
function |
function (frame) return _main(frame, '', '' ) end |
||
ru = function (frame) return _main(frame, 'ru', 'unpe' ) end, |
|||
p.flagmedalist = p.medalist |
|||
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 |
|||
local function index (_, key) -- This function gets called by the metatable as index(table, key) |
|||
return function (frame) return _main(frame, 'Flag', 'unc', key) end -- Interpret it as {{flag|key}} as pass to _main() |
|||
end |
|||
local metatable = {['__index'] = index} -- Set __index, which is returned if table[key] is nil, to the index function |
|||
setmetatable (p, metatable) -- Assign the metatable to the returned table |
|||
return p |
return p |
||
Latest revision as of 00:46, 9 May 2025
| 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 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
[change source]- {{flag}} → {{#invoke:flag|main}}
- {{flagcountry}} → {{#invoke:flag|country}}
- {{flagdeco}} → {{#invoke:flag|deco}}
- {{flagicon}} → {{#invoke:flag|icon}}
- {{flag+link}} → {{#invoke:flag|+link}}
Examples
[change source]| Template | Module | ||||
|---|---|---|---|---|---|
| Code | Output | PEIS | Code | Output | PEIS |
{{flag|China}} |
443b | {{#invoke:flag|main|China}} |
Template:Country data main | 128b | |
{{flagcountry|China}} |
577b | {{#invoke:flag|country|China}} |
128b | ||
{{flagdeco|China}} |
452b | {{#invoke:flag|deco|China}} |
107b | ||
{{flagicon|China}} |
548b | {{#invoke:flag|icon|China}} |
117b | ||
{{flag+link|History of|China}} |
663b | {{#invoke:flag|+link|History of|China}} |
139b | ||
local margs = require('Module:Arguments')
local function _main(frame, name, mode, key)
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, sufftext = "", ""
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]
elseif key ~= nil then
args.variant = args.variant or args[1]
args[2] = key
else
sports = {
fb = 'fb',
['fb-rt'] = 'fb',
fbicon = 'fb',
ru = 'ru',
fba = 'fba',
fbaicon = 'fba'
}
if sports[name] and args[1] then
args.avar = sports[name]
if name == 'fb' and yesno(args.align) == true then
args.align='c'
elseif args.avar == 'fba' then
local list = require("Module:Fba/list")
local old = ((args.old or "") ~= "") and "_old" or ""
local fba = list.fbas[args[1] .. old]
if not fba and string.len(args[1]) == 3 then
for k, v in pairs(list.codes) do
if v == args[1] then fba = list.fbas[k]; break end
end
end
if args.name == "code" then
args.name = list.codes[args[1]]
elseif args.name == "full" then
args.name = fba
end
if fba then
mode = string.gsub(mode, "p", "c")
args.link = fba
end
args.altlink = args.old
end
elseif name == "Flag team" and (args.code or args[1]) then
sufftext = ' <span style="font-size:90%;">('..(args.code or args[1])..')</span>'
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
check = ''
if name == 'Flag icon' and mw.title.getCurrentTitle().namespace == 0 then
local unknown = '[[Category:Pages using ' .. mw.ustring.lower(name) ..
' template with unknown parameters|_VALUE_' .. frame:getParent():getTitle() .. ']]'
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) .. sufftext .. 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,
team = function (frame) return _main(frame, 'Flag team', '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,
fba = function (frame) return _main(frame, 'fba', 'unpe' ) end,
['fb-rt'] = function (frame) return _main(frame, 'fb-rt', 'unpre' ) end,
fbicon = function (frame) return _main(frame, 'fbicon', 'pxxl' ) end,
fbaicon = function (frame) return _main(frame, 'fbaicon', '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
local function index (_, key) -- This function gets called by the metatable as index(table, key)
return function (frame) return _main(frame, 'Flag', 'unc', key) end -- Interpret it as {{flag|key}} as pass to _main()
end
local metatable = {['__index'] = index} -- Set __index, which is returned if table[key] is nil, to the index function
setmetatable (p, metatable) -- Assign the metatable to the returned table
return p