Modul:Forfatter
Dokumentation for dette modul kan oprettes på Modul:Forfatter/dok
-- Forsøg at finde et passende wikipedialink på wikidata
local function findwikipedialink()
local id = mw.wikibase.getEntity()
if id == nil then
return ""
else
local wikipedialiste = {"dawiki","enwiki","nowiki","svwiki","nnwiki","dewiki"}
local linkprefix = {"","en:","no:","sv:","nn:","de:"}
local link = nil
for i,v in ipairs(wikipedialiste) do
link = id:getSitelink(v)
if link ~= nil then
return linkprefix[i] .. link
end
end
return ""
end
end
-- Forsøg at finde et passende wikiquotelink på wikidata
local function findwikiquotelink()
local id = mw.wikibase.getEntity()
if id == nil then
return ""
else
local wikiquoteliste = {"dawikiquote","enwikiquote","nowikiquote","svwikiquote","nnwikiquote","dewikiquote"}
local linkprefix = {"","en:","no:","sv:","nn:","de:"}
local link = nil
for i,v in ipairs(wikiquoteliste) do
link = id:getSitelink(v)
if link ~= nil then
return linkprefix[i] .. link
end
end
return ""
end
end
-- Forsøg at finde et passe commonslink på wikidata
local function findcommonslink()
local id = mw.wikibase.getEntity()
if id == nil then
return ""
else
local p373 = id:getBestStatements("P373")
if p373[1] ~= nil then
if p373[1].mainsnak.datavalue ~= nil then
return "Category:" .. p373[1].mainsnak.datavalue.value
end
end
local p910 = id:getBestStatements("P910")
if p910[1] ~= nil then
if p910[1].mainsnak.datavalue ~= nil then
local hovedkat = mw.wikibase.getEntity(p910[1].mainsnak.datavalue.value.id)
if hovedkat ~= nil then
local hovedkatlink = hovedkat:getSitelink("commonswiki")
if hovedkatlink ~= nil then
return hovedkatlink
end
end
end
end
local link = id:getSitelink("commonswiki")
if link ~= nil then
return link
end
local p935 = id:getBestStatements("P935")
if p935[1] ~= nil then
if p935[1].mainsnak.datavalue ~= nil then
return p935[1].mainsnak.datavalue.value
end
end
return ""
end
end
-- Lav en i dato wikidataformat om til en passende tekststreng
-- Håndterer foreløbig ikke datoer angivet med +/- etellerandet korrekt
-- Håndterer foreløbig ikke datoer før år 1 med anden præcision end et år
-- Håndterer foreløbig ikke datoer med anden præcision end dag, måned, år eller årti
local function udtraekdato(dato, datotype)
if mw.ustring.sub(dato.time,1,1) ~= "+" then
if dato.precision >= 9 then
-- Datoen er angivet til et specifikt år
local aar = mw.ustring.sub(dato.time,2,5)
if mw.ustring.sub(aar,1,1) == "0" then
aar = mw.ustring.sub(aar,2,4)
end
if mw.ustring.sub(aar,1,1) == "0" then
aar = mw.ustring.sub(aar,2,3)
end
if mw.ustring.sub(aar,1,1) == "0" then
aar = mw.ustring.sub(aar,2,2)
end
if datotype == "bday" then
return "<time datetime=\"-" .. aar .. "\" itemprop=\"birthDate\" class=\"" .. datotype .. "\">" .. aar .. " fvt.</time>"
end
if datotype == "dday" then
return "<time datetime=\"-" .. aar .. "\" itemprop=\"deathDate\" class=\"" .. datotype .. "\">" .. aar .. " fvt.</time>"
end
end
return nil
end
local lang = mw.language.getContentLanguage()
if dato.precision >= 11 then
-- Datoen er angivet til en specifik dag
local isodato = lang:formatDate( "Y-m-d", dato.time)
local formateretdato = lang:formatDate( "j. F Y", dato.time)
if isodato ~= nil and formateretdato ~= nil then
if datotype == "bday" then
return "<time datetime=\"" .. isodato .. "\" itemprop=\"birthDate\" class=\"" .. datotype .. "\">" .. formateretdato .. "</time>"
end
if datotype == "dday" then
return "<time datetime=\"" .. isodato .. "\" itemprop=\"deathDate\" class=\"" .. datotype .. "\">" .. formateretdato .. "</time>"
end
end
else
if dato.precision >= 10 then
-- Datoen er angivet til en specifik måned og år, men ikke en dato
-- Datoformateringsfunktionerne giver forkerte resultater med månedsdag på "00"
local temp = mw.ustring.sub(dato.time,1,8) .. '-01'
local isodato = lang:formatDate( "Y-m", temp)
local formateretdato = lang:formatDate( "F Y", temp)
if isodato ~= nil and formateretdato ~= nil then
if datotype == "bday" then
return "<time datetime=\"" .. isodato .. "\" itemprop=\"birthDate\" class=\"" .. datotype .. "\">" .. formateretdato .. "</time>"
end
if datotype == "dday" then
return "<time datetime=\"" .. isodato .. "\" itemprop=\"deathDate\" class=\"" .. datotype .. "\">" .. formateretdato .. "</time>"
end
end
else
if dato.precision >= 9 then
-- Datoen er angivet til et specifikt år, men ikke en specifik dato
local aar = mw.ustring.sub(dato.time,2,5)
if mw.ustring.sub(aar,1,1) == "0" then
aar = mw.ustring.sub(aar,2,4)
end
if mw.ustring.sub(aar,1,1) == "0" then
aar = mw.ustring.sub(aar,2,3)
end
if mw.ustring.sub(aar,1,1) == "0" then
aar = mw.ustring.sub(aar,2,2)
end
if datotype == "bday" then
return "<time datetime=\"" .. aar .. "\" itemprop=\"birthDate\" class=\"" .. datotype .. "\">" .. aar .. "</time>"
end
if datotype == "dday" then
return "<time datetime=\"" .. aar .. "\" itemprop=\"deathDate\" class=\"" .. datotype .. "\">" .. aar .. "</time>"
end
else
if dato.precision >= 8 then
-- Datoen er angivet med præcision svarende til et årti
local aarti = mw.ustring.sub(dato.time,2,5)
if mw.ustring.sub(aarti,1,1) == "0" then
aarti = mw.ustring.sub(aarti,2,4)
end
if mw.ustring.sub(aarti,1,1) == "0" then
aarti = mw.ustring.sub(aarti,2,3)
end
if mw.ustring.sub(aarti,1,1) == "0" then
aarti = mw.ustring.sub(aarti,2,2)
end
if datotype == "bday" then
return "<time datetime=\"" .. aarti .. "\" itemprop=\"birthDate\" class=\"" .. datotype .. "\">" .. aarti .. "erne</time>"
end
if datotype == "dday" then
return "<time datetime=\"" .. aarti .. "\" itemprop=\"deathDate\" class=\"" .. datotype .. "\">" .. aarti .. "erne</time>"
end
end
end
end
end
return nil
end
local p = {}
-- Tjek om siden er på wikidata
function p.tjekwikidata()
local id = mw.wikibase.getEntity()
if id == nil then
return "[[Kategori:Forfattersider uden forbindelse til wikidata]]"
else
return ""
end
end
-- Returnerer wikitekst for at vise et billede om muligt
function p.billedewikitekst(frame)
local input = frame.args[1]
local billede = ""
local billedtekst = ""
if input == "" or input == nil then
-- Hvis der ikke er angivet et billede, så forsøg at finde et på wikidata
local id = mw.wikibase.getEntity()
if id ~= nil then
local billedestatement = id:getBestStatements("P18")
if billedestatement[1] ~= nil then
if billedestatement[1].mainsnak.datavalue ~= nil then
-- Der er et brugbart billede på wikidata
billede = billedestatement[1].mainsnak.datavalue.value
-- Kontroller om der også er angivet en billedtekst på dansk
if billedestatement[1].qualifiers ~= nil then
if billedestatement[1].qualifiers['P2096'] ~= nil then
for i,j in pairs(billedestatement[1].qualifiers['P2096']) do
if j.datavalue.value.language == "da" then
billedtekst = j.datavalue.value.text
end
end
end
end
end
end
end
else
billede = input
end
if billede ~= "" and billede ~= nil then
if billedtekst == "" or billedtekst == nil then
-- Hvis der ikke blev fundet en billedtekst på wikidata, så brug navnet istedet
local navn = frame.args[2]
billedtekst = navn
end
if billedtekst ~= "" and billedtekst ~= nil then
return "[[Fil:" .. billede .. "|thumb|class=photo|" .. billedtekst .. "]]"
else
return "[[Fil:" .. billede .. "|thumb|class=photo]]"
end
else
return ""
end
end
-- Returnerer wikitekst for et link til wikipedia om muligt
function p.wikipedia(frame)
local input = frame.args[1]
local link = ""
if input == "" or input == nil then
-- Hvis der ikke er angivet et link, så forsøg at finde et på wikidata
link = findwikipedialink()
else
link = input
end
if link ~= "" and link ~= nil then
return "<div style=\"margin:0.5em;\">\'\'<div style=\"display: table-cell; vertical-align: middle;\">[[Fil:Wikipedia-logo-v2.svg|20px]] Biografi på \'\'\'[[w:" .. link .. "|Wikipedia]]\'\'\'</div>\'\'</div>"
else
return ""
end
end
-- Returnerer wikitekst for et link til wikiquote om muligt
function p.wikiquote(frame)
local input = frame.args[1]
local link = ""
if input == "" or input == nil then
-- Hvis der ikke er angivet et link, så forsøg at finde et på wikidata
link = findwikiquotelink()
else
link = input
end
if link ~= "" and link ~= nil then
return "<div style=\"margin:0.5em;\">\'\'<div style=\"display: table-cell; vertical-align: middle;\">[[Fil:Wikiquote-logo.svg|20px]] Citater på \'\'\'[[q:" .. link .. "|Wikiquote]]\'\'\'</div>\'\'</div>"
else
return ""
end
end
-- Returnerer wikitekst for et link til commons om muligt
function p.commons(frame)
local input = frame.args[1]
local link = ""
if input == "" or input == nil then
-- Hvis der ikke er angivet et link, så forsøg at finde et på wikidata
link = findcommonslink()
else
link = input
end
if link ~= "" and link ~= nil then
return "<div style=\"margin:0.5em;\">\'\'<div style=\"display: table-cell; vertical-align: middle;\">[[Fil:Commons-logo.svg|20px]] Billeder, videoer og lydfiler på \'\'\'[[commons:" .. link .. "|Wikimedia Commons]]\'\'\'</div>\'\'</div>"
else
return ""
end
end
-- Returnerer wikitekst for fødsels- og dødsdatoer om muligt
function p.datoer(frame)
local input = frame.args[1]
if input ~= "" and input ~= nil then
return " " .. input
end
local id = mw.wikibase.getEntity()
if id == nil then
return ""
end
-- Find fødselsdato
local p569 = id:getBestStatements("P569")
local fdato = nil
if p569[1] ~= nil then
if p569[1].mainsnak.datavalue ~= nil then
fdato = udtraekdato(p569[1].mainsnak.datavalue.value, "bday")
end
-- Er der angivet to datoer med samme prioritet, så angiv begge med en skråstreg
local fdato2 =nil
if p569[2] ~= nil then
if p569[2].mainsnak.datavalue ~= nil then
fdato2 = udtraekdato(p569[2].mainsnak.datavalue.value, "bday")
end
if fdato ~= nil and fdato2 ~= nil then
fdato = fdato .. "/" .. fdato2
end
end
end
-- Find dødsdato
local p570 = id:getBestStatements("P570")
local ddato = nil
if p570[1] ~= nil then
if p570[1].mainsnak.datavalue ~= nil then
ddato = udtraekdato(p570[1].mainsnak.datavalue.value, "dday")
end
-- Er der angivet to datoer med samme prioritet, så angiv begge med en skråstreg
local ddato2 =nil
if p570[2] ~= nil then
if p570[2].mainsnak.datavalue ~= nil then
ddato2 = udtraekdato(p570[2].mainsnak.datavalue.value, "dday")
end
if ddato ~= nil and ddato2 ~= nil then
ddato = ddato .. "/" .. ddato2
end
end
end
if fdato ~= nil and ddato ~= nil then
return " (" .. fdato .. " – " .. ddato ..")"
end
if fdato ~= nil and ddato == nil then
return " (f. " .. fdato .. ")"
end
if fdato == nil and ddato ~= nil then
return " (d. " .. ddato .. ")"
end
return ""
end
return p