Modul:WikidataDato: Forskjell mellom sideversjoner

Fra Wikisida.no
Hopp til navigering Hopp til søk
(Kommenterer ut juliansk dato. 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.)
m (Én sideversjon ble importert)
 
(30 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 24: Linje 51:
-- 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 33: 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 58: 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 93: 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 115: 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 128: 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 137: Linje 171:
end
end
if oki>0 then
if oki>0 then
return props[oki]
return props[oki], pv, qv, forkortet
else
end
return nil, pv, qv, forkortet
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
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 177: 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 190: 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 202: 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 228: 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 247: 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