Módulo:Wikidata/Formatos país
La documentación para este módulo puede ser creada en Módulo:Wikidata/Formatos país/doc
local p={}
local moduloTablas = require('Módulo:Tablas')
local elementoTabla = moduloTablas.elemento
local agruparTabla = moduloTablas.agrupar
local ordenarTabla = moduloTablas.ordenar
local moduloWikidata = require('Módulo:Wikidata')
local formatoLista = moduloWikidata.formatoLista
local moduloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local enlazar = moduloWikidataFormatos.enlazar
local formatoPeriodo = moduloWikidataFormatos.formatoPeriodo
local obtenerDatos = moduloWikidataFormatos.obtenerDatos
local paises = mw.loadData('Módulo:Wikidata/Formatos_país/datos')
function p.pruebas(frame)
--local entidad
local nacionalidad
for k,v in pairs(paises) do
if not v.etiqueta then
--entidad = mw.wikibase.getEntityObject(k) or {}
--v.etiqueta = require('Módulo:Tablas').elemento(entidad,'labels', 'es', 'value')
v.etiqueta = mw.wikibase.getLabel(k)
end
if not v.enlace then
v.enlace = mw.wikibase.getSitelink(k)
end
if v.etiqueta and not v.nacionalidad then
nacionalidad = frame:preprocess('{{gentilicio|'.. v.etiqueta .. '|fs}}')
if nacionalidad and nacionalidad~= '' then
v.nacionalidad = nacionalidad
end
end
end
return require('Módulo:Tablas').tostringordered(paises)
end
function p.formatoNacionalidad(claim, opciones)
if not claim then
return
end
local tabla_nacionalidades={}
local idPais
local pais
--if true then return require('Módulo:Tablas').tostring(claim) end
for k, v in ipairs(claim) do
idPais = elementoTabla(v,'mainsnak','datavalue','value','id')
if idPais then
pais = paises[idPais] or {}
-- falta saltarse los paises sin nacionalidad
if pais.nacionalidad then
table.insert(
tabla_nacionalidades,
{
['nacionalidad'] = pais.nacionalidad,
['datos'] = {
['idPais'] = idPais,
['etiquetaPais'] = pais.etiqueta,
['enlacePais'] = pais.enlace,
['periodo'] = formatoPeriodo(v.qualifiers)
},
['fecha'] = elementoTabla(v,'qualifiers','P585',1,'datavalue','value','time'),
['fechaCreacion'] = elementoTabla(v,'qualifiers','P571',1,'datavalue','value','time'),
['fechaInicio'] = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time'),
['fechaFin'] = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')
}
)
end
elseif elementoTabla(v,'mainsnak','snaktype') == 'novalue' then
if elementoTabla(v,'qualifiers','P805',1,'datavalue','value','id') == 'Q223050' then
table.insert(
tabla_nacionalidades,
{
['nacionalidad'] = 'apátrida',
['datos'] = {
['periodo'] = formatoPeriodo(v.qualifiers)
},
['fecha'] = elementoTabla(v,'qualifiers','P585',1,'datavalue','value','time'),
['fechaCreacion'] = elementoTabla(v,'qualifiers','P571',1,'datavalue','value','time'),
['fechaInicio'] = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time'),
['fechaFin'] = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')
}
)
else
table.insert(
tabla_nacionalidades,
{
['nacionalidad'] = 'sin nacionalidad',
['datos'] = {
['periodo'] = formatoPeriodo(v.qualifiers)
},
['fecha'] = elementoTabla(v,'qualifiers','P585',1,'datavalue','value','time'),
['fechaCreacion'] = elementoTabla(v,'qualifiers','P571',1,'datavalue','value','time'),
['fechaInicio'] = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time'),
['fechaFin'] = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')
}
)
end
end
end
ordenarTabla(tabla_nacionalidades, {'nacionalidad', 'fechaInicio', 'fechaFin'})
tabla_nacionalidades = agruparTabla(tabla_nacionalidades, 'nacionalidad', 'datos')
--if true then return require('Módulo:Tablas').tostring(tabla_nacionalidades) end
ordenarTabla(tabla_nacionalidades, {'fechaInicio', 'fechaFin'})
--tabla_nacionalidades = agruparTabla(tabla_nacionalidades, 'nacionalidad', 'datos')
--if true then return require('Módulo:Tablas').tostring(tabla_nacionalidades) end
local nacionalidades = {}
local tabla_periodos
local nacionalidad
local periodos
for k,v in ipairs(tabla_nacionalidades) do
tabla_periodos = {}
if v.datos[2] then
nacionalidad = v.nacionalidad
if opciones['formatoTexto'] and mw.ustring.find(opciones['formatoTexto'],'mayúscula', plain ) and k == 1 then
nacionalidad = mw.language.new('es'):ucfirst(nacionalidad)
end
-- Comprobar si están informados todos los periodos. Si no es así no se pondrán entre paréntesis
-- Por ejemplo William Wordsworth que en Wikidata tiene como país de
-- nacionalidad Reino Unido de Gran Bretaña e Irlanda sin fechas de
-- inicio o de fin y Reino de Gran Bretaña con fecha de fin 1 ene 1801.
-- Se devolverá como nacionalidad solo "Británica".
local wpaisSinPeriodo
for k2,v2 in ipairs(v.datos) do
if not v2.periodo then
wpaisSinPeriodo = true
end
end
if not wpaisSinPeriodo then
for k2,v2 in ipairs(v.datos) do
table.insert(tabla_periodos, enlazar(v2.enlacePais, v2.periodo, v2.idPais))
end
periodos = table.concat(tabla_periodos,', ')
end
--if true then return require('Módulo:Tablas').tostring(tabla_periodos) end
else
if opciones['formatoTexto'] and mw.ustring.find(opciones['formatoTexto'],'mayúscula', plain ) and k == 1 then
opciones['mayúscula'] = 'sí'
else
opciones['mayúscula'] = 'no'
end
nacionalidad = enlazar(v.datos[1].enlacePais, v.nacionalidad, v.datos[1].idPais, opciones)
periodos = v.datos[1].periodo
end
if periodos and periodos ~= '' then
nacionalidad = nacionalidad .. ' <small>(' .. periodos .. ')</small>'
end
table.insert(nacionalidades, nacionalidad)
end
return formatoLista(nacionalidades, opciones)
--return require('Módulo:Tablas').tostring(nacionalidades)
end
function p._nacionalidad(frame)
local args = frame.args
--if true then return require('Módulo:Tablas').tostring(frame.args) end
local claim = mw.wikibase.getAllStatements(args.entityId or args.id,'P27')
if not claim then
return
end
opciones={}
opciones.propiedad = 'P27'
opciones.entityId = args.entityId or args.id,'P27'
opciones.linkback = args.linkback
opciones.formatoTexto = args.formatoTexto
opciones.enlace = args.enlace
return p.formatoNacionalidad(claim, opciones)
end
function p.formatoBandera(valor, opciones, frame)
if not valor then
return
end
local enlace, etiqueta, id = obtenerDatos(valor)
if not etiqueta then
return
elseif mw.title.new('Plantilla:Geodatos '.. etiqueta ).exists then
return frame:preprocess('{{bandera2|' .. etiqueta .. '}}')
else
return enlazar(enlace, etiqueta, id, opciones)
end
end
-- Alias para simplificar el uso desde la plantilla propiedad
--
p['bandera'] = p.formatoBandera
p['nacionalidad'] = p.formatoNacionalidad
return p