Modul:Wikidata-embeder
Udseende
require('Modul:No globals')
local p = {}
local wikibase = mw.wikibase
local lang = mw.language.getContentLanguage()
local function vis_qid(qid)
local label = mw.wikibase.getLabel(qid)
local sitelink = mw.wikibase.getSitelink(qid)
if sitelink then
label = '[[' .. sitelink .. '|' .. label .. ']]'
end
return label
end
local function vis_tid(tid, prec)
if prec == 9 then -- years
return string.sub(tid, 2, 5)
elseif prec == 10 then -- months
return lang:formatDate('F" "Y', tid)
elseif prec == 11 then -- days
return lang:formatDate('j." "F" "Y', tid)
end
return tid .. '(præcision: ' .. prec .. ')'
end
local function getQualifierId(qualifier)
if qualifier then
local first = qualifier[1]
if first.snaktype == 'value' then
return vis_qid(first.datavalue.value.id), first.datavalue.value.id
elseif first.snaktype == 'novalue' then
return 'ingen'
end
end
end
local function getQualifierTid(qualifier)
if qualifier then
local first = qualifier[1]
if first.snaktype == 'value' then
return first.datavalue.value.time, first.datavalue.value.precision
end
end
end
local function getQualifierTekst(qualifier)
if qualifier then
local first = qualifier[1]
if first.snaktype == 'value' then
return first.datavalue.value
end
end
end
local function udskriv(embedeID, embede)
local tekst = 'Embede: ' .. vis_qid(embedeID)
if embede.for_ then
tekst = tekst .. ' for ' .. embede.for_
end
tekst = tekst .. '\n'
if embede.nr then tekst = tekst .. '* Nr.: ' .. embede.nr .. '\n' end
if embede.erstatter then tekst = tekst .. '* Forgænger: ' .. embede.erstatter .. '\n' end
if embede.erstattet_af then tekst = tekst .. '* Efterfølger: ' .. embede.erstattet_af .. '\n' end
if embede.kabinet then tekst = tekst .. '* Kabinet: ' .. embede.kabinet .. '\n' end
if embede.statsoverhoved then tekst = tekst .. '* Statsoverhoved: ' .. embede.statsoverhoved .. '\n' end
if embede.valgkreds then tekst = tekst .. '* Valgkreds: ' .. embede.valgkreds .. '\n' end
if embede.arbejdsgiver then tekst = tekst .. '* Arbejdsgiver: ' .. embede.arbejdsgiver .. '\n' end
if embede.arbejdsfelt then tekst = tekst .. '* Arbejdsfelt: ' .. embede.arbejdsfelt .. '\n' end
if embede.parlamentsgruppe then tekst = tekst .. '* Parlamentsgruppe: ' .. embede.parlamentsgruppe .. '\n' end
if embede.parlamentsperiode then tekst = tekst .. '* Parlamentsperiode: ' .. embede.parlamentsperiode .. '\n' end
if embede.repraesenterer then tekst = tekst .. '* Repræsenterer: ' .. embede.repraesenterer .. '\n' end
if embede.valg then tekst = tekst .. '* Valg: ' .. embede.valg .. '\n' end
if embede.start then
if embede.slut then
tekst = tekst .. '* Tid: ' .. vis_tid(embede.start, embede.startP) ..
' – ' .. vis_tid(embede.slut, embede.slutP) .. '\n'
else
tekst = tekst .. '* Start: ' .. vis_tid(embede.start, embede.startP) .. '\n'
end
elseif embede.tidspunkt then
tekst = tekst .. '* Tidspunkt: ' .. vis_tid(embede.tidspunkt, embede.tidspunktP) .. '\n'
end
return tekst
end
function p.embeder(frame)
local args = (frame == mw.getCurrentFrame()) and frame:getParent().args or frame.args
local qid = args.q or mw.wikibase.getEntilotyIdForCurrentPage()
if not qid then
return ''
end
local liste = {}
local p39 = wikibase.getBestStatements(qid, 'P39')
for _, embede in pairs(p39) do
local embedeID = (embede.mainsnak.snaktype == "value") and embede.mainsnak.datavalue.value.id or nil
local erstatter
local erstattet_af
local kabinet
local organisation
local for_
local start, startP
local slut, slutP
local tidspunkt, tidspunktP
local valgkreds
local arbejdsgiver
local arbejdsfelt
local parlamentsgruppe
local parlamentsperiode, parlamentsperiodeId
local repraesenterer
local statsoverhoved
local valg
local nr
if embedeID then
local dette = {}
local qualifiers = embede.qualifiers
if qualifiers then
dette.erstatter = getQualifierId(qualifiers.P1365)
dette.erstattet_af = getQualifierId(qualifiers.P1366)
dette.kabinet = getQualifierId(qualifiers.P5054)
dette.organisation = getQualifierId(qualifiers.P2389)
dette.for_ = getQualifierId(qualifiers.P642)
dette.valgkreds = getQualifierId(qualifiers.P768)
dette.arbejdsgiver = getQualifierId(qualifiers.P108)
dette.arbejdsfelt = getQualifierId(qualifiers.P101)
dette.parlamentsgruppe = getQualifierId(qualifiers.P4100)
dette.parlamentsperiode, dette.parlamentsperiodeId = getQualifierId(qualifiers.P2937)
dette.valg = getQualifierId(qualifiers.P2715)
dette.repraesenterer = getQualifierId(qualifiers.P1268)
dette.statsoverhoved = getQualifierId(qualifiers.P35)
dette.start, dette.startP = getQualifierTid(qualifiers.P580)
dette.slut, dette.slutP = getQualifierTid(qualifiers.P582)
dette.tidspunkt, dette.tidspunktP = getQualifierTid(qualifiers.P585)
dette.nr = getQualifierTekst(qualifiers.P1545)
if dette.parlamentsperiode then
if not dette.start then
local s = wikibase.getBestStatements(dette.parlamentsperiodeId, 'P571')
local first = s[1]
if first and first.mainsnak.snaktype == "value" then
dette.start = first.mainsnak.datavalue.value.time
dette.startP = first.mainsnak.datavalue.value.precision
end
end
if not dette.slut then
local s = wikibase.getBestStatements(dette.parlamentsperiodeId, 'P576')
local first = s[1]
if first and first.mainsnak.snaktype == "value" then
dette.slut = first.mainsnak.datavalue.value.time
dette.slutP = first.mainsnak.datavalue.value.precision
end
end
end
end
dette.sortkey = dette.start or dette.tidspunkt or ''
if not liste[embedeID] then
liste[embedeID] = {}
end
liste[embedeID][#liste[embedeID] + 1] = dette
end
end
local embede_sort = {}
for embedeID, embede_liste in pairs(liste) do
table.sort(embede_liste, function(a,b) return a.sortkey < b.sortkey end)
embede_sort[#embede_sort + 1] = {
['id'] = embedeID,
['sortkey'] = embede_liste[1].sortkey,
['liste'] = embede_liste
}
end
table.sort(embede_sort, function(a,b) return a.sortkey < b.sortkey end)
local tekst = {}
for _, sort in pairs(embede_sort) do
for _, embede in pairs(sort.liste) do
tekst[#tekst + 1] = udskriv(sort.id, embede)
end
end
return table.concat(tekst, '\n')
end
return p