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 184: Linha 184:
});
});


/* Adiciona o Google Translate ao menu pessoal no topo (Skin Vector) */
/* --- Tradutor na Barra Lateral (mw-panel) --- */
$(document).ready(function() {
$(document).ready(function() {
    // Cria o container para o Google Translate
     var defaultLang = 'pt'; // Idioma base
     var translateDiv = $('<div id="google_translate_element"></div>');


     // Insere o container no menu de ferramentas de usuário (canto superior direito)
     // 1. Cria o container do Google Translate oculto no corpo da página
    // Se quiser na barra lateral, mude '#p-personal ul' para '#p-navigation ul'
     $('body').append('<div id="google_translate_element" style="display:none;"></div>');
     $('#p-personal ul').prepend($('<li id="pt-translate"></li>').append(translateDiv));


    // Define a função de inicialização do Google
     window.googleTranslateElementInit = function() {
     window.googleTranslateElementInit = function() {
         new google.translate.TranslateElement({
         new google.translate.TranslateElement({
             pageLanguage: 'pt', // Mude para o idioma base do seu wiki (ex: 'en' para inglês)
             pageLanguage: defaultLang,
            layout: google.translate.TranslateElement.InlineLayout.SIMPLE,
            includedLanguages: 'pt,en,es,pl', // Carrega APENAS os idiomas que você pediu
             autoDisplay: false
             autoDisplay: false
         }, 'google_translate_element');
         }, 'google_translate_element');
     };
     };
    $.getScript("https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");


     // Carrega o script oficial do Google Translate
     // 2. Cria o menu lateral usando as classes nativas do MediaWiki para ficar idêntico aos outros menus
     $.getScript("//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");
    var sidebarMenu = `
    <div class="portal" role="navigation" id="p-lang-custom" aria-labelledby="p-lang-custom-label">
        <h3 id="p-lang-custom-label">Idiomas</h3>
        <div class="body">
            <ul>
                <li id="n-lang-pt"><a href="#" class="lang-btn" data-lang="pt">Português (Brasil)</a></li>
                <li id="n-lang-en"><a href="#" class="lang-btn" data-lang="en">English</a></li>
                <li id="n-lang-es"><a href="#" class="lang-btn" data-lang="es">Español</a></li>
                <li id="n-lang-pl"><a href="#" class="lang-btn" data-lang="pl">Polski</a></li>
            </ul>
        </div>
    </div>`;
 
    // 3. Insere o menu na barra lateral esquerda (#mw-panel).
    // Usamos 'append' para colocar no final da barra.
    // Se quiser logo abaixo do menu principal, troque $('#mw-panel').append por $('#p-navigation').after
    $('#mw-panel').append(sidebarMenu);
 
    // 4. Lógica para acionar a tradução ao clicar nos links
     $(document).on('click', '.lang-btn', function(e) {
        e.preventDefault();
        var targetLang = $(this).data('lang');
        var select = document.querySelector('.goog-te-combo');
 
        // Se clicar em Português, limpa o tradutor e volta ao original
        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;
        }
 
        // Aciona a tradução para os outros idiomas
        if (select) {
            select.value = targetLang;
            select.dispatchEvent(new Event('change'));
        } else {
            alert('O sistema de tradução está carregando. Por favor, aguarde um instante e tente novamente.');
        }
    });
});
});

Edição das 12h34min 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 + ')');
        });
    });
});

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

/* --- Tradutor na Barra Lateral (mw-panel) --- */
$(document).ready(function() {
    var defaultLang = 'pt'; // Idioma base

    // 1. Cria o container do Google Translate oculto no corpo da página
    $('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', // Carrega APENAS os idiomas que você pediu
            autoDisplay: false
        }, 'google_translate_element');
    };
    $.getScript("https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");

    // 2. Cria o menu lateral usando as classes nativas do MediaWiki para ficar idêntico aos outros menus
    var sidebarMenu = `
    <div class="portal" role="navigation" id="p-lang-custom" aria-labelledby="p-lang-custom-label">
        <h3 id="p-lang-custom-label">Idiomas</h3>
        <div class="body">
            <ul>
                <li id="n-lang-pt"><a href="#" class="lang-btn" data-lang="pt">Português (Brasil)</a></li>
                <li id="n-lang-en"><a href="#" class="lang-btn" data-lang="en">English</a></li>
                <li id="n-lang-es"><a href="#" class="lang-btn" data-lang="es">Español</a></li>
                <li id="n-lang-pl"><a href="#" class="lang-btn" data-lang="pl">Polski</a></li>
            </ul>
        </div>
    </div>`;

    // 3. Insere o menu na barra lateral esquerda (#mw-panel). 
    // Usamos 'append' para colocar no final da barra. 
    // Se quiser logo abaixo do menu principal, troque $('#mw-panel').append por $('#p-navigation').after
    $('#mw-panel').append(sidebarMenu);

    // 4. Lógica para acionar a tradução ao clicar nos links
    $(document).on('click', '.lang-btn', function(e) {
        e.preventDefault();
        var targetLang = $(this).data('lang');
        var select = document.querySelector('.goog-te-combo');

        // Se clicar em Português, limpa o tradutor e volta ao original
        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;
        }

        // Aciona a tradução para os outros idiomas
        if (select) {
            select.value = targetLang;
            select.dispatchEvent(new Event('change'));
        } else {
            alert('O sistema de tradução está carregando. Por favor, aguarde um instante e tente novamente.');
        }
    });
});