Modul:WikidataDato: Forskjell mellom sideversjoner
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. |
Ingen redigeringsforklaring |
||
| Linje 24: | Linje 24: | ||
-- 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 ) | ||
Sideversjonen fra 31. aug. 2019 kl. 17:15
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
--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)
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