Módulo:MapaJson
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:MapaJson/doc
-- Módulo:MapaJson
-- Processa e sanitiza JSON para uso no widget MapaViewer
local p = {}
-- Função para escapar string para JavaScript
function p.escapeJS(str)
if not str then return '' end
str = string.gsub(str, '\\', '\\\\')
str = string.gsub(str, "'", "\\'")
str = string.gsub(str, '"', '\\"')
str = string.gsub(str, '\n', '\\n')
str = string.gsub(str, '\r', '\\r')
str = string.gsub(str, '\t', '\\t')
return str
end
-- Função principal para processar o JSON
function p.process(frame)
local args = frame.args
local jsonString = args.json or ''
-- Se não veio JSON, tentar pegar do primeiro argumento
if jsonString == '' then
jsonString = frame:getParent().args[1] or ''
end
-- Remover quebras de linha e espaços extras
jsonString = string.gsub(jsonString, '\n', ' ')
jsonString = string.gsub(jsonString, '\r', ' ')
jsonString = string.gsub(jsonString, '\t', ' ')
-- Remover espaços múltiplos
jsonString = string.gsub(jsonString, '%s+', ' ')
-- Escapar para JavaScript
local escaped = p.escapeJS(jsonString)
-- Retornar como string segura
return escaped
end
-- Função para validar se é JSON válido
function p.validate(frame)
local jsonString = frame.args.json or ''
local success, result = pcall(function()
return mw.text.jsonDecode(jsonString)
end)
if success then
return 'true'
else
return 'false'
end
end
-- Função para formatar JSON bonito (opcional)
function p.pretty(frame)
local jsonString = frame.args.json or ''
local success, result = pcall(function()
return mw.text.jsonDecode(jsonString)
end)
if success then
return mw.text.jsonEncode(result, mw.text.JSON_PRETTY)
else
return 'JSON inválido'
end
end
-- Função para extrair um campo específico
function p.getField(frame)
local jsonString = frame.args.json or ''
local field = frame.args.field or ''
local success, data = pcall(function()
return mw.text.jsonDecode(jsonString)
end)
if success and data[field] then
if type(data[field]) == 'table' then
return mw.text.jsonEncode(data[field])
else
return tostring(data[field])
end
end
return ''
end
return p