Módulo:Clasificaciónvj

De MacphersonWiki
Ir a la navegación Ir a la búsqueda

La documentación para este módulo puede ser creada en Módulo:Clasificaciónvj/doc

local p = {}

local Entidad			-- Tabla con los datos en Wikidata del libro.
local ModuloArgumentos	= require('Módulo:Argumentos')
local argumentos		= ModuloArgumentos.obtenerValorDeArgumentos
local Datos				= mw.loadData('Módulo:Clasificaciónvj/datos')

-- Función pública para ser llamada desde la plantilla {{clasificaciónvj}}
function p.clasificacionvj(frame)
	ModuloArgumentos.obtenerTablaDeArgumentos(frame)
	Entidad			= mw.wikibase.getEntity(argumentos{'entidad', 'id'}) or {}
	return p.main()
end

-- Función pública para ser incluída dentro de otros módulos
function p.main(entidad)
	if not Entidad then Entidad = entidad end

	local Salida = {}
	for k, v in pairs(Datos) do
		if v then table.insert(Salida, evaluar(v)) end
	end
	local resultado
	local copia={}
	require('Módulo:Tablas').insertarElementosConValor(Salida, copia)
	if copia[1] then
		return '<div style="display:table">' .. table.concat(copia) .. '</div>'
	end
end

function evaluar(datos)
	if not datos then datos = {} end
	local Valor = (function()
		local Valor = argumentos{datos[1], {obtenerClasif, datos[3]}} or {}
		if type(Valor) == 'string' then Valor = {Valor} end
		return Valor
	end)()
	if #Valor == 0 then return '' end

	local Salida = {}
	table.insert(Salida, '<div style="display:table-row">')
	table.insert(Salida, '<div style="display:table-cell;font-weight:bold;padding-right:0.2em">[[' .. datos[2] .. '|' .. datos[1] .. ']]</div>')
	local Clasificador
	for k, v in pairs(Valor) do
		Clasificador	= v
		if datos[4][Clasificador] then
			table.insert(Salida, '<div style="display:table-cell;">[[Archivo:' .. datos[4][Clasificador][1] .. '|' .. datos[4][Clasificador][2] .. '|25x30px|link=]]</div>')
		else
			table.insert(Salida, '<div style="display:table-cell;">' .. Clasificador .. '</div>')
		end
	end
	table.insert(Salida, '</div>')
	return table.concat(Salida)
end

function obtenerClasif(idPropiedad)
	if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
		local Salida = {}
		local Obj = require('Módulo:Tablas').elemento(Entidad, 'claims', idPropiedad)
		local Valor, Ultimo = ''
		if Obj then
			for k, v in pairs(Obj) do
				Valor = require('Módulo:Tablas').elemento(v, 'mainsnak', 'datavalue', 'value', 'id')
				if Valor == Ultimo then break end
				Ultimo = Valor
				table.insert(Salida, Valor)
			end
		end
		return Salida
	end
end

return p