Modul:Popis stanovništva

Dokumentacija modula[vidi] [uredi] [povijest] [osvježi]

Kategorije koje dodaje ovaj modul popisane su na:


local p = {}
	
godinePopisa = {'2001.', '2011.', '2021.'}

local entityID = mw.wikibase.getEntityIdForCurrentPage()

function sorter(tablica)
	local kopija = {}
	for _, v in pairs(tablica) do
		kopija[#kopija+1] = v
	end
	
	table.sort(kopija, compare)
	return kopija
end

function compare(a,b)
--	mw.logObject(a.ime)
	return a.ime < b.ime
end


function printOpcinaBezNaselja(zupanija, kratica, opcina)
	ret = '|-\n| colspan="2"|\n'
		.. '{| style="width: 100%;"\n|-\n| colspan="4" | <hr>\n'
		.. '|-\n| colspan="4" style="text-align: center;" | <b>Broj stanovnika</b><br />'
		.. 'Općina ' .. opcina.ime .. ', ' .. zupanija .. '&lsqb;[[Modul:Popis stanovništva/'.. kratica .. '|uredi]]&rsqb;\n'
		.. '|-\n! 2001. || 2011. || 2021.\n'
		.. '|-\n| '.. opcina.popis2001 ..' ||| '.. opcina.popis2011 .. ' || '.. opcina.popis2021 .. '\n'
		.. '|-\n| colspan="4" | <hr>'
		.. '\n|}\n'
		
	return ret
end


function printOpcinaSaNaseljima(zupanija, kratica, opcina)
	local uvlaka = ''
	local kopija = sorter(opcina.naselja)
	
	ret = '{| class="wikitable sortable" style="text-align:center;" \n|-\n'
		.. '|+ colspan="4" style="text-align: center;" | <b>Broj stanovnika</b><br />'
		.. 'Općina ' .. opcina.ime .. ', ' .. zupanija .. ' &lsqb;[[Modul:Popis stanovništva/'.. kratica ..'/'.. opcina.ime .. '|uredi]]&rsqb;\n'
		.. '|-\n! style="width:20%;"| Naselje ||style="width:20%;"| 2001. ||style="width:20%;"| 2011. ||style="width:20%;"| 2021.\n'
		
		
	for _, v in ipairs(kopija) do
		ret = ret .. '|-\n| style="width:20%;"|' .. uvlaka .. v.ime ..' ||style="width:20%;"| '.. v.popis2001 ..' ||style="width:20%;"| '.. v.popis2011 .. ' ||style="width:20%;"| '.. v.popis2021 .. '\n'
		end
	
	
	--ret=ret.. '|-\n|Ukupno||1||2||3\n|}\n'
	ret=ret .. '|-\n! scope="row" style="width:20%;"| Ukupno &lsqb;[[Modul:Popis stanovništva/'.. kratica .. '|uredi]]&rsqb; ||style="width:20%;"| '.. opcina.popis2001 ..' ||style="width:20%;"| '.. opcina.popis2011 .. ' ||style="width:20%;"| '.. opcina.popis2021 .. '\n'
	.. '\n|}\n'
--	.. '\n|}'
	
	return ret
end

function printOpcinaSaNaseljimaInfobox(zupanija, kratica, opcina)
	local uvlaka = ''
	local kopija = sorter(opcina.naselja)
	
	
	ret = '|-\n|colspan="2"|\n'
		.. '{| style="width: 100%;"\n|-\n'
		.. '| colspan="5" style="text-align: center;" | <b>Broj stanovnika</b><br />'
		.. opcina.ime .. ', ' .. zupanija .. ' &lsqb;[[Modul:Popis stanovništva/'.. kratica ..'/'.. opcina.ime .. '|uredi]]&rsqb;\n'
		.. '|-\n! colspan="2" style="padding-left: 15px; width:20%;"| Naselje ||style="width:20%;"| 2001. ||style="width:20%;"| 2011. ||style="width:20%;"| 2021.\n'
		.. '|-\n{| class="mw-collapsible mw-collapsed nomobile" style="width:100%"\n'
		.. '|+ class="nowrap" style="font-size: 80%; padding: 0;"| Popis naselja\n'
		
		local zbroj2001 = 0
		local flag2001 = 'no'
		local zbroj2011 = 0
		local flag2011 = 'no'
		local zbroj2021 = 0
		local flag2021 = 'no'
		
	for _, v in ipairs(kopija) do
		ret = ret .. '|-\n| style="width:20%;"|' .. uvlaka .. v.ime ..' ||style="width:20%;"| '.. v.popis2001 ..' ||style="width:20%;"| '.. v.popis2011 .. ' ||style="width:20%;"| '.. v.popis2021 .. '\n'

		zbroj2001 = zbroj2001 + (tonumber(v.popis2001) or 0)
		zbroj2011 = zbroj2011 + (tonumber(v.popis2011) or 0)
		zbroj2021 = zbroj2021 + (tonumber(v.popis2021) or 0)
	end
	
	ret=ret.. '\n|-\n| colspan="4" | <hr>\n'
	..'|}\n|-\n'
	.. '| colspan="2"|\n{| style="width: 100%;"\n'
	.. '|-\n|style="width:20%;"| Ukupno &lsqb;[[Modul:Popis stanovništva/'.. kratica .. '|uredi]]&rsqb; ||style="width:20%;'
		
	if not (zbroj2001 == tonumber(opcina.popis2001)) and not (zbroj2001 == 0) then ret=ret .. 'color: red;' flag2001 = 'yes' end
	ret = ret .. '"| '.. opcina.popis2001 ..' ||style="width:20%;'
		
	if not (zbroj2011 == tonumber(opcina.popis2011)) and not (zbroj2011 == 0) then ret=ret .. 'color: red;' flag2011 = 'yes' end
	ret = ret .. '"| '.. opcina.popis2011 ..' ||style="width:20%;'
	
	if not (zbroj2021 == tonumber(opcina.popis2021)) and not (zbroj2021 == 0) then ret=ret .. 'color: red;' flag2021 = 'yes' end 
	ret = ret .. '"| '.. opcina.popis2021 ..'\n'
	.. '|-\n| colspan="4" | <hr>'
	.. '\n|}'
--	.. '\n|}'
	
	if flag2001 == 'yes' or flag2011 == 'yes' or flag2021 == 'yes' then 
		ret = ret .. '[[Kategorija:Popis stanovništva: pogreška u zbroju]]'
	end
	
	if zbroj2001 == 0 or zbroj2011 == 0 then 
		ret = ret .. '[[Kategorija:Popis stanovništva: nepotpuni podaci]]'
	end
	
	return ret..'\n'
end

function printNaselje(zupanija, kratica, opcina, naselje)
	local uvlaka = 'style="padding-left: 20px;" | '
	
	ret = '|-\n| colspan="2" style="text-align: center;" | <b>Broj stanovnika</b><br />'
		.. naselje.ime .. ' (' .. opcina .. ', ' .. zupanija .. ')' 
		.. ' &lsqb;[[Modul:Popis stanovništva/'.. kratica ..'/'.. opcina .. '|uredi]]&rsqb;\n'
	.. '|-\n|'.. uvlaka .. '<b>2001.</b> || ' .. naselje.popis2001 .. '\n'
	.. '|-\n|'.. uvlaka .. '<b>2011.</b> || ' .. naselje.popis2011 .. '\n'
	.. '|-\n|'.. uvlaka .. '<b>2021.</b> || ' .. naselje.popis2021 .. '\n'
	.. '|-\n| colspan="2" | <hr>\n'
	
	return ret
end

function odrediZupaniju()
	local zupanijaValue = string.lower(mw.getCurrentFrame():getParent().args["županija"] or 'nema')
	local zupanijaKratica = "AAA";
	if zupanijaValue:match("bjelovarsko") then zupanijaKratica = "BBŽ"
		elseif zupanijaValue:match("brodsko") then zupanijaKratica = "BPŽ"
		elseif zupanijaValue:match("dubrovačko") then zupanijaKratica = "DNŽ"
		elseif zupanijaValue:match("grad zagreb") then zupanijaKratica = "GZG"
		elseif zupanijaValue:match("istarska") then zupanijaKratica = "ISŽ"
		elseif zupanijaValue:match("karlovačka") then zupanijaKratica = "KAŽ"
		elseif zupanijaValue:match("koprivničko") then zupanijaKratica = "KKŽ"
		elseif zupanijaValue:match("krapinsko") then zupanijaKratica = "KZŽ"
		elseif zupanijaValue:match("ličko") then zupanijaKratica = "LSŽ"
		elseif zupanijaValue:match("međimurska") then zupanijaKratica = "MEŽ"
		elseif zupanijaValue:match("osječko") then zupanijaKratica = "OBŽ"
		elseif zupanijaValue:match("primorsko") then zupanijaKratica = "PGŽ"
		elseif zupanijaValue:match("požeško") then zupanijaKratica = "PSŽ"
		elseif zupanijaValue:match("splitsko") then zupanijaKratica = "SDŽ"
		elseif zupanijaValue:match("sisačko") then zupanijaKratica = "SMŽ"
		elseif zupanijaValue:match("virovitičko") then zupanijaKratica = "VPŽ"
		elseif zupanijaValue:match("vukovarsko") then zupanijaKratica = "VSŽ"
		elseif zupanijaValue:match("varaždinska") then zupanijaKratica = "VŽŽ"
		elseif zupanijaValue:match("zadarska") then zupanijaKratica = "ZDŽ"
		elseif zupanijaValue:match("zagrebačka") then zupanijaKratica = "ZGŽ"
		elseif zupanijaValue:match("kninska") then zupanijaKratica = "ŠKŽ"		-- "šibensko" vraća grešku !?
	end
	mw.log(zupanijaValue, zupanijaKratica)
	return zupanijaKratica
end


local function has_value (tab, val)
    for index, value in ipairs(tab) do
        if value == val then
            return true
        end
    end
    return false
end

function p.main(frame)
	local ret = ''
	local brojac = 0
	
	local dovrseneZupanije = {"BBŽ", "BPŽ", "DNŽ", "ISŽ", "KAŽ", 
							"KKŽ", "KZŽ", "LSŽ", "MEŽ", "OBŽ", 
							"PGŽ", "PSŽ", "SDŽ", "SMŽ", "VPŽ",
							"VSŽ", "VŽŽ", "ZDŽ", "ZGŽ", "ŠKŽ"}
	
	
	local kratica = odrediZupaniju()
	
	if has_value(dovrseneZupanije, kratica) then 
	ulaz = require("Modul:Popis stanovništva/" .. kratica)
	else if kratica == "GZG" then 
			return ''
		else
			return '[[KT:Popis stanovništva - pogreška u imenu županije]]'			-- nisu još sve županije popunjene
		
		end
	end
	
	if kratica == "AAA" then
	ret = ret .. '\n[[KT:Popis stanovništva - pogreška u imenu županije]]'
	end
	
	local naslov = mw.title.getCurrentTitle().fullText:gsub(' %b()', '')			-- uklanja zagrade iz naslova)
	
		for mk, mv in pairs(ulaz) do -- opcina, grad, ime, kratica
			if type(mv) == 'table' then -- table opcina ili grad
				for k, v in pairs(mv) do -- qbroj, detalji
					if k == entityID or v.ime == naslov then -- opcina ili grad
						mw.log('opcina/grad found: '.. k..', ime ' ..v.ime )
							if frame.args[1]=='tablica' then
								ret = ret .. printOpcinaSaNaseljima(ulaz.ime, ulaz.kratica, v)
							else
								ret = ret .. printOpcinaSaNaseljimaInfobox(ulaz.ime, ulaz.kratica, v)
								brojac = brojac+1
							end
						
					else
						for tk, tv in pairs(v.naselja) do -- qbroj, detalji naselja
							if tk == entityID or tv.ime == naslov then
								mw.log ('naselje found: ' .. tv.ime..', opcina ' ..v.ime)
								ret = ret .. printNaselje(ulaz.ime, ulaz.kratica, v.ime, tv)
								brojac = brojac+1
							end
						end
					end	
				end
			end
		end
--	end

	if brojac > 1 then
		ret = ret .. '\n[[KT:Popis stanovništva s višestrukim unosima]]'
	end
	
	return ret
	
end

return p