Diferencia entre revisiones de «Módulo:Ficha de elemento químico»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
mSin resumen de edición
Reusando código desde Módulo:Wikidata
Línea 22: Línea 22:
local Datos = mw.loadData('Módulo:Ficha de elemento químico/datos')
local Datos = mw.loadData('Módulo:Ficha de elemento químico/datos')
local Nombre = argumentos['nombre'] or obtenerEtiquetaWikidata() or ModuloPaginas.nombrePagina({desambiguar='sí'})
local Nombre = argumentos['nombre'] or ModuloWikidata.obtenerEtiquetaWikidata(Entidad) or ModuloPaginas.nombrePagina({desambiguar='sí'})
local Simbolo = argumentos['símbolo'] or propiedad('P246', {['linkback'] = 'no'})
local Simbolo = argumentos['símbolo'] or propiedad('P246', {['linkback'] = 'no'})
local Numero = argumentos['número'] or propiedad('P1086', {['linkback'] = 'no'})
local Numero = argumentos['número'] or propiedad('P1086', {['linkback'] = 'no'})
Línea 95: Línea 95:
if not Anterior then
if not Anterior then
AN = mw.wikibase.getEntity(elementoTabla(InstanciaDe, 'qualifiers', 'P155', 1, 'datavalue', 'value', 'id'))
AN = mw.wikibase.getEntity(elementoTabla(InstanciaDe, 'qualifiers', 'P155', 1, 'datavalue', 'value', 'id'))
if AN then Anterior = obtenerEtiquetaWikidata(AN) end
if AN then Anterior = ModuloWikidata.obtenerEtiquetaWikidata(AN) end
end
end
if not Posterior then
if not Posterior then
POS = mw.wikibase.getEntity(elementoTabla(InstanciaDe, 'qualifiers', 'P156', 1, 'datavalue', 'value', 'id'))
POS = mw.wikibase.getEntity(elementoTabla(InstanciaDe, 'qualifiers', 'P156', 1, 'datavalue', 'value', 'id'))
if POS then Posterior = obtenerEtiquetaWikidata(POS) end
if POS then Posterior = ModuloWikidata.obtenerEtiquetaWikidata(POS) end
end
end


Línea 134: Línea 134:
Pie = argumentos['pie'] or ''
Pie = argumentos['pie'] or ''
else
else
Imagen, Pie = obtenerImagenWikidata('P18')
Imagen, Pie = ModuloWikidata.obtenerImagenWikidata(Entidad, 'P18')
end
end


Línea 188: Línea 188:
}
}
return ModuloFicha.infobox(TablaFicha)
return ModuloFicha.infobox(TablaFicha)
end

function obtenerEtiquetaWikidata(entidad)
if not entidad then entidad = Entidad end
if entidad and entidad.labels and entidad.labels.es then
return entidad.labels.es.value
end
end

function obtenerImagenWikidata(propiedad)
local imagen, valorImagen, piesDeImagen, k, pieDeImagen
if not Entidad then
return
end
-- Obtener la primera imagen en Wikidata de la persona
local imagen = elementoTabla(Entidad, 'claims', propiedad,1)
if not imagen then
return
end
valorImagen = elementoTabla(imagen, 'mainsnak','datavalue','value')
piesDeImagen = elementoTabla(imagen, 'qualifiers','P2096')
-- Encontrar el pie en español
if piesDeImagen then
for k,pieDeImagen in pairs(piesDeImagen) do
if pieDeImagen.datavalue.value.language == 'es' then
return valorImagen, pieDeImagen.datavalue.value.text
end
end
end
-- Si no hay pie de imagen en español comprueba si hay fecha especificada para la imagen
piesDeImagen = elementoTabla(imagen, 'qualifiers', 'P585')
if piesDeImagen and piesDeImagen[1] then
return valorImagen, nombre .. ' en ' .. require('Módulo:Wikidata/Fecha').FormateaFechaHora(piesDeImagen[1].datavalue.value, {['formatoFecha']='año',['enlace']='no'})
end
-- Sin pie de imagen en español
return valorImagen
end
end


function propiedad(idPropiedad,opciones)
function propiedad(idPropiedad,opciones)
if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
return ModuloWikidata.propiedad(Entidad, idPropiedad, opciones)
if not opciones then
opciones = {['linkback']='sí'}
end
opciones.entityId = Entidad.id
opciones.propiedad = idPropiedad
valorPropiedad = ModuloWikidata.getPropiedad(opciones,Entidad.claims[idPropiedad])
return valorPropiedad
end
end
end



Revisión del 19:38 18 mar 2020

Icono de documentación de módulo Documentación del módulo[ver] [editar] [historial] [purgar]

A continuación se muestra la documentación transcluida desde la subpágina /doc. [salta a la caja de código]


Este es un módulo en construcción. No debe ser usado en artículos enciclopédicos (aún).

Este módulo servirá de soporte para {{Ficha de elemento químico}}, {{Ficha de compuesto químico}} y {{Ficha de medicamento}}, ya que esas plantillas comparten un conjunto de datos en común, los que se pueden organizar en un solo módulo.

Uso: {{#invoke: Ficha de elemento químico|Función}}, donde |Función= es una de las tres funciones públicas p.FichaElementoQuimico(), p.FichaCompuestoQuimico() y p.FichaMedicamento(), las que llaman a la función privada Ficha() (la que es usualmente pública); en vez de llamar a Ficha() directamente, las llamadas a estas tres funciones llaman a Ficha() el parámetro |plantilla=, el que corresponde a las tres opciones, y en base a estas, la función Ficha() hara algunas cosas específicas de la plantilla desde la que se está llamando, especificamente, generar distintas fichas para cada una.


Esta documentación está transcluida desde Módulo:Ficha de elemento químico/doc.
Por favor, añade las categorías en la subpágina de documentación y los interwikis en Wikidata. Subpáginas de este módulo.

local p = {}
local ModuloArgumentos			= require('Módulo:Argumentos')
local ModuloFicha				= require('Módulo:Ficha')
local ModuloWikidata			= require('Módulo:Wikidata')
local ModuloPaginas				= require('Módulo:Páginas')
local elementoTabla				= require('Módulo:Tablas').elemento
local getUnit					= require('Módulo:Ficha/unidades').main
local argumentos
local Entidad
local InstanciaDeID

function p.Ficha(frame)

	-- :: Inicializador
	argumentos	= ModuloArgumentos.obtenerArgumentosConValor(frame)
	Entidad		= mw.wikibase.getEntity(argumentos.entidad) or mw.wikibase.getEntity(argumentos.id) or {}
	
	local InstanciaDe		= elementoTabla(Entidad, 'claims', 'P31', 1)
	if InstanciaDe then InstanciaDeID = elementoTabla(InstanciaDe, 'mainsnak', 'datavalue', 'value', 'id') end
	
	-- :: Datos
	local Datos		= mw.loadData('Módulo:Ficha de elemento químico/datos')
	
	local Nombre	= argumentos['nombre'] or ModuloWikidata.obtenerEtiquetaWikidata(Entidad) or ModuloPaginas.nombrePagina({desambiguar='sí'})
	local Simbolo	= argumentos['símbolo'] or propiedad('P246', {['linkback'] = 'no'})
	local Numero	= argumentos['número'] or propiedad('P1086', {['linkback'] = 'no'})
	local NM		= argumentos['nm']
	local EstCris	= argumentos['estructura_cristalina']

	local TablaPeriodica	= obtenerTablaPeriodica(frame, Simbolo, Nombre, Numero, NM, EstCris)

	local Color	= 'CCC'
	local Serie
	local Grupo
	local Periodo
	local Bloque
	
	if Datos[Numero] then
		Color	= Datos[Numero][1]
		Serie	= Datos[Numero][2]
		Grupo	= Datos[Numero][3]
		Periodo	= Datos[Numero][4]
		Bloque	= Datos[Numero][5]
	end

	local NombreEtiqueta	= {}
	local NombreValor		= {}
	
	NombreEtiqueta[1]		= '[[Anexo:Elementos químicos|Nombre]]'
	NombreValor[1]			= capitalizar(Nombre)

	if Simbolo then
		NombreEtiqueta[2]	= '[[Anexo:Elementos químicos|símbolo]]'
		NombreValor[2]		= Simbolo
	end
	
	if Numero then
		NombreEtiqueta[3]	= '[[Número atómico|número]]'
		NombreValor[3]		= Numero
	end
	
	NombreEtiqueta			= table.concat(NombreEtiqueta,", ")
	NombreValor				= table.concat(NombreValor,", ")

	local GrupoEtiqueta		= {}
	local GrupoValor		= {}

	if Grupo then
		GrupoEtiqueta[1]	= '[[Tabla_periódica_de_los_elementos#Grupos|Grupo]]'
		GrupoValor[1]		= Grupo
	end
	
	if Periodo then
		GrupoEtiqueta[2]	= '[[Tabla_periódica_de_los_elementos#Períodos|período]]'
		GrupoValor[2]		= Periodo
	end
	
	if Bloque then
		GrupoEtiqueta[3]	= '[[Tabla_periódica_de_los_elementos#Bloques|bloque]]'
		GrupoValor[3]		= Bloque
	end
	
	GrupoEtiqueta			= table.concat(GrupoEtiqueta,", ")
	GrupoValor				= table.concat(GrupoValor,", ")
	
	-- :: Formato
	local ClaseTitulo		= 'física'
	local EstiloTitulo		= 'background:#' .. Color .. ';'
	local EstiloEtiqueta	= 'width:40%;background:#' .. Color .. ';'
	local EstiloDatos		= 'width:60%'	
	
	-- Sucesión
	local Anterior	= argumentos['anterior']	or propiedad('P155', {['enlace'] = 'no'})
	local Posterior	= argumentos['posterior']	or propiedad('P156', {['enlace'] = 'no'})
	if not Anterior then
		AN	= mw.wikibase.getEntity(elementoTabla(InstanciaDe, 'qualifiers', 'P155', 1, 'datavalue', 'value', 'id'))
		if AN then Anterior = ModuloWikidata.obtenerEtiquetaWikidata(AN) end
	end
	
	if not Posterior then
		POS	= mw.wikibase.getEntity(elementoTabla(InstanciaDe, 'qualifiers', 'P156', 1, 'datavalue', 'value', 'id'))
		if POS then Posterior = ModuloWikidata.obtenerEtiquetaWikidata(POS) end
	end

	if Anterior then
		Anterior = '[[' .. capitalizar(Anterior:gsub('[%[%]]+','')) .. ']] ← '
	else
		Anterior = ''
	end

	if Posterior then
		Posterior = ' → [[' .. capitalizar(Posterior:gsub('[%[%]]+','')) .. ']]'
	else
		Posterior = ''
	end

	local Titulo	= capitalizar(Nombre)
	local Sucesion	= '<div style="display:table;width:100%"><div style="display:table-row"><div style="display:table-cell;width:50%;text-align:right;font-size:small;">' ..  Anterior .. '</div><div style="display:table-cell;width:50%;text-align:left;font-size:small;">' .. Posterior .. '</div></div></div>'
	
	local NombreTituloEtiqueta	= '[[Anexo:Elementos químicos|Nombre]]'
	local NombreTitulo			= capitalizar(Nombre)
	
	local Imagen
	local Pie
	local Tamano	= argumentos['tamaño'] or '250px'

	if Simbolo and Numero then
		ArchivoNombre = Simbolo .. ',' .. Numero .. '.jpg'
		ArchivoObjeto = mw.title.new(ArchivoNombre)
		if ArchivoObjeto.fileExists then Imagen = Simbolo .. ',' .. Numero .. '.jpg' end
	end

	if Imagen then
		Pie			= argumentos['pie'] or ''
	else
		Imagen, Pie	= ModuloWikidata.obtenerImagenWikidata(Entidad, 'P18')
	end

	if Pie then
		Pie = '<span style="font-size:smaller">' .. Pie .. '</span>'
	end

	-- :: La ficha
	local TablaFicha = {
		entidad				= argumentos.id,
		titulo  			= Titulo,
		subtitulo			= Sucesion,
		subtitulo2			= TablaPeriodica,
		subtitulo3			= EnlacesTabla,
		clasetitulo			= ClaseTitulo,
		estilotitulo		= EstiloTitulo,
		estiloetiqueta		= EstiloEtiqueta,
		estilodatos			= EstiloDatos,
		imagen				= Imagen,
		['tamañoimagen']	= Tamano,
		pie					= Pie,
		estilopie			= 'font-size:small',
		{tipo='sección',
			titulo = 'Información general',
			estilotitulo	= EstiloTitulo,
			{NombreEtiqueta, NombreValor},
			{'[[Serie química]]', Serie},
			{GrupoEtiqueta, GrupoValor},
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
			{'', },
		
		},
		{tipo='sección',
			titulo = '',
			{'', }
		},
	}
	return ModuloFicha.infobox(TablaFicha)
end

function propiedad(idPropiedad,opciones)
	return ModuloWikidata.propiedad(Entidad, idPropiedad, opciones)
end

function esUnValor(entidad, idPropiedad, idaBuscar)
	if not entidad or not idPropiedad then
		return false
	end
	
	local declaracion = elementoTabla(entidad, 'claims', idPropiedad)
	local idBuscado
	if not declaracion then
		return false
	end

	for k,v in pairs(declaracion) do
		idBuscado = elementoTabla(v,'mainsnak','datavalue','value','id')
		if idBuscado == idaBuscar then
			return true
		end
	end
	return false
end

function listaDesplegable(titulo, lista, frame)
	if not lista then
		return
	end
	return frame:preprocess('{{Lista desplegable|align=left|título='..titulo .. '|1='..lista..'}}')
end

function seccionDesplegable(titulo, lista, frame)
	if not lista then
		return
	end
	return frame:preprocess('{{Sección desplegable|align=left|título=' .. titulo .. '|datos='.. lista .. '}}')
end

function capitalizar(cad)
	return string.upper(string.sub(cad,1,1)) .. string.sub(cad,2)
end

function obtenerEnumCalculado(entidad)
	local valc
	for k,v in ipairs(clasificacionValores) do
		valc = esUnValor(entidad, v[0], v[1])
		if valc then
			return v[2]
		end
	end
end

function obtenerTablaPeriodica(frame, Simbolo, Nombre, Numero, NM, EstCris)
	if not Simbolo or not Numero or not Nombre then return false end
	if not NM then NM = '' end
	if not EstCris then EstCris = '' end

	local TablaPeriodica = frame:preprocess('{{Ficha de elemento químico/minitabla periódica|símbolo=' .. Simbolo .. '|nombre=' .. Nombre .. '|número=' .. Numero .. '|nm' .. NM .. '|estructura_cristalina=' .. EstCris .. '}}')
	local TablaPeriodicaPie = '[[Tabla periódica de los elementos|Tabla completa]] • [[Tabla periódica de los elementos ampliada|Tabla ampliada]]'
	
	return TablaPeriodica .. TablaPeriodicaPie
end

return p