Hopp til innhold

Modul:WikidataBilde

Fra Wikipedia, den frie encyklopedi
Moduldokumentasjon

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 somuten.

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 kategorieneKategori:Artikler hvor bilde er hentet fra Wikidata,Kategori:Artikler hvor bilde mangler på Wikidata,Kategori:Artikler med bilde forskjellig fra WikidataogKategori:Artikler hvor bilde fra Wikidata også brukes utenfor infoboksmå 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 enKategori:Artikler hvor bilde er samme som på Wikidatakunne 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,uteneller 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 kvalifikatorbildetekstmed språknbtilhø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}}} }}

localp={}

functiondump(out)
iftype(out)=='table'then
locals='{ '
fork,vinpairs(out)do
iftype(k)~='number'thenk=' "'..k..' "'end
s=s..'['..k..'] = '..dump(v)..','
end
returns..'} '
else
returntostring(out)
end
end

localkategori={[5]="biografi"}
localresten="[[Kategori:Artikler hvor bilde er hentet fra Wikidata]]"

functiongetProp(qid,pid)
localentity=mw.wikibase.getEntity(qid)

ifnotentitythen

return{}

end
returnentity:getBestStatements(pid)
end


functionfinnKategori(frame)
ifnotmw.wikibasethen
returnresten
end
localartikkel=mw.wikibase.getEntityObject()
ifnotartikkelthen
returnresten
end
localclaims=artikkel:getBestStatements('P31')
ifnotclaimsthen
returnresten
end
for_,vinipairs(claims)do
ifv.type=='statement'then
localsnak=v.mainsnak
ifsnak.snaktype=='value'then
ifsnak.datatype=='wikibase-item'then
localdata=snak.datavalue
ifdata.type=='wikibase-entityid'then
localvalue=data.value
ifvalue["entity-type"]=="item"then
ifkategori[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
returnresten
end

-- Return bilde til artikkelen
functionp.wikidatabilde(frame)
ifnotmw.wikibasethen
return""
end
localpid=frame.args["pid"]ornil
ifnotpidthenpid="P18"end
localartikkel=mw.wikibase.getEntityObject()
ifnotartikkelthen
return""
end
localclaims=artikkel:getBestStatements(pid)
ifnotclaimsthen
return""
end
for_,vinipairs(claims)do
ifv.type=='statement'then
localsnak=v.mainsnak
ifsnak.snaktype=='value'then
ifsnak.datatype=='commonsMedia'then
localdata=snak.datavalue
ifdata.type=='string'then
returndata.value
end
end
end
end
end

-- failed to find correct type
return""
end

functionp.framebilde(frame)
localargs=frame.args
ifargs[1]==nilthen
localpFrame=frame:getParent();
args=pFrame.args;
fork,vinpairs(frame.args)do
args[k]=v;
end
end
ifargs['bilde']then
returnargs['bilde']
end
return""
end

functionp.framekart(frame)
localargs=frame.args
ifargs[1]==nilthen
localpFrame=frame:getParent();
args=pFrame.args;
fork,vinpairs(frame.args)do
args[k]=v;
end
end
ifargs['kart']then
returnargs['kart']
end
return""
end

functionp.velgbilde(frame)
localbilde=p.framebilde(frame)
ifbildethen
ifbilde==""then
-- return ""
elseifbilde=="uten"then
return""
else
returnbilde
end
else
return""
end
localfrawikidata=p.wikidatabilde(frame)
localframekart=p.framekart(frame)
ifframekart==frawikidatathen
return""
end

returnfrawikidata
end

functionp.bildetekst(frame)

ifnotmw.wikibasethen
return''
end
localartikkel=mw.wikibase.getEntityObject()
ifnotartikkelthen
return''
end
localclaims=artikkel:getBestStatements('P18')
ifnotclaimsthen
return''
end
for_,vinipairs(claims)do
ifv.type=='statement'then
localsnak=v.mainsnak
ifsnak.snaktype=='value'then
ifsnak.datatype=='commonsMedia'then
localdata=snak.datavalue
ifdata.type=='string'then
localq=v.qualifiers
ifqthen
wdcaptions=q['P2096']
end
ifwdcaptionsthen
fork,linpairs(wdcaptions)do
ifl.datavalue.valueandl.datavalue.value.textandl.datavalue.value.language=='nb'then
returnl.datavalue.value.text
end
end
end
end
end
end
end
end

-- failed to find correct type
return''

end
functionp.byline(frame)

ifnotmw.wikibasethen
return''
end
localartikkel=mw.wikibase.getEntityObject()
ifnotartikkelthen
return''
end
localclaims=artikkel:getBestStatements('P18')
ifnotclaimsthen
return''
end
for_,vinipairs(claims)do
ifv.type=='statement'then
localsnak=v.mainsnak
ifsnak.snaktype=='value'then
ifsnak.datatype=='commonsMedia'then
localdata=snak.datavalue
ifdata.type=='string'then
localq=v.qualifiers
ifqthen
wdcaptions=q['P2093']
end
ifwdcaptionsthen
fork,linpairs(wdcaptions)do
ifl.datavalue.valueandl.datavalue.value.textthen
returnl.datavalue.value.text
end
end
end
end
end
end
end
end

-- failed to find correct type
return''

end

functionp.finnesbildeiartikkel(frame)
localinnhold=mw.title.getCurrentTitle():getContent()or''
localfrawikidata=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
ifinnhold:find(":"..frawikidata)then
return"[[Kategori:Artikler hvor bilde fra Wikidata også brukes utenfor infoboks]]"
else
return""
end
end

functionp.sammenlignbilde(frame)
localfraframe=p.framebilde(frame)
localfrawikidata=p.wikidatabilde(frame)
iffraframe==frawikidatathen
iffraframe==""then
return""
else
return"[[Kategori:Artikler hvor bilde er samme som på Wikidata]]"
end
else
iffrawikidata==""then
return"[[Kategori:Artikler hvor bilde mangler på Wikidata]]"
end
iffraframe==""then
return"[[Kategori:Artikler uten bilde i infoboks med bilde på Wikidata]]"
end
return"[[Kategori:Artikler med bilde forskjellig fra Wikidata]]"
end
end

functionp.sammenlignMedWikidataValgtBilde(frame)
localfraframe=p.framebilde(frame)
localfrawikidata=p.wikidatabilde(frame)
localframekart=p.framekart(frame)
localfinnesbildeiartikkel=p.finnesbildeiartikkel(frame)
iffraframe==frawikidatathen
iffraframe==""then
return""
else
return
end
else
iffrawikidata==""then
return"[[Kategori:Artikler hvor bilde mangler på Wikidata]]"
end
ifframekart==frawikidatathen
return"[[Kategori:Artikler hvor kart er samme som bilde på Wikidata]]"
end
iffraframe==""then
returnfinnKategori(frame)..finnesbildeiartikkel
end
return"[[Kategori:Artikler med bilde forskjellig fra Wikidata]]"
end
end

functionbilde(snak)
assert(snak)

localitem=nil

ifsnak.snaktype=="value"andsnak.datatype=="commonsMedia"then

value=snak.datavalue.valueornil
end
returnvalue
end

-- returnerer en rad for overskrift og en avsluttning hvis det er nødvendig
functionformatOverskrift(overskrift,kollaps)
localoversk=""
localavslutt=""
ifoverskriftandoverskrift~=""then
oversk=string.format([[
<tr class= "overskrift" valign= "top" ><td colspan= "4" >%s</td></tr>
]],overskrift)
end
ifkollapsandkollaps~=""then
end
returnoversk,avslutt
end

functionformatBilderad(value)
returnstring.format([[
<tr class= "bilde" valign= "top" ><td colspan= "4" class= "sentrert" >%s</td></tr>
]],value)
end

functionp.bilde(qid,pid)
localprop=getProp(qid,pid)
ifnotpropornotprop[1]ornotprop[1].mainsnakthen
return""
end
returnbilde(prop[1].mainsnak)
end

functionbildetekst(qualifier)
localP2096=nil
ifqualifierthen
P2096=qualifier['P2096']
end
ifP2096then
fork,linpairs(P2096)do
ifl.datavalueandl.datavalue.valueandl.datavalue.value.textandl.datavalue.value.language=='nb'then
returnl.datavalue.value.text
end
end
end
returnnil
end

functionbyline(qualifier)
localP2093=nil
ifqualifierthen
P2093=qualifier['P2093']
end
ifP2093then
fork,linpairs(P2093)do
ifl.datavalueandl.datavalue.valuethen
return"Foto:"..l.datavalue.value
end
end
end
returnnil
end

functionfmtBilde(bilde,bildetekst,byline,size,alttekst)
localtekst=""
localpix=sizeor""
localalt=""
ifalttekstandalttekst~=""then
alt="|alt="..alttekst
end
ifbildethen
tekst="[[fil:"..-- mw.wikibase.formatValue(snak)
bilde.."|center|"..pix.."|frameless"..alt.."]]"
end
ifbildetekstorbylinethen
tekst=tekst..'<div class= "thumbcaption" >'
end
ifbildetekstthen
tekst=tekst..bildetekst
end
ifbylinethen
tekst=tekst..mw.getCurrentFrame():extensionTag{name='templatestyles',args={src='Byline/stil.css'}}..'<div class= "byline" >'..byline.."</div>"
end
ifbildetekstorbylinethen
tekst=tekst..'</div>'
end
tekst=formatBilderad(tekst)
returntekst
end

functionp.bildeFraWikidata(qid,pid,pix,alttekst)
localprop=getProp(qid,pid)
ifnotpropthen
return""
end
ifnotprop[1]then
return""
end
ifnotprop[1].mainsnakthen
return""
end
localbildet=bilde(prop[1].mainsnak)
localbildeteksten=bildetekst(prop[1].qualifiers)
localbyline=byline(prop[1].qualifiers)
returnfmtBilde(bildet,bildeteksten,byline,pix,alttekst)
end


functionp._bildeOgTekst(qid,pid,bilde,bildetekst,byline,pix,alttekst,overskrift)
ifbildeandbilde=="uten"then
return""
end
localoverskriftRad,avslutning="",""
ifoverskriftandoverskrift~=""then
overskriftRad,avslutning=formatOverskrift(overskrift)
end
localbilderad=""
ifbildeandbilde~=""then
bilderad=fmtBilde(bilde,bildetekst,byline,pix,alttekst)
else
bilderad=p.bildeFraWikidata(qid,pid,pix,alttekst)
end
ifbilderad~=""then
returnoverskriftRad..bilderad..avslutning
end
return""
end

functionp.bildeOgTekst(frame)
localqid=frame.args["qid"]ornil
ifqid==""then
qid=nil
end
localpid=frame.args["pid"]ornil
localbilde=frame.args["bilde"]ornil
localbildetekst=frame.args["bildetekst"]ornil
localbyline=frame.args["byline"]ornil
localpix=frame.args["bildestørrelse"]or""
localoverskrift=frame.args["overskrift"]or""
localalttekst=frame.args["alttekst"]or""
returnp._bildeOgTekst(qid,pid,bilde,bildetekst,byline,pix,alttekst,overskrift)
end

returnp