Modul:WikidataDato: Forskjell mellom sideversjoner

Fra Wikisida.no
Hopp til navigering Hopp til søk
(Kun referanser når dato er lenket)
m (Én sideversjon ble importert)
 
(31 mellomliggende versjoner av 9 brukere er ikke vist)
Linje 1: Linje 1:
local p = {}
local p = {}
local refs = require 'Module:References'
local refs = require 'Module:Reference score'


local lang = mw.language.getContentLanguage()
local lang = mw.language.getContentLanguage()
local maanednavn = {'januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'}
local maanednavn = {'januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'}
local kortmaanednavn = {'jan.', 'feb.', 'mars', 'apr.', 'mai', 'juni', 'juli', 'aug.', 'sep.', 'okt.', 'nov.', 'des.'}
local maanedlenker = {'Januar', 'Februar', 'Mars (måned)', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'}


-- tekst vi ønsker sammen med dato når det finnes en P1480 (kvalifikator for presisjonen til en påstand)
function splitTimestamp(timestamp)
-- Hvis det forekommer ytterligere verdier i bruk, legg disse til i denne tabellen
local kildekvalitettekst =
{
["Q5727902"] = "ca. ", -- cirka
["Q21818619"] = "I nærheten av ", -- muligens omtrentlig verdi
["Q18122778"] = "Antagelig " -- antakelig
}

local linktext = 'Rediger på Wikidata'
local linktarget = 'https://www.wikidata.org/wiki/%s?uselang=%s#%s'

local function kildekvalitet(claim)
for key,val in pairs(claim) do
return kildekvalitettekst[val.datavalue.value.id] or '[[Kategori:Kildekvalitet for dato som mangler tekst i Modul WikidataDato]]'
end
return ''
end

function splitTimestamp(timestamp,forkortet)
local aar = string.sub(timestamp, 2, 5) or '????'
local aar = string.sub(timestamp, 2, 5) or '????'
local maande = maanednavn[tonumber(string.sub(timestamp, 7, 8) or '00')] or '??'
local maanednummer = tonumber(string.sub(timestamp, 7, 8) or '00')
local maaned = maanednavn[maanednummer] or '??'
local maanedlenke = maanedlenker[maanednummer] or '??'
local kortmaaned = maaned
if forkortet then
kortmaaned = kortmaanednavn[tonumber(string.sub(timestamp, 7, 8) or '00')] or '??'
end
local dag = tonumber(string.sub(timestamp, 10, 11) or '??')..'.'
local dag = tonumber(string.sub(timestamp, 10, 11) or '??')..'.'
local fkr = ''
local fkr = ''
Linje 13: Linje 40:
fkr = ' f.Kr.'
fkr = ' f.Kr.'
end
end
return aar,maande,dag,fkr
return aar,maanedlenke,maaned,dag,fkr,kortmaaned
end
end


Linje 21: Linje 48:
end
end
if string.match (kal, 'wikidata.org/entity/Q1985786$' ) then
if string.match (kal, 'wikidata.org/entity/Q1985786$' ) then
--Kun når datoen er etter oktober 1582 bør juliansk skrives ut. Alle datoer før dette blir regnet for å være julianske uansett.
local html = mw.html.create( 'span' )
-- local html = mw.html.create( 'span' )
:wikitext( '[[Den julianske kalenderen|juliansk]]' )
-- :wikitext( '[[Den julianske kalenderen|juliansk]]' )
return ' ('..tostring( html )..')'
return '' --' ('..tostring( html )..')'
end
end
return mw.text.nowiki( kal )
return mw.text.nowiki( kal )
Linje 32: Linje 60:
-- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres
-- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres
-- slik at den kan brukes av andre moduler.
-- slik at den kan brukes av andre moduler.
function p.norskDatoFraClaim(claim)
function p.norskDatoFraClaim(claim,forkortet)
local value = claim.datavalue.value
local value = claim.datavalue.value
local presisjon = value.precision
local presisjon = value.precision
local aar,maande,dag,fkr = splitTimestamp(value.time)
local aar,maanedlenke,maaned,dag,fkr,kortmaaned = splitTimestamp(value.time,forkortet)
local utstring = ''
local utstring = ''


if presisjon == 11 then
if presisjon == 11 then
utstring = string.format( '%s %s %s%s', dag, maande, tonumber(aar) or aar, fkr )
utstring = string.format( '%s %s %s%s', dag, maaned, tonumber(aar) or aar, fkr )
elseif presisjon == 10 then
elseif presisjon == 10 then
utstring = string.format( '%s %s%s', maande, tonumber(aar) or aar, fkr )
utstring = string.format( '%s %s%s', maaned, tonumber(aar) or aar, fkr )
elseif presisjon == 9 then
elseif presisjon == 9 then
utstring = (tonumber(aar) or aar)..''..fkr
utstring = (tonumber(aar) or aar)..''..fkr
utstring = string.format( '%s%s', tonumber(aar) or aar, fkr )
utstring = string.format( '%s%s', tonumber(aar) or aar, fkr )
elseif presisjon == 8 then
elseif presisjon == 8 then
utstring = string.format( '%s-årene%s', tonumber(string.sub(aar, 1, -1)..'0'), fkr )
utstring = string.format( '%s-årene%s', math.floor(((tonumber(aar) or 0))/10)*10, fkr )
elseif presisjon == 7 then
elseif presisjon == 7 then
utstring = string.format( '%s. århundre%s', math.floor(((tonumber(aar) or 0)+99)/100), fkr )
utstring = string.format( '%s. århundre%s', math.floor(((tonumber(aar) or 0)+99)/100), fkr )
Linje 57: Linje 85:
-- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres
-- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres
-- slik at den kan brukes av andre moduler.
-- slik at den kan brukes av andre moduler.
function p.norskDatoLenketFraClaim(claim)
function p.norskDatoLenketFraClaim(claim,forkortet)
local value = claim.datavalue.value
local value = claim.datavalue.value
local presisjon = value.precision
local presisjon = value.precision
local aar,maande,dag,fkr = splitTimestamp(value.time)
local aar,maanedlenke,maaned,dag,fkr,kortmaaned = splitTimestamp(value.time,forkortet)
local html = mw.html.create( 'span' )
local html = mw.html.create( 'span' )

if presisjon == 11 then
if presisjon == 11 then
-- @todo use mw.html.wikitext to buil this
-- @todo use mw.html.wikitext to build this
html:wikitext( string.format( '[[%s %s]] [[%s%s]]', dag, maande, tonumber(aar) or aar, fkr ) )
html:wikitext( string.format( '[[%s %s|%s %s]] [[%s%s]]', dag, maaned, dag, kortmaaned, tonumber(aar) or aar, fkr ) )
end
end
if presisjon == 10 then
if presisjon == 10 then
html:wikitext( string.format( '[[%s]] [[%s%s]]', maande, tonumber(aar) or aar, fkr ) )
html:wikitext( string.format( '[[%s|%s]] [[%s%s]]', maanedlenke, maaned, tonumber(aar) or aar, fkr ) )
end
end
if presisjon == 9 then
if presisjon == 9 then
Linje 92: Linje 120:
end
end
end
end
return args['qv'],args['pv']
local qid = args['qv'] or args['qid'] or nil
if qid and qid == "" then
qid = nil
end
local pid = args['pv'] or args['pid'] or nil
-- local forkortet = args['kort'] or pid == "P569" or pid == "P570" or nil
local forkortet = args['kort'] or nil
return qid,pid,forkortet
end
end


Linje 114: Linje 149:


function p.finnBesteProperty(frame)
function p.finnBesteProperty(frame)
local qv,pv = frameargs(frame)
local qv,pv,forkortet = frameargs(frame)
local entity = mw.wikibase.getEntity(qv)
local entity = mw.wikibase.getEntity(qv)
if not ( entity and entity.claims and entity.claims[pv] ) then
if not ( entity and entity.claims and entity.claims[pv] ) then
return nil
return nil,nil
end
end
Linje 127: Linje 162:
local rank = prop.rank or 'normal'
local rank = prop.rank or 'normal'
if rank == 'preferred' then
if rank == 'preferred' then
return prop
return prop, pv, qv, forkortet
elseif rank == 'normal' then
elseif rank == 'normal' then
if oki == 0 then
if oki == 0 then
Linje 136: Linje 171:
end
end
if oki>0 then
if oki>0 then
return props[oki]
return props[oki], pv, qv, forkortet
else
return nil, pv, qv, forkortet
end
end
end

function p.standardRefFormat(frame, prop)
local found = false
local hits = 0
local refs = ''
for i,v in ipairs( prop.references or {} ) do
if v.snaks and not v.snaks.P143 then
found = found or true
hits = hits + 1
-- hash will merge similar entries
refs = refs .. frame:extensionTag( 'ref', mw.wikibase.formatValues( v.snaks ), { name = v.hash } )
end
end
local nums = { 'Én', 'To', 'Tre', 'Fire', 'Fem', 'Seks', 'Syv', 'Åtte', 'Ni', 'Ti', 'Elleve', 'Tolv' }
local cats = (found and ('[['..'Category:'..'Referanse fra Lua'..']]') or '')
if hits == 0 then
-- nop
elseif hits == 1 then
cats = cats .. ('[['..'Category:'..nums[hits] ..' referanse fra Lua'..']]')
elseif hits <= 12 then
cats = cats .. ('[['..'Category:'..nums[hits] ..' referanser fra Lua'..']]')
else
cats = cats .. ('[['..'Category:'..'Mange referanser fra Lua'..']]')
end
return refs .. cats
end
end


function p.norskDatoLenket(frame)
function p.norskDatoLenket(frame)
local prop = p.finnBesteProperty(frame)
local prop,qv,pv,forkortet = p.finnBesteProperty(frame)
if not prop then
if not prop then
return ""
return ""
Linje 176: Linje 187:
-- Det siste er tilfeldig, men kan antas være mindre utsatt for tilfeldige endringer enn å velge den siste
-- Det siste er tilfeldig, men kan antas være mindre utsatt for tilfeldige endringer enn å velge den siste
-- ulenket, minimerer overlenking
-- ulenket, minimerer overlenking
local kvalitet = ''
return p.norskDatoLenketFraClaim(prop.mainsnak) .. refs.render(frame, prop.references) --p.standardRefFormat(frame, prop)
if prop and prop.qualifiers and prop.qualifiers.P1480 then
kvalitet = kildekvalitet(prop.qualifiers.P1480)
end
local tmp = refs.render(frame, prop.references)
return kvalitet .. p.norskDatoLenketFraClaim(prop.mainsnak,forkortet) .. tmp
end
end


Linje 189: Linje 206:
-- Det siste er tilfeldig, men kan antas være mindre utsatt for tilfeldige endringer enn å velge den siste
-- Det siste er tilfeldig, men kan antas være mindre utsatt for tilfeldige endringer enn å velge den siste
-- ulenket, minimerer overlenking
-- ulenket, minimerer overlenking

return p.norskDatoFraClaim(prop.mainsnak) -- .. refs.render(frame, prop.references) --p.standardRefFormat(frame, prop)
return p.norskDatoFraClaim(prop.mainsnak)
end
end


Linje 201: Linje 219:
return ''
return ''
end
end
local aar, maaned, dag
local aar, maanedlenke, maaned, dag
aar, maaned, dag = splitTimestamp(timestamp)
aar, maanedlenke, maaned, dag = splitTimestamp(timestamp)
if dag ~= nil and maaned ~= nil then
if dag ~= nil and maaned ~= nil then
return mw.text.nowiki( dag .. ' ' .. maaned )
return mw.text.nowiki( dag .. ' ' .. maaned )
Linje 227: Linje 245:
return ''
return ''
end
end
local aar, maaned, dag, fkr
local aar, maanedlenke, maaned, dag, fkr
aar, maaned, dag, fkr = splitTimestamp(timestamp)
aar, maanedlenke, maaned, dag, fkr = splitTimestamp(timestamp)
if aar ~= nil and fkr ~= ' f.Kr.' then
if aar ~= nil and fkr ~= ' f.Kr.' then
return mw.text.nowiki( string.format('%u', aar) )
return mw.text.nowiki( string.format('%u', aar) )
Linje 246: Linje 264:
end
end


function p.edit(frame)
local prop, pid, qid = p.finnBesteProperty(frame)
qid = qid or mw.wikibase.getEntityIdForCurrentPage()
if not qid or not pid then
return ''
end
local link = mw.ustring.format( linktarget, qid, lang:getCode(), pid )
local text = '[[File:OOjs UI icon edit-ltr-progressive.svg'
.. '|frameless|text-top|10px'
.. '|alt=' .. mw.text.nowiki( linktext )
.. '|link=' .. mw.text.nowiki( link )
.. '|' .. mw.text.nowiki( linktext )
.. ']]'

local html = mw.html.create( 'span' )
:addClass( 'wb-edithandle' )
:attr( 'data-bridge-edit-flow', 'single-best-value' )
:wikitext( text )
return tostring( html )
end


return p
return p

Siste sideversjon per 26. feb. 2025 kl. 18:42

Formål[rediger kilde]

Å presentere datoer fra Wikidata.

Bruk i maler[rediger kilde]

Modulen brukes ved å legge inn en av:

{{#invoke:WikidataDato|norskDato|qv=Qxxx|pv=Pxxx}}
{{#invoke:WikidataDato|norskDatoLenket|qv=Qxxx|pv=Pxxx}}

i en mal.

Bruk i moduler[rediger kilde]

local WikidataDato = require( 'Module:WikidataDato' )
local entity = mw.wikibase.getEntity()
local claim = entity.claims['Pxxx'][1].mainsnak  -- Kun et eksempel! I virkeligheten må man sjekke at påstanden finnes og er gyldig.

local dato = WikidataDato.norskDatoFraClaim(claim)

Eksempler[rediger kilde]

Artikkel I artikkel Utenfor artikkel resultat
Erna Solberg {{#invoke:WikidataDato |norskDato |pv=P569}} {{#invoke:WikidataDato |norskDato |qv=Q291644 |pv=P569}}
{{#invoke:WikidataDato |norskDatoLenket |pv=P569}} {{#invoke:WikidataDato |norskDatoLenket |qv=Q291644 |pv=P569}}
Lenin {{#invoke:WikidataDato |norskDato |pv=P569}} {{#invoke:WikidataDato |norskDato |qv=Q1394 |pv=P569}}
{{#invoke:WikidataDato |norskDatoLenket |pv=P569}} {{#invoke:WikidataDato |norskDatoLenket |qv=Q1394 |pv=P569}}
Platon {{#invoke:WikidataDato |norskDato |pv=P569}} {{#invoke:WikidataDato |norskDato |qv=Q859 |pv=P569}}
{{#invoke:WikidataDato |norskDatoLenket |pv=P569}} {{#invoke:WikidataDato |norskDatoLenket |qv=Q859 |pv=P569}}
Julien Brulé (død)
Giuseppe Corsi da Celano (født)
Sergej Kirdjapkin
Sergej Kirdjapkin
Nicole Oresme
Hiempsal I {{#invoke:WikidataDato |norskDato |pv=P569}} {{#invoke:WikidataDato |norskDato |qv=Q523301 |pv=P569}}

Referanser[rediger kilde]



local p = {}
local refs = require 'Module:Reference score'

local lang = mw.language.getContentLanguage()
local maanednavn = {'januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'}
local kortmaanednavn = {'jan.', 'feb.', 'mars', 'apr.', 'mai', 'juni', 'juli', 'aug.', 'sep.', 'okt.', 'nov.', 'des.'}
local maanedlenker = {'Januar', 'Februar', 'Mars (måned)', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'}

-- tekst vi ønsker sammen med dato når det finnes en P1480 (kvalifikator for presisjonen til en påstand)
-- Hvis det forekommer ytterligere verdier i bruk, legg disse til i denne tabellen
local kildekvalitettekst =
{
	["Q5727902"] = "ca. ",             -- cirka
	["Q21818619"] = "I nærheten av ",  -- muligens omtrentlig verdi
	["Q18122778"] = "Antagelig "       -- antakelig
}

local linktext = 'Rediger på Wikidata'
local linktarget = 'https://www.wikidata.org/wiki/%s?uselang=%s#%s'

local function kildekvalitet(claim)
	for key,val in pairs(claim) do
       return kildekvalitettekst[val.datavalue.value.id] or '[[Kategori:Kildekvalitet for dato som mangler tekst i Modul WikidataDato]]'
	end
	return ''
end

function splitTimestamp(timestamp,forkortet)
	local aar = string.sub(timestamp, 2, 5) or '????'
	local maanednummer = tonumber(string.sub(timestamp, 7, 8) or '00')
	local maaned = maanednavn[maanednummer] or '??'
	local maanedlenke = maanedlenker[maanednummer] or '??'
	local kortmaaned = maaned
	if forkortet then
		kortmaaned = kortmaanednavn[tonumber(string.sub(timestamp, 7, 8) or '00')] or '??'
	end
	local dag = tonumber(string.sub(timestamp, 10, 11) or '??')..'.'
	local fkr = ''
	if string.sub(timestamp, 1, 1) == '-' then
		fkr = ' f.Kr.'
	end
	return aar,maanedlenke,maaned,dag,fkr,kortmaaned
end

function kalender(kal)
	if string.match (kal, 'wikidata.org/entity/Q1985727$' ) then
		return ''
	end
	if string.match (kal, 'wikidata.org/entity/Q1985786$' ) then
--Kun når datoen er etter oktober 1582 bør juliansk skrives ut. Alle datoer før dette blir regnet for å være julianske uansett.
--		local html = mw.html.create( 'span' )
--			:wikitext( '[[Den julianske kalenderen|juliansk]]' )
		return '' --' ('..tostring( html )..')'
	end
	return mw.text.nowiki( kal )
end


-- Denne funksjonen formaterer en norsk dato fra en Wikidata-påstand
-- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres
-- slik at den kan brukes av andre moduler.
function p.norskDatoFraClaim(claim,forkortet)
	local value = claim.datavalue.value
	local presisjon = value.precision
	local aar,maanedlenke,maaned,dag,fkr,kortmaaned = splitTimestamp(value.time,forkortet)
	local utstring = ''

	if presisjon == 11 then
		utstring = string.format( '%s %s %s%s', dag, maaned, tonumber(aar) or aar, fkr )
	elseif presisjon == 10 then
		utstring = string.format( '%s %s%s', maaned, tonumber(aar) or aar, fkr )
	elseif presisjon == 9 then
		utstring = (tonumber(aar) or aar)..''..fkr
		utstring = string.format( '%s%s', tonumber(aar) or aar, fkr )
	elseif presisjon == 8 then
		utstring = string.format( '%s-årene%s',  math.floor(((tonumber(aar) or 0))/10)*10, fkr ) 
	elseif presisjon == 7 then
		utstring = string.format( '%s. århundre%s', math.floor(((tonumber(aar) or 0)+99)/100), fkr )
	end

	return mw.text.nowiki( utstring ).. kalender(value.calendarmodel)
end

-- Denne funksjonen formaterer en norsk dato fra en Wikidata-påstand
-- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres
-- slik at den kan brukes av andre moduler.
function p.norskDatoLenketFraClaim(claim,forkortet)
	local value = claim.datavalue.value
	local presisjon = value.precision
	local aar,maanedlenke,maaned,dag,fkr,kortmaaned =  splitTimestamp(value.time,forkortet)
	local html = mw.html.create( 'span' )
	
	if presisjon == 11 then
		-- @todo use mw.html.wikitext to build this
		html:wikitext( string.format( '[[%s %s|%s %s]] [[%s%s]]', dag, maaned, dag, kortmaaned, tonumber(aar) or aar, fkr ) )
	end
	if presisjon == 10 then
		html:wikitext( string.format( '[[%s|%s]] [[%s%s]]', maanedlenke, maaned, tonumber(aar) or aar, fkr ) )
	end
	if presisjon == 9 then
		html:wikitext( string.format( '[[%s%s]]', tonumber(aar) or aar, fkr ) )
	end
	if presisjon == 8 then
		html:wikitext( string.format( '[[%s-årene%s]]', math.floor(((tonumber(aar) or 0))/10)*10, fkr ) )
	end
	if presisjon == 7 then
		html:wikitext( string.format( '[[%s. århundre%s]]', math.floor(((tonumber(aar) or 0)+99)/100), fkr ) )
	end

	return tostring(html) .. kalender(value.calendarmodel)
end

local function frameargs(frame)
	local args = frame.args
	if args[1] == nil then
		local pFrame = frame:getParent();
		args = pFrame.args;
		for k,v in pairs( frame.args ) do
			args[k] = v;
		end
	end
	local qid = args['qv'] or args['qid'] or nil
	if qid and qid == "" then
		qid = nil
	end
	local pid = args['pv'] or args['pid'] or nil
--	local forkortet = args['kort'] or pid == "P569" or pid == "P570" or nil
	local forkortet = args['kort'] or nil
	return qid,pid,forkortet
end

function p.okProperty( claim )
	-- Sjekk at claim finnes og inneholder det vi trenger for å lage ok norsk dato
	if not claim and claim.type ~= 'statement' then
		return nil
	end
	
	local mainsnak = claim.mainsnak or {}
	
	if mainsnak.snaktype ~= 'value' or mainsnak.datatype ~= 'time' then
		return nil
	end

	local datavalue = mainsnak.datavalue or {}
	local value = datavalue.value or {}
	
	return not not (value.time and value.precision and value.calendarmodel) 
end

function p.finnBesteProperty(frame)
	local qv,pv,forkortet = frameargs(frame)
	local entity = mw.wikibase.getEntity(qv)
	if not ( entity and entity.claims and entity.claims[pv] ) then
		return nil,nil
	end
	
	local props = entity['claims'][pv]

	local oki = 0
	for i,prop in ipairs(props) do
		if p.okProperty(prop) then
			local rank = prop.rank or 'normal'
			if rank == 'preferred' then
				return prop, pv, qv, forkortet
			elseif rank == 'normal' then
				if oki == 0 then
					oki = i
				end
			end
		end
	end
	if oki>0 then
		return props[oki], pv, qv, forkortet
	else
		return nil, pv, qv, forkortet
	end
end

function p.norskDatoLenket(frame)
	local prop,qv,pv,forkortet = p.finnBesteProperty(frame)
	if not prop then
		return ""
	end
	-- prop er nå en ok property.
	-- Hvis det finnes en med rank preferred er den valgt
	-- Hvis ingen preferred, er den første med normal valgt.
	-- Det siste er tilfeldig, men kan antas være mindre utsatt for tilfeldige endringer enn å velge den siste
	-- ulenket, minimerer overlenking
	local kvalitet = ''
	if prop and prop.qualifiers and prop.qualifiers.P1480 then
		kvalitet = kildekvalitet(prop.qualifiers.P1480)
	end
	
	local tmp = refs.render(frame, prop.references)
	return kvalitet .. p.norskDatoLenketFraClaim(prop.mainsnak,forkortet) .. tmp
end

function p.norskDato(frame)
	local prop = p.finnBesteProperty(frame)
	if not prop then
		return ""
	end
	-- prop er nå en ok property.
	-- Hvis det finnes en med rank preferred er den valgt
	-- Hvis ingen preferred, er den første med normal valgt.
	-- Det siste er tilfeldig, men kan antas være mindre utsatt for tilfeldige endringer enn å velge den siste
	-- ulenket, minimerer overlenking

	return p.norskDatoFraClaim(prop.mainsnak)
end

-- Denne funksjonen formaterer en norsk dato fra en Wikidata-påstand
-- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres
-- slik at den kan brukes av andre moduler.
function p.dagOgMaanedFraClaim(claim)
	local timestamp = claim.datavalue.value.time
	local presisjon = claim.datavalue.value.precision
	if tonumber(presisjon) < 11 then
		return ''
	end
	local aar, maanedlenke, maaned, dag
	aar, maanedlenke, maaned, dag = splitTimestamp(timestamp)
	if dag ~= nil and maaned ~= nil then
		return mw.text.nowiki( dag .. ' ' .. maaned )
	else
		return ''
	end
end

function p.dagOgMaaned (frame)
	local prop = p.finnBesteProperty(frame)
	if not prop then
		return ''
	end
	return p.dagOgMaanedFraClaim(prop.mainsnak)
end

-- Denne funksjonen formaterer en norsk dato fra en Wikidata-påstand
-- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres
-- slik at den kan brukes av andre moduler.
function p.aarFraClaim(claim)
	local timestamp = claim.datavalue.value.time
	local presisjon = tonumber(claim.datavalue.value.precision) or 0
	if tonumber(presisjon) < 9 then
		return ''
	end
	local aar, maanedlenke, maaned, dag, fkr
	aar, maanedlenke, maaned, dag, fkr = splitTimestamp(timestamp)
	if aar ~= nil and fkr ~= ' f.Kr.' then
		return mw.text.nowiki( string.format('%u', aar) )
	elseif aar ~= nil and fkr == ' f.Kr.' then
		return mw.text.nowiki( string.format('%u', aar) .. ' f.Kr.' )
	else
		return ''
	end
end

function p.Aar(frame)
	local prop = p.finnBesteProperty(frame)
	if not prop then
		return ''
	end
	return mw.text.nowiki( p.aarFraClaim(prop.mainsnak) )
end

function p.edit(frame)
	local prop, pid, qid = p.finnBesteProperty(frame)
	qid = qid or mw.wikibase.getEntityIdForCurrentPage()
	if not qid or not pid then
		return ''
	end
	
	local link = mw.ustring.format( linktarget, qid, lang:getCode(), pid )
	local text = '[[File:OOjs UI icon edit-ltr-progressive.svg'
		.. '|frameless|text-top|10px'
		.. '|alt=' .. mw.text.nowiki( linktext )
		.. '|link=' .. mw.text.nowiki( link )
		.. '|' .. mw.text.nowiki( linktext )
		.. ']]'

	local html = mw.html.create( 'span' )
		:addClass( 'wb-edithandle' )
		:attr( 'data-bridge-edit-flow', 'single-best-value' )
		:wikitext( text )
	return tostring( html )
end

return p