Modul:WikidataIB: Forskjell mellom sideversjoner

Fra Wikisida.no
Hopp til navigering Hopp til søk
m (+id)
(skrevet om litt)
Linje 1: Linje 1:
local p = {}
local p = {}



function pTable(table)
function pTable(table, indentation)
local r = ""
local r = ""
if not indentation then
indentation = 0
end
for k,v in pairs( table ) do
for k,v in pairs( table ) do
local i = 0
while i < indentation do
r = r .. '&nbsp;&nbsp;&nbsp;&nbsp;'
i = i+1
end
if (type(v) == 'table') then
if (type(v) == 'table') then
r = r .. k .. "=" .. pTable(v) .. ", "
r = r .. k .. "=<br />\n" .. pTable(v, indentation+1) .. "<br />\n "
else
else
r = r .. k .. "=" .. v .. ", "
r = r .. k .. "=" .. v .. "<br />\n "
end
end
end
end
Linje 28: Linje 37:
end
end


-- This is used to get a value, or a comma separated list of them if multiple values exist

function getValue(propertyID, list, date, edit)
-- Denne funksjonen returnerer noe
local langcode = mw.language.getContentLanguage().code
function get_single_value(property_value, first)
lang = mw.language.getContentLanguage()
local entity = mw.wikibase.getEntityObject()
local claims
if not property_value.mainsnak or not property_value.mainsnak.datavalue or not property_value.mainsnak.datavalue.value then
if entity and entity.claims then
return ""
claims = entity.claims[propertyID]
end
end
if claims then
local retval = ""
-- if wiki-linked value output as link if possible
-- retval = retval .. 'property_value.mainsnak.datavalue =' .. pTable(property_value.mainsnak.datavalue) .. ' '
if property_value.mainsnak.datavalue.type == 'wikibase-entityid' then
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
-- This is a wikibase entity, so let's make it a link
for k, v in pairs(claims) do
local q_value = 'Q' .. property_value.mainsnak.datavalue.value["numeric-id"]
local label = mw.wikibase.label(q_value)
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
local sitelink = mw.wikibase.sitelink(q_value)
local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"])
if label and sitelink then
if label == nil then
label = "Q" .. v.mainsnak.datavalue.value["numeric-id"]
if first and label ~= sitelink then
end
retval = retval .. '[[' .. sitelink .. '|' .. lang:ucfirst(label) .. ']]'
elseif label ~= sitelink then
retval = retval .. '[[' .. sitelink .. '|' .. label .. ']]'
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
else
retval = retval .. '[[' .. sitelink .. ']]'
out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. label .. "]]<abbr title='Artikkelen er ikke tilgjengelig på denne wikien enda'>[*]</abbr>"
end
if date then
for k2, v2 in pairs(v.qualifiers['P585']) do
if v2.snaktype == 'value' then
out[#out] = out[#out] .. " (" .. mw.language.new(langcode):formatDate("j. F Y", v2.datavalue.value.time) .. ")"
end
end
end
if not list then
break
end
end
end
return table.concat(out, ", ")
elseif label and not sitelink then
elseif (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == 'quantity') then
if first then
local out = {}
retval = retval .. lang:ucfirst(label)
for k, v in pairs(claims) do
else
out[#out + 1] = tonumber(v.mainsnak.datavalue.value['amount'])
retval = retval .. label
if date then
for k2, v2 in pairs(v.qualifiers['P585']) do
if v2.snaktype == 'value' then
out[#out] = out[#out] .. " (" .. mw.language.new(langcode):formatDate("j. F Y", v2.datavalue.value.time) .. ")"
end
end
end
if not list then
break
end
end
end
return table.concat(out, ", ")
elseif sitelink and not label then
retval = retval .. '[[' .. sitelink .. ']]'
else
else
-- Unknown type
-- changing target, breaking user expectation
return 'unknown type ' .. claims[1].mainsnak.datavalue.type
retval = retval .. "[[d:" .. q_value .. '|' .. q_value .. ']]'
end
end
elseif property_value.mainsnak.datavalue.type == 'quantity' then
-- This is a quantity of some kind, so let's take the amount
retval = retval .. tonumber(property_value.mainsnak.datavalue.value['amount'])
else
else
return ""
-- Unknown type
retval = retval .. 'unknown type ' .. property_value.mainsnak.datavalue.type
end
end
return retval
end
end


Linje 130: Linje 156:
edit = false
edit = false
end
end
return getValue(property, true, true, edit)

if not mw.wikibase then
-- No connection to wikidata, so we'll just bail out now
return "no connection to wikibase"
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 "no entry for this page at Wikidata"
else
--return pTable(wdarticle)
end
local claims = wdarticle.claims
if not claims then
-- no claims for this page at Wikidata.
return "no claims at Wikidata"
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 "property was not resolvable"
end
local property_values = claims[property_id]
if not property_values then
-- No property value is available
return "no property_value is available"
end
if not property_values[1].mainsnak then
-- No property value is available
return "no property_value mainsnak is available"
end
if not property_values[1].mainsnak.datavalue then
-- No property value is available
return "no property_value mainsnak.datavalue is available"
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
end


return p
return p

Sideversjonen fra 5. feb. 2016 kl. 23:30

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

local p = {}


function pTable(table, indentation)
	local r = ""
	if not indentation then
		indentation = 0
	end
	for k,v in pairs( table ) do
		local i = 0
		while i < indentation do
			r = r .. '&nbsp;&nbsp;&nbsp;&nbsp;'
			i = i+1
		end
		if (type(v) == 'table') then
			r = r .. k .. "=<br />\n" .. pTable(v, indentation+1) .. "<br />\n "
		else
			r = r .. k .. "=" .. v .. "<br />\n "
		end
	end
	return r
end

function getargument(frame, argument)
	local args = frame.args
	if args[1] == nil then
		local pFrame = frame:getParent();
		args = pFrame.args;
		for k,v in pairs( frame.args ) do
			args[k] = v;
		end
	 end
	 if args[argument] then
		return args[argument]
	 end
	 return ""
end

-- This is used to get a value, or a comma separated list of them if multiple values exist
function getValue(propertyID, list, date, edit)
	local langcode = mw.language.getContentLanguage().code
	local entity = mw.wikibase.getEntityObject()
	local claims
	if entity and entity.claims then
		claims = entity.claims[propertyID]
	end
	if claims then
		-- if wiki-linked value output as link if possible
		if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
			local out = {}
			for k, v in pairs(claims) do
				local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
				local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"])
				if label == nil then 
					label = "Q" .. v.mainsnak.datavalue.value["numeric-id"] 
				end
						
				if sitelink then
					out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
				else
					out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. label .. "]]<abbr title='Artikkelen er ikke tilgjengelig på denne wikien enda'>[*]</abbr>"
				end
				if date then
					for k2, v2 in pairs(v.qualifiers['P585']) do
						if v2.snaktype == 'value' then
							out[#out] = out[#out] .. " (" .. mw.language.new(langcode):formatDate("j. F Y", v2.datavalue.value.time) .. ")"
						end
					end
				end
				if not list then 
					break
				end
			end
			return table.concat(out, ", ")
		elseif (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == 'quantity') then
			local out = {}
			for k, v in pairs(claims) do
				out[#out + 1] = tonumber(v.mainsnak.datavalue.value['amount'])
				if date then
					for k2, v2 in pairs(v.qualifiers['P585']) do
						if v2.snaktype == 'value' then
							out[#out] = out[#out] .. " (" .. mw.language.new(langcode):formatDate("j. F Y", v2.datavalue.value.time) .. ")"
						end
					end
				end
				if not list then 
					break
				end
			end
			return table.concat(out, ", ")
		else
			-- Unknown type
			return 'unknown type ' .. claims[1].mainsnak.datavalue.type
		end
	else
		return ""
	end
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 = getargument(frame, 'property')
	if property == "" then
		-- Var ikke noe slikt argument, prøv å hente første argument, kalt opp slik: {{#invoke:WikidataIB|rowProperty|P26}}
		property = getargument(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:lc(getargument(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:lc(getargument(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 = getargument(frame, 'pnavn')
	-- Hent argumentet "verdi", kalt opp slik: {{#invoke:WikidataIB|rowProperty|P26|pnavn=Ektefelle|verdi=Ola Normann}}
	local claim_value = getargument(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:lc(getargument(frame, 'edit'))
	if edit ~= "" and edit == "1" and property_text ~= "" and claim_value ~= "" then
		edit = true
	else
		edit = false
	end
	return getValue(property, true, true, edit)
	
end

return p