Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Documentation for this module may be created at Module:Flag/doc

local margs = require('Module:Arguments')

local notblank = function (v) return (v or '') ~= '' end

local function _main(frame, name, mode, key)
	local categories = {
		['Flag icon'] = '[[Category:Flag icons missing country data templates]]' ..
			frame:expandTemplate{title = 'Preview warning', args = {'Unrecognized country in Template:flag icon'}},
		['Flag decoration'] = '[[Category:Flag decoration missing country data templates]]',
	}

    local yesno = require('Module:Yesno')

	--Get input arguments
	local args = margs.getArgs(frame, {
		frameOnly = notblank(frame.args.frameonly), valueFunc =
			function(argkey,value)
				if value then
					value = mw.text.trim(value)
					--Change empty string to nil for all args except 'image' and 'border'
					if argkey=="image" or argkey=="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
		local sports = {
			['3x3'] = '3x3',
			bb = 'bb',
			fb = 'fb',
			fbicon = 'fb',
			ru = 'ru',
			fba = 'fba',
			fbw = 'fbw',
			fbaicon = 'fba',
			futsal = 'futsal'
		}
		if sports[name]then
			args.avar = args[1] and sports[name] or nil
			if name == 'fb' and yesno(args.align) == true then
				args.align='c'
			elseif sports[name] == 'fba' then
				if args[1] then
					local list = require("Module:Fba/list")
					local old = notblank(args.old) and "_old" or ""
					local country = args[1]
					local fba = list.fbas[country .. old]
					if not fba then -- look for aliases
						local countryTable = require('Module:CountryData').getcachedtable(frame, country)
						if countryTable and countryTable.alias then
							country = countryTable.alias
							fba = list.fbas[country .. old]
						end
					end
					if args.name == "code" then
						args.name = list.codes[country] or country
					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
				elseif args.name == "code" or args.name == "full" then
					args.name = ""
				end
			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 = notblank(args[2]) and categories[name] or nil
	args.noredlink = args.noredlink or 'notext'

	if args.placeholder and yesno(args.placeholder) ~= true then
		args[1] = args[1] .. 'o'
	end

	local 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,
	u			= function (frame) return _main(frame, 'Flag',				'unu'   ) end,
	country		= function (frame) return _main(frame, 'Flag country',		'unce'  ) end,
	list        = function (frame) return _main(frame, 'Flag list',			'usc'   ) 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,
	['3x3']		= function (frame) return _main(frame, '3x3',				'unpe'  ) end,
	bb			= function (frame) return _main(frame, 'bb',				'unpe'  ) 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',				'unpre' ) end,
	fbw			= function (frame) return _main(frame, 'fbw',				'unpe'  ) end,
	['fbw-rt']	= function (frame) return _main(frame, 'fbw',				'unpre' ) end,
	fbicon		= function (frame) return _main(frame, 'fbicon',			'pxxl'  ) end,
	fbaicon		= function (frame) return _main(frame, 'fbaicon',			'pxxl'  ) end,
	futsal		= function (frame) return _main(frame, 'futsal',			'unpe'  ) end,
	['futsal-rt'] = function (frame) return _main(frame, 'futsal',			'unpre' ) 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
})