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

De Wiki Gla
Ir para navegação Ir para pesquisar
Etiqueta: Revertido
Etiqueta: Revertido
Linha 1: Linha 1:
-- Módulo:BossDisplay (versão corrigida e responsiva)
local p = {}
local p = {}


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


    local function g(k, default)
-- caixa de texto
        return mw.text.trim(args[k] or "") ~= "" and args[k] or default
local textBox = main:tag("div"):css{ flex = 1 }
    end


    local img        = g("img",        "Placeholder.png")
    local nome      = g("nome",      "Nome do Boss")
    local frase      = g("frase",      "Frase ou lema do boss.")
    local hp        = g("hp",        "???")
    local exp        = g("exp",        "???")
    local nivel      = g("nivel",      "???")
    local fresco    = g("fresco",    "-")
    local forte      = g("forte",      "-")
    local reflete    = g("reflete",    "-")
    local comum      = g("comum",      "")
    local semiraro  = g("semiraro",  "")
    local raro      = g("raro",      "")
    local muitoRaro  = g("muitoraro",  "")


    --------------------------------------------------------------------
textBox:tag("div")
    -- CSS RESPONSIVO — usando addCSS para NÃO aparecer no HTML final
:css{ ["font-size"] = "1.25em", ["font-weight"] = "bold", color = "#e82b2b" }
    --------------------------------------------------------------------
:wikitext(nome)
    mw.addCSS([[
@media screen and (max-width: 650px) {
    .boss-main {
        flex-direction: column !important;
        text-align: center !important;
        gap: 16px !important;
    }


    .boss-img-box img {
        width: 70px !important;
        height: 70px !important;
    }


    .boss-stats {
-----------------------------------------------------------------
        align-items: center !important;
-- Stats
    }
-----------------------------------------------------------------
local stats = main:tag("div")
:css{
display = "flex",
["flex-direction"] = "column",
gap = "5px",
["min-width"] = "170px"
}
}
    ]])


    --------------------------------------------------------------------
    -- HTML PRINCIPAL
    --------------------------------------------------------------------
    local html = mw.html.create()


    local box = html:tag("div")
local statBox = stats:tag("div")
        :addClass("boss-container")
:css{
        :css{
padding = "12px 18px",
            background = "#18181b",
["border-radius"] = "8px",
            ["border-radius"] = "12px",
["background-color"] = theme.variantB
            padding = "30px",
}
            color = "#fff",
            width = "100%",
            margin = "auto",
            ["font-family"] = "Verdana,sans-serif",
            ["box-sizing"] = "border-box"
        }


    -- Título
    box:tag("div")
        :css("font-size", "1.5em")
        :css("font-weight", "bold")
        :css("margin-bottom", "10px")
        :wikitext("Bosses")


    -- Tabs
statBox:wikitext(string.format('<span style="font-size:1.1em; color:#fb3d3d; font-weight:bold;">❤️ %s</span> ', hp))
    local var = box:tag("div")
statBox:wikitext(string.format('<span style="font-size:1.1em; color:#ffe568; font-weight:bold;">💰 %s</span> ', exp))
        :css("margin-bottom", "24px")
statBox:wikitext(string.format('<span style="font-size:1.1em; color:#6ca8fb; font-weight:bold;">⚔️ %s</span>', nivel))


    var:tag("span")
        :css{
            ["background-color"] = "#232329",
            ["border-radius"] = "7px 0 0 7px",
            padding = "7px 20px",
            ["font-size"] = "1em",
            color = "#cbcdd7",
            ["font-weight"] = "600"
        }
        :wikitext("Unbound Crimsonveil")


    var:tag("span")
stats:tag("div")
        :css{
:css{ ["font-size"] = "90%" }
            ["background-color"] = "#19171c",
:wikitext(string.format(
            ["border-radius"] = "0 7px 7px 0",
"<b>Frescor:</b> %s • <b>Forte:</b> %s • <b>Reflete:</b> %s",
            padding = "7px 20px",
fresco, forte, reflete
            ["font-size"] = "1em",
))
            color = "#fff",
            ["font-weight"] = "600",
            border = "2px solid #c7a047",
            ["border-left"] = "0"
        }
        :wikitext("Archon Crimsonveil")


    --------------------------------------------------------------------
    -- Layout principal (imagem + texto + stats)
    --------------------------------------------------------------------
    local main = box:tag("div")
        :addClass("boss-main")
        :css{
            display = "flex",
            gap = "20px",
            ["align-items"] = "center",
            ["justify-content"] = "space-between",
            ["flex-wrap"] = "wrap"
        }


    -- Imagem
-----------------------------------------------------------------
    main:tag("div")
-- LOOT TABLE
        :addClass("boss-img-box")
-----------------------------------------------------------------
        :css{ ["flex"] = "none" }
local loot = box:tag("div")
        :wikitext(string.format("[[Arquivo:%s|90px]]", img))
:css{
padding = "18px",
["margin-top"] = "25px",
["border-radius"] = "10px",
background = theme.lootBox
}


    -- Texto
    local textBox = main:tag("div")
        :css{ ["flex"] = "1", ["min-width"] = "200px" }


    textBox:tag("div")
local t = loot:tag("table"):css{ width = "100%" }
        :css{ ["font-size"] = "1.2em", ["font-weight"] = "bold", color = "#e82b2b" }
        :wikitext(nome)


    textBox:tag("div")
        :css{ ["font-size"] = "95%", color = "#eaa85d", ["font-style"] = "italic" }
        :wikitext(string.format('"%s"', frase))


    -- Stats
local function row(label, color, value)
    local stats = main:tag("div")
local tr = t:tag("tr")
        :addClass("boss-stats")
tr:tag("th"):css{ ["text-align"] = "left", color = color, padding = "6px" }:wikitext(label)
        :css{
tr:tag("td"):wikitext(value)
            display = "flex",
end
            ["flex-direction"] = "column",
            ["align-items"] = "flex-end",
            gap = "6px",
            ["min-width"] = "160px"
        }


    local statBox = stats:tag("div")
        :css{
            ["background-color"] = "#222126",
            ["border-radius"] = "8px",
            padding = "12px 20px",
            ["min-width"] = "170px"
        }


    local sline = statBox:tag("div")
row("Comum:", "#f3e8bb", comum)
        :css{
row("Semi-Raro:", "#aeccff", semiraro)
            display = "flex",
row("Raro:", "#e6e5ff", raro)
            ["align-items"] = "center",
row("Muito Raro:", "#f9538f", muitoRaro)
            ["justify-content"] = "center",
            gap = "16px",
            ["flex-wrap"] = "wrap"
        }


    sline:wikitext(string.format('<span style="color:#fb3d3d;font-weight:bold;font-size:1.15em;">&#x2764;&#xFE0F; %s</span>', hp))
    sline:wikitext(string.format('<span style="color:#ffe568;font-weight:bold;font-size:1.08em;">&#x1F4B0; %s</span>', exp))
    sline:wikitext(string.format('<span style="color:#6ca8fb;font-weight:bold;font-size:1.04em;">&#x2694;&#xFE0F; %s</span>', nivel))


    stats:tag("div")
        :css{
            ["margin-top"] = "5px",
            ["font-size"] = "90%",
            color = "#cfccff",
            ["text-align"] = "right"
        }
        :wikitext(string.format(
            "<b>Frescor:</b> %s &nbsp;&nbsp; <b>Forte:</b> %s &nbsp;&nbsp; <b>Reflete:</b> %s",
            fresco, forte, reflete
        ))


    --------------------------------------------------------------------
-- Função principal -------------------------------------------------
    -- Tabela de loot
function p.bossInfo(frame)
    --------------------------------------------------------------------
local args = frame:getParent().args
    local loot = box:tag("div")
local tema = mw.text.trim(args["tema"] or "dark"):lower()
        :css{
if not temas[tema] then tema = "dark" end
            ["margin-top"] = "28px",
            background = "#232329",
            ["border-radius"] = "10px",
            padding = "18px"
        }


    local tableEl = loot:tag("table")
        :css{
            width = "100%",
            color = "#fff",
            ["table-layout"] = "auto"
        }


    local function row(label, color, content)
-- MULTIBOSS: |1= |2= |3=
        local tr = tableEl:tag("tr")
local finalHtml = {}
        tr:tag("th")
            :css{
                ["text-align"] = "left",
                color = color,
                padding = "6px",
                ["font-size"] = "1.07em"
            }
            :wikitext(label)
        tr:tag("td"):wikitext(content)
    end


    row("Comum:",      "#f3e8bb", comum)
    row("Semi-Raro:",  "#aeccff", semiraro)
    row("Raro:",      "#e6e5ff", raro)
    row("Muito Raro:", "#f9538f", muitoRaro)


    return tostring(html)
local count = 0
for k, v in pairs(args) do
if tonumber(k) then
count = count + 1
local subArgs = mw.clone(args)
for subk, subv in mw.text.gsplit(v, ";", true) do end
subArgs.nome = v
table.insert(finalHtml, renderBoss(subArgs, temas[tema]))
end
end
end
if count == 0 then
table.insert(finalHtml, renderBoss(args, temas[tema]))
end
return table.concat(finalHtml, "\n\n")
end


return p
return p

Edição das 21h25min de 22 de novembro de 2025

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

local p = {}


-- caixa de texto
local textBox = main:tag("div"):css{ flex = 1 }


textBox:tag("div")
:css{ ["font-size"] = "1.25em", ["font-weight"] = "bold", color = "#e82b2b" }
:wikitext(nome)


-----------------------------------------------------------------
-- Stats
-----------------------------------------------------------------
local stats = main:tag("div")
:css{
display = "flex",
["flex-direction"] = "column",
gap = "5px",
["min-width"] = "170px"
}


local statBox = stats:tag("div")
:css{
padding = "12px 18px",
["border-radius"] = "8px",
["background-color"] = theme.variantB
}


statBox:wikitext(string.format('<span style="font-size:1.1em; color:#fb3d3d; font-weight:bold;">❤️ %s</span> ', hp))
statBox:wikitext(string.format('<span style="font-size:1.1em; color:#ffe568; font-weight:bold;">💰 %s</span> ', exp))
statBox:wikitext(string.format('<span style="font-size:1.1em; color:#6ca8fb; font-weight:bold;">⚔️ %s</span>', nivel))


stats:tag("div")
:css{ ["font-size"] = "90%" }
:wikitext(string.format(
"<b>Frescor:</b> %s • <b>Forte:</b> %s • <b>Reflete:</b> %s",
fresco, forte, reflete
))


-----------------------------------------------------------------
-- LOOT TABLE
-----------------------------------------------------------------
local loot = box:tag("div")
:css{
padding = "18px",
["margin-top"] = "25px",
["border-radius"] = "10px",
background = theme.lootBox
}


local t = loot:tag("table"):css{ width = "100%" }


local function row(label, color, value)
local tr = t:tag("tr")
tr:tag("th"):css{ ["text-align"] = "left", color = color, padding = "6px" }:wikitext(label)
tr:tag("td"):wikitext(value)
end


row("Comum:", "#f3e8bb", comum)
row("Semi-Raro:", "#aeccff", semiraro)
row("Raro:", "#e6e5ff", raro)
row("Muito Raro:", "#f9538f", muitoRaro)



-- Função principal -------------------------------------------------
function p.bossInfo(frame)
local args = frame:getParent().args
local tema = mw.text.trim(args["tema"] or "dark"):lower()
if not temas[tema] then tema = "dark" end


-- MULTIBOSS: |1= |2= |3=
local finalHtml = {}


local count = 0
for k, v in pairs(args) do
if tonumber(k) then
count = count + 1
local subArgs = mw.clone(args)
for subk, subv in mw.text.gsplit(v, ";", true) do end
subArgs.nome = v
table.insert(finalHtml, renderBoss(subArgs, temas[tema]))
end
end


if count == 0 then
table.insert(finalHtml, renderBoss(args, temas[tema]))
end


return table.concat(finalHtml, "\n\n")
end


return p