| Contenidos de Wikipedia en español bajo licencia CC BY-SA 4.0 ⇔ Mapas de OpenStreetMap bajo licencia ODbL |
Diferencia entre revisiones de «Módulo:Ficha de persona»
De Hispanopedia
En el parámetro "nombre" se tomarán datos locales o, en su defecto, el título sin coletilla, eliminando la opción de tomar la etiqueta de Wikidata. Ver este hilo en el Café. |
imported>Leoncastro m Sin enlaces a fechas |
||
| (No se muestran 13 ediciones intermedias de 4 usuarios) | |||
| Línea 30: | Línea 30: | ||
-- Constantes | -- Constantes | ||
local enMayusculas = {['formatoTexto'] = 'mayúscula', ['linkback']='sí', [' | local enMayusculas = {['formatoTexto'] = 'mayúscula', ['linkback']='sí'} | ||
local | local enMayusculasO = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o ', ['linkback']='sí'} | ||
local listaNoOrdenada = {['lista'] = 'no ordenada', ['linkback | local enMayusculasSinEnlazar = {['formatoTexto'] = 'mayúscula', ['linkback']='sí', ['enlace']='no'} | ||
local enMayusculasOSinEnlazar = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o ', ['linkback']='sí', ['enlace']='no'} | |||
local listaNoOrdenada = {['lista'] = 'no ordenada', ['linkback']='sí'} --, ['debeExistir'] = 'sí' | |||
--local lugar = {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí'} | --local lugar = {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí'} | ||
local debeExistir = {['debeExistir'] = 'sí', ['formatoTexto'] = 'mayúscula', ['linkback | local debeExistir = {['debeExistir'] = 'sí', ['formatoTexto'] = 'mayúscula', ['linkback']='sí'} | ||
local conPeriodo = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['linkback | local conPeriodo = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['linkback']='sí'} | ||
local conPeriodoDebeExistir = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['debeExistir'] = 'sí', ['linkback | local conPeriodoDebeExistir = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['debeExistir'] = 'sí', ['linkback']='sí'} | ||
local sinEnlazar = {['enlace']='no', ['linkback | local sinEnlazar = {['enlace']='no', ['linkback']='sí'} | ||
local sinLapiz = { | local sinLapiz = {} | ||
local normal = {['linkback | local normal = {['linkback']='sí'} | ||
-- Formatos según el tipo de cabecera | -- Formatos según el tipo de cabecera | ||
local formatos={ | local formatos={ | ||
['por defecto'] = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:# | ['por defecto'] = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#000'}, | ||
['inherit'] = {['estiloTituloFicha'] = 'background-color:#E6E6FA;color:#000'}, | ['inherit'] = {['estiloTituloFicha'] = 'background-color:#E6E6FA;color:#000'}, | ||
--['actor'] = {['estiloTituloFicha'] = ''}, | --['actor'] = {['estiloTituloFicha'] = ''}, | ||
['ajedrecista'] = {['estiloTituloFicha'] = 'background-color:#d38d47;color:#FFF'}, | ['ajedrecista'] = {['estiloTituloFicha'] = 'background-color:#d38d47;color:#FFF'}, | ||
['artista'] = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:# | ['artista'] = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#000'}, | ||
['astronauta'] = {['estiloTituloFicha'] = 'background-color:transparent;'}, | ['astronauta'] = {['estiloTituloFicha'] = 'background-color:transparent;'}, | ||
['autoridad'] = {['estiloTituloFicha'] = 'background-color:transparent;', ['estiloTituloSecciones'] ='background-color:#E6E6FA;'}, | ['autoridad'] = {['estiloTituloFicha'] = 'background-color:transparent;', ['estiloTituloSecciones'] ='background-color:#E6E6FA;'}, | ||
| Línea 77: | Línea 79: | ||
return x.time | return x.time | ||
end | end | ||
function z.Ficha(frame) | function z.Ficha(frame) | ||
| Línea 103: | Línea 106: | ||
local gender = propiedad('P21', {['enlace']='no', ['linkback']='no'}) | local gender = propiedad('P21', {['enlace']='no', ['linkback']='no'}) | ||
if gender | if gender and ( mw.ustring.match(gender, 'femenino') or mw.ustring.match(gender, 'mujer') ) then | ||
etiquetaAnyosActivo = 'Años activa' | etiquetaAnyosActivo = 'Años activa' | ||
etiquetaConocidoPor = 'Conocida por' | etiquetaConocidoPor = 'Conocida por' | ||
| Línea 208: | Línea 211: | ||
local nacimiento, desaparicion, fallecimiento | local nacimiento, desaparicion, fallecimiento | ||
local fechaNacimientoTimestamp = elementoTabla(Entidad, 'claims', 'P569', 1, 'mainsnak', 'datavalue', 'value', 'time') | local fechaNacimientoTimestamp = elementoTabla(Entidad, 'claims', 'P569', 1, 'mainsnak', 'datavalue', 'value', 'time') | ||
local lugarNacimiento = argumento['lugar de nacimiento'] or propiedad('P19', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha=fechaNacimientoTimestamp | local lugarNacimiento = argumento['lugar de nacimiento'] or propiedad('P19', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha=fechaNacimientoTimestamp}) | ||
local lugarDesaparicion = argumento['lugar de desaparición'] | local lugarDesaparicion = argumento['lugar de desaparición'] | ||
local fechaFallecimientoTimestamp = elementoTabla(Entidad, 'claims', 'P570', 1, 'mainsnak', 'datavalue', 'value', 'time') | local fechaFallecimientoTimestamp = elementoTabla(Entidad, 'claims', 'P570', 1, 'mainsnak', 'datavalue', 'value', 'time') | ||
local lugarFallecimiento = argumento['lugar de fallecimiento'] or propiedad('P20', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha = fechaFallecimientoTimestamp | local lugarFallecimiento = argumento['lugar de fallecimiento'] or propiedad('P20', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha = fechaFallecimientoTimestamp}) | ||
fallecimiento = enVariasLineas({ | fallecimiento = enVariasLineas({ | ||
argumento['fecha de fallecimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P570', | argumento['fecha de fallecimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P570', enMayusculasOSinEnlazar), obtenerEdadWikidata('P570'))), | ||
lugarFallecimiento | lugarFallecimiento | ||
}) | }) | ||
| Línea 221: | Línea 224: | ||
if fallecimiento then | if fallecimiento then | ||
desaparicion = enVariasLineas({ | desaparicion = enVariasLineas({ | ||
argumento['fecha de desaparición'] or propiedad('P746', | argumento['fecha de desaparición'] or propiedad('P746', enMayusculasOSinEnlazar), | ||
lugarDesaparicion | lugarDesaparicion | ||
}) | }) | ||
else | else | ||
desaparicion = enVariasLineas({ | desaparicion = enVariasLineas({ | ||
argumento['fecha de desaparición'] or (obtenerDatosWikidata and entreParentesis(propiedad('P746', | argumento['fecha de desaparición'] or (obtenerDatosWikidata and entreParentesis(propiedad('P746', enMayusculasOSinEnlazar), obtenerEdadWikidata('P746'))), | ||
argumento['lugar de desaparición'] | argumento['lugar de desaparición'] | ||
}) | }) | ||
| Línea 233: | Línea 236: | ||
if fallecimiento or desaparicion then | if fallecimiento or desaparicion then | ||
nacimiento = enVariasLineas({ | nacimiento = enVariasLineas({ | ||
argumento['fecha de nacimiento'] or propiedad('P569', | argumento['fecha de nacimiento'] or propiedad('P569', enMayusculasOSinEnlazar), | ||
lugarNacimiento | lugarNacimiento | ||
}) | }) | ||
else | else | ||
nacimiento = enVariasLineas({ | nacimiento = enVariasLineas({ | ||
argumento['fecha de nacimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P569', | argumento['fecha de nacimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P569', enMayusculasOSinEnlazar), obtenerEdadWikidata())), | ||
lugarNacimiento | lugarNacimiento | ||
}) | }) | ||
| Línea 256: | Línea 259: | ||
end | end | ||
firma = argumento['firma'] or argumento['Firma'] or propiedad('P109', {['enlace'] = 'no', ['linkback'] = false | firma = argumento['firma'] or argumento['Firma'] or propiedad('P109', {['enlace'] = 'no', ['linkback'] = false, ['uno'] = 'sí'}) or '' | ||
if firma and firma ~= '' then | if firma and firma ~= '' then | ||
firma = '[[Archivo:' .. firma .. '|175x80px]]' | firma = '[[Archivo:' .. firma .. '|175x80px|class=skin-invert]]' | ||
end | end | ||
| Línea 338: | Línea 341: | ||
else | else | ||
Cardenalato = argumento['cardenalato'] | Cardenalato = argumento['cardenalato'] | ||
end | end | ||
| Línea 377: | Línea 368: | ||
sitioWeb = noAlargar(enlazarURL(argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb'])) | sitioWeb = noAlargar(enlazarURL(argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb'])) | ||
else | else | ||
sitioWeb = propiedad('P856', {['valor-función'] = formatoURL, ['linkback | sitioWeb = propiedad('P856', {['valor-función'] = formatoURL, ['linkback']='sí'}) | ||
end | end | ||
| Línea 462: | Línea 439: | ||
argumento['país_de_residencia'] or argumento['pais_de_residencia'] or | argumento['país_de_residencia'] or argumento['pais_de_residencia'] or | ||
argumento['lugar_de_residencia']) or | argumento['lugar_de_residencia']) or | ||
propiedad('P551', {['debeExistir'] = 'sí', ['linkback']='sí', [' | propiedad('P551', {['debeExistir'] = 'sí', ['linkback']='sí', ['formatoTexto'] = 'mayúscula'}), | ||
clase='etiqueta'}, | clase='etiqueta'}, | ||
{'Nacionalidad', sinBandera(argumento['nacionalidad'] or argumento['Nacionalidad'] or argumento['ciudadanías']) or --Pendiente hacer que salga el gentilicio | {'Nacionalidad', sinBandera(argumento['nacionalidad'] or argumento['Nacionalidad'] or argumento['ciudadanías']) or --Pendiente hacer que salga el gentilicio | ||
| Línea 497: | Línea 474: | ||
-- En el caso del cónyuge tiene preferencia el argumento hasta que se muestre los calificativos. | -- En el caso del cónyuge tiene preferencia el argumento hasta que se muestre los calificativos. | ||
clase ='plainlist', -- Mostrar las listas sin viñetas | clase ='plainlist', -- Mostrar las listas sin viñetas | ||
{'Familia', propiedad('P53', debeExistir)}, | {'Familia', argumento['familia'] or propiedad('P53', debeExistir)}, | ||
{(padres and 'Padres') or (padre and 'Padre') or 'Madre', -- Mostrar padres, padre o madre según esté informado ambos o solo uno de ellos | {(padres and 'Padres') or (padre and 'Padre') or 'Madre', -- Mostrar padres, padre o madre según esté informado ambos o solo uno de ellos | ||
padres or padre or madre}, | padres or padre or madre}, | ||
| Línea 549: | Línea 526: | ||
{'Estudio', argumento['nombre estudio']}, -- Arquitectos | {'Estudio', argumento['nombre estudio']}, -- Arquitectos | ||
{'Restaurantes', argumento['restaurantes']}, -- Para cocineros. Restaurantes en los que ha trabajado. | {'Restaurantes', argumento['restaurantes']}, -- Para cocineros. Restaurantes en los que ha trabajado. | ||
}, | |||
{tipo='sección', | |||
['título'] = 'Información religiosa', | |||
estilotitulo = estiloTituloSecciones, | |||
{'[[Sacramento del orden|Ordenación diaconal]]', OrdenacionDiaconal}, | |||
{'Ordenación sacerdotal', OrdenacionSacerdotal}, | |||
{'Ordenación episcopal', OrdenacionEpiscopal}, | |||
{'Proclamación cardenalicia', Cardenalato}, | |||
{'Título cardenalicio', argumento['título cardenalicio']}, | |||
{'Iglesia', argumento['iglesia']}, | |||
{'[[Secularización]]', argumento['secularización']}, | |||
{'[[Beatificación]]', argumento['beatificación']}, | |||
{'[[Canonización]]', argumento['canonización']}, | |||
{'Festividad', argumento['festividad'] or propiedad('P841', {['enlace'] = 'no'})}, | |||
{'Atributos', argumento['atributos']}, | |||
{etiquetaVeneradoEn, argumento['venerado en'] or propiedad('P1049')}, | |||
{'Patronazgo', argumento['patronazgo'] or propiedad('P417')}, | |||
{'Santuario', argumento['santuario']}, | |||
}, | |||
-- Sección artística (actores y ¿presentadores?) | |||
{tipo='sección', | |||
['titulo'] = seccionartistica, | |||
estilotitulo = estiloTituloSecciones, | |||
{'Rol debut' , argumento['rol debut']}, | |||
{'Año de debut' , argumento['rol debut'] and argumento['año debut']}, | |||
--{'Año de retiro', argumento['año retiro'] or propiedad('P2032')}, | |||
{'Películas' , argumento['número de películas']}, | |||
{'Serie' , argumento['serie']}, | |||
}, | |||
{'Empleador', argumento['empleador'] or | |||
argumento['institución_de_trabajo'] or | |||
argumento['nombre_estudio'] or | |||
propiedad('P108', conPeriodo), | |||
clase ='plainlist'}, | |||
--Profesores | |||
{'Estudiantes doctorales', argumento['estudiantes doctorales'] or propiedad('P185', debeExistir)}, | |||
{(ocupacionOArea and ocupacionOArea:find('[Pp]rofesor') and 'Estudiantes') or 'Alumnos', argumento['estudiantes'] or propiedad('P802', debeExistir)}, | |||
-- Periodistas, presentadores y videoblogueros | |||
{tipo='sección', | |||
{'Medio', argumento['medio de comunicación']}, -- Unas veces informados con el significado de área y otras con el empleador | |||
{'Canal', argumento['canal']}, | |||
{'Programas', argumento['programas'] or argumento['programa']}, | |||
}, | |||
-- Videoblogueros, en especial youtubers | |||
{tipo='sección', | |||
{'Vídeos', argumento['videos']}, | |||
{'Suscriptores', argumento['suscriptores']}, | |||
{'Vistas totales', argumento['vistas totales']}, | |||
}, | |||
-- Ocupación (escritores, artistas, periodistas, diseñadores, etc) | |||
-- Información artística | |||
{tipo='sección', | |||
plural(argumento['movimiento'] or argumento['Movimiento'] or argumento['movimientos'] or | |||
propiedad('P135', { | |||
['valor-módulo'] = 'Wikidata/Formato movimiento', | |||
['valor-función'] = 'formatoMovimiento', | |||
['linkback']='sí', | |||
['calificativo'] = formatoPeriodo, | |||
ordenar='por fecha', ['formatoTexto'] = 'mayúscula',}), 'Movimiento', 'Movimientos'), | |||
{'Seudónimo', argumento['seudónimo'] or argumento['Seudónimo'] or argumento['alias'] or argumento['Alias'] or propiedad('P742')}, | |||
{'Lengua literaria', argumento['lengua_literaria'] or argumento['Lengua_literaria']}, | |||
plural(argumento['género'] or argumento['Género'] or propiedad('P136', enMayusculas), 'Género', 'Géneros'), | |||
plural(argumento['instrumento'] or propiedad('P1303', enMayusculas), 'Instrumento', 'Instrumentos'), | |||
{'Tipo de voz', argumento['voz'] or argumento['tipo de voz'] or argumento['tesitura'] or propiedad('P412', enMayusculas)}, | |||
plural(argumento['compañía discográfica'] or propiedad('P264', conPeriodo), 'Discográfica', 'Discográficas', 'plainlist'), | |||
}, | |||
-- Obras notables. Se ponen de momento en cursivas pero es incorrecto en el caso de arquitectos. | |||
{'Obras notables', argumento['obras destacadas'] or | |||
argumento['obras notables'] or argumento['obras_notables'] or argumento['Obras notables'] or | |||
argumento['obras'] or | |||
argumento['proyectos_representativos'] or propiedad('P800',{['enlace']='sí', ['lista'] = 'no ordenada', ['debeExistir'] = 'sí', ['formatoTexto']='cursivas', ['linkback']='sí'}), | |||
clase='plainlist' | |||
}, | |||
{'Proyectos representativos', argumento['proyectos representativos']}, | |||
{'Artistas relacionados', relacionados}, | |||
{'[[Autor de nombre científico#Abreviatura del autor|Abreviatura en botánica]]', | |||
argumento['abreviatura en botánica'] or propiedad('P428')}, | |||
{'[[Autor de nombre científico|Abreviatura en zoología]]', | |||
argumento['abreviatura en zoología'] or propiedad('P835')}, | |||
--{'', listaDesplegable(etiquetaInfluencias, argumento['influenciado por'] or argumento['influido por'] or | |||
-- argumento['influencias'] or argumento['Influencias'], frame)}, | |||
--{'', listaDesplegable('Influyó a', argumento['influyó en'] or argumento['influyó'] or argumento['Influyó'], frame)}, | |||
-- Militares | |||
{'Lealtad', argumento['lealtad'] or propiedad('P945', enMayusculas)}, | |||
{'Rama militar', argumento['rama'] or propiedad('P241', enMayusculas)}, | |||
{'Unidad militar', argumento['unidad'] or propiedad('P7779', enMayusculas)}, | |||
{'Mandos', argumento['mandos']}, | |||
{'[[Grado militar|Rango militar]]', argumento['rango'] or propiedad('P410', conPeriodo), clase='plainlist'}, | |||
{'Conflictos', argumento['conflictos'] or argumento['batallas'] or propiedad('P607', enMayusculas)}, | |||
-- Astronautas (un subtipo de militar) | |||
{'Misiones espaciales', argumento['misiones espaciales'] or propiedad('P450')}, | |||
{'Tiempo en el espacio', argumento['tiempo espacio']}, | |||
-- Toreros | |||
{'Debut becerrista', argumento['debut becerrista']}, | |||
{'Debut [[picador]]', argumento['debut picador']}, | |||
{'Debut [[novillero]]', argumento['debut novillero']}, | |||
{'Alternativa', argumento['alternativa']}, | |||
{'Confirmación de alternativa', argumento['alternativa confirmación']}, | |||
{'Apoderado', argumento['apoderado']}, | |||
{'Escalafón general', argumento['escalafón']}, | |||
{'Invención', argumento['invención']}, | |||
{'Triunfos', argumento['triunfos']}, | |||
{'Retirada definitiva', argumento['retirada']}, | |||
-- Ajedrecistas | |||
{tipo='sección', | |||
{'Título', argumento['título'] or argumento['titulo']}, -- <!-- Su majestad, primera dama, etc --> | |||
{etiquetacampeon, argumento['campeón'] or argumento['campeon']}, | |||
{'[[Sistema de puntuación Elo|Elo]]', propiedad('P1087',{['formatoUnidad'] = 'número', ['calificativo'] = 'P585', ['linkback']='sí', ['ordenar'] = 'por fecha', ['uno'] = 'último'}) or argumento['elo'] }, -- | |||
{'[[Sistema de puntuación Elo|Mejor elo]]', argumento['mejor elo']}, | |||
{'Escalafón FIDE', rankingajedrez}, | |||
{'Mejor escalafón', argumento['mejor ranking']}, | |||
{'Término', argumento['término'] or -- <!--Años bajo los cuales la persona tuvo el título (el de arriba xD) --> | |||
argumento['termino']}, | |||
{'Predecesor', argumento['predecesor']}, | |||
{'Predecesora', argumento['predecesora']}, | |||
{'Sucesor', argumento['sucesor']}, | |||
{'Sucesora', argumento['sucesora']}, | |||
}, | |||
{'Partido político', argumento['partido político'] or argumento['partido'] or propiedad('P102', conPeriodo), clase='plainlist'}, | |||
{'Orden religiosa', argumento['congregación'] or propiedad('P611', enMayusculas)}, | |||
{'Afiliaciones', argumento['afiliaciones'] or propiedad('P1416')}, | |||
{'Miembro de', argumento['miembro de'] or argumento['sindicato'] or propiedad('P463', conPeriodoDebeExistir), clase='plainlist'}, | |||
{'Central sindical', argumento['central sindical'], clase='plainlist'}, | |||
-- Web | |||
{'Sitio web', sitioWeb}, | |||
{tipo='sección', | {tipo='sección', | ||
| Línea 741: | Línea 714: | ||
{'', argumento['medallas'] }, | {'', argumento['medallas'] }, | ||
}, | }, | ||
} | |||
if filterByOccupation( { | |||
'Q931260', -- asesino | |||
'Q484188', -- asesino en serie | |||
'Q1154323', -- asesino relámpago | |||
'Q2159907', -- criminal | |||
'Q14886050', -- terrorista | |||
'Q22962951', -- violador | |||
'Q26267537', -- violador en serie | |||
}, { | |||
argumento['cargos criminales'], | |||
argumento['condena'], | |||
argumento['situación penal'], | |||
argumento['víctimas'], | |||
} ) then | |||
local victimas = argumento['víctimas'] | |||
if victimas then | |||
local ocupacionesValidasVictimas = {'Q484188', 'Q14886050', 'Q26267537', 'Q1154323'} -- asesino en serie, terrorista, violador en serie y asesino relámpago | |||
for k,v in pairs(ocupacionesValidasVictimas) do | |||
local snak = propiedad('P106', {['valor-función'] = formatoId}) | |||
if snak and snak:match(v) then | |||
victimas = argumento['víctimas'] | |||
break | |||
else | |||
victimas = '' | |||
end | |||
end | |||
end | |||
table_merge(Ficha, { | |||
{tipo='sección', | |||
['titulo'] = 'Información criminal', | |||
estilotitulo = estiloTituloSecciones, | |||
{'[[Delito|Cargos criminales]]', argumento['cargos criminales'] or propiedad('P1399'), clase='plainlist'}, | |||
-- P2632 puede ser usado en alguno de los dos parámetros de abajo | |||
{'[[Sentencia (derecho)|Condena]]', argumento['condena']}, | |||
{'Situación penal', argumento['situación penal']}, | |||
{'Víctimas', victimas}, | |||
} | |||
}) | |||
end | |||
table_merge(Ficha, { | |||
-- Con etiqueta/datos como en las fichas de escritor y artista en vez de como en la ficha de persona | -- Con etiqueta/datos como en las fichas de escritor y artista en vez de como en la ficha de persona | ||
{'Firma', firma }, | {'Firma', firma }, | ||
| Línea 759: | Línea 764: | ||
{'', argumento['notas'], estilodatos='text-align:left;font-size:90%; line-height:1.2em'} | {'', argumento['notas'], estilodatos='text-align:left;font-size:90%; line-height:1.2em'} | ||
}, | }, | ||
entidad = argumento['id'], -- para el enlace final a wikidata | entidad = argumento['id'], -- para el enlace final a wikidata | ||
}) | |||
categorias = {} | categorias = {} | ||
local NF = require('Módulo:NF') | local NF = require('Módulo:NF') | ||
| Línea 804: | Línea 784: | ||
return ModuloFicha.infobox(Ficha) | return ModuloFicha.infobox(Ficha) | ||
end | end | ||
end | |||
function table_merge(t1, t2) | |||
for k,v in ipairs(t2) do | |||
if type(k) == 'string' then | |||
t1[k] = v | |||
else | |||
table.insert(t1, v) | |||
end | |||
end | |||
return t1 | |||
end | |||
function filterByOccupation( wikidataOccupations, localArguments ) | |||
if argumento['wikidata'] ~= 'no' then | |||
local id = argumento['id'] or mw.wikibase.getEntityIdForCurrentPage() | |||
if mw.wikibase.isValidEntityId( tostring( id ) ) then | |||
local wd = mw.wikibase.getAllStatements(id, 'P106') -- Occupation | |||
for k,v in pairs(wd) do | |||
local oc = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id') | |||
for i,j in pairs( wikidataOccupations ) do | |||
if i == ec then | |||
return true | |||
end | |||
end | |||
end | |||
end | |||
end | |||
for k,v in pairs(localArguments) do | |||
if v and v ~= 'no' then | |||
return true | |||
end | |||
end | |||
return false | |||
end | end | ||
| Línea 896: | Línea 910: | ||
--if idPropiedad =='P1477' then return require('Módulo:Tablas').tostring(Entidad) end -- FALTA | --if idPropiedad =='P1477' then return require('Módulo:Tablas').tostring(Entidad) end -- FALTA | ||
opciones.propiedad = idPropiedad | opciones.propiedad = idPropiedad | ||
opciones.rangoMayor = 'sí' -- evitar tomar valores deprecados | |||
valorPropiedad = getPropiedadWikidata(opciones,Entidad.claims[idPropiedad]) | valorPropiedad = getPropiedadWikidata(opciones,Entidad.claims[idPropiedad]) | ||
| Línea 919: | Línea 934: | ||
--'|marco_estilo=border:0; padding:0; border-top:1px solid #c0c0c0;' .. | --'|marco_estilo=border:0; padding:0; border-top:1px solid #c0c0c0;' .. | ||
'|marco_estilo=border:0; padding:0;' .. | '|marco_estilo=border:0; padding:0;' .. | ||
'|título_estilo=background-color:#8DB1C3;color:# | '|título_estilo=background-color:#8DB1C3;color:#000; text-align:left|lista_estilo=padding-left:33%;text-align:left; display:none|1=' | ||
.. lista .. '}}') | .. lista .. '}}') | ||
end | end | ||
| Línea 1139: | Línea 1154: | ||
if piesDeImagen then | if piesDeImagen then | ||
for k,pieDeImagen in pairs(piesDeImagen) do | for k,pieDeImagen in pairs(piesDeImagen) do | ||
if pieDeImagen.datavalue.value.language=='es' then | if pieDeImagen and pieDeImagen.datavalue and pieDeImagen.datavalue.value and pieDeImagen.datavalue.value.language=='es' then | ||
-- devolver la imagen y el texto del pie de la imagen en español | -- devolver la imagen y el texto del pie de la imagen en español | ||
return valorImagen, pieDeImagen.datavalue.value.text | return valorImagen, pieDeImagen.datavalue.value.text | ||
Revisión actual - 11:28 28 sep 2024
Este módulo implementa la plantilla {{Ficha de persona}}.
- Esta documentación explica el funcionamiento del módulo desde un contexto técnico; para instrucciones de uso de la plantilla, véase la página de documentación sobre la plantilla.
- La página de discusión de este módulo debe reservarse para cuestiones más técncias sobre el módulo; úsese la discusión de la plantilla para discutir sobre datos y parámetros.
local z = {}
local argumentos -- Tabla de argumentos con los que se llama a la función
local argumento={} -- Argumentos, sin contar los que no tienen datos
local Entidad -- Tabla con los datos en Wikidata de la persona.
local algunaPropiedadEnlazaWikidata -- Para alguna propiedad no existe la etiqueta ni el enlace mostrándose algo de la forma d:...
local obtenerDatosWikidata -- true si se deben obtener datos de Wikidata
-- Módulos y funciones externas
local ModuloFecha = require('Módulo:Fecha')
local edad = ModuloFecha.edad
local ModuloFicha = require('Módulo:Ficha')
local ModuloFormatoTexto = require('Módulo:Formato texto')
local enVariasLineas = ModuloFormatoTexto.enVariasLineas
local entreParentesis = ModuloFormatoTexto.entreParentesis
local ModuloIdentificadores = require('Módulo:Identificadores')
local ModuloPaginas = require('Módulo:Páginas')
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local formatoURL = ModuloWikidataFormatos.formatoURL
local formatoPeriodo = ModuloWikidataFormatos.formatoPeriodo
local formatoId = ModuloWikidataFormatos.formatoId
local ModuloWikidata = require('Módulo:Wikidata')
local lapizWikidata = ModuloWikidata.addLinkback
local categorizarWikidata = ModuloWikidata.categorizar
local getPropiedadWikidata = ModuloWikidata.getPropiedad
local elementoTabla = require('Módulo:Tablas').elemento
local enlazarURL = require('Módulo:URL').enlazar
local sinBandera = require('Módulo:Bandera').sinBandera
-- Constantes
local enMayusculas = {['formatoTexto'] = 'mayúscula', ['linkback']='sí'}
local enMayusculasO = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o ', ['linkback']='sí'}
local enMayusculasSinEnlazar = {['formatoTexto'] = 'mayúscula', ['linkback']='sí', ['enlace']='no'}
local enMayusculasOSinEnlazar = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o ', ['linkback']='sí', ['enlace']='no'}
local listaNoOrdenada = {['lista'] = 'no ordenada', ['linkback']='sí'} --, ['debeExistir'] = 'sí'
--local lugar = {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí'}
local debeExistir = {['debeExistir'] = 'sí', ['formatoTexto'] = 'mayúscula', ['linkback']='sí'}
local conPeriodo = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['linkback']='sí'}
local conPeriodoDebeExistir = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = formatoPeriodo, ordenar='por fecha', ['debeExistir'] = 'sí', ['linkback']='sí'}
local sinEnlazar = {['enlace']='no', ['linkback']='sí'}
local sinLapiz = {}
local normal = {['linkback']='sí'}
-- Formatos según el tipo de cabecera
local formatos={
['por defecto'] = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#000'},
['inherit'] = {['estiloTituloFicha'] = 'background-color:#E6E6FA;color:#000'},
--['actor'] = {['estiloTituloFicha'] = ''},
['ajedrecista'] = {['estiloTituloFicha'] = 'background-color:#d38d47;color:#FFF'},
['artista'] = {['estiloTituloFicha'] = 'background-color:#8DB1C3;color:#000'},
['astronauta'] = {['estiloTituloFicha'] = 'background-color:transparent;'},
['autoridad'] = {['estiloTituloFicha'] = 'background-color:transparent;', ['estiloTituloSecciones'] ='background-color:#E6E6FA;'},
['cine'] = {['estiloTituloFicha'] = 'background-color:#f9e999'},
['diseñador'] = {['estiloTituloFicha'] = 'background-color:#ED8;color:#000'},
['escritor'] = {['estiloTituloFicha'] = 'background-color:#4c6099;color:#FFF'},
['futbolista'] = {['estiloTituloFicha'] = 'background-color:#CC8;color:#000'},
['militar'] = {['estiloTituloFicha'] = 'background-color:#b0c4de;color:#000'},
['modelo'] = {['estiloTituloFicha'] = 'background-color:#9F9;color:#000'},
--
-- Música
--
['cantante'] = {['estiloTituloFicha'] = 'background-color:#f0e68c'}, -- solista de Plantilla:Ficha de artista musical/selección de color
['músico'] = {['estiloTituloFicha'] = 'background-color:#F4BF92'}, -- instrumentalista_no_vocal (integrantes de grupos no vocalistas, así como solistas instrumentales y directores de orquesta)
['otro música'] = {['estiloTituloFicha'] = 'background-color:#BFE0BF'}, -- otro_personal (productores, compositores, ingenieros)
--
['religioso'] = {['estiloTituloFicha'] = 'background-color:#ffde00; color:#000'},
['periodista'] = {['estiloTituloFicha'] = 'background-color:#ED8;color:#000'},
['televisión'] = {['estiloTituloFicha'] = 'background-color:#ED8;color:#000'},
['torero'] = {['estiloTituloFicha'] = 'background-color: #800000; color: white'},
['videojuego'] = {['estiloTituloFicha'] = 'background-color:#CCF;color:#000'},
['youtuber'] = {['estiloTituloFicha'] = 'background-color:#B60000;color:#fff'},
}
local nombre = ''
function fechaiso(x)
return x.time
end
function z.Ficha(frame)
ModuloWikidata:setFrame(frame) -- No funciona si se pone ModuloWikidata.setFrame(marco)
-- Obtener una copia de los argumentos eliminando los argumentos sin valor
-- y dejando en blanco (aunque no nil) aquellos que valen "no"
argumento = obtenerArgumentosConValor(frame) -- No poner local. Es global.
--Determinar si se deben obtener datos de Wikidata
if argumento['wikidata'] == 'no' and (argumento['fecha de fallecimiento'] or argumento['lugar de fallecimiento']
or argumento['fecha de desaparición'] or argumento['lugar de desaparición']
) then
obtenerDatosWikidata = false
Entidad = nil
else
obtenerDatosWikidata = true
-- Obtener los datos de la página donde se inserta la ficha de Wikidata.
Entidad = mw.wikibase.getEntityObject(argumento['id']) or {}
end
--Determinar datos para la ficha
local educacion = argumento['educación'] or argumento['educacion'] or propiedad('P512',sinEnlazar)
local almamater = argumento['alma máter'] or argumento['alma_mater'] or argumento['alma mater'] or argumento['almamáter'] or argumento['alma_máter']
or propiedad('P69', { ['formatoTexto'] = 'mayúscula', ['lista'] = 'no ordenada', ['valor-función']='educado en', ['valor-módulo'] = 'Wikidata/Formatos educación', ['ordenar'] = 'por fecha', ['linkback']='sí'})
local gender = propiedad('P21', {['enlace']='no', ['linkback']='no'})
if gender and ( mw.ustring.match(gender, 'femenino') or mw.ustring.match(gender, 'mujer') ) then
etiquetaAnyosActivo = 'Años activa'
etiquetaConocidoPor = 'Conocida por'
etiquetaInfluencias = 'Influida por'
etiquetacampeon = '[[Campeonato del mundo de ajedrez|Campeona del mundo]]'
etiquetaAlumnoDe = 'Alumna de'
etiquetaEducadoEn = 'Educada en'
funcionOcupacion = formatoOcupacionFemenino
etiquetaVeneradoEn = 'Venerada en'
else
etiquetaAnyosActivo = 'Años activo'
etiquetaConocidoPor = 'Conocido por'
etiquetaInfluencias = 'Influido por'
etiquetacampeon = '[[Campeonato del mundo de ajedrez|Campeón del mundo]]'
etiquetaAlumnoDe = 'Alumno de'
etiquetaEducadoEn = 'Educado en'
funcionOcupacion = formatoOcupacionMasculino
etiquetaVeneradoEn = 'Venerado en'
end
--No entiendo para qué sirve. En principio no se muestra para actores.
--seccionartistica='Carrera artística'
-- Generar los cargos
local hayCargos
local tablaCargos = {tipo='sección'}
if argumento['cargo'] then
hayCargos = true
table.insert(tablaCargos, {'', '<hr>'})
table.insert(tablaCargos, generarcargo(argumento,1,frame))
argumento['predecesor']= nil
argumento['predecesora']= nil
argumento['sucesor']= nil
argumento['sucesora']= nil
end
for i=2, 10 do
if argumento['cargo'..i] or argumento['inicio'..i] then
hayCargos = true
table.insert(tablaCargos, generarcargo(argumento,i,frame))
end
end
-- La ocupación y el área solo se obtienen de Wikidata si no se informan los campos de ocupación y área.
-- Esto es porque para los artistas puede tener en Wikidata como ocupación "pintor y escultor" y
-- tener informada el área con "pintura y escultura".
local ocupacion = argumento['ocupación'] or argumento['ocupacion'] or argumento['Ocupación'] or argumento['profesión']
local area = argumento['área'] or argumento['area'] or argumento['especialidad'] or argumento['campos']
if not ocupacion and not area then
ocupacion = propiedad('P106', {['formatoTexto'] = 'mayúscula', ['valor-función']=funcionOcupacion, ['calificativo'] = formatoPeriodo, ['linkback']='sí'})
area = propiedad('P101', enMayusculas) -- Campo de trabajo
end
local ocupacionOArea = ocupacion or area
nombre = argumento['nombre'] or argumento['Nombre'] or ModuloPaginas.nombrePagina({desambiguar='sí'})
local nombre_completo = argumento['nombre completo']
local nombre_nacimiento = argumento['nombre de nacimiento'] or propiedad('P1477')
local nombre_nacimiento_sin_lapiz = argumento['nombre de nacimiento'] or propiedad('P1477', sinLapiz)
-- Nombre en la escritura nativa.
-- Solo se muestra si no coincide con el nombre o el nombre de nacimiento o el nombre completo
local nombresNativos={tipo='sección'}
local nombreNativo, textoNombreNativo, idiomaNombreNativo
if argumento['nombre nativo'] then
if argumento['nombre nativo'] ~= nombre and
argumento['nombre nativo'] ~= nombre_nacimiento_sin_lapiz and
argumento['nombre nativo'] ~= nombre_completo then
table.insert(nombresNativos,{'Nombre nativo', argumento['nombre nativo']})
end
elseif Entidad then
-- En el caso de obtener de Wikidata puede haber varios nombres nativos
local declaracion = elementoTabla(Entidad, 'claims','P1559')
if declaracion then
for k,v in pairs(declaracion) do
nombreNativo = elementoTabla(v, 'mainsnak', 'datavalue', 'value')
if nombreNativo then
textoNombreNativo = nombreNativo.text
idiomaNombreNativo = nombreNativo.language
if textoNombreNativo and idiomaNombreNativo and
textoNombreNativo ~= nombre and
textoNombreNativo ~= nombre_nacimiento_sin_lapiz and
textoNombreNativo ~= nombre_completo then
table.insert(nombresNativos, {
'Nombre en ' .. mw.language.fetchLanguageName(idiomaNombreNativo, 'es') ,
lapizWikidata(textoNombreNativo,Entidad.id,'P1559')
})
end
end
end
end
end
-- Informar los datos de nacimiento, desaparición y de fallecimiento
-- No se debe alterar el orden para que en caso de que el lugar de fallecimiento o el de desaparición sea el mismo
-- que el de nacimiento esté enlazado el lugar de nacimiento
local nacimiento, desaparicion, fallecimiento
local fechaNacimientoTimestamp = elementoTabla(Entidad, 'claims', 'P569', 1, 'mainsnak', 'datavalue', 'value', 'time')
local lugarNacimiento = argumento['lugar de nacimiento'] or propiedad('P19', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha=fechaNacimientoTimestamp})
local lugarDesaparicion = argumento['lugar de desaparición']
local fechaFallecimientoTimestamp = elementoTabla(Entidad, 'claims', 'P570', 1, 'mainsnak', 'datavalue', 'value', 'time')
local lugarFallecimiento = argumento['lugar de fallecimiento'] or propiedad('P20', {['conjunción']=' o ', ['valor-módulo'] = 'Wikidata/Formato lugar', ['valor-función'] = 'formatoLugar', ['linkback']='sí', fecha = fechaFallecimientoTimestamp})
fallecimiento = enVariasLineas({
argumento['fecha de fallecimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P570', enMayusculasOSinEnlazar), obtenerEdadWikidata('P570'))),
lugarFallecimiento
})
if fallecimiento then
desaparicion = enVariasLineas({
argumento['fecha de desaparición'] or propiedad('P746', enMayusculasOSinEnlazar),
lugarDesaparicion
})
else
desaparicion = enVariasLineas({
argumento['fecha de desaparición'] or (obtenerDatosWikidata and entreParentesis(propiedad('P746', enMayusculasOSinEnlazar), obtenerEdadWikidata('P746'))),
argumento['lugar de desaparición']
})
end
if fallecimiento or desaparicion then
nacimiento = enVariasLineas({
argumento['fecha de nacimiento'] or propiedad('P569', enMayusculasOSinEnlazar),
lugarNacimiento
})
else
nacimiento = enVariasLineas({
argumento['fecha de nacimiento'] or (obtenerDatosWikidata and entreParentesis(propiedad('P569', enMayusculasOSinEnlazar), obtenerEdadWikidata())),
lugarNacimiento
})
end
if argumento['padres'] then
padres = estaEnlazado(argumento['padres'])
else
padre = propiedad('P22')
madre = propiedad('P25')
if padre and madre then
padres = padre .. '<br/>' .. madre
padre = nil
madre = nil
end
end
firma = argumento['firma'] or argumento['Firma'] or propiedad('P109', {['enlace'] = 'no', ['linkback'] = false, ['uno'] = 'sí'}) or ''
if firma and firma ~= '' then
firma = '[[Archivo:' .. firma .. '|175x80px|class=skin-invert]]'
end
-- Formato del título de la ficha y de las secciones según la ocupación, si la persona tiene cargos o si ha fallecido
local formato, cabecera
if argumento['cabecera'] then
cabecera = argumento['cabecera'] -- Por defecto utilizar el campo cabecera de la plantilla
elseif hayCargos == true then
cabecera = 'autoridad'
elseif not ocupacionOArea then
cabecera = 'por defecto'
elseif ocupacionOArea:find('[Aa]ctor') or ocupacionOArea:find('[Aa]ctriz') or ocupacionOArea:find('[Pp]roductor de cine')
or ocupacionOArea:find('[Dd]irector de cine') then
cabecera = 'cine'
elseif ocupacionOArea:find('[Aa]jedrecista') or argumento['elo'] or rankingajedrez then
cabecera = 'ajedrecista'
elseif ocupacionOArea:find('[Aa]stronauta') then
cabecera = 'astronauta'
elseif ocupacionOArea:find('[Ee]scritor') or ocupacionOArea:find('[Nn]ovelista') or
ocupacionOArea:find('[Pp]oeta') or ocupacionOArea:find('[Dd]ramaturgo') then
cabecera = 'escritor'
elseif ocupacionOArea:find('[Cc]antante') then
cabecera = 'cantante'
elseif ocupacionOArea:find('[Mm]úsico') then
cabecera = 'músico'
elseif ocupacionOArea:find('[Cc]ompositor') then
cabecera = 'otro música'
elseif ocupacionOArea:find('[Pp]olític[oa]') or argumento['cargo'] then
cabecera = 'por defecto'
elseif ocupacionOArea:find('[Pp]eriodista') then
cabecera = 'periodista'
elseif ocupacionOArea:find('[Dd]iseñador') then
cabecera = 'diseñador'
elseif ocupacionOArea:find('[Pp]resentador') or ocupacionOArea:find('[Cc]onductor') then
cabecera = 'televisión'
elseif ocupacionOArea:find('[Mm]odelo') then
cabecera = 'modelo'
elseif ocupacionOArea:find('[Mm]ilitar') then
cabecera = 'militar'
elseif ocupacionOArea:find('[Pp]apa') or ocupacionOArea:find('[Oo]bispo') or
ocupacionOArea:find('[Cc]ardenal') or ocupacionOArea:find('[Pp]atriarca') then
cabecera = 'religioso'
elseif ocupacionOArea:find('[Tt]orero') then
cabecera = 'torero'
elseif ocupacionOArea:find('[Vv]ideojuego') then
cabecera = 'videojuego'
elseif ocupacionOArea:find('[Yy]ou[Tt]uber') or ocupacionOArea:find('[Vv][Tt]uber') then
cabecera = 'youtuber'
else
cabecera = 'por defecto'
end
local OrdenacionDiaconal
if argumento['diaconado por'] then
OrdenacionDiaconal = argumento['diaconado'] .. '<small> por ' ..argumento['diaconado por'].. '</small>'
else
OrdenacionDiaconal = argumento['diaconado']
end
local OrdenacionSacerdotal -- ?item P793 Q41463697 Q585
if argumento['presbiterado por'] then
OrdenacionSacerdotal = argumento['presbiterado'] .. '<small> por ' ..argumento['presbiterado por'].. '</small>'
else
OrdenacionSacerdotal = argumento['presbiterado']
end
local OrdenacionEpiscopal -- ?item P793 Q125375 Q585
if argumento['episcopado por'] then -- ?item P793 Q125375 Q1598
OrdenacionEpiscopal = argumento['episcopado'] .. '<small> por ' ..argumento['episcopado por'].. '</small>'
else
OrdenacionEpiscopal = argumento['episcopado']
end
local Cardenalato -- ?item P793 Q41154026 Q585
if argumento['cardenalato por'] then -- ?item P793 Q41154026 Q748
Cardenalato = argumento['cardenalato'] .. '<small> por ' ..argumento['cardenalato por'].. '</small>'
else
Cardenalato = argumento['cardenalato']
end
formato = formatos[cabecera] or {}
local estiloTituloFicha, estiloTituloSecciones
estiloTituloFicha = formato['estiloTituloFicha']
estiloTituloSecciones = formato['estiloTituloSecciones'] or formato['estiloTituloFicha']
if hayCargos == true then
cargosocupados = ''
else
cargosocupados = argumento['cargo ocupado'] or propiedad('P39', {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula',
ordenar='por fecha',
['linkback']='sí',
['valor-función'] = ModuloWikidataFormatos.formatoCargo
})
end
if argumento['ranking'] or argumento['ránking'] then
rankingajedrez= (argumento['ranking'] or argumento['ránking']) .. frame:preprocess('<ref> [http://ratings.fide.com/toplist.phtml Clasificación FIDE] </ref>')
end
local sitioWeb
if argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb'] then
sitioWeb = noAlargar(enlazarURL(argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb']))
else
sitioWeb = propiedad('P856', {['valor-función'] = formatoURL, ['linkback']='sí'})
end
-- Imagen y pie de la imagen
local imagen = argumento['imagen'] or argumento['Imagen'] or argumento['foto']
local pieDeImagen
if imagen then
pieDeImagen = argumento['pie de imagen'] or argumento['pieimagen'] or
argumento['descripción'] or argumento['descripcion'] or
argumento['pie de foto'] or argumento['piedefoto'] or
argumento['textoimagen'] or argumento['TextoImagen'] or argumento['texto_imagen'] or
argumento['pie de foto']
else
imagen, pieDeImagen = obtenerImagenWikidata()
-- Pendiente obtener el pie del calificativo P2096
end
local relacionados = argumento['relacionados'] or ''
if relacionados and mw.ustring.len(relacionados) > 200 then
relacionados = ''
end
local Ficha = {
wikidata = not obtenerDatosWikidata and 'no',
clase = 'biography vcard',
-- Título
tipocabecera = 'persona',
titulo = nombre,
--colorfondo = colorfondo, -- No se usa
estilotitulo = estiloTituloFicha,
--Imagen
--De momento no se pone una raya como en la ficha de escritor tras la imagen
imagen = imagen,
['tamañoimagen']= argumento['tamaño de imagen'] or argumento['tamaño'] or
argumento['tamaño imagen'] or argumento['tamañoimagen'] or argumento['tamañodelaimagen'] or
argumento['tamaño de foto'] or
'220px', -- or '200px' en la ficha de escritor, 192 en la ficha de artista. Tomo por defecto 220, el tamaño de thumb
pie = pieDeImagen,
-- Pendiente: en la ficha de escritor el texto se pone entre <small> y en la de artista se usa el estilo font-size:smaller
--Etiquetas y datos
estiloetiqueta = 'width:33%', -- 25% en la ficha de escritor. Sin especificar en la de persona
--'padding:0.2em 1.0em 0.2em 0.2em; background-color:transparent; line-height:1.2em;', -- En la ficha de persona original
estilodatos = 'line-height:1.3em; vertical-align:middle;',
tablaCargos,
{tipo='sección',
['titulo'] = 'Información personal', -- Ver la ficha de noble o la ficha de diseñador
estilotitulo = estiloTituloSecciones,
{'Nombre completo', -- solo si no coincide con:
(nombre_completo ~= nombre) and -- - el nombre que se muestra en el título de la ficha
(nombre_completo ~= nombre_nacimiento_sin_lapiz) and -- - o con el nombre de nacimiento
nombre_completo},
{'Nombre de nacimiento', -- solo si no coincide con el nombre que se muestra en el título de la ficha
(nombre_nacimiento_sin_lapiz ~= nombre)
and nombre_nacimiento},
nombresNativos,
{'Nombre religioso', argumento['nombre religioso'] or propiedad('P1635')},
{'Apodo', argumento['apodo'] or propiedad('P1449')},
{'Otros nombres', argumento['otros nombres'] or argumento['alias'], -- ¿No es lo mismo que el apodo?????
clase='nickname'},
{'Nacimiento', nacimiento},
{'Desaparición', desaparicion},
{'Fallecimiento', fallecimiento},
{'Causa de muerte', siNoEs(argumento['causa muerte'] or
propiedad('P509', enMayusculas) or
propiedad('P1196', enMayusculas), 'Causas naturales')}, -- circunstancias de la muerte
{'Sepultura', argumento['lugar de descanso'] or propiedad('P119', {['valor-módulo'] = 'Wikidata/Formato lugar', ['formatoTexto'] = 'mayúscula', ['linkback'] = 'sí'}) },
{'Residencia', sinBandera(argumento['residencia'] or
argumento['país_de_residencia'] or argumento['pais_de_residencia'] or
argumento['lugar_de_residencia']) or
propiedad('P551', {['debeExistir'] = 'sí', ['linkback']='sí', ['formatoTexto'] = 'mayúscula'}),
clase='etiqueta'},
{'Nacionalidad', sinBandera(argumento['nacionalidad'] or argumento['Nacionalidad'] or argumento['ciudadanías']) or --Pendiente hacer que salga el gentilicio
require('Módulo:Wikidata/Formatos país').formatoNacionalidad(elementoTabla(Entidad,'claims','P27'),{
['formatoTexto'] = 'mayúscula',
['propiedad'] = 'P27',
['linkback']='sí', ['entityId']=elementoTabla(Entidad,id)}),
clase='category'},
{'Ciudadanía', sinBandera(argumento['ciudadanía'] or -- ¿No es lo mismo que la nacionalidad?
argumento['ciudadania']),
clase='category'},
{'Etnia', --propiedad('P172', enMayusculas) or
argumento['etnia'] or argumento['grupo étnico'],
clase='category'},
{'Religión', argumento['religión'] or propiedad('P140', debeExistir)},
{'Lengua materna', argumento['lengua materna'] or argumento['Lengua_materna'] or argumento['lengua_materna'] or propiedad('P103', enMayusculas)},
},
{tipo='sección',
estilotitulo = estiloTituloSecciones,
['titulo'] = 'Características físicas',
{'Altura', argumento['altura'] or argumento['estatura'] or propiedad('P2048', {['valor-función']='magnitud', ['valor-módulo'] = 'Wikidata/Formato magnitud', ['linkback']='sí'})},
{'Peso', argumento['peso'] or propiedad('P2067', {['valor-función']='magnitud', ['valor-módulo'] = 'Wikidata/Formato magnitud', ['linkback']='sí'})},
{'Medidas', argumento['medidas']},
{'Ojos', argumento['color de ojos'] or propiedad('P1340', enMayusculas)},
{'Cabello', argumento['color de cabello'] or propiedad('P1884', enMayusculas)},
{'[[Mamoplastia de aumento|Pecho natural]]', argumento['busto natural']},
--{'[[Orientación sexual]]', propiedad('P91', enMayusculas) or argumento['orientación sexual'] or argumento['orientación real']}
},
{tipo='sección',
-- Familia.
estilotitulo = estiloTituloSecciones,
['titulo'] = 'Familia', -- Ver la ficha de noble
-- En el caso del cónyuge tiene preferencia el argumento hasta que se muestre los calificativos.
clase ='plainlist', -- Mostrar las listas sin viñetas
{'Familia', argumento['familia'] or propiedad('P53', debeExistir)},
{(padres and 'Padres') or (padre and 'Padre') or 'Madre', -- Mostrar padres, padre o madre según esté informado ambos o solo uno de ellos
padres or padre or madre},
{'Cónyuge', estaEnlazado(argumento['cónyuge'] or argumento['conyuge'] or argumento['Cónyuge'] or argumento['Conyuge'] or
propiedad('P26', conPeriodo))},
{'Pareja', estaEnlazado(argumento['pareja'] or propiedad('P451', conPeriodo))},
{'Hijos', estaEnlazado(argumento['hijos'] or argumento['Hijos']) or
propiedad('P40', {['lista'] = 'no ordenada', ['debeExistir'] = 'sí', ['linkback']='sí'}) or
propiedad('P1971', sinEnlazar)
},
{'Familiares', estaEnlazado(argumento['familiares'])}, --- ¿¿¿¿¿¿¿¿¿??????????? -- Hermano: P7, padastro: p43, pariente: p1038
},
{tipo='sección',
['titulo'] = 'Educación',
estilotitulo = estiloTituloSecciones,
{'Educación', educacion},
{etiquetaEducadoEn, almamater, clase='plainlist'},
{'Posgrado', argumento['posgrado']},
{'Tesis doctoral',
entreParentesis(
(argumento['url tesis'] and enlazarURL(argumento['url tesis'], ModuloFormatoTexto.enCursivas(argumento['título tesis']))-- Si se informa la url
) or (not argumento['url tesis'] and ModuloFormatoTexto.enCursivas(argumento['título tesis']) -- Si no se informa la url
)
, argumento['año tesis'])
},
{'Supervisora doctoral', argumento['supervisora doctoral']},
{'Supervisores doctorales' , argumento['supervisores doctorales']},
{'Supervisor doctoral' , argumento['supervisor doctoral'] or propiedad('P184')},
{etiquetaAlumnoDe, argumento['alumno de'] or propiedad('P1066', conPeriodoDebeExistir), clase='plainlist'},
},
{tipo='sección',
['titulo'] = 'Información profesional',
estilotitulo = estiloTituloSecciones,
{'Ocupación', ocupacion, clase='role'},
{'Área', area},
{etiquetaAnyosActivo, argumento['años activo'] or argumento['años activa'] or argumento['añosactivo'] or
argumento['periodo'] or argumento['período'] or argumento['Periodo'] or
argumento['tiempo'] or argumento['Tiempo'] or argumento['años actividad'] or
formatoPeriodo({ -- falta que salga el lápiz
['P580']={[1]=elementoTabla(Entidad, 'claims','P2031',1,'mainsnak')},
['P582']={[1]=elementoTabla(Entidad, 'claims','P2032',1,'mainsnak')}
})},
{etiquetaConocidoPor, argumento['conocido por'] or argumento['conocido']},
{'Cargos ocupados', cargosocupados,clase='plainlist'}, -- políticos o en empresas
{'Tratamiento', argumento['tratamiento']},
{'Salario', argumento['salario']},
{'Patrimonio', argumento['patrimonio'] or argumento['fortuna']},
{'Empresa', argumento['empresa']},
{'Estudio', argumento['nombre estudio']}, -- Arquitectos
{'Restaurantes', argumento['restaurantes']}, -- Para cocineros. Restaurantes en los que ha trabajado.
},
{tipo='sección',
['título'] = 'Información religiosa',
estilotitulo = estiloTituloSecciones,
{'[[Sacramento del orden|Ordenación diaconal]]', OrdenacionDiaconal},
{'Ordenación sacerdotal', OrdenacionSacerdotal},
{'Ordenación episcopal', OrdenacionEpiscopal},
{'Proclamación cardenalicia', Cardenalato},
{'Título cardenalicio', argumento['título cardenalicio']},
{'Iglesia', argumento['iglesia']},
{'[[Secularización]]', argumento['secularización']},
{'[[Beatificación]]', argumento['beatificación']},
{'[[Canonización]]', argumento['canonización']},
{'Festividad', argumento['festividad'] or propiedad('P841', {['enlace'] = 'no'})},
{'Atributos', argumento['atributos']},
{etiquetaVeneradoEn, argumento['venerado en'] or propiedad('P1049')},
{'Patronazgo', argumento['patronazgo'] or propiedad('P417')},
{'Santuario', argumento['santuario']},
},
-- Sección artística (actores y ¿presentadores?)
{tipo='sección',
['titulo'] = seccionartistica,
estilotitulo = estiloTituloSecciones,
{'Rol debut' , argumento['rol debut']},
{'Año de debut' , argumento['rol debut'] and argumento['año debut']},
--{'Año de retiro', argumento['año retiro'] or propiedad('P2032')},
{'Películas' , argumento['número de películas']},
{'Serie' , argumento['serie']},
},
{'Empleador', argumento['empleador'] or
argumento['institución_de_trabajo'] or
argumento['nombre_estudio'] or
propiedad('P108', conPeriodo),
clase ='plainlist'},
--Profesores
{'Estudiantes doctorales', argumento['estudiantes doctorales'] or propiedad('P185', debeExistir)},
{(ocupacionOArea and ocupacionOArea:find('[Pp]rofesor') and 'Estudiantes') or 'Alumnos', argumento['estudiantes'] or propiedad('P802', debeExistir)},
-- Periodistas, presentadores y videoblogueros
{tipo='sección',
{'Medio', argumento['medio de comunicación']}, -- Unas veces informados con el significado de área y otras con el empleador
{'Canal', argumento['canal']},
{'Programas', argumento['programas'] or argumento['programa']},
},
-- Videoblogueros, en especial youtubers
{tipo='sección',
{'Vídeos', argumento['videos']},
{'Suscriptores', argumento['suscriptores']},
{'Vistas totales', argumento['vistas totales']},
},
-- Ocupación (escritores, artistas, periodistas, diseñadores, etc)
-- Información artística
{tipo='sección',
plural(argumento['movimiento'] or argumento['Movimiento'] or argumento['movimientos'] or
propiedad('P135', {
['valor-módulo'] = 'Wikidata/Formato movimiento',
['valor-función'] = 'formatoMovimiento',
['linkback']='sí',
['calificativo'] = formatoPeriodo,
ordenar='por fecha', ['formatoTexto'] = 'mayúscula',}), 'Movimiento', 'Movimientos'),
{'Seudónimo', argumento['seudónimo'] or argumento['Seudónimo'] or argumento['alias'] or argumento['Alias'] or propiedad('P742')},
{'Lengua literaria', argumento['lengua_literaria'] or argumento['Lengua_literaria']},
plural(argumento['género'] or argumento['Género'] or propiedad('P136', enMayusculas), 'Género', 'Géneros'),
plural(argumento['instrumento'] or propiedad('P1303', enMayusculas), 'Instrumento', 'Instrumentos'),
{'Tipo de voz', argumento['voz'] or argumento['tipo de voz'] or argumento['tesitura'] or propiedad('P412', enMayusculas)},
plural(argumento['compañía discográfica'] or propiedad('P264', conPeriodo), 'Discográfica', 'Discográficas', 'plainlist'),
},
-- Obras notables. Se ponen de momento en cursivas pero es incorrecto en el caso de arquitectos.
{'Obras notables', argumento['obras destacadas'] or
argumento['obras notables'] or argumento['obras_notables'] or argumento['Obras notables'] or
argumento['obras'] or
argumento['proyectos_representativos'] or propiedad('P800',{['enlace']='sí', ['lista'] = 'no ordenada', ['debeExistir'] = 'sí', ['formatoTexto']='cursivas', ['linkback']='sí'}),
clase='plainlist'
},
{'Proyectos representativos', argumento['proyectos representativos']},
{'Artistas relacionados', relacionados},
{'[[Autor de nombre científico#Abreviatura del autor|Abreviatura en botánica]]',
argumento['abreviatura en botánica'] or propiedad('P428')},
{'[[Autor de nombre científico|Abreviatura en zoología]]',
argumento['abreviatura en zoología'] or propiedad('P835')},
--{'', listaDesplegable(etiquetaInfluencias, argumento['influenciado por'] or argumento['influido por'] or
-- argumento['influencias'] or argumento['Influencias'], frame)},
--{'', listaDesplegable('Influyó a', argumento['influyó en'] or argumento['influyó'] or argumento['Influyó'], frame)},
-- Militares
{'Lealtad', argumento['lealtad'] or propiedad('P945', enMayusculas)},
{'Rama militar', argumento['rama'] or propiedad('P241', enMayusculas)},
{'Unidad militar', argumento['unidad'] or propiedad('P7779', enMayusculas)},
{'Mandos', argumento['mandos']},
{'[[Grado militar|Rango militar]]', argumento['rango'] or propiedad('P410', conPeriodo), clase='plainlist'},
{'Conflictos', argumento['conflictos'] or argumento['batallas'] or propiedad('P607', enMayusculas)},
-- Astronautas (un subtipo de militar)
{'Misiones espaciales', argumento['misiones espaciales'] or propiedad('P450')},
{'Tiempo en el espacio', argumento['tiempo espacio']},
-- Toreros
{'Debut becerrista', argumento['debut becerrista']},
{'Debut [[picador]]', argumento['debut picador']},
{'Debut [[novillero]]', argumento['debut novillero']},
{'Alternativa', argumento['alternativa']},
{'Confirmación de alternativa', argumento['alternativa confirmación']},
{'Apoderado', argumento['apoderado']},
{'Escalafón general', argumento['escalafón']},
{'Invención', argumento['invención']},
{'Triunfos', argumento['triunfos']},
{'Retirada definitiva', argumento['retirada']},
-- Ajedrecistas
{tipo='sección',
{'Título', argumento['título'] or argumento['titulo']}, -- <!-- Su majestad, primera dama, etc -->
{etiquetacampeon, argumento['campeón'] or argumento['campeon']},
{'[[Sistema de puntuación Elo|Elo]]', propiedad('P1087',{['formatoUnidad'] = 'número', ['calificativo'] = 'P585', ['linkback']='sí', ['ordenar'] = 'por fecha', ['uno'] = 'último'}) or argumento['elo'] }, --
{'[[Sistema de puntuación Elo|Mejor elo]]', argumento['mejor elo']},
{'Escalafón FIDE', rankingajedrez},
{'Mejor escalafón', argumento['mejor ranking']},
{'Término', argumento['término'] or -- <!--Años bajo los cuales la persona tuvo el título (el de arriba xD) -->
argumento['termino']},
{'Predecesor', argumento['predecesor']},
{'Predecesora', argumento['predecesora']},
{'Sucesor', argumento['sucesor']},
{'Sucesora', argumento['sucesora']},
},
{'Partido político', argumento['partido político'] or argumento['partido'] or propiedad('P102', conPeriodo), clase='plainlist'},
{'Orden religiosa', argumento['congregación'] or propiedad('P611', enMayusculas)},
{'Afiliaciones', argumento['afiliaciones'] or propiedad('P1416')},
{'Miembro de', argumento['miembro de'] or argumento['sindicato'] or propiedad('P463', conPeriodoDebeExistir), clase='plainlist'},
{'Central sindical', argumento['central sindical'], clase='plainlist'},
-- Web
{'Sitio web', sitioWeb},
{tipo='sección',
['titulo'] = 'Premios artísticos', -- Ver la ficha de noble o la ficha de diseñador
estilotitulo = estiloTituloSecciones,
{'[[Premios Óscar]]', argumento['premios óscar']},
{'[[Premios Globo de Oro|Globos de Oro]]', argumento['premios globo de oro']},
{'[[Premios BAFTA]]', argumento['premios bafta']},
{'[[Premios Emmy]]', argumento['premios emmy']},
{'[[Premios del Sindicato de Actores|Premios SAG]]', argumento['premios sag']},
{'[[Premios Tony]]', argumento['premios tony']},
{'[[Premios Grammy]]', argumento['premios grammy']},
{'[[Festival de Cannes]]', argumento['premios cannes']},
{'[[Berlinale]]', argumento['premios berlinale']},
{'[[Festival Internacional de San Sebastián]]', argumento['premios san sebastian']},
{'[[Festival Internacional de Cine de Moscú]]', argumento['premios moscu']},
{'[[Premios Goya]]', argumento['premios goya'] },
{'[[Premios César]]', argumento['premios césar'] or argumento['premios cesar']},
{'[[Premios Ariel]]', argumento['premios ariel']},
{'[[Premios Cóndor de Plata]]', argumento['premios cóndor'] or argumento['premios condor']},
{'[[TP de Oro]]', argumento['premios tp de oro']},
{'[[Premios Ondas]]', argumento['premios ondas']},
{'[[Premios Iris (España)|Premios Iris]]', argumento['premios atv']},
{'[[Premios Protagonistas]]', argumento['premios protagonistas']},
{'[[Antena de Oro|Premios Antena de Oro]]', argumento['premios antena de oro']},
{'[[Premios Micrófono de Oro]]', argumento['premios micrófono de oro']},
{'[[Premio APM al Mejor Periodista del Año|Premio Víctor de la Serna]]', argumento['premios víctor de la serna']},
{'Otros premios', argumento['otros premios']},
},
{tipo='sección',
['titulo'] = 'Carrera deportiva', -- Ver la ficha de noble o la ficha de diseñador
estilotitulo = estiloTituloSecciones,
{'Deporte', argumento['deporte'] or propiedad('P641', enMayusculas)},
{'Representante de', argumento['representante'] or propiedad('P1532', conPeriodo)},
},
{tipo='sección',
['titulo'] = 'Perfil de jugador',
estilotitulo = estiloTituloSecciones,
{'Juegos', argumento['juegos'] or propiedad('P2416')},
{'Posición', argumento['posición'] or propiedad('P413')},
{'Número', argumento['número'] or propiedad('P1618')},
{'Equipos', argumento['equipos'] or propiedad('P54')},
{'Ligas', argumento['ligas'] or propiedad('P118')},
{'Selección', argumento['selección']},
{'Medallista', argumento['medallista olímpico']},
{'Entrenador', argumento['entrenador'] or propiedad('P6087')},
{'Plataformas de transmisión', argumento['plataforma']},
},
{'',seccionDesplegable('Títulos y <br> reconocimientos',argumento['títulos'], frame,estiloTituloSecciones)},
-- Los premios pueden ser para varias ocupaciones por lo que se ponen al final
-- Premios, condecoraciones, distinciones, etc.
{'Distinciones', argumento['premios'] or argumento['Premios'] or
argumento['premio'] or argumento['Premio'] or
argumento['premios2'] or
obtenerPremios(Entidad)
, clase ='plainlist'}, -- Mostrar las listas sin viñetas
{tipo='sección',
['titulo'] = 'Medallas',
estilotitulo = estiloTituloSecciones,
{'', argumento['medallas'] },
},
}
if filterByOccupation( {
'Q931260', -- asesino
'Q484188', -- asesino en serie
'Q1154323', -- asesino relámpago
'Q2159907', -- criminal
'Q14886050', -- terrorista
'Q22962951', -- violador
'Q26267537', -- violador en serie
}, {
argumento['cargos criminales'],
argumento['condena'],
argumento['situación penal'],
argumento['víctimas'],
} ) then
local victimas = argumento['víctimas']
if victimas then
local ocupacionesValidasVictimas = {'Q484188', 'Q14886050', 'Q26267537', 'Q1154323'} -- asesino en serie, terrorista, violador en serie y asesino relámpago
for k,v in pairs(ocupacionesValidasVictimas) do
local snak = propiedad('P106', {['valor-función'] = formatoId})
if snak and snak:match(v) then
victimas = argumento['víctimas']
break
else
victimas = ''
end
end
end
table_merge(Ficha, {
{tipo='sección',
['titulo'] = 'Información criminal',
estilotitulo = estiloTituloSecciones,
{'[[Delito|Cargos criminales]]', argumento['cargos criminales'] or propiedad('P1399'), clase='plainlist'},
-- P2632 puede ser usado en alguno de los dos parámetros de abajo
{'[[Sentencia (derecho)|Condena]]', argumento['condena']},
{'Situación penal', argumento['situación penal']},
{'Víctimas', victimas},
}
})
end
table_merge(Ficha, {
-- Con etiqueta/datos como en las fichas de escritor y artista en vez de como en la ficha de persona
{'Firma', firma },
{tipo='sección',
titulo ='Notas',
estilotitulo='border-top:1px solid #c0c0c0;text-align:left',
{'', argumento['notas'], estilodatos='text-align:left;font-size:90%; line-height:1.2em'}
},
entidad = argumento['id'], -- para el enlace final a wikidata
})
categorias = {}
local NF = require('Módulo:NF')
-- table.insert(categorias, NF.catLivingStatus(argumento['fecha de nacimiento'], argumento['fecha de fallecimiento'], true ) )
table.insert(categorias, NF.catSexGenderIdentity())
if argumento['títulos secciones'] == '' then -- "no" al llamar a la ficha
--if true then return require('Módulo:Tablas').tostring(Ficha) end
eliminarTitulosSecciones(Ficha)
end
namespace = mw.title.getCurrentTitle().namespace
if categorias[1] and (namespace == 0 or namespace == 104) then
return ModuloFicha.infobox(Ficha) .. table.concat(categorias)
else
return ModuloFicha.infobox(Ficha)
end
end
function table_merge(t1, t2)
for k,v in ipairs(t2) do
if type(k) == 'string' then
t1[k] = v
else
table.insert(t1, v)
end
end
return t1
end
function filterByOccupation( wikidataOccupations, localArguments )
if argumento['wikidata'] ~= 'no' then
local id = argumento['id'] or mw.wikibase.getEntityIdForCurrentPage()
if mw.wikibase.isValidEntityId( tostring( id ) ) then
local wd = mw.wikibase.getAllStatements(id, 'P106') -- Occupation
for k,v in pairs(wd) do
local oc = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id')
for i,j in pairs( wikidataOccupations ) do
if i == ec then
return true
end
end
end
end
end
for k,v in pairs(localArguments) do
if v and v ~= 'no' then
return true
end
end
return false
end
function eliminarTitulosSecciones (tabla)
if tabla.tipo == 'sección' then
tabla.titulo = nil
end
for k, v in pairs( tabla ) do
if type(v) == 'table' then
eliminarTitulosSecciones(v)
end
end
--if true then return require('Módulo:Tablas').tostring(tabla) end
end
function generarcargo(argumento,numero,frame)
dato=numero --se requieren dos variables por el primer parámetro
if numero == 1 then numero ='' end --si es el primer cargo, entonces no tiene número
if argumento ['cargo'..numero] == nil then titulo=''
elseif argumento['escudo'..numero] == nil then titulo=argumento['cargo'..numero] -- si no tiene escudo entonces dejar en blanco, si tiene escudo ponerlo
else titulo='[[Archivo:'..argumento['escudo'..numero]..'|44x40px]]<br />'..argumento['cargo'..numero] end
if argumento['distrito'..numero] then titulo = titulo..'<br /><small>por '..argumento['distrito'..numero]..'</small>' end
if argumento['embajadorde'..numero] then titulo = titulo .. frame:preprocess('<br /> {{bandera|'.. argumento['embajadorde'..numero] ..'|tamaño=44x40px}}') end--{{bandera|{{{embajadorde}}}|tamaño=44x40px}}
if argumento['país'..numero] then titulo = titulo .. frame:preprocess('{{bandera|'.. argumento['país'..numero] ..'|tamaño=44x40px}}') end
if argumento['subtítulo'..numero] then titulo = titulo .. '<br /><small>'..argumento['subtítulo'..numero]..'</small>' end
periodo = ''
if argumento['inicio'..numero] and argumento['final'..numero] then
periodo = argumento['inicio'..numero]..'-'.. argumento['final'..numero]
elseif argumento['final'..numero] then
periodo = 'Hasta el ' .. argumento['final'..numero]
elseif argumento['inicio'..numero] then
titulo = titulo .. '<br /> <small> Actualmente en el cargo</small>'
periodo = 'Desde el '..argumento['inicio'..numero]
end
cadenatexto={tipo='sección',
['titulo']=titulo,
estilotitulo = 'background-color:#E6E6FA;',
{'', periodo},
{'Junto con', argumento['juntoa'..numero] },
{'Nominado por', argumento['nominado'..numero] },
{'Nominada por', argumento['nominada'..numero] },
{'Designado por', argumento['designado'..numero] },
{'Designada por', argumento['designada'..numero] },
{'[[Monarca]]', argumento['monarca'..numero] },
{'[[Presidente]]', argumento['presidente'..numero] },
{'[[Primer ministro]]', argumento['primerministro'..numero] },
{'[[Canciller]]', argumento['canciller'..numero] },
{'[[Gobernador]]', argumento['gobernador'..numero] },
{'[[Alcalde]]', argumento['alcalde'..numero] },
{'[[Alcalde|Alcaldesa]]', argumento['alcaldesa'..numero] },
{'[[Jefe de Gobierno]]', argumento['jefe'..numero] },
{'[[Jefe de Gobierno|Jefa de Gobierno]]', argumento['jefa'..numero] },
{'[[Gabinete (política)|Gabinete]]', argumento['gabinete'..numero] },
{'[[Gabinete (política)|Consejo de Ministros]]', argumento['consejo'..numero] },
{'Secretario', argumento['secretario'..numero]},
{'Secretaria', argumento['secretaria'..numero]},
{'[[Vicepresidente]]', argumento['vicepresidente'..numero] },
{'[[Vicepresidente|Vicepresidenta]]', argumento['vicepresidenta'..numero] },
{'[[Vice primer ministro]]', argumento['viceprimerministro'..numero] },
{'[[Vice primer ministro|Vice primera ministra]]', argumento['viceprimeraministra'..numero] },
{'Vicecanciller', argumento['vicecanciller'..numero]},
{'[[Vicegobernador]]', argumento['vicegobernador'..numero] },
{'[[Vicegobernador|Vicegobernadora]]', argumento['vicegobernadora'..numero] },
{'[[Teniente gobernador]]', argumento['teniente'..numero] },
{'Vicealcalde', argumento['vicealcalde'..numero] },
{'Vicejefe de gobierno', argumento['vicejefe'..numero]},
{'Predecesor', argumento['predecesor'..numero]},
{'Predecesora', argumento['predecesora'..numero]},
{'Sucesor', argumento['sucesor'..numero]},
{'Sucesora', argumento['sucesora'..numero]},
{argumento[dato..'data1'], argumento[dato..'data2'] },
{argumento[dato..'data3'], argumento[dato..'data4'] },
{'','<hr>'}
}
return cadenatexto
end
-- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados
function propiedad(idPropiedad,opciones)
-- No obtener ninguna propiedad de Wikidata para las personas fallecidas si se accede con el parámetro wikidata=no
if not obtenerDatosWikidata then
return
end
if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
if not opciones then
opciones = {['linkback']='sí'}
end
opciones.entityId = Entidad.id
--if idPropiedad =='P1477' then return require('Módulo:Tablas').tostring(Entidad) end -- FALTA
opciones.propiedad = idPropiedad
opciones.rangoMayor = 'sí' -- evitar tomar valores deprecados
valorPropiedad = getPropiedadWikidata(opciones,Entidad.claims[idPropiedad])
if not valorPropiedad then
return
end
if valorPropiedad:match('%[%[:d:') then
algunaPropiedadEnlazaWikidata = true
end
return valorPropiedad
end
end
function listaDesplegable(titulo, lista, frame)
if not lista then
return
end
formatoprevio='background:transparent'
return frame:preprocess('{{lista desplegable|título=' .. titulo ..
--'|marco_estilo=border:0; padding:0; border-top:1px solid #c0c0c0;' ..
'|marco_estilo=border:0; padding:0;' ..
'|título_estilo=background-color:#8DB1C3;color:#000; text-align:left|lista_estilo=padding-left:33%;text-align:left; display:none|1='
.. lista .. '}}')
end
function seccionDesplegable(titulo, lista, frame, estilotitulo)
if not lista then
return
end
return frame:preprocess('{{Sección desplegable|título=' .. titulo ..
--'|marco_estilo=border:0; padding:0; border-top:1px solid #c0c0c0;' ..
'|datos=<div style="text-align:left;margin: 1px; padding: 2px; border:1px">'.. lista .. '</div>|estilotitulo='.. (estilotitulo or '') ..';}}')
end
function estaEnlazado(que)
-- De momento devolver siempre que está enlazado pues falla en por ejemplo:
-- |Hijos = 6{{#tag:ref|Entre ellos [[Catalina Parra|Catalina]], [[Colombina Parra|Colombina]], Juan de Dios y Ricardo Nicanor «Chamaco».<ref>[http://www.caras.cl/libros/nicanor-parra-cronologia-intima/ Nicanor Parra: Cronología íntima]</ref>|group=nota}}
if true then return que end
if not que then
return
end
for contenido in que:gmatch("%[%[(.+)]]") do
if not contenido:match('^:d:') and
not contenido:match('^Categoría:') then
return que
end
end
end
function formatoOcupacionMasculino(valor, opciones, frame, calificativos)
local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion, opciones)
end
function formatoOcupacionFemenino(valor, opciones, frame, calificativos)
local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor)
-- Para las ocupaciones más frecuentes no se accederá a Wikidata
local tablaOcupacionesFemeninas={
['Q40348' ] = 'abogada',
['Q16631371'] = 'académica',
['Q15253558'] = 'activista',
['Q1476215' ] = 'activista por los derechos humanos',
['Q33999' ] = 'actriz',
['Q10800557'] = 'actriz de cine',
['Q11481802'] = 'actriz de doblaje',
['Q948329' ] = 'actriz de género',
['Q2259451' ] = 'actriz de teatro',
['Q10798782'] = 'actriz de televisión',
['Q2405480' ] = 'actriz de voz',
['Q488111' ] = 'actriz pornográfica',
['Q10873124'] = 'ajedrecista',
['Q4773904' ] = 'antropóloga',
['Q2478141' ] = 'aristócrata',
['Q42973' ] = 'arquitecta',
['Q483501' ] = 'artista',
['Q7019111' ] = 'asistenta social',
['Q11063' ] = 'astrónoma',
['Q18814623'] = 'autobiógrafa',
['Q482980' ] = 'autora',
['Q5716684' ] = 'bailarina',
['Q805221' ] = 'bailarina de ballet',
['Q864503' ] = 'bióloga',
['Q8246794' ] = 'bloguera',
['Q177220' ] = 'cantante',
['Q2865819' ] = 'cantante de ópera',
['Q488205' ] = 'cantautora',
['Q901' ] = 'científica',
['Q15212951'] = 'cineasta',
['Q1086863' ] = 'columnista',
['Q245068' ] = 'comediante',
['Q36834' ] = 'compositora',
['Q2722764' ] = 'conductora radiofónica',
['Q2490358' ] = 'coreógrafa',
['Q18939491'] = 'diarista',
['Q193391' ] = 'diplomática',
['Q2526255' ] = 'directora de cine',
['Q5322166' ] = 'diseñadora',
['Q627325' ] = 'diseñadora gráfica',
['Q462390' ] = 'docente',
['Q214917' ] = 'dramaturga',
['Q188094' ] = 'economista',
['Q974144' ] = 'educadora',
['Q131524' ] = 'emprendedora',
['Q43845' ] = 'empresaria',
['Q186360' ] = 'enfermera',
['Q11774202'] = 'ensayista',
['Q36180' ] = 'escritora',
['Q4853732' ] = 'escritora de literatura infantil',
['Q1281618' ] = 'escultora',
['Q11900058'] = 'exploradora',
['Q13472585'] = 'filántropa',
['Q4964182' ] = 'filósofa',
['Q169470' ] = 'física',
['Q33231' ] = 'fotógrafa',
['Q28389' ] = 'guionista',
['Q201788' ] = 'historiadora',
['Q715301' ] = 'historietista',
['Q82594' ] = 'informática teórica',
['Q16533' ] = 'jueza',
['Q4379701 '] = 'jugadora profesional',
['Q185351' ] = 'jurista',
['Q644687' ] = 'ilustradora',
['Q14467526'] = 'lingüista',
['Q1371925' ] = 'locutora',
['Q2251335' ] = 'maestra',
['Q191633' ] = 'mangaka',
['Q2412523' ] = 'matadora',
['Q170790' ] = 'matemática',
['Q39631' ] = 'médica',
['Q4610556' ] = 'modelo',
['Q639669' ] = 'música',
['Q6625963' ] = 'novelista',
['Q1930187' ] = 'periodista',
['Q1028181' ] = 'pintora',
['Q728711' ] = 'playmate',
['Q49757' ] = 'poeta',
['Q82955' ] = 'política',
['Q270389' ] = 'presentadora de noticias',
['Q947873' ] = 'presentadora de televisión',
['Q3282637' ] = 'productora de cine',
['Q37226' ] = 'profesora',
['Q121594' ] = 'profesora',
['Q16145150'] = 'profesora de música',
['Q1622272' ] = 'profesora de universidad',
['Q212980' ] = 'psicóloga',
['Q3242115' ] = 'revolucionaria',
['Q3068305' ] = 'salonnière',
['Q622807' ] = 'seiyū',
['Q512314' ] = 'socialité',
['Q2306091' ] = 'socióloga',
['Q1141526' ] = 'stripper',
['Q1234713' ] = 'teóloga',
['Q549322' ] = 'torera',
['Q333634' ] = 'traductora',
['Q350979' ] = 'zoóloga',
}
local etiquetaOcupacionCorregida = tablaOcupacionesFemeninas[idEntidadOcupacion]
if etiquetaOcupacionCorregida then
return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacionCorregida, idEntidadOcupacion, opciones)
else
-- La ocupación no está en la tabla anterior. Se intenta obtener de la propiedad P2522 en Wikidata de la ocupación
etiquetaOcupacionCorregida = ModuloWikidata.getPropiedadEnEspanyol(idEntidadOcupacion, 'P2521') or etiquetaOcupacion
return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacionCorregida, idEntidadOcupacion, opciones)
end
end
function obtenerValorCalificativo(Propiedad, Calificativo, ValorPropiedad)
-- Obtener el valor del primer calificativo de la propiedad con el valor recibido
if not Entidad or not Entidad.claims or not Entidad.claims[Propiedad] then
return
end
for k,v in pairs(Entidad.claims[Propiedad]) do
if v.mainsnak
and v.mainsnak.datavalue
and v.mainsnak.datavalue.value
and v.mainsnak.datavalue.value['numeric-id'] == ValorPropiedad
and v.qualifiers
and v.qualifiers[Calificativo]
and v.qualifiers[Calificativo][1]
and v.qualifiers[Calificativo][1].datavalue then
return v.qualifiers[Calificativo][1].datavalue.value
end
end
end
function obtenerArgumentosConValor(frame)
local original
if frame == mw.getCurrentFrame() then
original = frame:getParent().args
else
original = frame.args or frame
end
local copia= {}
for k,v in pairs(original) do
if v == 'no' and k ~= 'wikidata' then
--Si vale "no" dejar en blanco el argumento para no obtener el valor
--de Wikidata
copia[k] = ''
elseif v~='' then
--Si está en blanco dejarlo a nil para obtener en su caso el valor de
-- Wikidata si no hay otro argumento con un nombre similar
copia[k] = original[k]
end
end
return copia
end
function obtenerImagenWikidata()
local imagen, valorImagen, piesDeImagen, k, pieDeImagen
if not Entidad then
return
end
-- Obtener la primera imagen en Wikidata de la persona
local imagen = elementoTabla(Entidad, 'claims','P18')
if not imagen then
return
end
imagen = require('Módulo:Wikidata').filtrarDeclaracionPorRango(imagen)[1]
-- Obtener el nombre de la imagen
valorImagen = elementoTabla(imagen, 'mainsnak','datavalue','value') -- Por ejemplo, imagen.jpg
-- Obtener los pies de la imagen, uno por idioma
piesDeImagen = elementoTabla(imagen, 'qualifiers','P2096')
-- Encontrar el pie en español (aquel con datavalue.value.language = "es")
if piesDeImagen then
for k,pieDeImagen in pairs(piesDeImagen) do
if pieDeImagen and pieDeImagen.datavalue and pieDeImagen.datavalue.value and pieDeImagen.datavalue.value.language=='es' then
-- devolver la imagen y el texto del pie de la imagen en español
return valorImagen, pieDeImagen.datavalue.value.text
end
end
end
-- Si no hay pie de imagen en español comprueba si hay fecha especificada para la imagen
piesDeImagen = elementoTabla(imagen, 'qualifiers', 'P585')
if piesDeImagen and piesDeImagen[1] then
if piesDeImagen[1].datavalue and piesDeImagen[1].datavalue.value then
return valorImagen, nombre .. ' en ' .. require('Módulo:Wikidata/Fecha').FormateaFechaHora(piesDeImagen[1].datavalue.value, {['formatoFecha']='año',['enlace']='no'})
else
return valorImagen, nombre
end
end
-- Sin pie de imagen en español
return valorImagen
end
function obtenerFechaWikidata(propiedad)
local declaracionesFecha = elementoTabla(Entidad, 'claims', propiedad)
-- No devolver la edad si no hay ninguna o si hay varias fechas.
if not declaracionesFecha or declaracionesFecha[2] then
return
end
local declaracionFecha = declaracionesFecha[1]
if not declaracionFecha then
return
end
local valorFecha = elementoTabla(declaracionFecha, 'mainsnak', 'datavalue', 'value')
if not valorFecha then
return
end
--La precisión debe llegar hasta el día
if valorFecha.precision ~= 11 then
return
end
local iso = valorFecha.time
if not iso then
return
end
local fecha = {}
fecha.calendario = valorFecha.calendarmodel
fecha.anyo = tonumber(iso:sub(1, 5))
fecha.mes = tonumber(iso:sub(7,8))
fecha.dia = tonumber(iso:sub(10,11))
return fecha
end
function obtenerEdadWikidata(propiedadFin)
local fechaNacimiento = obtenerFechaWikidata('P569')
if not fechaNacimiento then
return
end
if propiedadFin then
local fechaFin = obtenerFechaWikidata(propiedadFin)
if fechaFin and
fechaFin.calendario == fechaNacimiento.calendario then
return edad(fechaNacimiento, fechaFin)
end
else
return edad(fechaNacimiento)
end
end
function noAlargar(que)
if not que then
return
end
return '<div style="width:14.66em;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">' .. que .. '</div>'
end
function plural(que, singular, plural, pClase)
if not que then
return {}
elseif que:match(',') or que:match('</li><li>') then
return {plural, que, clase=pClase}
else
return {singular, que, clase=pClase}
end
end
function obtenerPremios(p_entidad)
if not p_entidad then
return
end
local moduloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local obtenerDatos = moduloWikidataFormatos.obtenerDatos
local enlazar = moduloWikidataFormatos.enlazar
local moduloWikidata = require('Módulo:Wikidata')
local formatoDatoWikidata = moduloWikidata.formatoDato
local filtrarDeclaracionPorRango = moduloWikidata.filtrarDeclaracionPorRango
local moduloTablas = require('Módulo:Tablas')
local elementoTabla = moduloTablas.elemento
local ordenarTabla = moduloTablas.ordenar
local agruparTabla = moduloTablas.agrupar
local opcionesFecha= {['formatoTexto']='mayúscula', ['formatoFecha'] = 'año', ['enlace']='no'}
local noMostrarPremio={
['Q11415564'] = true, -- doctor honoris causa
}
-- Obtenemos los datos primarios (ids y años de los premios)
local declaracionPremios = elementoTabla(p_entidad, 'claims', 'P166')
if not declaracionPremios then
return
end
-- Quedarnos solo con los premios con mayor rango. Ejemplo Bettina Rheims
declaracionPremios = filtrarDeclaracionPorRango(declaracionPremios)
if not declaracionPremios then
return
end
local premios = {}
local premio, idPremio, anyo
-- 1. Identificadores de los premios y años
-- Se eliminan los premios de la tabla noMostrarPremio
for k,v in pairs(declaracionPremios) do
idPremio = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id')
if idPremio and not noMostrarPremio[idPremio] then
premio = {}
premio.id = idPremio
anyo = formatoDatoWikidata(elementoTabla(v, 'qualifiers','P585',1), opcionesFecha , {})
if anyo ~= '' then
premio.anyo = anyo
end
table.insert(premios, premio)
end
end
ordenarTabla(premios, {'id', 'anyo'})
premios = agruparTabla(premios, 'id', 'anyo')
-- 2. Añado el nombre completo del premio, el enlace y la categoría
local nombreCompleto, nombre, categoria, enlace
for k,v in pairs(premios) do
if v.anyo then
v.primerAnyo = v.anyo[1] or ''
else
v.primerAnyo = ''
end
nombreCompleto = (mw.wikibase.label( v.id ) or ''):gsub(".", string.upper,1) -- El primer carácter en mayúscula
enlace = mw.wikibase.sitelink( v.id )
-- Corregir el nombre del premio
nombreCompleto = nombreCompleto:gsub('Premios ', 'Premio ')
nombreCompleto = nombreCompleto:gsub('Anexo:', '')
-- Determinar si es una categoría de un premio
nombre, categoria = nombreCompleto:match('^(.*)%s+(a%s.*)$') -- Ejemplo: Premio Nébula a la mejor novela corta --> Premio Nébula
if not nombre then
nombre, categoria = nombreCompleto:match('^(.*)%s+(al%s.*)$') -- Ejemplo: Premio Hugo al mejor relato --> Premio Hugo
end
if nombre then
v.nombre = nombre
v.categoria = {
['id'] = v.id,
['anyo'] = v.anyo,
['nombre'] = categoria,
['enlace'] = enlace,
['nombreCompleto'] = nombreCompleto,
}
v.id = nil
v.anyo = nil
else
v.nombre = nombreCompleto
v.enlace = enlace
end
end
ordenarTabla(premios, {'nombre', 'primerAnyo'})
premios = agruparTabla(premios, 'nombre', 'categoria')
ordenarTabla(premios, {'primerAnyo'})
--if true then return require('Módulo:Tablas').tostring(premios) end
-- 3. Doy formato eliminando algunos premios
local premiosFormateados = {}
local premioFormateado, categoriaFormateada, categoriasPremio
local nombrePremio
for k,premio in ipairs(premios) do
nombrePremio = premio.nombre
if nombrePremio:match('^[dD]octor honoris causa') or
nombrePremio:match('^[hH]onorary doctor') or
(argumento['premios emmy'] and nombrePremio:match('Emmy')) or
(argumento['premios grammy'] and nombrePremio:match('Grammy')) or
(argumento['premios cannes'] and nombrePremio:match('Cannes')) or
(argumento['premios globo de oro'] and nombrePremio:match('Globo')) or
(argumento['premios tony'] and nombrePremio:match('Tony')) or
(argumento['premios óscar'] and nombrePremio:match('Óscar')) or
(argumento['premios bafta'] and nombrePremio:match('BAFTA')) or
(argumento['premios sag'] and nombrePremio:match('Sindicato de Actores')) or
(argumento['premios san sebastian'] and nombrePremio:match('San Sebastián'))
then
-- No mostrar
elseif premio.categoria then
categoriasPremio = {}
for k2,categoria in ipairs(premio.categoria) do
categoriaFormateada = enlazar(categoria.enlace, categoria.nombre, categoria.id)
-- Añadir los años entre paréntesis
if categoria.anyo then
categoriaFormateada = categoriaFormateada .. ' <small>(' .. mw.text.listToText( categoria.anyo, ', ',' y ' ) .. ')</small>'
end
table.insert(categoriasPremio, categoriaFormateada)
end
table.insert(premiosFormateados, premio.nombre .. ' ' .. mw.text.listToText( categoriasPremio, ', ',' y ' ))
else
premioFormateado = enlazar(premio.enlace, premio.nombre, premio.id)
if premio.anyo and premio.anyo[1] then
premioFormateado = premioFormateado .. ' <small>(' .. mw.text.listToText( premio.anyo, ', ',' y ' ) .. ')</small>'
end
table.insert(premiosFormateados, premioFormateado)
end
end
-- No obtener los premios de Wikidata si hay muchos.
if premiosFormateados[10] then
return
end
-- Añadir el lápiz
if premiosFormateados[1] then
return lapizWikidata('<ul><li>' .. mw.text.listToText( premiosFormateados, '</li><li>','</li><li>' ),p_entidad.id,'P166') .. '</li></ul>'
end
end
function siNoEs(que, valor)
if not que then
return
end
if not que:match(valor) then
return que
end
end
function z.premios(frame)
local args = frame.args
local entidad = mw.wikibase.getEntityObject(args.id)
if not entidad then
return
end
return obtenerPremios(entidad)
end
return z