Redigerer
Modul:Infoboks lua
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
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 qualifierCurrent(quals) if not quals then return true end local sluttid = "P582" local qv = quals[sluttid] if qv then return false -- foreklet test på om avsluttet, avslutningstidspunkt kan være i fremtid. end return true end function getCurrentOkStatements(pid,qid) local claims = getOkStatements(pid,qid) local tbl = {} for i,claim in ipairs(claims) do if qualifierCurrent(claim.qualifiers) 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._overskrift(tekst) return overskrift(tekst) 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,"beste") 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 claims2ids(claims) ids = {} for i,claim in ipairs(claims) do local lqid = idxx(claim) if lqid then table.insert(ids, lqid ) end end return ids end function tabellRader(frame,ids,data,res2,props) local res = {} for i,id in ipairs(ids) do if id then local res2 = {} local navn = "\n|-\n|" .. getlink(id) .. "\n|" .. wdEgenskapTabellRad(frame,id,data,res2,props, "\n|") table.insert(res, navn ) end end return table.concat(res, "\n") end function p.now() return mw.language.getContentLanguage():formatDate( 'Y-m-d', nil, true ) end function filterCurrentClaims(frame,claims) end function filterClaims(frame,claims) local fclaims = {} local parentargs = frame:getParent().args local filteregenskap = parentarg(frame,'filter egenskap') or "nåværende" end --[[getBrukprops frame - vil peke på malen som inneholder invoke statementet. Den sidens parent vil være wikisiden qid. - hvis oppgitt det wikidata-elementet som skal brukes som basis for tabelldata. Metode som henter qid gitt en egenskap (eller fremtid: flere egenskaper) Henter nå alle ok utsagn. Fremtid: filtrering på ting som kun beste, eventuelle dato-kvalifikatorer, mulige andre kvalifikatorer gitt parametre fra wiki-siden ]] function getBrukprops(frame,qid) ids = {} local parentargs = frame:getParent().args local brukegenskap = parentarg(frame,'bruk egenskap') if brukegenskap then local bruk = mw.text.split( brukegenskap, ',', true ) local claims = getOkStatements(bruk[1],qid) -- her skal fremtidige filtreringer kalles opp. mønster: claims = filter1(frame,qid,claims) -- local ids = claims2ids(claims) end return ids end function getRowids(frame,qid) local parentargs = frame:getParent().args local brukegenskap = parentarg(frame,'bruk egenskap') if brukegenskap then return getBrukprops(frame,qid) end local idliste = parentarg(frame,'idliste') if idliste then end end function p.wdBrukEgenskapVerdi(frame,qid,brukprops,propslist,dodump) --if true then return "" end local navn = mw.wikibase.label(qid) local ids = getRowids(frame,qid) local props = mw.text.split( propslist, ',', true ) return tabellRader(frame,ids,data,res2,props) 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) if entity then qid = entity.id end 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 or 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 --[[wdinadmin frame - vil peke på malen som inneholder invoke statementet. Den sidens parent vil være wikisiden qid. - hvis oppgitt det wikidata-elementet som skal brukes som basis for tabelldata. Metode som henter administrativt område fra Wikidata og returnerer (for Norge) kommune og fylke. Hvis det finnes argument listet i useParam, vil metoden overlate til malen å lage infoboksradene Dette er midlertidig løsning for ikke å gjøre skritt for skritt utvikling enklest mulig. ]] local inadminLand = { } function wdinadminland(qid) local claims = getOkStatements("P17",qid) local landskode = "P297" local inadminLand = {} for idx,param in ipairs(claims2ids(claims)) do local lkode = getOkStatements(landskode,param) local lkode2 = nil if lkode then lcode2 = lkode[1].mainsnak.datavalue.value or nil end inadminLand[param] = { ["lenke"] = getlink(param), ["landkode"] = lcode2 } inadminLand["num"] = idx end return inadminLand end function wdinadmin2(adms) -- if true then return adms end local admids = {} for idx,param in pairs(adms) do local lkode = getOkStatements("P17",param) if lkode then lkode2 = idxx(lkode[1]) -- Antar her at et admin område ligger i ett land end local claims2 = getOkStatements("P131",param) -- neste nivå av administrative områder for dette administrative området local admin2 = idxx(claims2[1]) -- Antar her at et admin område ligger i ett overliggende adm omr. admids[param] = { ["qid"] = param, ["lenke"] = getlink(param), ["land"] = lkode2, ["admin"] = admin2 } admids["num"] = idx end return admids end function wdinadmin1(qid) local claims = getCurrentOkStatements("P131",qid) -- henter en liste med administrative områder local inadminLev1 = {} local inadminLev2 = {} for idx,param in ipairs(claims2ids(claims)) do -- løkke gjennom alle local lkode = getOkStatements("P17",param) if lkode then lkode2 = idxx(lkode[1]) -- Antar her at et admin område ligger i ett land end local claims2 = getCurrentOkStatements("P131",param) -- neste nivå av administrative områder for dette administrative området local admin2 = idxx(claims2[1]) -- Antar her at et admin område ligger i ett overliggende adm omr. inadminLev1[param] = { ["qid"] = param, ["lenke"] = getlink(param), ["land"] = lkode2, ["admin"] = admin2 } inadminLev1["num"] = idx if not inadminLev2[admin2] then inadminLev2[admin2] = admin2 end end local lev2 = wdinadmin2(inadminLev2) return inadminLev1,lev2 end function p._wdinadmin(args,qid) inadminLand.land = wdinadminland(qid) inadminLand.lev1,inadminLand.lev2 = wdinadmin1(qid) return dump(inadminLand)--,dump(inadminLev1) end function p.wdinadmin(frame) local parentargs = frame:getParent().args local args = frame.args for idx,param in ipairs(args) do if parentargs[param] then return "" end end local qid = getqid(frame) return "" -- return p._wdinadmin(args,qid) end return p
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Forhåndsvis en side som bruker denne malen
Mal som brukes på denne siden:
Modul:Infoboks lua/dok
(
rediger
)
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Modul
Diskusjon
English
Visninger
Les
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon