Module:Flags
MyWikiBiz, Author Your Legacy — Wednesday November 13, 2024
Jump to navigationJump to searchAll 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". Template:Flags
- 2 letter code - link points to full name: "AD" Template:Flags
- 3 letter code - link points to full name: "AND" Template:Flags
- Nepal and Ohio flags are shown without border. Template:Flags Template:Flags
- When a name is not found in the list, attempts to offer a Commons image and a link e.g. "Berlin" or "WHO". Template:Flags Template:Flags
- Size as in "size=44px" or "size=40x44px" can be defined in any position. Template:Flags Template:Flags
- Nepal, Switzerland and Vatican City have a default size of 20x17px (for the rest it's 20x22px): Template:Flags Template:Flags Template:Flags
- Variants for historical flags "1901" Template:Flags or "variant=1901" (for compatibility reasons) Template:Flags
- Variants for labeled flags: "naval", "air force" and any other specified at FlagTranslations: "civil" Template:Flags - "naval-RMAS" Template:Flags
- Variant / label flags not found in FlagTranslations return the Flag of None but still point to the right article: "whatever" Template:Flags - "quatsch" Template:Flags
- Redirects (different names pointing to a same flag) are supported: "GB" Template:Flags - "UK" Template:Flags
- Full Commons filenames can be defined in tables when they don't follow the "Flag of " syntax: "File:Flag Belgium brussels" Template:Flags
- Localization: "Illes Balears" Template:Flags - "中華人民共和國" Template:Flags
- Localization + variants: "Afganistan" + "1901" Template:Flags - "Regne Unit" + "civil" Template:Flags
- Flags listed only in FlagTranslations always link to the local language article: parameter "Native Peoples of Colombia" Template:Flags 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