Módulo:Character

De Wiki Gla
Revisão de 20h01min de 8 de agosto de 2025 por Gurren1 (discussão | contribs)
Ir para navegação Ir para pesquisar

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

local p = {}

function p.generate(frame)
    local args = frame:getParent().args
    local html = mw.html.create('div')
    
    local function getVideoURL(filename)
        return tostring(mw.uri.fullUrl('Special:FilePath/' .. filename))
    end
    
    local tier = (args.tier or ""):lower()
    local tierMap = {
        bronze = "tier-bronze",
        silver = "tier-silver", 
        gold   = "tier-gold",
        diamond = "tier-diamond"
    }
    local tierClass = tierMap[tier]
    
    local box = html:tag('div')
        :addClass('character-box')
        :addClass(tierClass or '')
    
    -- Header Section
    local header = box:tag('div'):addClass('character-header')
    local topbar = header:tag('div'):addClass('character-topbar')
    
    -- Name/Title Block
    local nameBox = topbar:tag('div'):addClass('character-name-box')
    nameBox:wikitext(string.format('[[File:%s|class=topbar-icon|link=|alt=Medal]]', args.medal or 'Default_medal.png'))
    
    local nameCategory = nameBox:tag('div'):addClass('character-name-category')
    nameCategory:tag('div')
        :addClass('name')
        :wikitext(args.name or 'Default Character')
    
    -- Classes
    local classesDiv = nameCategory:tag('div'):addClass('classes')
    for cls in mw.text.gsplit(args.class or '', '/', true) do
        classesDiv:tag('div'):addClass('class'):wikitext(cls)
    end
    
    -- Description
    header:tag('div')
        :addClass('topbar-description')
        :wikitext(args.desc or '')
    
    -- Tabs
    local tabs = header:tag('div'):addClass('character-tabs')
    tabs:tag('div')
        :addClass('tab-btn')
        :attr('data-tab', 'weapon')
        :wikitext('Weapon')
    tabs:tag('div')
        :addClass('tab-btn active')
        :attr('data-tab', 'skills')
        :wikitext('Skills')
    tabs:tag('div')
        :addClass('tab-btn')
        :attr('data-tab', 'skins')
        :wikitext('Skins')
    
    -- Character Art
    box:tag('div')
        :css('text-align', 'center')
        :wikitext(string.format('[[File:%s|class=character-art|link=|alt=Character art]]', args.image or 'Default_splash.png'))
    
    -- Skills Tab
    local skillsTab = box:tag('div')
        :addClass('tab-content active')
        :attr('id', 'skills')
    
    local skillsBar = skillsTab:tag('div')
        :addClass('skills-container')
    
    -- Skills List
    for i = 1, 21 do
        local skillName = args['skill'..i..'-name']
        if skillName then
            skillsBar:tag('div')
                :addClass('skill')
                :attr('data-index', i)
                :attr('data-name', skillName)
                :attr('data-desc', args['skill'..i..'-desc'] or '')
                :attr('data-attr', args['skill'..i..'-attr'] or '')
                :attr('data-video', getVideoURL(args['skill'..i..'-video'] or ''))
                :wikitext(string.format("[[File:%s|class=skill-icon|link=]]", args['skill'..i..'-icon'] or ''))
        end
    end
    
    -- Skill Details Panel
    local skillsContainer = skillsTab:tag('div')
        :addClass('skills-details-container')
    
    skillsContainer:tag('div')
        :addClass('skill-description')
    
    skillsContainer:tag('div')
        :addClass('skill-video-container')
    
    -- Skins Tab
    local skinsTab = box:tag('div')
        :addClass('tab-content')
        :attr('id', 'skins')
    
    local skinsCard = skinsTab:tag('div')
        :addClass('skins-card')
    
    skinsCard:tag('span')
        :addClass('skins-title')
        :wikitext('SKINS & SPOTLIGHTS')
    
    local carouselWrapper = skinsCard:tag('div')
        :addClass('skins-carousel-wrapper')
    
    carouselWrapper:tag('div')
        :addClass('skins-arrow left')
        :wikitext('«')
    
    local carousel = carouselWrapper:tag('div')
        :addClass('skins-carousel')
    
    -- Skins List
    for j = 1, 11 do
        local skinImage = args['skin'..j..'-image']
        if skinImage then
            local skinCard = carousel:tag('div')
                :addClass('skin-card')
                :attr('title', args['skin'..j..'-tooltip'] or '')
            
            skinCard:tag('div')
                :addClass('skin-banner')
                :wikitext(string.format("[[File:%s|link=]]", args['skin'..j..'-banner'] or ''))
            
            skinCard:tag('div')
                :addClass('skin-image')
                :wikitext(string.format("[[File:%s|link=]]", skinImage))
        end
    end
    
    carouselWrapper:tag('div')
        :addClass('skins-arrow right')
        :wikitext('»')
    
    return tostring(box)
end

return p