Documentation for this module may be created at Module:Flags/doc
local MasterData = mw.loadData('Module:Flags/MasterData') local Template = require('Module:Template') local Logic = require('Module:Logic') local Table = require('Module:Table') local String = require('Module:StringUtils') local FnUtil = require('Module:FnUtil') local Class = require('Module:Class') local Flags = {} -- Returns a flag --[[ supported args are: flag - country name, flag code, or alias of the Flag shouldLink - boolean that decides if the flag should link or not --> set this to true for the flag to link to the according category --> else the flag will not link ]]-- function Flags.Icon(args, flagName) local shouldLink if type(args) == 'string' then flagName = args elseif type(args) == 'table' then shouldLink = args.shouldLink if String.isEmpty(flagName) then flagName = args.flag end end if String.isEmpty(flagName) then return '' end shouldLink = Logic.readBool(shouldLink) local flagKey = Flags._convertToKey(flagName) if flagKey then local flagData = MasterData.data[flagKey] if flagData.flag ~= 'File:Space filler flag.png' then local link = '' if flagData.name and shouldLink then link = 'Category:' .. flagData.name end return '<span class="flag">[[' .. flagData.flag .. '|' .. flagData.name .. '|link=' .. link .. ']]</span>' else return '<span class="flag">[[' .. flagData.flag .. '|link=]]</span>' end elseif shouldLink then mw.log('Unknown flag: ', flagName) return Template.safeExpand(mw.getCurrentFrame(), 'Flag/' .. flagName:lower()) .. '[[Category:Pages with unknown flags]]' else mw.log('Unknown flag: ', flagName) return Template.safeExpand(mw.getCurrentFrame(), 'FlagNoLink/' .. flagName:lower()) .. '[[Category:Pages with unknown flags]]' end end function Flags.languageIcon(args, langName) if type(args) == 'string' then langName = args args = {} elseif String.isEmpty(langName) then langName = args.language or args.flag end if String.isEmpty(langName) then return '' end langName = Flags._convertToLangKey(langName) return Flags.Icon(args, langName) end -- Converts a country name, flag code, or alias to a standardized country name function Flags.CountryName(flagName) if String.isEmpty(flagName) then return '' end local flagKey = Flags._convertToKey(flagName) if flagKey then return MasterData.data[flagKey].name else mw.log('Unknown flag: ', flagName) return mw.text.trim(mw.text.split(Template.safeExpand(mw.getCurrentFrame(), 'Flag/' .. flagName), '|', true)[2] or '') end end -- Converts a country name, flag code, or alias to its iso code --[[ supported formats are: alpha2 - returns the lowercase ISO 3166-1 alpha-2 flag code alpha3 - returns the lowercase ISO 3166-1 alpha-3 flag code default is alpha2 ]]-- function Flags.CountryCode(flagName, format) if String.isEmpty(flagName) then return '' end local flagKey = Flags._convertToKey(flagName) if flagKey then if format == 'alpha3' then return Flags._getAlpha3CodesByKey()[flagKey] or Flags._getLanguage3LetterCodesByKey()[flagKey] else return Flags._getAlpha2CodesByKey()[flagKey] or Flags._getLanguageCodesByKey()[flagKey] end end mw.log('Unknown flag: ', flagName) return '' end Flags._getAlpha2CodesByKey = FnUtil.memoize(function() return Table.map(MasterData.twoLetter, function(key, code) return code, key end) end) Flags._getAlpha3CodesByKey = FnUtil.memoize(function() return Table.map(MasterData.threeLetter, function(key, code) return code, key end) end) Flags._getLanguageCodesByKey = FnUtil.memoize(function() return Table.map(MasterData.languageTwoLetter, function(key, code) return code, key end) end) Flags._getLanguage3LetterCodesByKey = FnUtil.memoize(function() return Table.map(MasterData.languageThreeLetter, function(key, code) return code, key end) end) --[[ Converts a country name, flag code, or alias to a canonical key. The key is a lower case no-space representation of the country name, and is used for other functions in this module. Returns nil if the input is unrecognized. Examples: Flags.readKey('tn') -- returns 'tunisia' Flags.readKey('tun') -- returns 'tunisia' Flags.readKey('tunisia') -- returns 'tunisia' Flags.readKey('Antigua and Barbuda') -- returns 'antiguaandbarbuda' Flags.readKey('Czech Republic') -- returns 'czechia' Flags.readKey('Czechoslovakia') -- returns nil ]] function Flags._convertToKey(flagName) flagName = flagName:gsub(' ', ''):lower() return MasterData.twoLetter[flagName] or MasterData.threeLetter[flagName] or MasterData.aliases[flagName] or (MasterData.data[flagName] and flagName) end function Flags._convertToLangKey(langName) return MasterData.languageTwoLetter[langName] or MasterData.languageThreeLetter[langName] or langName end return Class.export(Flags)