Module:Croatian population data graph

local p = {}

-- ako je u predlošku popisi=HRV prikazat će sve poznate popise od 1857. do 2021.
-- bez obzira na to postoji li u članku podatak
-- bez tog parametra u predlošku, prikazat će samo godine upisane u članku
local godine_hr = {1857, 1869, 1880, 1890, 1900, 1910, 1921, 1931, 1948, 1953,
	1961, 1971, 1981, 1991, 2001, 2011, 2021, }
local izvori_hr = "[[Template:Croatian population data graph/Sources|Croatian Bureau of Statistics publications]]"
	      
local max_visina = 8 -- 8 em; podesiti i visinu ćelije u css-u predloška

function p.dijagram(frame)
	local podatci = {}
	
	local targs = frame:getParent().args --template arguments in template call
	local margs = frame.args --module arguments in #invoke
	
	--prođi kroz sve parametre; većinom su to parametri oblika pGGGG ili parovi aN/pN
	for k, v in pairs(targs) do
			local g = tonumber(string.match(k, "^p(%d%d%d%d)$")) -- parametri oblika p2021
			if g then
				local p = tonumber(v)
				--mw.log(g,p)
				if p then podatci[g] = p end
			end
			
			local n = string.match(k, "^a(%d%d?)$") -- do 99 parova parametara godina/populacija: 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
					podatci[g] = p
					end
				end
	end
	
	--godine prisutne u predlošku; trebamo ih u tablici radi sortiranja
	local godine = {}
	local podatci_max = 0
	for k, v in pairs(podatci) do
		table.insert(godine, k)
		if podatci[k]>podatci_max then podatci_max=podatci[k] end
	end
	
	table.sort(godine)
	
	
--html tablica u kojoj će svaka ćelija sadržavati jedan stupac (div) stupčastog dijagrama
--ovdje stvaramo ćelije u dvama retcima
	local tr1 = mw.html.create( 'tr' )
	tr1 : tag("td") : addClass("kbs_ordinata") 
	      : tag("span") : addClass("kbs_ordinata") : wikitext("population") : done()
    local tr2 = mw.html.create( 'tr' )
    tr2 : tag("td") : done()
	
	if (targs["popisi"]=="HRV") or (margs["popisi"]=="HRV") then
		prikazi = godine_hr
	else
		prikazi = godine
		end

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

-- naslov iznad tablice s dijagramom	
-- u predlošku: Naselje X ili Općina Y ili Grad Z
    local podatci_za = targs["područje"] and (targs["područje"] ~= "") and ("'''" .. targs["područje"] .. "''': ") 
                       or ""
                      
    local kbs = "Population trends " .. prva .."–"..zadnja
    local naslov = podatci_za .. (targs["naslov"] and (targs["naslov"] ~= "") and targs["naslov"] or kbs)

-- tablica za stupčasti dijagram   
    local tbl = mw.html.create( 'table' )
    tbl : addClass("kbs_tablica")
        : 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_tablica_scrollable")
    		: tag("div") : addClass("kbs_tablica")
    		   : node(ttl)
    		   : node(tbl)
    		   : done()

-- Napomena:… i Izvori:… ispod dijagrama
    local napomena = targs["napomena"] or ""
    local izvori = ""
    
    if (targs["popisi"]=="HRV") or (margs["popisi"]=="HRV") then
    	izvori = izvori_hr
    	end

    izvori = targs["izvor"] or izvori
    
    local nte = mw.html.create( 'div' ) : addClass("kbs_napomena")
    if napomena ~="" then
    	nte : wikitext("'''Note''': " .. napomena .. " ")
    	end
	if izvori ~="" then
		nte : wikitext("'''Sources''': " .. izvori)
	end

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

    local vte_div = mw.html.create( 'div' ) : addClass("kbs_vte")
    local vte = frame : expandTemplate{title = 'vte',
    	                               args = { 'Croatian population data graph' } }
    vte_div : node(vte)
    nap_izv : node(vte_div)

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