Spring til indhold

Modul:Wikidata-embeder

Fra Wikipedia, den frie encyklopædi
Version fra 12. jan. 2020, 15:22 af Dipsacus fullonum (diskussion | bidrag) Dipsacus fullonum (diskussion | bidrag) (Hent manglende stat- og sluttider fra parlamentsperiode. Test for novalue.)
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
		mw.logObject(qualifier)
		local first = qualifier[1]
		if first.snaktype == 'value' then
			return first.datavalue.value
		end
	end
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, parlamentsperiodeId
		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, parlamentsperiodeId = 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)

				if parlamentsperiode then
					if not start then
						local s = wikibase.getBestStatements(parlamentsperiodeId, 'P571')
						local first = s[1]
						if first and first.mainsnak.snaktype == "value" then
							start = first.mainsnak.datavalue.value.time 
							startP = first.mainsnak.datavalue.value.precision
						end
					end
					if not slut then
						local s = wikibase.getBestStatements(parlamentsperiodeId, 'P576')
						local first = s[1]
						if first and first.mainsnak.snaktype == "value" then
							slut = first.mainsnak.datavalue.value.time 
							slutP = first.mainsnak.datavalue.value.precision
						end
					end
				end

				tekst = tekst .. '\n\nEmbede: ' .. vis_qid(embedeID)
				if for_ then
					tekst = tekst .. ' for ' .. for_
				end
				tekst = tekst .. '\n'

				if nr then tekst = tekst .. '* Nr.: ' .. nr .. '\n' end
				if erstatter then tekst = tekst .. '* Erstatter: ' .. erstatter .. '\n' end
				if erstattet_af then tekst = tekst .. '* Erstattet af: ' .. erstattet_af .. '\n' end
				if kabinet then tekst = tekst .. '* Kabinet: ' .. kabinet .. '\n' end
				if valgkreds then tekst = tekst .. '* Valgkreds: ' .. valgkreds .. '\n' end
				if arbejdsgiver then tekst = tekst .. '* Arbejdsgiver: ' .. arbejdsgiver .. '\n' end
				if arbejdsfelt then tekst = tekst .. '* Arbejdsfelt: ' .. arbejdsfelt .. '\n' end
				if parlamentsgruppe then tekst = tekst .. '* Parlamentsgruppe: ' .. parlamentsgruppe .. '\n' end
				if parlamentsperiode then tekst = tekst .. '* Parlamentsperiode: ' .. parlamentsperiode .. '\n' end
				if valg then tekst = tekst .. '* Valg: ' .. valg .. '\n' end
				if start then
					if slut then
						tekst = tekst .. '* Tid: ' .. vis_tid(start, startP) .. ' – ' .. vis_tid(slut, slutP) .. '\n'
					else
						tekst = tekst .. '* Start: ' .. vis_tid(start, startP) .. '\n'
					end
				elseif tidspunkt then
					tekst = tekst .. '* Tidspunkt: ' .. vis_tid(tidspunkt, tidspunktP) .. '\n'
				end
			end
		end
	end
	return tekst
end

return p