Ir al contenido

Módulo:Zona de pruebas/Agabi10/Ficha de anime y manga

De Wikipedia, la enciclopedia libre
Este módulo no tiene página de documentación[crear]
local z = {}
local argumentos
local argumento = {}
local Entidad

local algumaPropiedadEnlazaWikidata = false

-- Módulos utilizados
local ModuloArgumentos       = require('Módulo:Argumentos')
local ModuloFicha            = require('Módulo:Ficha')
local ModuloFormatoTexto     = require('Módulo:Formato texto')
local ModuloIdentificadores  = require('Módulo:Identificadores')
local ModuloPaginas          = require('Módulo:Páginas')
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos')	
local ModuloWikidata         = require('Módulo:Wikidata')
local ModuloTablas           = require('Módulo:Tablas')
local ModuloURL              = require('Módulo:URL')

-- Constantes
local enMayusculas    = {['formatoTexto'] = 'mayúscula'}
local enMayusculasO   = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o '}
local listaNoOrdenada = {['lista'] = 'no ordenada'} --, ['debeExistir'] = 'sí'
local lugar           = {['conjunción']=' o ', ['valor-función'] = ModuloWikidataFormatos.formatoLugar}
local debeExistir     = {['debeExistir'] = 'sí'}
local conPeriodo      = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo}

-- Estilos de ficha
local estilotitulo = 'background:#ccccff;font-size:120%;font-weight:bolder;height:45px;line-height:1.2em;vertical-align:middle'
local estiloseccion = 'background:#ccccff;font-weight:bold;vertical-align:middle'

function z.Ficha(frame)
    --  Hacer que funcione la función formatBandera	 y formatoGentilicio
    ModuloWikidata:setFrame(frame)  -- No funciona si se pone ModuloWikidata.setFrame(marco)    
    
    -- Obtener una copia de los argumentos eliminando los argumentos sin valor
    local argumento = ModuloArgumentos.obtenerArgumentosConValor(frame)
    
    -- Obtener los datos de la página donde se inserta la ficha de Wikidata.
    Entidad = mw.wikibase.getEntityObject(argumento['entidad'] or nil) or {}
    
    --if true then
    --	return ModuloTablas.tostring(Entidad)
    --end
    
    local componentes = obtenerEntidadesEnPropiedad('P527')
    
    local Ficha = {
    	entidad = argumento['entidad'],
		estilotitulo = estilotitulo,
		['titulo'] = argumento['título'] or obtenerEtiquetaWikidata() or mw.title.getCurrentTitle().text,
		
		imagen          = argumento['imagen']  or argumento['Imagen'] or 
                          argumento['foto']    or 
                          propiedad('P18', {uno='sí'}),
        {'', propiedad('P1476'), estilodatos = 'background:#ddddff;font-size:95%'},
        {'Género', propiedad('P136', {['formatoTexto'] = 'mayúscula'})},
        
        generarSubfichas(componentes),
        
        {'', propiedad('P856') and '['..propiedad('P856')..' Sitio web oficial]', estilodatos = estiloseccion}
	}
    
    local categorias = ''
    
    return ModuloFicha.infobox(Ficha) .. categorias
   
end

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

function propiedad(idPropiedad,opciones,entidad)
    entidad = entidad or Entidad
    if entidad and entidad.claims and entidad.claims[idPropiedad] then
    	if not opciones then
    		opciones = {}
    	end
    	opciones['propiedad'] = idPropiedad

        valorPropiedad = ModuloWikidata.getPropiedad(opciones,entidad.claims[idPropiedad])

        if valorPropiedad and valorPropiedad:match('%[%[:d:') then
          algunaPropiedadEnlazaWikidata = true
        end

    	return valorPropiedad
    end
end

function generarSubfichas(componentes)
	
	ModuloTablas.tostring(componentes)
	
	local subfichas = { tipo = 'sección' }
	
	for clave,valor in pairs(componentes) do
		
		animeNewsNetworkID = propiedad('P1985', {}, valor)
		animeNewsNetwork = animeNewsNetworkID and '\'\'<span class="plainlinks">[http://www.animenewsnetwork.com/encyclopedia/anime.php?id=' .. 
				animeNewsNetworkID .. ' Ficha]</span> en [[Anime News Network]]\'\''
	
		if valor then
			--return { tipo = 'sección', {'', require("Módulo:Tablas").tostring(valor)}}
		end
	
		table.insert(subfichas, { tipo = 'sección',
			['titulo'] = propiedad('P31', {['formatoTexto'] = 'mayúscula'}, valor) .. 
				'<span style="float:right;font-weight:normal"><span>[</span>[[:d:' .. valor['id'] .. '|Editar]]<span>]</span></span>',
			estilotitulo = estiloseccion,
			{'Director', propiedad('P57', {}, valor)},
			{'Cadena televisiva', propiedad('P449', {}, valor)},
			{'Primera emisión', propiedad('P580', {}, valor)},
			{'Última emisión', propiedad('P582', {}, valor)},
			{'Episodios', propiedad('P1113', {}, valor)},
			{'', animeNewsNetwork}
		})
		
	end
	
	return subfichas
end

function obtenerEntidadesEnPropiedad(idPropiedad)
	local entidades = {}
	local componentes = Entidad and Entidad.claims and Entidad.claims[idPropiedad]
	
	if componentes then
		for k,v in pairs(componentes) do
			local value = v and v.mainsnak and v.mainsnak.datavalue and v.mainsnak.datavalue.value or {}
			if value and value['numeric-id'] then
				entidades[k] = mw.wikibase.getEntityObject('Q' .. value['numeric-id'])
			end
		end
	end

	return entidades
end

return z