Modul:Infoboks lua
Hopp til navigering
Hopp til søk
Dokumentasjon for denne modulen kan opprettes på Modul:Infoboks lua/dok
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 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 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 qid = "Q239904" -- "Q35637" --"Q17125741" --"Q20969311" --"Q596040" --"Q661191" --"Q584" 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 return p