Modul:Popis stanovništva
Kategorije koje dodaje ovaj modul popisane su na:
- Popis stanovništva: velike promjene (prazna)
local p = {}
godinePopisa = {2001, 2011, 2021}
local izvor = '[https://dzs.gov.hr Državni zavod za statistiku] RH'
local azurirano = '22. rujna 2022.'
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 calculate_logarithmic_percentage_change(current_population, previous_population)
if current_population <= 10 or previous_population <= 10 then
return nil -- Handle cases where populations are non-positive
end
local log_percent_change = math.abs((math.log(current_population) - math.log(previous_population)) / math.log(previous_population)) * 100
--mw.log(previous_population, " to ", current_population, " = ", log_percent_change)
return log_percent_change
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 .. '[[[Modul:Popis stanovništva/'.. kratica .. '|uredi]]]\n'
.. '|-\n! ' .. godinePopisa[1] .. '. || ' .. godinePopisa .. '. || ' .. godinePopisa[3] .. '.\n'
.. '|-\n| '.. opcina['popis' .. godinePopisa[1]] ..' ||| '.. opcina['popis' .. godinePopisa[2]] .. ' || '.. opcina['popis' .. godinePopisa[3]] .. '\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 .. ' [[[Modul:Popis stanovništva/'.. kratica ..'/'.. opcina.ime .. '|uredi]]]\n'
.. '|-\n! style="width:20%;"| Naselje ||style="width:20%;"| ' .. godinePopisa[1] ..'. ||style="width:20%;"| ' .. godinePopisa[2] ..'. ||style="width:20%;"| ' .. godinePopisa[3] ..'.\n'
for _, v in ipairs(kopija) do
ret = ret .. '|-\n| style="width:20%;"|' .. uvlaka .. v.ime ..' ||style="width:20%;"| '.. v['popis' .. godinePopisa[1]] ..' ||style="width:20%;"| '.. v['popis' .. godinePopisa[2]] .. ' ||style="width:20%;"| '.. v['popis' .. godinePopisa[3]] .. '\n'
end
--ret=ret.. '|-\n|Ukupno||1||2||3\n|}\n'
ret=ret .. '|-\n! scope="row" style="width:20%;"| Ukupno [[[Modul:Popis stanovništva/'.. kratica .. '|uredi]]] ||style="width:20%;"| '.. opcina['popis' .. godinePopisa[1]] ..' ||style="width:20%;"| '.. opcina['popis' .. godinePopisa[2]] .. ' ||style="width:20%;"| '.. opcina['popis' .. godinePopisa[3]] .. '\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 .. ' [[[Modul:Popis stanovništva/'.. kratica ..'/'.. opcina.ime .. '|uredi]]]\n'
.. '|-\n! colspan="2" | Naselje ||style="width:20%;"| ' .. godinePopisa[1] ..'. ||style="width:20%;"| ' .. godinePopisa[2] ..'. ||style="width:20%;"| ' .. godinePopisa[3] ..'.\n'
.. '|-\n'
.. '| colspan="5" | \n'
.. '{| class="mw-collapsible mw-collapsed nomobile" style="width:100%"\n'
.. '|+ class="nowrap" style="font-size: 80%; padding: 0;"| Popis naselja\n'
local zbroj = {
[1] = 0,
[2] = 0,
[3] = 0,
}
local flag = {
[1] = 0,
[2] = 0,
[3] = 0,
}
local provjeriti = false
for _, v in ipairs(kopija) do
ret = ret .. '|-\n |' .. uvlaka .. v.ime ..' ||style="width:20%;"| '.. (v['popis' .. godinePopisa[1]] or '?') ..' ||style="width:20%;"| '.. (v['popis' .. godinePopisa[2]] or '?') .. ' ||style="width:20%;"| '.. (v['popis' .. godinePopisa[3]] or '?').. '\n'
zbroj[1] = zbroj[1] + (tonumber(v['popis' .. godinePopisa[1]]) or 0)
zbroj[2] = zbroj[2] + (tonumber(v['popis' .. godinePopisa[2]]) or 0)
zbroj[3] = zbroj[3] + (tonumber(v['popis' .. godinePopisa[3]]) or 0)
local test = calculate_logarithmic_percentage_change((tonumber(v['popis' .. godinePopisa[2]]) or 0), (tonumber(v['popis' .. godinePopisa[1]]) or 0))
local testt = calculate_logarithmic_percentage_change((tonumber(v['popis' .. godinePopisa[3]]) or 0), (tonumber(v['popis' .. godinePopisa[2]]) or 0))
-- mw.log(test, testt)
if (test ~= nil and test > 50) or (testt ~= nil and testt > 50) then
provjeriti = true
end
end
ret=ret.. '\n|-\n| colspan="4" | <hr>\n'
..'|}\n|-\n'
.. '| colspan="5"|\n{| style="width: 100%;"\n'
.. '|-\n| Ukupno<br />[[[Modul:Popis stanovništva/'.. kratica .. '|uredi]]] ||style="width:20%;'
if not (zbroj[1] == tonumber(opcina['popis' .. godinePopisa[1]])) and not (zbroj[1] == 0) then ret=ret .. 'color: red;' flag[1] = 1 end
ret = ret .. '"| '.. (opcina['popis' .. godinePopisa[1]] or '?') ..' ||style="width:20%;'
if not (zbroj[2] == tonumber(opcina['popis' .. godinePopisa[2]])) and not (zbroj[2] == 0) then ret=ret .. 'color: red;' flag[2] = 1 end
ret = ret .. '"| '.. (opcina['popis' .. godinePopisa[2]] or '?') ..' ||style="width:20%;'
if not (zbroj[3] == tonumber(opcina['popis' .. godinePopisa[3]])) and not (zbroj[3] == 0) then ret=ret .. 'color: red;' flag[3] = 1 end
ret = ret .. '"| '.. (opcina['popis' .. godinePopisa[3]] or '?') ..'\n'
.. '|-\n| colspan="4" | <div style="text-align: center;">'
.. '<b>Izvor</b>: ' .. izvor .. '<br>'
.. 'Podatci sukladni popisu od <b>' .. azurirano ..'</b></div><hr>'
.. '\n|}\n'
.. '|}\n'
for k, v in pairs(flag) do
if v == 1 then
ret = ret .. '[[Kategorija:Popis stanovništva: pogreška u zbroju za ' .. godinePopisa[k] .. '. godinu]]'
end
end
for k, v in pairs(zbroj) do
if v == 0 then
ret = ret .. '[[Kategorija:Popis stanovništva: nepotpuni podaci za ' .. godinePopisa[k] .. '. godinu]]'
end
end
if provjeriti == true then
ret = ret .. '[[Kategorija:Popis stanovništva: velike promjene]]' 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 .. ')'
.. ' [[[Modul:Popis stanovništva/'.. kratica ..'/'.. opcina .. '|uredi]]]\n'
.. '|-\n|'.. uvlaka .. '<b>' .. godinePopisa[1] ..'.</b> || ' .. naselje['popis' .. godinePopisa[1]] .. '\n'
.. '|-\n|'.. uvlaka .. '<b>' .. godinePopisa[2] ..'.</b> || ' .. naselje['popis' .. godinePopisa[2]] .. '\n'
.. '|-\n|'.. uvlaka .. '<b>' .. godinePopisa[3] ..'.</b> || ' .. naselje['popis' .. godinePopisa[3]] .. '\n'
.. '|-\n| colspan="2" | <div style="text-align: center;">'
.. '<b>Izvor</b>: ' .. izvor .. '<br>'
.. 'Podatci sukladni popisu od <b>' .. azurirano ..'</b></div><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