Modul:Statsledere2

Fra Wikipedia, den frie encyklopedi
Moduldokumentasjon
local p = {}

-- Returnerer de gjeldende årstallene for stillingshaveren, med utheving for nåværende år
function aarstall(x,y,z)
	if x == y then
		return "'''" .. x .. "'''"
	elseif x == z then
		if y == 0 then
			return "'''" .. x .. "'''–"
		else
			return "'''" .. x .. "'''–" .. y
		end
	elseif y == z then
		return x .. "–'''" .. y .. "'''"
	else
		if y == 0 then
			return x .. "–"
		else
			return x .. "–" .. y
		end
	end
end

function aarsjekk(a,b,c)
	if c == nil then
		return false
	end
	if (c >= a) and ((c <= b) or (b == 0)) then
		return true
	else
		return false
	end
end

function p.settsammen(frame)
	if pcall(require, "Modul:Statsledere2/" ..frame.args[1]) then
		konfig = require("Modul:Statsledere2/" .. frame.args[1])
	else
		return "* <span class=\"error\">Konfigurasjonsfilen «Modul:Statsledere2/" .. frame.args[1] .. "» finnes ikke! [" .. tostring(mw.uri.fullUrl("Modul:Statsledere2/" .. frame.args[1], { ["action"]="edit", ["editintro"]="Mal:Statsledere2/editintro"})) .. " Klikk her] for å opprette den.</span>"
	end
	local definisjoner = konfig["definisjoner"]
	local land = definisjoner["land"]
	local land1 = definisjoner["land1"]
	local aar = tonumber(frame.args[2] or mw.title.getCurrentTitle().text:sub(-4))
	local nivaa = (definisjoner["nivaa"] or 0)
	local function punkter(x,y)
		return string.rep("*",nivaa+x+(y or 0))
	end
	if definisjoner["brukflagg"] then
		landnavn = frame:expandTemplate{title="flagg", args={ land1, aar } } .. " " .. frame:expandTemplate{title="flagg", args={ land, aar, "lenke" } }
	else
		landnavn = "[[" .. land .. "]]"
	end
	landlinje = punkter(1) .. "'''" .. landnavn .. "'''"
	if definisjoner["landforklaring"] then
		landlinje = landlinje .. " (" .. definisjoner["landforklaring"] .. ")\n"
	else
		landlinje = landlinje .. "\n"
	end
	local finnes = 0
	for _,v in ipairs(definisjoner["eksisterte"]) do
		if aarsjekk(v[1],v[2],aar) then
			finnes = finnes + 1
		end
	end
	if finnes == 0 then
		return landlinje .. punkter(2) .. "<span class=\"error\">Ifølge [[Modul:Statsledere2/" .. frame.args[1] .. "|konfigurasjonen]] fantes ikke " .. land .. " som selvstendig stat i " .. (aar or '(ukjent)') .. ".</span>"
			.. "[[Kategori:Sider med konfigurasjonsfeil fra Lua-moduler]]"
	end
	if (konfig["spesialår"] and konfig["spesialår"][aar]) then
		spesialtekst = table.concat(konfig["spesialår"][aar],"\n")
		return landlinje .. spesialtekst
	else
		if (konfig["notiser"] and konfig["notiser"][aar]) then
			landlinje = landlinje .. punkter(2) .. "''" .. konfig["notiser"][aar] .. "''\n"
		end
		local ledertypeliste = {}
		local ledertypedef = {}
		for _,v in ipairs(definisjoner["ledertyper"]) do
			local startaar = v[1]
			local sluttaar = v[2]
			local ledertype = v[3]
			local ledertittel = v[4]
			local lederartnavn = v[5]
			local lederartvis = v[6]
			local ledertabellnavn = v[7]
			local nivaa2 = (v["nivaa"] or 0)
			if aarsjekk(startaar,sluttaar,aar) then
				table.insert(ledertypeliste, ledertype)
				ledertypedef[ledertype] = { ledertittel, lederartnavn, lederartvis, ledertabellnavn, nivaa2 }
			end
		end
		local function linjegenerator(aar,liste,verv)
			tabell_med_ledere = {}
			for _,v in ipairs(liste) do
				local startaar = v[1]
				local sluttaar = v[2]
				local person = v[3]
				local tittel = (v["tittelvariant"] or ledertypedef[verv][3])
				if aarsjekk(startaar,sluttaar,aar) then
					tekst = person .. ", [[" .. ledertypedef[verv][2] .. "|" .. tittel .. "]] (" .. aarstall(startaar,sluttaar,aar) .. ")"
					if v["ref"] then
						tekst = tekst .. frame:extensionTag{ name = "ref", content = v["ref"] }
					end
					table.insert(tabell_med_ledere, tekst)
				end
			end
			return tabell_med_ledere
		end
		sulamitten = {}
		for _,v in ipairs(ledertypeliste) do
			local ledertype = ledertypedef[v][1]
			local lederliste = konfig[ledertypedef[v][4]]
			local nivaa3 = ledertypedef[v][5]
			if #linjegenerator(aar,lederliste,v) == 1 then
				lederpunkt = punkter(2,nivaa3) .. ledertype .. " – " .. linjegenerator(aar,lederliste,v)[1]
			else
				lederpunkt = punkter(2,nivaa3) .. ledertype .. " –\n" .. punkter(2,nivaa3) .. "#" .. table.concat(linjegenerator(aar,lederliste,v),"\n" .. punkter(2,nivaa3) .. "#")
			end
			table.insert(sulamitten, lederpunkt)
		end
		if definisjoner["territorier"] then
			territorieliste = {}
			for _,v in ipairs(definisjoner["territorier"]) do
				if aarsjekk(v[1],v[2],aar) then
					table.insert(sulamitten, frame:callParserFunction{name = "#invoke", args = { "Statsledere2", "settsammen", frame.args[1] .. "/" .. v[3], aar }} ) -- Skittent, men det funker!
				end
			end
		end
		return landlinje .. table.concat(sulamitten,"\n")
	end
end

return p