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

De Wiki Gla
Ir para navegação Ir para pesquisar
(Criou página com 'local p = {} function p.loadBossData(bossName) local normalizedName = bossName:gsub("^%l", string.upper) local success, bossData = pcall(function() return requ...')
 
 
(10 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
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)
     if not success then
     return success and bossData or nil
        return normalizedName .. " nao encontrado"
    end
   
    return bossData
end
end


Linha 19: Linha 14:
      
      
     local bossData = p.loadBossData(bossName)
     local bossData = p.loadBossData(bossName)
    if not bossData then return "Erro: Dados não encontrados." end
      
      
    -- Lista das chaves de dificuldade para iterar
     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 then
         if diffData and diffData.recompensasPossiveis then
             local strRecompensas = table.concat(diffData.recompensas, ",")
             -- 1. Transforma {"Item A", "Item B"} em "Item A;Item B"
             local strRecompensasPossiveis = table.concat(diffData.recompensasPossiveis, ",")
             local itensStr = table.concat(diffData.recompensasPossiveis, ";")
              
              
             -- 2. Monta o Wikitexto para esta dificuldade específica
             local wikiTextRecompensas = "{{Reward|itens=" .. strRecompensas .. "}}"
             local wikiText = "{{Reward|t|itens=" .. itensStr .. ";1}}"
             local wikiTextRecompensasPossiveis = "{{Reward|itens=" .. strRecompensasPossiveis .. "}}"
              
              
             -- 3. Processa e guarda o HTML final (com imagens e tooltips da Wiki)
            local htmlRenderRecompensas = frame:preprocess(wikiTextRecompensas)
             -- Usamos frame:getParent() caso o preprocess precise do contexto da página
            local htmlRenderRecompensasPos = frame:preprocess(wikiTextRecompensasPossiveis)
             diffData.recompensasRenderizadas = frame:preprocess(wikiText)
           
             -- 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
      
      
    -- Agora o bossData contém o HTML pronto em cada dificuldade
     local jsonData = mw.text.jsonEncode(bossData)
     local jsonData = mw.text.jsonEncode(bossData)
    -- Escapa aspas para o HTML de forma segura
     local safeJson = mw.text.encode(jsonData)
     local safeJson = mw.text.encode(jsonData)
    -- Carrega o Widget
    local widgetHTML = frame:preprocess("{{#widget:TesteBossYawnv2}}")
      
      
     -- Carrega o widget
     -- Monta a estrutura final: A div principal contém o JSON leve, as divs ocultas e o Widget
    local widget = frame:preprocess("{{#widget:TesteBossYawnv3}}")
     return '<div class="boss-component" data-json="' .. safeJson .. '">' .. elementosOcultosRecompensas .. elementosOcultosRecompensasPos .. widgetHTML .. '</div>'
   
     return '<div class="boss-component" data-json="' .. safeJson .. '">' .. widget .. '</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