Module:Flags
Appearance
All the logics of Template:Flags are handled here. This module works together with Module:Flags/MasterData and Module:Flags/LocaleData, where the flags data is maintained.
Features
Functionality implemented:
- Full name in English or the locale language: "Andorra". Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- 2 letter code - link points to full name: "AD" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- 3 letter code - link points to full name: "AND" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Nepal and Ohio flags are shown without border. Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- When a name is not found in the list, attempts to offer a Commons image and a link e.g. "Berlin" or "WHO". Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Size as in "size=44px" or "size=40x44px" can be defined in any position. Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Nepal, Switzerland and Vatican City have a default size of 20x17px (for the rest it's 20x22px): Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Variants for historical flags "1901" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. or "variant=1901" (for compatibility reasons) Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Variants for labeled flags: "naval", "air force" and any other specified at FlagTranslations: "civil" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. - "naval-RMAS" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Variant / label flags not found in FlagTranslations return the Flag of None but still point to the right article: "whatever" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. - "quatsch" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Redirects (different names pointing to a same flag) are supported: "GB" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. - "UK" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Full Commons filenames can be defined in tables when they don't follow the "Flag of " syntax: "File:Flag Belgium brussels" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Localization: "Illes Balears" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. - "中華人民共和國" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Localization + variants: "Afganistan" + "1901" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. - "Regne Unit" + "civil" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found.
- Flags listed only in FlagTranslations always link to the local language article: parameter "Native Peoples of Colombia" Lua error in package.lua at line 80: module 'Module:Sandbox/QuimGil/FlagTranslations' not found. links to "Pueblos Indígenas de Colombia"
Roadmap
- Performance testing.
- Extensive testing with copies of real pages, also for non-Latin scripts and Right-to-left languages.
- Cover the rest of functionality offered by other flag templates.
- Allow editors to define the year of the event, leaving to the template the task of finding the right flag.
local p = {}
-- Converts "Flag of" in a variable in order to accept images that don't follow this name schema
flagOf = "Flag_of_"
-- Loading the flag translations module --
local translations = mw.loadData("Module:Sandbox/QuimGil/FlagTranslations")
local master = mw.loadData("Module:Sandbox/QuimGil/FlagMaster")
-- Assigning the parameter to a flag and a link
function p.flag(territory)
-- Searching in the master table only.
-- 2 letter code search
if #territory.args[1] == 2 then
for flagParameter,commonsFile in pairs(master.twoLetter) do
if flagParameter == territory.args[1] then
commonsName = commonsFile
link = flagParameter
end -- FIXME this link is problematic, especially in non-English
end
end
-- 3 letter code search
if #territory.args[1] == 3 then
for flagParameter,commonsFile in pairs(master.threeLetter) do
if flagParameter == territory.args[1] then
commonsName = commonsFile
link = flagParameter
end -- FIXME this link is problematic, especially in non-English
end
end
-- Searching in FlagTranslations, then in FlagMaster
-- Full name search
flagTables = { translations.fullName, master.fullName, }
for k,v in ipairs(flagTables) do
for flagParameter,commonsFile in pairs(v) do
if flagParameter == territory.args[1] then
commonsName = commonsFile
link = flagParameter
elseif commonsFile == territory.args[1] then
commonsName = commonsFile
link = flagParameter
end
end
end
-- In the absence of translation for an existing entry, links to the english/original name --
if commonsName ~= nil and link == '' then
link = commonsName
end
-- Fallback to Commons when the parameter doesn't have an entry in the table.
if commonsName == nil then
commonsName = territory.args[1]
link = territory.args[1]
end
-- Border for everybody except Nepal and Ohio
if commonsName == "Nepal" or commonsName == "Ohio" then
border = ""
else
border = "border|"
end
-- Variant check for historical flags --
if territory.args[3] ~= "" then
variant = territory.args[3]
commonsName = master.variant[commonsName .. "|" .. variant]
flagOf=""
end
-- Label check --
if territory.args[2] ~= "{{{2}}}" then
variant = territory.args[2]
commonsName = master.variant[commonsName .. "|" .. variant]
flagOf = ""
end
-- Fallback for non-identified variant/label flags --
if commonsName == nil then
commonsName = "Flag of None"
end
-- Size of flag --
-- Function to define the default size for the flag if needed
function defaultSize()
sizeExceptions = { "Nepal", "Switzerland", "the Vatican City", }
for some,exceptions in pairs(sizeExceptions) do
if commonsName == exceptions then
size = "20x17px"
end
end
if size == nil then
size = "20x22px"
end
return size
end
-- Checking whether a size parameter has been introduced, otherwise set default
if territory.args[4]:find("px", -2) ~= nil then
size = territory.args[4]
else
size = defaultSize(commonsName)
end
return '[[File:' .. flagOf .. commonsName .. '.svg|' .. border .. 'link=' .. link .. '|'.. size .. ']]'
end
return p