Módulo:Ficha de persona
Apariencia
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, {
{tipo='sección',
titulo ='Firma',
estilotitulo = estiloTituloSecciones,
{'', 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',
['Q2286351' ] = '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',
['Q11950058'] = 'exploradora',
['Q13472585'] = 'filántropa',
['Q4964182' ] = 'filósofa',
['Q169470' ] = 'física',
['Q33231' ] = 'fotógrafa',
['Q28389' ] = 'guionista',
['Q201788' ] = 'historiadora',
['Q715301' ] = 'historietista',
['Q82863' ] = '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' ] = 'poetisa',
['Q82955' ] = 'política',
['Q270389' ] = 'presentadora de noticias',
['Q947873' ] = 'presentadora de televisión',
['Q3282637' ] = 'productora de cine',
['Q37226' ] = 'profesora',
['Q121863' ] = '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