Ir al contenido

Módulo:Sucesiones

De Wikipedia, la enciclopedia libre

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