1 881
edições
Sem resumo de edição |
Sem resumo de edição |
||
| Linha 184: | Linha 184: | ||
}); | }); | ||
// --- SISTEMA DE BANDEIRAS, CACHE E REDIRECIONAMENTO (VERSÃO | // --- 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)) { | ||
// | // Usa link 100% limpo para o SubTranslate funcionar | ||
window.location.replace('/' + basePageName + '/ | window.location.replace('/' + basePageName + '/' + prefLang); | ||
return; | return; | ||
} | } | ||
} | } | ||
// 3. Monta as URLs diretas | // 3. Monta as URLs diretas LIMPAS para os botões das bandeiras | ||
var urlPT = '/' + basePageName | var urlPT = '/' + basePageName; | ||
var urlEN = '/' + basePageName + '/ | var urlEN = '/' + basePageName + '/en'; | ||
var urlES = '/' + basePageName + '/ | var urlES = '/' + basePageName + '/es'; | ||
var urlPL = '/' + basePageName + '/ | 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 | // 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'); | ||
// | // 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); | clearInterval(checkExist); | ||
} | } | ||
}, 10); | }, 10); | ||
})(); | })(); | ||