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 multil

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.

Usage

Examples

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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.