Modul:WikidataDato: Forskjell mellom sideversjoner
Hopp til navigering
Hopp til søk
Ingen redigeringsforklaring |
(Små forbedringer av koden, samt oppdaterer den ulenkede datofunksjonen) |
||
Linje 24: | Linje 24: | ||
if string.sub(timestamp, 1, 1) == '-' then |
if string.sub(timestamp, 1, 1) == '-' then |
||
aar = aar..' f.Kr.' |
aar = aar..' f.Kr.' |
||
end |
|||
return aar,maande,dag |
return aar,maande,dag |
||
end |
end |
||
Linje 43: | Linje 43: | ||
utstring = dag..' '..maande..' '..aar |
utstring = dag..' '..maande..' '..aar |
||
end |
end |
||
if presisjon == 10 then |
|||
utstring = maande..' '..aar |
utstring = maande..' '..aar |
||
end |
|||
if presisjon == 9 then |
if presisjon == 9 then |
||
utstring = aar |
utstring = aar |
||
Linje 63: | Linje 63: | ||
return '[['..dag..' '..maande..']] [['..aar..']]' |
return '[['..dag..' '..maande..']] [['..aar..']]' |
||
end |
end |
||
if presisjon == 10 then |
|||
return maande..' '..aar |
return maande..' '..aar |
||
end |
|||
if presisjon == 9 then |
|||
return '[['..aar..']]' |
return '[['..aar..']]' |
||
end |
end |
||
Linje 79: | Linje 79: | ||
local function frameargs(frame) |
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 |
end |
||
function p.okProperty(prop) |
|||
-- Sjekk at prop finnes og inneholder det vi trenger for å lage ok norsk dato |
|||
if prop |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
and prop['mainsnak']["datavalue"]["value"]['calendarmodel'] |
|||
⚫ | |||
⚫ | |||
⚫ | |||
return false |
|||
⚫ | |||
function p.finnBesteProperty(frame) |
function p.finnBesteProperty(frame) |
||
Linje 106: | Linje 120: | ||
while i < #prop do |
while i < #prop do |
||
i = i + 1 |
i = i + 1 |
||
if p.okProperty(prop[i]) then |
|||
local rank = prop[i]["rank"] |
|||
⚫ | |||
⚫ | |||
return prop[i] |
|||
⚫ | |||
end |
|||
⚫ | |||
if |
if rank == 'normal' then |
||
oki = |
if oki == 0 then |
||
oki = i |
|||
end |
|||
end |
end |
||
end |
end |
||
Linje 126: | Linje 142: | ||
return "" |
return "" |
||
end |
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 |
|||
⚫ | |||
⚫ | |||
local presisjon = prop['mainsnak']["datavalue"]["value"]["precision"] |
local presisjon = prop['mainsnak']["datavalue"]["value"]["precision"] |
||
local timestamp = prop['mainsnak']["datavalue"]["value"]["time"] |
local timestamp = prop['mainsnak']["datavalue"]["value"]["time"] |
||
Linje 138: | Linje 153: | ||
function p.norskDato(frame) |
function p.norskDato(frame) |
||
local |
local prop = p.finnBesteProperty(frame) |
||
⚫ | |||
local entity = mw.wikibase.getEntity(qv) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
end |
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 |
|||
local presisjon = prop['mainsnak']["datavalue"]["value"]["precision"] |
|||
local timestamp = prop['mainsnak']["datavalue"]["value"]["time"] |
|||
local kal = prop['mainsnak']["datavalue"]["value"]["calendarmodel"] |
|||
return norskDato(timestamp, presisjon) .. kalender(kal) |
return norskDato(timestamp, presisjon) .. kalender(kal) |
||
end |
end |
Sideversjonen fra 27. sep. 2015 kl. 19:53
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}} | |
{{#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
local p = {} function dump( out ) if type( out ) == 'table' then local s = '{ ' for k,v in pairs( out ) do if type( k ) ~= 'number' then k = '"'..k..'"' end s = s .. '['..k..'] = ' .. dump( v ) .. ',' end return s .. '} ' else return tostring( out ) end end local lang = mw.language.getContentLanguage() local maanednavn = {'januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'} function splitTimestamp(timestamp) local aar = tonumber(string.sub(timestamp, 2, 5)) local maande = maanednavn[tonumber(string.sub(timestamp, 7, 8))] local dag = tonumber(string.sub(timestamp, 10, 11))..'.' if string.sub(timestamp, 1, 1) == '-' then aar = aar..' f.Kr.' end return aar,maande,dag end function kalender(kal) if kal == 'http://www.wikidata.org/entity/Q1985727' then return '' end if kal == 'http://www.wikidata.org/entity/Q1985786' then return ' ([[Den julianske kalenderen|juliansk]])' end return kal end local function norskDato(timestamp, presisjon) local aar,maande,dag = splitTimestamp(timestamp) if presisjon == 11 then utstring = dag..' '..maande..' '..aar end if presisjon == 10 then utstring = maande..' '..aar end if presisjon == 9 then utstring = aar end if presisjon == 8 then utstring = tonumber(string.sub(aar, 1, 3))..'0-årene' end if presisjon == 7 then utstring = tonumber(string.sub(aar,1, 2))..'. århundre' end return utstring end local function norskDatoLenket(timestamp, presisjon) local aar,maande,dag = splitTimestamp(timestamp) if presisjon == 11 then return '[['..dag..' '..maande..']] [['..aar..']]' end if presisjon == 10 then return maande..' '..aar end if presisjon == 9 then return '[['..aar..']]' end if presisjon == 8 then return '[['..tonumber(string.sub(aar, 1, 3))..'0-årene]]' end if presisjon == 7 then return '[['..tonumber(string.sub(aar, 1, 2))..'. århundre]]' end return '' 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(prop) -- Sjekk at prop finnes og inneholder det vi trenger for å lage ok norsk dato if prop and prop['mainsnak'] and prop["rank"] and prop['mainsnak']["datavalue"] and prop['mainsnak']["datavalue"]["value"] and prop['mainsnak']["datavalue"]["value"]['time'] and prop['mainsnak']["datavalue"]["value"]['precision'] and prop['mainsnak']["datavalue"]["value"]['calendarmodel'] then return true end return false end function p.finnBesteProperty(frame) local qv,pv = frameargs(frame) local entity = mw.wikibase.getEntity(qv) if not entity then return end if not entity['claims'] or not entity['claims'][pv] then return end local prop = entity['claims'][pv] local i = 0 local oki = 0 while i < #prop do i = i + 1 if p.okProperty(prop[i]) then local rank = prop[i]["rank"] if rank == 'preferred' then return prop[i] end if rank == 'normal' then if oki == 0 then oki = i end end end end if oki>0 then return prop[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 local presisjon = prop['mainsnak']["datavalue"]["value"]["precision"] local timestamp = prop['mainsnak']["datavalue"]["value"]["time"] local kal = prop['mainsnak']["datavalue"]["value"]["calendarmodel"] return norskDatoLenket(timestamp, presisjon) 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 local presisjon = prop['mainsnak']["datavalue"]["value"]["precision"] local timestamp = prop['mainsnak']["datavalue"]["value"]["time"] local kal = prop['mainsnak']["datavalue"]["value"]["calendarmodel"] return norskDato(timestamp, presisjon) .. kalender(kal) end return p