Mudanças entre as edições de "Widget:Droflax"
Ir para navegação
Ir para pesquisar
| Linha 88: | Linha 88: | ||
link.addEventListener('click', function (e) { | link.addEventListener('click', function (e) { | ||
e.preventDefault(); | |||
fetch(fullUrl, { method: 'HEAD' }).then(response => { | |||
if (response.ok) { | |||
// Solo guardamos preferencia si existe la página | |||
localStorage.setItem('preferedLang', lang); | |||
sessionStorage.setItem('langRedirectDone', '1'); | |||
window.location.href = fullUrl; | |||
} else { | |||
// No guardamos idioma para evitar redirecciones futuras | |||
} | |||
// | |||
var fallbackUrl = (window.mw && mw.util && mw.util.getUrl) | var fallbackUrl = (window.mw && mw.util && mw.util.getUrl) | ||
? mw.util.getUrl(baseTitle) | ? mw.util.getUrl(baseTitle) | ||
: '/index.php/' + encodeURIComponent(baseTitle); | : '/index.php/' + encodeURIComponent(baseTitle); | ||
sessionStorage.setItem('langRedirectDone', '1'); | |||
window.location.href = fallbackUrl; | window.location.href = fallbackUrl; | ||
}); | } | ||
}).catch(() => { | |||
var fallbackUrl = (window.mw && mw.util && mw.util.getUrl) | |||
? mw.util.getUrl(baseTitle) | |||
: '/index.php/' + encodeURIComponent(baseTitle); | |||
sessionStorage.setItem('langRedirectDone', '1'); | |||
window.location.href = fallbackUrl; | |||
}); | }); | ||
}); | |||
var img = document.createElement('img'); | var img = document.createElement('img'); | ||
Edição das 00h23min de 1 de julho de 2025
<script> (function () {
// Esperar a que el DOM esté listo
function onReady(fn) {
if (document.readyState !== 'loading') {
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}
onReady(function () {
const langs = ['pt', 'en', 'es', 'pl'];
const langFlags = {
pt: 'https://upload.wikimedia.org/wikipedia/en/0/05/Flag_of_Brazil.svg',
en: 'https://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg',
es: 'https://upload.wikimedia.org/wikipedia/en/9/9a/Flag_of_Spain.svg',
pl: 'https://upload.wikimedia.org/wikipedia/en/1/12/Flag_of_Poland.svg'
};
// Obtener el nombre de la página actual (wgPageName)
// MediaWiki inserta una variable global mw.config, sino se puede adaptar
var currentTitle = (window.mw && mw.config && mw.config.get('wgPageName')) || ;
if (!currentTitle) {
// fallback, intentar sacar el título de la URL
currentTitle = decodeURIComponent(window.location.pathname.split('/').pop());
}
const langRegex = /\/(pt|en|es|pl)$/; const currentLangMatch = currentTitle.match(langRegex); const currentLang = currentLangMatch ? currentLangMatch[1] : 'pt'; const baseTitle = currentTitle.replace(langRegex, );
// Redirección automática basada en localStorage y sessionStorage
const preferedLang = localStorage.getItem('preferedLang');
const alreadyInLang = currentLang === preferedLang;
const redirected = sessionStorage.getItem('langRedirectDone');
if (preferedLang && !alreadyInLang && !redirected) {
const targetTitle = baseTitle + (preferedLang === 'pt' ? : '/' + preferedLang);
const baseUrl = (window.mw && mw.util && mw.util.getUrl) ? mw.util.getUrl(targetTitle) : '/index.php/' + encodeURIComponent(targetTitle);
fetch(baseUrl, { method: 'HEAD' }).then(response => {
sessionStorage.setItem('langRedirectDone', '1');
if (response.ok) {
window.location.href = baseUrl;
} else {
// Fallback a página base si no existe traducción
const fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
? mw.util.getUrl(baseTitle)
: '/index.php/' + encodeURIComponent(baseTitle);
window.location.href = fallbackUrl;
}
}).catch(() => {
// Fallback por error de red
const fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
? mw.util.getUrl(baseTitle)
: '/index.php/' + encodeURIComponent(baseTitle);
window.location.href = fallbackUrl;
});
return; // evitar que el resto del código se ejecute aún
}
// Crear contenedor
var container = document.createElement('div');
container.className = 'language-buttons';
container.style.position = 'fixed';
container.style.top = '20px';
container.style.right = '20px';
container.style.display = 'flex';
container.style.gap = '8px';
container.style.background = '#ffffffcc';
container.style.padding = '6px 10px';
container.style.borderRadius = '8px';
container.style.boxShadow = '0 0 6px rgba(0,0,0,0.2)';
container.style.zIndex = '999';
// Crear botones para cada idioma
langs.forEach(function(lang) {
var pageTitle = baseTitle + (lang === 'pt' ? : '/' + lang);
var fullUrl = (window.mw && mw.util && mw.util.getUrl) ? mw.util.getUrl(pageTitle) : '/index.php/' + encodeURIComponent(pageTitle);
var link = document.createElement('a');
link.href = '#'; // evitamos navegación inmediata
link.title = lang.toUpperCase();
link.addEventListener('click', function (e) {
e.preventDefault();
fetch(fullUrl, { method: 'HEAD' }).then(response => {
if (response.ok) {
// Solo guardamos preferencia si existe la página
localStorage.setItem('preferedLang', lang);
sessionStorage.setItem('langRedirectDone', '1');
window.location.href = fullUrl;
} else {
// No guardamos idioma para evitar redirecciones futuras
var fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
? mw.util.getUrl(baseTitle)
: '/index.php/' + encodeURIComponent(baseTitle);
sessionStorage.setItem('langRedirectDone', '1');
window.location.href = fallbackUrl;
}
}).catch(() => {
var fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
? mw.util.getUrl(baseTitle)
: '/index.php/' + encodeURIComponent(baseTitle);
sessionStorage.setItem('langRedirectDone', '1');
window.location.href = fallbackUrl;
});
});
var img = document.createElement('img');
img.src = langFlags[lang];
img.style.width = '32px';
img.style.height = '24px';
img.style.borderRadius = '6px';
img.style.border = (lang === currentLang) ? '2px solid #333' : '1px solid #ccc';
img.style.transition = 'transform 0.2s ease';
img.style.objectFit = 'cover';
img.style.cursor = 'pointer';
img.addEventListener('mouseenter', function () {
img.style.transform = 'scale(1.1)';
img.style.borderColor = '#888';
});
img.addEventListener('mouseleave', function () {
img.style.transform = 'scale(1)';
img.style.borderColor = (lang === currentLang) ? '#333' : '#ccc';
});
link.appendChild(img); container.appendChild(link);
});
document.body.appendChild(container); });
})(); </script>