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

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 TURBO) ---
// --- SISTEMA DE BANDEIRAS, CACHE E REDIRECIONAMENTO (VERSÃO BLINDADA) ---
(function() {
(function() {
     var pageName = mw.config.get('wgPageName');
     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
     // 1. Identifica o idioma atual da URL
     var match = pageName.match(/\/(en|es|pl)$/);
     var match = pageName.match(/\/(en|es|pl)$/);
     var urlLang = match ? match[1] : 'pt';
     var urlLang = match ? match[1] : 'pt';
     var basePageName = pageName.replace(/\/(en|es|pl)$/, '');  
     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
     // 2. Lógica de Redirecionamento Automático
     if (urlLang === 'pt') {  
     if (!isSystemPage && urlLang === 'pt') {  
         var prefLang = localStorage.getItem('otp_lang');
         var prefLang = localStorage.getItem('otp_lang');
       
         if (!prefLang) {
         if (!prefLang) {
             var browserLang = navigator.language || navigator.userLanguage;
             var browserLang = navigator.language || navigator.userLanguage;
Linha 203: Linha 208:
         }
         }


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


     // 3. Monta as URLs diretas (Sem depender de pacotes externos do MediaWiki)
     // 3. Monta as URLs diretas LIMPAS para os botões das bandeiras
     var urlPT = '/' + basePageName + '?uselang=pt-br';
     var urlPT = '/' + basePageName;
     var urlEN = '/' + basePageName + '/en?uselang=en';
     var urlEN = '/' + basePageName + '/en';
     var urlES = '/' + basePageName + '/es?uselang=es';
     var urlES = '/' + basePageName + '/es';
     var urlPL = '/' + basePageName + '/pl?uselang=pl';
     var urlPL = '/' + basePageName + '/pl';


     var flags = '<div id="wiki-flags" style="text-align:center; padding:15px 0 5px 0; margin-bottom:10px;">' +
     var flags = '<div id="wiki-flags" style="text-align:center; padding:15px 0 5px 0; margin-bottom:10px;">' +
Linha 223: Linha 229:
         '</div>';
         '</div>';


     // 4. Injeta as bandeiras no exato milissegundo que o menu surgir na tela
     // 4. Injeta as bandeiras
     var checkExist = setInterval(function() {
     var checkExist = setInterval(function() {
         if ($('#p-navigation').length) {
         if ($('#p-navigation').length) {
Linha 229: Linha 235:
             $('#flag-' + urlLang).addClass('flag-ativa');
             $('#flag-' + urlLang).addClass('flag-ativa');


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


             clearInterval(checkExist); // Para o timer de verificação
             clearInterval(checkExist);  
         }
         }
     }, 10); // Checa a cada 10 milissegundos
     }, 10);  
})();
})();