Modul:Infoboks lua
Utseende
Moduldokumentasjon
[opprett]
local p = {}
local wikidataListe = require( 'Module:WikidataListe' )
local wdbilde = require( 'Modul:WikidataBilde')
local Mapframe = require( 'Modul:Mapframe')
function dump(item)
return "<pre>" .. mw.text.jsonEncode(item, mw.text.JSON_PRETTY) .. "</pre>"
end
function getOkStatements(pid,qid)
local entity = mw.wikibase.getEntity(qid)
if not entity then
return {}
end
local claims = entity:getAllStatements(pid)
local tbl = {}
for i,claim in ipairs(claims) do
if claim.rank == "normal" or claim.rank == "preferred" then
table.insert(tbl,claim)
end
end
return tbl
end
function overskrift(tekst)
local txt = '<tr class="hode overskrift"><th colspan="4">' .. tekst .. '</th></tr>'
return txt
end
function p._ibxStart(type,stor,navn,navn2)
local txt0a = '<table class="infobox infoboks '
local txt0b = type .. " " .. stor .. " " ..'"'
-- .. " " .. class
local txt0d = ">"
local txt1 = ''
if navn and navn ~= '' then
txt1 = '<tr valign="top" class="hode"><th colspan="4">' .. navn .. '</th></tr>'
end
local txt2 = '<tr class="hode overskrift"><th colspan="4">' .. navn2 .. '</th></tr>'
return txt0a .. txt0b .. txt0d .. txt1 .. txt2
end
function p._ibxSlutt(comcat,endcomment)
return "</table>"
end
function p._ibxArgStart(args,navn)
local typ = args["type"] or "biografi"
local stor = args["stor"] or "bred"
local navn2 = args["navn2"] or nil
if not navn then
navn = "navn"
end
if not navn2 then
navn2 = ""
end
local value = p._ibxStart(typ, stor, navn, navn2)
return value
end
function p.ibxStart(frame)
local args = frame.args or {}
local navn = args["navn"] or nil
local navn2 = args["navn2"] or nil
if not navn then
navn = getname(frame)
end
local value = p._ibxArgStart(args,navn) --typ, stor, navn, navn2)
return value
end
function p.ibxSlutt(frame)
return p._ibxSlutt()
end
function getname(frame)
local frameargs = frame:getParent().args
local qid = getqid(frame)
local navn = mw.wikibase.label(qid)
return navn
end
function getlink(id)
local text = mw.wikibase.label(id) or id
local link = mw.wikibase.sitelink(id)
if text and link then
text = "[[" .. link .. "|" .. text .. "]]"
end
return text
end
function p.arbeidsdata()
local data = {
-- to lister som vil inneholde data for å utelate disse fra å bli brukt fremover
["props"] = { }, -- wikidataegenskaper som ikke skal benyttes.
["params"] = { }, -- parametre for argumenter fra artiklen som ikke skal benyttes.
}
return data
end
function ikkebruk(data,props,params)
if not data then
data = p.arbeidsdata()
end
if props then
for i,prop in ipairs(props) do
data.props[prop] = prop
end
end
if params then
for i,param in ipairs(params) do
data.params[param] = param
end
end
return data
end
-- legg til parametre og/eller egenskaper gitt som kommaseparerte lister
function p.ikkebruk(data,propslist,paramslist)
local props = nil
if propslist then
props = mw.text.split( propslist, ',', true )
end
local params = nil
if paramslist then
params = mw.text.split( paramslist, ',', true )
end
return ikkebruk(data,props,params)
end
function ubrukte(frame,data,res)
local lang = mw.language.getContentLanguage()
local txt = ""
local frameargs = frame:getParent().args
for param,val in pairs( frameargs ) do
if not data or not data.params[param] then
local displayName = lang:ucfirst(param)
local val = wikidataListe._rad2(frame,nil,nil,param,nil,nil,displayName,nil,nil)
if val and val ~= "" then
table.insert(res, val)
end
end
end
if #res > 0 then
-- txt = table.concat(res, "\n")
end
return res
end
local function proptest(props)
for idx,claim in ipairs(props) do
if claim.rank == 'preferred' or claim.rank == 'normal' then
local snak = claim.mainsnak
if snak.snaktype == "value" and snak.datatype ~= "external-id" then
return props
end
end
end
return nil
end
local function allProps(entity,datatype)
local retvals = {}
if entity.claims then
for propid,props in pairs(entity.claims) do
if proptest(props) then
if true then
-- return propid
end
--if props[propid][1].mainsnak then
table.insert(retvals,propid)
-- end
end
end
end
return retvals
end
function wdAllProps(qid)
local entity = mw.wikibase.getEntity(qid)
local allprops = allProps(entity,datatype)
return allprops
end
function lagRad(verdi,displayName)
return '<tr class="rad" valign="top">' ..
'<th colspan="2" class="nowrap">' .. displayName .. '</th>' ..
'<td colspan="2">' .. verdi .. '</td>' ..
'</tr>' -- lagRad(verdi,displayName)
end
function innhold(frame,qid,prop,propName)
local snak = claim.mainsnak
local datatype = snak.datatype
if datatype == 'commonsMedia' then
else
wikidataListe._rad2(frame,qid,prop,"nil",nil,nil,displayName,nil,nil)
end
end
function wdEgenskap(frame,qid,data,res,props)
local lang = mw.language.getContentLanguage()
for ix,prop in ipairs( props ) do
-- kvikkfiks for å få bilder til å se litt penere ut for P18 (bilde)
if prop == "P18" then
local val =
wdbilde._bildeOgTekst(qid, prop, "", "", "", "bildestørrelse", "", "")
if val and val ~= "" then
table.insert(res, val)
end
else
if not data or not data.props[prop] then
local proplab,langq = mw.wikibase.getLabelWithLang(prop)
local displayName = lang:ucfirst(proplab)
local val = --lagRad(prop,displayName) --prop --
wikidataListe._rad2(frame,qid,prop,"nil",nil,nil,displayName,nil,nil)
if val and val ~= "" then
table.insert(res, val)
end
end
end
end
local txt = table.concat(res, "\n")
return txt,data
end
function wdEgenskapTabellRad(frame,qid,data,res,props)
for ix,prop in ipairs( props ) do
local val = wikidataListe._verdi(frame,qid,prop,"nil",nil,nil,nil,nil) or ""
table.insert(res, val)
end
return table.concat(res, "\n|")
end
function p.wdEgenskap(frame,qid,data,res,propslist,dodump)
local entity = mw.wikibase.getEntity(qid)
local frameargs = frame:getParent().args
if true then
-- return "<pre>" .. mw.text.jsonEncode(entity, mw.text.JSON_PRETTY) .. "</pre>"
end
local props = nil
if not propslist and frameargs['props'] and frameargs['props'] ~= "" then
propslist = frameargs['props']
end
if propslist =="all" or not propslist then
props = wdAllProps(qid,"item")
-- return "<pre>" .. mw.text.jsonEncode(props, mw.text.JSON_PRETTY) .. "</pre>"
-- .. dump(entity)
else
props = mw.text.split( propslist, ',', true )
end
local dumptxt = ""
if dodump then
dumptxt = dump(entity)
end
return wdEgenskap(frame,qid,data,res,props) --.. dumptxt
end
-- for individuelle infobokser
function wdEgenskapBoks(frame,qid,props)
local frameargs = frame:getParent().args
local navn = mw.wikibase.label(qid)
local data = p.arbeidsdata()
local res = {}
local start = p._ibxArgStart(frameargs,navn)
local text = wdEgenskap(frame,qid,data,res,props)
local slutt = p._ibxSlutt()
return start .. text .. slutt
end
-- for sammenslått til en samlet infoboks
function wdEgenskapBoks2(frame,qid,props)
local frameargs = frame:getParent().args
local navn = mw.wikibase.label(qid)
local data = p.arbeidsdata()
local res = {}
local start = overskrift(navn)
local text = wdEgenskap(frame,qid,data,res,props)
local slutt = "" --p._ibxSlutt()
return start .. text .. slutt
end
-- for individuelle infobokser
function p.wdBrukEgenskap(frame,qid,brukprops,propslist,dodump)
-- local navn = mw.wikibase.label(qid)
local bruk = mw.text.split( brukprops, ',', true )
local claims = getOkStatements(bruk[1],qid)
local props = mw.text.split( propslist, ',', true )
local res = {}
table.insert(res, retval)
local retval = ""
for i,claim in ipairs(claims) do
local q = claim.mainsnak.datavalue.value.id or nil
if q then
retval = wdEgenskapBoks(frame,q,props)
if retval and retval ~= "" then
table.insert(res, retval)
end
end
end
local txt = table.concat(res, "\n")
return txt
end
-- for sammenslått til en samlet infoboks
function p.wdBrukEgenskap2(frame,qid,brukprops,propslist,dodump)
local navn = mw.wikibase.label(qid)
local bruk = mw.text.split( brukprops, ',', true )
local claims = getOkStatements(bruk[1],qid)
local props = mw.text.split( propslist, ',', true )
local frameargs = frame:getParent().args
local start = p._ibxArgStart(frameargs,navn)
local res = {}
local retval = ""
-- egen boks for hovedelementet. For nå med samme liste av egenskaper som delene.
retval = wdEgenskapBoks2(frame,qid,props)
if retval and retval ~= "" then
local overskr = overskrift("Omfatter disse")
table.insert(res, retval..overskr)
end
local retval = ""
for i,claim in ipairs(claims) do
local q = claim.mainsnak.datavalue.value.id or nil
if q then
retval = wdEgenskapBoks2(frame,q,props)
if retval and retval ~= "" then
table.insert(res, retval)
end
end
end
local txt = table.concat(res, "\n")
return start .. txt .. p._ibxSlutt()
end
function p.wdBrukEgenskapTittel(frame,qid,brukprops,propslist,dodump)
local navn = mw.wikibase.label(qid)
local bruk = mw.text.split( brukprops, ',', true )
local claims = getOkStatements(bruk[1],qid)
local props = mw.text.split( propslist, ',', true )
local frameargs = frame:getParent().args
local retval = ""
local res = {}
table.insert(res, "\n!navn")
for i,pid in ipairs(props) do
if pid then
local navn = mw.wikibase.label(pid)
table.insert(res, navn)
end
end
local txt = table.concat(res, "\n!")
return txt
end
function idxx(claim)
return claim.mainsnak.datavalue.value.id or nil
end
function p.wdBrukEgenskapVerdi(frame,qid,brukprops,propslist,dodump)
--if true then return "" end
local navn = mw.wikibase.label(qid)
local bruk = mw.text.split( brukprops, ',', true )
local claims = getOkStatements(bruk[1],qid)
local props = mw.text.split( propslist, ',', true )
local frameargs = frame:getParent().args
local retval = ""
local res = {}
local xxx = "\n|-\n|" --.. idxx(claims[1]) .. "\n|-\n|" --.. claims[2]
--table.insert(res, xxx )
--if true then return "\n|-\n|" .. idxx(claims[2]) end
for i,claim in ipairs(claims) do
local lqid = idxx(claim) --claims[1].mainsnak.datavalue.value.id --claim.mainsnak.datavalue.value.id or nil
--local yyy = "aaaa \n|-\n|"
--table.insert(res, lqid)
if lqid then
local res2 = {}
local navn = "\n|-\n|" .. getlink(lqid) ..
"\n|" .. wdEgenskapTabellRad(frame,lqid,data,res2,props, "\n|")
-- local txt = bruk[1] .." aaa " ..lqid.."\n|"
table.insert(res, navn )
end
end
return table.concat(res, "\n")
end
function brukmal(frame,mal)
if not mal then return "" end
local frameargs = frame:getParent().args
if mal.metode == "ekspander" then
return frame:expandTemplate{ title=mal.mal, args = frameargs}
end
return ""
end
function verdirad(frame,def,qid,lang)
if not def then return "" end
local param = def["param"]
local pid = def["pid"]
local ref = def["ref"]
local sprak = def["sprak"]
local displayName = def["displayName"] or lang:ucfirst(param)
local vis = nil
local split = def["split"]
local txt = wikidataListe._rad2(frame,qid,pid,param,ref,sprak,displayName,vis,split)
return txt
end
-->{{#invoke:WikidataBilde|bildeOgTekst|bilde={{{bilde|}}}|bildetekst ={{{bildetekst|}}}|byline={{{byline|}}}|pid=P18|qid={{{qid|}}}|bildestørrelse={{{bildestørrelse|}}}}}<!--
function bilderad(frame,def,qid,lang)
if not def then return "" end
local frameargs = frame:getParent().args
local pid = def["pid"] or nil
local bilde = frameargs[def["bilde"] or "bilde"]
local bildetekst = frameargs[def["bildetekst"]] or ""
local byline = frameargs[def["byline"]]
local pix = frameargs[def["bildestor"] or "bildestørrelse"]
local overskrift = ""
local alttekst = ""
return wdbilde._bildeOgTekst(qid, pid, bilde, bildetekst, byline, pix, alttekst, overskrift)
end
-->{{#invoke:Mapframe|infoboxLocation|zoom={{{standardzoom|15}}}|width=290|vis={{{viskart|ja}}}|vis egenskap=P355,P527}}
function kartrad(frame)
return '<tr class="rad" >' ..
'<td colspan="4" class="center">' .. Mapframe.infoboxLocation(frame) .. "</td> </tr>"
end
function overskriftgruppe(frame,def,qid,lang)
if not def then return "" end
local frameargs = frame:getParent().args
local txt = ""
if def.innhold then
txt = p._rader(frame,def.innhold)
end
local over = ""
if def.tekst then
over = overskrift(def.tekst)
end
if txt and txt ~= "" then
return over .. txt
end
return ""
end
function p._rader(frame,defs)
local lang = mw.language.getContentLanguage()
local res = {}
local txt = ""
local qid = nil
local frameargs = frame:getParent().args
if frameargs['qid'] and frameargs['qid'] ~= "" then
qid = frameargs['qid']
end
for i,def in ipairs(defs) do
if not def[1] or def[1] == "rad" then
txt = verdirad(frame,def,qid,lang)
end
if def and def[1] == "mal" then
txt = brukmal(frame,def)
end
if def and def[1] == "bilde" then
txt = bilderad(frame,def,qid,lang)
end
if def and def[1] == "kart" then
txt = kartrad(frame,def,qid,lang)
end
if not def[1] or def[1] == "overskrift" then
txt = overskriftgruppe(frame,def,qid,lang)
end
if txt and txt ~= "" then
table.insert(res, txt)
txt = ""
end
end
--res = ubrukte(frame,data,res)
if #res > 0 then
txt = table.concat(res, "\n")
end
return txt
end
function p._innhold(frame,defs)
local returtxt = ""
--"<pre>" .. mw.text.jsonEncode(defs, mw.text.JSON_PRETTY) .. "</pre>" --
local returtxt = p._rader(frame,defs)
return returtxt
end
function getqid(frame)
local qid = nil
local parentargs = frame:getParent().args
if parentargs['qid'] and parentargs['qid'] ~= "" then
qid = parentargs['qid']
end
if not qid then
local frameargs = frame.args
if frameargs['qid'] and frameargs['qid'] ~= "" then
qid = frameargs['qid']
end
end
if not qid then
local entity = mw.wikibase.getEntity(qid)
qid = entity.id
end
return qid
end
function p.test(frame)
local start = p.ibxStart(frame)
local propslist = "P31,P17"
local res = {}
local qid = getqid(frame)
local text = p.wdEgenskap(frame,qid,data,res,"all",1) --propslist)
local slutt = p._ibxSlutt()
return start .. text .. slutt
end
function p._dump(qid,pid,num)
if not pid then
local entity = mw.wikibase.getEntity(qid)
return dump(entity)
end
local statments = getOkStatements(pid,qid)
if statments then
if num then
return dump(statments[num])
end
return dump(statments)
end
return ""
end
function p.dump(frame)
local qid = getqid(frame)
local parentargs = frame:getParent().args
local pid = parentarg(frame,'pid')
local num = parentarg(frame,'num')
return p._dump(qid,pid,num)
end
function parentarg(frame,argument)
local argval = nil
local parentargs = frame:getParent().args
if parentargs[argument] and parentargs[argument] ~= "" then
argval = parentargs[argument]
end
return argval
end
function p.wikidataboks(frame)
local qid = getqid(frame)
local parentargs = frame:getParent().args
local arg1 = parentarg(frame,1)
if arg1 and arg1 == "tabell" then
return p.wikidatatabell(frame)
end
if arg1 and arg1 == "dump" then
return p.dump(frame)
end
local start = p.ibxStart(frame)
local qid = getqid(frame)
local parentargs = frame:getParent().args
local brukegenskap = parentarg(frame,'bruk egenskap')
if brukegenskap then
--qid = "Q11976947"
local propslist = parentarg(frame,'egenskaper')
if true then
-- qid = "Q661191"
-- local entity = mw.wikibase.getEntity(qid)
-- return dump(entity)
--return p.dump(frame) --propslist --"P31,P18,P131,P17,P571,P814,P361,P2046"
end
local retval = p.wdBrukEgenskap2(frame,qid,brukegenskap,propslist,dodump)
return retval
end
local data = nil
local res = {}
local minus = parentarg(frame,'minus')
if minus then
data = p.ikkebruk(data,minus,nil)
end
local startprops = parentarg(frame,'startrader')
local startrader = ""
if startprops then
startrader,data = p.wdEgenskap(frame,qid,data,res,startprops)
end
local sluttrader = parentarg(frame,'sluttrader')
local alle = parentarg(frame,'alle')
local text = p.wdEgenskap(frame,qid,data,res,alle) --propslist)
local slutt = p._ibxSlutt()
return start .. text .. slutt
end
function p._lenke(tittel,qid)
local tekst = tittel or mw.wikibase.label(qid)
local lenke = mw.wikibase.sitelink(qid) or nil
if tekst and lenke then
tekst = "[[" .. lenke .. "|" .. tekst .. "]]"
end
return tekst
end
function p.lenke(frame)
local parentargs = frame:getParent().args
local tittel = parentarg(frame,'tekst')
local qid = parentarg(frame,'qid') or ""
return p._lenke(tittel,qid)
end
function p.wikidatatabell(frame)
local qid = getqid(frame)
local parentargs = frame:getParent().args
local brukegenskap = parentarg(frame,'bruk egenskap')
if brukegenskap then
local propslist = parentarg(frame,'egenskaper')
local start = '{|class="wikitable"\n|-'
.. p.wdBrukEgenskapTittel(frame,qid,brukegenskap,propslist,dodump)
local slutt = "\n|}"
local retval = p.wdBrukEgenskapVerdi(frame,qid,brukegenskap,propslist,dodump)
return start .. retval .. slutt
end
return ""
end
p.wikidataTabell = p.wikidatatabell
return p