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

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 4: Linha 4:
     local args = frame:getParent().args
     local args = frame:getParent().args
      
      
     -- Datos básicos
     -- Datos básicos con valores por defecto más robustos
     local nome = args.nome or ''
     local nome = args.nome or 'Sem nome'
     local tier = args.tier or ''
     local tier = args.tier or ''
     local classe = args.classe or ''
     local classe = args.classe or ''
     local image = args.image or ''
     local image = args.image or 'SemImagem.png'
      
      
     -- Procesar habilidades
     -- Procesar habilidades de forma más segura
     local habilidades = {}
     local habilidades = {}
     for i = 1, 21 do
     for i = 1, 21 do
         local hab = {
         local prefix = 'hab' .. i .. '-'
            nome = args['hab' .. i .. '-nome'],
        if args[prefix .. 'nome'] then
            icon = args['hab' .. i .. '-icon'],
            table.insert(habilidades, {
            level = args['hab' .. i .. '-level'],
                nome = args[prefix .. 'nome'] or '',
            desc = args['hab' .. i .. '-desc'],
                icon = args[prefix .. 'icon'] or '',
            atr = args['hab' .. i .. '-atr'],
                level = args[prefix .. 'level'] or '',
            video = args['hab' .. i .. '-video']
                desc = args[prefix .. 'desc'] or '',
        }
                atr = args[prefix .. 'atr'] or '',
        if hab.nome and hab.nome ~= '' then
                video = args[prefix .. 'video'] or ''
             table.insert(habilidades, hab)
             })
         end
         end
     end
     end
      
      
     -- Procesar skins
     -- Procesar skins similar al questlog
     local skins = {}
     local skins = {}
     for i = 1, 11 do
     for i = 1, 11 do
         local skin = {
         local prefix = 'skin' .. i .. '-'
            image = args['skin' .. i .. '-image'],
        if args[prefix .. 'image'] then
            banner = args['skin' .. i .. '-banner'],
            table.insert(skins, {
            tooltip = args['skin' .. i .. '-tooltip']
                image = args[prefix .. 'image'],
        }
                banner = args[prefix .. 'banner'] or '',
        if skin.image and skin.image ~= '' then
                tooltip = args[prefix .. 'tooltip'] or ''
             table.insert(skins, skin)
             })
         end
         end
     end
     end
   
 
     -- Generar HTML
     -- Construcción HTML al estilo questlog
     local html = mw.html.create('div')
     local html = mw.html.create('div')
         :addClass('personaje-box')
         :addClass('personaje-wrapper')
        :attr('id', 'personaje-' .. mw.uri.encode(nome))
      
      
     -- Header
     -- Cabecera similar al questlog
     local header = html:tag('div'):addClass('personaje-header')
     html:tag('div')
        :addClass('personaje-header')
        :wikitext('[[Arquivo:' .. image .. '|200px|link=]]')
      
      
     local topbar = header:tag('div'):addClass('personaje-topbar')
     -- Información básica
     local nomeBox = topbar:tag('div'):addClass('personaje-nome-box')
     local infoBox = html:tag('div')
        :addClass('personaje-info')
      
      
     nomeBox:tag('img')
     infoBox:tag('div')
         :attr('src', '/images/6/63/Franky_ts_medal.png')
         :addClass('personaje-title')
         :addClass('topbar-icon')
         :wikitext('' .. nome .. '')
      
      
     local nomeCategory = nomeBox:tag('div'):addClass('personaje-nome-category')
     infoBox:tag('div')
    nomeCategory:tag('div'):addClass('nome'):wikitext(nome)
        :addClass('personaje-subtitle')
    nomeCategory:tag('div'):addClass('classes'):wikitext(classe)
        :wikitext(classe .. ' (' .. tier .. ')')
      
      
     header:tag('div')
     -- Habilidades (adaptado al formato de items del questlog)
        :addClass('topbar-description')
     if #habilidades > 0 then
        :wikitext(nome .. ' (' .. tier .. ') é um personagem do tier ' .. tier:lower() .. '.')
        local habSection = html:tag('div')
      
            :addClass('personaje-section')
    -- Tabs
       
    local tabs = header:tag('div'):addClass('personaje-tabs')
        habSection:tag('div')
    tabs:tag('button')
            :addClass('section-title')
        :addClass('tab-btn')
            :wikitext('Habilidades')
        :attr('data-tab', 'arma')
          
         :wikitext('Arma')
        local habList = habSection:tag('div')
    tabs:tag('button')
            :addClass('personaje-habilidades')
        :addClass('tab-btn active')
          
         :attr('data-tab', 'habilidades')
        for i, hab in ipairs(habilidades) do
        :wikitext('Habilidades')
            local habItem = habList:tag('div')
    tabs:tag('button')
                :addClass('habilidad-item')
        :addClass('tab-btn')
           
        :attr('data-tab', 'skins')
            -- Icono de habilidad
        :wikitext('Skins')
            habItem:tag('div')
   
                :addClass('habilidad-icon')
    -- Imagen del personaje
                :wikitext('[[Arquivo:' .. hab.icon .. '|32px|link=]]')
    html:tag('img')
           
        :addClass('art-personaje')
            -- Detalles de habilidad
        :attr('src', image)
            local habDetails = habItem:tag('div')
        :attr('alt', 'Arte del personaje')
                :addClass('habilidad-details')
   
           
    -- Tab content: Habilidades
            habDetails:tag('div')
    local habContent = html:tag('div')
                :addClass('habilidad-nome')
        :addClass('tab-content active')
                :wikitext(hab.nome .. ' (Nv. ' .. hab.level .. ')')
        :attr('id', 'habilidades')
           
   
            -- Atributos al estilo questlog
    -- Contenedor de cuadros (iconos de habilidades)
            if hab.atr and hab.atr ~= '' then
    local cuadrosContainer = habContent:tag('div'):addClass('cuadros-container')
                local atrDiv = habDetails:tag('div')
    for i, hab in ipairs(habilidades) do
                    :addClass('habilidad-atr')
        cuadrosContainer:tag('div')
               
            :addClass('cuadro')
                local atrLabels = {'PVE', 'PVP', 'Energia', 'Recarga'}
             :attr('data-hab-index', i)
                local atrValues = mw.text.split(hab.atr, ',')
            :attr('title', hab.nome)
               
             :tag('img')
                for j, val in ipairs(atrValues) do
                 :attr('src', hab.icon)
                    if atrLabels[j] then
                 :attr('alt', hab.nome)
                        atrDiv:tag('span')
                :css('width', '100%')
                            :wikitext(atrLabels[j] .. ': ' .. val .. '  ')
                :css('height', '100%')
                    end
                :css('object-fit', 'cover')
                end
            end
           
             -- Descripción
             habDetails:tag('div')
                 :addClass('habilidad-desc')
                 :wikitext(hab.desc)
        end
     end
     end
      
      
     local habContainer = habContent:tag('div'):addClass('habilidades-container')
     -- Skins (adaptado al formato de items del questlog)
   
     if #skins > 0 then
    -- Detalles de habilidad
        local skinSection = html:tag('div')
    local habDetails = habContainer:tag('div'):addClass('habilidades-details')
            :addClass('personaje-section')
     habDetails:tag('div'):addClass('descripcion-container')
          
   
        skinSection:tag('div')
    -- Video container
            :addClass('section-title')
    habContainer:tag('div'):addClass('video-container')
            :wikitext('Skins')
   
       
    -- Tab content: Skins
        local skinList = skinSection:tag('div')
    local skinsContent = html:tag('div')
            :addClass('personaje-skins')
        :addClass('tab-content')
          
         :attr('id', 'skins')
         for i, skin in ipairs(skins) do
   
            local skinItem = skinList:tag('div')
    local cardSkins = skinsContent:tag('div'):addClass('card-skins')
                :addClass('skin-item')
    cardSkins:tag('span')
           
        :addClass('card-skins-title')
            skinItem:tag('div')
        :wikitext('SKINS & SPOTLIGHTS')
                :wikitext('[[Arquivo:' .. skin.image .. '|100px|link=]]')
   
              
    local carouselWrapper = cardSkins:tag('div'):addClass('skins-carousel-wrapper')
             if skin.tooltip and skin.tooltip ~= '' then
    carouselWrapper:tag('button')
                skinItem:tag('div')
         :addClass('skins-arrow left')
                    :addClass('skin-tooltip')
         :wikitext('«')
                    :wikitext(skin.tooltip)
   
            end
    local carousel = carouselWrapper:tag('div'):addClass('skins-carousel')
         end
    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
     end
   
 
     return tostring(html)
     return tostring(html)
end
end


return p
return p

Edição das 15h54min de 20 de julho de 2025

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 con valores por defecto más robustos
    local nome = args.nome or 'Sem nome'
    local tier = args.tier or ''
    local classe = args.classe or ''
    local image = args.image or 'SemImagem.png'
    
    -- Procesar habilidades de forma más segura
    local habilidades = {}
    for i = 1, 21 do
        local prefix = 'hab' .. i .. '-'
        if args[prefix .. 'nome'] then
            table.insert(habilidades, {
                nome = args[prefix .. 'nome'] or '',
                icon = args[prefix .. 'icon'] or '',
                level = args[prefix .. 'level'] or '',
                desc = args[prefix .. 'desc'] or '',
                atr = args[prefix .. 'atr'] or '',
                video = args[prefix .. 'video'] or ''
            })
        end
    end
    
    -- Procesar skins similar al questlog
    local skins = {}
    for i = 1, 11 do
        local prefix = 'skin' .. i .. '-'
        if args[prefix .. 'image'] then
            table.insert(skins, {
                image = args[prefix .. 'image'],
                banner = args[prefix .. 'banner'] or '',
                tooltip = args[prefix .. 'tooltip'] or ''
            })
        end
    end

    -- Construcción HTML al estilo questlog
    local html = mw.html.create('div')
        :addClass('personaje-wrapper')
    
    -- Cabecera similar al questlog
    html:tag('div')
        :addClass('personaje-header')
        :wikitext('[[Arquivo:' .. image .. '|200px|link=]]')
    
    -- Información básica
    local infoBox = html:tag('div')
        :addClass('personaje-info')
    
    infoBox:tag('div')
        :addClass('personaje-title')
        :wikitext('' .. nome .. '')
    
    infoBox:tag('div')
        :addClass('personaje-subtitle')
        :wikitext(classe .. ' (' .. tier .. ')')
    
    -- Habilidades (adaptado al formato de items del questlog)
    if #habilidades > 0 then
        local habSection = html:tag('div')
            :addClass('personaje-section')
        
        habSection:tag('div')
            :addClass('section-title')
            :wikitext('Habilidades')
        
        local habList = habSection:tag('div')
            :addClass('personaje-habilidades')
        
        for i, hab in ipairs(habilidades) do
            local habItem = habList:tag('div')
                :addClass('habilidad-item')
            
            -- Icono de habilidad
            habItem:tag('div')
                :addClass('habilidad-icon')
                :wikitext('[[Arquivo:' .. hab.icon .. '|32px|link=]]')
            
            -- Detalles de habilidad
            local habDetails = habItem:tag('div')
                :addClass('habilidad-details')
            
            habDetails:tag('div')
                :addClass('habilidad-nome')
                :wikitext(hab.nome .. ' (Nv. ' .. hab.level .. ')')
            
            -- Atributos al estilo questlog
            if hab.atr and hab.atr ~= '' then
                local atrDiv = habDetails:tag('div')
                    :addClass('habilidad-atr')
                
                local atrLabels = {'PVE', 'PVP', 'Energia', 'Recarga'}
                local atrValues = mw.text.split(hab.atr, ',')
                
                for j, val in ipairs(atrValues) do
                    if atrLabels[j] then
                        atrDiv:tag('span')
                            :wikitext(atrLabels[j] .. ': ' .. val .. '  ')
                    end
                end
            end
            
            -- Descripción
            habDetails:tag('div')
                :addClass('habilidad-desc')
                :wikitext(hab.desc)
        end
    end
    
    -- Skins (adaptado al formato de items del questlog)
    if #skins > 0 then
        local skinSection = html:tag('div')
            :addClass('personaje-section')
        
        skinSection:tag('div')
            :addClass('section-title')
            :wikitext('Skins')
        
        local skinList = skinSection:tag('div')
            :addClass('personaje-skins')
        
        for i, skin in ipairs(skins) do
            local skinItem = skinList:tag('div')
                :addClass('skin-item')
            
            skinItem:tag('div')
                :wikitext('[[Arquivo:' .. skin.image .. '|100px|link=]]')
            
            if skin.tooltip and skin.tooltip ~= '' then
                skinItem:tag('div')
                    :addClass('skin-tooltip')
                    :wikitext(skin.tooltip)
            end
        end
    end

    return tostring(html)
end

return p