Modul:Sandkasse/haros/ibx

Fra Wikipedia, den frie encyklopedi
Moduldokumentasjon


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