Module:Sandbox/SiBr4
Appearance
local p = {}
-------------------------
local data = {
national = {
["AF"] = {alpha3="AFG",numeric="004",name="Afghanistan"},
["AL"] = {alpha3="ALB",numeric="008",name="Albania"},
["BO"] = {alpha3="BOL",numeric="068",name="Bolivia",isoname="Bolivia, Plurinational State of"},
["NL"] = {alpha3="NLD",numeric="528",name="Netherlands"},
["GB"] = {alpha3="GBR",numeric="826",name="United Kingdom",altnames={"UK"}}
},
NL = {
["DR"] = {name="Drenthe"},
["FL"] = {name="Flevoland"},
["FR"] = {name="Friesland"},
["GE"] = {name="Gelderland"}
},
GB = {
["ENG"] = {name="England"},
["NIR"] = {name="Northern Ireland"},
["SCT"] = {name="Scotland"},
["WLS"] = {name="Wales"}
}
}
local function cerror(text)
return mw.html.create("span"):addClass("error"):wikitext(text)
end
local function strip(text)
text = string.lower(text)
text = string.gsub(text,"[%s%-%,%.]","")
return text
end
local function findname(qry,cdata)
local testnames = cdata["altnames"] or {}
if cdata["isoname"] then table.insert(testnames,1,cdata["isoname"]) end
table.insert(testnames,1,cdata["name"])
for _,tname in ipairs(testnames) do
if strip(qry)==strip(tname) then
return true
end
end
return false
end
function p.lua_code2name(args)
local code1 = string.upper(args[1] or "")
local code2 = string.upper(args[2] or "")
if string.find(code1,"%-") then
code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$")
end
if --Check if valid code
--No non-alphanumeric characters allowed
string.find(code1..code2,"[^A-Z0-9]")
--3166-1 codes can be two or three letters or three digits;
--3166-2 codes must be two letters (first part) and 1-3 letters or digits (second part)
or not (string.find(code1,"^%u%u%u?$") or string.find(code1,"^%d%d%d$"))
or not (string.find(code2,"^%u?%u?%u?$") or string.find(code2,"^%d?%d?%d?$"))
or not (string.find(code1,"^%u%u$") or code2=="")
then
return cerror("Invalid code "..code1..(code2~="" and "-"..code2 or ""))
end
if string.find(code1,"^%u%u$") then
if code2=="" then
--3166-1 alpha-2 code
if data["national"][code1] then
return args.isoname and data["national"][code1]["isoname"] or data["national"][code1]["name"]
else
return cerror("Unknown code "..code1..(code2~="" and "-"..code2 or ""))
end
else
--3166-2 code
if data[code1] and data[code1][code2] then
return args.isoname and data[code1][code2]["isoname"] or data[code1][code2]["name"]
else
return cerror("Unknown code "..code1..(code2~="" and "-"..code2 or ""))
end
end
else
--3166-1 alpha-3 or numeric code
local codetype = string.find(code1,"%d") and "numeric" or "alpha3"
for alpha2,cdata in pairs(data["national"]) do
if cdata[codetype]==code1 then
return args.isoname and cdata["isoname"] or cdata["name"]
end
end
end
return cerror("Unknown code "..code1..(code2~="" and "-"..code2 or ""))
end
function p.code2name(frame)
local args = require("Module:Arguments").getArgs(frame)
return p.lua_code2name(args)
end
function p.lua_name2code(args)
if not args[1] then
return cerror("No parameter given")
end
if not args[2] then
--3166-1 code
for alpha2,cdata in pairs(data["national"]) do
if findname(args[1],cdata) then
if args["codetype"]=="numeric" or args["codetype"]=="alpha3" then
return data["national"][alpha2][args["codetype"]]
else
return alpha2
end
end
end
return cerror("Unknown name "..args[1])
else
--3166-2 code
return ""
end
end
function p.name2code(frame)
local args = require("Module:Arguments").getArgs(frame)
return p.lua_name2code(args)
end
-------------------------
function p.listdata(frame)
local args = require('Module:Arguments').getArgs(frame)
local map = {}
for k,v in pairs(args) do
if tonumber(k) ~= nil then
table.insert(map, k)
end
end
table.sort(map)
local list = mw.html.create('table')
list:css("background-color","#ecfcf4")
for n = 1, #map, 1 do
local row = list:tag("tr")
local c = args[map[n]]
local p = "Template:Country data "..c
local var = args["var"..map[n]]
local note = args["note"..map[n]]
local vartext
if var
then vartext = " (<code>"..var.."</code> variant)"
else vartext = ""
end
if require('Module:Redirect').luaIsRedirect(p)
then row:tag("td"):css("padding","0px 10px"):addClass("plainlinks"):wikitext("["..mw.title.new(p):fullUrl("redirect=no").." "..p.."]"..vartext)
else row:tag("td"):css("padding","0px 10px"):wikitext("[["..p.."]]"..vartext)
end
row:tag("td"):css("padding","0px 10px"):wikitext(frame:expandTemplate({title="flaglist", args={c, variant=(var or "")}}))
row:tag("td"):css("padding","0px 10px"):wikitext(note or "")
end
return list
end
function p.listdata2(frame)
local args = require('Module:Arguments').getArgs(frame,{removeBlanks=false})
local list = mw.html.create('table')
list:css("background-color","#ecfcf4")
for n,c in ipairs(args) do
if c ~= "" then
local row = list:tag("tr")
local p = "Template:Country data "..c
local var = args["var"..n]
local note = args["note"..n]
local vartext
if var
then vartext = " (<code>"..var.."</code> variant)"
else vartext = ""
end
if require('Module:Redirect').luaIsRedirect(p)
then row:tag("td"):css("padding","0px 10px"):addClass("plainlinks"):wikitext("["..mw.title.new(p):fullUrl("redirect=no").." "..p.."]"..vartext)
else row:tag("td"):css("padding","0px 10px"):wikitext("[["..p.."]]"..vartext)
end
row:tag("td"):css("padding","0px 10px"):wikitext(require("Module:Flagg").luaMain(frame,{"usc", c, variant=(var or "")}))
row:tag("td"):css("padding","0px 10px"):wikitext(note or "")
end
end
return list
end
-------------------------
function p.ec(frame)
local p = frame:preprocess("{{Wikipedia:List of Wikipedians by number of edits/5001โ6000}}")
local i = string.find(p,"User:SiBr4")
if i then
return string.sub(p,i-10,i-6)
else
return "?"
end
end
-------------------------
function p.test(frame)
return ""
end
-------------------------
return p