Hopp til innhold

Modul:Infoboks lua

Fra Wikipedia, den frie encyklopedi
Sideversjon per 4. okt. 2024 kl. 22:19 av Haros (diskusjon | bidrag) (function getqid(frame))
Moduldokumentasjon
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 p._ibxStart(type,stor,navn,navn2)
	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._ibxSlutt(comcat,endcomment)
	return "</table>"
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 nil
	local navn2 = args["navn2"] or nil
	if not navn then
		navn = getname(frame)
	end
	if not navn then
		navn = "navn"
	end
	
	if not navn2 then
		navn2 = "navn2"
	end
	local value = p._ibxStart(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 = nil
	if frameargs['qid'] and frameargs['qid'] ~= "" then
		qid = frameargs['qid']
	end
	local entity = mw.wikibase.getEntity(qid) or nil
	if not qid then
		if entity then
			qid = entity.id
		end
	end
	return navn
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 wdEgenskap(frame,qid,data,res,props)
	local lang = mw.language.getContentLanguage()
	for ix,prop in ipairs( props ) do
		if not data or not data.props[prop] then
			local proplab,langq = mw.wikibase.getLabelWithLang(prop)
	  		local displayName = lang:ucfirst(proplab)
			local val = wikidataListe._rad2(frame,qid,prop,"nil",nil,nil,displayName,nil,nil)
			if val and val ~= "" then
				table.insert(res, val)
			end
		end
	end
	local txt = table.concat(res, "\n")
	return txt -- data,res
end

function p.wdEgenskap(frame,qid,data,res,propslist)
	local entity = mw.wikibase.getEntity(qid)
	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" 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
	return wdEgenskap(frame,qid,data,res,props) .. dump(entity)
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 = "Q35637" --"Q239904" --"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") --propslist)
	local slutt = p._ibxSlutt()
	return start .. text .. slutt
end

function p.dump(frame)
	local qid = getqid(frame)
	local entity = mw.wikibase.getEntity(qid)
	return dump(entity)
end
return p