Module:Flag

From New Prairie Wiki
Revision as of 14:37, 14 August 2025 by Randombell (talk | contribs) (Created page with "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 v...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Lua error in Module:Lua_banner at line 113: attempt to index field 'edit' (a nil value). 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}} Template:Country data CHN 443b {{#invoke:flag||CHN}} Lua error in package.lua at line 80: module 'Module:CountryData/cacheB' not found. 128b
{{flag country|CHN}} Template:Flag country 577b {{#invoke:flag|country|CHN}} Lua error in package.lua at line 80: module 'Module:CountryData/cacheB' not found. 128b
{{flag decoration|CHN}}/{{flag deco|CHN}} Template:Flag deco 452b {{#invoke:flag|decoration|CHN}}/{{#invoke:flag|deco|CHN}} Lua error in package.lua at line 80: module 'Module:CountryData/cacheB' not found. 107b
{{flag icon|CHN}} Template:Country data CHNTemplate:Namespace detect showall 548b {{#invoke:flag|icon|CHN}} Lua error in package.lua at line 80: module 'Module:CountryData/cacheB' not found. 117b
{{flag link|CHN|at the 2004 Summer Olympics}} Template:Flag link 497b {{#invoke:flag|link|CHN|at the 2004 Summer Olympics}} Lua error in package.lua at line 80: module 'Module:CountryData/cacheB' not found. 198b
{{flag+link|History of|CHN}} Template:Flag+link 663b {{#invoke:flag|+link|History of|CHN}} Lua error in package.lua at line 80: module 'Module:CountryData/cacheB' not found. 139b
{{flag team|GBR}} Template:Flag team 804b {{#invoke:flag|team|GBR}} Template:Country data GBR  (GBR) 193b
{{flag athlete|Andy Murray|GBR}} Template:Flag athlete 617b {{#invoke:flag|athlete|Andy Murray|GBR}} Template:Country data GBR  210b
{{flag medalist|Andy Murray|GBR}} Template:Flag medalist 469b {{#invoke:flag|medalist|Andy Murray|GBR}} Andy Murray
Template:Country data GBR 
129b
{{flag IOC|CAN|1924 Winter|1}} Template:Flag IOC 326b {{#invoke:flag|IOC|CAN|1924 Winter|1}} Lua error in package.lua at line 80: module 'Module:Country_alias' not found. 163b
{{flag IOC 2|HKG|1954 Asian Games|1}} Template:Flag IOC 2 368b {{#invoke:flag|IOC 2|HKG|1954 Asian Games|1}} Lua error in package.lua at line 80: module 'Module:Country_alias' not found. 184b
{{flag IOC athlete|Mark Spitz|USA|1972 Summer}} Template:Flag IOC athlete 346b {{#invoke:flag|IOC athlete|Mark Spitz|USA|1972 Summer}} Lua error in package.lua at line 80: module 'Module:Country_alias' not found. 178b
{{fb|CHN}} Template:Fb 560b {{#invoke:flag|fb|CHN}} Lua error in package.lua at line 80: module 'Module:Flagg/Altvar data' not found. 151b
{{fb-rt|CHN}} Template:Fb-rt 482b {{#invoke:flag|fb-rt|CHN}} Lua error in package.lua at line 80: module 'Module:Flagg/Altvar data' not found. 151b
{{fbicon|CHN}} Template:Fbicon 444b {{#invoke:flag|fbicon|CHN}} Lua error in package.lua at line 80: module 'Module:Flagg/Altvar data' not found. 163b
{{fba|CHN}} Template:Fba 625b {{#invoke:flag|fba|CHN}} Lua error in package.lua at line 80: module 'Module:Fba/list' not found. 149b
{{fbaicon|CHN}} Template:Fbaicon 500b {{#invoke:flag|fbaicon|CHN}} Lua error in package.lua at line 80: module 'Module:Fba/list' not found. 159b
{{ru|CHN}} Template:Ru 646b {{#invoke:flag|ru|CHN}} Lua error in package.lua at line 80: module 'Module:Flagg/Altvar data' not found. 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
})