Modul:Sandkasse/haros/ibx
Moduldokumentasjon
[opprett]
local math_mod = require( "Module:Math" )
local WikidataReferanse = require( 'Module:WikidataReferanse' )
local WikidataBilde = require( 'Module:WikidataBilde' )
local p = {}
-- = "<pre>" .. mw.text.jsonEncode(xxx, mw.text.JSON_PRETTY) .. "</pre>"
function getProp(qid,pid)
local entity = mw.wikibase.getEntity(qid)
if not entity then
return {}
end
return entity:getBestStatements(pid)
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 tooltip(kort,forklaring)
local value = ""
if kort and forklaring then
value = mw.getCurrentFrame():expandTemplate{title='tooltip',args = { kort, forklaring } }
-- string.format([[
-- <span style="cursor:help; border-bottom:1px dotted;" title="{{#tag:nowiki|{{{2}}}}}">{{{1}}}</span>
-- ]], tittel, value)
end
return value
end
function formatRad(tittel,value)
return string.format([[
<tr class="rad" valign="top">
<th colspan="2" class="nowrap">%s</th>
<td colspan="2">%s</td>
</tr>
]], tittel, value)
end
function ibxStart(type,stor,navn,navn2)
local arg = {}
arg["navn"] = navn
local txt0a = '<table class="infobox infoboks '
local txt0b = type .. " " .. stor .. " " ..'"'
-- .. " " .. class
local txt0d = ">"
local txt1 = ''
if navn2 and navn2 ~= '' then
txt1 = '<tr valign="top" class="hode"><th colspan="4">' .. navn2 .. '</th></tr>'
end
local txt2 = '<tr class="hode overskrift"><th colspan="4">' .. navn .. '</th></tr>'
return txt0a .. txt0b .. txt0d .. txt1 .. txt2
end
function p.overskrift(tittel)
local oversk,avslutt = formatOverskrift(tittel)
return oversk
end
function lagReferanser(refs)
local value = ""
local ref = nil
if refs then
ref = refs[1] or nil
end
if ref then
local reftxt = WikidataReferanse.formatRef(ref.snaks)
local attrs = { name = string.format( 'hash-%s', ref.hash ) }
value = value .. mw.getCurrentFrame():extensionTag( 'ref', reftxt, attrs )
end
return value
end
function p.oneProp(prop,medReferanse)
value = mw.wikibase.formatValue(prop.mainsnak)
if value and value ~= "" then
local quals = prop.qualifiers
local qual = nil
if quals then
qual = quals[1] or nil
end
if medReferanse then
local refs = prop.references
value = value .. lagReferanser(prop.references)
end
return value
end
return ""
end
function p.liste(tittel,qid,pid,entity)
if not pid then
return ""
end
local props = entity:getBestStatements(pid)
if not props then
return ""
end
local value = ""
local sep = ""
for k,prop in pairs(props) do
local v = p.oneProp(prop,1)
if v and v ~= "" then
value = value .. sep .. v
sep = ", "
end
end
return formatRad(tittel,value)
end
function getBestStatements(pid,entity)
if not pid then
return nil
end
local prop = entity:getBestStatements(pid)
if not prop then
return nil
end
if not prop[1] then
return nil
end
if not prop[1].mainsnak then
return nil
end
return prop[1]
end
function p.singleValue(tittel,qid,pid,entity)
local prop1 = getBestStatements(pid,entity)
if not prop1 then
return ""
end
value = mw.wikibase.formatValue(prop1.mainsnak)
if value and value ~= "" then
local quals = prop1.qualifiers
local qual = nil
if quals then
qual = quals[1] or nil
end
local refs = prop1.references
value = value .. lagReferanser(refs)
return formatRad(tittel,value)
end
return ""
end
function ibxSlutt(comcat,endcomment)
return "</table>"
end
function p.formatVerdi(tittel,verdi,enhet,referanser)
local value = ""
local num = mw.getContentLanguage():parseFormattedNumber(verdi)
if num then
value = mw.getContentLanguage():formatNum(num) .. " " .. enhet .. referanser
else
value = verdi.. " " .. enhet .. referanser
end
return formatRad(tittel,value)
end
function p.stedOgLand(tittel,qid,pid,entity)
local value = ""
if not pid then
return formatRad(tittel,"aa1")
end
local props = entity:getBestStatements(pid)
if not props then
return formatRad(tittel,"aa2")
end
local prop = props[1] or nil
if not prop then
return formatRad(tittel,"aa3")
end
local stedref = 1
local landref = nil -- vi trenger ikke lage referanse på hvilket land stedet ligger i
value = p.oneProp(prop,stedref)
local propquid = prop.mainsnak.datavalue.value.id
local propland = getProp(propquid,"P17")
local pval = ""
if propland and propland[1] then
pval = p.oneProp(propland[1],landref)
if pval and pval ~= "" then
pval = pval .. tooltip(" *","Land nå")
end
end
if pval and pval ~= "" then
value = value .. ", " .. pval
end
-- local pval = p.oneProp(prop)
-- value = value .. " " .. "<pre>" .. mw.text.jsonEncode(prop.mainsnak.datavalue.value, mw.text.JSON_PRETTY) .. "</pre>"
return formatRad(tittel,value)
end
function p.rad(tittel,arg,metode)
if arg and arg == "uten" then
return ""
end
local value = ""
if arg and arg ~= "" then
return formatRad(tittel,arg)
end
return ""
end
function lokaltArgumentVerdi(tittel, arg, metode, args, rad)
local aenhet = rad["enhettext"] or nil
local enhet = ""
if aenhet then
enhet = args[aenhet] or ""
end
local areferanser = rad["referanser"] or nil
local referanser = ""
if areferanser then
referanser = args[areferanser] or ""
end
return p.formatVerdi(tittel,arg,enhet,referanser)
end
function lokaltArgument(tittel, arg, metode, args, rad)
local value = ""
if arg == "uten" then
return ""
end
if method == "verdi" then
return lokaltArgumentVerdi(tittel, arg, metode, args, rad)
end
return formatRad(tittel,arg)
end
function wdArgumentVerdi(tittel, qid, metode, args, rad)
-- local aenhet = rad["enhet"] or nil
-- local enhet = ""
-- if aenhet then
-- enhet = args[aenhet] or ""
-- end
-- local areferanser = rad["referanser"] or nil
-- local referanser = ""
-- if areferanser then
-- referanser = args[areferanser] or ""
-- end
return p.formatVerdi(tittel,verdi,enhet,referanser)
end
-- Her skal argument "uten" alt være håndtert
function wdArgument(tittel, metode, args, rad, qid, entity)
local value = ""
local pid = rad["pid"] or nil
if metode == "overskrift" then
value = value .. p.overskrift(tittel)
end
if metode == "single" then
value = value .. p.singleValue(tittel,qid,pid,entity)
end
if metode == "bilde" then
value = value .. WikidataBilde._bildeOgTekst(qid,pid)
end
if metode == "definisjon" then
value = value .. brukDefinisjon(rad["definisjon"], args, qid, entity)
end
if metode == "liste" then
value = value .. p.liste(tittel,qid,pid,entity)
end
if metode == "stedogland" then
value = value .. p.stedOgLand(tittel,qid,pid,entity)
end
return value
end
function brukDefinisjon(definisjon, args, qid, entity)
local value = ""
if definisjon then
for i,rad in ipairs(definisjon) do
local tittel = rad["tittel"] or ""
local pid = rad["pid"] or nil
local metode = rad["metode"]
local param = rad["param"]
if args and args[param] then
value = value .. lokaltArgument(tittel, args[param], metode, args, rad)
else
value = value .. wdArgument(tittel, metode, args, rad, qid, entity)
end
end
end
return value
end
function p._ibx(infobokstype, infoboksstor, definisjon, qid, args)
local entity = mw.wikibase.getEntity(qid)
-- local infobokstype = args["infobokstype"] or "biografi"
-- local infoboksstor = args["infoboksstørrelse"] or "bred"
local navn = args["navn"] or mw.wikibase.label(qid) or "navn"
value = ibxStart(infobokstype, infoboksstor, navn)
value = value .. brukDefinisjon(definisjon, args, qid, entity)
return value .. ibxSlutt()
end
function p.getQidArg(frame)
local args = frame.args
local qid = args["qid"] or nil
local entity = mw.wikibase.getEntity(qid)
if not qid then
if not entity then
qid = nil
else
qid = entity.id
end
end
return qid,args
end
function p.ibx(frame)
local definisjon = nil
local args = frame.args
local qid = args["qid"] or nil
local entity = mw.wikibase.getEntity(qid)
if not qid then
if not entity then
qid = "Q36661"
else
qid = entity.id
end
end
return p._ibx("biografi", "bred", definisjon,qid,args)
end
local museum = {
{
["param"] = "navn",
["pid"] = "P1705",
["metode"] = "single",
["tittel"] = "Navn"
},
{
["param"] = "bilde",
["pid"] = "P18",
["metode"] = "bilde",
["tittel"] = ""
},
{
["param"] = "vinterbilde",
["pid"] = "P5252",
["metode"] = "bilde",
["tittel"] = ""
},
{
["param"] = "bilde",
["pid"] = "P5775",
["metode"] = "bilde",
["tittel"] = ""
},
{
["param"] = "grunnlagt",
["pid"] = "P571",
["metode"] = "single",
["tittel"] = "Grunnlagt"
},
{
["param"] = "arkitekt",
["pid"] = "P84",
["metode"] = "liste",
["tittel"] = "Arkitekt"
},
{
["param"] = "adresse",
["pid"] = "P6375",
["metode"] = "single",
["tittel"] = "Adresse"
},
{
["param"] = "land",
["pid"] = "P17",
["metode"] = "single",
["tittel"] = "Land"
},
{
["param"] = "ligger i",
["pid"] = "P131",
["metode"] = "liste",
["tittel"] = "Ligger i"
},
{
["param"] = "består av",
["pid"] = "P527",
["metode"] = "liste",
["tittel"] = "Består av"
},
{
["param"] = "årlig besøkstall",
["pid"] = "P1174",
["metode"] = "single",
["tittel"] = "Årlig besøkstall"
}
}
local uni = {
{
["param"] = "navn",
["pid"] = "P1705",
["metode"] = "single",
["tittel"] = "Navn"
},
{
["param"] = "logo",
["pid"] = "P154",
["metode"] = "bilde",
["tittel"] = ""
},
{
["param"] = "bilde",
["pid"] = "P18",
["metode"] = "bilde",
["tittel"] = ""
},
{
["param"] = "latinsk navn",
["pid"] = nil,
["metode"] = "single",
["tittel"] = "latinsk navn"
},
{
["param"] = "Kallenavn",
["pid"] = nil,
["metode"] = "single",
["tittel"] = "Kallenavn og forkortelser"
},
{
["param"] = "motto",
["pid"] = nil,
["metode"] = "single",
["tittel"] = "Motto"
},
{
["param"] = "visjon",
["pid"] = nil,
["metode"] = "single",
["tittel"] = "Visjon"
},
{
["param"] = "grunnlagt",
["pid"] = "P571",
["metode"] = "single",
["tittel"] = "Grunnlagt"
},
{
["param"] = "type",
["pid"] = nil,
["metode"] = "single",
["tittel"] = "Type"
},
{
["param"] = "rektor",
["pid"] = "P1075",
["metode"] = "single",
["tittel"] = "Rektor"
},
{
["param"] = "prorektor",
["pid"] = nil,
["metode"] = "single",
["tittel"] = "Prorektor"
},
{
["param"] = "Viserektor(er)",
["pid"] = nil,
["metode"] = "single",
["tittel"] = "viserektor"
},
{
["param"] = "Direktør",
["pid"] = P1037,
["metode"] = "single",
["tittel"] = "direktør"
},
{
["param"] = "beliggenhet",
["pid"] = "P6375",
["metode"] = "single",
["tittel"] = "Beliggenhet"
},
{
["param"] = "adresse",
["pid"] = "P6375",
["metode"] = "single",
["tittel"] = "Adresse"
},
{
["param"] = "land",
["pid"] = "P17",
["metode"] = "single",
["tittel"] = "Land"
},
{
["param"] = "ligger i",
["pid"] = "P131",
["metode"] = "single",
["tittel"] = "Ligger i"
},
{
["param"] = "studenter",
["pid"] = "P2196",
["metode"] = "single",
["tittel"] = "Studenter"
},
{
-- ["param"] = {"ansatte","data fra"},
["param"] = "ansatte",
["pid"] = "P2196",
["metode"] = "single",
["tittel"] = "Studenter"
},
{
["param"] = "medlemskap",
["pid"] = "nil",
["metode"] = "single",
["tittel"] = "Medlemskap"
},
{
["param"] = "organisasjonsnummer",
["pid"] = "nil",
["metode"] = "single",
["tittel"] = "Organisasjonsnummer"
},
{
["param"] = "nettsted",
["pid"] = "nil",
["metode"] = "single",
["tittel"] = "Nettsted"
}
}
function p.ibxMuseum(frame)
local definisjon = museum
local args = frame.args
local qid = args["qid"] or nil
local entity = mw.wikibase.getEntity(qid)
if not qid then
if not entity then
qid = "Q36661"
else
qid = entity.id
end
end
return p._ibx("biografi", "bred", definisjon,qid,args)
end
local test2 = {
{
["param"] = "bilde",
["pid"] = "P18",
["metode"] = "overskrift",
["tittel"] = "test2"
},
}
local test1 = {
{
["metode"] = "overskrift",
["tittel"] = "test1 start"
},
{
["metode"] = "definisjon",
["definisjon"] = test2
},
{
["metode"] = "overskrift",
["tittel"] = "test1 slutt"
},
}
local skipsmaal = {
{
["param"] = "lengde",
["pid"] = "P2043",
["metode"] = "single",
["tittel"] = "Lengde"
},
{
["param"] = "bredde",
["pid"] = "P2261",
["metode"] = "single",
["tittel"] = "Bredde"
},
{
["param"] = "dypgang",
["pid"] = "P2262",
["metode"] = "single",
["tittel"] = "Dybde"
},
}
local skip = {
{
["param"] = "bilde",
["pid"] = "P18",
["metode"] = "bilde",
["tittel"] = ""
},
{
["param"] = "andre navn",
["tittel"] = "Andre navn"
},
{
["param"] = "type",
["tittel"] = "Skipstype"
},
{
["param"] = "flaggstat",
["pid"] = "P8047",
["metode"] = "liste",
["tittel"] = "Flaggstat"
},
{
["param"] = "register",
["metode"] = "single",
["tittel"] = "Register"
},
{
["param"] = "registreringshavn",
["pid"] = "P532",
["metode"] = "single",
["tittel"] = "Registreringshavn"
},
{
["param"] = "eier",
["pid"] = "P127",
["metode"] = "liste",
["tittel"] = "Eier"
},
{
["param"] = "rederi",
["pid"] = "P137",
["metode"] = "liste",
["tittel"] = "Rederi"
},
{
["param"] = "status",
["metode"] = "single",
["tittel"] = "Status"
},
{
["param"] = "kjølstrekking",
["metode"] = "single",
["tittel"] = "Kjølstrekking"
},
{
["param"] = "sjøsatt",
["metode"] = "single",
["tittel"] = "Sjøsatt"
},
{
["param"] = "døpt",
["metode"] = "single",
["tittel"] = "Døpt"
},
{
["param"] = "jomfrutur",
["pid"] = "P606",
["metode"] = "liste",
["tittel"] = "Jomfrutur"
},
{
["param"] = "kallesignal",
["pid"] = "P2317",
["metode"] = "single",
["tittel"] = "Kallesignal"
},
{
["param"] = "tatt i bruk",
["pid"] = "P729",
["metode"] = "single",
["tittel"] = "Tatt i bruk"
},
{
["param"] = "IMO-nummer",
["pid"] = "P458",
["metode"] = "single",
["tittel"] = "IMO-nr."
},
{
["param"] = "MMSI-nummer",
["pid"] = "P587",
["metode"] = "single",
["tittel"] = "[[Maritime Mobile Service Identity|MMSI-nr.]]"
},
{
["metode"] = "overskrift",
["tittel"] = "Tekniske data"
},
{
["metode"] = "definisjon",
["definisjon"] = skipsmaal
},
}
local krigsskip = {
{
["param"] = "bilde",
["pid"] = "P18",
["metode"] = "bilde",
["tittel"] = ""
},
{
["metode"] = "overskrift",
["tittel"] = "Karriere"
},
{
["param"] = "land",
["pid"] = "P8047",
["metode"] = "liste",
["tittel"] = "Land"
},
{
["param"] = "ligger i",
["pid"] = "P131",
["metode"] = "single",
["tittel"] = "Ligger i"
},
{
["param"] = "klasse",
["pid"] = "P289",
["metode"] = "single",
["tittel"] = "Klasse"
},
{
["param"] = "underklasser",
["pid"] = "",
["metode"] = "single",
["tittel"] = "Underklasser"
},
{
["param"] = "verft",
["pid"] = "P176",
["metode"] = "single",
["tittel"] = "Verft"
},
{
["param"] = "byggenummer",
["pid"] = "P617",
["metode"] = "single",
["tittel"] = ""
},
{
-- ["param"] = "bilde",
-- ["pid"] = "P18",
["metode"] = "overskrift",
["tittel"] = "Tekniske data"
},
{
["metode"] = "definisjon",
["definisjon"] = skipsmaal
},
}
function p.ibxSkip(frame)
local definisjon = skip
local qid,args = p.getQidArg(frame)
return p._ibx("biografi", "bred", definisjon,qid,args)
end
function p.ibxKrigsskip(frame)
local definisjon = krigsskip
local qid,args = p.getQidArg(frame)
return p._ibx("biografi", "bred", definisjon,qid,args)
end
local biografi = {
{
["param"] = "navn",
["pid"] = "P1705",
["metode"] = "single",
["tittel"] = "Navn"
},
{
["param"] = "bilde",
["pid"] = "P18",
["metode"] = "bilde",
["tittel"] = ""
},
{
["param"] = "fødested",
["pid"] = "P19",
["metode"] = "stedogland",
["tittel"] = "Fødested"
},
{
["param"] = "dødssted",
["pid"] = "P20",
["metode"] = "stedogland",
["tittel"] = "Dødssted"
},
}
function p.ibxBiografi(frame)
local definisjon = biografi
local qid,args = p.getQidArg(frame)
return p._ibx("biografi", "bred", definisjon,qid,args)
end
local vannmasseVerdier = {
{
["param"] = "areal",
["pid"] = nil,
["metode"] = "verdi",
["tittel"] = "Areal"
},
}
local vannmasseVerdier2 = {
{
["param"] = "høyde",
["pid"] = nil,
["metode"] = "verdi",
["tittel"] = "Høyde"
},
{
["param"] = "magasinvolum",
["pid"] = nil,
["metode"] = "verdi",
["tittel"] = "[[Reguleringsmagasin|Magasinvolum]]"
},
{
["param"] = "lengde",
["pid"] = nil,
["metode"] = "verdi",
["tittel"] = "Lengde"
},
{
["param"] = "bredde",
["pid"] = nil,
["metode"] = "verdi",
["tittel"] = "Bredde"
},
{
["param"] = "omkrets",
["pid"] = nil,
["metode"] = "verdi",
["tittel"] = "Omkrets"
},
{
["param"] = "dybde",
["pid"] = nil,
["metode"] = "verdi",
["tittel"] = "Dybde"
},
{
["param"] = "volum",
["pid"] = nil,
["metode"] = "verdi",
["tittel"] = "Volum"
},
{
["param"] = "nedbørfelt",
["pid"] = nil,
["metode"] = "verdi",
["tittel"] = "Nedbørfelt"
},
}
function p.ibxVannmasseVerdi(frame)
local definisjon = vannmasseVerdier
local qid,args = p.getQidArg(frame)
local entity = mw.wikibase.getEntity(qid)
return brukDefinisjon(definisjon, args, qid, entity)
end
function lokalVerdiRad(tittel, verdi, enhet, referanser)
if verdi == "uten" then
return ""
end
local enhettxt = ""
local reftxt = ""
if enhet then
enhettxt = enhet
end
if referanser then
reftxt = referanser
end
return p.formatVerdi(tittel, verdi, enhettxt, reftxt)
end
function p._verdiRad(tittel, verdi, enhet, ref, qid, pid)
if verdi and verdi ~= "" then
return lokalVerdiRad(tittel, verdi, enhet, ref)
end
local entity = mw.wikibase.getEntity(qid)
return p.singleValue(tittel,qid,pid,entity)
end
function p.verdiRad(frame)
local args = frame.args or nil
if not args then
return ""
end
local verdi = args["verdi"] or nil
local enhet = args["enhet"] or nil
local ref = args["ref"] or nil
local tittel = args["tittel"] or nil
local pid = args["pid"] or nil
local qid = args["qid"] or nil
return p._verdiRad(tittel, verdi, enhet, ref, qid, pid)
end
function p.ibxStart(frame)
local args = frame.args or {}
local typ = args["type"] or "biografi"
local stor = args["stor"] or "bred"
local navn = args["navn"] or "navn"
local navn2 = args["navn2"] or nil
value = ibxStart(typ, stor, navn, navn2)
return value
end
function p.ibxSlutt(frame)
return ibxSlutt()
end
return p