Módulu:Ficha de llibru
Apariencia
La documentación pa esti módulu pue crease en Módulu:Ficha de llibru/usu
local z = {}
local argumentos -- Tabla d'argumentos colos que se llama a la función
local argumento={} -- Argumentos eliminando los argumentos ensin datos
local Entidad -- Tabla colos datos en Wikidata del llibru.
-- Ver Wikidata:WikiProject Books pa les propiedaes posibles
local etiquetaWikidata
-- Módulos y funciones esternes
local ModuloArgumentos = require('Módulu:Argumentos')
local ModuloFicha = require('Módulu:Ficha')
local ModuloIdentificadores = require('Módulu:Identificadores')
local ModuloPaginas = require('Módulu:Páxines')
local ModuloWikidataFormatos = require('Módulu:Wikidata/Formatos')
local formatoObraAnyo = ModuloWikidataFormatos.formatoObraAnyo
local formatoPremio = ModuloWikidataFormatos.formatoPremio
local ModuloWikidata = require('Módulu:Wikidata')
local addLinkbackWikidata = ModuloWikidata.addLinkback
local categorizarWikidata = ModuloWikidata.categorizar
local formatoIdEntidad = ModuloWikidata.formatoIdEntidad
local getPropiedadWikidata= ModuloWikidata.getPropiedad
local ModuloTablas = require('Módulu:Tables')
local elementoTabla = ModuloTablas.elemento
local insertarEn = ModuloTablas.insertar
local enlazarTexto = require('Módulu:Formatu testu').enlazar
local sinBandera = require('Módulu:Bandera').sinBandera
-- Constantes
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 categoriasGenerosNovelas = {
[3056541] = 'Noveles autobiográfiques'
,[4184 ] = 'Noveles autobiográfiques' --autobiografía
,[908667 ] = 'Noveles béliques'
,[4914883] = 'Noveles biográfiques'
,[174526 ] = 'Noveles ciberpunk'
,[26228231] = 'Noveles ciberpunk' -- novela ciberpunk
,[1077883] = 'Noveles ciberpunk' -- biopunk
,[26228228] = 'Noveles ciberpunk' -- novela biopunk
,[1341831] = 'Noveles ciberpunk' -- postciberpunk
,[27022710] = 'Noveles ciberpunk' -- novela postciberpunk
,[223945 ] = 'Noveles d\'aprendizaxe'
,[319226 ] = 'Noveles d\'aventures'
,[1436734] = 'Noveles d\'aventures' -- aventura. FALTA correxir l'enllaz pa qu'enllace a novela d'aventures.
,[24925 ] = 'Noveles de ciencia ficción'
,[12132683]= 'Noveles de ciencia ficción'
,[905770 ] = 'Noveles de ciencia ficción' -- ciencia ficción blanda
,[725757 ] = 'Ciencia ficción dura' -- ciencia ficción dura
,[2435402] = 'Noveles de ciencia ficción feministes' -- ciencia ficción feminista
,[2561390] = 'Noveles d\'humor'
,[40831 ] = 'Noveles d\'humor' -- Comedia
,[6585139] = 'Noveles de misteriu'
,[182015 ] = 'Noveles d\'intriga'
,[193606 ] = 'Noveles de terror'
,[20667180] = 'Noveles de terror' -- novela de terror
,[1425557] = 'Noveles de vampiros'
,[10453828] = 'Noveles de viaxes nel tiempu'-- novela de viaxes nel tiempu
,[253732 ] = 'Noveles de viaxes nel tiempu' -- Viaxe nel tiempu na ficción
,[182154 ] = 'Noveles de viaxes nel tiempu' -- Viaxe al traviés del tiempu
,[180774 ] = 'Noveles distópiques' -- Distopía
,[20443047] = 'Noveles distópiques' -- literatura distópica
,[26928598 ] = 'Noveles distópiques' -- novela distópica
,[25372 ] = 'Noveles dramátiques'
,[465821 ] = 'Noveles epistolares'
,[747483 ] = 'Noveles erótiques' -- lliteratura erótica
,[11452132 ] = 'Noveles erótiques' -- novela erótica
,[1426213] = 'Noveles d\'espionaxe'
,[11825887]= 'Noveles fantástiques' -- novela fantástica
,[10992055]= 'Noveles fantástiques' -- novela fantástica
,[132311 ] = 'Noveles fantástiques' -- Xéneru fantásticu
,[1057172] = 'Noveles fantástiques' -- Lliteratura fantástica
,[603291 ] = 'Noveles fantástiques' -- fantasía histórica
,[794912 ] = 'Noveles fantástiques' -- dark fantasy/fantasía escura
,[2016518] = 'Noveles filosófiques'
,[20669641]= 'Noveles gótiques' -- Ficción gótica
,[192782 ] = 'Noveles gótiques' -- Narrativa gótica
,[276709 ] = 'Noveles gótiques' -- Góticu sureñu
,[1196408] = 'Noveles históriques' -- Ficción histórica
,[192239 ] = 'Noveles históriques'
,[131539] = 'Obres infantiles' -- Lliteratura infantil
,[11825892] = 'Noveles xuveniles' -- novela xuvenil
,[1233720] = 'Noveles xuveniles' -- Lliteratura xuvenil
,[1940294] = 'Novela negra'
,[1619888] = 'Noveles pastoriles'
,[208505 ] = 'Noveles policíaques'
,[186424 ] = 'Noveles policíaques' -- El detective de ficción
,[113013 ] = 'Noveles posmodernes' -- Lliteratura posmoderna
,[286328 ] = 'Noveles sicolóxiques'
,[147516] = 'Noveles de realismu máxicu'
,[858330 ] = 'Noveles romántiques'
,[6045975] = 'Noveles satíriques' -- novela satírica
,[128758 ] = 'Noveles satíriques' -- Sátira
,[7225114] = 'Noveles satíriques' -- Sátira política
,[223685] = 'Noveles steampunk' -- steampunk
,[27020789] = 'Noveles steampunk' -- novela steampunk
,[3440959] = 'Noveles d\'intriga' -- Novela d'intriga
,[590103] = 'Noveles d\'intriga sicolóxica' -- thriller sicolóxicu
,[580850 ] = 'Noveles tecno-thriller' -- tecno-thriller
,[224989 ] = 'Noveles ucróniques'
,[16681629 ] = 'Noveles ucróniques' --literatura ucrónica
,[26225470 ] = 'Noveles ucróniques' --Novela ucrónica
}
local categoriasGeneros = {
[693 ] = 'Fábules'
, [1072723] = 'Llibros de viaxes' -- lliteratura de viaxes
, [1164267] = 'Llibros de viaxes' -- llibru de viaxes
, [131539 ] = 'Obres infantiles' -- lliteratura infantil
, [995600 ] = 'Llibros de divulgación científica' -- divulgación científica
}
local tablaGeneros={ -- Tabla de xéneros sacante los subxéneros.
'Q8261' -- Novela
, 'Q149537' -- Novela curtia
--, 'Q482' -- Poesía
, 'Q49084' -- Cuentu
, 'Q25379' -- Obra de teatru
, 'Q1279564' -- coleición de cuentos
}
local categoriasTemasNovelas = {
[2763] = 'Noveles sobre l\'Holocaustu'
, [180046] = 'Noveles d\'esploración espacial' -- esploración espacial
, [362 ] = 'Noveles de la Segunda Guerra Mundial' -- Segunda Guerra Mundial
, [10453828] = 'Noveles de viaxes nel tiempu'-- novela de viaxes nel tiempu
, [253732] = 'Noveles de viaxes nel tiempu' --viaxe nel tiempu na ficción
, [182154] = 'Noveles de viaxes nel tiempu' --viaxe al traviés del tiempu
, [10859 ] = 'Noveles sobro la Guerra Civil Española'
}
function z.Ficha(frame)
-- Facer que funcione la función formatBandera
ModuloWikidata:setFrame(frame) -- Nun funciona si se pon ModuloWikidata.setFrame(marco)
--Obtener una copia de los argumentos desaniciando los argumentos ensin valor
local argumento = ModuloArgumentos.obtenerArgumentosConValor(frame)
-- Obtener los datos de la páxina onde s'inxer la ficha de Wikidata.
Entidad = mw.wikibase.getEntityObject(argumento.id) or {}
--if true then
-- return ModuloTablas.tostring(Entidad)
--end
corregirIdiomaWikidata(Entidad, 'P364')
local generoWikidata, subgeneroWikidata, temaWikidata = obtenerGeneroWikidata()
if generoWikidata then
genero = generoWikidata
subgenero = subgeneroWikidata
else
genero = argumento['xéneru'] or
argumento['xeneru'] or
argumento['Xéneru']
subgenero = argumento['subxéneru'] or
argumento['subxeneru'] or
argumento['Subxéneru']
end
if not genero then
ColorFondo = 'LightSteelBlue'
ColorFondo2 = '#d8e2ee'
elseif genero:find('[Rr]ellatu') or
genero:find('[Cc]uentu') or
genero:find('[Ll]leenda') or
genero:find('[Aa]ntoloxía') then
ColorFondo = 'LightSalmon'
ColorFondo2 = '#f9d9cb'
elseif genero:find('didáuticu') or
genero:find('[Ee]nsayu') or
genero:find('[Dd]ivulgación') or
genero:find('[Cc]rítica') or
genero:find('[Tt]ratáu') or
genero:find('[Cc]rónica') then
ColorFondo = 'NavajoWhite'
ColorFondo2 = '#FBE7C9'
elseif genero:find('[Pp]oesía') or
genero:find('[Ee]popeya') or
genero:find('[Ll]líricu') or genero:find('[Ll]lírica') or
genero:find('[Pp]oema') then
ColorFondo = 'darkseagreen'
ColorFondo2 = '#afdeaf'
else
ColorFondo = 'LightSteelBlue'
ColorFondo2 = '#d8e2ee'
end
Autor = propiedad('P50',{['enlace']='sí',
['calificativo'] = 'P742' -- seudónimu
, ['linkback']='sí'
}) or
argumento['autor'] or
argumento['autores'] or
argumento['Autor'] or
argumento['Autores']
if Autor and argumento['Acotaciones al autor'] then
Autor = Autor .. '<br /><small>' .. argumento['Acotaciones al autor'] .. '</small>'
end
if argumento['publicación orixinal'] or argumento['triba orixinal'] or
argumento['triba de publicación orixinal'] or argumento['editorial orixinal'] or
argumento['ilustrador orixinal'] or argumento['ciudá orixinal'] or
argumento['país orixinal'] or argumento['data orixinal'] or
argumento['formatu orixinal'] or argumento['páxines orixinal'] or
argumento['isbn orixinal'] or
argumento['Añu orixinal'] or argumento['Añu de publicación orixinal'] or
argumento['Ilustrador orixinal'] or argumento['Ilustrador de la publicación orixinal'] or
argumento['Artista de cubierta orixinal'] or argumento['Artista de cubierta de la publicación orixinal'] or
argumento['Editorial orixinal'] or argumento['Editorial de publicación orixinal'] or
argumento['Ciudá orixinal'] or argumento['Ciudá de publicación orixinal'] or
argumento['País orixinal'] or argumento['País de publicación orixinal'] or
argumento['ISBN orixinal'] or
argumento['OCLC orixinal'] or
argumento['Formatu orixinal'] or
argumento['Númberu de páxines orixinal']
then
EdicionOriginal = true
end
if argumento['Títulu traducción'] or argumento['Títulu de la traducción'] or
argumento['Añu traducción'] or argumento['Añu de publicación de la traducción'] or
argumento['Traductor'] or argumento['traductor'] or
argumento['Ilustrador traducción'] or argumento['Ilustrador de la traducción'] or
argumento['Artista de cubierta traducción'] or argumento['Artista de cubierta de la traducción'] or
argumento['Editorial traducción'] or argumento['Editorial de la traducción'] or
argumento['Ciudá traducción'] or argumento['Ciudá de publicación de la traducción'] or
argumento['País traducción'] or argumento['País de publicación de la traducción'] or
argumento['ISBN traducción'] or argumento['ISBN de la traducción'] or
argumento['OCLC traducción'] or
argumento['Formatu traducción'] or argumento['Formatu de la traducción'] or
argumento['Númberu de páxines traducción'] or argumento['Númberu de páxines de la traducción']
then
EdicionTraduccion = true
end
if EdicionOriginal or EdicionTraduccion then
IdiomaOriginal = propiedad('P364',{['enlace']='sí', ['linkback']='sí'}) or
enlazarIdioma(
argumento['llingua'] or
argumento['idioma'] or
argumento['llingua orixinal'] or
argumento['Llingua orixinal'] or
argumento['idioma orixinal'] or
argumento['Idioma orixinal'], 'no')
IlustradorOriginal = propiedad('P110',enlazar) or
argumento['ilustrador orixinal'] or
argumento['Ilustrador orixinal'] or
argumento['Ilustrador de la publicación orixinal']
ArtistaOriginal = propiedad('P736',enlazar) or
argumento['artista orixinal'] or
argumento['Artista de cubierta orixinal'] or
argumento['Artista de cubierta de la publicación orixinal']
PublicacionOriginal = propiedad('P1433',enlazar) or
argumento['Publicación orixinal'] or
argumento['publicación orixinal']
TipoPublicacionOriginal = argumento['Triba de publicación orixinal'] or
argumento['triba de publicación orixinal'] or
argumento['triba orixinal']
EditorialOriginal = propiedad('P123',listaNoOrdenadaEnlazada) or
argumento['editorial orixinal'] or
argumento['Editorial orixinal'] or
argumento['Editorial de publicación orixinal']
LugarPublicacionOriginal = propiedad('P291') or
argumento['ciudá orixinal'] or
argumento['Ciudá orixinal'] or
argumento['Ciudá de publicación orixinal']
PaisOriginal = propiedad('P495') or
sinBandera(argumento['país orixinal'] or
argumento['País orixinal'] or
argumento['País de publicación orixinal'])
AnyoOriginal = argumento['Añu orixinal'] or
argumento['Añu de publicación orixinal']
FechaOriginal = propiedad('P577', enMayusculas) or
argumento['Data orixinal'] or
argumento['Data orixinal'] or
enlazarTexto(AnyoOriginal)
FormatoOriginal = propiedad('P437', enMayusculas) or -- Distribución (cartoné, etc)
argumento['formatu orixinal'] or
argumento['Formatu orixinal']
PaginasOriginal = propiedad('P1104') or
argumento['páxines orixinal'] or
argumento['Númberu de páxines orixinal']
ISBNOriginal = propiedad('P957',{
['valor-función'] = ModuloIdentificadores.enlazarISBN,
['calificativo'] = 'P437', -- distribución
['linkback']='sí',
}) or
propiedad('P212',{
['valor-función'] = ModuloIdentificadores.enlazarISBN,
['calificativo'] = 'P437', -- distribución
['linkback']='sí',
}) or
ModuloIdentificadores.enlazarISBN(
argumento['isbn orixinal'] or
argumento['ISBN orixinal'])
OCLCOriginal = propiedad('P243',{['valor-función'] = ModuloIdentificadores.enlazarOCLC,['linkback']='sí'}) or
ModuloIdentificadores.enlazarOCLC(
argumento['oclc orixinal'] or
argumento['OCLC orixinal'])
PremiosOriginal = propiedad('P166', {
['lista'] = 'no ordenada',
['valor-función'] = formatoPremio,
['calificativo'] = 'P585', -- Data d'ocurrencia
['enlace'] = 'sí',
['ordenar'] = 'por fecha',
['linkback']='sí'}) or
argumento['Premios'] or
argumento['premios']
Artista = argumento['artista_cubierta'] or
argumento['artista'] or
argumento['Artista de cubierta traducción'] or
argumento['Artista de cubierta de la traducción']
Ilustrador = argumento['ilustrador'] or
argumento['Ilustrador traducción'] or
argumento['Ilustrador de la traducción']
Editorial = argumento['editorial'] or
argumento['Editorial traducción'] or
argumento['Editorial de la traducción']
LugarPublicacion = argumento['ciudá'] or
argumento['Ciudá traducción'] or
argumento['Ciudá de publicación de la traducción']
Publicacion = argumento['publicación']
Pais = sinBandera(argumento['país'] or
argumento['pais'] or
argumento['País traducción'] or
argumento['País de publicación de la traducción'])
Fecha = argumento['data_publicación'] or
argumento['data publicacion'] or
argumento['data'] or
enlazarTexto(
argumento['Añu traducción'] or
argumento['Añu de publicación de la traducción'])
Paginas = argumento['páxines'] or
argumento['Númberu de páxines traducción'] or
argumento['Númberu de páxines de la traducción']
ISBN = ModuloIdentificadores.enlazarISBN(
argumento['isbn'] or
argumento['ISBN traducción'] or
argumento['ISBN de la traducción'])
OCLC = ModuloIdentificadores.enlazarOCLC(
argumento['oclc'] or
argumento['OCLC traducción'])
if IdiomaOriginal then
if IdiomaOriginal:find('[Aa]sturianu') then
WikisourceOriginal = obtenerWikisource('asturianu')
else
WikisourceOriginal = obtenerWikisource(IdiomaOriginal)
Wikisource = obtenerWikisource('asturianu')
end
end
else
IdiomaOriginal = propiedad('P364',enMayusculas) or
enlazarIdioma(argumento['llingua'] or
argumento['idioma'] or
argumento['llingua orixinal'] or
argumento['idioma orixinal'], 'sí')
Artista = propiedad('P736',enlazar) or
argumento['artista_cubierta'] or
argumento['artista']
Ilustrador = propiedad('P110',enlazar) or argumento['ilustrador']
Editorial = propiedad('P123',listaNoOrdenadaEnlazada) or argumento['editorial']
LugarPublicacion = propiedad('P291',enlazar) or argumento['ciudá']
Publicacion = propiedad('P1433',enlazar) or argumento['publicación']
Pais = propiedad('P495') or
sinBandera(argumento['país'] or argumento['pais'])
Fecha = propiedad('P577', enMayusculas) or argumento['data_publicación'] or
argumento['data publicacion'] or
argumento['data']
Formato = propiedad('P437', enMayusculas) or -- Distribución (cartoné, etc)
argumento['formatu'] or
argumento['triba_media'] or
argumento['Formatu traducción'] or
argumento['Formatu de la traducción']
Paginas = propiedad('P1104') or argumento['páxines'] or argumento['paxines']
ISBN = propiedad('P957',{
['valor-función'] = ModuloIdentificadores.enlazarISBN,
['calificativo'] = 'P437', -- distribución
['linkback']='sí',
}) or
propiedad('P212',{
['valor-función'] = ModuloIdentificadores.enlazarISBN,
['calificativo'] = 'P437', -- distribución
['linkback']='sí',
}) or
ModuloIdentificadores.enlazarISBN(argumento['isbn'])
OCLC = propiedad('P243',{['valor-función'] = ModuloIdentificadores.enlazarOCLC,['linkback']='sí'}) or
ModuloIdentificadores.enlazarOCLC(argumento['oclc'])
Premios = propiedad('P166', {
['lista'] = 'no ordenada',
['valor-función'] = formatoPremio,
['calificativo'] = 'P585', -- Data d'ocurrencia
['enlace'] = 'sí',
['ordenar'] = 'por fecha',
['linkback']='sí'}) or
argumento['premios']
if IdiomaOriginal and IdiomaOriginal:find('[As]turianu') then
-- Llibru n'asturianu
Wikisource = obtenerWikisource('asturianu')
elseif IdiomaOriginal then
-- Llibro non n'asturianu ensin datos de la edición n'asturianu
WikisourceOriginal = obtenerWikisource(IdiomaOriginal)
Wikisource = obtenerWikisource('asturianu')
end
end
-- Titulu --> Títulu del llibro n'asturianu
-- TituluOrixinal --> Títulu orixinal del llibru si nun ta n'asturianu
etiquetaWikidata = obtenerEtiquetaWikidata()
if IdiomaOriginal and IdiomaOriginal:find('[Aa]sturianu') then
--Llibru escritu n'asturianu
Titulo = propiedad('P1476') or
propiedad('P357') or -- Obsoletu pero entá s'usa
etiquetaWikidata or
argumento['títulu orixinal'] or
argumento['títulu_orix'] or
argumento['titulu_orix'] or
argumento['títulu orix'] or
argumento['Títulu orixinal'] or
argumento['títulu'] or
argumento['Títulu'] or
argumento['nome'] or
ModuloPaginas.nomePaxina({desambiguar='sí'})
else
--Libru non escritu n'asturianu
-- o del que se desconoz la llingua
TituloOriginal = propiedad('P1476') or
propiedad('P357') or
argumento['títulu orixinal'] or
argumento['títulu_orix'] or
argumento['titulu_orix'] or
argumento['títulu orix'] or
argumento['Títulu orixinal']
Titulo = etiquetaWikidata or
argumento['Títulu traducción'] or
argumento['Títulu de la traducción'] or
argumento['títulu'] or
argumento['Títulu'] or
argumento['nome'] or
ModuloPaginas.nomePaxina({desambiguar='sí'})
end
local FichaLibro = {
entidad = argumento.id,
titulo = Titulo,
clasetitulo = 'llibru',
estilotitulo = 'background-color:' .. ColorFondo .. '; color:#000; font-style:italic',
subtitulo = Autor and '<small>de</small> ' .. "'''" .. Autor .. "'''",
estilosubtitulo = 'font-size:105%; background-color:' .. ColorFondo2 .. ';',
estiloseccion = 'background-color:' .. ColorFondo .. '; color:#000;',
estiloetiqueta = 'width:35%',
estilodatos = 'width:65%',
imagen = argumento['imaxe'] or argumento['Imaxe'] or propiedad('P18', {uno='sí'}),
['tamañoimagen']= argumento['Tamañu d\'imaxe'] or '220px', -- FALTA {{px|{{{Tamaño de imagen}}}}}
pie = argumento['testu_imaxe'] or argumento['testu imaxe'] or
argumento['pie d\'imaxe'] or argumento['Pie d\'imaxe'],
estilopie = 'font-size:88%',
{'Editor(es)', propiedad('P98') or
argumento['Editor'] or
argumento['editor'] or
argumento['Editores'] or
argumento['editores']
},
{'Fotografía', argumento['Fotografía'] or
argumento['fotografía']},
{'Xéneru' , genero},
{'Subxéneru' , subgenero},
{'Tema(es)' , temaWikidata or
argumento['tema'] or
argumento['Tema']
},
{'Ambientada en', propiedad('P840', enMayusculas)},
{tipo='sección',
-- El títulu de la seición solo s'amuesa si hai datos de les dos ediciones.
titulo = (EdicionOriginal or EdicionTraduccion) and IdiomaOriginal and 'Edición orixinal en ' .. IdiomaOriginal,
{'Llingua', not EdicionOriginal and not EdicionTraduccion and IdiomaOriginal},
{'Títulu orixinal' , TituloOriginal,
estilodatos='font-style:italic'},
{'Ilustrador', IlustradorOriginal}, -- FALTA si enllazar
{'Cubierta' , ArtistaOriginal},
{'Publicáu en' , PublicacionOriginal
, estilodatos='font-style:italic'},
{'Triba de publicación', TipoPublicacionOriginal},
{'Editorial' , EditorialOriginal, clase='plainlist'},
{'Ciudá' , LugarPublicacionOriginal},
{'País' , PaisOriginal},
{'Data de publicación' , FechaOriginal},
{'Formatu' , FormatoOriginal},
{'Páxines' , PaginasOriginal},
{'[[ISBN]]' , ISBNOriginal},
{'[[Online Computer Library Center|OCLC]]', OCLCOriginal},
{'Premios' , PremiosOriginal, clase='plainlist'},
{'Testu orixinal' , WikisourceOriginal}
},
{tipo='sección',
-- El títulu de la seición solo s'amuesa si hai datos de les dos ediciones.
titulo = (EdicionOriginal or EdicionTraduccion) and 'Edición traducida al [[llingua asturiana|asturianu]]',
{'Traducíu por' , argumento['traductor'] or argumento['Traductor']},
{'Adaptación' , argumento['adaptación'] or
argumento['adaptador']},
{'Ilustrador' , Ilustrador},
{'Artista de la cubierta', Artista},
{'Publicáu en' , Publicacion
, estilodatos='font-style:italic'},
{'Triba de publicación' , argumento['triba de publicación'] or
argumento['triba']},
{'Editorial', Editorial, clase='plainlist'},
{'Ciudá' , LugarPublicacion},
{'País' , Pais},
{'Data de publicación', Fecha},
{'Formatu' , Formato},
{'Páxines' , Paginas},
--{'Tamañu y pesu', argumento['tamanu_pesu']}, -- Usar los parámetros pal formatu
{'[[ISBN]]', ISBN},
{'[[Online Computer Library Center|OCLC]]', OCLC},
{'Premios' , Premios, clase='plainlist'},
{'Testu n\'asturianu' , Wikisource}
},
{tipo='sección',
titulo = 'Llibros',
{'',propiedad('P527',{['enlace']='sí', ['lista'] = 'no ordenada', ['valor-función'] = formatoObraAnyo,}), clase='plainlist'}
}
}
-- Series de llibros
if Entidad and Entidad.claims and Entidad.claims.P179 and Entidad.claims.P179[1] then
declaracionSerie1 = Entidad.claims.P179[1]
tituloSerie = "''" .. formatoIdEntidad('Q' .. declaracionSerie1.mainsnak.datavalue.value['numeric-id'],
{['enlace'] = 'sí'}) .. "''"
if declaracionSerie1.qualifiers and declaracionSerie1.qualifiers.P155 and declaracionSerie1.qualifiers.P155[1] and declaracionSerie1.qualifiers.P155[1].datavalue then
precedidaPor = formatoIdEntidad('Q' .. declaracionSerie1.qualifiers.P155[1].datavalue.value['numeric-id'],
{['enlace'] = 'sí'})
end
if declaracionSerie1.qualifiers and declaracionSerie1.qualifiers.P156 and declaracionSerie1.qualifiers.P156[1] and declaracionSerie1.qualifiers.P156[1].snaktype == 'value' then
sucedidaPor = formatoIdEntidad('Q' .. declaracionSerie1.qualifiers.P156[1].datavalue.value['numeric-id'],
{['enlace'] = 'sí'})
end
if precedidaPor or sucedidaPor then
serieConCualificador = true
table.insert(FichaLibro,
{tipo = 'sección',
titulo = tituloSerie,
{tipo = 'sucesión',
anterior = precedidaPor,
siguiente = sucedidaPor,
color = ColorFondo2,
['estilo fuente'] = 'italic'
}
}
)
end
end
if not serieConCualificador then
table.insert(FichaLibro,
{tipo='sección',
titulo = propiedad('P179',{['formatoTexto'] = 'cursivas',['enlace']='sí'}) or
argumento['serie'] or
argumento['Serie de llibros'] or
'Serie',
{tipo = 'sucesión',
anterior = propiedad('P155',enlazar) or
argumento['precedíu_por'] or -- FALTA ver El Mago de la Serpiente
argumento['anterior'] or
argumento['Llibro que-y precede'] or
argumento['Llibro que-y precede na serie']
,
siguiente = propiedad('P156',enlazar) or
argumento['siguíu_por'] or
argumento['posterior'] or
argumento['siguiente'] or
argumento['Llibru que-y sigue'] or
argumento['Llibru que-y sigue na serie']
,
color = ColorFondo2,
['estilo fuente'] = 'italic'
}
}
)
end
table.insert(FichaLibro,
{tipo='sección',
titulo = argumento['Serie de llibros 2'] or
'Serie',
{tipo = 'sucesión',
anterior = argumento['Llibru que-y precede 2'] or
argumento['Llibru que-y precede na serie 2'],
siguiente = argumento['Llibru que-y sigue 2'] or
argumento['Llibru que-y sigue na serie 2'],
color = ColorFondo2,
['estilo fuente'] = 'italic'
}
}
)
table.insert(FichaLibro,
{tipo='sección',
titulo = argumento['Autor'] and 'Cronoloxía de ' .. argumento['Autor'],
{tipo = 'sucesión',
anterior = argumento['Llibru anterior'] or
argumento['Llibru que-y precede na cronoloxía'],
siguiente = argumento['Llibru posterior'] or
argumento['Llibru que-y sigue na cronoloxía'],
['año anterior'] = argumento['Añu anterior'] or argumento['Añu del llibru que-y precede na cronoloxía'],
['añu'] = AnyoOriginal,
['año siguiente'] = argumento['Añu posterior'] or argumento['Añu del llibru que-y sigue na cronoloxía'],
color = ColorFondo2,
['estilo fuente'] = 'italic'
}
}
)
-- Amestar categoríes si ye dable
if not ModuloPaginas.sePuedeCategorizar() then
return ModuloFicha.infobox(FichaLibro)
end
local categorias = ''
-- Fallos
if etiquetaWikidata and etiquetaWikidata:match('%(') then
categorias=categorias .. '[[Categoría:Wikipedia:Páxines con etiquetes de Wikidata con paréntesis]]'
end
-- Xéneros
local categoriasGeneros = {}
if Entidad and Entidad.claims then
if generoWikidata then
if generoWikidata:find('[Cc]uento') then
-- Cuentos del autor
table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Cuentos de $1'},Entidad.claims['P50']))
-- Cuentos d'un añu
table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Cuentos de $1', ['formatoFecha']='añu'},Entidad.claims['P577']))
-- Cuentos d'un país
table.insert(categoriasGeneros, categorizarWikidata(
{['categoría'] = 'Cuentos de $1'
},Entidad.claims['P495']))
-- Pendiente si categorizar pola llingua.
if subgeneroWikidata then
if subgeneroWikidata:find('[Cc]iencia ficción') then
table.insert(categoriasGeneros, '[[Categoría:Cuentos de ciencia ficción]]')
end
if subgeneroWikidata:find('[Ff]antástica') or subgeneroWikidata:find('[Ff]antasía') then
table.insert(categoriasGeneros, '[[Categoría:Cuentos fantásticos]]')
end
if subgeneroWikidata:find('[Hh]orror') or subgeneroWikidata:find('[Tt]error') then
table.insert(categoriasGeneros, '[[Categoría:Cuentos de terror]]')
end
end
end
if generoWikidata:find('[Tt]eatru') then
-- Obres de teatru por autor
table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Obres de teatru de $1'},Entidad.claims['P50']))
-- Obres de teatru de un año
table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Obres de teatru de $1', ['formatoFecha']='añu'},Entidad.claims['P577']))
-- Obres de teatru d'un país
table.insert(categoriasGeneros, categorizarWikidata(
{['categoría'] = 'Obres de teatru de $1'
},Entidad.claims['P495']))
-- Obres de teatru d'una llingua
table.insert(categoriasGeneros, categorizarWikidata(
{['categoría'] = 'Obres de teatru en $1',
},Entidad.claims['P364']))
end
if generoWikidata:find('[Nn]ovela') then
table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = categoriasGenerosNovelas},Entidad.claims['P136']))
-- Noveles por tema
table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = categoriasTemasNovelas},Entidad.claims['P921']))
-- Noveles del autor
table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Noveles de $1'},Entidad.claims['P50']))
-- Noveles d'un añu
table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Noveles de $1', ['formatoFecha']='añu'},Entidad.claims['P577']))
-- Noveles d'un país
table.insert(categoriasGeneros, categorizarWikidata(
{['categoría'] = 'Noveles de $1'
},Entidad.claims['P495']))
-- Noveles d'una llingua
table.insert(categoriasGeneros, categorizarWikidata(
{['categoría'] = 'Noveles en $1',
},Entidad.claims['P364']))
end
end
if not categoriasGeneros[1] then
-- Llibros d'un añu
table.insert(categoriasGeneros, categorizarWikidata({['categoría'] = 'Llibros de $1', ['formatoFecha']='añu'},Entidad.claims['P577']))
-- Llibros d'un país
table.insert(categoriasGeneros, categorizarWikidata(
{['categoría'] = 'Llibros de $1'}
,Entidad.claims['P495']))
end
if categoriasGeneros[1] then
categorias = categorias .. table.concat(categoriasGeneros)
end
-- Obres infantiles, fábules, etc.
categorias=categorias .. categorizarWikidata({['categoría'] = categoriasGeneros},Entidad.claims['P136'])
-- Premios
categorias = categorias .. categorizarWikidata({['categoría'] = '$1'}, Entidad.claims['P166'])
end
return ModuloFicha.infobox(FichaLibro) .. 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 '[[llingua ' .. idioma .. '|' .. idioma:gsub("%a", string.upper,1) .. ']]'
else
return '[[llingua ' .. idioma .. '|' .. idioma .. ']]'
end
end
end
-- Función que devuelve la llista de los valores d'una propiedá en Wikidata formatiaos
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
-- Función que devuelve'l xéneru y subxéneru de Wikidata.
-- La novela, novela curtia o cuentu se devolverán siempre nel xéneru.
-- El restu de xéneros devolveránse como subxéneru o como xéneru dependiendo de
-- si en Wikidata s'utiliza unu de los xéneros anteriores.
-- Por exemplu:
-- - En Wikidata Novela + ciencia ficción --> xéneru = Novela, subxénero = Ciencia ficción
-- - En Wikidata ciencia ficción --> xéneru = Ciencia ficción
function obtenerGeneroWikidata()
if not Entidad or not Entidad.claims then
return
end
-- Subxéneros de noveles ensin un artículu na Wikipedia y que se remplacen pol subxéneru qu'esiste
local subgenerosNovelas = {
['Q3056541' ] = 'Q4184' , -- novela autobiográfica / autobiografía
['Q26228228'] = 'Q1077883', -- novela biopunk / biopunk
['Q26228231'] = 'Q174526' , -- novela ciberpunk / ciberpunk
['Q12132683'] = 'Q24925' , -- novela de ciencia ficción /
['Q12132683'] = 'Q24925' , -- novela de ciencia ficción /
['Q10992055'] = 'Q1057172', -- novela fantástica / lliteratura fantástica
['Q11825892'] = 'Q1233720', -- novela xuvenil / lliteratura xuvenil
['Q27022710'] = 'Q1341831', -- novela postciberpunk / postciberpunk
['Q27020789' ] = 'Q223685' , -- novela steampunk / steampunk
['Q26906554'] = 'Q197949' , -- novela posapocalíptica / ficción posapocalíptica
['Q3440959' ] = 'Q182015' , -- novela d'intriga / intriga
['Q26225470'] = 'Q224989' , -- novela ucrónica / ucronía
['Q21616374'] = 'Q1425557', -- novela de vampiros / lliteratura de vampiros
}
local subgenerosGeneros = {
['Q132311' ] = 'Q1057172', -- Xéneru fantásticu / Lliteratura fantástica
['Q16681629'] = 'Q224989' , -- lliteratura ucrónica / Ucronía
['Q516626' ] = 'Q193606' , -- Terror (sentimientu de mieu o fobia na so escala máxima) / Terror (xéneru lliterariu)
}
local temasGeneros = {
['Q20443047'] = 'Q180774' , -- Lliteratura distópica / Distopía
['Q26928598'] = 'Q180774' , -- novela distópica / Distopía
['Q1481165' ] = 'Q2763' , -- lliteratura del Holocausto / Holocausto
['Q182154' ] = 'Q253732' , -- viaxe al traviés del tiempu / viaje nel tiempu na ficción
['Q253732' ] = 'Q253732' , -- viaxe nel tiempu na ficción / viaje nel tiempu na ficción
}
local declaracionesGeneros = Entidad.claims['P136']
local declaracionesTemas = Entidad.claims['P921']
local identificadorGenero, identificadorTema
local generos = {}
local subgeneros = {}
local temas = {}
if declaracionesTemas then
for k,v in pairs(declaracionesTemas) do
identificadorTema = 'Q' .. v.mainsnak.datavalue.value['numeric-id']
if identificadorTema == 'Q182154' then -- viaxe al traviés del tiempu
insertarEn(temas, 'Q253732') -- viaxe nel tiempu na ficción
else
insertarEn(temas, identificadorTema)
end
end
end
if declaracionesGeneros then
for k,v in pairs(declaracionesGeneros) do
identificadorGenero = 'Q' .. v.mainsnak.datavalue.value['numeric-id']
if insertarEn(subgeneros, subgenerosNovelas[identificadorGenero]) then
insertarEn(generos, 'Q8261') -- novela
elseif insertarEn(subgeneros, subgenerosGeneros[identificadorGenero]) or
insertarEn(temas, temasGeneros[identificadorGenero])then
elseif identificadorGenero == 'Q3547700' then -- ucronía de fantasía
insertarEn(subgeneros, 'Q224989') -- Ucronía
insertarEn(subgeneros, 'Q1057172') -- Lliteratura fantástica
elseif identificadorGenero == 'Q149537' then -- novela curtia
insertarEn(generos, 'Q8261') -- novela
elseif identificadorGenero == 'Q1347298' then -- novela por entregues
-- Nun ye un xéneru en sigo mesmo. Nun amosalo.
elseif identificadorGenero == 'Q10453828' then -- novela de viaxes nel tiempu
insertarEn(generos, 'Q8261') -- novela
insertarEn(temas, 'Q253732') -- viaxe nel tiempu na ficción
elseif ModuloTablas.en(tablaGeneros, identificadorGenero) then
insertarEn(generos, identificadorGenero)
else
insertarEn(subgeneros, identificadorGenero)
end
end
end
if generos[1] then
return addLinkbackWikidata(formatear(generos), Entidad.id, 'P136')
, addLinkbackWikidata(formatear(subgeneros), Entidad.id, 'P136')
, addLinkbackWikidata(formatear(temas), Entidad.id, 'P921')
else
return addLinkbackWikidata(formatear(subgeneros), Entidad.id, 'P136')
, nil
, addLinkbackWikidata(formatear(temas), Entidad.id, 'P921')
end
end
-- Formatiar una tabla d'identificadores d'entidaes 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
-- Nun devolver nada si la llista nun tien elementos
if not primero then
return mw.text.listToText(identificadoresFormateados)
end
end
function obtenerEtiquetaWikidata()
if Entidad and Entidad.labels and Entidad.labels.ast then
return Entidad.labels.ast.value
end
end
function obtenerWikisource(idioma)
if not idioma or not Entidad or not Entidad.sitelinks then
return
end
if idioma:find('[Aa]sturianu') then
if not Entidad.sitelinks.astwikisource or not Entidad.sitelinks.astwikisource.title then
return
end
tituloWikiSource = Entidad.sitelinks.astwikisource.title
--[[Archivu:Wikisource-logo.svg|15px| ]]
return "''[[s:" .. tituloWikiSource .. "|" .. tituloWikiSource .. "]]'' en [[Wikisource]]"
elseif idioma:find('[Ee]spañol') then
if not Entidad.sitelinks.eswikisource or not Entidad.sitelinks.eswikisource.title then
return
end
tituloWikiSource = Entidad.sitelinks.eswikisource.title
return "''[[:es:s:" .. tituloWikiSource .. "|" .. tituloWikiSource .. "]]'' en [[Wikisource]]"
elseif idioma:find('[Ii]nglés') then
if not Entidad.sitelinks.enwikisource or not Entidad.sitelinks.enwikisource.title then
return
end
tituloWikiSource = Entidad.sitelinks.enwikisource.title
return "''[[:en:s:" .. tituloWikiSource .. "|" .. tituloWikiSource .. "]]'' en [[Wikisource]]"
elseif idioma:find('[Ff]rancés') then
if not Entidad.sitelinks.frwikisource or not Entidad.sitelinks.frwikisource.title then
return
end
tituloWikiSource = Entidad.sitelinks.frwikisource.title
return "''[[:fr:s:" .. tituloWikiSource .. "|" .. tituloWikiSource .. "]]'' en [[Wikisource]]"
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 estauxunidense
idIdioma == 'Q665624' then -- inglés n'Irlanda
v.mainsnak.datavalue.value.id='Q1860'
v.mainsnak.datavalue.value['numeric-id']=1860
end
end
end
return z