Mudanças entre as edições de "Widget:Character.WeaponToggle"

De Wiki Gla
Ir para navegação Ir para pesquisar
m
m
Linha 1: Linha 1:
<script>(()=>{const applyWeaponState=(e)=>{if(typeof window.__setGlobalWeaponEnabled==='function'){window.__setGlobalWeaponEnabled(e)}document.querySelectorAll('.char-weapon-btn').forEach(b=>{b.classList.toggle('active',e)});try{localStorage.setItem('glaWeaponEnabled',e?'1':'0')}catch(x){}const lastIcon=window.__lastActiveSkillIcon;if(lastIcon&&typeof lastIcon.click==='function'){document.body.dataset.suppressSkillPlay='1';setTimeout(()=>{lastIcon.click();setTimeout(()=>delete document.body.dataset.suppressSkillPlay,100)},10)}};const showPopup=()=>{const m=document.getElementById('weapon-info-modal');if(m)m.classList.add('show')};const hidePopup=()=>{const m=document.getElementById('weapon-info-modal');if(m)m.classList.remove('show')};const boot=()=>{const t=document.querySelector('.char-translator');if(t){const w=document.createElement('div');w.className='char-weapon-toggle';w.innerHTML='<button class="char-weapon-btn" title="Visualizar com Arma"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg><span class="weapon-label">Arma</span></button>';t.parentElement.insertBefore(w,t.nextSibling)}const m=document.createElement('div');m.id='weapon-info-modal';m.className='weapon-modal';m.innerHTML='<div class="weapon-modal-overlay"></div><div class="weapon-modal-content"><div class="weapon-modal-header"><h3>Visualização com Arma Especial</h3><button class="weapon-modal-close">&times;</button></div><div class="weapon-modal-body"><p>Este modo ativa a visualização do personagem equipado com sua <strong>arma especial</strong>.</p><p>Nem todas as habilidades são alteradas. As modificadas são marcadas com um badge dourado.</p></div><div class="weapon-modal-footer"><label class="weapon-modal-checkbox"><input type="checkbox" id="weapon-dont-show"><span>Não mostrar novamente</span></label><button class="weapon-modal-btn">Entendi</button></div></div>';document.body.appendChild(m);document.addEventListener('click',(ev)=>{const btn=ev.target.closest('.char-weapon-btn');if(btn){ev.preventDefault();const cur=btn.classList.contains('active');applyWeaponState(!cur);if(!cur){try{if(localStorage.getItem('glaWeaponPopupDismissed')!=='1')showPopup()}catch(x){showPopup()}}return}if(ev.target.closest('.weapon-modal-close')||ev.target.closest('.weapon-modal-btn')){const c=document.getElementById('weapon-dont-show');if(c&&c.checked)try{localStorage.setItem('glaWeaponPopupDismissed','1')}catch(x){}hidePopup();return}if(ev.target.classList.contains('weapon-modal-overlay'))hidePopup()});let init=false;try{if(localStorage.getItem('glaWeaponEnabled')==='1')init=true}catch(x){}setTimeout(()=>applyWeaponState(init),100)};if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',boot);else boot()})();</script>
<!-- WEAPON TOGGLE SYSTEM -->
<style>.char-weapon-toggle{position:absolute;top:44px;right:8px;z-index:10;background:rgba(0,0,0,.35);padding:4px 8px;border-radius:6px;border:1px solid rgba(255,255,255,.15);backdrop-filter:blur(2px)}.char-weapon-btn{display:flex;align-items:center;gap:6px;padding:3px 8px;border-radius:4px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.06);cursor:pointer;transition:all .15s;color:rgba(255,255,255,.75);font-size:11px;font-weight:500}.char-weapon-btn svg{flex-shrink:0}.char-weapon-btn:hover{border-color:rgba(255,200,100,.4);background:rgba(255,255,255,.1);color:rgba(255,200,100,.95)}.char-weapon-btn.active{background:rgba(255,200,0,.15);border-color:rgba(255,200,0,.5);color:#fc0}.weapon-modal{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .3s}.weapon-modal.show{opacity:1;pointer-events:all}.weapon-modal-overlay{position:absolute;inset:0;background:rgba(0,0,0,.7);backdrop-filter:blur(4px)}.weapon-modal-content{position:relative;background:linear-gradient(135deg,#1a1a2e,#16213e);border:1px solid rgba(255,200,0,.3);border-radius:12px;max-width:420px;width:90%;box-shadow:0 20px 60px rgba(0,0,0,.5);animation:modalIn .3s}@keyframes modalIn{from{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}.weapon-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid rgba(255,255,255,.1)}.weapon-modal-header h3{margin:0;font-size:16px;font-weight:600;color:#fc0}.weapon-modal-close{background:0 0;border:none;color:rgba(255,255,255,.6);font-size:24px;cursor:pointer;padding:0;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:4px}.weapon-modal-close:hover{background:rgba(255,255,255,.1);color:#fff}.weapon-modal-body{padding:20px;color:rgba(255,255,255,.85);line-height:1.5;font-size:14px}.weapon-modal-body p{margin:0 0 12px}.weapon-modal-body p:last-child{margin:0}.weapon-modal-footer{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;border-top:1px solid rgba(255,255,255,.1);gap:12px}.weapon-modal-checkbox{display:flex;align-items:center;gap:6px;font-size:12px;color:rgba(255,255,255,.7);cursor:pointer}.weapon-modal-btn{background:linear-gradient(135deg,#fc0,#f90);border:none;color:#1a1a2e;padding:8px 20px;border-radius:6px;font-weight:600;font-size:13px;cursor:pointer;transition:transform .2s}.weapon-modal-btn:hover{transform:translateY(-2px)}@media(max-width:600px){.char-weapon-toggle{top:38px;right:6px;padding:3px 6px}.weapon-label{display:none}.char-weapon-btn{padding:3px}.weapon-modal-content{width:95%}.weapon-modal-header,.weapon-modal-body,.weapon-modal-footer{padding:12px 16px}.weapon-modal-footer{flex-direction:column}}</style>
<script>
    (() => {
        const applyWeaponState = (enabled) => {
            if (typeof window.__setGlobalWeaponEnabled === 'function') {
                window.__setGlobalWeaponEnabled(enabled);
            }
            document.querySelectorAll('.char-weapon-btn').forEach(b => {
                b.classList.toggle('active', enabled);
            });
            try {
                localStorage.setItem('glaWeaponEnabled', enabled ? '1' : '0');
            } catch (x) { }
 
            const lastIcon = window.__lastActiveSkillIcon;
            if (lastIcon && typeof lastIcon.click === 'function') {
                document.body.dataset.suppressSkillPlay = '1';
                setTimeout(() => {
                    lastIcon.click();
                    setTimeout(() => delete document.body.dataset.suppressSkillPlay, 100);
                }, 10);
            }
        };
 
        const showPopup = () => {
            const m = document.getElementById('weapon-info-modal');
            if (m) m.classList.add('show');
        };
 
        const hidePopup = () => {
            const m = document.getElementById('weapon-info-modal');
            if (m) m.classList.remove('show');
        };
 
        const boot = () => {
            // Verificar se existe alguma skill com arma
            const hasAnyWeapon = document.querySelectorAll('.skill-icon[data-weapon]').length > 0;
            if (!hasAnyWeapon) return; // Não criar toggle se não houver armas
 
            // Encontrar posição: após .top-rail.skills
            const skillsRail = document.querySelector('.top-rail.skills');
            if (!skillsRail) return;
 
            // Criar botão de toggle
            const w = document.createElement('div');
            w.className = 'char-weapon-toggle';
            w.innerHTML = `
            <button class="char-weapon-btn" title="Visualizar com Arma">
                <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
                    <rect x="3" y="11" width="18" height="11" rx="2"/>
                    <path d="M7 11V7a5 5 0 0 1 10 0v4"/>
                </svg>
                <span class="weapon-label">Arma</span>
            </button>
        `;
            skillsRail.parentElement.insertBefore(w, skillsRail.nextSibling);
 
            // Criar modal informativo
            const m = document.createElement('div');
            m.id = 'weapon-info-modal';
            m.className = 'weapon-modal';
            m.innerHTML = `
            <div class="weapon-modal-overlay"></div>
            <div class="weapon-modal-content">
                <div class="weapon-modal-header">
                    <h3>Visualização com Arma Especial</h3>
                    <button class="weapon-modal-close">&times;</button>
                </div>
                <div class="weapon-modal-body">
                    <p>Este modo ativa a visualização do personagem equipado com sua <strong>arma especial</strong>.</p>
                    <p>Nem todas as habilidades são alteradas. As modificadas são marcadas com um badge azul.</p>
                </div>
                <div class="weapon-modal-footer">
                    <label class="weapon-modal-checkbox">
                        <input type="checkbox" id="weapon-dont-show">
                        <span>Não mostrar novamente</span>
                    </label>
                    <button class="weapon-modal-btn">Entendi</button>
                </div>
            </div>
        `;
            document.body.appendChild(m);
 
            // Event listeners
            document.addEventListener('click', (ev) => {
                const btn = ev.target.closest('.char-weapon-btn');
                if (btn) {
                    ev.preventDefault();
                    const cur = btn.classList.contains('active');
                    applyWeaponState(!cur);
                    if (!cur) {
                        try {
                            if (localStorage.getItem('glaWeaponPopupDismissed') !== '1') showPopup();
                        } catch (x) { showPopup(); }
                    }
                    return;
                }
                if (ev.target.closest('.weapon-modal-close') || ev.target.closest('.weapon-modal-btn')) {
                    const c = document.getElementById('weapon-dont-show');
                    if (c && c.checked) {
                        try { localStorage.setItem('glaWeaponPopupDismissed', '1'); } catch (x) { }
                    }
                    hidePopup();
                    return;
                }
                if (ev.target.classList.contains('weapon-modal-overlay')) {
                    hidePopup();
                }
            });
 
            // Estado inicial
            let init = false;
            try {
                if (localStorage.getItem('glaWeaponEnabled') === '1') init = true;
            } catch (x) { }
            setTimeout(() => applyWeaponState(init), 100);
        };
 
        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', boot);
        } else {
            boot();
        }
    })();
</script>
<style>
    /* Toggle container - design simplificado sem bordas duplas */
    .char-weapon-toggle {
        display: flex;
        justify-content: center;
        margin: 8px 0 4px;
        z-index: 10;
    }
 
    /* Botão único, sem caixa externa */
    .char-weapon-btn {
        display: flex;
        align-items: center;
        gap: 6px;
        padding: 6px 14px;
        border-radius: 6px;
        border: none;
        background: rgba(74, 158, 255, 0.15);
        cursor: pointer;
        transition: all .2s ease;
        color: rgba(255, 255, 255, .8);
        font-size: 12px;
        font-weight: 600;
        letter-spacing: 0.3px;
    }
 
    .char-weapon-btn svg {
        flex-shrink: 0;
        opacity: 0.85;
    }
 
    .char-weapon-btn:hover {
        background: rgba(74, 158, 255, 0.25);
        color: #4A9EFF;
    }
 
    .char-weapon-btn:hover svg {
        opacity: 1;
    }
 
    .char-weapon-btn.active {
        background: rgba(74, 158, 255, 0.3);
        color: #4A9EFF;
        box-shadow: 0 0 12px rgba(74, 158, 255, 0.3);
    }
 
    .char-weapon-btn.active svg {
        opacity: 1;
    }
 
    /* Modal - cores neutras */
    .weapon-modal {
        position: fixed;
        inset: 0;
        z-index: 9999;
        display: flex;
        align-items: center;
        justify-content: center;
        opacity: 0;
        pointer-events: none;
        transition: opacity .3s;
    }
 
    .weapon-modal.show {
        opacity: 1;
        pointer-events: all;
    }
 
    .weapon-modal-overlay {
        position: absolute;
        inset: 0;
        background: rgba(0, 0, 0, .75);
        -webkit-backdrop-filter: blur(4px);
        backdrop-filter: blur(4px);
    }
 
    .weapon-modal-content {
        position: relative;
        background: linear-gradient(135deg, #1f1f1f, #2a2a2a);
        border: 1px solid rgba(255, 255, 255, .12);
        border-radius: 12px;
        max-width: 420px;
        width: 90%;
        box-shadow: 0 20px 60px rgba(0, 0, 0, .6);
        animation: modalIn .3s;
    }
 
    @keyframes modalIn {
        from {
            transform: translateY(-20px);
            opacity: 0;
        }
 
        to {
            transform: translateY(0);
            opacity: 1;
        }
    }
 
    .weapon-modal-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 16px 20px;
        border-bottom: 1px solid rgba(255, 255, 255, .08);
    }
 
    .weapon-modal-header h3 {
        margin: 0;
        font-size: 16px;
        font-weight: 600;
        color: #fff;
    }
 
    .weapon-modal-close {
        background: transparent;
        border: none;
        color: rgba(255, 255, 255, .5);
        font-size: 24px;
        cursor: pointer;
        padding: 0;
        width: 28px;
        height: 28px;
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: 4px;
        transition: all .15s;
    }
 
    .weapon-modal-close:hover {
        background: rgba(255, 255, 255, .1);
        color: #fff;
    }
 
    .weapon-modal-body {
        padding: 20px;
        color: rgba(255, 255, 255, .8);
        line-height: 1.6;
        font-size: 14px;
    }
 
    .weapon-modal-body p {
        margin: 0 0 12px;
    }
 
    .weapon-modal-body p:last-child {
        margin: 0;
    }
 
    .weapon-modal-body strong {
        color: #4A9EFF;
    }
 
    .weapon-modal-footer {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 14px 20px;
        border-top: 1px solid rgba(255, 255, 255, .08);
        gap: 12px;
    }
 
    .weapon-modal-checkbox {
        display: flex;
        align-items: center;
        gap: 8px;
        font-size: 12px;
        color: rgba(255, 255, 255, .6);
        cursor: pointer;
    }
 
    .weapon-modal-checkbox input[type="checkbox"] {
        accent-color: #4A9EFF;
    }
 
    .weapon-modal-btn {
        background: #4A9EFF;
        border: none;
        color: #fff;
        padding: 10px 24px;
        border-radius: 6px;
        font-weight: 600;
        font-size: 13px;
        cursor: pointer;
        transition: all .2s;
    }
 
    .weapon-modal-btn:hover {
        background: #2D7DD2;
        transform: translateY(-1px);
    }
 
    @media (max-width: 600px) {
        .char-weapon-toggle {
            margin: 6px 0 2px;
        }
 
        .weapon-label {
            display: none;
        }
 
        .char-weapon-btn {
            padding: 6px 10px;
        }
 
        .weapon-modal-content {
            width: 95%;
        }
 
        .weapon-modal-header,
        .weapon-modal-body,
        .weapon-modal-footer {
            padding: 12px 16px;
        }
 
        .weapon-modal-footer {
            flex-direction: column;
        }
    }
</style>

Edição das 10h51min de 28 de novembro de 2025

<script>

   (() => {
       const applyWeaponState = (enabled) => {
           if (typeof window.__setGlobalWeaponEnabled === 'function') {
               window.__setGlobalWeaponEnabled(enabled);
           }
           document.querySelectorAll('.char-weapon-btn').forEach(b => {
               b.classList.toggle('active', enabled);
           });
           try {
               localStorage.setItem('glaWeaponEnabled', enabled ? '1' : '0');
           } catch (x) { }
           const lastIcon = window.__lastActiveSkillIcon;
           if (lastIcon && typeof lastIcon.click === 'function') {
               document.body.dataset.suppressSkillPlay = '1';
               setTimeout(() => {
                   lastIcon.click();
                   setTimeout(() => delete document.body.dataset.suppressSkillPlay, 100);
               }, 10);
           }
       };
       const showPopup = () => {
           const m = document.getElementById('weapon-info-modal');
           if (m) m.classList.add('show');
       };
       const hidePopup = () => {
           const m = document.getElementById('weapon-info-modal');
           if (m) m.classList.remove('show');
       };
       const boot = () => {
           // Verificar se existe alguma skill com arma
           const hasAnyWeapon = document.querySelectorAll('.skill-icon[data-weapon]').length > 0;
           if (!hasAnyWeapon) return; // Não criar toggle se não houver armas
           // Encontrar posição: após .top-rail.skills
           const skillsRail = document.querySelector('.top-rail.skills');
           if (!skillsRail) return;
           // Criar botão de toggle
           const w = document.createElement('div');
           w.className = 'char-weapon-toggle';
           w.innerHTML = `
           <button class="char-weapon-btn" title="Visualizar com Arma">
               <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
                   <rect x="3" y="11" width="18" height="11" rx="2"/>
                   <path d="M7 11V7a5 5 0 0 1 10 0v4"/>
               </svg>
               Arma
           </button>
       `;
           skillsRail.parentElement.insertBefore(w, skillsRail.nextSibling);
           // Criar modal informativo
           const m = document.createElement('div');
           m.id = 'weapon-info-modal';
           m.className = 'weapon-modal';
           m.innerHTML = `

Visualização com Arma Especial

                   <button class="weapon-modal-close">×</button>

Este modo ativa a visualização do personagem equipado com sua arma especial.

Nem todas as habilidades são alteradas. As modificadas são marcadas com um badge azul.

       `;
           document.body.appendChild(m);
           // Event listeners
           document.addEventListener('click', (ev) => {
               const btn = ev.target.closest('.char-weapon-btn');
               if (btn) {
                   ev.preventDefault();
                   const cur = btn.classList.contains('active');
                   applyWeaponState(!cur);
                   if (!cur) {
                       try {
                           if (localStorage.getItem('glaWeaponPopupDismissed') !== '1') showPopup();
                       } catch (x) { showPopup(); }
                   }
                   return;
               }
               if (ev.target.closest('.weapon-modal-close') || ev.target.closest('.weapon-modal-btn')) {
                   const c = document.getElementById('weapon-dont-show');
                   if (c && c.checked) {
                       try { localStorage.setItem('glaWeaponPopupDismissed', '1'); } catch (x) { }
                   }
                   hidePopup();
                   return;
               }
               if (ev.target.classList.contains('weapon-modal-overlay')) {
                   hidePopup();
               }
           });
           // Estado inicial
           let init = false;
           try {
               if (localStorage.getItem('glaWeaponEnabled') === '1') init = true;
           } catch (x) { }
           setTimeout(() => applyWeaponState(init), 100);
       };
       if (document.readyState === 'loading') {
           document.addEventListener('DOMContentLoaded', boot);
       } else {
           boot();
       }
   })();

</script> <style>

   /* Toggle container - design simplificado sem bordas duplas */
   .char-weapon-toggle {
       display: flex;
       justify-content: center;
       margin: 8px 0 4px;
       z-index: 10;
   }
   /* Botão único, sem caixa externa */
   .char-weapon-btn {
       display: flex;
       align-items: center;
       gap: 6px;
       padding: 6px 14px;
       border-radius: 6px;
       border: none;
       background: rgba(74, 158, 255, 0.15);
       cursor: pointer;
       transition: all .2s ease;
       color: rgba(255, 255, 255, .8);
       font-size: 12px;
       font-weight: 600;
       letter-spacing: 0.3px;
   }
   .char-weapon-btn svg {
       flex-shrink: 0;
       opacity: 0.85;
   }
   .char-weapon-btn:hover {
       background: rgba(74, 158, 255, 0.25);
       color: #4A9EFF;
   }
   .char-weapon-btn:hover svg {
       opacity: 1;
   }
   .char-weapon-btn.active {
       background: rgba(74, 158, 255, 0.3);
       color: #4A9EFF;
       box-shadow: 0 0 12px rgba(74, 158, 255, 0.3);
   }
   .char-weapon-btn.active svg {
       opacity: 1;
   }
   /* Modal - cores neutras */
   .weapon-modal {
       position: fixed;
       inset: 0;
       z-index: 9999;
       display: flex;
       align-items: center;
       justify-content: center;
       opacity: 0;
       pointer-events: none;
       transition: opacity .3s;
   }
   .weapon-modal.show {
       opacity: 1;
       pointer-events: all;
   }
   .weapon-modal-overlay {
       position: absolute;
       inset: 0;
       background: rgba(0, 0, 0, .75);
       -webkit-backdrop-filter: blur(4px);
       backdrop-filter: blur(4px);
   }
   .weapon-modal-content {
       position: relative;
       background: linear-gradient(135deg, #1f1f1f, #2a2a2a);
       border: 1px solid rgba(255, 255, 255, .12);
       border-radius: 12px;
       max-width: 420px;
       width: 90%;
       box-shadow: 0 20px 60px rgba(0, 0, 0, .6);
       animation: modalIn .3s;
   }
   @keyframes modalIn {
       from {
           transform: translateY(-20px);
           opacity: 0;
       }
       to {
           transform: translateY(0);
           opacity: 1;
       }
   }
   .weapon-modal-header {
       display: flex;
       align-items: center;
       justify-content: space-between;
       padding: 16px 20px;
       border-bottom: 1px solid rgba(255, 255, 255, .08);
   }
   .weapon-modal-header h3 {
       margin: 0;
       font-size: 16px;
       font-weight: 600;
       color: #fff;
   }
   .weapon-modal-close {
       background: transparent;
       border: none;
       color: rgba(255, 255, 255, .5);
       font-size: 24px;
       cursor: pointer;
       padding: 0;
       width: 28px;
       height: 28px;
       display: flex;
       align-items: center;
       justify-content: center;
       border-radius: 4px;
       transition: all .15s;
   }
   .weapon-modal-close:hover {
       background: rgba(255, 255, 255, .1);
       color: #fff;
   }
   .weapon-modal-body {
       padding: 20px;
       color: rgba(255, 255, 255, .8);
       line-height: 1.6;
       font-size: 14px;
   }
   .weapon-modal-body p {
       margin: 0 0 12px;
   }
   .weapon-modal-body p:last-child {
       margin: 0;
   }
   .weapon-modal-body strong {
       color: #4A9EFF;
   }
   .weapon-modal-footer {
       display: flex;
       align-items: center;
       justify-content: space-between;
       padding: 14px 20px;
       border-top: 1px solid rgba(255, 255, 255, .08);
       gap: 12px;
   }
   .weapon-modal-checkbox {
       display: flex;
       align-items: center;
       gap: 8px;
       font-size: 12px;
       color: rgba(255, 255, 255, .6);
       cursor: pointer;
   }
   .weapon-modal-checkbox input[type="checkbox"] {
       accent-color: #4A9EFF;
   }
   .weapon-modal-btn {
       background: #4A9EFF;
       border: none;
       color: #fff;
       padding: 10px 24px;
       border-radius: 6px;
       font-weight: 600;
       font-size: 13px;
       cursor: pointer;
       transition: all .2s;
   }
   .weapon-modal-btn:hover {
       background: #2D7DD2;
       transform: translateY(-1px);
   }
   @media (max-width: 600px) {
       .char-weapon-toggle {
           margin: 6px 0 2px;
       }
       .weapon-label {
           display: none;
       }
       .char-weapon-btn {
           padding: 6px 10px;
       }
       .weapon-modal-content {
           width: 95%;
       }
       .weapon-modal-header,
       .weapon-modal-body,
       .weapon-modal-footer {
           padding: 12px 16px;
       }
       .weapon-modal-footer {
           flex-direction: column;
       }
   }

</style>