Diferencia entre revisiones de «Módulo:Ficha de edificio»
Apariencia
Contenido eliminado Contenido añadido
++ |
Optimizando y mejorando funciones obtenerMaterial(), obtenerCalle(), obtenerAlturas() y obtenerSuperficie(), que ahora devuelven múltiples valores cuando procede y realizan el formateo y la conversión de unidades |
||
Línea 1: | Línea 1: | ||
local z = {} |
local z = {} |
||
local argumentos |
|||
local argumento={} |
local argumento={} |
||
local Entidad |
local Entidad |
||
local ModuloFicha = require('Módulo:Ficha') |
local ModuloFicha = require('Módulo:Ficha') |
||
local ModuloWikidata = require('Módulo:Wikidata') |
|||
local ModuloFormato = require('Módulo:Formato texto') |
|||
local ModuloPaginas = require('Módulo:Páginas') |
|||
local elementoTabla = require('Módulo:Tablas').elemento |
|||
local sinBandera = require('Módulo:Bandera').sinBandera |
|||
-- sin uso ? |
|||
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos') |
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos') |
||
local formatoURL |
local formatoURL = ModuloWikidataFormatos.formatoURL |
||
local sinEnlazar = {['enlace']='no', ['linkback']='sí'} |
local sinEnlazar = {['enlace']='no', ['linkback']='sí'} |
||
local sinLapiz = {} |
local sinLapiz = {} |
||
local ModuloWikidata = require('Módulo:Wikidata') |
|||
local ModuloFormato = require('Módulo:Formato texto') |
|||
local ModuloPaginas = require('Módulo:Páginas') |
|||
local elementoTabla = require('Módulo:Tablas').elemento |
|||
local getPropiedadWikidata = ModuloWikidata.getPropiedad |
|||
local sinBandera = require('Módulo:Bandera').sinBandera |
|||
local color = '#CDCDCD' |
|||
function obtenerColor() |
|||
local colores = { |
|||
['hotel'] = '#264796', |
|||
['edificio militar'] = '#665D1D', |
|||
['cuartel'] = '#665D1D', |
|||
['bar'] = '#BFFF00', |
|||
['restaurante'] = '#BFFF00', |
|||
['iglesia'] = '#B695C0', |
|||
['hospital'] = '#CB1D11', |
|||
} |
|||
local tipoedificio = elementoTabla(Entidad,'claims','P31',1,'mainsnak','datavalue') |
|||
tipoedificio = elementoTabla(tipoedificio,'value','id') |
|||
local nombretipoedificio= mw.wikibase.getEntityObject(tipoedificio) |
|||
nombretipoedificio = elementoTabla(nombretipoedificio,'labels','es','value') |
|||
local uso = argumento['tipo'] or argumento ['Tipo'] or argumento['uso'] or argumento['Uso'] or argumento ['usos'] or argumento['Usos'] or propiedad('P366') |
|||
if uso == "militar" or uso == "Militar" then |
|||
return colores['edificio militar'] |
|||
end |
|||
return colores[nombretipoedificio] or '#CDCDCD' |
|||
end |
|||
function obtenerSuperficie() |
|||
local superficie = elementoTabla(Entidad,'claims','P2046',1) |
|||
if superficie == nil then |
|||
return |
|||
end |
|||
local valoraltura = elementoTabla(superficie,'mainsnak','datavalue','value','amount') |
|||
local unidadaltura = elementoTabla(superficie,'mainsnak','datavalue','value','unit') |
|||
if unidadaltura == "https://www.wikidata.org/entity/Q857027" or "Q857027" then |
|||
valoraltura = (valoraltura * 929.0304)/10^4 |
|||
end |
|||
return valoraltura .." [[metro cuadrado|m²]]" |
|||
end |
|||
function z.prueba(frame) |
function z.prueba(frame) |
||
Línea 57: | Línea 21: | ||
function z.Ficha(frame) |
function z.Ficha(frame) |
||
ModuloWikidata:setFrame(frame) |
ModuloWikidata:setFrame(frame) |
||
argumento = obtenerArgumentosConValor(frame) |
|||
if argumento['wikidata'] == 'no' and (argumento['fecha de inauguración'] |
|||
or argumento['fecha de demolició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 |
|||
local pais = argumento['pais'] or argumento['país'] or propiedad('P17') |
local pais = argumento['pais'] or argumento['país'] or propiedad('P17') |
||
local tipodivadministrativa = argumento['tipo_división_administrativa'] |
local tipodivadministrativa = argumento['tipo_división_administrativa'] |
||
local divadministrativa = argumento['división_administrativa'] |
local divadministrativa = argumento['división_administrativa'] |
||
local imagen = argumento['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 |
|||
argumento['pie de foto'] |
|||
imagen, pieDeImagen = obtenerImagenWikidata() |
|||
else |
|||
end |
|||
imagen, pieDeImagen = obtenerImagenWikidata() |
|||
nombre = argumento['nombre'] or argumento['Nombre'] or |
|||
obtenerEtiquetaWikidata() or |
|||
end |
|||
ModuloPaginas.nombrePagina({desambiguar='sí'}) |
|||
nombre = argumento['nombre'] or argumento['Nombre'] or |
|||
nombrelocal = argumento['nombre local'] or argumento['Nombre local'] |
|||
obtenerEtiquetaWikidata() or |
|||
if nombre and nombrelocal and nombre ~= nombrelocal then |
|||
ModuloPaginas.nombrePagina({desambiguar='sí'}) |
|||
titulo = nombre .. '<br /><span style="font-size:smaller">' .. nombrelocal .. '</span>' |
|||
nombrelocal = argumento['nombre local'] or argumento['Nombre local'] |
|||
else |
|||
if nombre and nombrelocal and nombre ~= nombrelocal then |
|||
titulo = nombre |
|||
titulo = nombre .. '<br /><span style="font-size:smaller">' .. nombrelocal .. '</span>' |
|||
end |
|||
else |
|||
local color = obtenerColor() |
|||
titulo = nombre |
|||
local estilotitulo = 'background-color:'..color.. '; font-style:normal' |
|||
end |
|||
local estiloseccion = 'background-color:'..color |
|||
local color = obtenerColor() |
|||
local evsigs = devolverelemensigs(Entidad) |
|||
local estilotitulo = 'background-color:'..color.. '; font-style:normal' |
|||
if evsigs ~= nil then |
|||
local estiloseccion = 'background-color:'..color |
|||
local fechainicio = argumento['inicio'] or argumento['Inicio'] or (evsigs['Q385378'] and evsigs['Q385378']['fechainicio']) or '' |
|||
local fechafin = argumento['fin'] or argumento['Fin'] or (evsigs['Q385378'] and evsigs['Q385378']['fechainicio']) or '' |
|||
local calle = obtenerCalle() |
|||
local primerapiedra = argumento['fecha primera piedra'] or argumento['Fecha primera piedra'] or evsigs['Q106863'] or '' |
|||
local direccionpostal |
|||
else |
|||
local evsigs = devolverelemensigs(Entidad) |
|||
local fechainicio = argumento['inicio'] or argumento['Inicio'] |
|||
if evsigs ~= nil then |
|||
local fechafin = argumento['fin'] or argumento['Fin'] or argumento['término'] |
|||
local primerapiedra = argumento['fecha primera piedra'] or argumento['Fecha primera piedra'] |
|||
end |
|||
local primerapiedra = argumento['fecha primera piedra'] or argumento['Fecha primera piedra'] or evsigs[Q106863] |
|||
local direccionpostal = argumento['dirección'] or argumento['dirección postal'] or propiedad('P6375') or obtenerCalle() |
|||
else |
|||
local codigopostal = argumento['código postal'] or propiedad('P281') |
|||
if codigopostal then |
|||
local fechafin = argumento['fin'] or argumento['Fin'] |
|||
direccionpostal = ModuloFormato.separadosPorComa({direccionpostal, codigopostal}) |
|||
local primerapiedra = argumento['fecha primera piedra'] or argumento['Fecha primera piedra'] |
|||
end |
|||
local logotipo = argumento['logotipo'] or argumento['Logotipo'] or argumento['logo'] or argumento['Logotipo'] or propiedad('P154') |
|||
if codigopostal then |
|||
if logotipo ~= nil then |
|||
direccionpostal = ModuloFormato.separadosPorComa({propiedad('P6375') or calle, codigopostal}) |
|||
logotipo = '[[Archivo:'..logotipo..']]' |
|||
else |
|||
end |
|||
direccionpostal = propiedad('P6375') or calle or argumento['dirección'] or argumento['dirección postal'] |
|||
local Ficha = |
|||
end |
|||
{ |
|||
local logotipo = argumento['logotipo'] or argumento['Logotipo'] or argumento['logo'] or argumento['Logotipo'] or propiedad('P154') |
|||
['titulo'] = titulo, |
|||
if logotipo ~= nil then |
|||
imagen = imagen, |
|||
logotipo = '[[Archivo:'..logotipo..']]' |
|||
['tamañoimagen'] = argumento['tamaño de imagen'] or argumento['tamaño'] or |
|||
end |
|||
argumento['tamaño imagen'] or argumento['tamañoimagen'] or |
|||
local Ficha = { |
|||
argumento['tamañodelaimagen'] or argumento['tamaño de foto'] or |
|||
['titulo'] = titulo, |
|||
'220px', |
|||
imagen = imagen, |
|||
pie = pieDeImagen, |
|||
['tamañoimagen'] = argumento['tamaño de imagen'] or argumento['tamaño'] or |
|||
tipocabecera = 'edificio', |
|||
argumento['tamaño imagen'] or argumento['tamañoimagen'] or argumento['tamañodelaimagen'] or |
|||
estilotitulo = estilotitulo, |
|||
argumento['tamaño de foto'] or |
|||
estiloseccion = estiloseccion, |
|||
'220px', |
|||
estiloetiqueta = 'width:33%;', |
|||
pie = pieDeImagen, |
|||
{'',logotipo}, |
|||
tipocabecera = 'edificio', |
|||
{tipo = "sección", |
|||
estilotitulo = estilotitulo, |
|||
['titulo'] = "Localización", |
|||
estiloseccion = estiloseccion, |
|||
{'País', sinBandera( pais )}, |
|||
estiloetiqueta = 'width:33%;', |
|||
{tipodivadministrativa, sinBandera( divadministrativa )}, |
|||
{'',logotipo}, |
|||
{'Coordenadas' , argumento['coor'] or argumento['coordenadas'] or propiedad('P625', {formato='dms', display='inline,title', tipo='edu', uno='sí'})}, |
|||
{tipo = "sección", |
|||
{'Localización', sinBandera( argumento['localización'] or |
|||
['titulo'] = "Localización", |
|||
ModuloFormato.enVariasLineas({ModuloFormato.separadosPorComa({argumento['ciudad'], argumento['estado'], argumento['país']})}) or |
|||
{'País', pais}, |
|||
ModuloFormato.enVariasLineas({propiedad('P969'), ModuloFormato.separadosPorComa({propiedad('P131'),propiedad('P17')})}) )}, |
|||
{tipodivadministrativa, divadministrativa}, |
|||
{'Dirección postal', sinBandera( direccionpostal )}, |
|||
--{'Coordenadas' , argumento['coor'] or argumento['coordenadas'] or propiedad('P625', {formato='dms', display='inline,title', tipo='edu', uno='sí'})}, |
|||
}, |
|||
{'Coordenadas' , argumento['coor'] or argumento['coordenadas'] or propiedad('P625', {formato='dms', display='inline,title', tipo='edu', uno='sí'})}, |
|||
{tipo = "sección", |
|||
{'Localización',argumento['localización'] or |
|||
['titulo'] = "Información general", |
|||
ModuloFormato.enVariasLineas({ModuloFormato.separadosPorComa({argumento['ciudad'], argumento['estado'], argumento['país']})}) or |
|||
{'Nombres anteriores', argumento['nombres anteriores'] or argumento['Nombres anteriores']}, |
|||
ModuloFormato.enVariasLineas({propiedad('P969'), ModuloFormato.separadosPorComa({propiedad('P131'),propiedad('P17')})}) }, |
|||
{'Otros nombres',argumento['otros nombres'] or argumento['Otros nombres'] or propiedad('P4970')}, |
|||
{'Dirección postal', direccionpostal}, |
|||
{'Organización', argumento['organización'] or argumento['Organización'] or propiedad('P749')}, |
|||
{'Propietario', argumento['dueño'] or argumento['Dueño'] or propiedad('P127')}, |
|||
}, |
|||
{'Estado', argumento['estado'] or argumento['Estado']}, |
|||
{tipo = "sección", |
|||
{'Catalogación', argumento['catalogación'] or argumento['Catalogación']}, |
|||
['titulo'] = "Información general", |
|||
{'Se conecta con', argumento['se conecta con'] or argumento['Se conecta con']}, |
|||
{'Cruza',argumento['cruza'] or argumento['Cruza']}, |
|||
{'Número de vanos', argumento['ojos'] or argumento['Ojos']}, |
|||
{'Ocupante', argumento['ocupante'] or argumento['Ocupante']}, |
|||
{'Usos', argumento['uso'] or argumento['Uso'] or propiedad('P366')}, |
|||
{'Inicio de obra', fechainicio}, |
|||
{'Catalogación', argumento['catalogación'] or argumento['Catalogación']}, |
|||
{'[[Coronación]]', argumento['coronación'] or argumento['Coronación']}, |
|||
{'Finalización de obra', fechafin}, |
|||
{'Cruza',argumento['cruza'] or argumento['Cruza']}, |
|||
{'Fundación', argumento['fundación'] or argumento['Fundación'] or propiedad('P571')}, |
|||
{'Clausura', argumento['clausura'] or argumento['Clausura'] or propiedad('P3999')}, |
|||
{'Número de camas', argumento['camas'] or argumento['Camas'] or propiedad('P6801')}, |
|||
{'Número de télefono', argumento['telefono'] or argumento['Telefono'] or propiedad('P1329')}, |
|||
{'Inicio de obra', fechainicio}, |
|||
{'Emergencias', argumento['emergencias'] or argumento['Emergencias']}, |
|||
{'Afiliación', argumento['afiliación'] or argumento['Afiliación'] or propiedad('P1416')}, |
|||
{'Finalización de obra', fechafin}, |
|||
{'Red', argumento['red'] or argumento['Red']}, |
|||
{'Clasificación', argumento['clasificación'] or argumento['Clasificación']}, |
|||
{'Especialidad', argumento['especialidad'] or argumento['Especialidad']}, |
|||
{'Financiamiento', argumento['financiamiento'] or argumento['Financiamiento']}, |
|||
{'Estilo', argumento['estilo'] or argumento['Estilo'] or propiedad('P149')}, |
|||
{'Arrendatario actual', argumento['arrendatarios'] or argumento['Arrendatarios']}, |
|||
{'Nombrado en honor a', argumento['nombrado en honor a'] or argumento['Nombrado en honor a'] or propiedad('P138')}, |
|||
{'Primera piedra', primerapiedra }, |
|||
{'Clasificación', argumento['clasificación'] or argumento['Clasificación']}, |
|||
{'Antena', argumento['antena'] or argumento['Antena']}, |
|||
{'Piso más alto', argumento['piso mas alto'] or argumento['Piso mas alto'] or propiedad('P1101')}, |
|||
}, |
|||
{'Estilo', argumento['estilo'] or argumento['Estilo'] or propiedad('P149')}, |
|||
{tipo = "sección", |
|||
{'Arrendatario actual', argumento['arrendatarios'] or argumento['Arrendatarios']}, |
|||
['titulo'] = "Altura", |
|||
{'Nombrado en honor a', argumento['nombrado en honor a'] or argumento['Nombrado en honor a'] or propiedad('P138')}, |
|||
{'Altura arquitectónica', argumento['altura arquitectonica'] or argumento['Altura arquitectonica'] or argumento['altura'] or argumento['Altura'] or obtenerAlturas().altura}, |
|||
{'Primera piedra', primerapiedra }, |
|||
{'Altura máxima', argumento['altura maxima'] or argumento['Altura maxima'] or obtenerAlturas().maxima}, |
|||
}, |
|||
{'Piso más alto', argumento['piso mas alto'] or argumento['Piso mas alto'] or propiedad('P1101')}, |
|||
{tipo="sección", |
|||
}, |
|||
['título']="Record de altura", |
|||
{tipo = "sección", |
|||
{argumento['record de altura'] or argumento['Record de altura']}, |
|||
['titulo'] = "Altura", |
|||
{'Predecesor', argumento['precedecesor'] or argumento['Predecesor']}, |
|||
{'Altura arquitectónica', argumento['altura arquitectonica'] or argumento['Altura arquitectonica'] or argumento['altura'] or argumento['Altura'] or devolveraltura(Entidad).altura}, |
|||
}, |
|||
{'Altura máxima', argumento['altura maxima'] or argumento['Altura maxima'] or devolveraltura(Entidad).alturamaxima}, |
|||
{tipo = "sección", |
|||
}, |
|||
['titulo'] = "Detalles técnicos", |
|||
{tipo="sección", |
|||
{'Material', argumento['material'] or argumento['Material'] or obtenerMaterial()}, |
|||
['título']="Record de altura", |
|||
{'Superficie', argumento['superficie'] or argumento['Superficie'] or obtenerSuperficie()}, |
|||
{'Número de plantas', argumento['numero de plantas'] or argumento['Numero de plantas'] or propiedad('P1101')}, |
|||
{'Número de ascensores', argumento['numero de ascensores'] or argumento['Numero de ascensores'] or propiedad('P1301')}, |
|||
}, |
|||
}, |
|||
{tipo = "sección", |
|||
['titulo'] = 'Diseño y construcción', |
|||
{'Arquitecto', argumento['arquitecto'] or argumento['Arquitecto'] or propiedad('P84')}, |
|||
{'Ingeniero', argumento['ingeniero estructural'] or argumento['Ingeniero de servicios']}, |
|||
{'Ingeniero de servicios', argumento['ingeniero de servicios'] or argumento['Ingeniero de servicios']}, |
|||
{'Ingeniero civil', argumento['ingeniero civil'] or argumento['Ingeniero civil']}, |
|||
{'Otros', argumento['otros'] or argumento['Otros']}, |
|||
}, |
|||
{'Ingeniero estructural', argumento['ingeniero estructural'] or argumento['Ingeniero estructural'] or propiedad('P631')}, |
|||
{tipo = "sección", |
|||
{'Autor', argumento['autor'] or argumento['Autor']}, |
|||
['titulo'] = 'Diseño y construcción', |
|||
{'Contratista', argumento['contratista'] or argumento['Contratista']}, |
|||
{'Viviendas', argumento['viviendas'] or argumento['Viviendas']}, |
|||
{'Conocido por', argumento['conocido por'] or argumento['Conocido por']}, |
|||
}, |
|||
{'Ingeniero civil', argumento['ingeniero civil'] or argumento['Ingeniero civil']}, |
|||
{tipo = "sección", |
|||
{'Otros', argumento['otros'] or argumento['Otros']}, |
|||
['titulo'] = "Remodelación", |
|||
{'Ingeniero estructural', argumento['ingeniero estructural'] or argumento['Ingeniero estructural'] or propiedad('P631')}, |
|||
{'Ingeniero civil', argumento['rem ingeniero civil'] or argumento['Rem ingeniero civil']}, |
|||
{'Otros', argumento['rem otros'] or argumento['Rem otros']}, |
|||
{'Ingeniero estructural', argumento['rem ingeniero estructural'] or argumento['Rem ingeniero estructural']}, |
|||
{'Contratista', argumento['contratista'] or argumento['Contratista']}, |
|||
{'Premios', argumento['rem premios'] or argumento['rem premios']}, |
|||
}, |
|||
}, |
|||
{tipo = "sección", |
|||
["titulo"] = "Otra información", |
|||
--Bar o restaurante |
|||
{'Ingeniero civil', argumento['rem ingeniero civil'] or argumento['Rem ingeniero civil']}, |
|||
{"N.º de asientos", argumento["nro de asientos"] or argumento["Nro de asientos"] or propiedad("P1083")}, |
|||
{"N.º de tiendas", argumento['nro de tiendas'] or argumento['Nro de tiendas'] }, |
|||
--Hotel |
|||
{'Contratista', argumento['contratista'] or argumento['Contratista']}, |
|||
{"N.º de habitaciones", argumento["nro de habitaciones"] or argumento["Nro de habitaciones"]}, |
|||
{"N.º de suites", argumento["nro de suites"] or argumento["Nro de suites"]}, |
|||
}, |
|||
{"N.º de restaurantes", argumento["nro de restaurantes"] or argumento["Nro de restaurantes"]}, |
|||
{tipo = "sección", |
|||
{"N.º de bares", argumento["nro de bares"] or argumento["Nro de bares"]}, |
|||
["titulo"] = "Otra información", |
|||
{"Estrellas", argumento["estrellas"] or argumento["Estrellas"]}, |
|||
--Bar o restaurante |
|||
--Edificios religiosos |
|||
{"N.º de asientos", argumento["nro de asientos"] or argumento["Nro de asientos"] or propiedad("P1083")}, |
|||
{"Culto", argumento["culto"] or argumento["Culto"] or propiedad("P140")}, |
|||
{"Diócesis", argumento["diocesis"] or argumento["Diocesis"] or propiedad("P708")}, |
|||
--Hotel |
|||
{"Advocación", argumento["advocacion"] or argumento["Advocacion"] or propiedad("P825")}, |
|||
--Edificios militares |
|||
{"N.º de suites", argumento["nro de suites"] or argumento["Nro de suites"]}, |
|||
{"Controlador", argumento["controlado por"] or argumento["Controlado por"] }, |
|||
{"Guarnición", argumento["guarnición"] or argumento["Guarnición"]}, |
|||
{"Comandante actual", argumento["comandante actual"] or argumento["Comandante actual"]}, |
|||
{"Ocupantes", argumento["ocupantes"] or argumento["Ocupantes"] or propiedad("P466")}, |
|||
--Edificios religiosos |
|||
{"Batallas", argumento["batallas"] or argumento["Batallas"]}, |
|||
{"Eventos", argumento["eventos"] or argumento["Eventos"]}, |
|||
{"Período", argumento["periodo"] or argumento["Periodo"]}, |
|||
}, |
|||
--Edificios militares |
|||
{tipo = "sección", |
|||
{"Controlador", argumento["controlado por"] or argumento["Controlado por"] }, |
|||
['titulo'] = "Sitio web", |
|||
{"Guarnición", argumento["guarnición"] or argumento["Guarnición"]}, |
|||
{'Sitio web', argumento['sitio web'] or argumento['Sitio web'] or propiedad('P856')}, |
|||
}, |
|||
{"Ocupantes", argumento["ocupantes"] or argumento["Ocupantes"] or propiedad("P466")}, |
|||
{tipo = "sección", |
|||
{"Batallas", argumento["batallas"] or argumento["Batallas"]}, |
|||
['titulo'] = "Referencias", |
|||
{"Eventos", argumento["eventos"] or argumento["Eventos"]}, |
|||
{argumento["premios"] or argumento["Premios"] or propiedad("P166")}, |
|||
{argumento['referencias'] or argumento['Referencias']}, |
|||
}, |
|||
} |
|||
{tipo = "sección", |
|||
['titulo'] = "Sitio web", |
|||
{'Sitio web', argumento['sitio web'] or argumento['Sitio web'] or propiedad('P856')}, |
|||
}, |
|||
{tipo = "sección", |
|||
['titulo'] = "Referencias", |
|||
{argumento["premios"] or argumento["Premios"] or propiedad("P166")}, |
|||
{argumento['referencias'] or argumento['Referencias']}, |
|||
} |
|||
} |
} |
||
return ModuloFicha.infobox(Ficha) |
return ModuloFicha.infobox(Ficha) |
||
end |
end |
||
function obtenerImagenWikidata() |
function obtenerImagenWikidata() |
||
local imagen, valorImagen, piesDeImagen, k, pieDeImagen |
|||
if not Entidad then |
|||
return |
|||
end |
|||
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 |
|||
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 |
return valorImagen |
||
end |
end |
||
function obtenerArgumentosConValor(frame) |
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 |
end |
||
function obtenerEtiquetaWikidata() |
function obtenerEtiquetaWikidata() |
||
if Entidad and Entidad.labels and Entidad.labels.es then |
|||
return Entidad.labels.es.value |
|||
end |
|||
end |
end |
||
function propiedad(idPropiedad,opciones) |
function propiedad(idPropiedad,opciones) |
||
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 |
end |
||
--Devuelve la fecha de inicio y fin de la construcción |
--Devuelve la fecha de inicio y fin de la construcción |
||
function obtenerfechasObra(unaTabla) |
function obtenerfechasObra(unaTabla) |
||
-- TODO: MóduloWikidataFormatos.formatoPeriodo ? |
|||
--local evsig = elementoTabla(Entidad, 'claims','P793',1) |
|||
--local evsig = elementoTabla(Entidad, 'claims','P793',1) |
|||
--local construccion = elementoTabla(Entidad,'claims','P793',1) |
|||
local precision = elementoTabla(unaTabla,'qualifiers','P580',1,'datavalue','value','precision') |
|||
if precision ~= 11 then |
|||
return |
|||
end |
|||
local fechainicio = elementoTabla(unaTabla,'qualifiers','P580',1,'datavalue','value','time') |
|||
local anyoinicio = tonumber(fechainicio:sub(2,5)) |
|||
local mesinicio = tonumber(fechainicio:sub(7,8)) |
|||
local diainicio = tonumber(fechainicio:sub(10,11)) |
|||
local fechafin = elementoTabla(unaTabla,'qualifiers','P582',1,'datavalue','value','time') |
|||
local anyofin = tonumber(fechafin:sub(2,5)) |
|||
local mesfin = tonumber(fechafin:sub(7,8)) |
|||
local diafin = tonumber(fechafin:sub(10,11)) |
|||
local meses = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"} |
|||
local retorno = {} |
|||
retorno['fechainicio'] = diainicio ..' de '..meses[mesinicio]..' de '..anyoinicio |
|||
retorno['fechafin'] = diafin..' de '..meses[mesfin]..' de ' ..anyofin |
|||
return retorno |
|||
end |
|||
--Devuelve la fecha ceremonia de inauguración |
--Devuelve la fecha ceremonia de inauguración |
||
function devolvercereminaug(unaTabla) |
function devolvercereminaug(unaTabla) |
||
-- TODO: MóduloWikidataFormatos.formatoPeriodo ? |
|||
local precision = elementoTabla(unaTabla,'qualifiers','P580',1,'datavalue','value','precision') -- 'fecha de inicio' |
|||
if precision ~= 11 then |
|||
return |
|||
end |
|||
local fecha = elementoTabla(unaTabla,'qualifiers','P585',1,'datavalue','value','time') -- 'fecha' |
|||
local anyo = tonumber(fechainicio:sub(2,5)) |
|||
local mes = tonumber(fechainicio:sub(7,8)) |
|||
local meses = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"} |
|||
local dia = tonumber(fechainicio:sub(10,11)) |
|||
local fecha = elementoTabla(unaTabla,'qualifiers','P582',1,'datavalue','value','time') -- 'fecha de fin' |
|||
local retorno = dia .."de" ..meses[mes] .. "de" ..anyo |
|||
return retorno |
|||
end |
end |
||
--Devuelve los campos de elementos significativos de Wikidata |
--Devuelve los campos de elementos significativos de Wikidata |
||
function devolverelemensigs(unaEntidad) |
function devolverelemensigs(unaEntidad) |
||
local evsigs = elementoTabla(unaEntidad,'claims','P793') |
local evsigs = elementoTabla(unaEntidad,'claims','P793') -- 'evento significativo' |
||
if evsigs == nil then |
if evsigs == nil then |
||
return |
return |
||
end |
end |
||
local elementos = {} |
|||
for i, j in pairs(evsigs) |
|||
do |
|||
do |
|||
valorQ = elementoTabla(j,'mainsnak','datavalue','value','id') |
|||
if valorQ == 'Q385378' then -- 'construcción' |
|||
elementos[valorQ] = obtenerfechasObra(j) |
|||
elseif valorQ == 'Q3010369' then -- 'ceremonia de inauguración' |
|||
end |
|||
elementos[valorQ] = devolvercereminaug(j) |
|||
if valorQ == 'Q3010369' then |
|||
elseif valorQ == 'Q744913' then -- 'accidente de aviación' |
|||
elementos[valorQ] = devolvercereminaug(j) |
|||
elementos[valorQ] = elementoTabla(construccion,'qualifiers','P805',1,'datavalue','value','id') |
|||
end |
|||
elseif valorQ == 'Q1068633' then -- 'primera piedra' |
|||
elementos[valorQ] = elementoTabla(construccion,'qualifiers','P585',1,'datavalue','value','time') |
|||
end |
|||
end |
|||
if valorQ == 'Q1068633' then |
|||
return elementos |
|||
elementos[valorQ]= elementoTabla(construccion,'qualifiers','P585',1,'datavalue','value','time') |
|||
end |
|||
end |
|||
return elementos |
|||
end |
end |
||
--Devuelve la altura en metros |
|||
function |
function obtenerColor() |
||
-- TODO: revisar colores y contraste |
|||
local valores = elementoTabla(unaTabla,'claims','P2048') |
|||
local colores = { |
|||
local alturamaxima, unidadalturamaxima |
|||
['hotel'] = '#264796', -- revisar, azul demasiado oscuro, no se diferencia el texto |
|||
local retorno = {} |
|||
['edificio militar'] = '#665D1D', -- revisar, marrón demasiado oscuro, no se diferencia el texto |
|||
if valores == nil then |
|||
['cuartel'] = '#665D1D', -- ídem anterior |
|||
retorno.altura = "" |
|||
['bar'] = '#BFFF00', -- revisar, verde claro intenso, fosforito ? |
|||
retorno.alturamaxima= "" |
|||
['restaurante'] = '#BFFF00', -- ídem anterior |
|||
return retorno |
|||
['iglesia'] = '#F3D5E1', -- según {{Ficha de edificio religioso}} |
|||
else |
|||
['hospital'] = '#CB1D11', -- revisar, rojo demasiado fuerte |
|||
for i,j in pairs(valores) |
|||
} |
|||
do |
|||
local tipoedificio = elementoTabla(Entidad,'claims','P31',1,'mainsnak','datavalue') |
|||
tipoedificio = elementoTabla(tipoedificio,'value','id') |
|||
if valorQ == 'Q26970842'then |
|||
local nombretipoedificio= mw.wikibase.getEntityObject(tipoedificio) |
|||
alturamaxima = elementoTabla(j,'mainsnak','datavalue','value','amount') |
|||
nombretipoedificio = elementoTabla(nombretipoedificio,'labels','es','value') |
|||
local uso = argumento['tipo'] or argumento ['Tipo'] or argumento['uso'] or argumento['Uso'] or argumento ['usos'] or argumento['Usos'] or propiedad('P366') |
|||
end |
|||
if uso == "militar" or uso == "Militar" then |
|||
return colores['edificio militar'] |
|||
altura = elementoTabla(j,'mainsnak','datavalue','value','amount') |
|||
end |
|||
unidadaaltura = elementoTabla(j,'mainsnak','datavalue','value','unit') |
|||
return colores[nombretipoedificio] or '#ddd' -- según {{Ficha de edificio}} [original] |
|||
end |
|||
end |
|||
if unidadalturamaxima == "http://www.wikidata.org/entity/Q3710" or unidadalturamaxima == "Q3710" then |
|||
unidadalturamaxima = unidadalturamaxima * 0.3048 |
|||
end |
|||
retorno.altura = string.gsub(tostring(altura)..'[[metro|m]]','+','') |
|||
retorno.alturamaxima = string.gsub(tostring(alturamaxima)..'[[metro|m]]','+','') |
|||
end |
end |
||
return retorno |
|||
function obtenerSuperficie() |
|||
-- global Entidad |
|||
local frame = mw.getCurrentFrame() |
|||
local valor = {} |
|||
local datos = elementoTabla(Entidad,'claims','P2046') -- 'superficie' |
|||
if datos ~= nil then |
|||
for i, j in pairs(datos) |
|||
do |
|||
local medida = elementoTabla(j,'mainsnak','datavalue','value','amount') |
|||
local unidad = elementoTabla(j,'mainsnak','datavalue','value','unit') |
|||
if medida ~= nil then |
|||
unidad = mw.ustring.gsub(unidad, '^.-/(Q%d+)$', '%1') |
|||
if unidad ~= 'Q25343' then -- unidades en 'metro cuadrado' |
|||
local unidades = { |
|||
-- véanse valores admitidos para 'superficie' en https://www.wikidata.org/wiki/Property:P2046#P2302 |
|||
['Q2737347' ] = 'mm2', |
|||
['Q2489298' ] = 'cm2', |
|||
['Q25343' ] = 'm2', -- unidad de destino |
|||
['Q712226' ] = 'km2', |
|||
['Q185078' ] = 'dam2', |
|||
['Q35852' ] = 'ha', |
|||
['Q81292' ] = 'acre', |
|||
['Q232291' ] = 'sqmi', |
|||
['Q857027' ] = 'sqft', |
|||
['Q1063786' ] = 'sqin', |
|||
-- ['Q21074767'] = 'sqvt', -- medida antigua en desuso, [[versta]] cuadrada |
|||
-- ['Q669931' ] = 'dessiatin', -- medida antigua en desuso |
|||
-- ['Q935614' ] = 'rai', -- medida antigua en desuso |
|||
-- ['Q216795' ] = 'dunam', -- medida antigua en desuso, [[dunam]] |
|||
-- ['Q23931103'] = 'nmi²', -- no para edificios |
|||
-- ['Q254532' ] = 'sqdeg', -- no para edificios |
|||
-- ? 'sqyd' |
|||
} |
|||
medida = frame:preprocess('{{Convertir|' .. medida .. '|' .. unidades[unidad] .. '|m2|abr=3|disp=#}}') |
|||
end |
|||
valor[ #valor + 1 ] = frame:preprocess('{{Unidad|' .. tostring( tonumber( medida ) ) .. '|[[metro cuadrado|m²]]}}') |
|||
end |
|||
end |
|||
end |
|||
return mw.text.listToText( valor, ' o ', ' o ' ) |
|||
end |
|||
function obtenerAlturas() |
|||
-- global Entidad |
|||
local frame = mw.getCurrentFrame() |
|||
local valor = {} |
|||
local datos = elementoTabla(Entidad,'claims','P2048') -- 'altura' |
|||
if datos ~= nil then |
|||
local valores = {} |
|||
local altmax = '' |
|||
local altarq = '' |
|||
for i, j in pairs(datos) |
|||
do |
|||
local medida = elementoTabla(j,'mainsnak','datavalue','value','amount') |
|||
local unidad = elementoTabla(j,'mainsnak','datavalue','value','unit') |
|||
if medida ~= nil then |
|||
unidad = mw.ustring.gsub(unidad, '^.-/(Q%d+)$', '%1') |
|||
if unidad ~= 'Q11573' then -- unidades en 'metro' |
|||
local unidades = { |
|||
-- véanse valores admitidos para 'altura' en https://www.wikidata.org/wiki/Property:P2048#P2302 |
|||
['Q174789'] = 'mm', |
|||
['Q174728'] = 'cm', |
|||
-- ['Q11573'] = 'm', -- unidad de destino |
|||
['Q828224'] = 'km', |
|||
['Q218593'] = 'in', |
|||
['Q3710' ] = 'ft', |
|||
-- ['Q355198' ] = 'pixel', -- no para edificios |
|||
-- ['Q7673190'] = 'celda', -- no para edificios |
|||
-- ? 'yd' |
|||
} |
|||
medida = frame:preprocess('{{Convertir|' .. medida .. '|' .. unidades[unidad] .. '|m|abr=3|disp=#}}') |
|||
end |
|||
valores[i] = tonumber( medida ) |
|||
local texto = frame:preprocess('{{Unidad|' .. tostring( valores[i] ) .. '|[[metro|m]]}}') |
|||
local parte = elementoTabla(j,'qualifiers','P518',1,'datavalue','value','id') |
|||
if parte == 'Q26970842' then -- 'altura máxima' |
|||
if altmax ~= '' then |
|||
altmax = altmax .. ' o ' |
|||
end |
|||
altmax = altmax .. texto |
|||
elseif parte == 'Q24192182' then -- 'altura arquitectónica' |
|||
if altarq ~= '' then |
|||
altarq = altarq .. ' o ' |
|||
end |
|||
altarq = altarq .. texto |
|||
end |
|||
end |
|||
end |
|||
-- cuando no se especifica la 'altura máxima' se muestra la máxima altura disponible: |
|||
if altmax == '' and #valores > 0 then |
|||
altmax = 0 |
|||
for i,j in pairs(valores) |
|||
do |
|||
if altmax < tonumber(j) then |
|||
altmax = tonumber(j) |
|||
end |
|||
end |
|||
altmax = frame:preprocess('{{Unidad|' .. tostring(altmax) .. '|[[metro|m]]}}') |
|||
end |
|||
-- -- cuando no se especifica la 'altura arquitectónica' se muestran todas las alturas disponibles: |
|||
-- if altarq == '' and #valores > 0 then |
|||
-- altarq = '' |
|||
-- for i,j in pairs(valores) |
|||
-- do |
|||
-- if altarq ~= '' then |
|||
-- altarq = altarq .. ' o ' |
|||
-- end |
|||
-- altarq = frame:preprocess('{{Unidad|' .. tostring(j) .. '|[[metro|m]]}}') |
|||
-- end |
|||
-- end |
|||
valor.maxima = altmax |
|||
valor.altura = altarq |
|||
end |
|||
return valor |
|||
end |
end |
||
function obtenerCalle() |
function obtenerCalle() |
||
-- global Entidad |
|||
Entidad = mw.wikibase.getEntityObject(argumento['id']) or {} |
|||
local valor = {} |
|||
local calles = elementoTabla(Entidad,'claims','P669') |
|||
local datos = elementoTabla(Entidad,'claims','P669') -- 'calle' |
|||
local retorno = '' |
|||
if datos ~= nil then |
|||
for i, j in pairs(datos) |
|||
return |
|||
do |
|||
else |
|||
local qid = elementoTabla(j,'mainsnak','datavalue','value','id') |
|||
for i, j in pairs(calles) |
|||
local obj = mw.wikibase.getEntityObject(qid) |
|||
do |
|||
if obj ~= nil then |
|||
local calle = elementoTabla(j, 'mainsnak','datavalue','value','id') |
|||
local titulo = elementoTabla(obj,'labels','es','value') |
|||
local pagina = obj:getSitelink('eswiki') |
|||
nrocalle = elementoTabla(nrocalle,'value') |
|||
if titulo ~= nil then |
|||
local nombrecalle = mw.wikibase.getEntityObject(calle) |
|||
local entrada = '' |
|||
nombrecalle = elementoTabla(nombrecalle,'labels','es','value') |
|||
if pagina ~= nil then |
|||
local aux = mw.wikibase.getEntity(calle) |
|||
entrada = '[[' .. pagina .. '|' .. titulo .. ']]' |
|||
local pagina = aux:getSitelink('eswiki') |
|||
else |
|||
if pagina ~= nil then |
|||
entrada = titulo |
|||
if pagina ~= nombrecalle then |
|||
end |
|||
if nrocalle ~= nil then |
|||
local nrocalle = elementoTabla(j,'qualifiers','P670',1,'datavalue','value') |
|||
retorno = retorno.. '[['..pagina..'|'..nombrecalle..']] Nº'..nrocalle..' y ' |
|||
if nrocalle ~= nil then |
|||
else |
|||
entrada = entrada .. ' n.º ' .. nrocalle |
|||
retorno = retorno.. '[['..pagina..'|'..nombrecalle..']]'..' y ' |
|||
end |
|||
end |
|||
valor[ #valor + 1 ] = entrada |
|||
else |
|||
end |
|||
if nrocalle ~= nil then |
|||
end |
|||
retorno = retorno.. nombrecalle..'Nº'..nrocalle..' y ' |
|||
end |
|||
else |
|||
end |
|||
retorno = retorno.. nombrecalle..' y ' |
|||
return mw.text.listToText( valor ) |
|||
end |
|||
end |
|||
else |
|||
if nrocalle ~= nil then |
|||
retorno = retorno ..nombrecalle..'Nº'..nrocalle..' y ' |
|||
else |
|||
retorno = retorno..nombrecalle..' y' |
|||
end |
|||
end |
|||
end |
|||
end |
|||
return string.sub(retorno,0,-3) |
|||
end |
end |
||
function obtenerMaterial() |
function obtenerMaterial() |
||
-- global Entidad |
|||
Entidad = mw.wikibase.getEntityObject(argumento['id']) or {} |
|||
local valor = {} |
|||
materiales = elementoTabla(Entidad,'claims','P186') |
|||
local datos = elementoTabla(Entidad,'claims','P186') -- 'material empleado' |
|||
local material = "" |
|||
if datos ~= nil then |
|||
for i,j in pairs(datos) |
|||
local auxQ, aux |
|||
do |
|||
for i,j in pairs(materiales) |
|||
local qid = elementoTabla(j,'mainsnak','datavalue','value','id') |
|||
do |
|||
local obj = mw.wikibase.getEntityObject(qid) |
|||
auxQ = elementoTabla(j, 'mainsnak','datavalue','value','id') |
|||
if obj ~= nil then |
|||
aux = mw.wikibase.getEntityObject(auxQ) or {} |
|||
local titulo = elementoTabla(obj,'labels','es','value') |
|||
local pagina = obj:getSitelink('eswiki') |
|||
end |
|||
if titulo ~= nil then |
|||
end |
|||
if pagina ~= nil then |
|||
return material |
|||
valor[ #valor + 1 ] = '[[' .. pagina .. '|' .. titulo .. ']]' |
|||
else |
|||
valor[ #valor + 1 ] = titulo |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
return mw.text.listToText( valor ) |
|||
end |
end |
||
return z |
return z |
Revisión del 15:51 26 may 2020
Este módulo no tiene página de documentación[crear]
local z = {}
local argumento={}
local Entidad
local ModuloFicha = require('Módulo:Ficha')
local ModuloWikidata = require('Módulo:Wikidata')
local ModuloFormato = require('Módulo:Formato texto')
local ModuloPaginas = require('Módulo:Páginas')
local elementoTabla = require('Módulo:Tablas').elemento
local sinBandera = require('Módulo:Bandera').sinBandera
-- sin uso ?
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local formatoURL = ModuloWikidataFormatos.formatoURL
local sinEnlazar = {['enlace']='no', ['linkback']='sí'}
local sinLapiz = {}
function z.prueba(frame)
return obtenerCalle()
end
function z.Ficha(frame)
ModuloWikidata:setFrame(frame)
argumento = obtenerArgumentosConValor(frame)
if argumento['wikidata'] == 'no' and (argumento['fecha de inauguración']
or argumento['fecha de demolició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
local pais = argumento['pais'] or argumento['país'] or propiedad('P17')
local tipodivadministrativa = argumento['tipo_división_administrativa']
local divadministrativa = argumento['división_administrativa']
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()
end
nombre = argumento['nombre'] or argumento['Nombre'] or
obtenerEtiquetaWikidata() or
ModuloPaginas.nombrePagina({desambiguar='sí'})
nombrelocal = argumento['nombre local'] or argumento['Nombre local']
if nombre and nombrelocal and nombre ~= nombrelocal then
titulo = nombre .. '<br /><span style="font-size:smaller">' .. nombrelocal .. '</span>'
else
titulo = nombre
end
local color = obtenerColor()
local estilotitulo = 'background-color:'..color.. '; font-style:normal'
local estiloseccion = 'background-color:'..color
local evsigs = devolverelemensigs(Entidad)
if evsigs ~= nil then
local fechainicio = argumento['inicio'] or argumento['Inicio'] or (evsigs['Q385378'] and evsigs['Q385378']['fechainicio']) or ''
local fechafin = argumento['fin'] or argumento['Fin'] or (evsigs['Q385378'] and evsigs['Q385378']['fechainicio']) or ''
local primerapiedra = argumento['fecha primera piedra'] or argumento['Fecha primera piedra'] or evsigs['Q106863'] or ''
else
local fechainicio = argumento['inicio'] or argumento['Inicio']
local fechafin = argumento['fin'] or argumento['Fin'] or argumento['término']
local primerapiedra = argumento['fecha primera piedra'] or argumento['Fecha primera piedra']
end
local direccionpostal = argumento['dirección'] or argumento['dirección postal'] or propiedad('P6375') or obtenerCalle()
local codigopostal = argumento['código postal'] or propiedad('P281')
if codigopostal then
direccionpostal = ModuloFormato.separadosPorComa({direccionpostal, codigopostal})
end
local logotipo = argumento['logotipo'] or argumento['Logotipo'] or argumento['logo'] or argumento['Logotipo'] or propiedad('P154')
if logotipo ~= nil then
logotipo = '[[Archivo:'..logotipo..']]'
end
local Ficha =
{
['titulo'] = titulo,
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',
pie = pieDeImagen,
tipocabecera = 'edificio',
estilotitulo = estilotitulo,
estiloseccion = estiloseccion,
estiloetiqueta = 'width:33%;',
{'',logotipo},
{tipo = "sección",
['titulo'] = "Localización",
{'País', sinBandera( pais )},
{tipodivadministrativa, sinBandera( divadministrativa )},
{'Coordenadas' , argumento['coor'] or argumento['coordenadas'] or propiedad('P625', {formato='dms', display='inline,title', tipo='edu', uno='sí'})},
{'Localización', sinBandera( argumento['localización'] or
ModuloFormato.enVariasLineas({ModuloFormato.separadosPorComa({argumento['ciudad'], argumento['estado'], argumento['país']})}) or
ModuloFormato.enVariasLineas({propiedad('P969'), ModuloFormato.separadosPorComa({propiedad('P131'),propiedad('P17')})}) )},
{'Dirección postal', sinBandera( direccionpostal )},
},
{tipo = "sección",
['titulo'] = "Información general",
{'Nombres anteriores', argumento['nombres anteriores'] or argumento['Nombres anteriores']},
{'Otros nombres',argumento['otros nombres'] or argumento['Otros nombres'] or propiedad('P4970')},
{'Organización', argumento['organización'] or argumento['Organización'] or propiedad('P749')},
{'Propietario', argumento['dueño'] or argumento['Dueño'] or propiedad('P127')},
{'Estado', argumento['estado'] or argumento['Estado']},
{'Catalogación', argumento['catalogación'] or argumento['Catalogación']},
{'Se conecta con', argumento['se conecta con'] or argumento['Se conecta con']},
{'Cruza',argumento['cruza'] or argumento['Cruza']},
{'Número de vanos', argumento['ojos'] or argumento['Ojos']},
{'Ocupante', argumento['ocupante'] or argumento['Ocupante']},
{'Usos', argumento['uso'] or argumento['Uso'] or propiedad('P366')},
{'Inicio de obra', fechainicio},
{'[[Coronación]]', argumento['coronación'] or argumento['Coronación']},
{'Finalización de obra', fechafin},
{'Fundación', argumento['fundación'] or argumento['Fundación'] or propiedad('P571')},
{'Clausura', argumento['clausura'] or argumento['Clausura'] or propiedad('P3999')},
{'Número de camas', argumento['camas'] or argumento['Camas'] or propiedad('P6801')},
{'Número de télefono', argumento['telefono'] or argumento['Telefono'] or propiedad('P1329')},
{'Emergencias', argumento['emergencias'] or argumento['Emergencias']},
{'Afiliación', argumento['afiliación'] or argumento['Afiliación'] or propiedad('P1416')},
{'Red', argumento['red'] or argumento['Red']},
{'Clasificación', argumento['clasificación'] or argumento['Clasificación']},
{'Especialidad', argumento['especialidad'] or argumento['Especialidad']},
{'Financiamiento', argumento['financiamiento'] or argumento['Financiamiento']},
{'Estilo', argumento['estilo'] or argumento['Estilo'] or propiedad('P149')},
{'Arrendatario actual', argumento['arrendatarios'] or argumento['Arrendatarios']},
{'Nombrado en honor a', argumento['nombrado en honor a'] or argumento['Nombrado en honor a'] or propiedad('P138')},
{'Primera piedra', primerapiedra },
{'Antena', argumento['antena'] or argumento['Antena']},
{'Piso más alto', argumento['piso mas alto'] or argumento['Piso mas alto'] or propiedad('P1101')},
},
{tipo = "sección",
['titulo'] = "Altura",
{'Altura arquitectónica', argumento['altura arquitectonica'] or argumento['Altura arquitectonica'] or argumento['altura'] or argumento['Altura'] or obtenerAlturas().altura},
{'Altura máxima', argumento['altura maxima'] or argumento['Altura maxima'] or obtenerAlturas().maxima},
},
{tipo="sección",
['título']="Record de altura",
{argumento['record de altura'] or argumento['Record de altura']},
{'Predecesor', argumento['precedecesor'] or argumento['Predecesor']},
},
{tipo = "sección",
['titulo'] = "Detalles técnicos",
{'Material', argumento['material'] or argumento['Material'] or obtenerMaterial()},
{'Superficie', argumento['superficie'] or argumento['Superficie'] or obtenerSuperficie()},
{'Número de plantas', argumento['numero de plantas'] or argumento['Numero de plantas'] or propiedad('P1101')},
{'Número de ascensores', argumento['numero de ascensores'] or argumento['Numero de ascensores'] or propiedad('P1301')},
},
{tipo = "sección",
['titulo'] = 'Diseño y construcción',
{'Arquitecto', argumento['arquitecto'] or argumento['Arquitecto'] or propiedad('P84')},
{'Ingeniero', argumento['ingeniero estructural'] or argumento['Ingeniero de servicios']},
{'Ingeniero de servicios', argumento['ingeniero de servicios'] or argumento['Ingeniero de servicios']},
{'Ingeniero civil', argumento['ingeniero civil'] or argumento['Ingeniero civil']},
{'Otros', argumento['otros'] or argumento['Otros']},
{'Ingeniero estructural', argumento['ingeniero estructural'] or argumento['Ingeniero estructural'] or propiedad('P631')},
{'Autor', argumento['autor'] or argumento['Autor']},
{'Contratista', argumento['contratista'] or argumento['Contratista']},
{'Viviendas', argumento['viviendas'] or argumento['Viviendas']},
{'Conocido por', argumento['conocido por'] or argumento['Conocido por']},
},
{tipo = "sección",
['titulo'] = "Remodelación",
{'Ingeniero civil', argumento['rem ingeniero civil'] or argumento['Rem ingeniero civil']},
{'Otros', argumento['rem otros'] or argumento['Rem otros']},
{'Ingeniero estructural', argumento['rem ingeniero estructural'] or argumento['Rem ingeniero estructural']},
{'Contratista', argumento['contratista'] or argumento['Contratista']},
{'Premios', argumento['rem premios'] or argumento['rem premios']},
},
{tipo = "sección",
["titulo"] = "Otra información",
--Bar o restaurante
{"N.º de asientos", argumento["nro de asientos"] or argumento["Nro de asientos"] or propiedad("P1083")},
{"N.º de tiendas", argumento['nro de tiendas'] or argumento['Nro de tiendas'] },
--Hotel
{"N.º de habitaciones", argumento["nro de habitaciones"] or argumento["Nro de habitaciones"]},
{"N.º de suites", argumento["nro de suites"] or argumento["Nro de suites"]},
{"N.º de restaurantes", argumento["nro de restaurantes"] or argumento["Nro de restaurantes"]},
{"N.º de bares", argumento["nro de bares"] or argumento["Nro de bares"]},
{"Estrellas", argumento["estrellas"] or argumento["Estrellas"]},
--Edificios religiosos
{"Culto", argumento["culto"] or argumento["Culto"] or propiedad("P140")},
{"Diócesis", argumento["diocesis"] or argumento["Diocesis"] or propiedad("P708")},
{"Advocación", argumento["advocacion"] or argumento["Advocacion"] or propiedad("P825")},
--Edificios militares
{"Controlador", argumento["controlado por"] or argumento["Controlado por"] },
{"Guarnición", argumento["guarnición"] or argumento["Guarnición"]},
{"Comandante actual", argumento["comandante actual"] or argumento["Comandante actual"]},
{"Ocupantes", argumento["ocupantes"] or argumento["Ocupantes"] or propiedad("P466")},
{"Batallas", argumento["batallas"] or argumento["Batallas"]},
{"Eventos", argumento["eventos"] or argumento["Eventos"]},
{"Período", argumento["periodo"] or argumento["Periodo"]},
},
{tipo = "sección",
['titulo'] = "Sitio web",
{'Sitio web', argumento['sitio web'] or argumento['Sitio web'] or propiedad('P856')},
},
{tipo = "sección",
['titulo'] = "Referencias",
{argumento["premios"] or argumento["Premios"] or propiedad("P166")},
{argumento['referencias'] or argumento['Referencias']},
}
}
return ModuloFicha.infobox(Ficha)
end
function obtenerImagenWikidata()
local imagen, valorImagen, piesDeImagen, k, pieDeImagen
if not Entidad then
return
end
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 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 obtenerEtiquetaWikidata()
if Entidad and Entidad.labels and Entidad.labels.es then
return Entidad.labels.es.value
end
end
function propiedad(idPropiedad,opciones)
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
--Devuelve la fecha de inicio y fin de la construcción
function obtenerfechasObra(unaTabla)
-- TODO: MóduloWikidataFormatos.formatoPeriodo ?
--local evsig = elementoTabla(Entidad, 'claims','P793',1)
--local construccion = elementoTabla(Entidad,'claims','P793',1)
local precision = elementoTabla(unaTabla,'qualifiers','P580',1,'datavalue','value','precision')
if precision ~= 11 then
return
end
local fechainicio = elementoTabla(unaTabla,'qualifiers','P580',1,'datavalue','value','time')
local anyoinicio = tonumber(fechainicio:sub(2,5))
local mesinicio = tonumber(fechainicio:sub(7,8))
local diainicio = tonumber(fechainicio:sub(10,11))
local fechafin = elementoTabla(unaTabla,'qualifiers','P582',1,'datavalue','value','time')
local anyofin = tonumber(fechafin:sub(2,5))
local mesfin = tonumber(fechafin:sub(7,8))
local diafin = tonumber(fechafin:sub(10,11))
local meses = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"}
local retorno = {}
retorno['fechainicio'] = diainicio ..' de '..meses[mesinicio]..' de '..anyoinicio
retorno['fechafin'] = diafin..' de '..meses[mesfin]..' de ' ..anyofin
return retorno
end
--Devuelve la fecha ceremonia de inauguración
function devolvercereminaug(unaTabla)
-- TODO: MóduloWikidataFormatos.formatoPeriodo ?
local precision = elementoTabla(unaTabla,'qualifiers','P580',1,'datavalue','value','precision') -- 'fecha de inicio'
if precision ~= 11 then
return
end
local fecha = elementoTabla(unaTabla,'qualifiers','P585',1,'datavalue','value','time') -- 'fecha'
local anyo = tonumber(fechainicio:sub(2,5))
local mes = tonumber(fechainicio:sub(7,8))
local meses = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"}
local dia = tonumber(fechainicio:sub(10,11))
local fecha = elementoTabla(unaTabla,'qualifiers','P582',1,'datavalue','value','time') -- 'fecha de fin'
local retorno = dia .."de" ..meses[mes] .. "de" ..anyo
return retorno
end
--Devuelve los campos de elementos significativos de Wikidata
function devolverelemensigs(unaEntidad)
local evsigs = elementoTabla(unaEntidad,'claims','P793') -- 'evento significativo'
if evsigs == nil then
return
end
local elementos = {}
for i, j in pairs(evsigs)
do
valorQ = elementoTabla(j,'mainsnak','datavalue','value','id')
if valorQ == 'Q385378' then -- 'construcción'
elementos[valorQ] = obtenerfechasObra(j)
elseif valorQ == 'Q3010369' then -- 'ceremonia de inauguración'
elementos[valorQ] = devolvercereminaug(j)
elseif valorQ == 'Q744913' then -- 'accidente de aviación'
elementos[valorQ] = elementoTabla(construccion,'qualifiers','P805',1,'datavalue','value','id')
elseif valorQ == 'Q1068633' then -- 'primera piedra'
elementos[valorQ] = elementoTabla(construccion,'qualifiers','P585',1,'datavalue','value','time')
end
end
return elementos
end
function obtenerColor()
-- TODO: revisar colores y contraste
local colores = {
['hotel'] = '#264796', -- revisar, azul demasiado oscuro, no se diferencia el texto
['edificio militar'] = '#665D1D', -- revisar, marrón demasiado oscuro, no se diferencia el texto
['cuartel'] = '#665D1D', -- ídem anterior
['bar'] = '#BFFF00', -- revisar, verde claro intenso, fosforito ?
['restaurante'] = '#BFFF00', -- ídem anterior
['iglesia'] = '#F3D5E1', -- según {{Ficha de edificio religioso}}
['hospital'] = '#CB1D11', -- revisar, rojo demasiado fuerte
}
local tipoedificio = elementoTabla(Entidad,'claims','P31',1,'mainsnak','datavalue')
tipoedificio = elementoTabla(tipoedificio,'value','id')
local nombretipoedificio= mw.wikibase.getEntityObject(tipoedificio)
nombretipoedificio = elementoTabla(nombretipoedificio,'labels','es','value')
local uso = argumento['tipo'] or argumento ['Tipo'] or argumento['uso'] or argumento['Uso'] or argumento ['usos'] or argumento['Usos'] or propiedad('P366')
if uso == "militar" or uso == "Militar" then
return colores['edificio militar']
end
return colores[nombretipoedificio] or '#ddd' -- según {{Ficha de edificio}} [original]
end
function obtenerSuperficie()
-- global Entidad
local frame = mw.getCurrentFrame()
local valor = {}
local datos = elementoTabla(Entidad,'claims','P2046') -- 'superficie'
if datos ~= nil then
for i, j in pairs(datos)
do
local medida = elementoTabla(j,'mainsnak','datavalue','value','amount')
local unidad = elementoTabla(j,'mainsnak','datavalue','value','unit')
if medida ~= nil then
unidad = mw.ustring.gsub(unidad, '^.-/(Q%d+)$', '%1')
if unidad ~= 'Q25343' then -- unidades en 'metro cuadrado'
local unidades = {
-- véanse valores admitidos para 'superficie' en https://www.wikidata.org/wiki/Property:P2046#P2302
['Q2737347' ] = 'mm2',
['Q2489298' ] = 'cm2',
['Q25343' ] = 'm2', -- unidad de destino
['Q712226' ] = 'km2',
['Q185078' ] = 'dam2',
['Q35852' ] = 'ha',
['Q81292' ] = 'acre',
['Q232291' ] = 'sqmi',
['Q857027' ] = 'sqft',
['Q1063786' ] = 'sqin',
-- ['Q21074767'] = 'sqvt', -- medida antigua en desuso, [[versta]] cuadrada
-- ['Q669931' ] = 'dessiatin', -- medida antigua en desuso
-- ['Q935614' ] = 'rai', -- medida antigua en desuso
-- ['Q216795' ] = 'dunam', -- medida antigua en desuso, [[dunam]]
-- ['Q23931103'] = 'nmi²', -- no para edificios
-- ['Q254532' ] = 'sqdeg', -- no para edificios
-- ? 'sqyd'
}
medida = frame:preprocess('{{Convertir|' .. medida .. '|' .. unidades[unidad] .. '|m2|abr=3|disp=#}}')
end
valor[ #valor + 1 ] = frame:preprocess('{{Unidad|' .. tostring( tonumber( medida ) ) .. '|[[metro cuadrado|m²]]}}')
end
end
end
return mw.text.listToText( valor, ' o ', ' o ' )
end
function obtenerAlturas()
-- global Entidad
local frame = mw.getCurrentFrame()
local valor = {}
local datos = elementoTabla(Entidad,'claims','P2048') -- 'altura'
if datos ~= nil then
local valores = {}
local altmax = ''
local altarq = ''
for i, j in pairs(datos)
do
local medida = elementoTabla(j,'mainsnak','datavalue','value','amount')
local unidad = elementoTabla(j,'mainsnak','datavalue','value','unit')
if medida ~= nil then
unidad = mw.ustring.gsub(unidad, '^.-/(Q%d+)$', '%1')
if unidad ~= 'Q11573' then -- unidades en 'metro'
local unidades = {
-- véanse valores admitidos para 'altura' en https://www.wikidata.org/wiki/Property:P2048#P2302
['Q174789'] = 'mm',
['Q174728'] = 'cm',
-- ['Q11573'] = 'm', -- unidad de destino
['Q828224'] = 'km',
['Q218593'] = 'in',
['Q3710' ] = 'ft',
-- ['Q355198' ] = 'pixel', -- no para edificios
-- ['Q7673190'] = 'celda', -- no para edificios
-- ? 'yd'
}
medida = frame:preprocess('{{Convertir|' .. medida .. '|' .. unidades[unidad] .. '|m|abr=3|disp=#}}')
end
valores[i] = tonumber( medida )
local texto = frame:preprocess('{{Unidad|' .. tostring( valores[i] ) .. '|[[metro|m]]}}')
local parte = elementoTabla(j,'qualifiers','P518',1,'datavalue','value','id')
if parte == 'Q26970842' then -- 'altura máxima'
if altmax ~= '' then
altmax = altmax .. ' o '
end
altmax = altmax .. texto
elseif parte == 'Q24192182' then -- 'altura arquitectónica'
if altarq ~= '' then
altarq = altarq .. ' o '
end
altarq = altarq .. texto
end
end
end
-- cuando no se especifica la 'altura máxima' se muestra la máxima altura disponible:
if altmax == '' and #valores > 0 then
altmax = 0
for i,j in pairs(valores)
do
if altmax < tonumber(j) then
altmax = tonumber(j)
end
end
altmax = frame:preprocess('{{Unidad|' .. tostring(altmax) .. '|[[metro|m]]}}')
end
-- -- cuando no se especifica la 'altura arquitectónica' se muestran todas las alturas disponibles:
-- if altarq == '' and #valores > 0 then
-- altarq = ''
-- for i,j in pairs(valores)
-- do
-- if altarq ~= '' then
-- altarq = altarq .. ' o '
-- end
-- altarq = frame:preprocess('{{Unidad|' .. tostring(j) .. '|[[metro|m]]}}')
-- end
-- end
valor.maxima = altmax
valor.altura = altarq
end
return valor
end
function obtenerCalle()
-- global Entidad
local valor = {}
local datos = elementoTabla(Entidad,'claims','P669') -- 'calle'
if datos ~= nil then
for i, j in pairs(datos)
do
local qid = elementoTabla(j,'mainsnak','datavalue','value','id')
local obj = mw.wikibase.getEntityObject(qid)
if obj ~= nil then
local titulo = elementoTabla(obj,'labels','es','value')
local pagina = obj:getSitelink('eswiki')
if titulo ~= nil then
local entrada = ''
if pagina ~= nil then
entrada = '[[' .. pagina .. '|' .. titulo .. ']]'
else
entrada = titulo
end
local nrocalle = elementoTabla(j,'qualifiers','P670',1,'datavalue','value')
if nrocalle ~= nil then
entrada = entrada .. ' n.º ' .. nrocalle
end
valor[ #valor + 1 ] = entrada
end
end
end
end
return mw.text.listToText( valor )
end
function obtenerMaterial()
-- global Entidad
local valor = {}
local datos = elementoTabla(Entidad,'claims','P186') -- 'material empleado'
if datos ~= nil then
for i,j in pairs(datos)
do
local qid = elementoTabla(j,'mainsnak','datavalue','value','id')
local obj = mw.wikibase.getEntityObject(qid)
if obj ~= nil then
local titulo = elementoTabla(obj,'labels','es','value')
local pagina = obj:getSitelink('eswiki')
if titulo ~= nil then
if pagina ~= nil then
valor[ #valor + 1 ] = '[[' .. pagina .. '|' .. titulo .. ']]'
else
valor[ #valor + 1 ] = titulo
end
end
end
end
end
return mw.text.listToText( valor )
end
return z