Module:Flags: Difference between revisions
Appearance
Content deleted Content added
Introducing customizable link |
Taking changes from Moroboshi at Module:Flags/Sandbox |
||
Line 1: | Line 1: | ||
local p = {} |
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 -- |
-- Loading the flag translations module -- |
||
Line 8: | Line 5: | ||
local master = mw.loadData("Module:Flags/MasterData") |
local master = mw.loadData("Module:Flags/MasterData") |
||
-- check if name is an original name in translation.fullname and |
|||
-- Assigning the parameter to a flag and a link |
|||
-- return its value, otherwise return nil |
|||
function p.flag(territory) |
|||
function check_translation(name) |
|||
local link |
|||
-- Searching in the master table only. |
|||
for translation, commonsName in pairs(translations.fullName) do |
|||
-- 2 letter code search |
|||
if |
if commonsName == name then |
||
link = translation |
|||
for flagParameter,commonsFile in pairs(master.twoLetter) do |
|||
if |
break --if found break out from the loop |
||
commonsName = commonsFile |
|||
tempLink = commonsFile |
|||
end |
|||
end |
|||
for flagParameter,commonsFile in pairs(translations.fullName) do |
|||
if commonsFile == tempLink then |
|||
link = flagParameter |
|||
end |
|||
end |
|||
if link == nil then link = commonsName |
|||
end |
end |
||
end |
end |
||
return link |
|||
end |
|||
-- |
-- Size of flag -- |
||
-- Function to define the default size for the flag if needed |
|||
if #territory.args[1] == 3 then |
|||
function defaultSize() |
|||
for flagParameter,commonsFile in pairs(master.threeLetter) do |
|||
--todo: move exception to Module:Flags/MasterData |
|||
if flagParameter == territory.args[1] then |
|||
local sizeExceptions = { "Nepal", "Switzerland", "the Vatican City", } |
|||
commonsName = commonsFile |
|||
local size = "20x22px" --initialize with default value |
|||
tempLink = commonsFile |
|||
for some,exceptions in pairs(sizeExceptions) do |
|||
end |
|||
if commonsName == exceptions then |
|||
end |
|||
size = "20x17px" |
|||
for flagParameter,commonsFile in pairs(translations.fullName) do |
|||
if |
break --if found break out from loop |
||
link = flagParameter |
|||
end |
|||
end |
|||
if link == nil then link = commonsName |
|||
end |
end |
||
end |
end |
||
return size |
|||
end |
|||
-- Assigning the parameter to a flag and a link |
|||
-- Searching in FlagTranslations, then in FlagMaster |
|||
function p.flag(territory) |
|||
-- Full name search |
|||
--always declare local variable, they are more efficient and dont pollute global namespace |
|||
local commonsName |
|||
local flagOf = "Flag_of_" -- Converts "Flag of" in a variable in order to accept images that don't follow this name schema |
|||
local link = "" |
|||
-- more efficient to access |
|||
local flag_code = territory.args[1] or "" |
|||
-- 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 |
|||
if commonsName == nil then |
if commonsName == nil then |
||
-- check master.fullName table |
|||
commonsName = master.fullName[flag_code] |
|||
for k,v in ipairs(flagTables) do |
|||
if commonsName then |
|||
for flagParameter,commonsFile in pairs(v) do |
|||
link = check_translation(commonsName) or commonsName; |
|||
if flagParameter == territory.args[1] then |
|||
else -- Searching in FlagTranslations |
|||
commonsName = commonsFile |
|||
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 |
end |
||
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 |
end |
||
-- Variant check for historical flags -- |
-- Variant check for historical flags -- |
||
local variant = territory.args[3] |
|||
if variant and variant ~= "" then |
|||
commonsName = master.variant[commonsName .. "|" .. variant] |
|||
flagOf="" |
|||
end |
|||
-- Label check -- |
-- Label check -- |
||
variant = territory.args[2] |
|||
if variant and variant ~="{{{2}}}" then |
|||
commonsName = master.variant[commonsName .. "|" .. variant] |
|||
flagOf="" |
|||
end |
end |
||
-- Digesting Commons flag files not following the format "Flag of " |
-- Digesting Commons flag files not following the format "Flag of " |
||
Line 88: | Line 88: | ||
if commonsName ~= nil and string.find( commonsName, "File:", 1 ) == 1 then |
if commonsName ~= nil and string.find( commonsName, "File:", 1 ) == 1 then |
||
commonsName = string.sub( commonsName, 6) |
commonsName = string.sub( commonsName, 6) |
||
flagOf |
flagOf="" |
||
end |
end |
||
-- Fallback for non-identified variant/label flags -- |
-- Fallback for non-identified variant/label flags -- |
||
if commonsName == nil then |
if commonsName == nil then commonsName = "Flag of None" end |
||
commonsName = "Flag of None" |
|||
end |
|||
-- Border for everybody except Nepal and Ohio |
-- Border for everybody except Nepal and Ohio |
||
-- todo: move exception to Module:Flags/MasterData |
|||
if commonsName == "Nepal" or commonsName == "Ohio" then |
|||
local border = "border|" |
|||
if commonsName == "Nepal" or commonsName == "Ohio" then |
|||
else |
|||
border = " |
border = "" |
||
end |
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 |
|||
-- 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 |
|||
-- Customizing the link |
-- Customizing the link |
||
openBrackets = "[[" |
openBrackets = "[[" |
||
Line 139: | Line 122: | ||
textLink = link .. "|" |
textLink = link .. "|" |
||
end |
end |
||
-- Text in addition to flag |
-- Text in addition to flag |
||
if territory.args[6] == "" then |
if territory.args[6] == "" then |
||
text = " " .. openBrackets .. link .. closeBrackets |
text = " " .. openBrackets .. link .. closeBrackets |
||
elseif territory.args[6] ~= "{{{text}}}" then |
elseif territory.args[6] ~= "{{{text}}}" then |
||
text = " " .. openBrackets .. textLink .. territory.args[6] .. closeBrackets |
text = " " .. openBrackets .. textLink .. territory.args[6] .. closeBrackets |
||
else text = "" |
else text = "" |
Latest revision as of 03:50, 22 August 2013
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
[edit]Functionality implemented:
- Full name in English or the locale language: "Andorra".
- 2 letter code - link points to full name: "AD"
- 3 letter code - link points to full name: "AND"
- Nepal and Ohio flags are shown without border.
- When a name is not found in the list, attempts to offer a Commons image and a link e.g. "Berlin" or "WHO".
- Size as in "size=44px" or "size=40x44px" can be defined in any position.
- Nepal, Switzerland and Vatican City have a default size of 20x17px (for the rest it's 20x22px):
- Variants for historical flags "1901"
or "variant=1901" (for compatibility reasons)
- Variants for labeled flags: "naval", "air force" and any other specified at FlagTranslations: "civil"
- "naval-RMAS"
- Variant / label flags not found in FlagTranslations return the Flag of None but still point to the right article: "whatever"
- "quatsch"
- Redirects (different names pointing to a same flag) are supported: "GB"
- "UK"
- Full Commons filenames can be defined in tables when they don't follow the "Flag of " syntax: "File:Flag Belgium brussels"
- Localization: "Illes Balears"
- "中華人民共和國" File:Flag of 中華人民共和國.svg
- Localization + variants: "Afganistan" + "1901"
- "Regne Unit" + "civil"
- Flags listed only in FlagTranslations always link to the local language article: parameter "Native Peoples of Colombia" File:Flag of Pueblos Indígenas de Colombia.svg links to "Pueblos Indígenas de Colombia"
Roadmap
[edit]- 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 = {}
-- Loading the flag translations module --
local translations = mw.loadData("Module:Flags/LocaleData")
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
local commonsName
local flagOf = "Flag_of_" -- Converts "Flag of" in a variable in order to accept images that don't follow this name schema
local link = ""
-- more efficient to access
local flag_code = territory.args[1] or ""
-- 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
if commonsName == nil then
-- check master.fullName table
commonsName = master.fullName[flag_code]
if commonsName then
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