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

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


function p.render(frame)
function p.bossInfo(frame)
    -- Pega argumentos com fallback
     local args = frame:getParent().args
     local parent = frame:getParent()
 
     local args = parent and parent.args or frame.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 comum      = g("comum",      "")
    local semiraro  = g("semiraro",  "")
    local raro      = g("raro",      "")
    local muitoRaro  = g("muitoraro",  "")
 
    ----------------------------------------------------
    -- CSS responsivo embutido
    ----------------------------------------------------
    local css = [[
 
]]
 
 
    local html = mw.html.create()
 
    html:wikitext(css)
 
    local box = html:tag("div")
    :addClass("boss-container")
    :css{
        background = "#18181b",
        ["border-radius"] = "12px",
        padding = "30px",
        color = "#fff",
        width = "100%",
        margin = "auto",
        ["font-family"] = "Verdana,sans-serif",
        ["box-sizing"] = "border-box"
    }
 
    ----------------------------------------------------
    -- Cabeçalho
    ----------------------------------------------------
    box:tag("div")
        :css{ ["font-size"] = "1.5em", ["font-weight"] = "bold", ["margin-bottom"] = "10px" }
        :wikitext("Bosses")
 
    local var = box: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("Mecanica Elite")
 
    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("Mecanica Hard")
 
    ----------------------------------------------------
    -- Corpo principal (responsivo)
    ----------------------------------------------------
    local main = box:tag("div")
        :addClass("boss-main")
        :css{
            display = "flex",
            gap = "20px",
            ["align-items"] = "center",
            ["justify-content"] = "space-between",
            ["flex-wrap"] = "wrap"
        }
 
    main:tag("div")
        :addClass("boss-img-box")
        :css{ ["flex"] = "none" }
        :wikitext(string.format("[[Arquivo:%s|90px]]", img))
 
    local textBox = main:tag("div")
        :css{ ["flex"] = "1", ["min-width"] = "200px" }
 
    textBox:tag("div")
        :css{ ["font-size"] = "1.2em", ["font-weight"] = "bold", color = "#e82b2b" }
        :wikitext(nome)


     local imagem    = args.imagem or ""
     textBox:tag("div")
    local selo      = args.selo or ""
        :css{ ["font-size"] = "95%", color = "#eaa85d", ["font-style"] = "italic" }
    local tag      = args.tag or "NOVO"
        :wikitext(string.format('"%s"', frase))
    local titulo    = args.titulo or "Título"
    local subtitulo = args.subtitulo or "Capítulo"
    local data      = args.data or "Hoje"
    local botao    = args.botao or "Ler agora"
    local link      = args.link or "#"


     -- Estilos prontos para reuso
     ----------------------------------------------------
     local containerStyle = table.concat({
    -- Stats
        "position:relative;",
    ----------------------------------------------------
         "width:216px;height:292px;",
     local stats = main:tag("div")
         "border-radius:14px;",
         :addClass("boss-stats")
        "overflow:hidden;",
         :css{
        "font-family:Inter,Segoe UI,Roboto,Arial,sans-serif;",
            display = "flex",
        "color:#fff;",
            ["flex-direction"] = "column",
        "box-shadow:0 6px 18px rgba(0,0,0,.35);",
            ["align-items"] = "flex-end",
        (imagem ~= "" and "background:#111 url(" .. mw.uri.encode(mw.title.makeTitle("File", imagem).fullUrl) .. ") center/cover no-repeat;" or "background:#111;")
            gap = "6px",
    })
            ["min-width"] = "160px"
        }


     local topBarStyle = "position:absolute;top:8px;left:8px;right:8px;display:flex;align-items:center;"
     local statBox = stats:tag("div")
    local chipStyle = "background:rgba(0,0,0,.55);padding:4px 8px;border-radius:999px;font-weight:700;font-size:12px;margin-right:6px;"
        :css{
    local chipNovoStyle = "background:#25c36a;color:#0b2c1a;padding:4px 8px;border-radius:999px;font-weight:900;font-size:12px;margin-left:auto;"
            ["background-color"] = "#222126",
    local gradientStyle = "position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,0.05)0%,rgba(0,0,0,0.6)55%,rgba(0,0,0,0.85)100%);"
            ["border-radius"] = "8px",
    local textStyle = "position:absolute;left:12px;right:12px;bottom:70px;"
            padding = "12px 20px",
    local titleStyle = "font-size:16px;font-weight:800;"
            ["min-width"] = "170px"
    local subtitleStyle = "font-size:13px;margin-top:4px;"
        }
    local dateStyle = "font-size:11px;margin-top:2px;opacity:.85;"
    local buttonStyle = "position:absolute;left:12px;right:12px;bottom:14px;display:block;text-align:center;padding:10px 12px;background:#1f8b4c;color:#eafff3;font-weight:800;font-size:14px;text-decoration:none;border-radius:10px;"


    -- Monta HTML
     local sline = statBox:tag("div")
     local html = mw.html.create("div")
         :css{
         :cssText(containerStyle)
            display = "flex",
            ["align-items"] = "center",
            ["justify-content"] = "center",
            gap = "16px",
            ["flex-wrap"] = "wrap"
        }


     local top = html:tag("div"):cssText(topBarStyle)
     sline:wikitext(string.format('<span style="color:#fb3d3d;font-weight:bold;font-size:1.15em;">&#x2764;&#xFE0F; %s</span>', hp))
     if selo ~= "" then
    sline:wikitext(string.format('<span style="color:#ffe568;font-weight:bold;font-size:1.08em;">&#x1F4B0; %s</span>', exp))
        top:tag("div"):cssText(chipStyle):wikitext(selo)
     sline:wikitext(string.format('<span style="color:#6ca8fb;font-weight:bold;font-size:1.04em;">&#x2694;&#xFE0F; %s</span>', nivel))
     end
 
     if tag ~= "" then
    stats:tag("div")
         top:tag("div"):cssText(chipNovoStyle):wikitext(tag)
        :css{
    end
            ["margin-top"] = "5px",
            ["font-size"] = "90%",
            color = "#cfccff",
            ["text-align"] = "right"
        }
        :wikitext(string.format(
            "<b>Necessario:</b> %s &nbsp;&nbsp; ",
            necessario, forte, reflete
        ))
 
    ----------------------------------------------------
 
     -- Espaço livre para conteúdo customizável do editor
 
     ----------------------------------------------------
 
    local conteudo = box:tag("div")
 
         :addClass("boss-custom-content")
 
        :css{
 
            ["margin-top"] = "28px",
 
            background = "#232329",
 
            ["border-radius"] = "10px",
 
            padding = "18px",
 
            ["min-height"] = "40px"
 
        }
 
        :wikitext(g("conteudo", "")) -- permite o uso de |conteudo= na predefinição


    html:tag("div"):cssText(gradientStyle)


    local text = html:tag("div"):cssText(textStyle)
    text:tag("div"):cssText(titleStyle):wikitext(titulo)
    text:tag("div"):cssText(subtitleStyle):wikitext(subtitulo)
    text:tag("div"):cssText(dateStyle):wikitext(data)


    html:tag("a")
        :attr("href", link)
        :cssText(buttonStyle)
        :wikitext(botao)


     return tostring(html)
     return tostring(html)end
end


return p
return p

Edição atual tal como às 18h27min de 5 de dezembro de 2025

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

-- Módulo:BossDisplay (responsivo)

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 comum      = g("comum",      "")
    local semiraro   = g("semiraro",   "")
    local raro       = g("raro",       "")
    local muitoRaro  = g("muitoraro",  "")

    ----------------------------------------------------
    -- CSS responsivo embutido
    ----------------------------------------------------
    local css = [[

]]


    local html = mw.html.create()

    html:wikitext(css)

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

    ----------------------------------------------------
    -- Cabeçalho
    ----------------------------------------------------
    box:tag("div")
        :css{ ["font-size"] = "1.5em", ["font-weight"] = "bold", ["margin-bottom"] = "10px" }
        :wikitext("Bosses")

    local var = box: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("Mecanica Elite")

    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("Mecanica Hard")

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

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

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

    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")
        :addClass("boss-stats")
        :css{
            display = "flex",
            ["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")
        :css{
            display = "flex",
            ["align-items"] = "center",
            ["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>Necessario:</b> %s &nbsp;&nbsp; ",
            necessario, forte, reflete
        ))

    ----------------------------------------------------

    -- Espaço livre para conteúdo customizável do editor

    ----------------------------------------------------

    local conteudo = box:tag("div")

        :addClass("boss-custom-content")

        :css{

            ["margin-top"] = "28px",

            background = "#232329",

            ["border-radius"] = "10px",

            padding = "18px",

            ["min-height"] = "40px"

        }

        :wikitext(g("conteudo", ""))  -- permite o uso de |conteudo= na predefinição




    return tostring(html)end

return p