La documentación para este módulo puede ser creada en Módulo:Ficha de persona/doc
local z = {} local argumentos -- Tabla de argumentos con los que se llama a la función local argumento={} -- Argumentos eliminando los argumentos sin datos local Entidad -- Tabla con los datos en Wikidata de la persona. local algunaPropiedadEnlazaWikidata -- Para alguna propiedad no existe la etiqueta ni el enlace mostrándose algo de la forma d:... local datosautoridad={} --inicializa la tabla que genera los cargos para cada autoridad local obtenerDatosWikidata -- true si se deben obtener datos de Wikidata -- Módulos y funciones externas local ModuloFicha = require('Módulo:Ficha') local ModuloFormatoTexto = require('Módulo:Formato texto') local ModuloIdentificadores = require('Módulo:Identificadores') local ModuloPaginas = require('Módulo:Páginas') local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos') local formatoURL = ModuloWikidataFormatos.formatoURL local ModuloWikidata = require('Módulo:Wikidata') 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'} local enMayusculasO = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o '} local listaNoOrdenada = {['lista'] = 'no ordenada'} --, ['debeExistir'] = 'sí' local lugar = {['conjunción']=' o ', ['valor-función'] = ModuloWikidataFormatos.formatoLugar} local debeExistir = {['debeExistir'] = 'sí', ['formatoTexto'] = 'mayúscula'} local conPeriodo = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo, ordenar='por fecha'} local conPeriodoDebeExistir = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo, ordenar='por fecha', ['debeExistir'] = 'sí'} 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" local argumento = obtenerArgumentosConValor(frame) --Determinar si se deben obtener datos de Wikidata if argumento['wikidata'] == 'no' and (argumento['fecha de fallecimiento'] or argumento['fechadefallecimiento'] or argumento['fecha_de_fallecimiento'] or argumento['fecha fallecimiento'] or argumento['fecha_fallecimiento'] or argumento['Fecha_fallecimiento'] or argumento['fecha de defunción'] or argumento['fecha_muerte'] or argumento['fechamuerte'] or argumento['lugar de fallecimiento'] or argumento['lugardefallecimiento'] or argumento['lugar_de_fallecimiento'] or argumento['lugar fallecimiento'] or argumento['lugar_fallecimiento'] or argumento['Lugar_fallecimiento'] or argumento['lugar de defunción'] or argumento['lugar_muerte'] or argumento['lugarmuerte']) 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',{['enlace']='no'}) 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', ['calificativo'] = 'P512',['separadorcalificador']='<br>'}) if propiedad('P21') == 'femenino' then etiquetaAnyosActivo = 'Años activa' etiquetaConocidoPor = 'Conocida por' etiquetaInfluencias = 'Influida por' etiquetacampeon = '[[Campeonato del mundo de ajedrez|Campeona del mundo]]' etiquetaAlumnoDe = 'Alumna de' funcionOcupacion = formatoOcupacionFemenino else etiquetaAnyosActivo = 'Años activo' etiquetaConocidoPor = 'Conocido por' etiquetaInfluencias = 'Influido por' funcionOcupacion = formatoOcupacionMasculino etiquetacampeon = '[[Campeonato del mundo de ajedrez|Campeón del mundo]]' etiquetaAlumnoDe = 'Alumno de' end seccionartistica='Carrera artística' --GENERAR CARGOS if argumento['cargo']==nil then datosautoridad['cargo1']={tipo='sección',{'',''},} else saltoautoridad='<hr>' datosautoridad['cargo1']=generarcargo(argumento,1,frame) SiHayCargos = true argumento['predecesor']= nil argumento['sucesor']= nil end for i=2, 10 do campovacio=0 if argumento['cargo'..i]==nil and argumento['inicio'..i]==nil then datosautoridad['cargo'..i]={tipo='sección',{'',''},} else datosautoridad['cargo'..i]=generarcargo(argumento,i,frame) SiHayCargos = true 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'] = ModuloWikidataFormatos.formatoPeriodo}) area = propiedad('P101', enMayusculas) -- Campo de trabajo end local ocupacionOArea = ocupacion or area nombre = argumento['nombre'] or argumento['Nombre'] or obtenerEtiquetaWikidata() or ModuloPaginas.nombrePagina({desambiguar='sí'}) local nombre_nacimiento = propiedad('P1477') or propiedad('P513') or argumento['nombre completo'] or argumento['nombre_completo'] or argumento['Nombre_completo'] or argumento['nombre nacimiento'] or argumento['nombredenacimiento'] or argumento['nombre de nacimiento'] or argumento['nombrecompleto'] or argumento['nombre_real'] or argumento['nombre real'] local nombre_nativo = argumento['nombre nativo'] or propiedad('P1559') -- Informar los datos de nacimiento y de fallecimiento local fechaNacimiento, lugarNacimiento, nacimiento local fechaFallecimiento, lugarFallecimiento, edad, literalEdad, fallecimiento fechaNacimiento = argumento['fecha de nacimiento'] or argumento['fechadenacimiento'] or argumento['fecha_nacimiento'] or argumento['Fecha_nacimiento'] or argumento['fecha nacimiento'] or argumento['fechadenacimiento'] or argumento['fechanac'] or argumento['fecha_de_nacimiento'] or propiedad('P569', enMayusculasO) lugarNacimiento = argumento['lugar de nacimiento'] or argumento['lugardenacimiento'] or argumento['lugar'] or argumento['lugar_nacimiento'] or argumento['Lugar_nacimiento'] or argumento['lugar nacimiento'] or argumento['lugarnac'] or argumento['lugar_de_nacimiento'] or propiedad('P19', lugar) if fechaNacimiento and lugarNacimiento then nacimiento = fechaNacimiento .. '<br />' .. lugarNacimiento else nacimiento = fechaNacimiento or lugarNacimiento end fechaFallecimiento = argumento['fecha de fallecimiento'] or argumento['fechadefallecimiento'] or argumento['fecha_de_fallecimiento'] or argumento['fecha fallecimiento'] or argumento['fecha_fallecimiento'] or argumento['Fecha_fallecimiento'] or argumento['fecha de defunción'] or argumento['fecha_muerte'] or argumento['fechamuerte'] lugarFallecimiento = argumento['lugar de fallecimiento'] or argumento['lugardefallecimiento'] or argumento['lugar_de_fallecimiento'] or argumento['lugar fallecimiento'] or argumento['lugar_fallecimiento'] or argumento['Lugar_fallecimiento'] or argumento['lugar de defunción'] or argumento['lugar_muerte'] or argumento['lugarmuerte'] or propiedad('P20', lugar) -- La edad solo se obtiene de Wikidata si no se informa manualmente la fecha de fallecimiento. if not fechaFallecimiento and obtenerDatosWikidata then fechaFallecimiento = propiedad('P570', enMayusculasO) edad = obtenerEdadWikidata() if edad then if edad == 0 then literalEdad = ' (menos de un año)' elseif edad == 1 then literalEdad = ' (un año)' else literalEdad = ' (' .. edad .. ' años)' end end end if fechaFallecimiento and literalEdad then fechaFallecimiento = fechaFallecimiento .. literalEdad end if fechaFallecimiento and lugarFallecimiento then fallecimiento = fechaFallecimiento .. '<br />' .. lugarFallecimiento else fallecimiento = fechaFallecimiento or lugarFallecimiento 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') twitter = argumento['twitter'] or argumento['Twitter'] or obtenerTwitter() facebook = argumento['facebook'] or argumento['Facebook'] or obtenerFacebook() -- Título según la ocupación y si la persona ha muerto -- No mostrar para los artistas ningún icono en la cabecera de la ficha local contadorocupaciones = 0 --Implementa la lógica de si la persona tiene más de dos ocupaciones la ficha tenga un encabezado estandár if ocupacionOArea then if ocupacionOArea:find('[Aa]ctor') or ocupacionOArea:find('[Aa]ctriz') or ocupacionOArea:find('[Pp]roductor de cine') or ocupacionOArea:find('[Dd]irector de cine') then contadorocupaciones=contadorocupaciones+1 tipocabecera = 'cine' estilotitulo = 'background-color:#f9e999' seccionartistica = '' end if contadorocupaciones==0 and (ocupacionOArea:find('[Aa]rtista') or ocupacionOArea:find('[Pp]intor') or ocupacionOArea:find('[Ee]scultor') or ocupacionOArea:find('[Pp]intura') or ocupacionOArea:find('[Ee]scultura') or ocupacionOArea:find('[Ff]otograf') or ocupacionOArea:find('[Aa]rtes visuales')) then contadorocupaciones=1 tipocabecera = '' estilotitulo = 'background-color:#8DB1C3;color:#FFF' end if contadorocupaciones==0 and (ocupacionOArea:find('[Aa]jedrecista') or argumento['elo'] or rankingajedrez) then contadorocupaciones=1 tipocabecera = '' estilotitulo = 'background-color: #D8BFD8' end if contadorocupaciones==0 and (ocupacionOArea:find('[Ee]scritor') or ocupacionOArea:find('[Nn]ovelista') or ocupacionOArea:find('[Pp]oeta') or ocupacionOArea:find('[Dd]ramaturgo')) then contadorocupaciones=contadorocupaciones+1 tipocabecera = 'libro' estilotitulo = 'background-color:#4c6099;color:#FFF' end if contadorocupaciones==0 and (ocupacionOArea:find('[Mm]úsico') or ocupacionOArea:find('[Cc]ompositor') or ocupacionOArea:find('[Cc]antante')) then contadorocupaciones=contadorocupaciones+1 tipocabecera = 'música' estilotitulo = 'background-color:#f0e68c' end if contadorocupaciones==0 and (ocupacionOArea:find('[Mm]úsico') or ocupacionOArea:find('[Cc]ompositor') or ocupacionOArea:find('[Cc]antante')) then contadorocupaciones=contadorocupaciones+1 tipocabecera = 'música' estilotitulo = 'background-color:#f0e68c' end --Pendiente por poner el estilo de POLITICO! if contadorocupaciones==0 and (((ocupacionOArea:find('[Pp]olítico'))) or argumento['cargo']) then contadorocupaciones=contadorocupaciones+1 tipocabecera = 'libro' estilotitulo = 'background-color:#4c6099;color:#FFF' end if contadorocupaciones==0 and ocupacionOArea:find('[Pp]eriodista') then contadorocupaciones=contadorocupaciones+1 tipocabecera = 'revista' estilotitulo = 'background-color:#ED8;color:#FFF' end if contadorocupaciones==0 and ocupacionOArea:find('[Dd]iseñador') then contadorocupaciones=contadorocupaciones+1 estilotitulo = 'background-color:#ccccff' end if contadorocupaciones==0 and (ocupacionOArea:find('[Pp]resentador') or ocupacionOArea:find('[Cc]onductor')) then contadorocupaciones=contadorocupaciones+1 tipocabecera = 'cabecera televisión' estilotitulo = 'background-color:#ED8;color:#000' end end -- El contador de ocupaciones parece valer siempre 0 o 1, por lo que se podría eliminar la variable -- y dejar un if elseif elseif... -- Lo más sencillo es que todas las personas tengan la misma cabecera if contadorocupaciones == 2 or contadorocupaciones==0 then tipocabecera = 'humano fn' estilotitulo = 'background-color:#8DB1C3;color:#FFF' end if fallecimiento then estilotitulo = 'background-color:#c0c0c0;color:#000' end estilocabecera = estilotitulo if SiHayCargos == true then cargosocupados = '' tipocabecera= nil estilocabecera= 'background-color:transparent;' --estilotitulo ='background-color:#8DB1C3;color:#FFF' estilotitulo ='background-color:#E6E6FA;' else cargosocupados = propiedad('P39', conPeriodo) end if argumento['premios emmy'] then eliminaremmmy='[Ee]mmy' end if argumento['premios grammy'] then eliminargrammy='rammy' end if argumento['premios cannes'] then eliminarcanes='Cannes' end if argumento['premios globo de oro'] then eliminarpremio2='Globo'end if argumento['premios tony'] then eliminartony='Tony' end if argumento['premios óscar'] then eliminaroscar ='Óscar' end if argumento['premios bafta'] then eliminarbafta ='BAFTA' end if argumento['premios sag'] then eliminarpremio='indicato'end if argumento['premios san sebastian'] then eliminarsebastian='Sebas'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 -- 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 Ficha = { wikidata = not obtenerDatosWikidata and 'no', clase = 'biography vcard', -- Título tipocabecera = tipocabecera, titulo = nombre, colorfondo = colorfondo, estilotitulo = estilocabecera, --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 = 'padding:0.2em; line-height:1.3em; vertical-align:middle;', {tipo='sección', {'', saltoautoridad}, }, datosautoridad['cargo1'], datosautoridad['cargo2'], datosautoridad['cargo3'], datosautoridad['cargo4'], datosautoridad['cargo5'], datosautoridad['cargo6'], datosautoridad['cargo7'], datosautoridad['cargo8'], datosautoridad['cargo9'], datosautoridad['cargo10'], {tipo='sección', ['titulo'] = 'Información personal', -- Ver la ficha de noble o la ficha de diseñador estilotitulo = estilotitulo, {'Nombre de nacimiento', (nombre_nacimiento ~= nombre) and nombre_nacimiento}, -- solo si no coincide con el nombre que se muestra en el título de la ficha {'Nombre nativo', (nombre_nativo ~= nombre) and (nombre_nativo ~= nombre_nacimiento) and nombre_nativo}, -- Es para el nombre en la escritura nativa. Si no coincide con el nombre o con el nombre de nacimiento {'Apodo', argumento['apodo']}, {'Otros nombres', argumento['otros nombres'] or argumento['alias'], -- ¿No es lo mismo que el apodo????? clase='nickname'}, {'Nacimiento', nacimiento}, {'Fallecimiento', fallecimiento}, {'Causa de muerte', argumento['causa muerte'] or propiedad('P509', enMayusculas) or propiedad('P1196', enMayusculas)}, -- circunstancias de la muerte {'Lugar de sepultura', argumento['lugar_de_descanso'] or propiedad('P119', debeExistir)}, {'Residencia', sinBandera(argumento['residencia'] or argumento['país_de_residencia'] or argumento['pais_de_residencia'] or argumento['lugar_de_residencia']) or propiedad('P551'), clase='etiqueta'}, {'Nacionalidad', sinBandera(argumento['nacionalidad'] or argumento['Nacionalidad'] or argumento['ciudadanías']) or --Pendiente hacer que salga el gentilicio propiedad('P27', {['valor-función'] = ModuloWikidataFormatos.formatoGentilicio, ['formatoTexto'] = 'mayúscula', ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo, ordenar='por fecha'}), clase='category'}, {'Ciudadanía', sinBandera(argumento['ciudadanía'] or -- ¿No es lo mismo que la nacionalidad? argumento['ciudadania']), clase='category'}, {'Lengua materna', argumento['lengua_materna'] or argumento['Lengua_materna'] or propiedad('P103', enMayusculas)}, {'Etnia', --propiedad('P172', enMayusculas) or argumento['etnia'] or argumento['grupo étnico'], clase='category'}, {'Creencias religiosas', propiedad('P140', enMayusculas) or argumento['religión'] or argumento['creencias']}, {'Partido político', argumento['partido político'] or argumento['partido'] or propiedad('P102')}, {'Otras afiliaciones políticas', argumento['afiliaciones'] or propiedad('P1416')}, }, {tipo='sección', estilotitulo = estilotitulo, ['titulo'] = 'Características físicas', -- Ver la ficha de noble o la ficha de diseñador {'Altura', argumento['altura'] or argumento['estatura'] or propiedad('P2048')}, {'Peso', argumento['peso'] or propiedad('P2067')}, {'Medidas', argumento['medidas']}, {'Ojos', argumento['color de ojos']}, {'Cabello', argumento['color de cabello']}, {'[[Implante de mama|Pecho natural]]', argumento['busto natural']}, {'[[Orientación sexual]]',argumento['orientación sexual'] or argumento['orientación real']} }, {tipo='sección', -- Familia. estilotitulo = estilotitulo, ['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 nobiliaria', propiedad('P53')}, {(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í'})}, {'Familiares', estaEnlazado(argumento['familiares'])}, --- ¿¿¿¿¿¿¿¿¿??????????? -- Hermano: P7, padastro: p43, pariente: p1038 }, {tipo='sección', ['titulo'] = 'Educación', estilotitulo = estilotitulo, {'Educación', educacion}, {'Alma máter', almamater, clase='plainlist'}, {etiquetaAlumnoDe, propiedad('P1066', conPeriodoDebeExistir), clase='plainlist'}, {'Posgrado', argumento['posgrado']}, {'Supervisora doctoral', argumento['supervisora_doctoral']}, {'Supervisores doctorales' , argumento['supervisores_doctorales']}, {'Supervisor doctoral' , argumento['supervisor_doctoral'] or propiedad('P184')}, {'[[Tesis]]', ModuloFormatoTexto.enlazar(argumento['tesis_url'], ModuloFormatoTexto.enCursivas(argumento['tesis_título']), argumento['tesis_año'])}, }, {tipo='sección', ['titulo'] = 'Información profesional', estilotitulo = estilotitulo, {'Ocupación', ocupacion, clase='role'}, {'Área', area}, {etiquetaConocidoPor, argumento['conocido'] or argumento['conocido por']}, {'Cargos ocupados', cargosocupados,clase='plainlist'}, -- políticos o en empresas {'Empresa', argumento['empresa']}, {'Salario', argumento['salario']}, {'Patrimonio', argumento['patrimonio'] or argumento['fortuna']}, {'Tratamiento', argumento['tratamiento']}, {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']}, -- Periodistas -- Sección artística (actores y ¿presentadores?) {tipo='sección', ['titulo'] = seccionartistica, estilotitulo = estilotitulo, {'Rol debut' , argumento['rol debut']}, {'Año de debut' , argumento['año debut']}, {'Año de retiro', argumento['año retiro']}, {'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'}, {'Restaurantes', argumento['restaurantes']}, -- Para cocineros. Restaurantes en los que ha trabajado. -- Periodistas y presentadores {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']}, }, -- Ocupación (escritores, artistas, periodistas, diseñadores, etc) {'[[Seudónimo]]', argumento['seudónimo'] or argumento['Seudónimo'] or propiedad('P742')}, {'Lengua de producción literaria', argumento['lengua_literaria'] or argumento['Lengua_literaria']}, {'Género', argumento['género'] or argumento['Género'] or propiedad('P136', enMayusculas)}, {'[[Movimiento artístico|Movimientos]]', argumento['movimiento'] or argumento['Movimiento'] or argumento['movimientos'] or propiedad('P135', enMayusculas)}, -- Obras notables. Se ponen de momento en cursivas pero es incorrecto en el caso de arquitectos. {'Obras notables', argumento['obras'] or argumento['obras notables'] or argumento['obras_notables'] or argumento['Obras notables'] or argumento['obras destacadas'] or argumento['proyectos_representativos'] or propiedad('P800',{['enlace']='sí', ['lista'] = 'no ordenada', ['debeExistir'] = 'sí', ['formatoTexto']='cursivas'}), clase='plainlist' }, {'Artistas relacionados', argumento['relacionados']}, --{'', listaDesplegable(etiquetaInfluencias, argumento['influenciado por'] or argumento['influido por'] or -- argumento['influencias'] or argumento['Influencias'], frame)}, --{'', listaDesplegable('Influyó a', argumento['influyó'] or argumento['Influyó'], frame)}, -- Militares {'Rama militar', argumento['rama'] or propiedad('P241', enMayusculas)}, {'Rango', argumento['rango'] or propiedad('P410', conPeriodo), clase='plainlist'}, {'Participó en', argumento['conflictos'] or argumento['batallas'] or propiedad('P607', enMayusculas)}, -- 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'}) or argumento['elo'] }, -- {'[[Sistema de puntuación Elo|Mejor elo]]', argumento['mejor elo']}, {'Ránking', rankingajedrez}, {'Mejor ránking', 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']}, {'Sucesor', argumento['sucesor']}, }, {'Miembro de', propiedad('P463', conPeriodoDebeExistir), clase='plainlist'}, }, {tipo='sección', ['titulo'] = 'Premios artísticos', -- Ver la ficha de noble o la ficha de diseñador estilotitulo = estilotitulo, {'[[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']}, {'Otros premios', argumento['otros premios']}, }, {tipo='sección', ['titulo'] = 'Carrera deportiva', -- Ver la ficha de noble o la ficha de diseñador estilotitulo = estilotitulo, {'Deporte', argumento['deporte']}, }, {'',seccionDesplegable('Títulos y <br> reconocimientos deportivos',argumento['títulos'], frame,estilotitulo)}, -- Los premios pueden ser para varias ocupaciones por lo que se ponen al final -- Premios, condecoraciones, medallas, distinciones, etc. {'Distinciones', argumento['premios'] or argumento['Premios'] or argumento['premio'] or argumento['Premio'] or argumento['premios2'] or propiedad('P166', {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = 'P585', ordenar='por fecha', ['rango mayor'] = 'sí', eliminaranexo='sí',eliminar1=eliminarpremio,eliminar2=eliminarpremio2,eliminar3=eliminaroscar, eliminar4=eliminarsebastian, eliminar5=eliminartony,eliminar6=eliminarbafta, eliminar7=eliminarcanes, eliminar8=eliminargrammy,eliminar9=eliminaremmmy}), clase ='plainlist'}, -- Mostrar las listas sin viñetas -- Con etiqueta/datos como en las fichas de escritor y artista en vez de como en la ficha de persona {'Firma', (firma and ('[[Archivo:' .. firma .. '|150px]]'))}, -- 150 px como en la ficha de escritor en vez de 128 {tipo='sección', -- Web clase ='plainlinks', titulo ='Web', estilotitulo = estilotitulo, {'Sitio web', enlazarURL(argumento['web'] or argumento['página web'] or argumento['website'] or argumento['sitio web'] or argumento['sitioweb']) or propiedad('P856', {['valor-función'] = formatoURL})}, {'Facebook', facebook and ('[http://www.facebook.com/' .. facebook .. ' ' .. facebook .. ']')}, -- Ver la plantilla facebook {'Twitter', twitter and ('[http://www.twitter.com/' .. twitter .. ' ' .. twitter .. ']')}, -- Ver la plantilla twitter }, {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'} }, {'Fuente biográfica', argumento['fuentebiográfica']}, } categorias = '' -- Ahora la categoría se informa en Módulo:Wikidata/Formatos --if algunaPropiedadEnlazaWikidata then -- categorias = '[[Categoría:Wikipedia:Páginas con propiedades de Wikidata sin etiqueta]]' --end if (fechaNacimiento or lugarNacimiento) and not fallecimiento then categorias = categorias .. '[[Categoría:Personas vivas]]' end --if educacion and almamater then -- categorias = categorias .. '[[Categoría:Wikipedia:Páginas que tienen informado el campo educación]]' --end return ModuloFicha.infobox(Ficha) .. categorias 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]..'|40px]]<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('{{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}, {'Vicegobernador', argumento['vicegobernador'..numero] }, {'[[Presidente]]', argumento['presidente'..numero] }, {'[[Monarca]]', argumento['monarca'..numero] }, {'[[Primer ministro]]', argumento['primerministro'..numero] }, {'[[Gobernador]]', argumento['gobernador'..numero] }, {'[[Jefe de Gobierno]]', argumento['jefe'..numero]}, {'Junto a', argumento['juntoa'..numero] }, {'Nominado por', argumento['nominado'..numero] }, {'Designado por', argumento['designado'..numero] }, {'Gabinete', argumento['gabinete'..numero] }, {'[[Vicepresidente]]', argumento['vicepresidente'..numero] }, {'Viceprimerministro', argumento['viceprimerministro'..numero] }, {'[[Teniente gobernador]]', argumento['teniente'..numero] }, {'Vicealcalde', argumento['vicealcalde'..numero] }, {'Vicejefe de gobierno', argumento['vicejefe'..numero]}, {'[[Canciller]]', argumento['canciller'..numero]}, {'Vicecanciller', argumento['vicecanciller'..numero]}, {'Predecesor', argumento['predecesor'..numero]}, {'Sucesor', argumento['sucesor'..numero]}, {'Compañero de fórmula', argumento['fórmula'..numero]}, {'Oponente/s', argumento['oponentes'..numero]}, {'En el cargo', argumento['enelcargo'..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 = {} end opciones['propiedad'] = idPropiedad valorPropiedad = ModuloWikidata.getPropiedad(opciones,Entidad.claims[idPropiedad]) if valorPropiedad and valorPropiedad:match('%[%[:d:') then algunaPropiedadEnlazaWikidata = true end return valorPropiedad end end function obtenerEtiquetaWikidata() if Entidad and Entidad.labels and Entidad.labels.es then return Entidad.labels.es.value 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:#FFF; 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 ..';}}') 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) local enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion = ModuloWikidataFormatos.obtenerDatos(valor) -- Corregir la ocupación. -- Ejemplos: -- - "actor/actriz" --> "actor" -- - "informático/a teórico/a" --> "informático teórico" if etiquetaOcupacion then etiquetaOcupacion = etiquetaOcupacion:gsub('([^%s]+)(/[^%s]+)', '%1') end return ModuloWikidataFormatos.enlazar(enlaceOcupacion, etiquetaOcupacion, idEntidadOcupacion, opciones) end function formatoOcupacionFemenino(valor, opciones, frame) 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', ['Q1622272' ] = 'catedrática de universidad', ['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', ['Q185351' ] = 'jurista', ['Q644687' ] = 'ilustradora', ['Q14467526'] = 'lingüista', ['Q1371925' ] = 'locutora', ['Q2251335' ] = 'maestra', ['Q191633' ] = 'mangaka', ['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', ['Q212980' ] = 'psicóloga', ['Q3242115' ] = 'revolucionaria', ['Q3068305' ] = 'salonnière', ['Q622807' ] = 'seiyū', ['Q512314' ] = 'socialité', ['Q2306091' ] = 'socióloga', ['Q1141526' ] = 'stripper', ['Q1234713' ] = 'teóloga', ['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) .. '[[Categoría:Wikipedia:Ocupaciones femeninas]]' 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 obtenerFacebook() return obtenerValorCalificativo('P553' -- cuenta en red social , 'P554' --dirección en red social , 355) -- Facebook or propiedad('P2013'); -- Ejemplo: Gillian Flynn end function obtenerTwitter() return obtenerValorCalificativo('P553' -- cuenta en red social , 'P554' --dirección en red social , 2002) -- Twitter 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' 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',1) if not imagen then return end -- 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.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 return valorImagen, nombre .. ' en ' .. require('Módulo:Wikidata/Fecha').FormateaFechaHora(piesDeImagen[1].datavalue.value, {['formatoFecha']='año',['enlace']='no'}) end -- Sin pie de imagen en español return valorImagen end function obtenerEdadWikidata() local declaracionFechaNacimiento = elementoTabla(Entidad, 'claims','P569') local declaracionFechaFallecimiento = elementoTabla(Entidad, 'claims','P570') if not declaracionFechaNacimiento or not declaracionFechaFallecimiento then return end -- No devolver la edad si hay varias fechas de nacimiento o de fallecimiento o -- si la fecha tiene calificativos (circa, fecha más tardía, fecha más temprana, etc) if declaracionFechaNacimiento[2] or declaracionFechaNacimiento[2] then return end local FechaNacimiento = declaracionFechaNacimiento[1] local FechaFallecimiento = declaracionFechaFallecimiento[1] if not FechaNacimiento or not FechaFallecimiento then return end local valorFechaNacimiento = elementoTabla(FechaNacimiento, 'mainsnak', 'datavalue', 'value') local valorFechaFallecimiento = elementoTabla(FechaFallecimiento, 'mainsnak', 'datavalue', 'value') if not valorFechaNacimiento or not valorFechaFallecimiento then return end --La precisión debe llegar hasta el día if valorFechaNacimiento.precision ~= 11 or valorFechaFallecimiento.precision ~= 11 then return end -- De momento el calendario debe ser el mismo if valorFechaNacimiento.calendarmodel ~= valorFechaFallecimiento.calendarmodel then return end local isoNacimiento = valorFechaNacimiento.time local isoFallecimiento = valorFechaFallecimiento.time if not isoNacimiento or not isoFallecimiento then return end local anyoNacimiento = tonumber(isoNacimiento:sub(2, 5)) local anyoFallecimiento = tonumber(isoFallecimiento:sub(2, 5)) if not anyoNacimiento or not anyoFallecimiento then return end if isoFallecimiento:sub(6) < isoNacimiento:sub(6) then -- No había llegado su cumpleaños return anyoFallecimiento - anyoNacimiento - 1 else return anyoFallecimiento - anyoNacimiento end end return z