Dokumentationen för denna modul kan skapas på Modul:Sandlådan/Larske/Testmodul2/dok

local p = {}
require "mw.ustring"

--[[
  Flikar, generar kod som använder HTML-klassen "gadget-tabs" med flera för att visa innehållsflikar
  
  parametrar
  ==========
  totalstil: (frivillig) css-kod för hela området med flikar och innehåll
  flikknappradstil: (frivillig) css-kod för raden med flikar
  flikstil: (frivillig) css-kod för alla flikar
  flikstilN: (frivillig) css-kod för flik N
  flikrubrikstil: (frivillig) css-kod för alla flikar
  flikrubrikstilN: (frivillig) css-kod för flik N
  flikrubrikN: (obligatorisk för minst N=1) text på flik N 
  flikinnehållgruppstil: (frivillig) css-kod för området med flikinnehåll
  flikinnehållstil (frivillig) css-kod för innehållet för alla flikar
  flikinnehållstilN (frivillig) css-kod för innehållet för flik N
  flikinnehållN (obligatorisk för minst N=1) innehållet för flik N

]]

function p.Flikar(frame)
	local res = ''
	local args 
	if frame.args['flikrubrik1'] then 
		args= frame.args
	else
		args = frame:getParent().args
	end
	local totalstil = args['totalstil'] or ''
	local flikknappradstil = args['flikknappradstil'] or 'padding-bottom:2px; border-style:solid; border-width:0px 0px 1px 0px;'
	local flikrubrikstil = args['flikrubrikstil'] or 'border:solid black 1px; border-radius:10px 10px 0px 0px; padding:5px 10px; margin-right:2px; background:lightgrey;'
	local flikinnehallgruppstil = args['flikinnehållgruppstil'] or ''
	local flikinnehallstil = args['flikinnehållstil'] or 'border-style:solid; border-width:0px 1px 1px 1px; padding:5px;'
	res = res .. '<div class="gadget-tabs" style="' .. totalstil .. '">'
		res = res .. '<div class="gadget-tabs-buttonwrapper" style="' .. flikknappradstil .. '">'
			local n = 1
			while args['flikrubrik'..n] do
		   		local flikrubrikstilN = args['flikrubrikstil' .. n] or ''
		   		res = res .. '<span class="gadget-tabs-buttonlabel" style="' .. flikrubrikstil .. flikrubrikstilN .. '">' .. args['flikrubrik' .. n] .. '</span>'
		   		n = n + 1 	
	    	end
		res = res .. '</div>'
		res = res .. '<div class="gadget-tabs-contentwrapper" style="' .. flikinnehallgruppstil .. '">'
			n = 1
			while args['flikinnehåll'..n] do
				local flikinnehallstilN = args['flikinnehållstil' .. n] or ''
				res = res .. '<div class="gadget-tabs-content" style="' .. flikinnehallstil .. flikinnehallstilN .. '">' .. args['flikinnehåll' .. n] .. '</div>'
				n = n + 1	
			end
		res = res .. '</div>'
	res = res .. '</div>'

	return res
end



--[[
  Vagnummerskylt, genererar kod för vägskylt med nummer
  Skyltarna länkar automatiskt till artikeln för respektive väg (gäller endast Europavägar, Riksvägar och Länsvägar med nummer lägre än 500.
 
  parametrar
  ==========
  1 (typ):  
    - E för europaväg
    - <tom> för väg med nummer under 500
    - <länsbokstav> för vägar med nummer 500 eller högre (denna funktion är inte implementerad än)
    - alt för en omledningsvägnummerskylt (blå text mot vit botten). 
   2 (nr): vägens nummer
   höjd: (frivillig) antal px, om inget värde anges blir höjden 17px
   länk: (frivillig) länk som bilden ska länka till, om länk ej anges fås en länk till Europaväg, Riksväg respektive Länsväg automatiskt
]]

function p.Vagnummerskylt(frame)
	local typ= frame.args[1] or ''
	local nr = frame.args[2] or ''
	local hojd = frame.args['höjd'] or '17'
	local link = frame.args['länk'] or ''
--color	
	local color = 'blå'
 	if (typ == 'E') then color = 'grön' end	
	if (typ == 'alt') then color = 'white' end
--link
    if (link ~= '') then
    	link = '|länk=' .. link
	else
		link = '|länk=' -- ingen länk för sekundära länsvägar
 		if ((tonumber(nr) or 999) < 500) then link = '|länk=Länsväg ' .. nr end
		if ((tonumber(nr) or 999) < 100) then link = '|länk=Riksväg ' .. nr end
		if (typ == 'E') then link = '|länk=E' .. nr end
		if (mw.ustring.sub(nr,1,1) == 'E') then link = '|länk=' .. nr end
	end
--files	
	local res = '[[Fil:Vänster - ' .. color .. '.svg|500x' .. hojd .. 'px|länk=]]'
	if (typ == 'E') then res = res .. '[[Fil:E - grön.svg|500x' .. hojd .. 'px|länk=]]' end
	for i = 1, string.len(nr) do
		res = res .. '[[Fil:' .. mw.ustring.sub(nr..'',i,i) .. ' - ' .. color .. '.svg|500x' .. hojd .. 'px|länk=]]'
	end
	res = res .. '[[Fil:Höger - ' .. color .. '.svg|500x' .. hojd .. 'px' .. link .. ']]' 
	
	return res
end

--[[
  Avfartnummerskylt, genererar kod för avfartsskylt med nummer
 
 parametrar
  ==========
  1 (nr): avfartens nummer
    länk: (frivillig) länk till önskad artikel
    höjd: (frivillig) antal px, om inget värde anges blir höjden 17px
]]

function p.Avfartnummerskylt(frame)
	local nr = frame.args[1] or ''
	local link = frame.args['länk'] or ''
	local hojd = frame.args['höjd'] or '17'
	local res = '[[Fil:Avfart - gul.svg|500x' .. hojd .. 'px|länk=' .. link .. ']]'
	for i = 1, string.len(nr) do
		res = res .. '[[Fil:' .. mw.ustring.sub(nr..'',i,i) .. ' - gul.svg|500x' .. hojd .. 'px|länk=' .. link .. ']]'
	end
	res = res .. '[[Fil:Höger - gul.svg|500x' .. hojd .. 'px|länk=' .. link .. ']]' 
	return res
end

function p.testfunktion(frame)
	local namn
	if frame.args then 
		namn = frame.args['namn']
	else
		namn = frame
	end
	return '<' .. namn .. '>'	
end

function p.newFromWikidataValue(frame)
	local upperBound = frame.upperBound or frame.amount
	local lowerBound = frame.lowerBound or frame.amount
	local diff = math.abs(tonumber(upperBound) - tonumber(frame.amount))
	local diff2 = math.abs(tonumber(lowerBound) - tonumber(frame.amount)) 
	if diff2 > diff then
		diff = diff2
	end
	-- TODO, att fixa så att inte 1234.000 'huggs av' till 1234
	local lang = mw.language.new( 'sv' )

	if diff == 0 or frame.norounding then
		return lang:formatNum(tonumber(frame.amount))
	else
		local log = -math.log10(diff)
		return lang:formatNum(p._round(frame.amount, math.ceil(log)))
	end
end

return p