Módulo:Ficha de localidad
Ir a la navegación
Ir a la búsqueda
Este módulo pretende implementar Plantilla:Tl, Plantilla:Tl y Plantilla:Tl a través de Lua.
Funciones
- Plantilla:Code crea las variables utilizadas por las demás funciones públicas (las cuales llaman a esta función), de manera de no duplicar código.
- Plantilla:Code es la función invocada por Plantilla:Tl.
- Plantilla:Code es la función invocada por Plantilla:Tl.
- Plantilla:Code es la función invocada por Plantilla:Tl (se considera fusionarse en Plantilla:Code).
- Plantilla:Code permite obtener los líderes de la entidad, además de preformatear datos según el tipo de gobierno.
- Plantilla:Code envoltura para la plantilla Plantilla:Tl.
- Plantilla:Code envoltura para la plantilla Plantilla:Tl.
- Plantilla:Code envoltura para la plantilla Plantilla:Tl.
- Plantilla:Code envoltura para la función [[Módulo:Formatos|Plantilla:Code]]
- Plantilla:Code envoltura personalizada para [[Módulo:Wikidata|Plantilla:Code]]
Usuario:Amitie 10g/Taller/Pruebas/Pruebas de Módulo:Ficha de localidad
local p = {}
local ModuloWikidata = require('Módulo:Wikidata')
local ModuloFormatos = require('Módulo:Wikidata/Formatos')
local ModuloPaginas = require('Módulo:Páginas')
local ModuloArgs = require('Módulo:Argumentos')
local infobox = require('Módulo:Ficha').infobox
local elementoTabla = require('Módulo:Tablas').elemento
local obtenerIdioma = require('Módulo:Obtener idioma').obtenerIdioma
local enlazar = require('Módulo:Formato_texto').enlazar2
local argumentos = ModuloArgs.obtenerValorDeArgumentos
local formatoNumero = ModuloFormatos.formatoNumero2
local numeroUnidad = ModuloFormatos.formatoUnidad2
-- :: Estilos por defecto
local Clase = 'geography vcard'
local ColorTitulo = ''--#cddeff'
local ColorTituloTexto = '#000'
local ColorEtiqueta = ''--'#eef5f6'
local EstiloEtiqueta = 'padding:1px 7px'--'width:40%'
local EstiloSubEtiqueta = 'font-weight:100;border-top:0; padding:0 .6em 0 15px'
local EstiloDatos = 'padding:1px 7px 1px 1px'--'width:60%'
local TamanoImagen = '250px'
local Datos = mw.loadData('Módulo:Ficha de localidad/Datos')
local categorias = ''
local function _init(frame)
ModuloWikidata:setFrame(frame)
ModuloArgs.obtenerTablaDeArgumentos(frame)
Entidad = mw.wikibase.getEntity(argumentos{'id'}) or mw.wikibase.getEntity(argumentos{'entidad'}) or {}
InstanciaDe = propiedad('P31', {['formato'] = 'entidadID'})
SubclaseDe = propiedad('P279', {['formato'] = 'entidadID'})
-- :: Estilos
EstiloTitulo = 'padding:0;' .. (ColorTitulo~='' and ('background-color:' .. ColorTitulo) or '')
EstiloSeccion = (ColorTitulo~='' and ('background-color:' .. ColorTitulo) or '')
EstiloEtiqueta = EstiloEtiqueta .. ';' .. (ColorEtiqueta~='' and ('background-color:' .. ColorEtiqueta) or '')
-- :: Datos generales
NombreOficial = elementoTabla(Entidad, 'claims', 'P1448', {['idioma'] = 'es'}) or ModuloWikidata.obtenerEtiquetaWikidata(Entidad) or ModuloPaginas.nombrePagina({desambiguar='sí'})
NombreOriginal = argumentos{'nombre original'}
NombreNativo = (function ()
local NombreNativo = {}
local NombreNativoObj = elementoTabla(Entidad, 'claims', 'P1705')
if NombreNativoObj then
for k, v in pairs(NombreNativoObj) do
local valor, idioma
if elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'language') == 'es' then return false end
valor = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'text')
idioma= elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'language')
table.insert(NombreNativo, valor .. ' (' .. obtenerIdioma(frame, idioma) .. ')')
if k > 3 then break end -- listar hasta tres nombres, luego terminar el bucle.
end
return table.concat(NombreNativo, '<br>')
end
end)()
Titulo = (function ()
if NombreOriginal then return NombreOficial .. '<div style="font-size:85%;font-style:italic">' .. NombreOriginal .. '</div>' end
if NombreNativo then return NombreOficial .. '<div style="font-size:85%;font-style:italic">' .. NombreNativo .. '</div>' end
return NombreOficial
end)()
local PaisesConSellos = Datos['paises']
EscudoEtiqueta = PaisesConSellos[NombreOficial] or PaisesConSellos[Entidad] or 'Escudo'
EscudoPropiedad = (function()
if EscudoEtiqueta == 'Emblema nacional' then return 'P2238' end
if EscudoEtiqueta == 'Sello' or EscudoEtiqueta == 'Gran Sello' then return 'P158' end
return 'P94'
end)()
Bandera = argumentos{'imagen_bandera', 'bandera', {propiedad, 'P41', {['formato'] = 'archivo'}}}
TamanoBandera = argumentos{'bandera_tamaño'} or '135x110px'
PieBandera = argumentos{'artículo bandera', {enlazar, propiedad('P163', {['uno'] = 'sí', ['enlace'] = 'no'}), 'Bandera'}, {enlazar, 'Bandera' .. (argumentos{'de'} or ' de ') .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'Bandera'}}
Escudo = argumentos{'imagen_escudo', 'escudo', {ModuloWikidata.obtenerImagenWikidata, Entidad, EscudoPropiedad}}
TamanoEscudo = argumentos{'escudo_tamaño'} or '110x105px'
PieEscudo = argumentos{'artículo escudo', {enlazar, propiedad('P237', {['uno'] = 'sí', ['enlace'] = 'no'}), EscudoEtiqueta}, {enlazar, EscudoEtiqueta .. (argumentos{'de'} or ' de ') .. ModuloPaginas.nombrePagina({desambiguar='sí'}), EscudoEtiqueta}}
-- :: Datos generales
LemaNacional = argumentos{'lema_nacional', {propiedad, 'P1546', {['linkback'] = 'no'}}}
if LemaNacional then LemaNacional = '[[Anexo:Lemas nacionales|Lema]]: <span style="font-style:italic">' .. LemaNacional .. '</span>' end
HimnoNacional = (function()
local Himno = argumentos{'himno_nacional', {propiedad, 'P85', {['linkback'] = 'no'}}}
if Himno then
local Archivo = enlazar(argumentos{'archivo_himno_nacional', {propiedad, 'P85', {['calificador'] = 'P51', ['formato'] = 'archivo'}}}, {['namespace'] = 6})
if Archivo then return '<div>[[Himno nacional|Himno]]: <span style="font-style:italic">' ..Himno .. '</span></div><div>' .. Archivo .. "</div><div style=\"line-height:1.1em; text-align:center;\" class=\"problemas_sonido\"><small>''[[Ayuda:Multimedia|¿Problemas al reproducir este archivo?]]''</small></div>" end
return '[[Himno nacional|Himno]]: <span style="font-style:italic">' .. Himno .. '</span></div>'
end
end)()
-- :: Datos políticos
DatosPoliticos = obtenerLideres()
Lideres = (function()
local Lideres = DatosPoliticos['líderes']
local Etiquetas = DatosPoliticos['etiquetas']
return (function()
local Valores = {['tipo'] = 'sección', ['estiloetiqueta'] = EstiloEtiqueta ..';'..EstiloSubEtiqueta, ['estilodatos'] = EstiloDatos .. ';border-top:0;padding:0 .6em'}
for k,v in pairs(Lideres) do
if not v then break end
table.insert(Valores, {Etiquetas[k], v[1]})
end
return Valores
end)()
end)()
SedeGobierno = argumentos{'sede_gobierno', 'sedes_gobierno'} -- Proponer propiedad
Idiomas = (function()
local IdiomaOficial = (function()
local IdiomaOficialArgs = argumentos{'idioma', 'idioma_oficial', 'idioma_principal'}
local IdiomasOficialesArgs = argumentos{'idiomas', 'idiomas_oficiales'}
local IdiomasOficialesWd = propiedad('P37')
if (IdiomaOficialArgs~=nil and IdiomaOficialArgs~='') then
return {'Idioma oficial', IdiomaOficialArgs}
elseif (IdiomasOficialesArgs~=nil and IdiomasOficialesArgs~='') then
return {'Idiomas oficiales', IdiomasOficialesArgs}
elseif (IdiomasOficialesWd~=nil and IdiomasOficialesWd~='') then
if(IdiomasOficialesWd:find(',') or IdiomasOficialesWd:find(' y ')) then
return {'Idiomas oficiales', IdiomasOficialesWd}
else
return {'Idioma oficial', IdiomasOficialesWd}
end
end
return ''
end)()
local IdiomaCooficial = (function()
local IdiomaCooficialArgs = argumentos{'idioma_co-oficial', 'idioma co-oficial'}
local IdiomasCooficialesArgs = argumentos{'idiomas_co-oficiales', 'idiomas co-oficiales', 'idiomas_cooficiales'}
-- Para wikidata filtro negativo de calificador (que o tenga P518)
if (IdiomaCooficialArgs~=nil and IdiomaCooficialArgs~='') then
return {'Cooficial', IdiomaCooficialArgs}
elseif (IdiomasCooficialesArgs~=nil and IdiomasCooficialesArgs~='') then
return {'Cooficiales', IdiomasCooficialesArgs}
end
return ''
end)()
local IdiomasHablados = (function()
local data = argumentos{'idiomas_hablados', 'idioma_no_oficial', 'idiomas'}--, {propiedad, 'P2936'}} --Por ahora no importar ochocientosmil de wikidata, estudiar como se puede limitar la lista.
if (data~=nil and data:len()>50) then
return listaDesplegable(frame, 'Idiomas hablados', data, true)
else
return {'Idiomas hablados', data}
end
return ''
end)()
return
{tipo='sección',
IdiomaOficial,
{
tipo ='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
IdiomaCooficial,
IdiomasHablados,
},
}
end)()
Gentilicio = argumentos{'gentilicio', {propiedad, 'P1549', {['idioma'] = 'es'}}}
Religion = argumentos{'religión', {propiedad, 'P140'}}
-- :: Datos geográficos
Latitud = round(argumentos{'latitud', {propiedad, 'P625', {['formato'] = 'latitud'}}}, 2)
Longitud = round(argumentos{'longitud', {propiedad, 'P625', {['formato'] = 'longitud'}}}, 2)
Superficie = function(enlacePrincipal, enlacePuesto)
local SuperficieTotal = (function()
local Superficie = argumentos{'superficie'}
if Superficie then
Superficie = formatoNumero(Superficie) .. ' [[kilómetro cuadrado|km²]]'
else
Superficie = propiedad('P2046', {['formato'] = 'unidad', ['separador'] = ' '})
end
local wdDetail = propiedad('P2046', {['tipo de dato']='área', ['linkback']='sí', ['calificativo']='P518', ['filtroCalificador']='P518;Q16868672'})
if (wdDetail~=nil and wdDetail~='') then
return wdDetail
end
return Superficie
end)()
local SuperficieTierra = (function()
local wd = propiedad('P2046', {['tipo de dato']='área', ['linkback']='sí', ['calificativo']='P518', ['filtroCalificador']='P518;Q205895,Q23442'})
local param = argumentos{'superficie_tierra'}
if (param~=nil and param:find('%%')) then
if (wd~=nil and wd~='') then
return '('..param..') '..wd
else
return param..' del total'
end
elseif (param~=nil and not param:find('%%')) then
return param
end
return ''
end)()
local SuperficieAgua = (function()
local wdData = propiedad('P2046', {['tipo de dato']='área', ['linkback']='sí', ['calificativo']='P518', ['filtroCalificador']='P518;Q23397,Q4022,Q373315,Q102192'})
local wdPercent = propiedad('P2927', {['formato'] = 'unidad', ['separador'] = ''})
local param = argumentos{'superficie_agua'}
if (param~=nil and param~='') then
if (wdData~=nil and wdData~='') then
return '('..param:gsub('%%', '')..'%) '..wdData
else
return param:gsub('%%', '')..'% del total'
end
else
if (wdData~=nil and wdData~='') and (wdPercent~=nil and wdPercent~='') then
return '('..wdPercent:gsub('%%', '')..'%) '..wdData
elseif (wdData~=nil and wdData~='') and not (wdPercent~=nil and wdPercent~='') then
return wdData
elseif not (wdData~=nil and wdData~='') and (wdPercent~=nil and wdPercent~='') then
return '('..wdPercent:gsub('%%', '')..'%) del total'
end
end
return ''
end)()
local SuperficiePuesto= argumentos{'superficie_puesto'}
if SuperficiePuesto then
SuperficiePuesto = (enlacePuesto~=nil and enlazar(enlacePuesto, 'Puesto '..SuperficiePuesto .. 'º') or 'Puesto '..SuperficiePuesto .. 'º')
return {
tipo='sección',
{(enlacePrincipal~=nil and enlazar(enlacePrincipal, 'Superficie') or 'Superficie'), SuperficiePuesto},
{
tipo ='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
{'Total', SuperficieTotal},
{'Tierra', SuperficieTierra},
{'Agua', SuperficieAgua},
},
}
else
return {
tipo='sección',
{(enlacePrincipal~=nil and enlazar(enlacePrincipal, 'Superficie') or 'Superficie') .. ' total', SuperficieTotal},
{
tipo ='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
{'Tierra', SuperficieTierra},
{'Agua', SuperficieAgua},
}
}
end
end
Fronteras = argumentos{'fronteras'}
if Fronteras then
Fronteras = formatoNumero(Fronteras)
end
LineaDeCosta = formatoNumero(argumentos{'costas'})
PuntoMasAlto = argumentos{'punto_más_alto', {propiedad, 'P610'}}
PuntoMasBajo = argumentos{'punto_más_bajo', {propiedad, 'P1589'}}
PuntoMasOriental = argumentos{'punto_más_oriental', {propiedad, 'P1334'}}
PuntoMasOccidental = argumentos{'punto_más_occidental', {propiedad, 'P1335'}}
PuntoMasSeptentrional = argumentos{'punto_más_septentrional', {propiedad, 'P1332'}}
PuntoMasMeridional = argumentos{'punto_más_meridional', {propiedad, 'P1333'}}
Historia = (function(frame)
--local Historia = {tipo = 'sección', titulo = 'Historia'}
local Historia = {tipo = 'sección'}
-- Fundación
local FundacionFechas = argumentos{'fundación_fechas'}
local FundacionEtiqueta = argumentos{'fundación'}
local HistoriaEtiqueta = argumentos{'fundación_hitos'}
if FundacionEtiqueta and HitosEtiqueta then HitosEtiqueta = FundacionEtiqueta .. "\n" .. HitosEtiqueta end
table.insert(Historia, {HistoriaEtiqueta, FundacionFechas})
-- Periodo histórico
local PeriodoHistorico = argumentos{'era', {propiedad, 'P2348'}}
table.insert(Historia, {'Período histórico', PeriodoHistorico})
-- Hitos
local Hitos = {tipo ='sección', estiloetiqueta = EstiloEtiqueta ..';border-top:0; padding:.6em .6em 0 15px; font-size:85%; line-height:1.25em', estilodatos = EstiloDatos .. ';border-top:0;padding:.6em .6em 0 .6em'}
-- Evento anterior
if argumentos{'evento_anterior1'} and argumentos{'fecha_evento_anterior1'} then
table.insert(Hitos, {argumentos{'evento_anterior1'}, (function()
if argumentos{'año_evento_anterior1'} then return argumentos{'fecha_evento_anterior1'} .. ' de ' .. argumentos{'año_evento_anterior1'} end
return argumentos{'fecha_evento_anterior1'}
end)()})
end
-- Fecha inicio
if argumentos{'evento_inicio'} and argumentos{'fecha_inicio'} then
table.insert(Hitos, {(argumentos{'evento_inicio'} or 'Establecido'), (function()
if argumentos{'año_inicio'} then return argumentos{'fecha_inicio'} .. ' de ' .. argumentos{'año_inicio'} end
return argumentos{'fecha_inicio'}
end)()})
end
-- Eventos intermedios
for i = 1, 20, 1 do
if not argumentos{'evento' .. i} then break end
table.insert(Hitos, {(argumentos{'evento' .. i}), (function()
if argumentos{'año_evento' .. i} then return argumentos{'fecha_ievento' .. i} .. ' de ' .. argumentos{'año_evento' .. i} end
return argumentos{'fecha_evento' .. i}
end)()})
end
-- Fecha fin
if argumentos{'evento_fin'} and argumentos{'fecha_fin'} then
table.insert(Hitos, {(argumentos{'evento_fin'} or 'Disolución'), (function()
if argumentos{'año_fin'} then return argumentos{'fecha_fin'} .. ' de ' .. argumentos{'año_fin'} end
return argumentos{'fecha_fin'}
end)()})
end
-- Evento posterior
if argumentos{'evento_posterior1'} and argumentos{'fecha_evento_posterior1'} then
table.insert(Hitos, {argumentos{'evento_posterior1'}, (function()
if argumentos{'año_evento_posterior1'} then return argumentos{'fecha_evento_posterior1'} .. ' de ' .. argumentos{'año_evento_posterior1'} end
return argumentos{'fecha_evento_posterior1'}
end)()})
end
table.insert(Historia, Hitos)
-- Actualidad
table.insert(Historia, {'Hoy parte de', argumentos{'hoy', {propiedad, 'P3842'}}})
return Historia
end)()
Poblacion = function(enlacePrincipal, enlaceDensidad)
local PoblacionCenso = (function()
local Valor = argumentos{'población', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}} -- P459=método | Q39825=censo
local Anio = argumentos{'población_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}} -- P585=punto en el tiempo EL CALIFICATIVO VACÍO ES PORQUE SI NO SE IGNORA EL CALIFICADOR (ni idea de por qué)
local Notas = argumentos{'población_notas'}
if Valor then
if Anio then
return {'Censo '..small('('..Anio..')'), formatoNumero(Valor) .. ' hab.' .. (Notas~=nil and Notas or '')}
else
return {'Censo', formatoNumero(Valor) .. ' hab.' .. (Notas~=nil and Notas or '')}
end
end
return ''
end)()
local PoblacionCensoValor = argumentos{'población', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}, {propiedad, 'P1082', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
local PoblacionCensoAnio = argumentos{'población_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}}
local PoblacionCensoResumen = formatoNumero(PoblacionCensoValor~=nil and PoblacionCensoValor or '')..' hab.'..(PoblacionCensoAnio~=nil and ' ('..PoblacionCensoAnio..')' or '')
local PoblacionEstimada = (function()
local Valor = argumentos{'población_estimación', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q791801,Q29051383', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}} -- P459=método | Q791801,Q29051383=estimación
local Anio = argumentos{'población_estimación_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q791801,Q29051383', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}} -- P585=punto en el tiempo EL CALIFICATIVO VACÍO ES PORQUE SI NO SE IGNORA EL CALIFICADOR (ni idea de por qué)
local Notas = argumentos{'población_estimación_notas'}
if Valor then
if Anio then
return {'Estimación '..small('('..Anio..')'), formatoNumero(Valor) .. ' hab.' .. (Notas~=nil and Notas or '')}
else
return {'Estimación', formatoNumero(Valor) .. ' hab.' .. (Notas~=nil and Notas or '')}
end
end
return ''
end)()
local Superficie = argumentos{'superficie', {propiedad, 'P2046'}}
local Densidad = (function()
local Notas = argumentos{'densidad_post'}
local AnioCenso = argumentos{'población_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}}
local AnioEstimado = argumentos{'población_estimación_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q791801,Q29051383', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}}
local Valor = (function()
local Poblacion = argumentos{'población', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
if argumentos{'población_densidad', 'densidad'} then return argumentos{'población_densidad', 'densidad'} end
if tonumber(Poblacion) and tonumber(Superficie) then return (tonumber(Poblacion)/tonumber(Superficie)) else return nil end
end)()
local ValorEstimado = (function()
local PoblacionEstimada = argumentos{'población_estimación', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q791801', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
if tonumber(PoblacionEstimada) and tonumber(Superficie) then return (tonumber(PoblacionEstimada)/tonumber(Superficie)) else return nil end
end)()
if(tonumber(AnioCenso~=nil and AnioCenso or '0')>=tonumber(AnioEstimado~=nil and AnioEstimado or '0')) then
if Valor then return {(enlaceDensidad~=nil and enlazar(enlaceDensidad, 'Densidad') or 'Densidad'), formatoNumero(Valor, {['decimales'] = 2}) .. ' hab./km²' .. (Notas~=nil and Notas or '')}
elseif ValorEstimado then return {(enlaceDensidad~=nil and enlazar(enlaceDensidad, 'Densidad') or 'Densidad')..' '..small('(est.)'), formatoNumero(ValorEstimado, {['decimales'] = 2}) .. ' hab./km²' .. (Notas~=nil and Notas or '')} end
elseif ValorEstimado then return {(enlaceDensidad~=nil and enlazar(enlaceDensidad, 'Densidad') or 'Densidad')..' '..small('(est.)'), formatoNumero(ValorEstimado, {['decimales'] = 2}) .. ' hab./km²' .. (Notas~=nil and Notas or '')} end
return ''
end)()
mw.log('Censo:') mw.logObject(PoblacionCenso)
mw.log('Estimada:') mw.logObject(PoblacionEstimada)
mw.log('Densidad:') mw.logObject(Densidad)
mw.log('------------------')
if argumentos{'población_puesto'} then
return {
tipo = 'sección',
{'Población', (enlacePrincipal~=nil and enlazar(enlacePrincipal, 'Puesto ' .. argumentos{'población_puesto'} .. 'º') or 'Puesto ' .. argumentos{'población_puesto'} .. 'º')},
{
tipo = 'sección',
estiloetiqueta = EstiloEtiqueta .. ';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
PoblacionCenso,
PoblacionEstimada,
Densidad,
},
}
else
return {
tipo = 'sección',
{(enlacePrincipal~=nil and enlazar(enlacePrincipal, 'Población total') or 'Población total'), PoblacionCensoResumen},
{
tipo = 'sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
PoblacionEstimada,
Densidad,
}
}
end
end
-- :: Datos socioeconómicos
PIBPuesto = function(enlace)
local PIB = argumentos{'PIB_puesto'}
if PIB then return (enlace~=nil and enlazar(enlace, 'Puesto ' .. PIB .. 'º') or 'Puesto ' .. PIB .. 'º') end
end
PIB = argumentos{'PIB', {nada, ''}}
PIBAnio = argumentos{'PIB_año', {nada, ''}}--, {propiedad, 'P2131', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}
PIBPerCapita = argumentos{'PIB_per_cápita', {nada, ''}}--, {propiedad, 'P2132', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}
PIBNominalPuesto= function(enlace)
local Puesto = argumentos{'PIB_nominal_puesto'}
if Puesto then return (enlace~=nil and enlazar(enlace, 'Puesto ' .. Puesto .. 'º') or 'Puesto ' .. Puesto .. 'º') end
end
PIBNominal = argumentos{'PIB_nominal', {nada, ''}}
PIBNominalAnio = argumentos{'PIB_nominal_año', {nada, ''}}--, {propiedad, 'P2131', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}
PIBNominalPerCapita = argumentos{'PIB_nominal_per_cápita', {nada, ''}}--, {propiedad, 'P2132', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}
IDH = argumentos{'IDH'}
IDHAnio = argumentos{'IDH_año', 'IDH año'}
IDHpuesto = argumentos{'IDH_puesto', 'IDH puesto'}
IDHcategoria = argumentos{'IDH_categoría', 'IDH categoría'}
IndiceDesarrollo = function(enlace)
local IDH = argumentos{'IDH'}
local IDHAnio = argumentos{'IDH_año', 'IDH año'}
local IDHpuesto = argumentos{'IDH_puesto', 'IDH puesto'}
local IDHcategoria = argumentos{'IDH_categoría', 'IDH categoría'}
local etiqueta = '[[Índice de desarrollo humano|IDH]]' .. ((IDHAnio~=nil) and (' ('..IDHAnio .. ')') or '')
local dato = ((IDH~=nil) and IDH or '') .. ((IDHpuesto~=nil) and (' ('..(enlace~=nil and enlazar(enlace, IDHpuesto..'.º') or IDHpuesto..'.º')..') – ' .. ((IDHcategoria~=nil) and IDHcategoria or '')) or '')
return {etiqueta, dato}
end
Gini = argumentos{'gini', {propiedad, 'P1125', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}
--Moneda
Moneda = argumentos{'moneda', {propiedad, 'P38'}}
Patrono = argumentos{'patrona', 'patrón', {propiedad, 'P417'}}
-- Huso horario
Huso = seccionDesplegable(frame, '[[Huso horario]]', argumentos{'horario', {propiedad, 'P421', {['lista'] = 'nobullet'}}})
HorarioVerano = argumentos{'horario_verano'}
CodigoISO = (function()
if argumentos{'código_ISO'} then return argumentos{'código_ISO'} end
local CodigoISO = {}
if propiedad('P297') then table.insert(CodigoISO, propiedad('P297')) end
if propiedad('P298') then table.insert(CodigoISO, propiedad('P298')) end
if propiedad('P299') then table.insert(CodigoISO, propiedad('P299')) end
return table.concat(CodigoISO, '<br>')
end)()
CCTD = code(argumentos{'cctld', {propiedad, 'P78'}})
PrefijoTelef = (function()
local data = argumentos{'código_telefónico', {propiedad, 'P474'}}
if data~=nil then
if data:find('+') then return data else return '+'..data end
end
return ''
end)()
PrefijoRadio = small(code(argumentos{'prefijo_radiofónico'}))--, {propiedad, ''}}-- Solicitar propiedad
PrefijoMatAero = argumentos{'matrícula_avión', {propiedad, 'P2986'}}
PrefijoMatAuto = argumentos{'matrícula_coche', {propiedad, 'P395'}}
COI = argumentos{'código_COI', {propiedad, 'P984'}}
MiembroDe = listaDesplegable(frame, 'Membresía', argumentos{'miembro_de'}, true)--, {propiedad, 'P463'}}, true) Intentar generar la lista utilizando short names, si no es demasiado texto
Notas = (function()
local Notas = {}
for i = 1, 10, 1 do
if argumentos{'nota' .. i} then table.insert(Notas, '<li id="ficha_nota-'.. i .. '">[[#ficha_ref-' .. i .. '|↑]]' .. argumentos{'nota' .. i} .. '</li>') end
end
if not argumentos{'notas'} == '' then table.insert(Notas, argumentos{'notas'}) end
if #Notas > 0 then return '<ol class="references">' .. table.concat(Notas) .. '</ol>' end
end)()
SitioWeb = (function()
local enlace = argumentos{'sitio_web', 'sitio web', 'página web', 'página_web', 'web', {propiedad, 'P856', {['enlace']='no', uno='sí'}}}
local texto = 'Sitio web oficial'
return require('Módulo:URL').enlazar(enlace, texto)
end)() or ''
end
function p.FichaPais(frame)
_init(frame)
local ClaseTitulo = 'adr'
-- Subtítulo: Miembro de (discutir este parámetro)
local Subtitulo = (function()
local Unidad = argumentos{'unidad', {propiedad, 'P31', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
local Supraunidad = argumentos{'supraunidad'}
local Disputado = argumentos{'disputado'}
if Unidad and Supraunidad then
return Unidad .. ' de ' .. Supraunidad
elseif not Disputado == nil then
return '[[Estado con reconocimiento limitado|Soberanía discutida]]'
end
return ''--Unidad --No retornar, evita el título de 'Estado soberano', discutir inclusión en un futuro
end)()
local Mapa = (function()
local ImagenMapa = enlazar(argumentos{'imagen_mapa', 'mapa', {propiedad, 'P242', {['formato'] = 'archivo', ['uno'] = 'sí'}}}, {['tamaño'] = '250px', ['namespace'] = 6})
local PieMapa = argumentos{'pie_mapa'}
if ImagenMapa then
return ImagenMapa .. small(PieMapa~=nil and PieMapa or '')
end
end)()
local Capital = (function()
local Capital = argumentos{'capital', {propiedad, 'P36', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}
local CiudadMasPoblada = argumentos{'ciudad_más_poblada'}
local AglomeradoMasPoblado = argumentos{'aglomerado_más_poblado'}
if Capital == CiudadMasPoblada then return {
tipo = 'sección',
{'[[Capital (política)|Capital]] <small>(y ' .. enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'ciudad más poblada') .. ')</small>', Capital}
} end
if Capital == AglomeradoMasPoblado then return {
tipo = 'sección',
{'[[Capital (política)|Capital]] <small>(y ' .. enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'aglomerado urbano más poblado') .. ')</small>', Capital}
} end
return {
tipo = 'sección',
{'[[Capital (política)|Capital]]', Capital},
{enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'Ciudad más poblada'), CiudadMasPoblada},
{enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'Aglomerado urbano más poblado'), AglomeradoMasPoblado},
}
end)()
local Historia = (function(frame)
-- Fundación
local FundacionEtiqueta = argumentos{'fundación'}
local FundacionFechas = argumentos{'fundación_fechas'}
local FundacionHitos = argumentos{'fundación_hitos'}
local Etiqueta = (FundacionEtiqueta~=nil and FundacionEtiqueta or ('[[Historia '..frame:preprocess('{{de país|{{Título sin coletilla}}}}')..'|Fundación]]')) .. (FundacionHitos~=nil and '<br />'..FundacionHitos or '')
return {Etiqueta, FundacionFechas}
end)(frame)
local Lideres = (function()
local DatosPoliticos = (function()
local Datos = {}
Datos['líderes'] = {}
Datos['etiquetas'] = {}
for i = 1, 20, 1 do
if argumentos{'nombre_líder' .. i} == '' or not argumentos{'nombre_líder' .. i} then break end
table.insert(Datos['líderes'], argumentos{'nombre_líder' .. i})
table.insert(Datos['etiquetas'], argumentos{'título_líder' .. i})
end
return Datos
end)()
local Lideres = DatosPoliticos['líderes']
local Etiquetas = DatosPoliticos['etiquetas']
return (function()
local Valores = {['tipo'] = 'sección', ['estiloetiqueta'] = EstiloEtiqueta ..';'..EstiloSubEtiqueta, ['estilodatos'] = EstiloDatos .. ';border-top:0;padding:0 .6em'}
for k,v in pairs(Lideres) do
if not v then break end
table.insert(Valores, {Etiquetas[k], v})
end
return Valores
end)()
end)()
--Categorizar cuando la superficie o la población no son números
if(argumentos{'superficie'}~=nil and argumentos{'población'}~=nil) then
if(tonumber(argumentos{'superficie'})==nil or tonumber(argumentos{'población'})==nil) then
categorizar('Wikipedia:Artículos de países que requieren mantenimiento')
end
end
-- :: La ficha
local TablaFicha = {
titulo = Titulo,
subtitulo = Subtitulo,
clase = Clase,
clasetitulo = ClaseTitulo,
estilotitulo = EstiloTitulo,
estilosubtitulo = 'font-weight:bold; background-color:#cddeff',
imagenizquierda = Bandera,
["tamañoimagenizquierda"] = TamanoBandera,
imagenderecha = Escudo,
["tamañoimagenderecha"] = TamanoEscudo,
pieizquierdo = PieBandera,
piederecho = PieEscudo,
estilopie = "font-size:88%",
estiloseccion = EstiloSeccion,
estiloetiqueta = EstiloEtiqueta,
estilodatos = EstiloDatos,
{tipo='sección',
{'', LemaNacional, estilodatos='padding:.4em .6em;'},
},
{tipo='sección',
{'', HimnoNacional, estilodatos='padding:.4em .6em;'},
},
{tipo='sección',
--titulo = 'Ubicación',
["tamañoimagen"] = TamanoImagen,
{'', Mapa, estilodatos='padding:.4em .6em;'},
},
{tipo='sección',
--titulo = 'Información general',
Capital,
{'[[Sede de gobierno]]', SedeGobierno},
Idiomas,
{'Gentilicio', Gentilicio},
},
{tipo='sección',
--titulo = 'Información política',
{'[[Forma de gobierno]]', FormaGobierno},
Lideres,
{'[[Órgano ejecutivo]]', OrganoEjecutivo},
{'[[Órgano legislativo]]', OrganoLegislativo},
},
Historia, -- Esto formatea los hitos como la independencia
{tipo='sección',
--titulo = 'Información geográfica',
Superficie('Superficie terrestre', 'Anexo:Países por superficie'),
{'[[Frontera]]s', Fronteras},
{'[[Línea de costa]]', LineaDeCosta},
{'[[Anexo:Países por punto más alto|Punto más alto]]', PuntoMasAlto},
--{'Punto más bajo', PuntoMasBajo}, --Comentados porque no existen en Ficha de país, se pueden añadir a futuro
--{'Punto más oriental', PuntoMasOriental},
--{'Punto más occidental', PuntoMasOccidental},
--{'Punto más septentrional', PuntoMasSeptentrional},
--{'Punto más meridional', PuntoMasMeridional},
},
{tipo='sección',
--titulo = 'Información socioeconómica',
Poblacion('Anexo:Países y territorios dependientes por población', 'Anexo:Países por densidad de población'),
{'[[Producto interno bruto|PIB]] ([[Paridad de poder adquisitivo|PPA]])', PIBPuesto('Países por PIB (PPA)')},
{tipo ='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
{'Total '..small('('..PIBAnio..')'), PIB},
{'[[Renta per cápita|Per cápita]]', PIBPerCapita},
},
{'PIB (nominal)', PIBNominalPuesto('Anexo:Países por PIB (nominal)')},
{tipo ='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
{'Total '..small('('..PIBNominalAnio..')'), PIBNominal},
{'Per cápita', PIBNominalPerCapita},
},
IndiceDesarrollo('Anexo:Países por índice de desarrollo humano'),
{'[[Coeficiente de Gini]]', Gini},
{'[[Moneda (divisa)|Moneda]]', Moneda},
},
{tipo='sección',
--titulo = 'Información internacional',
Huso,
{tipo ='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
{'En [[Horario de verano|verano]]', HorarioVerano},
},
{'[[ISO 3166-1|Código ISO]]', CodigoISO},
{'[[Dominio de nivel superior geográfico#Lista de dominios de nivel superior geográfico|Dominio internet]]', CCTD},
{'[[Anexo:Prefijos telefónicos internacionales|Prefijo telefónico]]', PrefijoTelef},
{'[[Anexo:Prefijos radiofónicos|Prefijo radiofónico]]', PrefijoRadio},
{'[[Matrícula (aeronaves)|Siglas país para aeronaves]]', PrefijoMatAero},
{'[[Anexo:Siglas automovilísticas internacionales|Siglas país para automóviles]]', PrefijoMatAuto},
{'[[Anexo:Códigos del COI para los países|Código del COI]]', },
},
{tipo='sección',
estilodatos = 'padding:0',
{'', SitioWeb},
},
{tipo='sección',
estilodatos = 'padding:0',
MiembroDe,
},
estilopiedetabla = 'text-align:left',
piedetabla = Notas,
}
return infobox(TablaFicha)..categorias
end
function p.FichaEntidadSubnacional(frame)
_init(frame)
local ClaseTitulo = 'mapa fn org'
local Pais = argumentos{'país', 'pais', {propiedad, 'P17', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}
local Capital = argumentos{'capital', {propiedad, 'P36', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}
local CapitalEtiqueta = argumentos{'capital_denominación'} or '[[Capital (política)|Capital]]'
local Subtitulo = (function()
if argumentos{'unidad'} then return argumentos{'unidad'} end
local Unidad
local Supraunidad
UnidadObj = elementoTabla(Entidad, 'claims', 'P31')
if UnidadObj then
for k,v in pairs(UnidadObj) do
Unidad = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id')
Supraunidad = ModuloWikidata.obtenerEtiquetaWikidata(mw.wikibase.getEntity(elementoTabla(v, 'qualifiers', 'P642', 1, 'datavalue', 'value', 'id')))
if Unidad == 'Q5119' and Supraunidad then
return '[[Capital (política)|Capital]] de [[' .. Supraunidad .. ']]'
end
end
end
return '[[Entidad subnacional]]'
end)()
local ImagenPanorama = argumentos{'img_panorama_urb', 'image_skyline', 'image_skyline', 'imagen', {propiedad, 'P18', {['formato'] = 'archivo'}}}
local PieImagenPanorama = argumentos{'image_caption', 'pie_img_panorama_urb', 'pie_de_imagen'}
-- :: Datos cartográficos
local Mapa1 = obtenerMapa(frame,
{
[1] = ModuloPaginas.nombrePagina({desambiguar='sí'}),
['zoom'] = (argumentos{'zoom'} or 10),
['latitude'] = Latitud,
['longitude'] = Longitud,
['mapa_loc'] = argumentos{'mapa_loc', 'pushpin_map'},
['mapa_etiq'] = (argumentos{'nombre', 'nombre_oficial'} or NombreOficial),
['mapa_etiq_pos'] = argumentos{'pos_etiqueta_loc'},
['mapa_marca'] = argumentos{'imagen_marca_loc'},
['mapa_marca_tam'] = (argumentos{'tam_marca_loc'} or 5),
['mapa_alt'] = argumentos{'mapa_alternativo'},
['mapa_tamaño'] = (argumentos{'tam_mapa_loc', 'pushpin_mapsize'} or 250),
}
)
local MapaPie1 = (function()
local MapaLoc = argumentos{'mapa_loc', 'pushpin_map'}
local Etiqueta = (argumentos{'nombre', 'nombre_oficial'} or NombreOficial)
if MapaLoc and Etiqueta then return 'Localización de ' .. Etiqueta .. ' en ' .. MapaLoc end
end)()
local Mapa2 = obtenerMapa(frame,
{
[1] = argumentos{'nombre_mapa_'},
['zoom'] = (argumentos{'zoom'} or 10),
['latitude'] = Latitud,
['longitude'] = Longitud,
['mapa_loc'] = argumentos{'mapa_loc1', 'pushpin_map1'},
['mapa_etiq'] = (argumentos{'nombre', 'nombre_oficial'} or NombreOficial),
['mapa_etiq_pos'] = argumentos{'pos_etiqueta_loc1'},
['mapa_marca'] = argumentos{'imagen_marca_loc1'},
['mapa_marca_tam'] = (argumentos{'tam_marca_loc1'} or 5),
['mapa_alt'] = argumentos{'mapa_alternativo1'},
['mapa_tamaño'] = (argumentos{'tam_mapa_loc1', 'pushpin_mapsize1'} or 250),
}
)
local MapaPie2 = (function()
local MapaLoc = argumentos{'mapa_loc1', 'pushpin_map1'}
local Etiqueta = (argumentos{'nombre', 'nombre_oficial'} or NombreOficial)
if MapaLoc and Etiqueta then return 'Localización de ' .. Etiqueta .. ' en ' .. MapaLoc end
end)()
local Mapa3 = argumentos{'mapa', 'imagen_mapa', 'image_map', {propiedad, 'P242'}, {obtenerMapa, frame, {['latitud'] = Latitud, ['longitud'] = Longitud, ['tipo'] = 'interactivo'}}}
local Mapa3Tamano = argumentos{'tam_mapa_loc1', 'pushpin_mapsize1'} or 250
local Mapa3Pie = argumentos{'pie_mapa'}
local Mapa4 = argumentos{'mapa1', 'imagen_mapa1', 'image_map1'}
local Mapa4Tamano = argumentos{'tam_mapa_loc1', 'pushpin_mapsize1'} or 250
local Mapa4Pie = argumentos{'pie_mapa1'}
-- :: La ficha
local TablaFicha = {
titulo = Titulo,
subtitulo = Subtitulo,
clase = Clase,
clasetitulo = ClaseTitulo,
estilotitulo = EstiloTitulo,
estilosubtitulo = 'font-weight:bold; background-color:#cddeff',
imagensuperior = ImagenPanorama,
piesuperior = PieImagenPanorama,
imagenizquierda = Bandera,
["tamañoimagenizquierda"] = TamanoBandera,
imagenderecha = Escudo,
["tamañoimagenderecha"] = TamanoEscudo,
pieizquierdo = PieBandera,
piederecho = PieEscudo,
estilopie = "font-size:88%",
estiloseccion = EstiloSeccion,
estiloetiqueta = EstiloEtiqueta,
estilodatos = EstiloDatos,
datosup1 = Apodo,
datosup2 = LemaNacional,
datosup3 = HimnoNacional,
imagenflotante1 = 'sí',
imagenflotante2 = 'sí',
imagen1 = Mapa1,
pie1 = Mapa1Pie,
imagen2 = Mapa2,
pie2 = Mapa2Pie,
imagen3 = Mapa3,
pie3 = Mapa3Pie,
imagen4 = Mapa4,
pie4 = Mapa4Pie,
{tipo='sección',
--titulo = 'Información general',
Capital,
{'[[Sede de gobierno]]', SedeGobierno},
-- Idiomas,
{'Gentilicio', Gentilicio},
},
{tipo='sección',
--titulo = 'Información política',
{'[[Forma de gobierno]]', FormaGobierno},
Lideres,
{'[[Órgano ejecutivo]]', OrganoEjecutivo},
{'[[Órgano legislativo]]', OrganoLegislativo},
},
Historia, -- Esto formatea los hitos como la independencia
{tipo='sección',
--titulo = 'Información geográfica',
Superficie('Área', nil),
{'[[Frontera]]s', Fronteras},
{'[[Línea de costa]]', LineaDeCosta},
{'[[Anexo:Países por punto más alto|Punto más alto]]', PuntoMasAlto},
{'Punto más bajo', PuntoMasBajo},
{'Punto más oriental', PuntoMasOriental},
{'Punto más occidental', PuntoMasOccidental},
{'Punto más septentrional', PuntoMasSeptentrional},
{'Punto más meridional', PuntoMasMeridional},
},
{tipo='sección',
--titulo = 'Información socioeconómica',
Poblacion('Población', 'Densidad de población'),
{'[[Producto interno bruto|PIB]] ([[Paridad de poder adquisitivo|PPA]])', PIBPuesto(nil)},
{tipo ='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
{'Total', PIBAnio},
{'[[Renta per cápita|Per cápita]]', PIBPerCapita},
},
{'PIB (nominal)', PIBNominalPuesto(nil)},
{tipo ='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
{'Total', PIBNominalAnio},
{'Per cápita', PIBNominalPerCapita},
},
IndiceDesarrollo(nil),
{'[[Coeficiente de Gini]]', Gini},
{'[[Moneda (divisa)|Moneda]]', Moneda},
},
{tipo='sección',
--titulo = 'Información internacional',
Huso,
{tipo ='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
{'En [[Horario de verano|verano]]', HorarioVerano},
},
{'[[ISO 3166-1|Código ISO]]', CodigoISO},
{'[[Dominio de nivel superior geográfico#Lista de dominios de nivel superior geográfico|Dominio internet]]', CCTD},
{'<small>[[Anexo:Prefijos telefónicos internacionales|Prefijo telefónico]]</small>', PrefijoTelef},
{'<small>[[Anexo:Prefijos radiofónicos|Prefijo radiofónico]]</small>', PrefijoRadio},
{'[[Matrícula (aeronaves)|Siglas país para aeronaves]]', PrefijoMatAero},
{'[[Anexo:Siglas automovilísticas internacionales|Siglas país para automóviles]]', PrefijoMatAuto},
{'[[Anexo:Códigos del COI para los países|Código del COI]]', },
},
{tipo='sección',
estilodatos = 'padding:0',
{'', SitioWeb},
},
MiembroDe,
estilopiedetabla = 'text-align:left',
--piedetabla = Notas,
piedetabla = Debug,
}
return infobox(TablaFicha)
end
function p.FichaEstadoDesaparecido(frame)
_init(frame)
local ClaseTitulo = 'adr'
local Predecesor = (function()
local Predecesor = {}
local Anio, Imagen, Bandera, Enlace
for i = 1, 21, 1 do
if not argumentos{'p'..i} then break end
Enlace = {}
table.insert(Enlace, enlazar(argumentos{'p'..i}, '←'))
if argumentos{'año_p'..i} then table.insert(Enlace, '<small>(' .. argumentos{'año_p'..i} .. ')</small>') end
if argumentos{'bandera_p'..i} then
table.insert(Enlace, enlazar(argumentos{'bandera_p'..i}, {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'p'..i}, ['namespace'] = 6}))
elseif argumentos{'imagen_p'..i} then
table.insert(Enlace, argumentos{'imagen_p'..i})
else
table.insert(Enlace, (
enlazar('bandera_de_'..argumentos{'p'..i}..'.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'p'..i}, ['namespace'] = 6}) or
enlazar('bandera_de_la_'..argumentos{'p'..i}..'.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'p'..i}, ['namespace'] = 6}) or
enlazar('3by2white.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'p'..i}, ['namespace'] = 6})
)
)
end
table.insert(Predecesor, table.concat(Enlace))
end
if #Predecesor > 0 then return table.concat(Predecesor, '<br>') end
return propiedad('P155', {['lista'] = 'nobullet'})
end)()
local Periodo = (function()
if argumentos{'duración'} then return argumentos{'duración'} end
if argumentos{'año_inicio'} and argumentos{'año_fin'} then return argumentos{'año_inicio'} .. ' - ' .. argumentos{'año_fin'} end
end)()
local Sucesor = (function()
local Datos = {}
for i = 1, 21, 1 do
if not argumentos{'s'..i} then break end
Enlace = {}
if argumentos{'año_s'..i} then table.insert(Enlace, '<small>(' .. argumentos{'año_s'..i} .. ')</small>') end
if argumentos{'bandera_s'..i} then
table.insert(Enlace, enlazar(argumentos{'bandera_s'..i}, {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'s'..i}, ['namespace'] = 6}))
elseif argumentos{'imagen_s'..i} then
table.insert(Enlace, argumentos{'imagen_s'..i})
else
table.insert(Enlace, (
enlazar('bandera_de_'..argumentos{'s'..i}..'.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'s'..i}, ['namespace'] = 6}) or
enlazar('bandera_de_la_'..argumentos{'s'..i}..'.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'s'..i}, ['namespace'] = 6}) or
enlazar('3by2white.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'s'..i}, ['namespace'] = 6})
)
)
end
table.insert(Enlace, enlazar(argumentos{'s'..i}, '→'))
table.insert(Datos, table.concat(Enlace))
end
if #Datos > 0 then return table.concat(Datos, '<br>') end
return propiedad('P155', {['lista'] = 'nobullet'})
end)()
local Bandera = argumentos{'imagen_bandera', {propiedad, 'P41', {['formato'] = 'archivo'}}}
local TamanoBandera = argumentos{'bandera_tamaño'} or '135x110px'
local PieBandera = enlazar(argumentos{'bandera'}, (argumentos{'bandera_denom'} or 'Bandera')) or enlazar('Bandera de ' .. (argumentos{'nombre_común'} or ''), (argumentos{'bandera_denom'} or 'Bandera')) or enlazar('Bandera de la ' .. (argumentos{'nombre_común'} or ''), (argumentos{'bandera_denom'} or 'Bandera'))
local Escudo = argumentos{'imagen_escudo', {propiedad, 'P94', {['formato'] = 'archivo'}}}
local TamanoEscudo = argumentos{'escudo_tamaño'} or '110x105px'
local PieEscudo = enlazar(argumentos{'símbolo'}, (argumentos{'escudo_denom'} or 'Escudo')) or enlazar('Escudo de ' .. (argumentos{'nombre_común'} or ''), (argumentos{'escudo_denom'} or 'Escudo')) or enlazar('Escudo de la ' .. (argumentos{'nombre_común'} or ''), (argumentos{'escudo_denom'} or 'Escudo'))
local Mapa = enlazar(argumentos{'imagen_mapa', 'mapa', {propiedad, 'P242', {['formato'] = 'archivo', ['uno'] = 'sí'}}}, {['tamaño'] = '250px', ['namespace'] = 6})
local PieMapa = argumentos{'pie_mapa'}
local Capital = (function()
local Capital = argumentos{'capital', {propiedad, 'P36', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}
local CiudadMasPoblada = argumentos{'ciudad_más_poblada'}
local AglomeradoMasPoblado = argumentos{'aglomerado_más_poblado'}
if Capital == CiudadMasPoblada then return {
tipo = 'sección',
{'[[Capital (política)|Capital]] <small>(y ' .. enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'ciudad más poblada') .. ')</small>', Capital}
} end
if Capital == AglomeradoMasPoblado then return {
tipo = 'sección',
{'[[Capital (política)|Capital]] <small>(y ' .. enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'aglomerado urbano más poblado') .. ')</small>', Capital}
} end
return {
tipo = 'sección',
{'[[Capital (política)|Capital]]', Capital},
{enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'ciudad más poblada'), CiudadMasPoblada},
{enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'aglomerado urbano más poblado'), AglomeradoMasPoblado},
}
end)()
local Lideres = (function()
local Lideres = (function()
local Datos = DatosPoliticos['líderes']
local Valores = {}
for k, v in pairs(Datos) do
Valor = (function()
local Lider = v[1]
local Anio = v[2]
if Lider then
if Anio then return Lider .. ' <small>(' .. Anio .. ')</small>' end
return Lider
end
end)()
if Valor then table.insert(Valores, Valor) end
end
if #Valores > 0 then return table.concat(Valores, '<br>') end
end)()
local Gobernantes = (function()
local Datos = DatosPoliticos['gobernantes']
local Valores = {}
for k, v in pairs(Datos) do
Valor = (function()
local Lider = v[1]
local Anio = v[2]
if Lider then
if Anio then return Lider .. ' <small>(' .. Anio .. ')</small>' end
return Lider
end
end)()
if Valor then table.insert(Valores, Valor) end
end
if #Valores > 0 then return table.concat(Valores, '<br>') end
end)()
local Etiquetas = DatosPoliticos['etiquetas']
local Valores = {['tipo'] = 'sección', ['estiloetiqueta'] = EstiloEtiqueta ..';'..EstiloSubEtiqueta, ['estilodatos'] = EstiloDatos .. ';border-top:0;padding:0 .6em'}
if Lideres then table.insert(Valores, {Etiquetas[1], Lideres}) end
table.insert(Valores, {Etiquetas[2], Gobernantes})
return Valores
end)()
local Superficie = (function()
local Valor = {}
for i = 1, 20, 1 do
Dato = argumentos{'datos_superficie' .. i}
if Dato == '' or Dato == nil then break end
Anio = argumentos{'datos_año' .. i}
Dato = formatoNumero(Dato) .. ' km²'
if Dato and Anio then Dato = Dato .. ' (' .. enlazar(Anio) .. ')' end
table.insert(Valor, Dato)
end
return table.concat(Valor, '<br>')
end)()
local Poblacion = (function()
local Valor = {}
for i = 1, 20, 1 do
Dato = argumentos{'datos_población' .. i}
if Dato == '' or not Dato then break end
Anio = argumentos{'datos_año' .. i}
Densidad = (function() if tonumber(Dato) and tonumber(argumentos{'datos_superficie' .. i}) then return formatoNumero((tonumber(Dato)/tonumber(argumentos{'datos_superficie' .. i})), {['decimales'] = 2}) end end)()
Ref = argumentos{'ref_población' .. i}
Dato = formatoNumero(Dato) .. ' hab.'
if Anio then Dato = Dato .. ' (' .. Anio .. ')' end
if Ref then Dato = Dato .. Ref end
if Densidad then Dato = Dato .. '<br><small>' .. Densidad .. ' hab/km²</small>' end
table.insert(Valor, Dato)
end
return table.concat(Valor, '<br>')
end)()
-- :: La ficha
local TablaFicha = {
titulo = Titulo,
subtitulo = Subtitulo,
clase = Clase,
clasetitulo = ClaseTitulo,
estilotitulo = EstiloTitulo,
estilosubtitulo = 'font-weight:bold; background-color:#cddeff',
estiloseccion = EstiloSeccion,
estiloetiqueta = EstiloEtiqueta,
estilodatos = EstiloDatos,
-- Data esta implementación, las banderas irán arriba de las suseciones.
imagenizquierda = Bandera,
["tamañoimagenizquierda"] = TamanoBandera,
imagenderecha = Escudo,
["tamañoimagenderecha"] = TamanoEscudo,
pieizquierdo = PieBandera,
piederecho = PieEscudo,
estilopie = "font-size:88%",
{
tipo = 'sucesión',
color = 'transparent',
anterior = Predecesor,
actual = Periodo,
siguiente = Sucesor,
},
{tipo='sección',
{'', HimnoNacional},
},
{tipo='sección',
--titulo = 'Ubicación',
["tamañoimagen"] = TamanoImagen,
{'', Mapa},
},
{tipo='sección',
--titulo = 'Información general',
Capital,
{'[[Sede de gobierno]]', SedeGobierno},
{'Gentilicio', Gentilicio},
Idiomas,
},
{tipo='sección',
--titulo = 'Información política',
{'[[Forma de gobierno]]', FormaGobierno},
Lideres,
{'[[Órgano ejecutivo]]', OrganoEjecutivo},
{'[[Órgano legislativo]]', OrganoLegislativo},
{'[[Estado confesional|Religión]]', Religion},
},
Historia, -- Esto formatea los hitos como la independencia
{tipo='sección',
--titulo = 'Información geográfica',
{'[[Superficie terrestre|Superficie]]', Superficie},
{'[[Anexo:Países y territorios dependientes por población|Población]]', Poblacion},
{'[[Frontera]]s', Fronteras},
{'[[Línea de costa]]', LineaDeCosta},
{'[[Anexo:Países por punto más alto|Punto más alto]]', PuntoMasAlto},
{'Punto más bajo', PuntoMasBajo},
{'Punto más oriental', PuntoMasOriental},
{'Punto más occidental', PuntoMasOccidental},
{'Punto más septentrional', PuntoMasSeptentrional},
{'Punto más meridional', PuntoMasMeridional},
},
{tipo='sección',
--titulo = 'Información socioeconómica',
{'[[Moneda (divisa)|Moneda]]', Moneda},
},
{tipo='sección',
estilodatos = 'padding:0',
{'', SitioWeb},
},
{tipo='sección',
estilodatos = 'padding:0',
MiembroDe,
},
estilopiedetabla = 'text-align:left',
piedetabla = Notas,
}
return infobox(TablaFicha)
end
-- Esta función permite obtener los líderes de la entidad, además de
-- preformatear datos según el tipo de gobierno.
function obtenerLideres()
local FormaGobiernoID = propiedad('P122', {['formato'] = 'entidadID'})
local Organismo = ModuloWikidata.obtenerEtiquetaWikidata(Entidad) or ModuloPaginas.nombrePagina({desambiguar='sí'})
FormaGobierno = argumentos{'gobierno', 'forma_de_gobierno', {propiedad, 'P122', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
OrganoEjecutivo = argumentos{'órgano_ejecutivo',{propiedad, 'P208', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
OrganoLegislativo = argumentos{'órgano_legislativo',{propiedad, 'P194', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
local Datos = {}
Datos['líderes'] = {}
Datos['gobernantes']= {}
Datos['etiquetas'] = {}
-- Presidencialismo
if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P1906', {['formato'] = 'entidadID'})), 'P279', 'Q248577')
or ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P1906', {['formato'] = 'entidadID'})), 'P279', 'Q30461')
then
table.insert(Datos['líderes'], {
argumentos{'nombre_líder1', 'líder1', 'líder' , {propiedad, 'P35', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}},
argumentos{'año_líder1'}
})
table.insert(Datos['etiquetas'], argumentos{'título_líder1', (function()
if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P35', {['formato'] = 'entidadID'})), 'P21', 'Q6581072') then return enlazar('Presidenta') end
return enlazar('Presidente')
end)})
table.insert(Datos['líderes'], argumentos{'nombre_líder2', 'líder2'})--, {propiedad, 'P6149', {['uno'] = 'sí'}}} -- Buscar propiedad
table.insert(Datos['etiquetas'], argumentos{'título_líder2', {enlazar, 'Vicepresidente'}})
return Datos
end
-- Monarquía parlamentaria/constitucional
if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P1906', {['formato'] = 'entidadID'})), 'P279', 'Q116') then
table.insert(Datos['líderes'], {
argumentos{'nombre_líder1', 'líder1', 'líder' , {propiedad, 'P35', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}},
argumentos{'año_líder1'}
}) table.insert(Datos['líderes'], argumentos{'nombre_líder2', 'líder2', {propiedad, 'P35', {['formato'] = 'enlace', ['calificador'] = 'P1393', ['ordenar'] = 'por fecha', ['uno'] = 'último', ['valor_posicional'] = 'último', ['valor_posicional_calif'] = 'último'}}})
table.insert(Datos['líderes'], argumentos{'nombre_líder3', 'líder3', {propiedad, 'P6', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}})
table.insert(Datos['etiquetas'], argumentos{'título_líder1', (function()
if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P35', {['formato'] = 'entidadID'})), 'P21', 'Q6581072') then return enlazar('Reina') end
return enlazar('Rey')
end)})
table.insert(Datos['etiquetas'], argumentos{'título_líder2', (function()
if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P35', {['formato'] = 'entidadID', ['calificador'] = 'P1393', ['ordenar'] = 'por fecha', ['uno'] = 'último', ['valor_posicional'] = 'último', ['valor_posicional_calif'] = 'último'})), 'P21', 'Q6581072') then return enlazar('Gobernador general de ' .. Organismo, 'Gobernadora general') end
return enlazar('Gobernador general de ' .. Organismo)
end)})
table.insert(Datos['etiquetas'], argumentos{'título_líder3', {enlazar, 'Primer ministro'}})
return Datos
end
-- Se agregarán más formas de gobierno
-- ::Por defecto
return (function()
local Lider1 = argumentos{'nombre_líder1', 'líder1', 'líder' , {propiedad, 'P35', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
local Lider1Anio= argumentos{'año_líder1'}
local Lider1Etiq= argumentos{'título_líder1', 'título_líder', (function()
if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P35', {['formato'] = 'entidadID'})), 'P21', 'Q6581072') then return enlazar('Jefe de estado', 'Jefa de estado') end
return enlazar('Jefe de estado')
end)()}
table.insert(Datos['líderes'], {Lider1, Lider1Anio})
table.insert(Datos['etiquetas'], Lider1Etiq)
for i = 2, 20, 1 do
if argumentos{'nombre_líder' .. i, 'líder' .. i} == '' or not argumentos{'nombre_líder' .. i, 'líder' .. i} then break end
table.insert(Datos['líderes'], {
argumentos{'nombre_líder' .. i, 'líder' .. i},
argumentos{'año_líder' .. i}
})
end
if argumentos{'título_gobernante'} then
table.insert(Datos['etiquetas'], argumentos{'título_gobernante'})
for i = 1, 20, 1 do
if argumentos{'nombre_gobernante' .. i, 'gobernante' .. i} == '' or not argumentos{'nombre_gobernante' .. i, 'gobernante' .. i} then break end
table.insert(Datos['gobernantes'], {
argumentos{'nombre_gobernante' .. i, 'gobernante' .. i},
argumentos{'año_gobernante' .. i}
})
end
end
return Datos
end)()
end
-- Envoltura para la plantilla "Mapa de localización" y <mapframe>
function obtenerMapa(frame, parametros)
if not parametros then parametros = {} end
if parametros['latitude'] and parametros['longitude'] then
--if parametros['tipo'] == 'interactivo' then return frame:preprocess('<mapframe frameless align=center width=275 height=250 zoom=' .. (tonumber(parametros['zoom']) or 10) .. ' latitude=' .. parametros['latitud'] .. ' longitude=' .. parametros['longitud'] ..' />') end
-- Por alguna razón, esto arroja error al no entregar un valor de longitud válido,
-- a pesar de que se está pasando como parámetro. Se deja para uso local.
--return require('Módulo:Mapa_de_localización').main(frame, parametros)
end
end
function seccionDesplegable(frame, titulo, lista, subseccion, minimo)
if lista then
if minimo == true or(string.len(lista) > (tonumber(minimo) or 400)) then
if not titulo then titulo = 'Varios' end
return {tipo='sección', estilodatos = 'padding:0', {'', frame:preprocess('{{Sección desplegable|align=left|estilotitulo=padding:.4em .6em;border-top:0;' .. (ColorEtiqueta~='' and ('background-color:' .. ColorEtiqueta) or '') .. '|título=' .. titulo .. '|datos='.. lista .. '}}')}}
end
if subseccion then
return {
tipo='sección',
estiloetiqueta = EstiloEtiqueta ..';'..EstiloSubEtiqueta,
estilodatos = EstiloDatos .. ';border-top:0;padding:0 .6em',
{titulo, lista}}
end
return {tipo='sección', {titulo, lista}}
end
end
function listaDesplegable(frame, titulo, lista, minimo)
if lista then
if minimo == true or(string.len(lista) > (tonumber(minimo) or 400)) then
if not titulo then titulo = 'Varios' end
return {tipo='sección', {'', frame:preprocess('{{Lista desplegable|título=' .. titulo .. '|1='.. lista .. '}}')}, estilodatos = 'text-align:left'}
end
return {tipo='sección', {titulo, lista}}
end
end
function round(num, numDecimalPlaces)
if type(num) == 'number' then
return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
else
return num
end
end
function code(content)
if(content~=nil) then
return '<code>'..content..'</code>'
end
return ''
end
function small(content)
if(content~=nil) then
return '<small>'..content..'</small>'
end
return ''
end
function nada(content) return content end
-- Función, propiedad() personalizada
function propiedad(idPropiedad, opciones, entidad, frame)
if not entidad then entidad = Entidad end
if entidad and entidad.claims and entidad.claims[idPropiedad] then
if not opciones then
opciones = {['linkback']='sí'}
end
local ValorPosicional = (function()
if opciones['valor_posicional'] == 'último' then return -1 end
if type(opciones['valor_posicional']) == 'number' then return opciones['valor_posicional'] end
return 1
end)()
local ValorPosicionalCalif =(function()
if opciones['valor_posicional_calif'] == 'último' then return -1 end
if type(opciones['valor_posicional_calif']) == 'number' then return opciones['valor_posicional_calif'] end
return 1
end)()
local Calificador = opciones['calificador']
local Obj = (function()
local Obj = (function()
local Obj = elementoTabla(entidad, 'claims', idPropiedad)
if ValorPosicional == -1 then return elementoTabla(Obj, #Obj) end
return elementoTabla(Obj, ValorPosicional)
end)()
if Calificador then
return (function()
local Obj = elementoTabla(Obj, 'qualifiers', Calificador)
if ValorPosicionalCalif == -1 then return elementoTabla(Obj, #Obj, 'datavalue') end
return elementoTabla(Obj, ValorPosicionalCalif, 'datavalue')
end)()
end
return elementoTabla(Obj, 'mainsnak', 'datavalue')
end)()
if Obj then
Tipo = elementoTabla(Obj, 'type')
-- Devolver el ID de la entidad, para propiedades de entidad
if opciones['formato'] == 'entidadID' then
return elementoTabla(Obj, 'value', 'id')
end
-- Obtener la propiedad como cadena sin formato
if opciones['formato'] == 'cadena' then
opciones['linkback'] = 'no'
if Tipo == 'string' then
return elementoTabla(Obj, 'value')
end
end
-- Devolver una cadena numérica correctamente formateada
if opciones['formato'] == 'número' then
if Tipo == 'quantity' then
return formatoNumero(elementoTabla(Obj, 'value', 'amount'))
end
end
-- Devolver una cadena numérica con su unidad
if opciones['formato'] == 'unidad' then
if elementoTabla(entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue') then
return formatoNumero(elementoTabla(entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue', 'value', 'amount')) .. ' - ' .. numeroUnidad(elementoTabla(entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue'), opciones)
else
return numeroUnidad(elementoTabla(entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue'), opciones)
end
end
-- Obtener la propiedad como cadena sin formato
if opciones['formato'] == 'enlace' then
opciones['linkback'] = 'no'
if Tipo == 'wikibase-entityid' then
return enlazar(ModuloWikidata.obtenerEtiquetaWikidata(mw.wikibase.getEntity(elementoTabla(Obj, 'value', 'id'))))
elseif Tipo == 'string' then
return enlazar(elementoTabla(Obj, 'value'))
end
end
-- Preparar para devolver el archivo más reciente en la propiedad. Buscar cómo hacerlo con los calificadores
if opciones['formato'] == 'archivo' then
if Calificador then return elementoTabla(Obj, 'value') end
if not opciones['uno'] then opciones['uno'] = 'último' end
opciones['ordenar'] = 'por fecha'
end
if Tipo == 'globecoordinate' then
if opciones['formato'] == 'latitud' then return elementoTabla(Obj, 'value', 'latitude') end
if opciones['formato'] == 'longitud' then return elementoTabla(Obj, 'value', 'longitude') end
end
end
-- Invocar a la función fallback si no se cumplen las condiciones anteriores
opciones.entityId = entidad.id
opciones.propiedad = idPropiedad
return ModuloWikidata.getPropiedad(opciones, entidad.claims[idPropiedad])
end
end
function categorizar(cat)
categorias = categorias .. '[[Categoría:'..cat..']]'
end
return p