local export = {}
---------------------------------------------
-- DATA
---------------------------------------------
local data = {
northern = {
name = "Northern / Applai",
short = "n",
color = "#f5ffe5",
categories = {
mtprovince = {
name = "Mt. Province",
sagada = {
name = "Sagada",
lang = "xnn",
},
besao = {
name = "Besao",
lang = "xnn",
},
bauko = {
name = "<small>parts of</small> Bauko",
lang = "xnn",
},
sabangan = {
name = "<small>parts of</small> Sabangan",
lang = "xnn",
},
tadian = {
name = "<small>parts of</small> Tadian",
lang = "xnn",
},
},
},
},
southern = {
name = "Southern / Central",
short = "s",
color = "#e6fefe",
categories = {
mtprovince = {
name = "Mt. Province",
bauko = {
name = "Bauko",
lang = "kne",
},
sabangan = {
name = "Sabangan",
lang = "kne",
},
tadian = {
name = "Tadian",
lang = "kne",
},
},
benguet = {
name = "Benguet",
bakun = {
name = "Bakun",
lang = "kne",
},
buguias = {
name = "Buguias",
lang = "kne",
},
kapangan = {
name = "Kapangan",
lang = "kne",
},
kibungan = {
name = "Kibungan",
lang = "kne",
},
mankayan = {
name = "Mankayan",
lang = "kne",
},
}
},
},
others = {
name = "Others",
short = "o",
color = "#f7f0f6",
categories = {
benguet = {
name = "Benguet",
atok = {
name = "Atok",
lang = "kne",
},
tuba = {
name = "Tuba",
lang = "kne",
},
latrinidad = {
name = "La Trinidad",
lang = "kne",
},
baguio = {
name = "Baguio",
lang = "kne",
},
},
ilocos = {
name = "Ilocos Sur",
cervantes = {
name = "Cervantes",
lang = "kne",
},
quirino = {
name = "Quirino",
lang = "kne",
},
suyo = {
name = "Suyo",
lang = "kne",
},
},
launion = {
name = "La Union",
bagulin = {
name = "Bagulin",
lang = "kne",
},
santol = {
name = "Santol",
lang = "kne",
},
sudipen = {
name = "Sudipen",
lang = "kne",
},
sangabriel = {
name = "San Gabriel",
lang = "kne",
},
sugpon = {
name = "Sugpon",
lang = "kne",
},
},
}
}
}
-- convert `data` into the parameters understood by [[Module:parameters]]
function convertDataToParams()
local output = {}
for k, v in pairs(data) do
-- add the top category
output[k] = {}
output[v.short] = {alias_of = k}
-- add categories
for kcat, vcat in pairs(v.categories) do
output[kcat] = {}
output[kcat .. "-" .. v.short] = {}
-- add subcategories
for ksubcat, vsubcat in pairs(vcat) do
if ksubcat ~= "name" then
output[ksubcat .. "-" .. v.short] = {}
output[ksubcat] = {}
end
end
end
end
return output;
end
---------------------------------------------
-- ACTUAL CODE
---------------------------------------------
-- https://stackoverflow.com/a/2705804/14021404
function tablelength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
local function parseArgs(args)
local output = {}
for k, v in pairs(data) do
local outputcat = {}
-- categories
for kcat, vcat in pairs(v.categories) do
local outputsubcat = {}
-- add subcategories
for ksubcat, vsubcat in pairs(vcat) do
if ksubcat ~= "name" then
-- check for specific subcategory
if args[ksubcat .. "-" .. v.short] then
outputsubcat[ksubcat] = args[ksubcat .. "-" .. v.short]
elseif args[ksubcat] then
outputsubcat[ksubcat] = args[ksubcat]
end
-- check for category, if so then add to all subcategories
if args[kcat .. "-" .. v.short] then
outputsubcat[ksubcat] = outputsubcat[ksubcat] or args[kcat .. "-" .. v.short]
elseif args[kcat] then
outputsubcat[ksubcat] = outputsubcat[ksubcat] or args[kcat]
end
-- check for the entire supercategory
if args[k] then
outputsubcat[ksubcat] = outputsubcat[ksubcat] or args[k]
end
end
end
-- if not empty then add the subcat to the cat
if next(outputsubcat)~=nil then
outputcat[kcat] = outputsubcat
end
end
-- if not empty then add the cat to the output
if next(outputcat)~=nil then
output[k] = outputcat
end
end
return output
end
-- creates the actual table
local function createTable(frame, parsedArgs)
--mw.logObject(parsedArgs)
local output = [=[{| class="wikitable" style="clear: right;border-collapse: collapse;text-align: center; width: 100%"]=] .. "\n"
for k, v in pairs(parsedArgs) do -- each supercategory
output = output .. [[! style="background-color:]] .. data[k].color .. [[;border-right: 1px solid #aaa;border: 1px solid #aaa;" colspan=3| ]] .. data[k].name .. "\n|-\n"
for kcat, vcat in pairs(v) do -- each category (province)
output = output .. [[| style="border: 1px solid #aaa;background: ]] .. data[k].color .. [[;font-size: smaller;padding:0;" rowspan=]] .. tablelength(vcat) .. [[ | ''']] .. data[k].categories[kcat].name .. [[''' |]]
for ksubcat, vsubcat in pairs(vcat) do -- each subcategory (municipality)
output = output .. [[| style="border: 1px solid #aaa;background: ]] .. data[k].color .. [[;font-size: smaller;" | ]] .. data[k].categories[kcat][ksubcat].name .. [[ || style="background-color:]] .. data[k].color .. [[;border-right: 1px solid #aaa;border: 1px solid #aaa;"| ]] .. frame:expandTemplate{ title = "l-self", args = {data[k].categories[kcat][ksubcat].lang, vsubcat} } .."\n|-\n"
end
end
end
return output .. "|}"
end
-- the main function
function export.show(frame)
local params = convertDataToParams()
-- add parameters from template page
params["gloss"] = {}
params["title"] = {}
local parargs = frame:getParent().args
local args = require("Module:parameters").process(parargs, params)
local parsedArgs = parseArgs(args)
return createTable(frame, parsedArgs)
end
return export;