Modul:Stolpčni diagram

Iz Wikipedije, proste enciklopedije
local p = {}
	      
local max_visina = 8 -- 8 em; nastaviti tudi višino celice v css-ju predloge

function p.diagram(frame)
	local podatki = {}
	
	local targs = frame:getParent().args --template arguments in template call
	--local margs = frame.args --module arguments in #invoke
	
	--pojdi skozi vse parametre; večinoma so to pari aN/pN; v hr. izvirniku tudi parametri oblike pGGGG
	for k, v in pairs(targs) do
			
			local n = string.match(k, "^a(%d%d?)$") -- do 99 parov parametrov: a1/p1 … a99/p99
			if n then
				local g = tonumber(v)
				local p = tonumber(targs["p"..n])
				--mw.log(g,p)
				if g and p then
					podatki[g] = p
					end
				end
	end
	
	--leta prisotna v predlogi; potrebujemo jih v tabeli zaradi razvrščanja
	local leta = {}
	local podatki_max = 0
	for k, v in pairs(podatki) do
		table.insert(leta, k)
		if podatki[k]>podatki_max then podatki_max=podatki[k] end
	end
	
	table.sort(leta)

-- možnost nastavitve napisa y-osi
    local y_napis = targs["y_napis"] or ""
	
--html tabela, v kateri bo vsaka celica vsebovala en stolpec (div) stolpčnega diagrama
--tukaj ustvarjamo celice v dveh vrsticah
	local tr1 = mw.html.create( 'tr' )
	tr1 : tag("td") : addClass("kbs_ordinata") 
	      : tag("span") : addClass("kbs_ordinata") : wikitext(y_napis) : done()
    local tr2 = mw.html.create( 'tr' )
    tr2 : tag("td") : done()
	
	prikazi = leta

	local prva, zadnja = Nil, Nil
    for _, g in ipairs(prikazi) do
    	if leta[1]<=g and g<=leta[#leta] then --ne prikazuj lijevo i desno od jedinih poznatih, ali prikaži između
    		prva = prva or g
    		zadnja = g
	    	local podatek = podatki[g] or 0
	    	local biljeg = (podatek>0 and podatek) or "" -- do not show 0 or Nil
	        tr1 : tag("td") : addClass("kbs_za_stolpce") 
	              : tag("div") : addClass("kbs_podatki")  : wikitext(biljeg) : done()
	              : tag("div") : addClass("kbs_stolpci") 
	                 : cssText("height:"..0.01*math.floor(100*podatek*max_visina/podatki_max).."em;") : done()
	        tr2 : tag("td") : addClass("kbs_leta") : wikitext(g) : done()
    		end
    end

-- naslov nad tabelo z diagramom
	local naslovnavrstica = mw.html.create( 'div' ) : addClass("kbs_naslov")
	naslov = (targs["naslov"] and (targs["naslov"] ~= "") and targs["naslov"] or "")
    

-- tabela za stolpčni diagram
    local tbl = mw.html.create( 'table' )
    tbl : addClass("kbs_tabela")
        : node(tr1)
        : node(tr2)
    
    local ttl = mw.html.create( 'div' )
    ttl : addClass("kbs_naslov") : wikitext(naslov)
    
    local tbl_ttl = mw.html.create( 'div' )
    tbl_ttl : addClass("kbs_tabela_scrollable")
    		: tag("div") : addClass("kbs_tabela")
    		   : node(ttl)
    		   : node(tbl)
    		   : done()

-- opomba:… in viri:… izpod diagrama
    local opomba = targs["opomba"] or ""
    local viri = ""
   
    viri = targs["viri"] or viri
    
    local nte = mw.html.create( 'div' ) : addClass("kbs_opomba")
    if opomba ~="" then
    	nte : wikitext("'''Opomba''': " .. opomba .. " ")
    	end
	if viri ~="" then
		nte : wikitext("'''Viri''': " .. viri)
	end

	local nap_izv = mw.html.create( 'div' )
	nap_izv : addClass("kbs_opomba_nonscrollable") 
			: node(nte)

	local vse = mw.html.create() : node(tbl_ttl) : node(nap_izv)
	return vse
end
 
return p