Ir al contenido

Módulo:Clasificaciónvj

De Wikipedia, la enciclopedia libre

Esta documentación explica el funcionamiento del módulo en un contexto técnico. Para instrucciones sobre el uso de la plantilla asociada, véase la documentación de la misma en {{Clasificaciónvj}}.

Este módulo implementa la plantilla {{Clasificaciónvj}}. Su propósito es obtener las clasificasciones de contenido tanto desde parámetros locales como desde Wikidata, así como también facilitar la ampliación de la lista de clasificaciones a través de un módulo separado (además der hacer el módulo principal más eficiente).

Funciones

  • p.clasificacionvj(), la función pública destinada obtener los parámetros desde la plantilla y pasarlos a p.main().
  • p.main(), la función destinada a ser usada (o importada) en este u otros módulos. Analiza los parámetros y los formatea a través de las siguientes funciones.
  • evaluar() la función para concatetar el valor-imagen y establecer el formato.
  • enVariasLineas() copia de la función Módulo:Formato texto.enVariasLineas(), modificado para satisfacer las listas con estilo CSS en tablas (table, table-row y table-cell).
  • obtenerClasif() función envoltura para Módulo:Tablas.elemento(), para obtener el valor de la propiedades de clasificaciones.

Agregar clasificaciones

Véase la documentación de Módulo:Clasificaciónvj/datos.

Notas

Datos adicionales

Se había considerado agregar descriptor de contenido (P7367) y elementos interactivos (P8428) dentro de los valores de clasificación de contenido, por ejemplo:

Luego de debatirlo en el IRC, se decidió prescindir de dichas propiedades, por lo que solo se mostrará la clasificación.

Cantidad de valores por cada descriptor

Hay casos en los que se puede llegar a haber más de un valor (almacenado en Wikidata), dependiendo de las clasificaciones asignadas a lo largo de la historia. Los íconos de descripciones se mostrarán uno al lado del otro, pero no se proveerá más información; se está debatiendo si es pertinente obtenerlo (un ejemplo)


local p = {}

local ModuloArgumentos	= require('Módulo:Argumentos')
local argumentos		= ModuloArgumentos.obtenerValorDeArgumentos
local elementoTabla		= require('Módulo:Tablas').elemento
local Datos				= mw.loadData('Módulo:Clasificaciónvj/datos')
local ObjWD

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

-- Función pública para ser incluída dentro de otros módulos
function p.main(objwd)
	if not ObjWD then ObjWD = objwd 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)
	local Obj = elementoTabla(ObjWD, idPropiedad)
	local Salida = {}
	local Valor, Ultimo = ''
	if Obj then
		for k, v in pairs(Obj) do
			Valor = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id')
			if Valor == Ultimo then break end
			Ultimo = Valor
			table.insert(Salida, Valor)
		end
	end
	return Salida
end

return p