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


// --- SISTEMA DE BANDEIRAS, CACHE E REDIRECIONAMENTO (VERSÃO BLINDADA) ---
/* Adiciona o Google Translate ao menu pessoal no topo (Skin Vector) */
(function() {
$(document).ready(function() {
     var pageName = mw.config.get('wgPageName');
     // Cria o container para o Google Translate
    var namespace = mw.config.get('wgNamespaceNumber'); // Pega o ID do tipo da página
     var translateDiv = $('<div id="google_translate_element"></div>');
   
    // 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)
     // Insere o container no menu de ferramentas de usuário (canto superior direito)
     var isSystemPage = (namespace === -1 || namespace === 8 || namespace === 2 || namespace === 3);
    // Se quiser na barra lateral, mude '#p-personal ul' para '#p-navigation ul'
     $('#p-personal ul').prepend($('<li id="pt-translate"></li>').append(translateDiv));


     // 2. Lógica de Redirecionamento Automático
     // Define a função de inicialização do Google
     if (!isSystemPage && urlLang === 'pt') {  
     window.googleTranslateElementInit = function() {
         var prefLang = localStorage.getItem('otp_lang');
         new google.translate.TranslateElement({
       
             pageLanguage: 'pt', // Mude para o idioma base do seu wiki (ex: 'en' para inglês)
        if (!prefLang) {
             layout: google.translate.TranslateElement.InlineLayout.SIMPLE,
             var browserLang = navigator.language || navigator.userLanguage;
             autoDisplay: false
            if (browserLang.startsWith('en')) prefLang = 'en';
        }, 'google_translate_element');
             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
    // Carrega o script oficial do Google Translate
        if (prefLang && ['en', 'es', 'pl'].includes(prefLang)) {
     $.getScript("//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");
            // 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);
})();

Menu de navegação