Open main menu
Home
Random
Donate
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Flagg/sandbox2
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
--For testing the use of data modules instead of the current templates; see [[WT:WPFT]] local p = {} function p.main(frame) --Get input arguments local args = require('Module:Arguments').getArgs(frame,{valueFunc = function(key,value) if value then value = mw.text.trim(value) --Change empty string to nil for all args except 'image' and 'border' if key=="image" or key=="border" or value~="" then return value end end return nil end }) --Call main function return p.luaMain(frame,args) end local function loadCountryData(country) if country == "test" then return mw.loadData("Module:Sandbox/SiBr4/Flag data") else local redirs = mw.loadData("Module:Sandbox/Ahecht/flag/redirects") while redirs[country] do country = redirs[country] end success, data = pcall(mw.loadData,"Module:Sandbox/Ahecht/flag/"..country) if success then return data[country] else --doesn't exist, return error message return {error=data} end end end local function firstNonNil(...) for i, value in ipairs({...}) do if value ~= nil then return value end end return nil end local function ternary(cond,iftrue,iffalse) if cond then return iftrue else return iffalse end end local function getvar(data,key,variant,lastDefault) if key and #key > 0 then if type(data) == "table" then local subkey = "" --check for key in data (with literal hyphens) while #key > 0 and data[key] == nil do --remove last section of key and retry key, trail = string.match(key,"^(.-)(%-?[^%-]*)$") subkey = trail..subkey end if #key > 0 then --data[key] exists --return it or look for subkey in nested table return getvar(data[key],string.gsub(subkey,"^%-",""),variant,lastDefault) else --key not found return nil end else --no subtable return nil end elseif variant and #variant > 0 then --no key; look for variant if type(data) == "table" then --remember default to fall back to if data['#default'] ~= nil then lastDefault = data['#default'] end local subvar = "" --check for variant in data (with literal hyphens) while #variant > 0 and data[variant] == nil do --remove last section of variant and retry variant, trail = string.match(variant,"^(.-)(%-?[^%-]*)$") subvar = trail..subvar end if #variant > 0 then --data[variant] exists --return it or look for subvar in nested table return getvar(data[variant],nil,string.gsub(subvar,"^%-",""),lastDefault) else --variant not found return lastDefault end else --value or nil return data end else --base case (no key or variant); return data if type(data) == "table" then return firstNonNil(data["#default"], lastDefault) else --value or nil return data end end end function p.getvar(frame) local args = require('Module:Arguments').getArgs(frame) local country = args[1] local key = args[2] local fallBack = require('Module:Yesno')(args[3]) local data = loadCountryData(country) if data.error then return "<span class='error'>"..data.error.."<span>" end local value if fallBack then value = getvar(data,nil,key) else value = getvar(data,key,nil) end return value==nil and "nil" or value end local function fillParams(str,values) return string.gsub(str, "%{%{%{([^%{%}%|]+)(%|?)([^%{%}]-)%}%}%}", function(param,pipe,default) if values[param] then return values[param] elseif pipe ~= "" then return default else return "{{{"..param.."}}}" end end) end function p.luaMain(frame,args) local function emp2nil(x) if x=="" then return nil else return x end end local function space2emp(x) if string.find(x,"^%s*$") then return "" else return x end end local function nopx(x) if x~=nil and (string.find(x,"^%d+$") or string.find(x,"^%d+px$")) then return string.gsub(x,"^(.*)px","%1") else return nil end end --Country & mode parameters local mode = string.lower(args[1] or "usc") local mi = string.sub(mode,1,1) local ms = string.sub(mode,2,2) local mn = string.sub(mode,3,3) local me = string.sub(mode,4,-1) local country = args[2] or "" local avar = args["avar"] or args["altvar"] local clink = args["clink"] or args["link"] --Get country data & altvar data local data = args["nodata"] and {} or loadCountryData(country) if data.error then return "<span class='error'>"..data.error.."<span>" end local alink, amap, asuf if avar then local altData = mw.loadData("Module:Flagg/Altvar data/sandbox") amap = altData.map avar = string.gsub(string.lower(avar or ""),"[ \-]","") avar = altData.aliases[avar] or avar if not amap[avar] then error("Unknown avar") end local age = args["age"] and "under-"..args["age"] or amap[avar].age or "" asuf = amap[avar].altlink alink = getvar(data,"link alias",amap[avar].altvar) or (clink or data["shortname alias"] or data.alias or country).." "..asuf alink = fillParams(alink,{age=age,mw=amap[avar].mw}) else avar = "" amap = {[""]={altvar=""}} end --Name and link parameters clink = clink or data.alias or country local pref = args["pref"] local suff = args["suff"] or asuf if not pref and not suff then --Default prefix pref = "Flag of" end local yn_map = {[""]=0; ["0"]=0; ["no"]=0; ["n"]=0; ["1"]=1; ["yes"]=1; ["y"]=1} local fthe = (args["pthe"] and yn_map[args["pthe"]]~=0) or (args["the"] and yn_map[args["the"]]~=0) local nthe = (args["nthe"] and yn_map[args["nthe"]]~=0) or (args["the"] and yn_map[args["the"]]~=0) fthe = fthe and (pref and "t" or "T").."he " or "" nthe = nthe and (pref and "t" or "T").."he " or "" local flink = args["plink"] or args["flink"] or alink or clink=="" and "" or space2emp((pref or "").." ")..fthe..clink..space2emp(" "..(suff or "")) local fsec = args["psection"] or args["section"] local csec = args["csection"] or args["section"] fsec = fsec and "#"..fsec or "" csec = csec and "#"..csec or "" if string.find(me,"f") then if mw.title.new( flink ).exists == false then flink = clink end end local name = args["name"] if not name then local cname = string.find(me,"e") and (getvar(data,"name alias",amap[avar].altvar) or data["shortname alias"] or data.alias) or country if mn == "f" then name = cname=="" and "" or space2emp((pref or "").." ")..nthe..cname..space2emp(" "..(suff or "")) else name = cname end end --Image parameters local pimage = args["image"] local placeholder = "Flag placeholder.svg" local variant = args["variant"] or args[3] or "" local image_map = {[""]=placeholder; ["none"]=placeholder; ["blank"]=placeholder} if pimage then --Remove namespace pimage = string.gsub(pimage,"^[Ff][Ii][Ll][Ee]:","") pimage = string.gsub(pimage,"^[Ii][Mm][Aa][Gg][Ee]:","") end local iname = image_map[pimage] or pimage local size = args["size"] or args["sz"] local size_map = {xs="12x8px"; s="17x11px"; m="23x15px"; l="32x21px"; xl="46x30px"} if size==nil or string.find(size,"^%d*x?%d+px$") then --valid EIS size (..px, x..px or ..x..px) or unset elseif string.find(size,"^%d*x?%d+$") then --EIS size without "px" suffix size=size.."px" else --size from map, or invalid value size = size_map[size] or nil end local border = args["border"] if iname then size = size or "23x15px" if yn_map[border]==0 then border = "" else border = "|border" end else iname = getvar(data,"flag alias-"..amap[avar].altvar.."-"..variant) or getvar(data,"flag alias-"..variant) or getvar(data,"flag alias",amap[avar].altvar) or placeholder size = size or emp2nil(data.size) or "23x15px" if border then if yn_map[border]==0 then border = "" else border = "|border" end else local autoborder = firstNonNil(getvar(data,"border-"..amap[avar].altvar.."-"..variant), getvar(data,"border-"..variant), getvar(data,"border",amap[avar].altvar)) if autoborder == false then border = "" else border = "|border" end end end local am = "" if args["alt"] or string.find(me,"a") then am = args["alt"] or args["name"] or country am = am.."|"..am end --Build display name local text = args["text"] if not text then if mn=="x" then --no text text = "" elseif mn=="p" or mn=="f" then --prefix/suffix link text = flink=="" and name or "[["..flink..fsec.."|"..name.."]]" elseif mn=="b" then --both prefix/suffix and normal country link local preflink = pref and (flink=="" and pref.." " or "[["..flink..fsec.."|"..pref.."]] ") or "" local sufflink = suff and (flink=="" and " "..suff or " [["..flink..fsec.."|"..suff.."]]") or "" local namelink = (name=="" and "" or nthe)..(clink=="" and name or "[["..clink..csec.."|"..name.."]]") text = preflink..namelink..sufflink elseif mn=="d" then --data template local title = mw.title.new("Template:Country data "..country) --check if redirect if title.isRedirect then text = "<span class=\"plainlinks\">["..title:fullUrl("redirect=no").." "..name.."]</span>" else text = "[["..title.fullText.."|"..name.."]]" end elseif mn=="u" then --unlinked text = name else --country link (default) text = clink=="" and name or "[["..clink..csec.."|"..name.."]]" end end --Build image local ilink = args["ilink"] if not ilink then if mi=="x" or (iname==placeholder and pimage~=placeholder) then --no image/invisible image iname = placeholder border = "" ilink = "|link=" am = "" elseif mi=="i" then --image page link ilink = "" elseif mi=="c" then --country link ilink = "|link="..clink..(clink=="" and "" or csec) elseif mi=="p" or mi=="f" then --prefix/suffix link ilink = "|link="..flink..(flink=="" and "" or fsec) elseif mi=="d" then --data template local title = mw.title.new("Template:Country data "..country) --check if redirect if title.isRedirect then ilink = "|link="..title:fullUrl("redirect=no") else ilink = "|link="..title.fullText end else --unlinked (default) ilink = "|link=" end end if am == "" and string.find(me,"l") then am = mw.ustring.sub(ilink,7,-1) end local image = "[[File:"..iname.."|"..size..border..ilink.."|alt="..am.."]]" if iname==placeholder then if require('Module:yesno')(args["noredlink"]) == false then iname = '' image = "[[:Template:Country data "..country.."]]" end if (args["missingcategory"] or '') ~= '' then image = image..args["missingcategory"] end if string.find(me,"b") then text = '' end end --Combine image and name with separator local align = args["align"] or args["al"] local nalign = args["nalign"] or args["nal"] local align_map = {left="left", l="left", center="center", centre="center", c="center", middle="center", m="center", right="right", r="right"} local out if string.find(me,"r") then --image right of name if (ms=="x" and mi=="x") or (string.find(me,"o") and iname==placeholder and pimage~=placeholder) then --name only out = text elseif ms=="x" then --no separator out = text.."<span class=\"flagicon\">"..image.."</span>" elseif ms=="n" then --non-breaking space out = text.."<span class=\"flagicon\"> "..image.."</span>" elseif ms=="l" then --line break out = text.."<span class=\"flagicon\"><br/>"..image.."</span>" elseif ms=="t" then --table cell out = "style=\"text-align:"..(align_map[nalign] or "left").."\"|"..text.."||style=\"text-align:"..(align_map[align] or "center")..";\"|<span class=\"flagicon\">"..image.."</span>" else --fixed-width span box (default) local width = args["width"] or args["w"] or require("Module:Flaglist").luawidth(size) out = text.." <span class=\"flagicon\" style=\"display:inline-block;width:"..width.."px;text-align:"..(align_map[align] or "right")..";\">"..image.."</span>" end else --image left of name if (ms=="x" and mi=="x") or (string.find(me,"o") and iname==placeholder and pimage~=placeholder) then --name only out = text elseif ms=="x" then --no separator out = "<span class=\"flagicon\">"..image.."</span>"..text elseif ms=="n" then --non-breaking space out = "<span class=\"flagicon\">"..image.." </span>"..text elseif ms=="l" then --line break out = "<span class=\"flagicon\">"..image.."<br/></span>"..text elseif ms=="t" then --table cell out = "style=\"text-align:"..(align_map[align] or "center")..";\"|<span class=\"flagicon\">"..image.."</span>||style=\"text-align:"..(align_map[nalign] or "left").."\"|"..text else --fixed-width span box (default) local width = nopx(args["width"] or args["w"]) or require("Module:Flaglist").luawidth(size) out = "<span class=\"flagicon\" style=\"display:inline-block;width:"..width.."px;text-align:"..(align_map[align] or "left")..";\">"..image.."</span> "..text end end if string.find(me,"w") then --avoid wrapping out = "<span class=\"nowrap\">"..out.."</span>" end --Tracking categories local cat = "" if pimage and not image_map[pimage] and country~="" and data["flag alias"] and not args.demo then cat = "[[Category:Pages using Flagg with specified image instead of data template image]]" end return out..cat end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Flagg/sandbox2/doc
(
edit
)