Mudanças entre as edições de "Módulo:TesteBossYawnv2"
Ir para navegação
Ir para pesquisar
| Linha 2: | Linha 2: | ||
function p.loadBossData(bossName) | function p.loadBossData(bossName) | ||
local normalizedName = bossName:gsub("^%l", string.upper) | local normalizedName = bossName:gsub("^%l", string.upper) | ||
local success, bossData = pcall(function() | local success, bossData = pcall(function() | ||
return require("Módulo:" .. normalizedName .. "/data") | return require("Módulo:" .. normalizedName .. "/data") | ||
end) | end) | ||
return success and bossData or nil | |||
end | end | ||
function p.render(frame) | function p.render(frame) | ||
local bossName = frame.args.boss | local bossName = frame.args.boss | ||
if not bossName or bossName == "" then | if not bossName or bossName == "" then return "Erro: Boss não especificado." end | ||
local bossData = p.loadBossData(bossName) | local bossData = p.loadBossData(bossName) | ||
if not bossData then | if not bossData then return "Erro: Dados não encontrados." end | ||
local diffs = {"normal", "elite", "hard"} | local diffs = {"normal", "elite", "hard"} | ||
for _, diffKey in ipairs(diffs) do | for _, diffKey in ipairs(diffs) do | ||
local diffData = bossData[diffKey] | local diffData = bossData[diffKey] | ||
if diffData and diffData.recompensasPossiveis then | if diffData and diffData.recompensasPossiveis then | ||
local itensStr = table.concat(diffData.recompensasPossiveis, ";") | local itensStr = table.concat(diffData.recompensasPossiveis, ";") | ||
local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}" | |||
-- 1. Processa o HTML | |||
local html = frame:preprocess(wikiText) | |||
-- 2. | -- 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", "") | |||
diffData.recompensasRenderizadas = html | |||
diffData.recompensasRenderizadas = | |||
end | end | ||
end | end | ||
-- | -- Gera o JSON | ||
local jsonData = mw.text.jsonEncode(bossData) | local jsonData = mw.text.jsonEncode(bossData) | ||
-- Escapa | -- Escapa para o HTML (transforma " em ") | ||
local safeJson = mw.text.encode(jsonData) | local safeJson = mw.text.encode(jsonData) | ||
-- | -- Preprocessa o Widget separadamente para evitar conflitos de parser | ||
local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv3}}") | local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv3}}") | ||
-- | -- Retorno manual concatenado (evita que o parser tente renderizar o interior do JSON) | ||
return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widgetHTML .. '</div>' | return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widgetHTML .. '</div>' | ||
end | end | ||
return p | return p | ||
Edição das 23h37min 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}}"
-- 1. Processa o HTML
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", "")
diffData.recompensasRenderizadas = html
end
end
-- Gera o JSON
local jsonData = mw.text.jsonEncode(bossData)
-- Escapa para o HTML (transforma " em ")
local safeJson = mw.text.encode(jsonData)
-- Preprocessa o Widget separadamente para evitar conflitos de parser
local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv3}}")
-- Retorno manual concatenado (evita que o parser tente renderizar o interior do JSON)
return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widgetHTML .. '</div>'
end
return p