Módulo:Ficha de canción
Este módulo no tiene página de documentación[crear]
local z = {}
local argumentos -- Tabla de argumentos con los que se llama a la función
local argumento={} -- Argumentos eliminando los argumentos sin datos
local Entidad -- Tabla con los datos en Wikidata.
-- Ver Wikidata:WikiProject Books para las propicedades posibles
local etiqueta
-- Módulos y funciones externas
local ModuloArgumentos = require('Módulo:Argumentos')
local ModuloFicha = require('Módulo:Ficha')
local ModuloIdentificadores = require('Módulo:Identificadores')
local ModuloPaginas = require('Módulo:Páginas')
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local formatoObraAnyo = ModuloWikidataFormatos.formatoObraAnyo
local ModuloWikidata = require('Module:Wikidata')
local addLinkbackWikidata = ModuloWikidata.addLinkback
local categorizarWikidata = ModuloWikidata.categorizar
local formatoIdEntidad = ModuloWikidata.formatoIdEntidad
local getPropiedadWikidata= ModuloWikidata.getPropiedad
local ModuloTablas = require('Module:Tablas')
local elementoTabla = ModuloTablas.elemento
local enTabla = ModuloTablas.en
local insertarEn = ModuloTablas.insertar
local ModuloFormatoTexto = require('Módulo:Formato texto')
local enlazarTexto = ModuloFormatoTexto.enlazar
local enVariasLineasTexto = ModuloFormatoTexto.enVariasLineas
local sinBandera = require('Módulo:Bandera').sinBandera
local ModuloURL = require('Módulo:URL')
local enlazarURL = ModuloURL.enlazar
-- Constantes
local debeExistir = {['debeExistir'] = 'sí', ['formatoTexto'] = 'mayúscula', ['linkback']='sí'}
local enMayusculas = {['formatoTexto'] = 'mayúscula', ['linkback']='sí'}
local enlazar = {['enlace']='sí', ['linkback']='sí'}
local normal = {['linkback']='sí'}
local listaNoOrdenadaEnlazada = {['enlace']='sí', ['lista'] = 'no ordenada', ['linkback']='sí'}
local colorFondo = '#E6E8FA'
function z.Ficha(frame)
-- Hacer que funcione la función formatBandera
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.id) or {}
--if true then return ModuloTablas.tostring(Entidad) end
corregirIdiomaWikidata(Entidad, 'P364') -- Obsoleto
corregirIdiomaWikidata(Entidad, 'P407')
etiquetaWikidata = obtenerEtiquetaWikidata()
Titulo = argumento['título'] or
argumento['titulo'] or
argumento['nombre'] or
etiquetaWikidata or
ModuloPaginas.nombrePagina({desambiguar='sí'})
Interprete = argumento['artista'] or argumento['grupo']
Interprete = Interprete and "[[" .. Interprete .. "]]"
Interprete = propiedad('P175') or Interprete
Tempo = argumento['tempo'] or propiedad('P1725')
--Tempo = Tempo and Tempo .. 'ppm'
Video = propiedad('P1651') and obtenerVideoYoutube(propiedad('P1651'), Titulo)
local FichaCancion = {
entidad = argumento.id,
titulo = "«" .. Titulo .. "»",
clasetitulo = 'música',
colorfondo = colorFondo,
subtitulo = Interprete and "'''[[Canción]]''' de " .. "'''" .. Interprete .. "'''",
estilosubtitulo = 'font-size:105%; background-color:#E6E8FA;',
estiloetiqueta = 'width:35%',
estilodatos = 'width:65%',
imagen = argumento['imagen'] or argumento['Imagen'] or propiedad('P18', {uno='sí'}),
['tamañoimagen']= argumento['Tamaño de imagen'] or '220px', -- FALTA {{px|{{{Tamaño de imagen}}}}}
pie = argumento['texto_imagen'] or argumento['texto imagen'] or
argumento['pie de imagen'] or argumento['Pie de imagen'],
estilopie = 'font-size:88%',
piedetabla = argumento['miscelánea'] or argumento['miscelanea'] or Video,
{'[[Álbum (música)|Álbum]]',
argumento['álbum'] or
argumento['album'] or
propiedad('P361')
},
{'Publicación', argumento['publicación'] or
argumento['publicacion'] or
propiedad('P577')
},
{'Grabación' , argumento['grabación'] or argumento['grabacion']},
{'[[Género musical|Género]]' ,
argumento['género'] or
argumento['genero'] or
argumento['estilo'] or
propiedad('P136')
},
{'Duración' , argumento['duracion'] or
argumento['duración'] or
propiedad('P2047')
},
{'[[Compañía discográfica|Discográfica]]',
argumento['discográfica'] or
argumento['discografica'] or
propiedad('P264')
},
{'[[Letrista|Escritor(es)]]',
argumento['escritor'] or
argumento['letrista'] or
propiedad('P50') or
propiedad('P676')
},
{'[[Compositor|Compositor(es)]]', argumento['compositor'] or propiedad('Q86')},
{'[[Productor discográfico|Productor(es)]]', argumento['productor'] or propiedad('P162')},
{'Director de orquesta', argumento['director'] or propiedad('P3300')},
{'[[Tonalidad (música)|Tonalidad]]', argumento['tonalidad'] or propiedad('P826')},
{'[[Tempo]]', Tempo},
{'Idioma original', argumento['idioma original'] or propiedad('P407')},
--{'País de origen', argumento['país de origen'] or
-- argumento['pais de origen'] or
-- formatoIdEntidad(propiedad('P495'),{['mayúscula'] = 'sí', ['enlace'] = 'no'})
-- },
{'Otras versiones', argumento['versiones']},
}
-- Añadir categorías si es posible
if not ModuloPaginas.sePuedeCategorizar() then
return ModuloFicha.infobox(FichaCancion)
end
local categorias = ''
-- Errores
if etiquetaWikidata and etiquetaWikidata:match('%(') then
categorias=categorias .. '[[Categoría:Wikipedia:Páginas con etiquetas de Wikidata con paréntesis]]'
end
return ModuloFicha.infobox(FichaCancion) .. categorias
end
function enlazarIdioma(idioma, mayuscula)
if not idioma then
return idioma
else
inicio, medio, fin=idioma:match('(%[[^|%]]*|)(.)(.*)')
if inicio and medio and fin then
if mayuscula == 'sí' then
return inicio .. medio:upper() .. fin
else
return inicio .. medio:lower() .. fin
end
end
if idioma:find('%[') then
return idioma
end
idioma= idioma:lower()
if mayuscula == 'sí' then
return '[[idioma ' .. idioma .. '|' .. idioma:gsub("%a", string.upper,1) .. ']]'
else
return '[[idioma ' .. idioma .. '|' .. idioma .. ']]'
end
end
end
-- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados
function propiedad(idPropiedad,opciones)
if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
if not opciones then
opciones = normal
end
opciones.entityId = Entidad.id
opciones.propiedad = idPropiedad
valorPropiedad = getPropiedadWikidata(opciones,Entidad.claims[idPropiedad])
return valorPropiedad
end
end
-- Formatear una tabla de identificadores de entidades de Wikidata
function formatear(identificadores)
local identificadoresFormateados = {}
local primero = true
for k,v in pairs(identificadores) do
if primero then
table.insert(identificadoresFormateados, formatoIdEntidad(v,{['mayúscula'] = 'sí', ['enlace'] = 'sí'}))
primero = false
else
table.insert(identificadoresFormateados, formatoIdEntidad(v, {['mayúscula'] = 'no', ['enlace'] = 'sí'}))
end
end
-- No devolver nada si la lista no tiene elementos
if not primero then
return mw.text.listToText(identificadoresFormateados)
end
end
function obtenerEtiquetaWikidata()
if Entidad and Entidad.labels and Entidad.labels.es then
return Entidad.labels.es.value
end
end
function corregirIdiomaWikidata(entidad, idPropiedad)
if not entidad or not idPropiedad then
return
end
local declaracion= elementoTabla(entidad, 'claims', idPropiedad)
local idIdioma
if not declaracion then
return
end
for k,v in pairs(declaracion) do
idIdioma=elementoTabla(v,'mainsnak','datavalue','value','id')
if idIdioma == 'Q7979' or -- inglés británico
idIdioma == 'Q44676' or -- inglés canadiense
idIdioma == 'Q7976' or -- inglés estadounidense
idIdioma == 'Q665624' then -- inglés en Irlanda
v.mainsnak.datavalue.value.id='Q1860'
v.mainsnak.datavalue.value['numeric-id']=1860
end
end
end
function obtenerVideoYoutube(id, titulo)
HTMLVideo = '<tr style="text-align:center;"><th colspan="3" style="background: ' .. colorFondo .. '">[[Videoclip]]</th></tr><tr style="text-align:center;"><td colspan="3">' .. enlazarURL('https://www.youtube.com/watch?v=' .. id, titulo) .. ' en [[Youtube]].</td></tr>'
return HTMLVideo
end
return z