Modul:WikidataDato: Forskjell mellom sideversjoner
Hopp til navigering
Hopp til søk
m (Tilbakestilte endring av Russisk ubåtkaptein (bidrag) til siste versjon av Haros) |
(Tømmer siden) |
||
Linje 1: | Linje 1: | ||
local p = {} |
|||
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.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 |
|||
return p.norskDatoLenketFraClaim(prop.mainsnak) |
|||
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 |
|||
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, 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 |
Sideversjonen fra 17. apr. 2019 kl. 13:45
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}} | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. |
{{#invoke:WikidataDato |norskDatoLenket |pv=P569}} | {{#invoke:WikidataDato |norskDatoLenket |qv=Q291644 |pv=P569}} | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. | |
Lenin | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q1394 |pv=P569}} | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. |
{{#invoke:WikidataDato |norskDatoLenket |pv=P569}} | {{#invoke:WikidataDato |norskDatoLenket |qv=Q1394 |pv=P569}} | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. | |
Platon | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q859 |pv=P569}} | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. |
{{#invoke:WikidataDato |norskDatoLenket |pv=P569}} | {{#invoke:WikidataDato |norskDatoLenket |qv=Q859 |pv=P569}} | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. | |
Julien Brulé (død) | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. | ||
Giuseppe Corsi da Celano (født) | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. | ||
Sergej Kirdjapkin | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. | ||
Sergej Kirdjapkin | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. | ||
Nicole Oresme | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. | ||
Hiempsal I | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q523301 |pv=P569}} | Skriptfeil: Modulen returnerte en nil-verdi. Det forventes at den returnerer en eksporttabell. |
Referanser