Modul:Kinfo
Hopp til navigering
Hopp til søk
Dokumentasjon for denne modulen kan opprettes på Modul:Kinfo/dok
local wd = require('Module:Wd-norsk')
local data = mw.loadData("Modul:Kinfo/data")
local getArgs = require('Module:Arguments').getArgs
local p = {}
function p.kBefolkning(frame) -- TODO! Get population based on date insted of preferred value.
local args = getArgs(frame)
local knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P2504'}) or 0
for nr, val in pairs(args) do
if string.lower(val) == 'aar' then
if knr == 0 then
local qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
return tonumber(frame:callParserFunction{ name = '#time:Y', args = wd._kvalifikator{'rå','enkel',qid,'P1082','P585'} })
else
return tonumber(frame:callParserFunction{ name = '#time:Y', args = wd._kvalifikator{'rå','enkel','P1082','P585'} })
end
end
end
if knr == 0 then
local qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
if qid then
return wd._egenskap{'referanser','nåværende',qid,'P1082'} or ""
else
return ""
end
else
return wd._egenskap{'referanser','nåværende','P1082'} or ""
end
end
function p.knr(frame)
local knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P2504'}) or 0
if knr == 0 then
local qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best',qid,'P2504'}) or 0
end
if knr == 0 then
return ""
end
return knr
end
local function getRef(frame, definition)
if definition == "landareal" or definition == "ferskvatn" then
return frame:callParserFunction{ name = '#tag:ref', args = {
'{{kilde www |url=https://www.ssb.no/statbank/table/09280/ |tittel=09280: Areal (km²), etter region, arealtype, statistikkvariabel og år |nettside=[[Statistisk sentralbyrå]] |dato=1. januar 2020 |språk=norsk bokmål}}'
, name = 'SSB2020'} }
else
return frame:callParserFunction{ name = '#tag:ref', args = {
'{{kilde www |url=https://www.kartverket.no/kunnskap/Fakta-om-Norge/Arealstatistikk/Arealstatistikk-Norge/ |tittel=Arealstatistikk for Norge |nettside=[[Kartverket]] |dato=1. januar 2020 |språk=norsk bokmål}}'
, name = 'Kartverket2020'} }
end
end
local function tablelength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
local function round(num, numDecimalPlaces)
return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
end
local table_sort = {'kommune','totareal','areal','havflate','apentomrade','snoisbre','innsjo','elvtorrfall','myr','skog','dmark','btbygg','industri','annet','landareal','ferskvatn'}
local header_sort = {'Nr.','Kommune','Totalt areal','Fastland og øyer','Havflate','Åpent område','Snø, is og bre','Elv med tørrfall','Innsjø','Myr','Skog','Dyrket mark','By- og tettbebyggelse','Industriområde','Annet','Landareal','Ferskvatn'}
local function sorted_iter(t)
local fin = {}
for i, val in pairs(t) do
for i2, val2 in pairs(table_sort) do
if i == val2 then
if tonumber(val) then
table.insert(fin,i2, tonumber(val))
else
table.insert(fin,i2, val)
end
end
end
end
return fin
end
function containsValueFylke(value)
return data['fylke'][value] ~= nil
end
function p.tabell(frame)
local args = getArgs(frame)
local fylkenr = tonumber(args[1]) or 0
local row = ''
if containsValueFylke == nil then
error("Not a valid fylkenummer")
end
local tbl = mw.html.create('table')
tbl
:addClass('wikitable sortable')
:tag('caption'):wikitext(data['fylke'][fylkenr]['fylke']):done()
local header = mw.html.create('tr'):done()
for ih, valh in pairs(header_sort) do
local hData = mw.html.create('th')
:wikitext(valh):done()
header:node(hData)
end
tbl:node(header)
for i, val in pairs(data['nummerserie'][fylkenr]) do
row = mw.html.create('tr'):done()
:tag('td'):wikitext(val):done()
for i1,val2 in pairs(sorted_iter(data['kommune'][val])) do
if type(val2) == 'number' then
local data = mw.html.create('td')
:wikitext(mw.language.getContentLanguage():formatNum(val2)):done()
row:node(data)
else
local data = mw.html.create('td')
:wikitext(val2):done()
row:node(data)
end
end
tbl:node(row)
end
tbl:tag('tr')
:addClass('sortbottom')
:tag('td')
:attr('colspan', tablelength(header_sort))
:wikitext('Alle rader med unntak av "nr." og "kommune" er i enheten km². Basert på tall hentet fra [[Kartverket]] og [[Statistisk sentralbyrå|SSB]].' .. getRef(frame) .. getRef(frame,'landareal')):done()
-- local html = tostring(tbl)
-- local dumphtml = require('Module:Dump')._dumphtml
-- return dumphtml(html)
return tostring(tbl)
end
function p.innbprkm(frame)
local args = getArgs(frame)
local knr = tonumber(args['knr']) or tonumber(args[1])
local innb = tonumber(args['innb']) or tonumber(args[2])
local unit = ''
local ref = ''
for nr, val in pairs(args) do
if string.lower(val) == 'enhet' then
unit = ' <small>innb./km²</small>'
elseif string.lower(val) == 'ref' then
ref = getRef(frame,'landareal')
elseif string.lower(val) == 'wd' then
knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P2504'}) or 0
innb = tonumber(wd._egenskap{'rå','nåværende','P1082'}) or 0
if not knr or knr == '' then
knr = tonumber(string.match(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P300'}, "%d+")) or 0
end
end
end
if pcall(function() return data['kommune'][knr]['landareal'] end) and innb then
return mw.language.getContentLanguage():formatNum(round(innb/tonumber(data['kommune'][knr]['landareal']),2)) .. unit .. ref
elseif pcall(function() return data['fylke'][knr]['landareal'] end) and innb then
return mw.language.getContentLanguage():formatNum(round(innb/tonumber(data['fylke'][knr]['landareal']),2)) .. unit .. ref
else
local qid = ""
if knr ~= 0 and pcall(function() return data['kommune'][knr]['kommune'] end) then
qid = mw.wikibase.getEntityIdForTitle( data['kommune'][knr]['kommune'] .. ' kommune',"nnwiki" )
else
qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
end
knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best',qid,'P2504'})
innb = tonumber(wd._egenskap{'rå','nåværende','best',qid,'P1082'})
if pcall(function() return data['kommune'][knr]['landareal'] end) and innb then
return mw.language.getContentLanguage():formatNum(round(innb/tonumber(data['kommune'][knr]['landareal']),2)) .. unit .. ref
else
return ""
end
end
end
function p.main(frame)
local args = getArgs(frame)
local nr = tonumber(args[1]) or nil
local verdi = 'kommune'
local unit = ''
local ref = ''
for nr2, val in pairs(args) do
if string.lower(val) == 'enhet' then
unit = ' <small>km²</small>'
elseif string.lower(val) == 'ref' then
if args['hent'] then
ref = getRef(frame, string.lower(args['hent']))
else
ref = getRef(frame)
end
elseif string.lower(val) == 'wd' then
nr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P2504'}) or 0
if nr == 0 then --Fylke
nr = tonumber(string.match(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P300'}, "%d+")) or 0
end
if nr == 0 then
qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
nr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best',qid,'P2504'})
end
end
end
if nr == nil then
return ''
end
if args['hent'] then
verdi = string.lower(args['hent'])
elseif nr <= 54 and nr >= 3 then
verdi = 'fylke'
end
if nr <= 56 and nr >= 3 then
if pcall(function() return data['fylke'][nr][verdi] end) then
if type(tonumber(data['fylke'][nr][verdi])) == "number" then
return mw.language.getContentLanguage():formatNum(tonumber(data['fylke'][nr][verdi])) .. unit .. ref
else
if data['fylke'][nr][verdi] then
return data['fylke'][nr][verdi] .. unit .. ref
else
return ""
end
end
else
error("Not a valid fylkenummer in the list")
end
end
if pcall(function() return data['kommune'][nr][verdi] end) then
if type(tonumber(data['kommune'][nr][verdi])) == "number" then
return mw.language.getContentLanguage():formatNum(tonumber(data['kommune'][nr][verdi])) .. unit .. ref
else
if data['kommune'][nr][verdi] then
return data['kommune'][nr][verdi] .. unit .. ref
else
return ""
end
end
else
return "utdatert"
--error("Not a valid kommunenummer in the list")
end
end
return p