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