Module:Flags: Difference between revisions

From TwogPedia
(Created page with "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...")
 
No edit summary
Line 1: Line 1:
local MasterData = mw.loadData('Module:Flags/MasterData')
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 = {}
local Flags = {}


-- Returns a flag
function Flags.icon(flagString, category)
--[[
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)


local flagKey = Flags._convertToKey(flagString)
if flagKey then
if flagKey then
local flagData = MasterData.data[flagKey]
local flagData = MasterData.data[flagKey]
if flagData.flag ~= 'File:Space filler flag.png' then
local link = 'Category:'.. category .. '/' .. flagData.name
local link = ''
return '<span class="flag">[[' .. flagData.img ..
if flagData.name and shouldLink then
'|' .. flagData.name .. '|link=' .. link .. '|]]</span>'
link = 'Category:' .. flagData.name
else  
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)
mw.log('Unknown flag: ', flagName)
return Template.safeExpand(mw.getCurrentFrame(), 'FlagNoLink/' .. flagName:lower()) ..
return false
'[[Category:Pages with unknown flags]]'
end
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
end


Line 88: Line 34:
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)
function Flags._convertToKey(flagName)
flagName = flagName:gsub(' ', ''):lower()
flagName = flagName:gsub(' ', ''):lower()
Line 153: Line 43:
end
end


function Flags._convertToLangKey(langName)
return Flags
return MasterData.languageTwoLetter[langName]
or MasterData.languageThreeLetter[langName]
or langName
end
 
return Class.export(Flags)

Revision as of 07:13, 25 August 2022

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

local MasterData = mw.loadData('Module:Flags/MasterData')

local Flags = {}

function Flags.icon(flagString, category)

	local flagKey = Flags._convertToKey(flagString)
	
	if flagKey then
		local flagData = MasterData.data[flagKey]
		local link = 'Category:'.. category .. '/' .. flagData.name
		return '<span class="flag">[[' .. flagData.img ..
				'|' .. flagData.name .. '|link=' .. link .. '|]]</span>'
	else 
		mw.log('Unknown flag: ', flagName)
		return false
	end
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

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

return Flags