Modul:WikidataIB: Forskjell mellom sideversjoner
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 .. ' ' |
|||
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) |
|||
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 (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 |
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"]) |
||
local |
local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) |
||
if label |
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 |
|||
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 .. ' ' 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