Gaa na ọdịnaya

Module:Flag

Shí Wikipedia, njikotá édémédé nke onyobulạ

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

Generic flag templates

Sports flag templates

Examples

Template Module
Code Output PEIS Code Output PEIS
{{flag|CHN}} CHN 443b {{#invoke:flag||CHN}} CHN 128b
{{flag country|CHN}}  China 577b {{#invoke:flag|country|CHN}} China 128b
{{flag decoration|CHN}}/{{flag deco|CHN}}
  1. REDIRECT Template:Flag decoration
|| 452b || {{#invoke:flag|decoration|CHN}}/{{#invoke:flag|deco|CHN}} || || 107b
{{flag icon|CHN}} China 548b {{#invoke:flag|icon|CHN}} China 117b
{{flag link|CHN|at the 2004 Summer Olympics}}  China 497b {{#invoke:flag|link|CHN|at the 2004 Summer Olympics}} China 198b
{{flag+link|History of|CHN}}  China 663b {{#invoke:flag|+link|History of|CHN}} China 139b
{{flag team|GBR}}  Great Britain (GBR) 804b {{#invoke:flag|team|GBR}} Great Britain (GBR) 193b
{{flag athlete|Andy Murray|GBR}}  Andy Murray (GBR) 617b {{#invoke:flag|athlete|Andy Murray|GBR}} Andy Murray (GBR) 210b
{{flag medalist|Andy Murray|GBR}} Andy Murray
 Great Britain
469b {{#invoke:flag|medalist|Andy Murray|GBR}} Andy Murray
Great Britain
129b
{{flag IOC|CAN|1924 Winter|1}}  Canada (1) 326b {{#invoke:flag|IOC|CAN|1924 Winter|1}}  Canada (1) 163b
{{flag IOC 2|HKG|1954 Asian Games|1}}  Hong Kong (1) 368b {{#invoke:flag|IOC 2|HKG|1954 Asian Games|1}}  Hong Kong (1) 184b
{{flag IOC athlete|Mark Spitz|USA|1972 Summer}}  Mark Spitz (USA) 346b {{#invoke:flag|IOC athlete|Mark Spitz|USA|1972 Summer}}  Mark Spitz (USA) 178b
{{fb|CHN}}  China 560b {{#invoke:flag|fb|CHN}} China 151b
{{fb-rt|CHN}} China  482b {{#invoke:flag|fb-rt|CHN}} China 151b
{{fbicon|CHN}} China 444b {{#invoke:flag|fbicon|CHN}} China national football team 163b
{{fba|CHN}}  [[Script error: No such module "Fba".|China]] 625b {{#invoke:flag|fba|CHN}} Lua error in package.lua at line 80: module 'Module:Fba/list' not found. 149b
{{fbaicon|CHN}} China 500b {{#invoke:flag|fbaicon|CHN}} Lua error in package.lua at line 80: module 'Module:Fba/list' not found. 159b
{{ru|CHN}}  China 646b {{#invoke:flag|ru|CHN}} China 210b

Caveats

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, 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

return setmetatable (p, {['__index'] =											-- returns table p with the metatable __index set so that, if the table KEY isn't recognized, it returns
	function (_, key)															-- this anonymous function called as function(p, KEY)
		return function (frame) return _main(frame, 'Flag', 'unc', key) end		-- which interprets the module call as {{flag|KEY}} and passes it to _main()
	end
})