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

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 6: Linha 6:


     local function g(k, default)
     local function g(k, default)
         local v = mw.text.trim(args[k] or "")
         return mw.text.trim(args[k] or "") ~= "" and args[k] or default
        return v ~= "" and v or default
     end
     end


     -- Dados gerais
     local img        = g("img",        "Placeholder.png")
     local nome1     = g("nome1", "Forma 1")
    local nome      = g("nome",      "Nome do Boss")
     local nome2     = g("nome2", "Forma 2")
    local frase      = g("frase",      "Frase ou lema do boss.")
    local hp        = g("hp",        "???")
    local exp        = g("exp",        "???")
    local nivel      = g("nivel",      "???")
    local necessario    = g("necessario",    "-")
    local forte      = g("forte",      "-")
    local reflete    = g("reflete",  "-")
     local normal     = g("normal",     "")
     local elite  = g("elite",  "")
    local hard      = g("hard",     "")
    local extra  = g("extra", "")


     local img        = g("img", "Placeholder.png")
     local html = mw.html.create("div")
     local nome      = g("nome", "Nome do Boss")
        :addClass("boss-container")
     local frase      = g("frase", "Frase ou lema do boss.")
        :css{
            background = "#18181b",
            ["border-radius"] = "12px",
            padding = "30px",
            color = "#fff",
            width = "700px",
            margin = "auto",
            ["font-family"] = "Verdana,sans-serif"
        }
 
    -- Título
    html:tag("div")
        :css("font-size", "1.5em")
        :css("font-weight", "bold")
        :css("margin-bottom", "10px")
        :wikitext("Bosses")
 
    -- Variantes
     local var = html:tag("div")
        :css("margin-bottom", "24px")
 
    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")
        :css{
            ["background-color"] = "#19171c",
            ["border-radius"] = "0 7px 7px 0",
            padding = "7px 20px",
            ["font-size"] = "1em",
            color = "#fff",
            ["font-weight"] = "600",
            border = "2px solid #c7a047",
            ["border-left"] = "0"
        }
        :wikitext("Archon Crimsonveil")
 
    -- Container principal
     local main = html:tag("div")
        :css{
            display = "flex",
            ["align-items"] = "center"
        }


     local hp        = g("hp", "???")
     -- Imagem
    local exp        = g("exp", "???")
    main:tag("div")
    local nivel      = g("nivel", "???")
        :css{ width = "110px", flex = "none" }
        :wikitext(string.format("[[Arquivo:%s|90x90px]]", img))


     local necessario = g("necessario", "-")
    -- Nome + frase
     local textBox = main:tag("div")


     -- Loot (agora 3 categorias)
     textBox:tag("div")
    local dropNormal = g("normal", "")
        :css{ ["font-size"] = "1.2em", ["font-weight"] = "bold", color = "#e82b2b" }
    local dropElite  = g("elite", "")
        :wikitext(nome)
    local dropHard  = g("hard", "")


     -- Montagem HTML
     textBox:tag("div")
    local html = mw.html.create("div")
        :css{ ["font-size"] = "95%", color = "#eaa85d", ["font-style"] = "italic" }
    html:addClass("bossbox")
        :wikitext(string.format('"%s"', frase))
    html:wikitext([[
 
<style>
     -- Stats
.bossbox {
     local stats = main:tag("div")
    background:#18181b;
        :css{
    border-radius:12px;
            ["margin-left"] = "auto",
    padding:20px;
            display = "flex",
    color:#fff;
            ["flex-direction"] = "column",
    max-width:700px;
            ["align-items"] = "flex-end",
    margin:auto;
            gap = "6px"
    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)
     local statBox = stats:tag("div")
    html:wikitext('<div class="boss-tabs">')
        :css{
    html:wikitext(string.format('<a href="#form1" class="boss-tab"> %s </a>', nome1))
            ["background-color"] = "#222126",
    html:wikitext(string.format('<a href="#form2" class="boss-tab"> %s </a>', nome2))
            ["border-radius"] = "8px",
    html:wikitext('</div>')
            padding = "12px 20px",
            ["min-width"] = "170px"
        }


    -- CONTAINER PRINCIPAL
     local sline = statBox:tag("div")
     local main = html:tag("div"):addClass("boss-main")
        :css{
            display = "flex",
            ["align-items"] = "center",
            gap = "18px"
        }


     -- IMAGEM
     sline:tag("span")
    main:tag("div"):addClass("boss-left")
        :attr("title", "HP")
         :wikitext(string.format("[[Arquivo:%s|120px]]", img))
        :css{ color = "#fb3d3d", ["font-weight"] = "bold" }
         :wikitext(string.format('<span style="font-size:1.15em;">&#x2764;&#xFE0F; %s</span>', hp))


     -- DADOS DO BOSS
     sline:tag("span")
    local info = main:tag("div")
        :attr("title", "EXP")
        :css{ color = "#ffe568", ["font-weight"] = "bold" }
        :wikitext(string.format('<span style="font-size:1.08em;">&#x1F4B0; %s</span>', exp))


     info:tag("div")
     sline:tag("span")
         :css{["font-size"]="1.4em",["font-weight"]="bold",color="#e82b2b"}
        :attr("title", "Nível")
         :wikitext(nome)
         :css{ color = "#6ca8fb", ["font-weight"] = "bold" }
         :wikitext(string.format('<span style="font-size:1.04em;">&#x2694;&#xFE0F; %s</span>', nivel))


     info:tag("div")
     -- Frescor / forte / reflete
         :css{["font-size"]="95%",color="#eaa85d",["font-style"]="italic"}
    local infoLine = stats:tag("div")
        :wikitext('"'..frase..'"')
         :css{
            ["margin-top"] = "5px",
            ["font-size"] = "90%",
            color = "#cfccff"
        }


     -- STATS
     infoLine:wikitext(string.format("<b>Necessario:</b> %s ", fresco))
    local statbox = info:tag("div"):addClass("boss-stats-box")
     infoLine:wikitext(string.format('<span style="margin-left:12px;"><b>Forte:</b> %s</span>', forte))
     statbox:wikitext(string.format(
    infoLine:wikitext(string.format('<span style="margin-left:12px;"><b>Reflete:</b> %s</span>', reflete))
        '<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
     -- Loot table
     info:tag("div")
     local loot = html:tag("div")
         :css{["margin-top"]="8px",["font-size"]="90%",color="#cfccff"}
         :css{
         :wikitext('<b>Necessário:</b> ' .. necessario)
            ["margin-top"] = "28px",
            background = "#232329",
            ["border-radius"] = "10px",
            padding = "18px"
         }


    -- LOOT TABLE
     local tableEl = loot:tag("table")
     local loot = html:tag("div"):addClass("boss-loot")
         :css{
    loot:tag("div")
            width = "100%",
         :css{["font-size"]="1.2em","margin-bottom","10px",color="#f3e8bb"}
            color = "#fff",
         :wikitext("Drops")
            ["table-layout"] = "auto"
         }


     local function addRow(title, color, content)
     local function row(label, color, content)
         if content ~= "" then
         local tr = tableEl:tag("tr")
            loot:tag("div")
        tr:tag("th")
                :css{color=color,["margin-top"]="6px"}
            :css{
                :wikitext(string.format("<b>%s</b>: %s", title, content))
                ["text-align"] = "left",
        end
                color = color,
                padding = "6px",
                ["font-size"] = "1.07em"
            }
            :wikitext(label)
        tr:tag("td"):wikitext(content)
     end
     end


     addRow("Normal", "#f3e8bb", dropNormal)
     row("Normal:",     "#f3e8bb", normal)
     addRow("Elite",  "#aeccff", dropElite)
     row("Elite:",  "#aeccff", elite)
     addRow("Hard",   "#f9538f", dropHard)
     row("Hard:",      "#e6e5ff", hard)
    row("Extra:", "#f9538f", extra)


     return tostring(html)
     return tostring(html)

Edição das 20h46min de 22 de novembro de 2025

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

-- Módulo:BossDisplay
local p = {}

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

    local function g(k, default)
        return mw.text.trim(args[k] or "") ~= "" and args[k] or default
    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 necessario     = g("necessario",     "-")
    local forte      = g("forte",      "-")
    local reflete     = g("reflete",   "-")
    local normal      = g("normal",     "")
    local elite   = g("elite",  "")
    local hard       = g("hard",      "")
    local extra  = g("extra", "")

    local html = mw.html.create("div")
        :addClass("boss-container")
        :css{
            background = "#18181b",
            ["border-radius"] = "12px",
            padding = "30px",
            color = "#fff",
            width = "700px",
            margin = "auto",
            ["font-family"] = "Verdana,sans-serif"
        }

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

    -- Variantes
    local var = html:tag("div")
        :css("margin-bottom", "24px")

    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")
        :css{
            ["background-color"] = "#19171c",
            ["border-radius"] = "0 7px 7px 0",
            padding = "7px 20px",
            ["font-size"] = "1em",
            color = "#fff",
            ["font-weight"] = "600",
            border = "2px solid #c7a047",
            ["border-left"] = "0"
        }
        :wikitext("Archon Crimsonveil")

    -- Container principal
    local main = html:tag("div")
        :css{
            display = "flex",
            ["align-items"] = "center"
        }

    -- Imagem
    main:tag("div")
        :css{ width = "110px", flex = "none" }
        :wikitext(string.format("[[Arquivo:%s|90x90px]]", img))

    -- Nome + frase
    local textBox = main:tag("div")

    textBox:tag("div")
        :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 stats = main:tag("div")
        :css{
            ["margin-left"] = "auto",
            display = "flex",
            ["flex-direction"] = "column",
            ["align-items"] = "flex-end",
            gap = "6px"
        }

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

    local sline = statBox:tag("div")
        :css{
            display = "flex",
            ["align-items"] = "center",
            gap = "18px"
        }

    sline:tag("span")
        :attr("title", "HP")
        :css{ color = "#fb3d3d", ["font-weight"] = "bold" }
        :wikitext(string.format('<span style="font-size:1.15em;">&#x2764;&#xFE0F; %s</span>', hp))

    sline:tag("span")
        :attr("title", "EXP")
        :css{ color = "#ffe568", ["font-weight"] = "bold" }
        :wikitext(string.format('<span style="font-size:1.08em;">&#x1F4B0; %s</span>', exp))

    sline:tag("span")
        :attr("title", "Nível")
        :css{ color = "#6ca8fb", ["font-weight"] = "bold" }
        :wikitext(string.format('<span style="font-size:1.04em;">&#x2694;&#xFE0F; %s</span>', nivel))

    -- Frescor / forte / reflete
    local infoLine = stats:tag("div")
        :css{
            ["margin-top"] = "5px",
            ["font-size"] = "90%",
            color = "#cfccff"
        }

    infoLine:wikitext(string.format("<b>Necessario:</b> %s ", fresco))
    infoLine:wikitext(string.format('<span style="margin-left:12px;"><b>Forte:</b> %s</span>', forte))
    infoLine:wikitext(string.format('<span style="margin-left:12px;"><b>Reflete:</b> %s</span>', reflete))

    -- Loot table
    local loot = html:tag("div")
        :css{
            ["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)
        local tr = tableEl:tag("tr")
        tr:tag("th")
            :css{
                ["text-align"] = "left",
                color = color,
                padding = "6px",
                ["font-size"] = "1.07em"
            }
            :wikitext(label)
        tr:tag("td"):wikitext(content)
    end

    row("Normal:",      "#f3e8bb", normal)
    row("Elite:",  "#aeccff", elite)
    row("Hard:",       "#e6e5ff", hard)
    row("Extra:", "#f9538f", extra)

    return tostring(html)
end

return p