Modul:WikidataDato: Forskjell mellom sideversjoner
Hopp til navigering
Hopp til søk
Forsøk, får se hvordan det går |
Kun referanser når dato er lenket |
||
| Linje 189: | Linje 189: | ||
-- 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) -- .. refs.render(frame, prop.references) --p.standardRefFormat(frame, prop) | ||
end | end | ||
Sideversjonen fra 28. aug. 2019 kl. 15:23
Formål
Å presentere datoer fra Wikidata.
Bruk i maler
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
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
| Artikkel | I artikkel | Utenfor artikkel | resultat |
|---|---|---|---|
| Erna Solberg | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q291644 |pv=P569}} | Lua-feil i package.lua, linje 80: module 'Module:References' not found. |
| {{#invoke:WikidataDato |norskDatoLenket |pv=P569}} | {{#invoke:WikidataDato |norskDatoLenket |qv=Q291644 |pv=P569}} | Lua-feil i package.lua, linje 80: module 'Module:References' not found. | |
| Lenin | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q1394 |pv=P569}} | Lua-feil i package.lua, linje 80: module 'Module:References' not found. |
| {{#invoke:WikidataDato |norskDatoLenket |pv=P569}} | {{#invoke:WikidataDato |norskDatoLenket |qv=Q1394 |pv=P569}} | Lua-feil i package.lua, linje 80: module 'Module:References' not found. | |
| Platon | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q859 |pv=P569}} | Lua-feil i package.lua, linje 80: module 'Module:References' not found. |
| {{#invoke:WikidataDato |norskDatoLenket |pv=P569}} | {{#invoke:WikidataDato |norskDatoLenket |qv=Q859 |pv=P569}} | Lua-feil i package.lua, linje 80: module 'Module:References' not found. | |
| Julien Brulé (død) | Lua-feil i package.lua, linje 80: module 'Module:References' not found. | ||
| Giuseppe Corsi da Celano (født) | Lua-feil i package.lua, linje 80: module 'Module:References' not found. | ||
| Sergej Kirdjapkin | Lua-feil i package.lua, linje 80: module 'Module:References' not found. | ||
| Sergej Kirdjapkin | Lua-feil i package.lua, linje 80: module 'Module:References' not found. | ||
| Nicole Oresme | Lua-feil i package.lua, linje 80: module 'Module:References' not found. | ||
| Hiempsal I | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q523301 |pv=P569}} | Lua-feil i package.lua, linje 80: module 'Module:References' not found. |
Referanser
local p = {}
local refs = require 'Module:References'
local lang = mw.language.getContentLanguage()
local maanednavn = {'januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'}
function splitTimestamp(timestamp)
local aar = string.sub(timestamp, 2, 5) or '????'
local maande = maanednavn[tonumber(string.sub(timestamp, 7, 8) or '00')] or '??'
local dag = tonumber(string.sub(timestamp, 10, 11) or '??')..'.'
local fkr = ''
if string.sub(timestamp, 1, 1) == '-' then
fkr = ' f.Kr.'
end
return aar,maande,dag,fkr
end
function kalender(kal)
if string.match (kal, 'wikidata.org/entity/Q1985727$' ) then
return ''
end
if string.match (kal, 'wikidata.org/entity/Q1985786$' ) then
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)
local value = claim.datavalue.value
local presisjon = value.precision
local aar,maande,dag,fkr = splitTimestamp(value.time)
local utstring = ''
if presisjon == 11 then
utstring = string.format( '%s %s %s%s', dag, maande, tonumber(aar) or aar, fkr )
elseif presisjon == 10 then
utstring = string.format( '%s %s%s', maande, 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', tonumber(string.sub(aar, 1, -1)..'0'), 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)
local value = claim.datavalue.value
local presisjon = value.precision
local aar,maande,dag,fkr = splitTimestamp(value.time)
local html = mw.html.create( 'span' )
if presisjon == 11 then
-- @todo use mw.html.wikitext to buil this
html:wikitext( string.format( '[[%s %s]] [[%s%s]]', dag, maande, tonumber(aar) or aar, fkr ) )
end
if presisjon == 10 then
html:wikitext( string.format( '[[%s]] [[%s%s]]', maande, 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
return args['qv'],args['pv']
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 = frameargs(frame)
local entity = mw.wikibase.getEntity(qv)
if not ( entity and entity.claims and entity.claims[pv] ) then
return 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
elseif rank == 'normal' then
if oki == 0 then
oki = i
end
end
end
end
if oki>0 then
return props[oki]
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
function p.norskDatoLenket(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.norskDatoLenketFraClaim(prop.mainsnak) .. refs.render(frame, prop.references) --p.standardRefFormat(frame, prop)
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) -- .. refs.render(frame, prop.references) --p.standardRefFormat(frame, prop)
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, maaned, dag
aar, 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, maaned, dag, fkr
aar, 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
return p