Modul:WikidataBilde: Forskjell mellom sideversjoner

Fra wikisida.no
Hopp til navigering Hopp til søk
mIngen redigeringsforklaring
test
Linje 15: Linje 15:


local kategori = {[5] = "biografi" }
local kategori = {[5] = "biografi" }
local resten = "[[Kategori:Artiklar der bilete er henta frå Wikidata]]"
local resten = "[[Kategori:Artikler hvor bilde er hentet fra Wikidata]]"


function getProp(qid,pid)
function getProp(qid,pid)
Linje 51: Linje 51:
     if value["entity-type"] == "item" then
     if value["entity-type"] == "item" then
     if kategori[value["numeric-id"]] then
     if kategori[value["numeric-id"]] then
     return "[[Kategori:Artiklar der bilete er henta frå Wikidata – " .. kategori[value["numeric-id"]] .. "]]"
     return "[[Kategori:Artikler hvor bilde er hentet fra Wikidata – " .. kategori[value["numeric-id"]] .. "]]"
     end
     end
end
end
Linje 64: Linje 64:
end
end


-- Return bilete til artikkelen
-- Return bilde til artikkelen
function p.wikidatabilete(frame)
function p.wikidatabilde(frame)
     if not mw.wikibase then
     if not mw.wikibase then
         return ""
         return ""
     end
     end
    local pid = frame.args("pid") or 'P18'
     local artikkel = mw.wikibase.getEntityObject()
     local artikkel = mw.wikibase.getEntityObject()
     if not artikkel then
     if not artikkel then
         return ""
         return ""
     end
     end
     local claims = artikkel:getBestStatements( 'P18' )
     local claims = artikkel:getBestStatements( pid )
     if not claims then
     if not claims then
         return ""
         return ""
Linje 95: Linje 96:
end
end


function p.framebilete(frame)
function p.framebilde(frame)
     local args = frame.args
     local args = frame.args
     if args[1] == nil then
     if args[1] == nil then
Linje 104: Linje 105:
         end
         end
     end
     end
     if args['bilete'] then
     if args['bilde'] then
         return args['bilete']
         return args['bilde']
     end
     end
     return ""
     return ""
Linje 125: Linje 126:
end
end


function p.velgbilete(frame)
function p.velgbilde(frame)
     local bilete = p.framebilete(frame)
     local bilde = p.framebilde(frame)
     if bilete then
     if bilde then
         if bilete == "" then
         if bilde == "" then
--            return ""
--            return ""
         elseif bilete == "utan" then
         elseif bilde == "uten" then
       return ""
       return ""
         else
         else
           return bilete
           return bilde
         end
         end
     else
     else
         return ""
         return ""
     end
     end
     local frawikidata = p.wikidatabilete(frame)
     local frawikidata = p.wikidatabilde(frame)
     local framekart = p.framekart(frame)
     local framekart = p.framekart(frame)
     if framekart == frawikidata then
     if framekart == frawikidata then
Linje 147: Linje 148:
end
end


function p.biletetekst(frame)
function p.bildetekst(frame)
      
      
     if not mw.wikibase then
     if not mw.wikibase then
Linje 173: Linje 174:
if wdcaptions then
if wdcaptions then
for k, l in pairs(wdcaptions) do
for k, l in pairs(wdcaptions) do
if l.datavalue.value and l.datavalue.value.text and l.datavalue.value.language == 'nn' then
if l.datavalue.value and l.datavalue.value.text and l.datavalue.value.language == 'nb' then
return l.datavalue.value.text
return l.datavalue.value.text
end
end
Linje 230: Linje 231:
end
end


function p.finnesbileteiartikkel(frame)
function p.finnesbildeiartikkel(frame)
local innhold = mw.title.getCurrentTitle():getContent() or ''
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
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
frawikidata = frawikidata:gsub("[_ ]", "[_ ]") -- Erstatter understrek eller mellomrom med mønsteret [_ ], så søket nedenfor finner begge varianter
if innhold:find(":" .. frawikidata) then
if innhold:find(":" .. frawikidata) then
return "[[Kategori:Artiklar der bilete frå Wikidata også er brukte utanfor infoboksen]]"
return "[[Kategori:Artikler hvor bilde fra Wikidata også brukes utenfor infoboks]]"
else
else
return ""
return ""
Linje 241: Linje 242:
end
end
   
   
function p.sammenlignbilete(frame)
function p.sammenlignbilde(frame)
     local fraframe = p.framebilete(frame)
     local fraframe = p.framebilde(frame)
     local frawikidata = p.wikidatabilete(frame)
     local frawikidata = p.wikidatabilde(frame)
     if fraframe == frawikidata then
     if fraframe == frawikidata then
         if fraframe == "" then
         if fraframe == "" then
             return ""
             return ""
         else
         else
             return "[[Kategori:Artiklar hvor bilete er samme som på Wikidata]]"
             return "[[Kategori:Artikler hvor bilde er samme som på Wikidata]]"
         end
         end
     else
     else
         if frawikidata == "" then
         if frawikidata == "" then
             return "[[Kategori:Artiklar hvor bilete mangler på Wikidata]]"
             return "[[Kategori:Artikler hvor bilde mangler på Wikidata]]"
         end
         end
         if fraframe == "" then
         if fraframe == "" then
             return "[[Kategori:Artiklar uten bilete i infoboks med bilete på Wikidata]]"
             return "[[Kategori:Artikler uten bilde i infoboks med bilde på Wikidata]]"
         end
         end
         return "[[Kategori:Artiklar med bilete forskjellig fra Wikidata]]"
         return "[[Kategori:Artikler med bilde forskjellig fra Wikidata]]"
     end
     end
end
end


function p.sammenlignMedWikidataValgtBilde(frame)
function p.sammenlignMedWikidataValgtBilde(frame)
     local fraframe = p.framebilete(frame)
     local fraframe = p.framebilde(frame)
     local frawikidata = p.wikidatabilete(frame)
     local frawikidata = p.wikidatabilde(frame)
     local framekart = p.framekart(frame)
     local framekart = p.framekart(frame)
     local finnesbileteiartikkel = p.finnesbileteiartikkel(frame)
     local finnesbildeiartikkel = p.finnesbildeiartikkel(frame)
     if fraframe == frawikidata then
     if fraframe == frawikidata then
         if fraframe == "" then
         if fraframe == "" then
Linje 274: Linje 275:
     else  
     else  
         if frawikidata == "" then
         if frawikidata == "" then
             return "[[Kategori:Artiklar hvor bilete mangler på Wikidata]]"
             return "[[Kategori:Artikler hvor bilde mangler på Wikidata]]"
         end
         end
     if framekart == frawikidata then
     if framekart == frawikidata then
     return "[[Kategori:Artiklar hvor kart er samme som bilete på Wikidata]]"
     return "[[Kategori:Artikler hvor kart er samme som bilde på Wikidata]]"
     end
     end
         if fraframe == "" then
         if fraframe == "" then
             return finnKategori(frame) .. finnesbileteiartikkel
             return finnKategori(frame) .. finnesbildeiartikkel
         end
         end
         return "[[Kategori:Artiklar med bilete forskjellig fra Wikidata]]"
         return "[[Kategori:Artikler med bilde forskjellig fra Wikidata]]"
     end
     end
end
end


function bilete(snak)
function bilde(snak)
assert ( snak )
assert ( snak )
Linje 312: Linje 313:
end
end


function formatbileterad(value)
function formatBilderad(value)
return string.format([[
return string.format([[
<tr class="bilete" valign="top"><td colspan="4" class="sentrert">%s</td></tr>
<tr class="bilde" valign="top"><td colspan="4" class="sentrert">%s</td></tr>
]], value)
]], value)
end
end


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


function biletetekst(qualifier)
function bildetekst(qualifier)
local P2096 = nil
local P2096 = nil
if qualifier then
if qualifier then
Linje 333: Linje 334:
if P2096 then
if P2096 then
for k, l in pairs(P2096) do
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
if l.datavalue and l.datavalue.value and l.datavalue.value.text and l.datavalue.value.language == 'nb' then
return l.datavalue.value.text
return l.datavalue.value.text
end
end
Linje 349: Linje 350:
for k, l in pairs(P2093) do
for k, l in pairs(P2093) do
if l.datavalue and l.datavalue.value then
if l.datavalue and l.datavalue.value then
return "bilete: " .. l.datavalue.value
return "Foto: " .. l.datavalue.value
end
end
end
end
Linje 356: Linje 357:
end
end


function fmtbilete(bilete,biletetekst,byline,size, alttekst)
function fmtBilde(bilde,bildetekst,byline,size, alttekst)
local tekst = ""
local tekst = ""
local pix = size or ""
local pix = size or ""
Linje 363: Linje 364:
alt = "|alt=" .. alttekst  
alt = "|alt=" .. alttekst  
end
end
if bilete then
if bilde then
tekst = "[[fil:" .. -- mw.wikibase.formatValue(snak)
tekst = "[[fil:" .. -- mw.wikibase.formatValue(snak)
  bilete .. "|center|" .. pix .. "|frameless" .. alt .."]]"
  bilde .. "|center|" .. pix .. "|frameless" .. alt .."]]"
end
end
if biletetekst or byline then
if bildetekst or byline then
tekst = tekst .. '<div class="thumbcaption">'
tekst = tekst .. '<div class="thumbcaption">'
end
end
if biletetekst then
if bildetekst then
tekst = tekst .. biletetekst
tekst = tekst .. bildetekst
end
end
if byline then
if byline then
tekst = tekst .. '<div class="thumbcaption">' .. byline .. "</div>"
tekst = tekst .. mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Byline/stil.css' } } .. '<div class="byline">' .. byline .. "</div>"
end
end
if biletetekst or byline then
if bildetekst or byline then
tekst = tekst .. '</div>'
tekst = tekst .. '</div>'
end
end
tekst = formatbileterad(tekst)
tekst = formatBilderad(tekst)
return tekst
return tekst
end
end


function p.bileteFraWikidata(qid,pid, pix, alttekst)
function p.bildeFraWikidata(qid,pid, pix, alttekst)
local prop = getProp(qid,pid)
local prop = getProp(qid,pid)
if not prop then
if not prop then
Linje 394: Linje 395:
return ""
return ""
end
end
local biletet bilete(prop[1].mainsnak)
local bildet bilde(prop[1].mainsnak)
local bileteteksten = biletetekst(prop[1].qualifiers)
local bildeteksten = bildetekst(prop[1].qualifiers)
local byline = byline(prop[1].qualifiers)
local byline = byline(prop[1].qualifiers)
return fmtbilete(biletet,bileteteksten,byline, pix, alttekst)
return fmtBilde(bildet,bildeteksten,byline, pix, alttekst)
end
end




function p._bileteOgTekst(qid, pid, bilete, biletetekst, byline, pix, alttekst, overskrift)
function p._bildeOgTekst(qid, pid, bilde, bildetekst, byline, pix, alttekst, overskrift)
if bilete and bilete == "utan" then
if bilde and bilde == "uten" then
return ""
return ""
end
end
Linje 409: Linje 410:
overskriftRad,avslutning = formatOverskrift(overskrift)
overskriftRad,avslutning = formatOverskrift(overskrift)
end
end
local bileterad = ""
local bilderad = ""
if bilete and bilete ~= "" then
if bilde and bilde ~= "" then
bileterad = fmtbilete(bilete,biletetekst,byline, pix, alttekst)
bilderad = fmtBilde(bilde,bildetekst,byline, pix, alttekst)
else
else
bileterad = p.bileteFraWikidata(qid, pid, pix, alttekst)
bilderad = p.bildeFraWikidata(qid, pid, pix, alttekst)
end
end
if bileterad ~= "" then
if bilderad ~= "" then
return overskriftRad .. bileterad .. avslutning
return overskriftRad .. bilderad .. avslutning
end
end
return ""
return ""
end
end


function p.bileteOgTekst(frame)
function p.bildeOgTekst(frame)
local qid = frame.args["qid"] or nil
local qid = frame.args["qid"] or nil
if qid == "" then
if qid == "" then
Linje 427: Linje 428:
end
end
local pid = frame.args["pid"] or nil
local pid = frame.args["pid"] or nil
local bilete = frame.args["bilete"] or nil
local bilde = frame.args["bilde"] or nil
local biletetekst = frame.args["biletetekst"] or nil
local bildetekst = frame.args["bildetekst"] or nil
local byline = frame.args["byline"] or nil
local byline = frame.args["byline"] or nil
local pix = frame.args["biletestørrelse"] or ""
local pix = frame.args["bildestørrelse"] or ""
local overskrift = frame.args["overskrift"] or ""
local overskrift = frame.args["overskrift"] or ""
local alttekst = frame.args["alttekst"] or ""
local alttekst = frame.args["alttekst"] or ""
return p._bileteOgTekst(qid, pid, bilete, biletetekst, byline, pix, alttekst, overskrift)
return p._bildeOgTekst(qid, pid, bilde, bildetekst, byline, pix, alttekst, overskrift)
end
end


return p
return p

Sideversjonen fra 28. nov. 2023 kl. 18:40

Formål

Hvis Wikidata har definert et bilde leveres det bildet tilbake dersom det ikke er gitt et bilde med som argument.

Det er mulig å spesifisere at det ikke skal være noe bilde selv om Wikidata skulle ha et bilde ved å gi bilde som uten.

Bruk

Modulen brukes ved å legge inn : {{#invoke:WikidataBilde|velgbilde}} i en mal. Malen {{Bilde fra Wikidata}} har implementert dette. Dette gjøres best ved å legge inn bilde={{Bilde fra Wikidata|{{{bilde|}}}}} inn i en mal som kan ha bilde. For at artiklene skal kategoriseres med de skjulte kategoriene Kategori:Artikler hvor bilde er hentet fra Wikidata, Kategori:Artikler hvor bilde mangler på Wikidata, Kategori:Artikler med bilde forskjellig fra Wikidata og Kategori:Artikler hvor bilde fra Wikidata også brukes utenfor infoboks må det i slutten av malen for infoboks også legges inn en {{#invoke:WikidataBilde|sammenlignMedWikidataValgtBilde|bilde={{{bilde|}}}}}. Legg dette etter slutten av selve infoboksen.

Det er også mulig å bare teste for bilder fra Wikidata ved å legge inn {{#invoke:WikidataBilde|sammenlignbilde|bilde={{{bilde|}}}}} i slutten av malen. Dette passer også best inn etter slutten av selve infoboksen. Her vil en Kategori:Artikler hvor bilde er samme som på Wikidata kunne bli lagt inn.

Metoden WikidataBilde|bildeOgTekst lager en infoboks rad med bilde, bildetekst og byline som enten er gitt til metoden som argument, eller bilde og bildetekst fra Wikidata. Den metoden kan hente alle former for commonsmedia gitt egenskaps-id.

Parametre:

bilde – filnavnet på en fil på commons, uten eller blank
bildetekst – bildetekst som tilhører det gitte filnavnet. Ignoreres hvis filnavn ikke er gitt.
byline – navn på den som har laget bildet.
pid – egenskaps id som skal hente bilde. Eksempler: P18 for vanlig bilde, P154 for logo, P990 for lydavspiller for stemme.
qid – wikidata-element hvor dette eventuelt skal hentes fra hvis det ikke er fra samme side.
pix – bildestørrelse, f.eks. 250px
overskrift – tekst som vil bli overskrift på raden over bildet. Raden lages bare hvis overskriften har verdi og raden med bilde også lages. Denne kan enten brukes slik at den alltid er bestemt av infoboksen eller slik at den også kan overstyres fra artikkelen.

Hvis det er gitt bilde=uten, vil det ikke bli noen rad for bildet. Hvis det er gitt et feil filnavn, vil dette ikke oppdages og innholdet vil bli feil. Hvis argumentet er blankt eller utelatt, vil bilde hentes fra Wikidata, da basert på argumentet pid.

Hvis det finnes en kvalifikator bildetekst med språk nb tilhørende dette bildet, vil den teksten bli brukt som bildetekst. Foreløpig hentes ikke byline, men når det blir mulig å spørre commons, kan det bli aktuelt å hente fotograf derfra.

Bruk: : {{#invoke:WikidataBilde|bildeOgTekst|bilde={{{bilde|}}}|bildetekst ={{{bildetekst|}}}|byline={{{byline|}}}|pid=P18|qid={{{qid|}}}|bildestørrelse={{{bildestørrelse|}}}|overskrift={{{overskrift|en normal overskrift for denne typen bilde}}} }}


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:Artikler hvor bilde er hentet fra 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:Artikler hvor bilde er hentet fra Wikidata – " .. kategori[value["numeric-id"]] .. "]]"
    						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 pid = frame.args("pid") or 'P18'
    local artikkel = mw.wikibase.getEntityObject()
    if not artikkel then
        return ""
    end
    local claims = artikkel:getBestStatements( pid )
    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 "[[Kategori:Artikler hvor bilde fra Wikidata også brukes utenfor infoboks]]"
	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 "[[Kategori:Artikler hvor bilde er samme som på Wikidata]]"
        end
    else
        if frawikidata == "" then
            return "[[Kategori:Artikler hvor bilde mangler på Wikidata]]"
        end
        if fraframe == "" then
            return "[[Kategori:Artikler uten bilde i infoboks med bilde på Wikidata]]"
        end
        return "[[Kategori:Artikler med bilde forskjellig fra Wikidata]]"
    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 "[[Kategori:Artikler hvor bilde mangler på Wikidata]]"
        end
    	if framekart == frawikidata then
    		return "[[Kategori:Artikler hvor kart er samme som bilde på Wikidata]]"
    	end
        if fraframe == "" then
            return finnKategori(frame) .. finnesbildeiartikkel
        end
        return "[[Kategori:Artikler med bilde forskjellig fra Wikidata]]"
    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([[
		<tr class="overskrift" valign="top"><td colspan="4">%s</td></tr>
		]], overskrift)
	end
	if kollaps and kollaps ~= "" then
	end
	return oversk,avslutt
end

function formatBilderad(value)
	return string.format([[
		<tr class="bilde" valign="top"><td colspan="4" class="sentrert">%s</td></tr>
		]], 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 "Foto: " .. 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 = "[[fil:" .. -- mw.wikibase.formatValue(snak)
		   bilde .. "|center|" .. pix .. "|frameless" .. alt .."]]"
	end
	if bildetekst or byline then
		tekst = tekst .. '<div class="thumbcaption">'
	end
	if bildetekst then
		tekst = tekst .. bildetekst
	end
	if byline then
		tekst = tekst .. mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Byline/stil.css' } } .. '<div class="byline">' .. byline .. "</div>"
	end
	if bildetekst or byline then
		tekst = tekst .. '</div>'
	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