Módulo:Ficha de aeropuerto

Este módulo no tiene página de documentación[crear]
local p = {}
local ModuloArgumentos	= require('Módulo:Argumentos')
local ModuloWikidata	= require('Módulo:Wikidata')
local ModuloPaginas		= require('Módulo:Páginas')
local ModuloTabla		= require('Módulo:Tablas')
local ModuloFicha		= require('Módulo:Ficha')
local argumentos = {}
local idWikidata

function p.Ficha(frame)
	argumentos	= ModuloArgumentos.obtenerArgumentosConValor(frame)
	idWikidata = mw.wikibase.getEntityIdForCurrentPage() or argumentos['id']
	local Titulo = argumentos['nombre'] or ModuloWikidata.obtenerEtiquetaWikidata() or ModuloPaginas.nombrePagina({desambiguar='sí'})
	local Subtitulo = argumentos['nombre_nativo'] or propiedad('P1705','subtitulo') or ''
	local IATA = argumentos['IATA'] or propiedad('P238','valor') or ''
	if IATA ~= '' then
		IATA = "'''"..IATA.."'''"
	end
	local OACI = argumentos['ICAO'] or propiedad('P239','valor') or ''
	if OACI ~= '' then
		OACI = "'''"..OACI.."'''"
	end
	local FAA = argumentos['FAA'] or propiedad('P240','valor') or ''
	if FAA ~= '' then
		FAA = "'''"..FAA.."'''"
	end
	local DGCACMX = argumentos['DGCAC_MX'] or ''
	if DGCACMX ~= '' then
		DGCACMX = ' [[Designador de aeródromos de DGAC (México)|DGAC]]: '..DGCACMX
	end
	local textoaux ='{{Ficha/Columnas'..
		'| [[Código de aeropuertos de IATA|IATA]]: '..IATA..
		'| [[Código de aeropuertos de OACI|OACI]]: '..OACI..
		'| [[Identificador de ubicación de la Administración Federal de Aviación|FAA]]: '..FAA..
		'|'..DGCACMX..'}}'
	local codigos = frame:preprocess(textoaux)
	local Logo = argumentos['logo'] or propiedad('P154','valor')
	local Imagen = argumentos['imagen'] or propiedad('P18','valor')
	local Ubicacion = argumentos['ubicación'] or (propiedad('P131','itemQ','enlazar') or '')
	local Pais = propiedad('P17','itemQ','enlazar')
	if Pais and Pais ~= '' then
		if Ubicacion ~= '' then
			Ubicacion = Ubicacion .. ', '
		end
		Ubicacion = Ubicacion .. Pais
	end
	local Elevacion = argumentos['elevación_m'] or propiedad('P2044','medida')
	local Elevacionaux
	if type(Elevacion) == "table" then
		if Elevacion[2] ~= nil then
			if string.find(Elevacion[2],'Q3710') ~= nil then
				Elevacionaux = frame:preprocess("{{convertir|"..Elevacion[1].."|pie|m|lk=on|disp=2}}")
			elseif string.find(Elevacion[2],'Q11573') ~= nil then
				Elevacion[1]=string.gsub(Elevacion[1],"+","")
				Elevacionaux = Elevacion[1]..' [[Metro|m]]'
			else
				-- TODO: falta convertir unidad de medida de Elevacion[2], distinta de pie y distinta de metro
				Elevacionaux = Elevacion[1] .. ' ' .. mw.wikibase.getLabel( Elevacion[2] )
			end
		else
			Elevacionaux = ''
		end
	else
		Elevacionaux = Elevacion
	end
	local ciudadsirve=argumentos['ciudad_sirve'] or propiedad('P931','itemQ','enlazar') or ''
	local Tipo = argumentos['tipo'] or ''
	local Propietario = argumentos['propietario'] or propiedad('P127','itemQ') or ''
	local Operador = argumentos['operador'] or propiedad('P137','itemQ') or ''
	local notas = ''
	if argumentos['notas'] then
		notas = '<hr>'..argumentos['notas']
	end
	local fichahija=''
	if argumentos['ficha hija'] then
		fichahija = frame:preprocess( argumentos['ficha hija'] )
	end
	local Estadisticas = obtenerEstadisticas(argumentos)
	local Pistas = obtenerPistas(argumentos, frame)
	local TablaFicha = {
		titulo = Titulo,
		subtitulo = Subtitulo,
		estilosubtitulo = 'background-color:#5FA5EB; color:white; font-size: 90%; font-weight: bold;',
		estiloseccion = "background-color:#5FA5EB; color: white; width:33%",
		{'',codigos},
		imagen = Logo,
		imagen2 = Imagen,
		{tipo = 'sección',
			titulo = 'Localización',
			{'Ubicación',Ubicacion},
			{'Elevación',Elevacionaux},
			{'Sirve a',ciudadsirve}
		},
		{tipo = 'sección',
			titulo = 'Detalles del aeropuerto',
			{'Tipo', Tipo},
			{'Propietario',Propietario},
			{'Operador',Operador},
			{'Construido', argumentos['construido']},
			{'Fundado', argumentos['fundado']},
			{'Terminales',argumentos['terminales']},
			{'Clausurado', argumentos['clausurado']},
		},
		{tipo = 'sección',
			titulo = 'Servicios y conexiones',
			{'Número de destinos', argumentos['num_destino']},
			{'Aerolíneas', argumentos['aerolíneas']},
			{'[[Centro de conexión|Hub]] para',argumentos['hub']},
			{'Base para', argumentos['base']},
			{'Servicios',argumentos['servicios']},
			{'Transporte público', argumentos['transporte']},
		},
		Estadisticas,
		Pistas,
		{tipo = 'sección',
			titulo = 'Mapa',
			{'',obtenerMapa(frame,IATA,OACI)},
		},
		{tipo = 'sección',
			titulo = 'Sitio web',
			{'', argumentos['sitio_web'] or propiedad('P856','valor')},
			{'',fichahija},
			{'',notas},
		}
	}
	return ModuloFicha.infobox(TablaFicha)
end

function obtenerMapa(frame,IATA,OACI)
	if argumentos['id'] or argumentos['mapa_loc'] == nil or propiedad('P625','valor') == nil then 
		return ''
	end
	local sizemapa = argumentos['tam_mapa_loc'] or '275px'
	local mapaalt = argumentos['mapa_alternativo'] or ''
	local codwikidata
	if IATA and OACI then
		codwikidata = IATA..' / '..OACI
	elseif IATA then
		codwikidata = IATA
	elseif OACI then
		codwikidata = OACI
	else
		codwikidata = ''
	end
	local etiquetamapa = argumentos['etiqueta_mapa_loc'] or codwikidata
	local piemapa = argumentos['pie_mapa_loc'] or ''
	local aux = '{{Mapa de localización|'..(argumentos['mapa_loc'] or '')..'|mapa_alternativo='..mapaalt..'|ancho='..sizemapa..'|alineación = center |marca=Airplane_silhouette.svg |borde=none |tamaño_marca =8 |etiqueta='..etiquetamapa..'|pie='..piemapa..'}}'
	return frame:preprocess(aux)
end

function obtenerEstadisticas(argumentos)
	local section = {
		tipo = 'sección',
		titulo = 'Estadísticas'..(argumentos['estadística_año'] and ' ('..argumentos['estadística_año']..')' or ''),
	}
	for i = 1,8 do
		local aux1 = argumentos['estadística'..i] or ('Estadísticas'..i)
		local aux2 = argumentos['datos_estadística'..i] or ''
		table.insert( section, {aux1, aux2} )
	end
	return section
end

function obtenerPistasWikidata(nropista)
	local pistas = propiedad('P529','tabla')
	local numpista = ModuloTabla.elemento(pistas,nropista,'mainsnak','datavalue','value')
	local unidadlargo = ModuloTabla.elemento(pistas,nropista,'qualifiers','P2043',1,'datavalue','value','unit')
	local largo = ModuloTabla.elemento(pistas,nropista,'qualifiers','P2043',1,'datavalue','value','amount')
	largo = {largo,unidadlargo}
	local superficie = ModuloTabla.elemento(pistas,nropista,'qualifiers','P186',1,'datavalue','value','id')
	if superficie ~= nil then
		superficie = mw.wikibase.getLabel(superficie) 
		if nropista == 1 and superficie ~= nil then
			superficie = '[['..superficie..']]' --enlazo una sola vez
		else
			superficie = ''
		end
	else
		superficie = ''
	end
	return {numpista,largo,superficie}
end

function obtenerPistas(argumentos, frame)
	local section = {
			tipo = 'sección',
			titulo = 'Pistas',
		}
	local content = ''

	for i = 1,5 do
		local auxpista = 'p'..i..'-número'
		local auxlargo = 'p'..i..'-longitud-m'
		local numpista = argumentos[auxpista] or obtenerPistasWikidata(i)[1]
		local numlargo = argumentos[auxlargo] or obtenerPistasWikidata(i)[2]
		if type(numlargo) == 'table' then
			if numlargo[2] ~= nil then
				if string.find(numlargo[2],'Q3710') then
					local aux = '{{convert|'..numlargo[1]..'|pie|m|disp=2}}'
					numlargo = frame:preprocess(aux)
				else
					long = string.len(numlargo[1])
					numlargo = string.sub(numlargo[1],2,long)..'&nbsp;m'
				end
			else
				numlargo = ''
			end
		end
		local auxsuperficie='p'..i..'-superficie' 
		local superficie = argumentos[auxsuperficie] or obtenerPistasWikidata(i)[3]
		if numpista ~= nil then
			content = content .. '<tr><td>'..numpista..'</td><td>'..numlargo..'</td><td>'..superficie..'</td></tr>'
		end
	end
	if content ~= '' then
		content = '<table class="infobox bordered" style="width:100%">'..
			'<tr><th>Dirección</th><th>Largo</th><th>Superficie</th></tr>'..
			content..
			'</table>'
		table.insert( section, {'', content} )
	end
	return section
end

function propiedad(idPropiedad, opciones, formato)
	if idWikidata == nil then
		return
	end
	local obj = mw.wikibase.getAllStatements(idWikidata, idPropiedad)
	if opciones == 'subtitulo' then
		--return ModuloTabla.tostring(obj)
		local retornoelem = ModuloTabla.elemento(obj,1,'mainsnak','datavalue','value','text') or ''
		return retornoelem
	elseif opciones =='itemQ' then
		local aux = ModuloTabla.elemento(obj,1,'mainsnak','datavalue','value','id')
		if aux ~= nil then
			aux = mw.wikibase.getSitelink(aux)
			if aux ~= nil then
				if formato == "enlazar" then
					return '[['..aux..']]'
				else
					return aux
				end
			else
				return ''
			end
		else
			return ''
		end
	elseif opciones == 'medida' then
		local valor = ModuloTabla.elemento(obj,1,'mainsnak','datavalue','value','amount')
		local unidadm = ModuloTabla.elemento(obj,1,'mainsnak','datavalue','value','unit')
		return {valor,unidadm}
	elseif opciones == 'valor' then
		--return ModuloTabla.tostring(obj)
		return ModuloTabla.elemento(obj,1,'mainsnak','datavalue','value')
	elseif opciones == 'tabla' then
		return obj
	end
	return ModuloTabla.tostring(obj)
end

return p