Módulo:Gb

De Wiki Gla
Revisão de 04h04min de 27 de agosto de 2025 por GhoulBlack (discussão | contribs)
Ir para navegação Ir para pesquisar

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

local p = {}

function p.render(frame)
    -- Pega argumentos com fallback
    local parent = frame:getParent()
    local args = parent and parent.args or frame.args

    local imagem    = args.imagem or ""
    local selo      = args.selo or ""
    local tag       = args.tag or "NOVO"
    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({
        "position:relative;",
        "width:216px;height:292px;",
        "border-radius:14px;",
        "overflow:hidden;",
        "font-family:Inter,Segoe UI,Roboto,Arial,sans-serif;",
        "color:#fff;",
        "box-shadow:0 6px 18px rgba(0,0,0,.35);",
        (imagem ~= "" and "background:#111 url(" .. mw.uri.encode(mw.title.makeTitle("File", imagem).fullUrl) .. ") center/cover no-repeat;" or "background:#111;")
    })

    local topBarStyle = "position:absolute;top:8px;left:8px;right:8px;display:flex;align-items:center;"
    local chipStyle = "background:rgba(0,0,0,.55);padding:4px 8px;border-radius:999px;font-weight:700;font-size:12px;margin-right:6px;"
    local chipNovoStyle = "background:#25c36a;color:#0b2c1a;padding:4px 8px;border-radius:999px;font-weight:900;font-size:12px;margin-left:auto;"
    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%);"
    local textStyle = "position:absolute;left:12px;right:12px;bottom:70px;"
    local titleStyle = "font-size:16px;font-weight:800;"
    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 html = mw.html.create("div")
        :cssText(containerStyle)

    local top = html:tag("div"):cssText(topBarStyle)
    if selo ~= "" then
        top:tag("div"):cssText(chipStyle):wikitext(selo)
    end
    if tag ~= "" then
        top:tag("div"):cssText(chipNovoStyle):wikitext(tag)
    end

    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)
end

return p