Jump to content

Module:Flag: Difference between revisions

From Simple English Wikipedia, the free encyclopedia
Content deleted Content added
m 1 revision imported from en:Module:Flag: updating here
updating to fix issues
 
Line 1: Line 1:
local p = {}
local =


function p._main(frame, name, mode, check)
function _main(frame, name, mode, )
local categories = {
local categories = {
Flagicon = '[[Category:Flagicons with missing country data templates]]',
= '[[Category: missing country data templates]]',
Flagdeco = '[[Category:Flagdeco with missing country data templates]]',
= '[[Category: missing country data templates]]',
}
}


Line 10: Line 10:


--Get input arguments
--Get input arguments
local args = require('Module:Arguments').getArgs(frame,{frameOnly = ((frame.args.frameonly or '') ~= ''), valueFunc =
local args = .getArgs(frame,{
frameOnly = ((frame.args.frameonly or '') ~= ''), valueFunc =
function(key,value)
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 == 'Flagathlete' then
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 == 'Flagmedalist' then
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 = '&nbsp;<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 p.deco(frame) return p._main(frame, 'Flagdeco', 'uxx', false) end
function (frame) return _main(frame, '' ) end
link = function (frame) return _main(frame, 'Flag link', 'unpe' ) end,
p.flagdeco = p.deco
function p.icon(frame) return p._main(frame, 'Flagicon', 'cxxl', true) end
function (frame) return _main(frame, '', ) end
country = function (frame) return _main(frame, 'Flag country', 'unce' ) end,
p.flagicon = p.icon
function p.pluslink(frame) return p._main(frame, 'Flag+link', 'unpefo', false) end
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 p.country(frame) return p._main(frame, 'Flagcountry', 'unce', false) end
function (frame) return _main(frame, '', '' ) end
fba = function (frame) return _main(frame, 'fba', 'unpe' ) end,
p.flagcountry = p.country
function p.athlete(frame) return p._main(frame, 'Flagathlete', 'unape', false) end
function (frame) return _main(frame, '', ) end
fbicon = function (frame) return _main(frame, 'fbicon', 'pxxl' ) end,
p.flagathlete = p.athlete
function p.medalist(frame) return p._main(frame, 'Flagmedalist', 'unce', false) end
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

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.

Examples

[change source]
Template Module
Code Output PEIS Code Output PEIS
{{flag|China}}  China 443b {{#invoke:flag|main|China}} Template:Country data main  128b
{{flagcountry|China}}  China 577b {{#invoke:flag|country|China}}  China 128b
{{flagdeco|China}} 452b {{#invoke:flag|deco|China}} 107b
{{flagicon|China}} China 548b {{#invoke:flag|icon|China}} China 117b
{{flag+link|History of|China}}  China 663b {{#invoke:flag|+link|History of|China}}  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 = '&nbsp;<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