Módulo:Lari1

De Wiki Gla
Revisão de 02h59min de 17 de março de 2026 por Larifk (discussão | contribs) (Criou página com 'local p = {} function p.render(frame) local args = frame:getParent().args local nome = mw.text.trim(args['nome'] or '') local root = mw.html.create('div'):attr('...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

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

local p = {}

function p.render(frame)
    local args = frame:getParent().args
    local nome = mw.text.trim(args['nome'] or '')

    local root = mw.html.create('div'):attr('class', 'sv-wrap')

    -- botão de tema
    root:tag('span'):attr('class', 'tema-btn'):wikitext('☾ Dark')

    -- título
    if nome ~= '' then
        root:tag('div'):attr('class', 'sv-titulo'):wikitext(nome)
    end

    -- coleta skills
    local skills = {}
    local i = 1
    while true do
        local titulo = mw.text.trim(args['skill' .. i .. 'titulo'] or '')
        if titulo == '' then break end
        skills[#skills + 1] = i
        i = i + 1
    end

    if #skills == 0 then return tostring(root) end

    -- container principal
    local box = root:tag('div'):attr('class', 'sv-box')

    -- barra de tabs
    local tabbar = box:tag('div'):attr('class', 'sv-tabs')
    for idx, n in ipairs(skills) do
        local img = mw.text.trim(args['skill' .. n .. 'img'] or '')
        local tab = tabbar:tag('span')
            :attr('class', idx == 1 and 'sv-tab active' or 'sv-tab')
            :attr('data-skill', tostring(n))
        if img ~= '' then
            tab:node(mw.html.create(''):wikitext('[[File:' .. img .. '|32px|link=]]'))
        else
            tab:wikitext(tostring(n))
        end
    end

    -- painéis de cada skill
    for idx, n in ipairs(skills) do
        local px      = 'skill' .. n
        local titulo  = mw.text.trim(args[px .. 'titulo']  or '')
        local youtube = mw.text.trim(args[px .. 'youtube'] or '')
        local video   = mw.text.trim(args[px .. 'video']   or '')

        local panel = box:tag('div')
            :attr('class', idx == 1 and 'sv-panel active' or 'sv-panel')
            :attr('data-panel', tostring(n))

        -- título da skill
        panel:tag('h2'):attr('class', 'sv-skill-titulo'):wikitext(titulo)

        -- descrições
        local descsec = panel:tag('div'):attr('class', 'sv-desc')
        local j = 1
        while true do
            local desc = mw.text.trim(args[px .. 'desc' .. j] or '')
            if desc == '' then break end
            descsec:tag('p'):wikitext(desc)
            j = j + 1
        end

        -- mídia
        if youtube ~= '' then
            local media = panel:tag('div'):attr('class', 'sv-media')
            media:attr('data-youtube', youtube)
        elseif video ~= '' then
            local media = panel:tag('div'):attr('class', 'sv-media')
            local url = mw.title.new('Especial:FilePath/' .. video)
            media:tag('video')
                :attr('src', tostring(url))
                :attr('controls', '')
                :attr('loop', '')
                :attr('muted', '')
                :wikitext('')
        end
    end

    return tostring(root)
end

return p