Jump to content

Module:Sandbox/SiBr4

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by SiBr4 (talk | contribs) at 14:47, 19 August 2015. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

local p = {}

-------------------------

function getaliastable(frame,country,params)
  if string.find(frame:preprocess("{{Country data "..country.."}}"),"^%{%{ *%{%{%{1")
  then
    params = params or {}
    local s = frame:expandTemplate({title="Country data "..country;args=params})
    --s = string.gsub(s,"<noinclude>.-</noinclude>","");
    --s = string.gsub(s,"[\r\n]","")
    --s = string.gsub(s,"&#(%d%d%d?);",function(n) return string.char(tonumber(n)) end)
    s = string.gsub(s,"|([^|=]-)=","\1\1%1\2")
    s = string.gsub(s,"}}%s*$","\1")
    local part = {}
    for par in string.gmatch(s,"\1[^\1\2]-\2[^\1\2]-\1") do
      local k = string.match(par,"\1%s*(.-)%s*\2")
      local v = string.match(par,"\2%s*(.-)%s*\1")
      --[[if string.find(v,"{") then
        v = frame:preprocess(v)
      end]]
      part[k] = v
    end
    return part
  else
  	return {}
  end
end

function p.getalias(frame)
  local part = getaliastable(frame,frame.args[1])
  return tostring(part[frame.args[2]])
end

function p.getaliasold(frame)
  return frame:expandTemplate({title="getalias2",args={frame.args[1],frame.args[2]}})
end

function p.sailateg(frame)
  local data = getaliastable(frame,frame.args[1])
  local out = "{{ {{{1}}}"
  for k,v in pairs(data) do
    out = out.."\n| "..k.." = "..v
  end
  return out.."\n}}"
end

-------------------------

function p.fgg(frame)
--Lua version of [[User:SiBr4/sandbox/template]], a generalized flag template

function emp2nil(x)
 if x=="" then return nil else return x end
end
function space2emp(x)
 if string.find(x,"^%s*$") then return "" else return x end
end
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

--Get input arguments
local args = require('Module:Arguments').getArgs(frame)

--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"]

--Get country data & altvar data
local data, alink, amap, asuf
if avar then
  local age = args.age or ""
  local aalias
  amap, aalias = alttable(age)
  avar = string.gsub(string.lower(avar or ""),"[ \-]","")
  avar = aalias[avar] or avar
  if not amap[avar] then error("Unknown avar") end
  local apar = {mw=amap[avar].mw;age=amap[avar].age}
  data = getaliastable(frame,country,apar)
  amap[avar].ialtvar = amap[avar].ialtvar or amap[avar].altvar
  asuf = amap[avar].altlink
  alink = data["link alias-"..amap[avar].altvar] or (clink or data["shortname alias"] or data.alias or country).." "..asuf
else
  data = getaliastable(frame,country)
  avar = ""
  amap = {[""]={altvar="",ialtvar=""}}
end

--Name and link parameters
local clink = args["clink"] or args["link"]
clink = clink or data.alias or country

local pref = args["pref"]
local suff = args["suff"] or asuf
if not pref and not suff --Default prefix
 then pref = "Flag of"
end
local yn_map = {[""]=0; ["0"]=0; ["no"]=0; ["n"]=0; ["1"]=1; ["yes"]=1; ["y"]=1}
local the = args["the"] and yn_map[args["the"]]~=0
if the and pref
 then the = "the "
elseif the
 then the = "The "
 else the = ""
end
local flink = args["flink"] or alink or space2emp((pref or "").." ")..the..clink..space2emp(" "..(suff or ""))

local name = args["name"]
if string.find(me,"e") then
  local cname = data["name alias-"..amap[avar].altvar] or data["shortname alias"] or data.alias or country
  if mn == "f" then
    name = name or space2emp((pref or "").." ")..the..cname..space2emp(" "..(suff or ""))
  else
    name = name or cname
  end
else
  if mn == "f" then
    name = name or space2emp((pref or "").." ")..the..country..space2emp(" "..(suff or ""))
  else
    name = name or country
  end
end

--Image parameters
local image = frame:getParent().args["image"] or frame.args["image"]
local placeholder = "Flag placeholder.svg"
local variant = args["variant"] or args[3] or ""
local image_map = {[""]=placeholder; ["none"]=placeholder; ["blank"]=placeholder}
if image then --Remove namespace
 image = string.gsub(image,"^[Ff][Ii][Ll][Ee]:(.*)$","%1")
 image = string.gsub(image,"^[Ii][Mm][Aa][Gg][Ee]:(.*)$","%1")
end
local iname = image_map[image] or image

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 size=size.."px" --EIS size without "px" suffix
 else size = size_map[size] or nil
end
local border = frame:getParent().args["border"] or frame.args["border"]

if iname then
  size = size or "23x15px"
  if yn_map[border]==0 then border = "" else border = "|border" end
else
  iname = data["flag alias-"..amap[avar].ialtvar.."-"..variant] or data["flag alias-"..variant] or data["flag alias-"..amap[avar].ialtvar] or data["flag alias"] 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
    if data["border-"..variant] or data["border-"..amap[avar].altvar] or data.border 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" --no text
   then text = ""
  elseif mn=="p" or mn=="f" --prefix/suffix link
   then text = "[["..flink.."|"..name.."]]"
  elseif mn=="b" --both prefix/suffix and normal country link
   then
    if pref and suff
     then text = "[["..flink.."|"..pref.."]] "..the.."[["..clink.."|"..name.."]] [["..flink.."|"..suff.."]]"
    elseif pref
     then text = "[["..flink.."|"..pref.."]] "..the.."[["..clink.."|"..name.."]]"
    elseif suff
     then text = the.."[["..clink.."|"..name.."]] [["..flink.."|"..suff.."]]"
    else
     text = the.."[["..clink.."|"..name.."]]"
    end
  elseif mn=="d" --data template
   then --check if redirect
    if require('Module:Redirect').luaIsRedirect("Template:Country data "..country)
     then text = "<span class=\"plainlinks\">["..mw.title.new("Template:Country data "..country):fullUrl("redirect=no").." "..name.."]</span>"
     else text = "[[Template:Country data "..country.."|"..name.."]]"
    end
  elseif mn=="u" --unlinked
   then text = name
  else --country link (default)
   text = "[["..clink.."|"..name.."]]"
  end
end

--Build image
local ilink = args["ilink"]
if not ilink then
  if mi=="x" or (iname==placeholder and image~=placeholder) --no image/invisible image
   then iname = placeholder border = "" ilink = "|link=" am = ""
  elseif mi=="i" --image page link
   then ilink = ""
  elseif mi=="c" --country link
   then ilink = "|link="..clink
  elseif mi=="p" or mi=="f" --prefix/suffix link
   then ilink = "|link="..flink
  elseif mi=="d" --data template
   then --check if redirect
    if require('Module:Redirect').luaIsRedirect("Template:Country data "..country)
     then ilink = "|link="..mw.title.new("Template:Country data "..country):fullUrl("redirect=no")
     else ilink = "|link=Template:Country data "..country
    end
  else --unlinked (default)
   ilink = "|link="
  end
end
local image = "[[File:"..iname.."|"..size..border..ilink.."|alt="..am.."]]"

--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" --name only
   then out = text
  elseif ms=="x" --no separator
   then out = text.."<span class=\"flagicon\">"..image.."</span>"
  elseif ms=="n" --non-breaking space
   then out = text.."<span class=\"flagicon\">&nbsp;"..image.."</span>"
  elseif ms=="l" --line break
   then out = text.."<span class=\"flagicon\"><br/>"..image.."</span>"
  elseif ms=="t" --table cell
   then 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/size").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" --name only
   then out = text
  elseif ms=="x" --no separator
   then out = "<span class=\"flagicon\">"..image.."</span>"..text
  elseif ms=="n" --non-breaking space
   then out = "<span class=\"flagicon\">"..image.."&nbsp;</span>"..text
  elseif ms=="l" --line break
   then out = "<span class=\"flagicon\">"..image.."<br/></span>"..text
  elseif ms=="t" --table cell
   then 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/size").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") --avoid wrapping
 then out = "<span class=\"nowrap\">"..out.."</span>"
end

return out

end

function alttable(age)

local alt_map = { --not yet complete
["fb"]={altlink="national football team";altvar="football"};
["fbu"]={altlink="national under-"..age.." football team";altvar="football";age="under-"..age};
["fbw"]={altlink="women's national football team";altvar="football";mw="women's"};
["fbwu"]={altlink="women's national under-"..age.." football team";altvar="football";mw="women's";age="under-"..age};
["ru"]={altlink="national rugby union team";altvar="rugby union"};
["airforce"]={altlink="Air Force";altvar="air force"};
["army"]={altlink="Army";altvar="army"};
["navy"]={altlink="Navy";altvar="navy",ialtvar="naval"}
}

local alt_aliases = {
["football"]="fb";
["rugbyunion"]="ru"
}

return alt_map, alt_aliases

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.rgnvbx(frame)

local function blank(s)
  if string.find(s or "","^%s*$") then return nil else return s end
end
local function yn(s,def)
  if s then
    local yn_map = {yes=1, y=1, ["true"]=1, ["1"]=1, no=0, n=0, ["false"]=0, ["0"]=0, [""]=0}
    return yn_map[string.lower(s)]
  else
    return def
  end
end

local args = require("Module:Arguments").getArgs(frame, {removeBlanks = false, trim = false})
local nbargs = {
  name = args.name or error("No name parameter"),
  state = args.state or "autocollapse",
  titlestyle = args.titlestyle,
  bodystyle = args.bodystyle,
  abovestyle = args.abovestyle,
  belowstyle = args.belowstyle,
  groupstyle = args.groupstyle,
  liststyle = args.liststyle,
  listclass = "hlist",
  image = args.image,
  above = args.above,
}

local data
if blank(args.data)
  then data = mw.loadData(args.data)
  else error("No data page specified")
end

local pref = blank((args.prefix or "").." ") or blank(args[1]) or ""
local suff = blank(" "..(args.suffix or "")) or blank(args[2]) or ""
local art
if args.article
  then art = (yn(args.article,0)~=0)
  else art = (pref~="" and suff=="")
end
local nrl = (yn(args.noredlinks,0)~=0)

if args.title
  then nbargs.title = args.title
  else
  	local linkart = (art and data.region_the) and (pref=="" and "The " or "the ") or ""
    local link = pref..linkart..(data.region or error("No region parameter"))..suff
    if nrl and mw.title.new(link).exists
      then nbargs.title = "[["..link.."]]"
      else nbargs.title = link
    end
end

for i = 1, (data.ngroups or 1), 1 do
  local gdata = data["group"..i].data
  local list = mw.html.create("ul")
  for j,country in ipairs(gdata) do--for j = 1, data["group"..i].ndata, 1 do
    local code = country[1]
    local switch = country.switch
    if yn(args[code],1)~=0 and (yn(args[switch or ""],1)~=0 or yn(args[code],2)~=2) then
      local name = args[code.."_name"] or country[2]
      local lname = country.link or country[2]
      local lart = (art and country.the) and "the " or ""
      local link
      if yn(args[code],0)==1
      	then link = pref..lart..lname..suff
        else link = args[code] or (pref..lart..lname..suff)
      end
      if (not nrl or mw.title.new(link).exists) and (not country.hidden or yn(args[code],0)~=0 or yn(args[switch],0)~=0) then
        list:tag("li"):wikitext("[["..link.."|"..name.."]]")
      end
    end
  end
  nbargs["group"..i] = data["group"..i].name
  nbargs["list"..i] = tostring(list)
end

return require("Module:Navbox")._navbox(nbargs)

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