Diferencia entre revisiones de «Módulo:Ficha de elemento químico»
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) |
||
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
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.
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