Mudanças entre as edições de "Widget:Droflax"

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 38: Linha 38:


     if (preferedLang && !alreadyInLang && !redirected) {
     if (preferedLang && !alreadyInLang && !redirected) {
      const targetTitle = baseTitle + (preferedLang === 'pt' ? '' : '/' + preferedLang);
  const targetTitle = baseTitle + (preferedLang === 'pt' ? '' : '/' + preferedLang);
      sessionStorage.setItem('langRedirectDone', '1');
  const baseUrl = (window.mw && mw.util && mw.util.getUrl) ? mw.util.getUrl(targetTitle) : '/index.php/' + encodeURIComponent(targetTitle);
      // Usar mw.util si está disponible, si no, construir URL manualmente
 
      var 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;
       window.location.href = baseUrl;
       return;
    } 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
     // Crear contenedor

Edição das 00h21min 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();
   localStorage.setItem('preferedLang', lang);
   sessionStorage.removeItem('langRedirectDone');
   // Validar si existe la página traducida
   fetch(fullUrl, { method: 'HEAD' }).then(response => {
     if (response.ok) {
       window.location.href = fullUrl;
     } else {
       // Página no existe, ir a la base sin /lang
       var fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
         ? mw.util.getUrl(baseTitle)
         : '/index.php/' + encodeURIComponent(baseTitle);
       window.location.href = fallbackUrl;
     }
   }).catch(() => {
     // En caso de error en fetch, también ir al base
     var fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
       ? mw.util.getUrl(baseTitle)
       : '/index.php/' + encodeURIComponent(baseTitle);
     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>