MediaWiki:Common.js: mudanças entre as edições

De otPokemon Wiki
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
Linha 112: Linha 112:




/* --- Tradutor Integrado com a API Oficial do MediaWiki --- */
 
/* --- Tradutor na Barra Lateral (Compatível com Múltiplos Temas) --- */
 
 
 
 
 
/* --- Tradutor na Barra Lateral (Compatível com ECMAScript 5) --- */
$(document).ready(function() {
$(document).ready(function() {
     var defaultLang = 'pt';
     var defaultLang = 'pt';


     // 1. Carrega o Google Translate invisível (apenas se ainda não existir)
     // 1. Carrega o Google Translate invisível
     if ($('#google_translate_element').length === 0) {
     if ($('#google_translate_element').length === 0) {
         $('body').append('<div id="google_translate_element" style="display:none;"></div>');
         $('body').append('<div id="google_translate_element" style="display:none;"></div>');
Linha 130: Linha 135:
     }
     }


     // 2. Rastreador de Barra Lateral: Procura onde colocar o menu dependendo do seu tema
     // 2. Procura a barra lateral
     var sidebar = $('#mw-panel'); // Tema Vector Clássico
     var sidebar = $('#mw-panel');  
     if (sidebar.length === 0) sidebar = $('#vector-main-menu'); // Tema Vector 2022
     if (sidebar.length === 0) sidebar = $('#vector-main-menu');  
     if (sidebar.length === 0) sidebar = $('#mw-site-navigation'); // Tema Timeless
     if (sidebar.length === 0) sidebar = $('#mw-site-navigation');  
     if (sidebar.length === 0) sidebar = $('#column-one'); // Tema Monobook
     if (sidebar.length === 0) sidebar = $('#column-one');  


     // 3. Injeta o menu "Idiomas" se a barra for encontrada
     // 3. Injeta o menu usando concatenação de strings clássica (ES5)
     if (sidebar.length > 0 && $('#p-lang-custom').length === 0) {
     if (sidebar.length > 0 && $('#p-lang-custom').length === 0) {
         var menuHTML = `
         var menuHTML = '<div class="portal vector-menu vector-menu-portal" id="p-lang-custom">' +
        <div class="portal vector-menu vector-menu-portal" id="p-lang-custom">
             '<h3 class="vector-menu-heading" style="padding-left:14px; font-size:1em; color:#54595d; margin-top:10px;">' +
             <h3 class="vector-menu-heading" style="padding-left:14px; font-size:1em; color:#54595d; margin-top:10px;">
                 '<span>Idiomas</span>' +
                 <span>Idiomas</span>
             '</h3>' +
             </h3>
             '<div class="body vector-menu-content">' +
             <div class="body vector-menu-content">
                 '<ul class="vector-menu-content-list" style="list-style:none; padding-left:14px; margin:0;">' +
                 <ul class="vector-menu-content-list" style="list-style:none; padding-left:14px; margin:0;">
                     '<li id="n-lang-pt" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="pt">Português (Brasil)</a></li>' +
                     <li id="n-lang-pt" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="pt">Português (Brasil)</a></li>
                     '<li id="n-lang-en" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="en">English</a></li>' +
                     <li id="n-lang-en" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="en">English</a></li>
                     '<li id="n-lang-es" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="es">Español</a></li>' +
                     <li id="n-lang-es" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="es">Español</a></li>
                     '<li id="n-lang-pl" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="pl">Polski</a></li>' +
                     <li id="n-lang-pl" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="pl">Polski</a></li>
                 '</ul>' +
                 </ul>
             '</div>' +
             </div>
         '</div>';
         </div>`;
       
         sidebar.append(menuHTML);
         sidebar.append(menuHTML);
    } else {
        console.error("ERRO: Barra lateral não encontrada. O script do tradutor não conseguiu achar onde se ancorar.");
     }
     }


     // 4. Lógica de tradução
     // 4. Lógica de tradução adaptada para navegadores/sistemas mais restritos
     $(document).on('click', '.lang-btn', function(e) {
     $(document).on('click', '.lang-btn', function(e) {
         e.preventDefault();
         e.preventDefault();
Linha 172: Linha 175:
         if (select) {
         if (select) {
             select.value = targetLang;
             select.value = targetLang;
             select.dispatchEvent(new Event('change'));
             // Dispara o evento de forma compatível com ES5
            var event;
            if (typeof Event === 'function') {
                event = new Event('change');
            } else {
                event = document.createEvent('HTMLEvents');
                event.initEvent('change', true, false);
            }
            select.dispatchEvent(event);
         } else {
         } else {
             alert('O tradutor está carregando. Aguarde um segundo e tente novamente.');
             alert('O tradutor está carregando. Aguarde um segundo e tente novamente.');

Edição das 12h42min de 7 de março de 2026

var coll1 = document.getElementsByClassName("collapsible-battle-pass");
var coll2 = document.getElementsByClassName("collapsible-pokemon");

function toggleContent(clickedButton, contentToToggle) {
  var allContents = document.getElementsByClassName("content");
  for (var j = 0; j < allContents.length; j++) {
    allContents[j].style.maxHeight = null; 
  }

  var allButtons = document.getElementsByClassName("collapsible-battle-pass");
  for (var k = 0; k < allButtons.length; k++) {
    allButtons[k].classList.remove("active");
  }
  allButtons = document.getElementsByClassName("collapsible-pokemon");
  for (var k = 0; k < allButtons.length; k++) {
    allButtons[k].classList.remove("active");
  }

  if (contentToToggle.style.maxHeight) {
    contentToToggle.style.maxHeight = null; 
  } else {
    contentToToggle.style.maxHeight = contentToToggle.scrollHeight + "px";
  }

  clickedButton.classList.add("active");
}

for (var i = 0; i < coll1.length; i++) {
  coll1[i].addEventListener("click", function() {
    var content = this.nextElementSibling; 
    toggleContent(this, content);  
  });
}

for (var i = 0; i < coll2.length; i++) {
  coll2[i].addEventListener("click", function() {
    var content = this.nextElementSibling; 
    toggleContent(this, content); 
  });
}
/* Pokedex */
var coll3 = document.getElementsByClassName("collapsible-pokedex");

function toggleContent(clickedButton, contentToToggle) {
  var allContents = document.getElementsByClassName("content");
  for (var j = 0; j < allContents.length; j++) {
    allContents[j].style.maxHeight = null; 
  }

  var allButtons2 = document.getElementsByClassName("collapsible-pokedex");
  for (var k = 0; k < allButtons2.length; k++) {
    allButtons2[k].classList.remove("active");
  }

  if (contentToToggle.style.maxHeight) {
    contentToToggle.style.maxHeight = null; 
  } else {
    contentToToggle.style.maxHeight = contentToToggle.scrollHeight + "px";
  }

  clickedButton.classList.add("active");
}

for (var i = 0; i < coll3.length; i++) {
  coll3[i].addEventListener("click", function() {
    var content = this.nextElementSibling; 
    toggleContent(this, content);  
  });
}

/* Pokedex */

function toggleShinyList() {
    var shinyList = document.getElementById("shiny-list");
    if (shinyList.style.display === "none" || shinyList.style.display === "") {
        shinyList.style.display = "block";
    } else {
        shinyList.style.display = "flex";
    }
}


mw.loader.using('jquery', function () {
    $(document).ready(function () {
        var isAscending = true;
        var $sortButton = $('<div class="sort-button" style="width: 60px; height: 50px; background-image: url(https://wiki.otpokemon.com/images/9/92/O-c.png); background-position: center; background-repeat: no-repeat; background-size: cover; border-radius: 3px; cursor: pointer; float: right; margin-right: 0.5%;margin-top: -50px;"></div>');
        $('.square-div-shiny').before($sortButton);
    

        $sortButton.on('click', function () {
            var $container = $('.square-div-shiny');
            var $boxes = $container.children('.square-box-shiny');

            $boxes.sort(function (a, b) {
                var numA = parseInt($(a).find('.square-name-shiny').text().match(/\d+/)[0], 10);
                var numB = parseInt($(b).find('.square-name-shiny').text().match(/\d+/)[0], 10);

                return isAscending ? numA - numB : numB - numA;
            });

            $container.append($boxes);
            isAscending = !isAscending;

            var newImage = isAscending 
                ? 'https://wiki.otpokemon.com/images/e/e2/O-d.png' 
                : 'https://wiki.otpokemon.com/images/9/92/O-c.png';
            
            $sortButton.css('background-image', 'url(' + newImage + ')');
        });
    });
});








/* --- Tradutor na Barra Lateral (Compatível com ECMAScript 5) --- */
$(document).ready(function() {
    var defaultLang = 'pt';

    // 1. Carrega o Google Translate invisível
    if ($('#google_translate_element').length === 0) {
        $('body').append('<div id="google_translate_element" style="display:none;"></div>');
        window.googleTranslateElementInit = function() {
            new google.translate.TranslateElement({
                pageLanguage: defaultLang,
                includedLanguages: 'pt,en,es,pl',
                autoDisplay: false
            }, 'google_translate_element');
        };
        $.getScript("https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");
    }

    // 2. Procura a barra lateral
    var sidebar = $('#mw-panel'); 
    if (sidebar.length === 0) sidebar = $('#vector-main-menu'); 
    if (sidebar.length === 0) sidebar = $('#mw-site-navigation'); 
    if (sidebar.length === 0) sidebar = $('#column-one'); 

    // 3. Injeta o menu usando concatenação de strings clássica (ES5)
    if (sidebar.length > 0 && $('#p-lang-custom').length === 0) {
        var menuHTML = '<div class="portal vector-menu vector-menu-portal" id="p-lang-custom">' +
            '<h3 class="vector-menu-heading" style="padding-left:14px; font-size:1em; color:#54595d; margin-top:10px;">' +
                '<span>Idiomas</span>' +
            '</h3>' +
            '<div class="body vector-menu-content">' +
                '<ul class="vector-menu-content-list" style="list-style:none; padding-left:14px; margin:0;">' +
                    '<li id="n-lang-pt" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="pt">Português (Brasil)</a></li>' +
                    '<li id="n-lang-en" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="en">English</a></li>' +
                    '<li id="n-lang-es" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="es">Español</a></li>' +
                    '<li id="n-lang-pl" style="margin-bottom:4px;"><a href="#" class="lang-btn" data-lang="pl">Polski</a></li>' +
                '</ul>' +
            '</div>' +
        '</div>';
        
        sidebar.append(menuHTML);
    }

    // 4. Lógica de tradução adaptada para navegadores/sistemas mais restritos
    $(document).on('click', '.lang-btn', function(e) {
        e.preventDefault();
        var targetLang = $(this).attr('data-lang');
        var select = document.querySelector('.goog-te-combo');

        if (targetLang === defaultLang) {
            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=" + location.hostname + ";";
            location.reload();
            return;
        }

        if (select) {
            select.value = targetLang;
            // Dispara o evento de forma compatível com ES5
            var event;
            if (typeof Event === 'function') {
                event = new Event('change');
            } else {
                event = document.createEvent('HTMLEvents');
                event.initEvent('change', true, false);
            }
            select.dispatchEvent(event);
        } else {
            alert('O tradutor está carregando. Aguarde um segundo e tente novamente.');
        }
    });
});