Mudanças entre as edições de "Módulo:TesteBossYawnv2"
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}}" | ||
-- | -- Processa o HTML e remove as quebras de linha que quebram o JSON | ||
local html = frame:preprocess(wikiText) | local html = frame:preprocess(wikiText) | ||
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) | |||
-- | -- A SOLUÇÃO DEFINITIVA: Codifica o JSON inteiro no formato URL. | ||
local safeJson = mw. | -- 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}}") | local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv2}}") | ||
return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widgetHTML .. '</div>' | |||
return '<div class="boss-component" data-json="' .. | |||
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