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 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 repraesenterer
		local statsoverhoved
		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)
				repraesenterer = getQualifierId(qualifiers.P1268)
				statsoverhoved = getQualifierId(qualifiers.P35)
				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 statsoverhoved then tekst = tekst .. '* Statsoverhoved: ' .. statsoverhoved .. '\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 repraesenterer then tekst = tekst .. '* Repræsenterer: ' .. repraesenterer .. '\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