Módulo:Sucesiones
Apariencia
Uso
local z = {}
-- Módulos utilizados
local ModuloArgumentos= require('Module:Argumentos')
local ModuloTablas = require('Module:Tablas')
local elementoTabla = ModuloTablas.elemento
local ModuloWikidata = require('Module:Wikidata')
local Entidad -- Tabla con los datos en Wikidata del libro.
local etiquetaWikidata
function z.sucesionPremios(frame)
ModuloWikidata:setFrame(frame)
local argumentos = ModuloArgumentos.obtenerArgumentos(frame)
if not argumentos then
return
end
local sucesion = mw.html.create('table')
:addClass('wikitable')
:css('text-align', 'center')
:css('width','100%')
:css('clear','both')
:css('font-size','90%')
insertarPremios(sucesion, argumentos[1])
for k,v in pairs(argumentos) do
if k~=1 then
insertarPremios(sucesion, v)
end
end
return tostring(sucesion)
end
function insertarPremios(tabla, idEntidad)
-- Obtener los datos de la página donde se inserta la ficha de Wikidata.'
-- En su caso se le pasa el valor de la idEntidad. Por ejemplo, Q21502008
local entidad = mw.wikibase.getEntityObject(idEntidad)
local etiquetaWikidata = elementoTabla(entidad,'labels','es','value') -- entidad['labels']['es']['value']
local declaracionesPremios = elementoTabla(entidad,'claims','P166') -- entidad['claims']['P166']
if not etiquetaWikidata or not declaracionesPremios then
return
end
-- Crear una tabla de premios con los datos de Wikidata
local declaracionPremio, premios, k, premio, idPredecesor, idSucesor
premios = {}
for k, declaracionPremio in pairs(declaracionesPremios) do
idPredecesor = obtenerCalificativo(declaracionPremio, 'P155')
idSucesor = obtenerCalificativo(declaracionPremio, 'P156')
--Saltarse los premios sin predecesor ni sucesor en Wikidata
if idPredecesor or idSucesor then
premio = {}
premio.nombre = ModuloWikidata.formatoIdEntidad('Q' .. declaracionPremio.mainsnak.datavalue.value['numeric-id'],
{['enlace'] = 'sí', ['calificativo'] = 'P585', ['mayúscula'] = 'sí'})
premio.idPredecesor = idPredecesor
premio.idSucesor = idSucesor
-- Premio con fecha
if declaracionPremio.qualifiers and declaracionPremio.qualifiers.P585 and declaracionPremio.qualifiers.P585[1] then
premio.anyo = ModuloWikidata.formatoDato(declaracionPremio.qualifiers.P585[1],
{['enlace'] = 'no', ['formatoTexto']='mayúscula'})
end
if declaracionPremio.qualifiers and declaracionPremio.qualifiers.P1706 and declaracionPremio.qualifiers.P1706[1] then
premio.junto = ModuloWikidata.formatoDato(declaracionPremio.qualifiers.P1706[1],
{['enlace'] = 'sí', ['formatoTexto']='mayúscula'})
end
if premio.anyo and premio.junto then
premio.nombre = premio.nombre .. " (" .. premio.anyo .. ", junto con ''" .. premio.junto .. "'')"
elseif premio.anyo then
premio.nombre = premio.nombre .. " (" .. premio.anyo .. ")"
elseif premio.junto then
premio.nombre = premio.nombre .. " (junto con ''" .. premio.junto .. "'')"
end
table.insert(premios, premio)
end
end
if not premios[1] then
return
end
-- Ordenar los premios por año
ModuloTablas.ordenar(premios, {'anyo'})
-- grabar los datos obtenidos en la tabla html
local fila = tabla:tag('tr')
local celda = fila:tag('th')
celda:wikitext('Predecesor')
:css('width','30%')
:css('background-color','#FFEC80')
fila:tag('th'):wikitext("Premios de ''" .. etiquetaWikidata .. "''")
:css('background-color','#FFEC80')
:tag('th'):wikitext('Sucesor')
:css('width','30%')
:css('background-color','#FFEC80')
-- Por cada premio obtenido
local k, premio
local premioAnterior
for k,premio in pairs(premios) do
-- insertar una fila
fila = tabla:tag('tr')
-- con el predecesor (si no coincide con el del premio anterior)
if premioAnterior and premio.idPredecesor == premioAnterior.idPredecesor then
premio.celdaPredecesor = premioAnterior.celdaPredecesor
premioAnterior.celdaPredecesor.numeroFilas = premioAnterior.celdaPredecesor.numeroFilas + 1
premioAnterior.celdaPredecesor:attr('rowspan',premioAnterior.celdaPredecesor.numeroFilas)
else
premio.celdaPredecesor = fila:tag('td'):wikitext(formatoObrasAutor(premio['idPredecesor']))
premio.celdaPredecesor.numeroFilas = 1
end
--, el nombre y fecha del premio
fila:tag('td'):wikitext(premio.nombre)
-- y el sucesor (si no coincide con el del premio anterior)
if premioAnterior and premio.idSucesor == premioAnterior.idSucesor then
premio.celdaSucesor = premioAnterior.celdaSucesor
premioAnterior.celdaSucesor.numeroFilas = premioAnterior.celdaSucesor.numeroFilas + 1
premioAnterior.celdaSucesor:attr('rowspan',premioAnterior.celdaSucesor.numeroFilas)
else
premio.celdaSucesor = fila:tag('td'):wikitext(formatoObrasAutor(premio['idSucesor']))
premio.celdaSucesor.numeroFilas = 1
end
premioAnterior=premio
end
end
function obtenerCalificativo(declaracion, idCalificativo)
local valorCalificativo = elementoTabla(declaracion, 'qualifiers', idCalificativo) --declaracion.['qualifiers'][idCalificativo]
local resultado = {}
if not valorCalificativo then
return
end
for k,v in pairs(valorCalificativo) do
if v.datavalue and v.datavalue.value and v.datavalue.value['numeric-id'] then
table.insert(resultado,'Q' .. v.datavalue.value['numeric-id'])
end
end
-- Devolver una tabla con los identificadores de las entidades de Wikidata
-- si hay más de una valor. Si no, devolver el identificador.
if resultado[2] then
return resultado
elseif resultado[1] then
return resultado[1]
end
end
function formatoObraAutor(idEntidad)
local tituloObraEnlazado= ModuloWikidata.formatoIdEntidad(idEntidad,
{['enlace'] = 'sí'})
local entidadObra = mw.wikibase.getEntityObject(idEntidad)
local declaracionAutores = elementoTabla(entidadObra, 'claims', 'P50')
if declaracionAutores then
local autores = ModuloWikidata.getPropiedad({['propiedad']='P50'}, entidadObra.claims['P50'])
if autores then
return "''" .. tituloObraEnlazado .. "'' de " .. autores
end
end
return "''" .. tituloObraEnlazado .. "''"
end
function formatoObrasAutor(identificador)
local k2,v2
if not identificador then
return '-'
elseif type(identificador) == 'table' then
local titulos = {}
for k2,v2 in pairs(identificador) do
titulos[k2] = formatoObraAutor(v2)
end
if titulos[2] then
table.insert(titulos, '([[ex aequo|ex æquo]])')
end
return table.concat(titulos,'<br>')
else
return formatoObraAutor(identificador)
end
end
return z