Mudanças entre as edições de "Módulo:TesteBossYawnv2"
Ir para navegação
Ir para pesquisar
| (8 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
| Linha 17: | Linha 17: | ||
local diffs = {"normal", "elite", "hard"} | local diffs = {"normal", "elite", "hard"} | ||
-- Aqui vamos guardar os HTMLs gerados fora do JSON | |||
local elementosOcultosRecompensas = "" | |||
local elementosOcultosRecompensasPos = "" | |||
for _, diffKey in ipairs(diffs) do | for _, diffKey in ipairs(diffs) do | ||
local diffData = bossData[diffKey] | local diffData = bossData[diffKey] | ||
if diffData | if diffData then | ||
local | local strRecompensas = table.concat(diffData.recompensas, ",") | ||
local | local strRecompensasPossiveis = table.concat(diffData.recompensasPossiveis, ",") | ||
local wikiTextRecompensas = "{{Reward|itens=" .. strRecompensas .. "}}" | |||
local | local wikiTextRecompensasPossiveis = "{{Reward|itens=" .. strRecompensasPossiveis .. "}}" | ||
local htmlRenderRecompensas = frame:preprocess(wikiTextRecompensas) | |||
local htmlRenderRecompensasPos = frame:preprocess(wikiTextRecompensasPossiveis) | |||
-- Em vez de por no JSON, usa uma div oculta com o HTML pronto | |||
elementosOcultosRecompensas = elementosOcultosRecompensas .. '<div class="boss-html-recompensas" data-diff="' .. diffKey .. '" style="display:none;">' .. htmlRenderRecompensas .. '</div>' | |||
elementosOcultosRecompensasPos = elementosOcultosRecompensasPos .. '<div class="boss-html-recompensas-possiveis" data-diff="' .. diffKey .. '" style="display:none;">' .. htmlRenderRecompensasPos .. '</div>' | |||
end | end | ||
end | end | ||
local jsonData = mw.text.jsonEncode(bossData) | local jsonData = mw.text.jsonEncode(bossData) | ||
-- Escapa aspas para o HTML de forma segura | |||
-- Escapa para o HTML | |||
local safeJson = mw.text.encode(jsonData) | local safeJson = mw.text.encode(jsonData) | ||
-- Carrega o Widget | |||
local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv2}}") | |||
-- | -- Monta a estrutura final: A div principal contém o JSON leve, as divs ocultas e o Widget | ||
return '<div class="boss-component" data-json="' .. safeJson .. '">' .. elementosOcultosRecompensas .. elementosOcultosRecompensasPos .. widgetHTML .. '</div>' | |||
return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widgetHTML .. '</div>' | |||
end | end | ||
return p | return p | ||
Edição atual tal como às 00h39min de 10 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"}
-- Aqui vamos guardar os HTMLs gerados fora do JSON
local elementosOcultosRecompensas = ""
local elementosOcultosRecompensasPos = ""
for _, diffKey in ipairs(diffs) do
local diffData = bossData[diffKey]
if diffData then
local strRecompensas = table.concat(diffData.recompensas, ",")
local strRecompensasPossiveis = table.concat(diffData.recompensasPossiveis, ",")
local wikiTextRecompensas = "{{Reward|itens=" .. strRecompensas .. "}}"
local wikiTextRecompensasPossiveis = "{{Reward|itens=" .. strRecompensasPossiveis .. "}}"
local htmlRenderRecompensas = frame:preprocess(wikiTextRecompensas)
local htmlRenderRecompensasPos = frame:preprocess(wikiTextRecompensasPossiveis)
-- Em vez de por no JSON, usa uma div oculta com o HTML pronto
elementosOcultosRecompensas = elementosOcultosRecompensas .. '<div class="boss-html-recompensas" data-diff="' .. diffKey .. '" style="display:none;">' .. htmlRenderRecompensas .. '</div>'
elementosOcultosRecompensasPos = elementosOcultosRecompensasPos .. '<div class="boss-html-recompensas-possiveis" data-diff="' .. diffKey .. '" style="display:none;">' .. htmlRenderRecompensasPos .. '</div>'
end
end
local jsonData = mw.text.jsonEncode(bossData)
-- Escapa aspas para o HTML de forma segura
local safeJson = mw.text.encode(jsonData)
-- Carrega o Widget
local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv2}}")
-- Monta a estrutura final: A div principal contém o JSON leve, as divs ocultas e o Widget
return '<div class="boss-component" data-json="' .. safeJson .. '">' .. elementosOcultosRecompensas .. elementosOcultosRecompensasPos .. widgetHTML .. '</div>'
end
return p