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

Sem resumo de edição
Sem resumo de edição
 
(11 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 111: Linha 111:
});
});


mw.hook('wikipage.content').add(function($content) {
    // Detecta se a página atual é /en ou se o idioma da interface do usuário está em inglês
    var isEnglish = mw.config.get('wgUserLanguage') === 'en' || mw.config.get('wgPageName').endsWith('/en');
    var isSpannish = mw.config.get('wgUserLanguage') === 'es' || mw.config.get('wgPageName').endsWith('/es');
    var isPolish = mw.config.get('wgUserLanguage') === 'pl' || mw.config.get('wgPageName').endsWith('/pl');
   
    if (isEnglish) {
        // Pega todos os links da área de conteúdo
        $content.find('a').each(function() {
            var href = $(this).attr('href');
           
            // Só altera se for um link interno válido (começa com /, mas não com // que seria link externo)
            if (href && href.startsWith('/') && !href.startsWith('//') && !href.includes('Special:') && !href.includes('Especial:') && !href.includes('?')) {
               
                // Evita colocar /en repetido
                if (!href.endsWith('/en') && !href.includes('/en#')) {
                   
                    // Se o link tiver uma âncora (ex: /Charizard#Ataques), coloca o /en antes do #
                    if (href.includes('#')) {
                        $(this).attr('href', href.replace('#', '/en#'));
                    } else {
                        // Link normal
                        $(this).attr('href', href + '/en');
                    }
                }
            }
        });
    }
    if (isSpannish) {
        // Pega todos os links da área de conteúdo
        $content.find('a').each(function() {
            var href = $(this).attr('href');
           
            // Só altera se for um link interno válido (começa com /, mas não com // que seria link externo)
            if (href && href.startsWith('/') && !href.startsWith('//') && !href.includes('Special:') && !href.includes('Especial:') && !href.includes('?')) {
               
                // Evita colocar /es repetido
                if (!href.endsWith('/es') && !href.includes('/es#')) {
                   
                    // Se o link tiver uma âncora (ex: /Charizard#Ataques), coloca o /en antes do #
                    if (href.includes('#')) {
                        $(this).attr('href', href.replace('#', '/es#'));
                    } else {
                        // Link normal
                        $(this).attr('href', href + '/es');
                    }
                }
            }
        });
    }
    if (isPolish) {
        // Pega todos os links da área de conteúdo
        $content.find('a').each(function() {
            var href = $(this).attr('href');
           
            // Só altera se for um link interno válido (começa com /, mas não com // que seria link externo)
            if (href && href.startsWith('/') && !href.startsWith('//') && !href.includes('Special:') && !href.includes('Especial:') && !href.includes('?')) {
               
                if (!href.endsWith('/pl') && !href.includes('/pl#')) {
                   
                    // Se o link tiver uma âncora (ex: /Charizard#Ataques), coloca o /en antes do #
                    if (href.includes('#')) {
                        $(this).attr('href', href.replace('#', '/pl#'));
                    } else {
                        // Link normal
                        $(this).attr('href', href + '/pl');
                    }
                }
            }
        });
    }
});


// --- SISTEMA DE BANDEIRAS, CACHE E REDIRECIONAMENTO (VERSÃO TURBO) ---
(function() {
    var pageName = mw.config.get('wgPageName');
   
    // 1. Identifica o idioma atual
    var match = pageName.match(/\/(en|es|pl)$/);
    var urlLang = match ? match[1] : 'pt';
    var basePageName = pageName.replace(/\/(en|es|pl)$/, '');


    // 2. Lógica de Redirecionamento Automático
    if (urlLang === 'pt') {
        var prefLang = localStorage.getItem('otp_lang');
        if (!prefLang) {
            var browserLang = navigator.language || navigator.userLanguage;
            if (browserLang.startsWith('en')) prefLang = 'en';
            else if (browserLang.startsWith('es')) prefLang = 'es';
            else if (browserLang.startsWith('pl')) prefLang = 'pl';
        }


         if (prefLang && ['en', 'es', 'pl'].includes(prefLang)) {
 
             // Redirecionamento ultrarrápido antes de a página renderizar
 
            window.location.replace('/' + basePageName + '/' + prefLang + '?uselang=' + prefLang);
/* --- Tradutor no TOPO da Barra Lateral com Bandeiras Oficiais (ES5) --- */
             return;  
/* --- Tradutor no TOPO da Barra Lateral com Bandeiras Oficiais (ES5) --- */
$(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. Injeta o menu com as bandeiras ANTES do menu principal de Navegação
    if ($('#p-lang-custom').length === 0) {
        var menuHTML = '<nav class="portal vector-menu vector-menu-portal" id="p-lang-custom" style="text-align:center; padding: 10px 0;">' +
             '<div class="body vector-menu-content" style="display:flex; justify-content:center; gap:8px;">' +
                '<a href="#" class="lang-btn" data-lang="pt" style="text-decoration:none;" title="Português (Brasil)"><img src="https://otpokemon.com/images/flags/br.png" width="30px"/></a>' +
                '<a href="#" class="lang-btn" data-lang="en" style="text-decoration:none;" title="English"><img src="https://otpokemon.com/images/flags/en.png" width="30px"/></a>' +
                '<a href="#" class="lang-btn" data-lang="es" style="text-decoration:none;" title="Español"><img src="https://otpokemon.com/images/flags/es.png" width="30px"/></a>' +
                '<a href="#" class="lang-btn" data-lang="pl" style="text-decoration:none;" title="Polski"><img src="https://otpokemon.com/images/flags/pl.png" width="30px"/></a>' +
            '</div>' +
        '</nav>';
       
        // Procura o menu "Navegação" e insere o de idiomas logo ACIMA dele
        if ($('#p-navigation').length > 0) {
            $('#p-navigation').before(menuHTML);
        } else {
             // Plano B de segurança, caso a página carregue de forma diferente
            $('#mw-panel').prepend(menuHTML);
         }
         }
     }
     }


     // 3. Monta as URLs diretas (Sem depender de pacotes externos do MediaWiki)
     // 3. Lógica de tradução melhorada
     var urlPT = '/' + basePageName + '?uselang=pt-br';
     $(document).on('click', '.lang-btn', function(e) {
    var urlEN = '/' + basePageName + '/en?uselang=en';
        e.preventDefault();
    var urlES = '/' + basePageName + '/es?uselang=es';
        var targetLang = $(this).attr('data-lang');
    var urlPL = '/' + basePageName + '/pl?uselang=pl';
        var select = document.querySelector('.goog-te-combo');


    var flags = '<div id="wiki-flags" style="text-align:center; padding:15px 0 5px 0; margin-bottom:10px;">' +
        // Se clicar em Português, forçamos a limpeza profunda dos cookies
        '<a href="' + urlPT + '" id="flag-pt" style="font-size:26px; margin:0 4px; text-decoration:none; display:inline-block; padding:3px;" title="Português">🇧🇷</a>' +
        if (targetLang === defaultLang) {
        '<a href="' + urlEN + '" id="flag-en" style="font-size:26px; margin:0 4px; text-decoration:none; display:inline-block; padding:3px;" title="English">🇺🇸</a>' +
            var host = location.hostname;
        '<a href="' + urlES + '" id="flag-es" style="font-size:26px; margin:0 4px; text-decoration:none; display:inline-block; padding:3px;" title="Español">🇪🇸</a>' +
           
        '<a href="' + urlPL + '" id="flag-pl" style="font-size:26px; margin:0 4px; text-decoration:none; display:inline-block; padding:3px;" title="Polski">🇵🇱</a>' +
            // Limpa o cookie na raiz
         '</div>';
            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
            // Limpa o cookie no domínio exato
            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=" + host + ";";
            // Limpa o cookie com o prefixo de ponto (muito usado pelo Google)
            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=." + host + ";";
           
            // Se for um subdomínio (ex: wiki.otpokemon.com), limpa também o domínio principal (.otpokemon.com)
            var parts = host.split('.');
            if (parts.length > 2) {
                var mainDomain = "." + parts[parts.length - 2] + "." + parts[parts.length - 1];
                document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=" + mainDomain + ";";
            }
           
            // Recarrega a página para aplicar a limpeza
            location.reload();
            return;
         }


    // 4. Injeta as bandeiras no exato milissegundo que o menu surgir na tela
        // Se clicar num idioma estrangeiro, chama o Google Translate
    var checkExist = setInterval(function() {
         if (select) {
         if ($('#p-navigation').length) {
             select.value = targetLang;
             $('#p-navigation').before(flags);
            var event;
             $('#flag-' + urlLang).addClass('flag-ativa');
             if (typeof Event === 'function') {
 
                event = new Event('change');
             // Salva a escolha do jogador
             } else {
            $('#wiki-flags a').on('click', function() {
                 event = document.createEvent('HTMLEvents');
                 var clickedLang = $(this).attr('id').replace('flag-', '');
                 event.initEvent('change', true, false);
                 localStorage.setItem('otp_lang', clickedLang);
             }
             });
            select.dispatchEvent(event);
 
        } else {
             clearInterval(checkExist); // Para o timer de verificação
             alert('O sistema de tradução ainda está a carregar. Por favor, aguarde um instante e tente novamente.');
         }
         }
     }, 10); // Checa a cada 10 milissegundos
     });
})();
});

Edição atual tal como às 12h54min 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 no TOPO da Barra Lateral com Bandeiras Oficiais (ES5) --- */
/* --- Tradutor no TOPO da Barra Lateral com Bandeiras Oficiais (ES5) --- */
$(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. Injeta o menu com as bandeiras ANTES do menu principal de Navegação
    if ($('#p-lang-custom').length === 0) {
        var menuHTML = '<nav class="portal vector-menu vector-menu-portal" id="p-lang-custom" style="text-align:center; padding: 10px 0;">' +
            '<div class="body vector-menu-content" style="display:flex; justify-content:center; gap:8px;">' +
                '<a href="#" class="lang-btn" data-lang="pt" style="text-decoration:none;" title="Português (Brasil)"><img src="https://otpokemon.com/images/flags/br.png" width="30px"/></a>' +
                '<a href="#" class="lang-btn" data-lang="en" style="text-decoration:none;" title="English"><img src="https://otpokemon.com/images/flags/en.png" width="30px"/></a>' +
                '<a href="#" class="lang-btn" data-lang="es" style="text-decoration:none;" title="Español"><img src="https://otpokemon.com/images/flags/es.png" width="30px"/></a>' +
                '<a href="#" class="lang-btn" data-lang="pl" style="text-decoration:none;" title="Polski"><img src="https://otpokemon.com/images/flags/pl.png" width="30px"/></a>' +
            '</div>' +
        '</nav>';
        
        // Procura o menu "Navegação" e insere o de idiomas logo ACIMA dele
        if ($('#p-navigation').length > 0) {
            $('#p-navigation').before(menuHTML);
        } else {
            // Plano B de segurança, caso a página carregue de forma diferente
            $('#mw-panel').prepend(menuHTML);
        }
    }

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

        // Se clicar em Português, forçamos a limpeza profunda dos cookies
        if (targetLang === defaultLang) {
            var host = location.hostname;
            
            // Limpa o cookie na raiz
            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
            // Limpa o cookie no domínio exato
            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=" + host + ";";
            // Limpa o cookie com o prefixo de ponto (muito usado pelo Google)
            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=." + host + ";";
            
            // Se for um subdomínio (ex: wiki.otpokemon.com), limpa também o domínio principal (.otpokemon.com)
            var parts = host.split('.');
            if (parts.length > 2) {
                var mainDomain = "." + parts[parts.length - 2] + "." + parts[parts.length - 1];
                document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=" + mainDomain + ";";
            }
            
            // Recarrega a página para aplicar a limpeza
            location.reload();
            return;
        }

        // Se clicar num idioma estrangeiro, chama o Google Translate
        if (select) {
            select.value = targetLang;
            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 sistema de tradução ainda está a carregar. Por favor, aguarde um instante e tente novamente.');
        }
    });
});