Módulo:Droflax

De Wiki Gla
Revisão de 15h51min de 20 de julho de 2025 por Droflax (discussão | contribs)
Ir para navegação Ir para pesquisar

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

local p = {}

function p.render(frame)
    local args = frame:getParent().args
    
    -- Datos básicos
    local nome = args.nome or ''
    local tier = args.tier or ''
    local classe = args.classe or ''
    local image = args.image or ''
    
    -- Procesar habilidades
    local habilidades = {}
    for i = 1, 21 do
        local hab = {
            nome = args['hab' .. i .. '-nome'],
            icon = args['hab' .. i .. '-icon'],
            level = args['hab' .. i .. '-level'],
            desc = args['hab' .. i .. '-desc'],
            atr = args['hab' .. i .. '-atr'],
            video = args['hab' .. i .. '-video']
        }
        if hab.nome and hab.nome ~= '' then
            table.insert(habilidades, hab)
        end
    end
    
    -- Procesar skins
    local skins = {}
    for i = 1, 11 do
        local skin = {
            image = args['skin' .. i .. '-image'],
            banner = args['skin' .. i .. '-banner'],
            tooltip = args['skin' .. i .. '-tooltip']
        }
        if skin.image and skin.image ~= '' then
            table.insert(skins, skin)
        end
    end
    
    -- Generar HTML
    local html = mw.html.create('div')
        :addClass('personaje-box')
        :attr('id', 'personaje-' .. mw.uri.encode(nome))
    
    -- Header
    local header = html:tag('div'):addClass('personaje-header')
    
    local topbar = header:tag('div'):addClass('personaje-topbar')
    local nomeBox = topbar:tag('div'):addClass('personaje-nome-box')
    
    nomeBox:tag('img')
        :attr('src', '/images/6/63/Franky_ts_medal.png')
        :addClass('topbar-icon')
    
    local nomeCategory = nomeBox:tag('div'):addClass('personaje-nome-category')
    nomeCategory:tag('div'):addClass('nome'):wikitext(nome)
    nomeCategory:tag('div'):addClass('classes'):wikitext(classe)
    
    header:tag('div')
        :addClass('topbar-description')
        :wikitext(nome .. ' (' .. tier .. ') é um personagem do tier ' .. tier:lower() .. '.')
    
    -- Tabs
    local tabs = header:tag('div'):addClass('personaje-tabs')
    tabs:tag('button')
        :addClass('tab-btn')
        :attr('data-tab', 'arma')
        :wikitext('Arma')
    tabs:tag('button')
        :addClass('tab-btn active')
        :attr('data-tab', 'habilidades')
        :wikitext('Habilidades')
    tabs:tag('button')
        :addClass('tab-btn')
        :attr('data-tab', 'skins')
        :wikitext('Skins')
    
    -- Imagen del personaje
    html:tag('img')
        :addClass('art-personaje')
        :attr('src', image)
        :attr('alt', 'Arte del personaje')
    
    -- Tab content: Habilidades
    local habContent = html:tag('div')
        :addClass('tab-content active')
        :attr('id', 'habilidades')
    
    -- Contenedor de cuadros (iconos de habilidades)
    local cuadrosContainer = habContent:tag('div'):addClass('cuadros-container')
    for i, hab in ipairs(habilidades) do
        cuadrosContainer:tag('div')
            :addClass('cuadro')
            :attr('data-hab-index', i)
            :attr('title', hab.nome)
            :tag('img')
                :attr('src', hab.icon)
                :attr('alt', hab.nome)
                :css('width', '100%')
                :css('height', '100%')
                :css('object-fit', 'cover')
    end
    
    local habContainer = habContent:tag('div'):addClass('habilidades-container')
    
    -- Detalles de habilidad
    local habDetails = habContainer:tag('div'):addClass('habilidades-details')
    habDetails:tag('div'):addClass('descripcion-container')
    
    -- Video container
    habContainer:tag('div'):addClass('video-container')
    
    -- Tab content: Skins
    local skinsContent = html:tag('div')
        :addClass('tab-content')
        :attr('id', 'skins')
    
    local cardSkins = skinsContent:tag('div'):addClass('card-skins')
    cardSkins:tag('span')
        :addClass('card-skins-title')
        :wikitext('SKINS & SPOTLIGHTS')
    
    local carouselWrapper = cardSkins:tag('div'):addClass('skins-carousel-wrapper')
    carouselWrapper:tag('button')
        :addClass('skins-arrow left')
        :wikitext('«')
    
    local carousel = carouselWrapper:tag('div'):addClass('skins-carousel')
    for i, skin in ipairs(skins) do
        local skinCard = carousel:tag('div'):addClass('skin-card')
        skinCard:tag('img')
            :addClass('skins--imageBanner')
            :attr('src', skin.banner)
            :attr('alt', 'banner')
        skinCard:tag('img')
            :addClass('skins--imageSkin')
            :attr('src', skin.image)
            :attr('alt', 'skin')
    end
    
    carouselWrapper:tag('button')
        :addClass('skins-arrow right')
        :wikitext('»')
    
    -- Datos para el widget (JSON en data attributes)
    local dataContainer = html:tag('script')
        :attr('type', 'application/json')
        :attr('id', 'personaje-data-' .. mw.uri.encode(nome))
    
    local data = {
        nome = nome,
        tier = tier,
        classe = classe,
        image = image,
        habilidades = habilidades,
        skins = skins
    }
    
    dataContainer:wikitext(mw.text.jsonEncode(data))
    
    -- Agregar clase de tier
    local tierClass = {
        ['bronze'] = 'tier-bronze', ['bronce'] = 'tier-bronze',
        ['silver'] = 'tier-silver', ['prata'] = 'tier-silver',
        ['gold'] = 'tier-gold', ['ouro'] = 'tier-gold',
        ['diamond'] = 'tier-diamond', ['diamante'] = 'tier-diamond'
    }
    
    if tierClass[tier:lower()] then
        html:addClass(tierClass[tier:lower()])
    end
    
    return tostring(html)
end

return p