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

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 44: Linha 44:
         local tipo  = mw.text.trim(args[px .. 'tipo']  or '')
         local tipo  = mw.text.trim(args[px .. 'tipo']  or '')
         local video  = mw.text.trim(args[px .. 'video']  or '')
         local video  = mw.text.trim(args[px .. 'video']  or '')
         local imagem = mw.text.trim(args[px .. 'imagem'] or '')
         local rota  = mw.text.trim(args[px .. 'rota']   or '')
        local bauImg = BAU_IMAGENS[tipo] or ''


         local panel = root:tag('div')
         local panel = root:tag('div')
Linha 51: Linha 50:
             :attr('data-panel', 'b' .. n)
             :attr('data-panel', 'b' .. n)


         local left = panel:tag('div'):attr('class', 'lk-left')
         -- recompensas
        local baubox = left:tag('div'):attr('class', 'lk-bau-box')
         local rsec = panel:tag('div')
        if bauImg ~= '' then
            baubox:node(mw.html.create(''):wikitext('[[File:' .. bauImg .. '|64px|link=]]'))
        end
        left:tag('span'):attr('class', 'lk-badge ' .. tipo):wikitext(tipo)
 
         local right = panel:tag('div'):attr('class', 'lk-right')
 
        local rsec = right:tag('div')
         rsec:tag('div'):attr('class', 'lk-slabel'):wikitext('Recompensas')
         rsec:tag('div'):attr('class', 'lk-slabel'):wikitext('Recompensas')
         local grid = rsec:tag('div'):attr('class', 'lk-rewards')
         local grid = rsec:tag('div'):attr('class', 'lk-rewards')
Linha 87: Linha 78:
         end
         end


         if video ~= '' or imagem ~= '' then
        -- como chegar
             right:tag('div'):attr('class', 'lk-divider')
         if video ~= '' or rota ~= '' then
             local msec = right:tag('div')
             panel:tag('div'):attr('class', 'lk-divider')
             msec:tag('div'):attr('class', 'lk-slabel'):wikitext('Como chegar')
             local csec = panel:tag('div')
             local mwrap = msec:tag('div'):attr('class', 'lk-media-wrap')
             csec:tag('div'):attr('class', 'lk-slabel'):wikitext('Como chegar')
 
             local ctabs = csec:tag('div'):attr('class', 'lk-ctabs')
            if video ~= '' then
                ctabs:tag('span')
                    :attr('class', rota ~= '' and 'lk-ctab active' or 'lk-ctab active')
                    :attr('data-ctab', 'v' .. n)
                    :wikitext('Vídeo')
            end
            if rota ~= '' then
                ctabs:tag('span')
                    :attr('class', video ~= '' and 'lk-ctab' or 'lk-ctab active')
                    :attr('data-ctab', 'r' .. n)
                    :wikitext('Imagem')
            end
 
            -- painel video
             if video ~= '' then
             if video ~= '' then
                local vpanel = csec:tag('div')
                    :attr('class', 'lk-cpanel active')
                    :attr('data-cpanel', 'v' .. n)
                local mwrap = vpanel:tag('div'):attr('class', 'lk-media-wrap')
                 mwrap:attr('data-video', video)
                 mwrap:attr('data-video', video)
             else
             end
                 mwrap:tag('img'):attr('src', imagem):attr('alt', 'como chegar')
 
            -- painel imagens/slider
            if rota ~= '' then
                 local rpanel = csec:tag('div')
                    :attr('class', video ~= '' and 'lk-cpanel' or 'lk-cpanel active')
                    :attr('data-cpanel', 'r' .. n)
 
                local slider = rpanel:tag('div'):attr('class', 'lk-slider')
                local track  = slider:tag('div'):attr('class', 'lk-slider-track')
 
                local imgs = mw.text.split(rota, '%s*,%s*')
                for _, imgname in ipairs(imgs) do
                    imgname = mw.text.trim(imgname)
                    if imgname ~= '' then
                        local slide = track:tag('div'):attr('class', 'lk-slide')
                        slide:node(mw.html.create(''):wikitext('[[File:' .. imgname .. '|link=]]'))
                    end
                end
 
                local total = #imgs
                if total > 1 then
                    slider:tag('button')
                        :attr('class', 'lk-slide-btn lk-slide-prev')
                        :attr('aria-label', 'anterior')
                        :wikitext('‹')
                    slider:tag('button')
                        :attr('class', 'lk-slide-btn lk-slide-next')
                        :attr('aria-label', 'próximo')
                        :wikitext('›')
                    slider:tag('div')
                        :attr('class', 'lk-slide-counter')
                        :attr('data-total', tostring(total))
                        :wikitext('1 / ' .. total)
                end
             end
             end
         end
         end

Edição das 20h36min de 16 de março de 2026

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

local p = {}

local BAU_IMAGENS = {
    comum = 'CommonChest.png',
    ouro  = 'GoldChest.png'
}

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', 'lk-wrap')

    if nome ~= '' then
        root:tag('div'):attr('class', 'lk-titulo'):wikitext(nome)
    end

    local baus = {}
    local i = 1
    while true do
        local tipo = mw.text.trim(args['bau' .. i .. 'tipo'] or '')
        if tipo == '' then break end
        baus[#baus + 1] = i
        i = i + 1
    end

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

    local tabs = root:tag('div'):attr('class', 'lk-tabs')
    for idx, n in ipairs(baus) do
        local tipo   = mw.text.trim(args['bau' .. n .. 'tipo'] or '')
        local tabImg = BAU_IMAGENS[tipo] or ''
        local tab = tabs:tag('span')
            :attr('class', idx == 1 and 'lk-tab active' or 'lk-tab')
            :attr('data-tab', 'b' .. n)
        if tabImg ~= '' then
            tab:node(mw.html.create(''):wikitext('[[File:' .. tabImg .. '|20px|link=]]'))
        end
        tab:tag('span'):wikitext('Baú ' .. string.format('%02d', n))
    end

    for idx, n in ipairs(baus) do
        local px     = 'bau' .. n
        local tipo   = mw.text.trim(args[px .. 'tipo']   or '')
        local video  = mw.text.trim(args[px .. 'video']  or '')
        local rota   = mw.text.trim(args[px .. 'rota']   or '')

        local panel = root:tag('div')
            :attr('class', idx == 1 and 'lk-panel active' or 'lk-panel')
            :attr('data-panel', 'b' .. n)

        -- recompensas
        local rsec = panel:tag('div')
        rsec:tag('div'):attr('class', 'lk-slabel'):wikitext('Recompensas')
        local grid = rsec:tag('div'):attr('class', 'lk-rewards')

        local j = 1
        while true do
            local qty  = mw.text.trim(args[px .. 'reward'    .. j] or '')
            local rimg = mw.text.trim(args[px .. 'rewardimg' .. j] or '')
            if qty == '' and rimg == '' then break end
            local item   = grid:tag('div'):attr('class', 'lk-reward')
            local sprite = item:tag('div'):attr('class', 'lk-rsprite')
            if rimg ~= '' then
                sprite:node(mw.html.create(''):wikitext('[[File:' .. rimg .. '|36px|link=]]'))
            end
            if qty ~= '' then
                local num, sufixo = qty:match('^(%d+)(.*)')
                if num then
                    local qspan = item:tag('span'):attr('class', 'lk-rqty')
                    qspan:tag('span'):attr('class', 'lk-rqty-num'):wikitext(num)
                    qspan:tag('span'):attr('class', 'lk-rqty-x'):wikitext(sufixo ~= '' and sufixo or 'x')
                else
                    item:tag('span'):attr('class', 'lk-rqty'):wikitext(qty)
                end
            end
            j = j + 1
        end

        -- como chegar
        if video ~= '' or rota ~= '' then
            panel:tag('div'):attr('class', 'lk-divider')
            local csec = panel:tag('div')
            csec:tag('div'):attr('class', 'lk-slabel'):wikitext('Como chegar')

            local ctabs = csec:tag('div'):attr('class', 'lk-ctabs')
            if video ~= '' then
                ctabs:tag('span')
                    :attr('class', rota ~= '' and 'lk-ctab active' or 'lk-ctab active')
                    :attr('data-ctab', 'v' .. n)
                    :wikitext('Vídeo')
            end
            if rota ~= '' then
                ctabs:tag('span')
                    :attr('class', video ~= '' and 'lk-ctab' or 'lk-ctab active')
                    :attr('data-ctab', 'r' .. n)
                    :wikitext('Imagem')
            end

            -- painel video
            if video ~= '' then
                local vpanel = csec:tag('div')
                    :attr('class', 'lk-cpanel active')
                    :attr('data-cpanel', 'v' .. n)
                local mwrap = vpanel:tag('div'):attr('class', 'lk-media-wrap')
                mwrap:attr('data-video', video)
            end

            -- painel imagens/slider
            if rota ~= '' then
                local rpanel = csec:tag('div')
                    :attr('class', video ~= '' and 'lk-cpanel' or 'lk-cpanel active')
                    :attr('data-cpanel', 'r' .. n)

                local slider = rpanel:tag('div'):attr('class', 'lk-slider')
                local track  = slider:tag('div'):attr('class', 'lk-slider-track')

                local imgs = mw.text.split(rota, '%s*,%s*')
                for _, imgname in ipairs(imgs) do
                    imgname = mw.text.trim(imgname)
                    if imgname ~= '' then
                        local slide = track:tag('div'):attr('class', 'lk-slide')
                        slide:node(mw.html.create(''):wikitext('[[File:' .. imgname .. '|link=]]'))
                    end
                end

                local total = #imgs
                if total > 1 then
                    slider:tag('button')
                        :attr('class', 'lk-slide-btn lk-slide-prev')
                        :attr('aria-label', 'anterior')
                        :wikitext('‹')
                    slider:tag('button')
                        :attr('class', 'lk-slide-btn lk-slide-next')
                        :attr('aria-label', 'próximo')
                        :wikitext('›')
                    slider:tag('div')
                        :attr('class', 'lk-slide-counter')
                        :attr('data-total', tostring(total))
                        :wikitext('1 / ' .. total)
                end
            end
        end
    end

    return tostring(root)
end

return p