Modul:WikidataBilde
Formål[rediger kilde]
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[rediger kilde]
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 nil if not pid then pid = "P18" end 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