Module:WikidataBilde

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 = ""

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 " .. "]]"   						end						end					end				end			end		end	end

-- failed to find correct type return resten end

-- Return bilde til artikkelen function p.wikidatabilde(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.framebilde(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['bilde'] then return args['bilde'] 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.velgbilde(frame) local bilde = p.framebilde(frame) if bilde then if bilde == "" then --           return "" elseif bilde == "uten" then return "" else return bilde end else return "" end local frawikidata = p.wikidatabilde(frame) local framekart = p.framekart(frame) if framekart == frawikidata then return "" end

return frawikidata end

function p.bildetekst(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 == 'nb' 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.finnesbildeiartikkel(frame) local innhold = mw.title.getCurrentTitle:getContent or '' local frawikidata = p.wikidatabilde(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 "" else return "" end end function p.sammenlignbilde(frame) local fraframe = p.framebilde(frame) local frawikidata = p.wikidatabilde(frame) if fraframe == frawikidata then if fraframe == "" then return "" else return "" end else if frawikidata == "" then return "" end if fraframe == "" then return "" end return "" end end

function p.sammenlignMedWikidataValgtBilde(frame) local fraframe = p.framebilde(frame) local frawikidata = p.wikidatabilde(frame) local framekart = p.framekart(frame) local finnesbildeiartikkel = p.finnesbildeiartikkel(frame) if fraframe == frawikidata then if fraframe == "" then return "" else return end else if frawikidata == "" then return "" end if framekart == frawikidata then return "" end if fraframe == "" then return finnKategori(frame) .. finnesbildeiartikkel end return "" end end

function bilde(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(		 %s 	, overskrift) end if kollaps and kollaps ~= "" then end return oversk,avslutt end

function formatBilderad(value) return string.format(		%s 	, value) end

function p.bilde(qid,pid) local prop = getProp(qid,pid) if not prop or not prop[1] or not prop[1].mainsnak then return "" end return bilde(prop[1].mainsnak) end

function bildetekst(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 == 'nb' 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 "Bilde: " .. l.datavalue.value end end end return nil end

function fmtBilde(bilde,bildetekst,byline,size, alttekst) local tekst = "" local pix = size or "" local alt = "" if alttekst and alttekst ~= "" then alt = "|alt=" .. alttekst end if bilde then tekst = "center|" .. pix .. "|frameless" .. alt .."" end if bildetekst or byline then tekst = tekst .. ' '	end if bildetekst then tekst = tekst .. bildetekst end if byline then tekst = tekst .. ' ' .. byline .. " "	end if bildetekst or byline then tekst = tekst .. ' '	end tekst = formatBilderad(tekst) return tekst end

function p.bildeFraWikidata(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 bildet = bilde(prop[1].mainsnak) local bildeteksten = bildetekst(prop[1].qualifiers) local byline = byline(prop[1].qualifiers) return fmtBilde(bildet,bildeteksten,byline, pix, alttekst) end

function p._bildeOgTekst(qid, pid, bilde, bildetekst, byline, pix, alttekst, overskrift) if bilde and bilde == "uten" then return "" end local overskriftRad,avslutning = "","" if overskrift and overskrift ~= "" then overskriftRad,avslutning = formatOverskrift(overskrift) end local bilderad = "" if bilde and bilde ~= "" then bilderad = fmtBilde(bilde,bildetekst,byline, pix, alttekst) else bilderad = p.bildeFraWikidata(qid, pid, pix, alttekst) end if bilderad ~= "" then return overskriftRad .. bilderad .. avslutning end return "" end

function p.bildeOgTekst(frame) local qid = frame.args["qid"] or nil if qid == "" then qid = nil end local pid = frame.args["pid"] or nil local bilde = frame.args["bilde"] or nil local bildetekst = frame.args["bildetekst"] or nil local byline = frame.args["byline"] or nil local pix = frame.args["bildestørrelse"] or "" local overskrift = frame.args["overskrift"] or "" local alttekst = frame.args["alttekst"] or "" return p._bildeOgTekst(qid, pid, bilde, bildetekst, byline, pix, alttekst, overskrift) end

return p