Hoppa till innehållet

Modul:Kolumner

Från Plutten
Version från den 13 februari 2026 kl. 17.27 av Vibbe (diskussion | Bidrag) (Importerad fran sv.wikipedia.org via wiki_copy.py)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)

Dokumentationen för denna modul kan skapas på Modul:Kolumner/dok

local p = {}
 
-- kolumner, liknande funktion som mallen {{kolumner}} som använder CSS-kod som inte fungerar i vissa webbläsare (t ex MSIE före version 10)
--
-- parametrar 
-- ==========
-- antal (frivillig): anger antalet kolumner, om inget värde anges blir det två kolumner
-- kolumnbredd (frivillig): parameterns värde används som bredden för varje kolumn. kolumnbredd kan anges absolut i px, t ex 250px, eller relativ, t ex 20%. 
-- totalbredd (frivillig): parameterns värde används för den sammanlagda bredden för alla kolumner. totalbredd kan anges absolut i px, t ex 500px, eller relativ, t ex 75%. 
--                         (om totalbredd anges så ignoreras kolumnbredd)
-- liten (frivillig): om parameterns värde = "ja" blir det en något mindre fontstorlek (90 %)

function p.kolumner(frame)
	local antal_kolumner = tonumber(frame.args['antal']) or 2
	local style = ""
	if (frame.args['liten'] == "ja") then style="style='font-size:90%;'" end
	local kolumnbredd = frame.args['kolumnbredd']
	local totalbredd = frame.args['totalbredd']
	local width = ""
	if (kolumnbredd) then 
		width="width=" .. kolumnbredd
		if (string.match(kolumnbredd,"(%d+)%%")) then notusedpercent = (100-antal_kolumner*tonumber(string.match(kolumnbredd,"(%d+)%%"))) .. "%" end
	end
	if (totalbredd) then
		if (string.match(totalbredd,"(%d+)px")) then width = "width=" .. math.floor(tonumber(string.match(totalbredd,"(%d+)px"))/antal_kolumner) .. "px" end
		if (string.match(totalbredd,"(%d+)%%")) then 
			width = "width=" .. math.floor(tonumber(string.match(totalbredd,"(%d+)%%"))/antal_kolumner) .. "%" 
			notusedpercent = (100-math.floor(tonumber(string.match(totalbredd,"(%d+)%%")))) .. "%"
		end
	end
	local antal_poster = 0
	for i,v in ipairs(frame.args) do antal_poster = i end
	local antal_per_kolumn = math.floor(antal_poster / antal_kolumner) 
	local kolumner_med_extra = antal_poster % antal_kolumner 
	local res = "{| "
	if (notusedpercent) then res = res .. "width=100% " end
	res = res ..style.."\n"
	local k = 0
	for i = 0, antal_kolumner - 1 do
		res = res .. "|valign=top " .. width .. "|\n"
		local jmax = antal_per_kolumn
		if (i < kolumner_med_extra) then jmax = jmax + 1 end
		for j = 1, jmax do
			k = k + 1
			res = res .. frame.args[k] .. "" 
		end 
	end
	if (notusedpercent) then res = res .. "|width=" .. notusedpercent .. "|\n" end 
	return res .. "|}"
end

-- kolumner_manuell, liknande funktionen kolumner men användaren styr var ny kolumn ska infogas genom parameternvärdet %bryt
--
-- parametrar 
-- ==========
-- kolumnbredd (frivillig): parameterns värde används som bredden för varje kolumn. kolumnbredd kan anges absolut i px, t ex 250px, eller relativ, t ex 20%. 
-- liten (frivillig): om parameterns värde = "ja" blir det en något mindre fontstorlek (90 %)
-- brytmarkering (frivillig): det värde som anges här styr vilket parametervärde som används för kolumnbrytning. Om inget värde anges används "%bryt" för att markera ny kolumn.

function p.kolumner_manuell(frame)
	local style = ""
	local brytmarkering = frame.args['brytmarkering'] or "%bryt"
	if (frame.args['liten'] == "ja") then style="style='font-size:90%;'" end
	local kolumnbredd = frame.args['kolumnbredd']
	local width = ""
	if (kolumnbredd) then 
		width="width=" .. kolumnbredd
	end
	local antal_poster = 0
	for i,v in ipairs(frame.args) do antal_poster = i end
	local res = "{| "
	res = res ..style.."\n"
	local k = 0
	res = res .. "|valign=top " .. width .. "|\n"
	for i = 1, antal_poster do
		if string.gsub(frame.args[i],"\n","") == brytmarkering then
			res = res .. "|valign=top " .. width .. "|\n"
		else  
			res = res .. frame.args[i] .. ""
		end 
	end
	return res .. "|}"
end

return p