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

De Wiki Gla
Ir para navegação Ir para pesquisar
 
(36 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
-- Módulo:BossDisplay
local p = {}
local p = {}


function p.bossInfo(frame)
function p.main(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args


     local function g(k, default)
     local normal_nivel    = mw.text.trim(args['normal_nivel']    or '140')
        local v = mw.text.trim(args[k] or "")
    local normal_equip    = mw.text.trim(args['normal_equip']   or 'Set +8')
        return v ~= "" and v or default
    local hard_personagem = mw.text.trim(args['hard_personagem'] or 'personagem 4 ou 5 estrelas (Diamante)')
     end
     local hard_equip      = mw.text.trim(args['hard_equip']      or 'Set +16')


    -- Dados gerais
     local root = mw.html.create('div')
     local nome1      = g("nome1", "Forma 1")
     root:addClass('gb-wrap')
     local nome2      = g("nome2", "Forma 2")


     local img        = g("img", "Placeholder.png")
     -- CSS via TemplateStyles (recomendado) ou inline
     local nome      = g("nome", "Nome do Boss")
     -- Botões (tabs)
     local frase      = g("frase", "Frase ou lema do boss.")
     local btns = root:tag('div'):addClass('gb-btns')


     local hp         = g("hp", "???")
     btns:tag('button')
    local exp        = g("exp", "???")
         :addClass('gb-btn'):addClass('active')
    local nivel      = g("nivel", "???")
        :attr('onclick', "gbSwitch('n',this)")
        :wikitext('Normal ')
        :tag('span'):addClass('gb-badge'):addClass('badge-n')
        :wikitext('Nível ' .. normal_nivel)


     local necessario = g("necessario", "-")
     btns:tag('button')
        :addClass('gb-btn')
        :attr('onclick', "gbSwitch('h',this)")
        :wikitext('Hard ')
        :tag('span'):addClass('gb-badge'):addClass('badge-h')
        :wikitext(hard_equip)


     -- Loot (agora 3 categorias)
     -- Painel Normal
     local dropNormal = g("normal", "")
     local pn = root:tag('div'):addClass('gb-panel'):addClass('active'):attr('id', 'gbpanel-n')
     local dropElite  = g("elite", "")
    pn:tag('div'):addClass('gb-title'):wikitext('Requisitos — Normal')
     local dropHard  = g("hard", "")
     local ln = pn:tag('ul'):addClass('gb-list')
    ln:tag('li')
        :tag('span'):addClass('gb-dot'):addClass('dot-n'):done()
        :tag('span'):wikitext('Nível mínimo: '):tag('b'):wikitext(normal_nivel)
     ln:tag('li')
        :tag('span'):addClass('gb-dot'):addClass('dot-n'):done()
        :tag('span'):wikitext('Equipamento recomendado: '):tag('b'):wikitext(normal_equip)


     -- Montagem HTML
     -- Painel Hard
     local html = mw.html.create("div")
     local ph = root:tag('div'):addClass('gb-panel'):attr('id', 'gbpanel-h')
    html:addClass("bossbox")
     ph:tag('div'):addClass('gb-title'):wikitext('Requisitos — Hard')
    html:wikitext([[
     local lh = ph:tag('ul'):addClass('gb-list')
<style>
     lh:tag('li')
.bossbox {
        :tag('span'):addClass('gb-dot'):addClass('dot-h'):done()
    background:#18181b;
        :tag('span'):wikitext('Recomendado utilizar um '):tag('b'):wikitext(hard_personagem)
    border-radius:12px;
     lh:tag('li')
     padding:20px;
        :tag('span'):addClass('gb-dot'):addClass('dot-h'):done()
    color:#fff;
        :tag('span'):wikitext('Equipamento recomendado: '):tag('b'):wikitext(hard_equip)
    max-width:700px;
     margin:auto;
    font-family:Verdana,sans-serif;
}
.boss-tabs {
     display:flex;
    gap:6px;
    margin-bottom:15px;
}
.boss-tab {
    padding:7px 18px;
    border-radius:7px;
    background:#232329;
    color:#ccc;
    font-weight:600;
    text-decoration:none;
}
.boss-tab.active {
     background:#19171c;
    border:2px solid #c7a047;
    color:#fff;
}
.boss-main {
    display:flex;
    gap:15px;
    flex-wrap:wrap;
}
.boss-left img {
    border-radius:8px;
}
.boss-stats-box {
    background:#222126;
    border-radius:8px;
    padding:12px 20px;
    margin-top:6px;
}
.boss-loot {
    background:#232329;
    border-radius:10px;
    padding:18px;
    margin-top:20px;
}
@media(max-width:640px){
    .boss-main{flex-direction:column;}
}
</style>
]])


     -- SISTEMA DE ABAS (sem JS)
     -- Script
     html:wikitext('<div class="boss-tabs">')
     local script = mw.html.create('script')
     html:wikitext(string.format('<a href="#form1" class="boss-tab"> %s </a>', nome1))
     script:wikitext([[
    html:wikitext(string.format('<a href="#form2" class="boss-tab"> %s </a>', nome2))
function gbSwitch(tab,btn){
    html:wikitext('</div>')
['n','h'].forEach(function(t){document.getElementById('gbpanel-'+t).classList.remove('active');});
document.querySelectorAll('.gb-btn').forEach(function(b){b.classList.remove('active');});
document.getElementById('gbpanel-'+tab).classList.add('active');
btn.classList.add('active');
}]])


     -- CONTAINER PRINCIPAL
     -- CSS inline
     local main = html:tag("div"):addClass("boss-main")
     local style = mw.html.create('style')
    style:wikitext([[
.gb-wrap{font-family:sans-serif;max-width:600px}
.gb-btns{display:flex;border-bottom:2px solid #a2a9b1;margin-bottom:0}
.gb-btn{padding:8px 22px;font-size:14px;font-weight:bold;color:#54595d;background:transparent;border:none;border-bottom:3px solid transparent;margin-bottom:-2px;cursor:pointer;display:flex;align-items:center;gap:6px}
.gb-btn:hover{color:#202122}
.gb-btn.active{color:#202122;border-bottom-color:#3680b0}
.gb-badge{font-size:11px;padding:2px 8px;border-radius:20px;font-weight:bold}
.badge-n{background:#ddeeff;color:#185FA5}
.badge-h{background:#fce8e8;color:#a32d2d}
.gb-panel{display:none;padding:14px 2px}
.gb-panel.active{display:block}
.gb-title{font-size:11px;font-weight:bold;color:#72777d;text-transform:uppercase;letter-spacing:.06em;margin-bottom:10px}
.gb-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
.gb-list li{display:flex;align-items:flex-start;gap:8px;font-size:14px;color:#202122;line-height:1.5}
.gb-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;margin-top:5px}
.dot-n{background:#3680b0}
.dot-h{background:#e24b4a}
@media(max-width:480px){.gb-btn{padding:8px 14px;font-size:13px}}]])


     -- IMAGEM
     return tostring(style) .. tostring(root) .. tostring(script)
    main:tag("div"):addClass("boss-left")
        :wikitext(string.format("[[Arquivo:%s|120px]]", img))
 
    -- DADOS DO BOSS
    local info = main:tag("div")
 
    info:tag("div")
        :css{["font-size"]="1.4em",["font-weight"]="bold",color="#e82b2b"}
        :wikitext(nome)
 
    info:tag("div")
        :css{["font-size"]="95%",color="#eaa85d",["font-style"]="italic"}
        :wikitext('"'..frase..'"')
 
    -- STATS
    local statbox = info:tag("div"):addClass("boss-stats-box")
    statbox:wikitext(string.format(
        '<span style="color:#fb3d3d;font-weight:bold;">❤️ %s</span> &nbsp;&nbsp; ' ..
        '<span style="color:#ffe568;font-weight:bold;">💰 %s</span> &nbsp;&nbsp; ' ..
        '<span style="color:#6ca8fb;font-weight:bold;">⚔️ %s</span>',
        hp, exp, nivel
    ))
 
    -- NECESSARIO
    info:tag("div")
        :css{["margin-top"]="8px",["font-size"]="90%",color="#cfccff"}
        :wikitext('<b>Necessário:</b> ' .. necessario)
 
    -- LOOT TABLE
    local loot = html:tag("div"):addClass("boss-loot")
    loot:tag("div")
        :css{["font-size"]="1.2em","margin-bottom","10px",color="#f3e8bb"}
        :wikitext("Drops")
 
    local function addRow(title, color, content)
        if content ~= "" then
            loot:tag("div")
                :css{color=color,["margin-top"]="6px"}
                :wikitext(string.format("<b>%s</b>: %s", title, content))
        end
    end
 
    addRow("Normal", "#f3e8bb", dropNormal)
    addRow("Elite",  "#aeccff", dropElite)
    addRow("Hard",  "#f9538f", dropHard)
 
    return tostring(html)
end
end


return p
return p

Edição atual tal como às 04h47min de 17 de março de 2026

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

local p = {}

function p.main(frame)
    local args = frame:getParent().args

    local normal_nivel    = mw.text.trim(args['normal_nivel']    or '140')
    local normal_equip    = mw.text.trim(args['normal_equip']    or 'Set +8')
    local hard_personagem = mw.text.trim(args['hard_personagem'] or 'personagem 4 ou 5 estrelas (Diamante)')
    local hard_equip      = mw.text.trim(args['hard_equip']      or 'Set +16')

    local root = mw.html.create('div')
    root:addClass('gb-wrap')

    -- CSS via TemplateStyles (recomendado) ou inline
    -- Botões (tabs)
    local btns = root:tag('div'):addClass('gb-btns')

    btns:tag('button')
        :addClass('gb-btn'):addClass('active')
        :attr('onclick', "gbSwitch('n',this)")
        :wikitext('Normal ')
        :tag('span'):addClass('gb-badge'):addClass('badge-n')
        :wikitext('Nível ' .. normal_nivel)

    btns:tag('button')
        :addClass('gb-btn')
        :attr('onclick', "gbSwitch('h',this)")
        :wikitext('Hard ')
        :tag('span'):addClass('gb-badge'):addClass('badge-h')
        :wikitext(hard_equip)

    -- Painel Normal
    local pn = root:tag('div'):addClass('gb-panel'):addClass('active'):attr('id', 'gbpanel-n')
    pn:tag('div'):addClass('gb-title'):wikitext('Requisitos — Normal')
    local ln = pn:tag('ul'):addClass('gb-list')
    ln:tag('li')
        :tag('span'):addClass('gb-dot'):addClass('dot-n'):done()
        :tag('span'):wikitext('Nível mínimo: '):tag('b'):wikitext(normal_nivel)
    ln:tag('li')
        :tag('span'):addClass('gb-dot'):addClass('dot-n'):done()
        :tag('span'):wikitext('Equipamento recomendado: '):tag('b'):wikitext(normal_equip)

    -- Painel Hard
    local ph = root:tag('div'):addClass('gb-panel'):attr('id', 'gbpanel-h')
    ph:tag('div'):addClass('gb-title'):wikitext('Requisitos — Hard')
    local lh = ph:tag('ul'):addClass('gb-list')
    lh:tag('li')
        :tag('span'):addClass('gb-dot'):addClass('dot-h'):done()
        :tag('span'):wikitext('Recomendado utilizar um '):tag('b'):wikitext(hard_personagem)
    lh:tag('li')
        :tag('span'):addClass('gb-dot'):addClass('dot-h'):done()
        :tag('span'):wikitext('Equipamento recomendado: '):tag('b'):wikitext(hard_equip)

    -- Script
    local script = mw.html.create('script')
    script:wikitext([[
function gbSwitch(tab,btn){
['n','h'].forEach(function(t){document.getElementById('gbpanel-'+t).classList.remove('active');});
document.querySelectorAll('.gb-btn').forEach(function(b){b.classList.remove('active');});
document.getElementById('gbpanel-'+tab).classList.add('active');
btn.classList.add('active');
}]])

    -- CSS inline
    local style = mw.html.create('style')
    style:wikitext([[
.gb-wrap{font-family:sans-serif;max-width:600px}
.gb-btns{display:flex;border-bottom:2px solid #a2a9b1;margin-bottom:0}
.gb-btn{padding:8px 22px;font-size:14px;font-weight:bold;color:#54595d;background:transparent;border:none;border-bottom:3px solid transparent;margin-bottom:-2px;cursor:pointer;display:flex;align-items:center;gap:6px}
.gb-btn:hover{color:#202122}
.gb-btn.active{color:#202122;border-bottom-color:#3680b0}
.gb-badge{font-size:11px;padding:2px 8px;border-radius:20px;font-weight:bold}
.badge-n{background:#ddeeff;color:#185FA5}
.badge-h{background:#fce8e8;color:#a32d2d}
.gb-panel{display:none;padding:14px 2px}
.gb-panel.active{display:block}
.gb-title{font-size:11px;font-weight:bold;color:#72777d;text-transform:uppercase;letter-spacing:.06em;margin-bottom:10px}
.gb-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
.gb-list li{display:flex;align-items:flex-start;gap:8px;font-size:14px;color:#202122;line-height:1.5}
.gb-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;margin-top:5px}
.dot-n{background:#3680b0}
.dot-h{background:#e24b4a}
@media(max-width:480px){.gb-btn{padding:8px 14px;font-size:13px}}]])

    return tostring(style) .. tostring(root) .. tostring(script)
end

return p