Spring til indhold

Modul:Wikidata-embeder

Fra Wikipedia, den frie encyklopædi
require('Modul:No globals')
local p = {}
local wikibase = mw.wikibase
local lang = mw.language.getContentLanguage()

local function getQualifierId(qualifier)
	if qualifier then
		local first = qualifier[1]
		if first.snaktype == 'value' then
			return first.datavalue.value.id
		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
		mw.logObject(qualifier)
		local first = qualifier[1]
		if first.snaktype == 'value' then
			return first.datavalue.value
		end
	end
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 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

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 p39 = wikibase.getBestStatements(qid, 'P39')
	local tekst = ''
	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
		local valg
		local nr
		if embedeID then
			local qualifiers = embede.qualifiers
			if qualifiers then
				erstatter = getQualifierId(qualifiers.P1365)
				erstattet_af = getQualifierId(qualifiers.P1366)
				kabinet = getQualifierId(qualifiers.P5054)
				organisation = getQualifierId(qualifiers.P2389)
				for_ = getQualifierId(qualifiers.P642)
				valgkreds = getQualifierId(qualifiers.P768)
				arbejdsgiver = getQualifierId(qualifiers.P108)
				arbejdsfelt = getQualifierId(qualifiers.P101)
				parlamentsgruppe = getQualifierId(qualifiers.P4100)
				parlamentsperiode = getQualifierId(qualifiers.P2937)
				valg = getQualifierId(qualifiers.P2715)
				start, startP = getQualifierTid(qualifiers.P580)
				slut, slutP = getQualifierTid(qualifiers.P582)
				tidspunkt, tidspunktP = getQualifierTid(qualifiers.P585)
				nr = getQualifierTekst(qualifiers.P1545)
				
	    		tekst = tekst .. '\n\nEmbede: ' .. vis_qid(embedeID) .. '\n'
	    		if erstatter then tekst = tekst .. '* Erstatter: ' .. vis_qid(erstatter) .. '\n' end
	    		if erstattet_af then tekst = tekst .. '* Erstattet af: ' .. vis_qid(erstattet_af) .. '\n' end
	    		if kabinet then tekst = tekst .. '* Kabinet: ' .. vis_qid(kabinet) .. '\n' end
	    		if for_ then tekst = tekst .. '* For: ' .. vis_qid(for_) .. '\n' end
	    		if valgkreds then tekst = tekst .. '* Valgkreds: ' .. vis_qid(valgkreds) .. '\n' end
	    		if arbejdsgiver then tekst = tekst .. '* Arbejdsgiver: ' .. vis_qid(arbejdsgiver) .. '\n' end
	    		if arbejdsfelt then tekst = tekst .. '* Arbejdsfelt: ' .. vis_qid(arbejdsfelt) .. '\n' end
	    		if parlamentsgruppe then tekst = tekst .. '* Parlamentsgruppe: ' .. vis_qid(parlamentsgruppe) .. '\n' end
	    		if parlamentsperiode then tekst = tekst .. '* Parlamentsperiode: ' .. vis_qid(parlamentsperiode) .. '\n' end
	    		if valg then tekst = tekst .. '* Valg: ' .. vis_qid(valg) .. '\n' end
	    		if start then tekst = tekst .. '* Start: ' .. vis_tid(start, startP) .. '\n' end
	    		if slut then tekst = tekst .. '* Slut: ' ..  vis_tid(slut, slutP) .. '\n' end
	    		if tidspunkt then tekst = tekst .. '* Tidspunkt: ' .. vis_tid(tidspunkt, tidspunktP) .. '\n' end
	    		if nr then tekst = tekst .. '* Nr.: ' .. nr .. '\n' end

			end
		end
	end
	return tekst
end

return p