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
 
(12 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');
 
   
/* --- Tradutor no TOPO da Barra Lateral com Bandeiras Oficiais (ES5) --- */
    if (isEnglish) {
/* --- Tradutor no TOPO da Barra Lateral com Bandeiras Oficiais (ES5) --- */
        // Pega todos os links da área de conteúdo
$(document).ready(function() {
        $content.find('a').each(function() {
    var defaultLang = 'pt';
            var href = $(this).attr('href');
 
           
    // 1. Carrega o Google Translate invisível
            // Só altera se for um link interno válido (começa com /, mas não com // que seria link externo)
    if ($('#google_translate_element').length === 0) {
            if (href && href.startsWith('/') && !href.startsWith('//') && !href.includes('Special:') && !href.includes('Especial:') && !href.includes('?')) {
        $('body').append('<div id="google_translate_element" style="display:none;"></div>');
               
         window.googleTranslateElementInit = function() {
                // Evita colocar /en repetido
             new google.translate.TranslateElement({
                if (!href.endsWith('/en') && !href.includes('/en#')) {
                 pageLanguage: defaultLang,
                   
                 includedLanguages: 'pt,en,es,pl',
                    // Se o link tiver uma âncora (ex: /Charizard#Ataques), coloca o /en antes do #
                autoDisplay: false
                    if (href.includes('#')) {
            }, 'google_translate_element');
                        $(this).attr('href', href.replace('#', '/en#'));
         };
                    } else {
         $.getScript("https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");
                        // 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 ---
mw.loader.using(['mediawiki.util']).then(function() {
    var pageName = mw.config.get('wgPageName');
   
    // 1. Identifica em qual idioma o jogador está agora (pela URL)
    var match = pageName.match(/\/(en|es|pl)$/);
    var urlLang = match ? match[1] : 'pt'; // Se não tem sufixo, assumimos PT
    var basePageName = pageName.replace(/\/(en|es|pl)$/, '');


     // 2. Lógica de Redirecionamento Automático
     // 2. Injeta o menu com as bandeiras ANTES do menu principal de Navegação
     if (urlLang === 'pt') { // Só redireciona se ele tentar acessar a página raiz (em português)
     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>';
          
          
         // Tenta pegar o idioma salvo. Se não tiver, pega o idioma nativo do Google Chrome/PC dele
         // Procura o menu "Navegação" e insere o de idiomas logo ACIMA dele
         var prefLang = localStorage.getItem('otp_lang');
         if ($('#p-navigation').length > 0) {
        if (!prefLang) {
             $('#p-navigation').before(menuHTML);
            var browserLang = navigator.language || navigator.userLanguage;
         } else {
            if (browserLang.startsWith('en')) prefLang = 'en';
            // Plano B de segurança, caso a página carregue de forma diferente
             else if (browserLang.startsWith('es')) prefLang = 'es';
            $('#mw-panel').prepend(menuHTML);
            else if (browserLang.startsWith('pl')) prefLang = 'pl';
         }
 
        // Se a preferência dele for estrangeira, manda ele pra página traduzida instantaneamente!
        if (prefLang && ['en', 'es', 'pl'].includes(prefLang)) {
            var redirectUrl = mw.util.getUrl(basePageName + '/' + prefLang) + '?uselang=' + prefLang;
            window.location.replace(redirectUrl);
            return; // Para o script aqui para não carregar mais nada
         }
         }
     }
     }


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


    // Cria o HTML adicionando um "ID" para cada bandeira
        // Se clicar em Português, forçamos a limpeza profunda dos cookies
    var flags = '<div id="wiki-flags" style="text-align:center; padding:15px 0 5px 0; margin-bottom:10px;">' +
        if (targetLang === defaultLang) {
        '<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>' +
            var host = location.hostname;
        '<a href="' + urlEN + '" id="flag-en" style="font-size:26px; margin:0 4px; text-decoration:none; display:inline-block; padding:3px;" title="English">🇺🇸</a>' +
           
        '<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>' +
            // Limpa o cookie na raiz
        '<a href="' + urlPL + '" id="flag-pl" style="font-size:26px; margin:0 4px; text-decoration:none; display:inline-block; padding:3px;" title="Polski">🇵🇱</a>' +
            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
         '</div>';
            // 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;
         }


    // Injeta as bandeiras na barra lateral
        // Se clicar num idioma estrangeiro, chama o Google Translate
    $('#p-navigation').before(flags);
        if (select) {
 
            select.value = targetLang;
    // 4. Aplica a classe CSS (borda/brilho) na bandeira do idioma atual
            var event;
    $('#flag-' + urlLang).addClass('flag-ativa');
            if (typeof Event === 'function') {
 
                event = new Event('change');
    // 5. Salva a escolha no PC do jogador quando ele clica em uma bandeira
            } 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 {
            alert('O sistema de tradução ainda está a carregar. Por favor, aguarde um instante e tente novamente.');
         }
     });
     });
});
});

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.');
        }
    });
});