Módulo:MapaJson

De Wiki Gla
Revisão de 09h19min de 9 de abril de 2026 por Ceu azul (discussão | contribs) (modulo lua para processar o Json do mapa)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
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