Modul:WikidataIB

Fra Wikisida.no
Sideversjon per 5. feb. 2016 kl. 16:25 av nb>Stigmj (første utgave, test)
(diff) ← Eldre sideversjon | Nåværende sideversjon (diff) | Nyere sideversjon → (diff)
Hopp til navigering Hopp til søk

Dokumentasjon for denne modulen kan opprettes på Modul:WikidataIB/dok

local p = {}

-- Denne funksjonen returnerer noe
function get_single_value(property_value, first)
	lang = mw.language.getContentLanguage()
	if not property_value.mainsnak or not property_value.mainsnak.datavalue or not property_value.mainsnak.datavalue.value then
		return ""
	end
	local q_value = 'Q' .. property_value.mainsnak.datavalue.value["numeric-id"]
	local label = mw.wikibase.label(q_value)
	local sitelink = mw.wikibase.sitelink(q_value)
	if label and sitelink then
		if first then
			return '[[' .. sitelink .. '|' .. lang:ucfirst(label) .. ']]'
		else
			return '[[' .. sitelink .. '|' .. label .. ']]'
		end
	end
	if label and not sitelink then
		if first then
			return lang:ucfirst(label)
		else
			return label
		end
		
	end
	if sitelink and not label then
		return '[[' .. sitelink .. ']]'
	end
	-- changing target, breaking user expectation
	return "[[d:" .. qv .. '|' .. qv .. ']]'
end


--
-- Denne funksjonen kalles opp slik: {{#invoke:WikidataIB|rowProperty|P26}}
-- den vil da returnere en tekst-streng som er en rad i en infoboks slik: <tr class="rad" valign="top"><th colspan="2">[Property-navn]</th><td colspan="2">[claim]</td></tr>
-- property-navn og claim hentes fra wikidata
-- andre argumenter som kan benyttes:
--  property - angir hvilken property som skal benyttes, alternativ måte å spesifisere på: {{#invoke:WikidataIB|rowProperty|property=P26}}
--  liste    - angir at hvis det er flere verdier under en property skal de listes ut slik: <tr class="rad" valign="top"><th colspan="2">[Property-navn]</th><td colspan="2">[claim1], [claim2], ...</td></tr>
--             angis slik: {{#invoke:WikidataIB|rowProperty|P26|liste=1}}
--  dato     - angir om verdiene skal legges inn med dato i parantes i etterkant slik: <tr class="rad" valign="top"><th colspan="2">[Property-navn]</th><td colspan="2">[claim] (dato)</td></tr>
--             angis slik: {{#invoke:WikidataIB|rowProperty|P26|dato=1}}
--             denne kan også kombineres med "liste"
--  verdi    - standardverdi som benyttes dersom wikidata ikke har noen claims/verdier for den angitte egenskapen (property). Må da også spesifiseres sammen med "propertynavn".
--             angis slik: {{#invoke:WikidataIB|rowProperty|P26|verdi=Ola Normann}}
--  pnavn    - egenskapsnavn som benyttes dersom wikidata ikke har den angitte egenskapen (property).
--             angis slik: {{#invoke:WikidataIB|rowProperty|P26|pnavn=Ektefelle}}
--  edit     - angir om en "editeringslink" som peker mot Wikidata skal legges på raden. Kun tilgjengelig hvis alle data hentes fra Wikidata.
--             angis slik: {{#invoke:WikidataIB|rowProperty|P26|edit=1}}
--
function p.rowProperty(frame)
	lang = mw.language.getContentLanguage()
	-- Hent argumentet "property", kalt opp slik: {{#invoke:WikidataIB|rowProperty|property=P26}}
	local property = frameverdi(frame, 'property')
	if property == "" then
		-- Var ikke noe slikt argument, prøv å hente første argument, kalt opp slik: {{#invoke:WikidataIB|rowProperty|P26}}
		property = frameverdi(frame, '1')
	end
	if property == "" then
		-- Ingen argumenter tilgjengelig, så da avslutter vi bare.
		return "[[Kategori:Artikler med invoke WikidataIB rowProperty uten argumenter]]"
	end
	-- Hent argumentet "liste", kalt opp slik: {{#invoke:WikidataIB|rowProperty|P26|liste=1}}
	-- Dette gjør at alle claims under en property blir listet ut, slik: <tr><td>[Property-navn]</td><td>[claim1], [claim2], [claim3] ..</td></tr>
	local list = lang:lowercase(frameverdi(frame, 'liste'))
	if list ~= "" and list == "1" then
		list = true
	else
		list = false
	end
	-- Hent argumentet "dato", kalt opp slik: {{#invoke:WikidataIB|rowProperty|P26|dato=1}}
	-- Dette gjør at claims under en property får dato i parantes i etterkant av claimet, slik: <tr><td>[Property-navn]</td><td>[claim1] (dato)</td></tr>
	local date = lang:lowercase(frameverdi(frame, 'dato'))
	if date ~= "" and date == "1" then
		date = true
	else
		date = false
	end
	-- Hent argumentet "pnavn", kalt opp slik: {{#invoke:WikidataIB|rowProperty|P26|pnavn=Ektefelle}}
	local property_text = frameverdi(frame, 'pnavn')
	-- Hent argumentet "verdi", kalt opp slik: {{#invoke:WikidataIB|rowProperty|P26|pnavn=Ektefelle|verdi=Ola Normann}}
	local claim_value = frameverdi(frame, 'verdi')
	-- Hent argumentet "edit", kalt opp slik: {{#invoke:WikidataIB|rowProperty|P26|edit=1}}
	-- Dette gjør raden får en editeringslink mot wikidata, slik: <tr><td>[Property-navn]</td><td>[claim1]<span class="noprint plainlinks wikidata-linkback" style="padding-left:.5em"><a class="external text" href="//www.wikidata.org/wiki/QXXXXX"><img alt="Redigere på Wikidata" src="//upload.wikimedia.org/wikipedia/commons/thumb/7/73/Blue_pencil.svg/10px-Blue_pencil.svg.png" title="Voir et modifier les données sur Wikidata" width="10" height="10" style="vertical-align: baseline" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/7/73/Blue_pencil.svg/15px-Blue_pencil.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/73/Blue_pencil.svg/20px-Blue_pencil.svg.png 2x" data-file-width="600" data-file-height="600" /></a></span></td></tr>
	local edit = lang:lowercase(frameverdi(frame, 'edit'))
	if edit ~= "" and edit == "1" and property_text ~= "" and claim_value ~= "" then
		edit = true
	else
		edit = false
	end
	

	if not mw.wikibase then
		-- No connection to wikidata, so we'll just bail out now
		return ""
	end
	
	-- Now let's get all the claims
	local wdarticle = mw.wikibase.getEntityObject()
	if not wdarticle then
		-- no entry for this page at Wikidata.
		return ""
	end
	local claims = wdarticle.claims

	if not claims then
		-- no claims for this page at Wikidata.
		return ""
	end
	
	-- Now let's make sure the property is resolvable
	local property_id =  mw.wikibase.resolvePropertyId(property)
	if not property_id then
		-- not resolvable, so it's probably an error or a bogus property
		return ""
	end
	
	local property_values = claims[property_id]
	if not property_values then
		-- No property value is available
		return ""
	end
	if not property_values[1].mainsnak then
		-- No property value is available
		return ""
	end
	if not property_values[1].mainsnak.datavalue then
		-- No property value is available
		return ""
	end

	local i = 1
	local result = get_single_value(property_values[i],true)
	if list then
		local noTranslation = #result==0
		local first = noTranslation
		while i < #property_values do
			i = i+1
			local lres = get_single_value(property_values[i],first)
			if #lres > 0 then
				if not first then
					result = result .. ", "
				end
				result = result .. lres
				first = false;
			else
				noTranslation = true
			end
		end
		if noTranslation then
			result = result .. "[[Kategori:Artikler hvor " .. property .. " mangler oversettelse]]"
		end
	end
	return result
end

return p