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

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 24: Linha 24:
             local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}"
             local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}"
              
              
             -- 1. Processa o HTML
             -- Processa o HTML e remove as quebras de linha que quebram o JSON
             local html = frame:preprocess(wikiText)
             local html = frame:preprocess(wikiText)
           
            -- 2. REMOVE QUEBRAS DE LINHA (Crucial para não quebrar o JSON)
            -- Isso remove os "enters" que o MediaWiki coloca entre as divs
             html = html:gsub("\n", ""):gsub("\r", "")
             html = html:gsub("\n", ""):gsub("\r", "")
              
              
Linha 35: Linha 32:
     end
     end
      
      
     -- Gera o JSON
     -- Gera o JSON em texto
local jsonData = mw.text.jsonEncode(bossData)
    local jsonData = mw.text.jsonEncode(bossData)
      
      
     -- Escapa aspas
     -- A SOLUÇÃO DEFINITIVA: Codifica o JSON inteiro no formato URL.
     local safeJson = mw.text.encode(jsonData)
    -- Isso transforma todos os caracteres especiais (", <, >) em códigos seguros (%22, %3C).
    -- O MediaWiki será incapaz de quebrar a página porque não verá nenhum HTML aqui.
     local safeJson = mw.uri.encode(jsonData, "PATH")
      
      
    -- Preprocessa o Widget separadamente
     local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv2}}")
     local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv2}}")
      
      
    -- O SEGREDO: Usamos extensionTag para criar um "nowiki" que protege o JSON.
     return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widgetHTML .. '</div>'
    -- Isso garante que o MediaWiki ignore o conteúdo do data-json durante o parsing da página.
    local jsonProtegido = frame:extensionTag('nowiki', safeJson)
   
     return '<div class="boss-component" data-json="' .. jsonProtegido .. '">' .. widgetHTML .. '</div>'
end
end


return p
return p

Edição das 23h44min de 9 de abril de 2026

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

local p = {}

function p.loadBossData(bossName)
    local normalizedName = bossName:gsub("^%l", string.upper)
    local success, bossData = pcall(function()
        return require("Módulo:" .. normalizedName .. "/data")
    end)
    return success and bossData or nil
end

function p.render(frame)
    local bossName = frame.args.boss
    if not bossName or bossName == "" then return "Erro: Boss não especificado." end
    
    local bossData = p.loadBossData(bossName)
    if not bossData then return "Erro: Dados não encontrados." end
    
    local diffs = {"normal", "elite", "hard"}
    
    for _, diffKey in ipairs(diffs) do
        local diffData = bossData[diffKey]
        if diffData and diffData.recompensasPossiveis then
            local itensStr = table.concat(diffData.recompensasPossiveis, ";")
            local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}"
            
            -- Processa o HTML e remove as quebras de linha que quebram o JSON
            local html = frame:preprocess(wikiText)
            html = html:gsub("\n", ""):gsub("\r", "")
            
            diffData.recompensasRenderizadas = html
        end
    end
    
    -- Gera o JSON em texto
    local jsonData = mw.text.jsonEncode(bossData)
    
    -- A SOLUÇÃO DEFINITIVA: Codifica o JSON inteiro no formato URL.
    -- Isso transforma todos os caracteres especiais (", <, >) em códigos seguros (%22, %3C).
    -- O MediaWiki será incapaz de quebrar a página porque não verá nenhum HTML aqui.
    local safeJson = mw.uri.encode(jsonData, "PATH")
    
    local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv2}}")
    
    return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widgetHTML .. '</div>'
end

return p