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. 19: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