Jump to content

Module:Flag

ពីវិគីភីឌា

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.

! colspan=3| Template !! colspan=3| Module |- ! Code !! Output !! PEIS !! Code !! Output !! PEIS |- | {{flag|CHN}} ||  CHN || 443b || {{#invoke:flag||CHN}} ||  CHN || 128b |- | {{flag country|CHN}} ||  ចិន || 577b || {{#invoke:flag|country|CHN}} ||  CHN || 128b |- | {{flag decoration|CHN}}/{{flag deco|CHN}} || ទំព័រគំរូ:Flag deco || 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}} || ទំព័រគំរូ:Flag link || 497b || {{#invoke:flag|link|CHN|at the 2004 Summer Olympics}} ||  CHN || 198b |- | {{flag+link|History of|CHN}} || ទំព័រគំរូ:Flag+link || 663b || {{#invoke:flag|+link|History of|CHN}} || CHN || 139b |- | {{flag athlete|Andy Murray|GBR}} || ទំព័រគំរូ:Flagathlete || 617b || {{#invoke:flag|athlete|Andy Murray|GBR}} ||  GBR || 210b |- | {{flag medalist|Andy Murray|GBR}} || ទំព័រគំរូ:Flagmedalist || 469b || {{#invoke:flag|medalist|Andy Murray|GBR}} || Andy Murray
 GBR || 129b |- | {{flag IOC athlete|Mark Spitz|USA|1972 Summer}} || ទំព័រគំរូ:Flag IOC athlete || 346b || {{#invoke:flag|IOC athlete | Mark Spitz| USA| 1972 Summer}} ||  Mark Spitz (USA) || 178b |- | {{fb|CHN}} ||  ស.ប. ចិន || 560b || {{#invoke:flag|fb|CHN}} || Lua error in package.lua at line 80: module 'Module:Flagg/Altvar data' not found. || 151b |- | {{fb-rt|CHN}} || ស.ប. ចិន  || 482b || {{#invoke:flag|fb-rt|CHN}} || Lua error in package.lua at line 80: module 'Module:Flagg/Altvar data' not found. || 151b |- | {{fbicon|CHN}} || ទំព័រគំរូ:Fbicon || 444b || {{#invoke:flag|fbicon|CHN}} || Lua error in package.lua at line 80: module 'Module:Flagg/Altvar data' not found. || 163b |- | {{ru|CHN}} || ទំព័រគំរូ:Ru || 646b || {{#invoke:flag|ru|CHN}} || Lua error in package.lua at line 80: module 'Module:Flagg/Altvar data' not found. || 210b |}

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 p = {}

function p._main(frame, name, mode, check)
	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 = require('Module:Arguments').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

	if check 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)
	else
		check = ''
	end

	return preftext .. require('Module:Flagg').luaMain(frame,args) .. check
end

function p.main(frame) return p._main(frame,       'Flag',            'unc',    false) end
p.flag = p.main
p[''] = p.main
function p.decoration(frame) return p._main(frame, 'Flag decoration', 'uxx',    false) end
p.deco = p.decoration
p.flagdeco = p.decoration
p['flag decoration'] = p.decoration
function p.icon(frame) return p._main(frame,       'Flag icon',       'cxxl',   true) end
p.flagicon = p.icon
p['flag icon'] = p.icon
function p.link(frame) return p._main(frame,       'Flag link',       'unpe',    false) end
p.flaglink = p.link
p['flag link'] = p.link
function p.pluslink(frame) return p._main(frame,   'Flag+link',       'unpefo', false) end
p['+link'] = p.pluslink
p['flag+link'] = p.pluslink
function p.country(frame) return p._main(frame,    'Flag country',    'unce',   false) end
p.flagcountry = p.country
p['flag country'] = p.country
function p.athlete(frame) return p._main(frame,    'Flag athlete',    'unape',  false) end
p.flagathlete = p.athlete
p['flag athlete'] = p.athlete
function p.medalist(frame) return p._main(frame,   'Flag medalist',   'unce',   false) end
p.flagmedalist = p.medalist
p['flag medalist'] = p.medalist
function p.fb(frame) return p._main(frame,         'fb',              'unpe',   false) end
function p.fbrt(frame) return p._main(frame,       'fb-rt',           'unpre',  false) end
p['fb-rt'] = p.fbrt
function p.fbicon(frame) return p._main(frame,     'fbicon',          'pxxl', false) end
function p.ru(frame) return p._main(frame,         'ru',              'unpe', false) end
function p.IOCathlete(frame) return require('Module:Country_alias').flagXYZ(frame:newChild{ title = 'Template:Flag IOC athlete', args = {type = 'athlete-O'} }) end
p.flagIOCathlete = p.IOCathlete
p['IOC athlete'] = p.IOCathlete
p['flag IOC athlete'] = p.IOCathlete
return p