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

Ir para navegação Ir para pesquisar
sem sumário de edição
Sem resumo de edição
Sem resumo de edição
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');
                    }
                }
            }
        });
    }
});


/* --- Tradutor na Barra Lateral (mw-panel) --- */
/* --- Tradutor Integrado com a API Oficial do MediaWiki --- */
$(document).ready(function() {
mw.loader.using(['mediawiki.util']).then(function() {
     var defaultLang = 'pt'; // Idioma base
     var defaultLang = 'pt';


     // 1. Cria o container do Google Translate oculto no corpo da página
     // 1. Carrega o Google Translate invisível
     $('body').append('<div id="google_translate_element" style="display:none;"></div>');
     $('body').append('<div id="google_translate_element" style="display:none;"></div>');
     window.googleTranslateElementInit = function() {
     window.googleTranslateElementInit = function() {
         new google.translate.TranslateElement({
         new google.translate.TranslateElement({
             pageLanguage: defaultLang,
             pageLanguage: defaultLang,
             includedLanguages: 'pt,en,es,pl', // Carrega APENAS os idiomas que você pediu
             includedLanguages: 'pt,en,es,pl',
             autoDisplay: false
             autoDisplay: false
         }, 'google_translate_element');
         }, 'google_translate_element');
Linha 200: Linha 127:
     $.getScript("https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");
     $.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
     // 2. Adiciona os links no menu "Navegação" (p-navigation) usando a API nativa
     var sidebarMenu = `
     // Se preferir no menu "Ferramentas", troque 'p-navigation' por 'p-tb'
    <div class="portal" role="navigation" id="p-lang-custom" aria-labelledby="p-lang-custom-label">
    var ptLink = mw.util.addPortletLink('p-navigation', '#', 'Português (Brasil)', 'n-lang-pt', 'Mudar para Português');
        <h3 id="p-lang-custom-label">Idiomas</h3>
    var enLink = mw.util.addPortletLink('p-navigation', '#', 'English', 'n-lang-en', 'Change to English');
        <div class="body">
    var esLink = mw.util.addPortletLink('p-navigation', '#', 'Español', 'n-lang-es', 'Cambiar a Español');
            <ul>
    var plLink = mw.util.addPortletLink('p-navigation', '#', 'Polski', 'n-lang-pl', 'Zmień na Polski');
                <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).  
     // 3. Prepara os links para o script de tradução
     // Usamos 'append' para colocar no final da barra.  
    $(ptLink).find('a').addClass('lang-btn').attr('data-lang', 'pt');
     // Se quiser logo abaixo do menu principal, troque $('#mw-panel').append por $('#p-navigation').after
     $(enLink).find('a').addClass('lang-btn').attr('data-lang', 'en');
     $('#mw-panel').append(sidebarMenu);
     $(esLink).find('a').addClass('lang-btn').attr('data-lang', 'es');
     $(plLink).find('a').addClass('lang-btn').attr('data-lang', 'pl');


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


         // Se clicar em Português, limpa o tradutor e volta ao original
         // Retorna ao original (PT)
         if (targetLang === defaultLang) {
         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=/;";
Linha 233: Linha 154:
         }
         }


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

Menu de navegação