Module:Flags: Difference between revisions

Content deleted Content added
BACK! Dropping the idea of local table. Having all the flags data in an external module seems to be fine with no big difference.
Taking changes from Moroboshi at Module:Flags/Sandbox
 
(35 intermediate revisions by 2 users not shown)
Line 2:
 
-- Loading the flag translations module --
local translations = require mw.loadData("Module:SandboxFlags/QuimGil/FlagTranslationsLocaleData")
local master = mw.loadData("Module:Flags/MasterData")
 
-- check if name is an original name in translation.fullname and
-- return its value, otherwise return nil
function check_translation(name)
local link
for translation, commonsName in pairs(translations.fullName) do
if commonsName == name then
link = translation
break --if found break out from the loop
end
end
return link
end
 
-- Size of flag --
-- Function to define the default size for the flag if needed
function defaultSize()
--todo: move exception to Module:Flags/MasterData
local sizeExceptions = { "Nepal", "Switzerland", "the Vatican City", }
local size = "20x22px" --initialize with default value
for some,exceptions in pairs(sizeExceptions) do
if commonsName == exceptions then
size = "20x17px"
break --if found break out from loop
end
end
return size
end
 
-- Assigning the parameter to a flag and a link
function p.flag(territory)
--always declare local variable, they are more efficient and dont pollute global namespace
border = "border|"
local commonsName
-- No border for Nepal or Ohio
local flagOf = "Flag_of_" -- Converts "Flag of" in a variable in order to accept images that don't follow this name schema
if territory.args[1] == "Nepal" or territory.args[1] == "Ohio" then border = "" end
local link = ""
-- Searching in the translation table.
-- more efficient to access
for english,locale in pairs(translations.t) do
local ifflag_code territory.args[1] == locale or territory.args[1] == english then commonsName = english link = localeor end""
-- Searching in the master table only.
-- 2 letter code search
if #flag_code == 2 then
-- try to assign a value to commonsName and check for nil value
commonsName = master.twoLetter[flag_code]
--if check_translation return nil then it will execute the or part and assign commonsName to link
if commonsName then link = check_translation(commonsName) or commonsName; end
elseif #flag_code == 3 then -- 3 letter code search
commonsName = master.threeLetter[flag_code]
if commonsName then link = check_translation(commonsName) or commonsName; end
end
-- check if commonsName is still nil
-- In the absence of translation for an existing entry, links to the english/original name --
if commonsName ~== nil and link == '' then link = commonsName end
-- check master.fullName table
-- Fallback to Commons when the parameter doesn't have a translation in the table. The flag doesn't have a link, then.
if commonsName == nil then commonsName = territorymaster.argsfullName[1flag_code] link = territory.args[1] end
if commonsName then
return '[[File:Flag_of_' .. commonsName .. '.svg|' .. border .. 'link=' .. link .. '|22x20px]]'
link = check_translation(commonsName) or commonsName;
else -- Searching in FlagTranslations
commonsName = translations.fullName[flag_code]
if commonsName then
link = flag_code
else -- Fallback to Commons when the parameter doesn't have an entry in the tables
commonsName = flag_code
link = flag_code
end
end
end
 
-- Variant check for historical flags --
local variant = territory.args[3]
if variant and variant ~= "" then
commonsName = master.variant[commonsName .. "|" .. variant]
flagOf=""
end
 
-- Label check --
variant = territory.args[2]
if variant and variant ~="{{{2}}}" then
commonsName = master.variant[commonsName .. "|" .. variant]
flagOf=""
end
 
-- Digesting Commons flag files not following the format "Flag of "
-- These filenamess must be preceded by "File:" in the table values.
 
if commonsName ~= nil and string.find( commonsName, "File:", 1 ) == 1 then
commonsName = string.sub( commonsName, 6)
flagOf=""
end
 
-- Fallback for non-identified variant/label flags --
if commonsName == nil then commonsName = "Flag of None" end
 
-- Border for everybody except Nepal and Ohio
-- todo: move exception to Module:Flags/MasterData
local border = "border|"
if commonsName == "Nepal" or commonsName == "Ohio" then
border = ""
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
 
-- Customizing the link
openBrackets = "[["
closeBrackets = "]]"
if territory.args[5] == "" then
flagLink = ""
textLink = ""
openBrackets = ""
closeBrackets = ""
elseif territory.args[5] ~= "{{{link}}}" then
flagLink = territory.args[5]
textLink = territory.args[5] .. "|"
else flagLink = link
textLink = link .. "|"
end
 
-- Text in addition to flag
if territory.args[6] == "" then
text = " " .. openBrackets .. link .. closeBrackets
elseif territory.args[6] ~= "{{{text}}}" then
text = " " .. openBrackets .. textLink .. territory.args[6] .. closeBrackets
else text = ""
end
 
return '[[File:' .. flagOf .. commonsName .. '.svg|' .. border .. 'link=' .. flagLink .. '|'.. size .. ']]' .. text
end
return p