Ir al contenido

Módulo:Lanzamientovj

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 {{Lanzamientovj}}.

Funciones

  • p.lanzamientovj(), la función pública destinada a ser invocada desde la plantilla.
  • p.main(), la función pública principal destinada a ser usada por la función p.lanzamientovj() o ser incluída desde otros módulos (ej, Módulo:Ficha de videojuego.
  • lanzamientoWD(), función privada para obtener los datos desde Wikidata (es esencialmente una versión especial de la función propiedad() con la propiedad ya establecida):
    • |Entidad= la entidad de Wikidata correspondiente al artículo donde es usasda.
    • |idPropiedad=P577 la propiedad fecha de publicación (P577).
    • |Valores={} la tabla de valores, inicialmente vacía.
    • |Obj= el objeto Entidad.claims.idPropiedad con los datos de la propiedad.
    • |Regiones= el objeto Obj.v.qualifiers, P291, donde v son los índices de la tabla |Obj=.
    • |Valor= el objeto Regiones.vv.datavalue.value, formateado para mostrar la fecha, donde vv son los índices de la tabla |Regiones=.
    • |Region= el objeto Regiones.vv.objeto datavalue.value.id del calificador lugar de publicación (P291), para obtener la región en formato id de entidad de Wikidata.
    • La tabla |valores= se va llenando de esta manera Valores[Region] = Valor.

local p = {}

local Entidad
local ModuloArgumentos	= require('Módulo:Argumentos')
local elementoTabla		= require('Módulo:Tablas').elemento
local FormatoFechaHora	= require('Módulo:Wikidata/Fecha').FormateaFechaHora
local Datos				= mw.loadData('Módulo:Lanzamientovj/datos')

-- Función pública para ser llamada desde la plantilla {{clasificaciónvj}}
function p.lanzamientovj(frame)
	argumentos	= ModuloArgumentos.obtenerArgumentosConValor(frame)
	Entidad		= mw.wikibase.getEntity(argumentos.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 Valores = {}
	
	-- :: Sintraxis alternativa (parámetros posicionales, tres)
	if argumentos[1] and argumentos[2] and argumentos[3] then
		local Valor		= '<li><sup>[[' .. argumentos[1] .. '|' .. argumentos[2] .. ']]</sup>&nbsp;' .. argumentos[3] .. '</li>'
		local Categoria	= (function()
			if argumentos[4] then return '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando una sintaxis incorrecta]]' end
			return '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando la sintaxis de parámetros posicionales]]'
		end)()
		table.insert(Valores, Valor..Categoria)

	-- :: Sintraxis alternativa (parámetros posicionales, dos)
	elseif argumentos[1] and argumentos[2] then
		local Valor		= '<li><sup>' .. argumentos[1] .. '</sup>&nbsp;' .. argumentos[2] .. '</li>'
		local Categoria	= '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando la sintaxis de parámetros posicionales]]'
		table.insert(Valores, Valor..Categoria)

	-- :: Sintaxis estándar (parámetros nombrados por código de región)
	else
		for k, v in pairs(Datos) do
			local Valor	= 
				(function()
					for kk, vv in pairs(v[2]) do
						if argumentos[vv] then return argumentos[vv] end
					end
				end)()
				or 
				(function()
					for kk, vv in pairs((v[3] or {})) do
						if argumentos[vv] then return argumentos[vv] end
					end
			end)()
	
			if Valor then
				Etiqueta= (function()
					if v[1] == 'DESC'	then return '<small><sup><abbr title="Fecha desconocida">?</abbr></sup></small>' end
					if v[1] == 'WW'	then return '<small><sup><abbr title="Lanzamiento mundial">WW</abbr></sup></small>' end
					if v[4] then return '<small><sup>[[' .. v[4] .. '|' ..  v[1] ..']]</sup></small>' end
						return '<small><sup>' ..  v[1] .. '</sup></small>'
				end)()
				table.insert(Valores, '<li>' .. Etiqueta .. ' '.. Valor ..'</li>')
			end
		end
	end
	
	-- :: Desde Wikidata
	if #Valores == 0 then
		local Obj = elementoTabla(Entidad, 'claims', 'P577')
		if Obj then
			for k, v in pairs(Obj) do
				Valor	= FormatoFechaHora(elementoTabla(v, 'mainsnak', 'datavalue', 'value'), {['enlace']='no'})
				Region	= elementoTabla(v, 'qualifiers', 'P291', 1, 'datavalue', 'value', 'id')
				Etiqueta= (function()
					for kk, vv in pairs(Datos) do
						if Region and (Region == vv[3][1] or Region == vv[3][2] or Region == vv[3][3]) then return '<small><sup>[[' .. vv[4] .. '|' ..  vv[1] ..']]</sup></small>' end
						return '<small><sup><abbr title="Lanzamiento mundial">WW</abbr></sup></small>'
					end
				end)() or ''
				table.insert(Valores, '<li>' .. Etiqueta .. ' '.. Valor ..'</li>')
			end
		end
	end

	if #Valores > 0 then
		local Apertura	= '<ul style="list-style: none; line-height: inherit; margin: 0px;">'
		local Cierre	= '</ul>'
		return Apertura..table.concat(Valores)..Cierre
	end
end

return p