Mudanças entre as edições de "Módulo:MapaJson"

De Wiki Gla
Ir para navegação Ir para pesquisar
(modulo lua para processar o Json do mapa)
 
 
(13 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
-- Módulo:MapaJson
-- Processa e sanitiza JSON para uso no widget MapaViewer
local p = {}
local p = {}


-- Função para escapar string para JavaScript
function p.getDados(frame)
function p.escapeJS(str)
     local pageName = frame.args[1] or ''
    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 pageName == '' then
     if jsonString == '' then
         return ''
         jsonString = frame:getParent().args[1] or ''
     end
     end
      
      
    -- Remover quebras de linha e espaços extras
     local title = mw.title.new(pageName)
    jsonString = string.gsub(jsonString, '\n', ' ')
     if not title or not title.exists then
    jsonString = string.gsub(jsonString, '\r', ' ')
         return ''
    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
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
     local jsonContent = title:getContent() or ''
        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()
     -- Apenas remover espaços extras
        return mw.text.jsonDecode(jsonString)
    jsonContent = jsonContent:gsub("\n", "")
     end)
    jsonContent = jsonContent:gsub("\r", "")
    jsonContent = jsonContent:gsub("\t", " ")
     jsonContent = jsonContent:gsub("  +", " ")
      
      
     if success and data[field] then
     return jsonContent
        if type(data[field]) == 'table' then
            return mw.text.jsonEncode(data[field])
        else
            return tostring(data[field])
        end
    end
    return ''
end
end


return p
return p

Edição atual tal como às 14h24min de 11 de abril de 2026

A documentação para este módulo pode ser criada em Módulo:MapaJson/doc

local p = {}

function p.getDados(frame)
    local pageName = frame.args[1] or ''
    
    if pageName == '' then
        return ''
    end
    
    local title = mw.title.new(pageName)
    if not title or not title.exists then
        return ''
    end
    
    local jsonContent = title:getContent() or ''
    
    -- Apenas remover espaços extras
    jsonContent = jsonContent:gsub("\n", "")
    jsonContent = jsonContent:gsub("\r", "")
    jsonContent = jsonContent:gsub("\t", " ")
    jsonContent = jsonContent:gsub("  +", " ")
    
    return jsonContent
end

return p