Modul:WikidataBilde
Utsjånad
Dokumentasjon for modulen kan opprettast på Modul:WikidataBilde/dok
local p = {}
function dump( out )
if type( out ) == 'table' then
local s = '{ '
for k,v in pairs( out ) do
if type( k ) ~= 'number' then k = '"'..k..'"' end
s = s .. '['..k..'] = ' .. dump( v ) .. ','
end
return s .. '} '
else
return tostring( out )
end
end
local kategori = {[5] = "biografi" }
local resten = "[[Kategori:Artiklar der bilete er henta frå Wikidata]]"
function getProp(qid,pid)
local entity = mw.wikibase.getEntity(qid)
if not entity then
return {}
end
return entity:getBestStatements(pid)
end
function finnKategori(frame)
if not mw.wikibase then
return resten
end
local artikkel = mw.wikibase.getEntityObject()
if not artikkel then
return resten
end
local claims = artikkel:getBestStatements( 'P31' )
if not claims then
return resten
end
for _,v in ipairs( claims ) do
if v.type == 'statement' then
local snak = v.mainsnak
if snak.snaktype == 'value' then
if snak.datatype == 'wikibase-item' then
local data = snak.datavalue
if data.type == 'wikibase-entityid' then
local value = data.value
if value["entity-type"] == "item" then
if kategori[value["numeric-id"]] then
return "[[Kategori:Artiklar der bilete er henta frå Wikidata – " .. kategori[value["numeric-id"]] .. "]]"
end
end
end
end
end
end
end
-- failed to find correct type
return resten
end
-- Return bilete til artikkelen
function p.wikidatabilete(frame)
if not mw.wikibase then
return ""
end
local artikkel = mw.wikibase.getEntityObject()
if not artikkel then
return ""
end
local claims = artikkel:getBestStatements( 'P18' )
if not claims then
return ""
end
for _,v in ipairs( claims ) do
if v.type == 'statement' then
local snak = v.mainsnak
if snak.snaktype == 'value' then
if snak.datatype == 'commonsMedia' then
local data = snak.datavalue
if data.type == 'string' then
return data.value
end
end
end
end
end
-- failed to find correct type
return ""
end
function p.framebilete(frame)
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['bilete'] then
return args['bilete']
end
return ""
end
function p.framekart(frame)
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['kart'] then
return args['kart']
end
return ""
end
function p.velgbilete(frame)
local bilete = p.framebilete(frame)
if bilete then
if bilete == "" then
-- return ""
elseif bilete == "utan" then
return ""
else
return bilete
end
else
return ""
end
local frawikidata = p.wikidatabilete(frame)
local framekart = p.framekart(frame)
if framekart == frawikidata then
return ""
end
return frawikidata
end
function p.biletetekst(frame)
if not mw.wikibase then
return ''
end
local artikkel = mw.wikibase.getEntityObject()
if not artikkel then
return ''
end
local claims = artikkel:getBestStatements( 'P18' )
if not claims then
return ''
end
for _,v in ipairs( claims ) do
if v.type == 'statement' then
local snak = v.mainsnak
if snak.snaktype == 'value' then
if snak.datatype == 'commonsMedia' then
local data = snak.datavalue
if data.type == 'string' then
local q = v.qualifiers
if q then
wdcaptions = q['P2096']
end
if wdcaptions then
for k, l in pairs(wdcaptions) do
if l.datavalue.value and l.datavalue.value.text and l.datavalue.value.language == 'nn' then
return l.datavalue.value.text
end
end
end
end
end
end
end
end
-- failed to find correct type
return ''
end
function p.byline(frame)
if not mw.wikibase then
return ''
end
local artikkel = mw.wikibase.getEntityObject()
if not artikkel then
return ''
end
local claims = artikkel:getBestStatements( 'P18' )
if not claims then
return ''
end
for _,v in ipairs( claims ) do
if v.type == 'statement' then
local snak = v.mainsnak
if snak.snaktype == 'value' then
if snak.datatype == 'commonsMedia' then
local data = snak.datavalue
if data.type == 'string' then
local q = v.qualifiers
if q then
wdcaptions = q['P2093']
end
if wdcaptions then
for k, l in pairs(wdcaptions) do
if l.datavalue.value and l.datavalue.value.text then
return l.datavalue.value.text
end
end
end
end
end
end
end
end
-- failed to find correct type
return ''
end
function p.finnesbileteiartikkel(frame)
local innhold = mw.title.getCurrentTitle():getContent() or ''
local frawikidata = p.wikidatabilete(frame):gsub("[%-%+%*%?%^%%%(%)]", "%%%0") -- Erstatter visse spesialtegn (spesialtegn for Lua) med escapede versjoner av samme spesialtegn
frawikidata = frawikidata:gsub("[_ ]", "[_ ]") -- Erstatter understrek eller mellomrom med mønsteret [_ ], så søket nedenfor finner begge varianter
if innhold:find(":" .. frawikidata) then
return "[[Kategori:Artiklar der bilete frå Wikidata også er brukte utanfor infoboksen]]"
else
return ""
end
end
function p.sammenlignbilete(frame)
local fraframe = p.framebilete(frame)
local frawikidata = p.wikidatabilete(frame)
if fraframe == frawikidata then
if fraframe == "" then
return ""
else
return "[[Kategori:Artiklar der bilete er samme som på Wikidata]]"
end
else
if frawikidata == "" then
return "[[Kategori:Artiklar hvor bilete mangler på Wikidata]]"
end
if fraframe == "" then
return "[[Kategori:Artiklar uten bilete i infoboks med bilete på Wikidata]]"
end
return "[[Kategori:Artiklar med bilete forskjellig fra Wikidata]]"
end
end
function p.sammenlignMedWikidataValgtBilde(frame)
local fraframe = p.framebilete(frame)
local frawikidata = p.wikidatabilete(frame)
local framekart = p.framekart(frame)
local finnesbileteiartikkel = p.finnesbileteiartikkel(frame)
if fraframe == frawikidata then
if fraframe == "" then
return ""
else
return
end
else
if frawikidata == "" then
return "[[Kategori:Artiklar hvor bilete mangler på Wikidata]]"
end
if framekart == frawikidata then
return "[[Kategori:Artiklar hvor kart er samme som bilete på Wikidata]]"
end
if fraframe == "" then
return finnKategori(frame) .. finnesbileteiartikkel
end
return "[[Kategori:Artiklar med bilete forskjellig fra Wikidata]]"
end
end
function bilete(snak)
assert ( snak )
local item = nil
if snak.snaktype == "value" and snak.datatype == "commonsMedia" then
value = snak.datavalue.value or nil
end
return value
end
-- returnerer en rad for overskrift og en avsluttning hvis det er nødvendig
function formatOverskrift (overskrift,kollaps)
local oversk = ""
local avslutt = ""
if overskrift and overskrift ~= "" then
oversk = string.format([[
<tr class="overskrift" valign="top"><td colspan="4">%s</td></tr>
]], overskrift)
end
if kollaps and kollaps ~= "" then
end
return oversk,avslutt
end
function formatbileterad(value)
return string.format([[
<tr class="bilete" valign="top"><td colspan="4" class="sentrert">%s</td></tr>
]], value)
end
function p.bilete(qid,pid)
local prop = getProp(qid,pid)
if not prop or not prop[1] or not prop[1].mainsnak then
return ""
end
return bilete(prop[1].mainsnak)
end
function biletetekst(qualifier)
local P2096 = nil
if qualifier then
P2096 = qualifier['P2096']
end
if P2096 then
for k, l in pairs(P2096) do
if l.datavalue and l.datavalue.value and l.datavalue.value.text and l.datavalue.value.language == 'nn' then
return l.datavalue.value.text
end
end
end
return nil
end
function byline(qualifier)
local P2093 = nil
if qualifier then
P2093 = qualifier['P2093']
end
if P2093 then
for k, l in pairs(P2093) do
if l.datavalue and l.datavalue.value then
return "bilete: " .. l.datavalue.value
end
end
end
return nil
end
function fmtbilete(bilete,biletetekst,byline,size, alttekst)
local tekst = ""
local pix = size or ""
local alt = ""
if alttekst and alttekst ~= "" then
alt = "|alt=" .. alttekst
end
if bilete then
tekst = "[[fil:" .. -- mw.wikibase.formatValue(snak)
bilete .. "|center|" .. pix .. "|frameless" .. alt .."]]"
end
if biletetekst or byline then
tekst = tekst .. '<div class="thumbcaption" style="text-align:center">'
end
if biletetekst then
tekst = tekst .. biletetekst
end
if byline then
tekst = tekst .. '<div class="thumbcaption" style="text-align:center">' .. byline .. "</div>"
end
if biletetekst or byline then
tekst = tekst .. '</div>'
end
tekst = formatbileterad(tekst)
return tekst
end
function p.bileteFraWikidata(qid,pid, pix, alttekst)
local prop = getProp(qid,pid)
if not prop then
return ""
end
if not prop[1] then
return ""
end
if not prop[1].mainsnak then
return ""
end
local biletet = bilete(prop[1].mainsnak)
local bileteteksten = biletetekst(prop[1].qualifiers)
local byline = byline(prop[1].qualifiers)
return fmtbilete(biletet,bileteteksten,byline, pix, alttekst)
end
function p._bileteOgTekst(qid, pid, bilete, biletetekst, byline, pix, alttekst, overskrift)
if bilete and bilete == "utan" then
return ""
end
local overskriftRad,avslutning = "",""
if overskrift and overskrift ~= "" then
overskriftRad,avslutning = formatOverskrift(overskrift)
end
local bileterad = ""
if bilete and bilete ~= "" then
bileterad = fmtbilete(bilete,biletetekst,byline, pix, alttekst)
else
bileterad = p.bileteFraWikidata(qid, pid, pix, alttekst)
end
if bileterad ~= "" then
return overskriftRad .. bileterad .. avslutning
end
return ""
end
function p.bileteOgTekst(frame)
local qid = frame.args["qid"] or nil
if qid == "" then
qid = nil
end
local pid = frame.args["pid"] or nil
local bilete = frame.args["bilete"] or nil
local biletetekst = frame.args["biletetekst"] or nil
local byline = frame.args["byline"] or nil
local pix = frame.args["biletestørrelse"] or ""
local overskrift = frame.args["overskrift"] or ""
local alttekst = frame.args["alttekst"] or ""
return p._bileteOgTekst(qid, pid, bilete, biletetekst, byline, pix, alttekst, overskrift)
end
return p