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
 
(7 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 112: Linha 112:


mw.hook('wikipage.content').add(function($content) {
mw.hook('wikipage.content').add(function($content) {
     var isEnglish = mw.config.get('wgUserLanguage') === 'en' || mw.config.get('wgPageName').match(/\/en$/);
    // 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) {
     if (isEnglish) {
         $content.find('#mw-content-text a').each(function() {
        // Pega todos os links da área de conteúdo
         $content.find('a').each(function() {
             var href = $(this).attr('href');
             var href = $(this).attr('href');
             if (href && href.startsWith('/') && !href.includes('Special:') && !href.includes('Especial:') && !href.includes('?') && !href.endsWith('/en')) {
           
                 $(this).attr('href', href + '/en');
            // 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 BLINDADA) ---
(function() {
    var pageName = mw.config.get('wgPageName');
    var namespace = mw.config.get('wgNamespaceNumber'); // Pega o ID do tipo da página
   
    // 1. Identifica o idioma atual da URL
    var match = pageName.match(/\/(en|es|pl)$/);
    var urlLang = match ? match[1] : 'pt';
    var basePageName = pageName.replace(/\/(en|es|pl)$/, '');
    // Regra de Ouro: NUNCA redirecionar páginas de sistema (Special = -1, User = 2, MediaWiki = 8)
    var isSystemPage = (namespace === -1 || namespace === 8 || namespace === 2 || namespace === 3);
    // 2. Lógica de Redirecionamento Automático
    if (!isSystemPage && 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';
        }
        // Redireciona APENAS se a preferência for gringa e estivermos numa página normal
        if (prefLang && ['en', 'es', 'pl'].includes(prefLang)) {
            // Usa link 100% limpo para o SubTranslate funcionar
            window.location.replace('/' + basePageName + '/' + prefLang);
            return;
        }
    }
    // 3. Monta as URLs diretas LIMPAS para os botões das bandeiras
    var urlPT = '/' + basePageName;
    var urlEN = '/' + basePageName + '/en';
    var urlES = '/' + basePageName + '/es';
    var urlPL = '/' + basePageName + '/pl';
    var flags = '<div id="wiki-flags" style="text-align:center; padding:15px 0 5px 0; margin-bottom:10px;">' +
        '<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>' +
        '<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>' +
        '<a href="' + urlPL + '" id="flag-pl" style="font-size:26px; margin:0 4px; text-decoration:none; display:inline-block; padding:3px;" title="Polski">🇵🇱</a>' +
        '</div>';
    // 4. Injeta as bandeiras
    var checkExist = setInterval(function() {
        if ($('#p-navigation').length) {
            $('#p-navigation').before(flags);
            $('#flag-' + urlLang).addClass('flag-ativa');
            // 5. A MÁGICA QUE EVITA O LOOP: Grava a escolha ANTES de mudar de página
            $('#wiki-flags a').on('click', function(e) {
                e.preventDefault(); // Impede o link de abrir imediatamente
                var clickedLang = $(this).attr('id').replace('flag-', '');
               
                // Grava a escolha no PC na mesma hora
                localStorage.setItem('otp_lang', clickedLang);
               
                // Agora sim, libera o link para abrir
                window.location.href = $(this).attr('href');
            });
            clearInterval(checkExist);
        }
    }, 10);
})();

Edição atual tal como às 16h23min de 5 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 + ')');
        });
    });
});

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 BLINDADA) ---
(function() {
    var pageName = mw.config.get('wgPageName');
    var namespace = mw.config.get('wgNamespaceNumber'); // Pega o ID do tipo da página
    
    // 1. Identifica o idioma atual da URL
    var match = pageName.match(/\/(en|es|pl)$/);
    var urlLang = match ? match[1] : 'pt';
    var basePageName = pageName.replace(/\/(en|es|pl)$/, ''); 

    // Regra de Ouro: NUNCA redirecionar páginas de sistema (Special = -1, User = 2, MediaWiki = 8)
    var isSystemPage = (namespace === -1 || namespace === 8 || namespace === 2 || namespace === 3);

    // 2. Lógica de Redirecionamento Automático
    if (!isSystemPage && 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';
        }

        // Redireciona APENAS se a preferência for gringa e estivermos numa página normal
        if (prefLang && ['en', 'es', 'pl'].includes(prefLang)) {
            // Usa link 100% limpo para o SubTranslate funcionar
            window.location.replace('/' + basePageName + '/' + prefLang);
            return; 
        }
    }

    // 3. Monta as URLs diretas LIMPAS para os botões das bandeiras
    var urlPT = '/' + basePageName;
    var urlEN = '/' + basePageName + '/en';
    var urlES = '/' + basePageName + '/es';
    var urlPL = '/' + basePageName + '/pl';

    var flags = '<div id="wiki-flags" style="text-align:center; padding:15px 0 5px 0; margin-bottom:10px;">' +
        '<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>' +
        '<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>' +
        '<a href="' + urlPL + '" id="flag-pl" style="font-size:26px; margin:0 4px; text-decoration:none; display:inline-block; padding:3px;" title="Polski">🇵🇱</a>' +
        '</div>';

    // 4. Injeta as bandeiras
    var checkExist = setInterval(function() {
        if ($('#p-navigation').length) {
            $('#p-navigation').before(flags);
            $('#flag-' + urlLang).addClass('flag-ativa');

            // 5. A MÁGICA QUE EVITA O LOOP: Grava a escolha ANTES de mudar de página
            $('#wiki-flags a').on('click', function(e) {
                e.preventDefault(); // Impede o link de abrir imediatamente
                var clickedLang = $(this).attr('id').replace('flag-', '');
                
                // Grava a escolha no PC na mesma hora
                localStorage.setItem('otp_lang', clickedLang);
                
                // Agora sim, libera o link para abrir
                window.location.href = $(this).attr('href');
            });

            clearInterval(checkExist); 
        }
    }, 10); 
})();