Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Sandbox/Premeditated/kommune

From Wikipedia, the free encyclopedia

local wd = require('Module:Wd')
local data = mw.loadData("Module:Sandbox/Premeditated/kommune/data")
local getArgs = require('Module:Arguments').getArgs

local p = {}

function p.test(frame)
	local i = 10
	local c = 100
	
	return i,c
end

local function getRef(frame)
	return frame:callParserFunction{ name = '#tag:ref', args = { 
    '{{cite web |url=https://www.kartverket.no/kunnskap/Fakta-om-Norge/Arealstatistikk/Arealstatistikk-Norge/ |title=Arealstatistikk for Norge |website=[[Kartverket]] |date=1 January 2020 |language=Norwegian Bokmål}}'
	, name = 'Kartverket2020'} }
end

local function round(num, numDecimalPlaces)
  return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
end

-- BUILDER!!

local table_sort = {'kommune','totareal','areal','havflate','apentomrade','snoisbre','innsjo','elvtorrfall','myr','skog','dmark','btbygg','industri','annet','landareal'}
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'}

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 p.tabell(frame)
	local args = getArgs(frame)
	local fylkenr = tonumber(args[1])
	local row = ''
	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', 16)
			:wikitext('Alle rader med unntak av "nr." og "kommune" er i enheten km². Basert på data hentet fra [[Kartverket]].' .. getRef(frame)):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)
		elseif string.lower(val) == 'wd' then
			knr = tonumber(wd._properties{'raw','linked','future','current','normal+','P2504'})
			innb = tonumber(wd._property{'raw','current','P1082'})
			if not knr or knr == '' then
				knr = tonumber(string.match(wd._properties{'raw','linked','future','current','normal+','P300'}, "%d+"))
			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 = mw.wikibase.getEntityIdForTitle( data['kommune'][knr]['kommune'] .. ' kommune',"nnwiki" )
		innb = tonumber(wd._property{'raw','current',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
			ref = getRef(frame)
		elseif string.lower(val) == 'wd' then
			nr = tonumber(wd._properties{'raw','linked','future','current','normal+','P2504'})
			if not nr or nr == '' then
				nr = tonumber(string.match(wd._properties{'raw','linked','future','current','normal+','P300'}, "%d+"))
			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 <= 54 and nr >= 3 then
		if pcall(function() return data['fylke'][nr][verdi] end) then
			if type(data['fylke'][nr][verdi]) == "number" then
				return mw.language.getContentLanguage():formatNum(data['fylke'][nr][verdi]) .. unit .. ref
			else
				return data['fylke'][nr][verdi] .. unit .. ref
			end
		else  
			error("Not a valid fylkenummer in the list")
		end 
	end
	
	if pcall(function() return data['kommune'][nr][verdi] end) then
		if type(data['kommune'][nr][verdi]) == "number" then
			return mw.language.getContentLanguage():formatNum(data['kommune'][nr][verdi]) .. unit .. ref
		else
			return data['kommune'][nr][verdi] .. unit .. ref
		end
	else  
		error("Not a valid kommunenummer in the list")
	end 
	

end

return p