Module:Flags/sandbox
| This is the module sandbox page for Module:Flags (diff). |
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".

- 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
- 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
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.