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

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 18: Linha 18:
       };
       };


       var currentTitle = (window.mw && mw.config && mw.config.get('wgPageName')) || '';
       // Obtener título desde la URL real, no desde wgPageName
      currentTitle = decodeURIComponent(currentTitle);
      const pathParts = decodeURIComponent(window.location.pathname).split('/index.php/')[1].split('/');
 
       const possibleLang = pathParts[pathParts.length - 1];
 
       const currentLang = langs.includes(possibleLang) ? possibleLang : 'pt';
       const langRegex = /\/(pt|en|es|pl)$/i;
       const baseTitle = langs.includes(possibleLang) ? pathParts.slice(0, -1).join('/') : pathParts.join('/');
       const currentLangMatch = currentTitle.match(langRegex);
      const currentLang = currentLangMatch ? currentLangMatch[1] : 'pt';
       const baseTitle = currentLangMatch ? currentTitle.replace(langRegex, '') : currentTitle;


       const preferedLang = localStorage.getItem('preferedLang');
       const preferedLang = localStorage.getItem('preferedLang');
Linha 31: Linha 28:
       const redirected = sessionStorage.getItem('langRedirectDone');
       const redirected = sessionStorage.getItem('langRedirectDone');


      // Redireccionamiento automático
       if (preferedLang && !alreadyInLang && !redirected) {
       if (preferedLang && !alreadyInLang && !redirected) {
         const targetTitle = baseTitle + (preferedLang === 'pt' ? '' : '/' + preferedLang);
         const targetTitle = baseTitle + (preferedLang === 'pt' ? '' : '/' + preferedLang);
         const baseUrl = (window.mw && mw.util && mw.util.getUrl) ? mw.util.getUrl(targetTitle) : '/index.php/' + encodeURIComponent(targetTitle);
         const baseUrl = '/index.php/' + encodeURIComponent(targetTitle);
 
         fetch(baseUrl, { method: 'HEAD' }).then(response => {
         fetch(baseUrl, { method: 'HEAD' }).then(response => {
           sessionStorage.setItem('langRedirectDone', '1');
           sessionStorage.setItem('langRedirectDone', '1');
           if (response.ok) {
           window.location.href = response.ok ? baseUrl : '/index.php/' + encodeURIComponent(baseTitle);
            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(() => {
         }).catch(() => {
           // Fallback por error de red
           sessionStorage.setItem('langRedirectDone', '1');
           const fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
           window.location.href = '/index.php/' + encodeURIComponent(baseTitle);
            ? mw.util.getUrl(baseTitle)
            : '/index.php/' + encodeURIComponent(baseTitle);
          window.location.href = fallbackUrl;
         });
         });
         return;
         return;
       }
       }


      // Contenedor de banderas
       var container = document.createElement('div');
       var container = document.createElement('div');
       container.className = 'language-buttons';
       container.className = 'language-buttons';
Linha 64: Linha 50:
       container.style.display = 'flex';
       container.style.display = 'flex';
       container.style.gap = '8px';
       container.style.gap = '8px';
      container.style.padding = '6px 10px';
      container.style.borderRadius = '8px';
       container.style.zIndex = '999';
       container.style.zIndex = '999';


      // botoes pra cada idioma
       langs.forEach(function (lang) {
       langs.forEach(function (lang) {
         var pageTitle = baseTitle + (lang === 'pt' ? '' : '/' + 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 fullUrl = '/index.php/' + encodeURIComponent(pageTitle);


         var link = document.createElement('a');
         var link = document.createElement('a');
Linha 87: Linha 70:
             } else {
             } else {
               sessionStorage.setItem('langRedirectDone', '1');
               sessionStorage.setItem('langRedirectDone', '1');
              const langNames = {
                es: 'Español',
                en: 'English',
                pl: 'Polski',
                pt: 'Português'
              };


              const langNames = { es: 'Español', en: 'English', pl: 'Polski' };
               const msgTranslations = {
               const msgTranslations = {
                 es: 'La versión en {lang} no está disponible.',
                 es: 'La versión en {lang} no está disponible.',
                 en: 'The {lang} version is not available.',
                 en: 'The {lang} version is not available.',
                 pl: 'Wersja w języku {lang} jest niedostępna.',
                 pl: 'Wersja w języku {lang} jest niedostępna.',
                 pt: 'A versão em {lang} não é disponível.'
                 pt: 'A versão em {lang} não está disponível.'
               };
               };


               if (lang !== 'pt') {
               if (lang !== 'pt') {
                const langNames = { es: 'Español', en: 'Inglés', pl: 'Polaco' };
                const msg = document.createElement('div');
                 const userLang = (navigator.language || 'en').substring(0, 2);
                 const userLang = (navigator.language || 'en').substring(0, 2);
                 const messageTemplate = msgTranslations[userLang] || msgTranslations['en'];
                 const messageTemplate = msgTranslations[userLang] || msgTranslations['en'];
                 const langLabel = langNames[lang] || lang;
                 const langLabel = langNames[lang] || lang;
                const msg = document.createElement('div');
                 msg.textContent = messageTemplate.replace('{lang}', langLabel);
                 msg.textContent = messageTemplate.replace('{lang}', langLabel);
                 msg.style.position = 'fixed';
                 msg.style.position = 'fixed';
Linha 123: Linha 99:
                 msg.style.opacity = '0';
                 msg.style.opacity = '0';
                 msg.style.transition = 'opacity 0.3s ease';
                 msg.style.transition = 'opacity 0.3s ease';
                 document.body.appendChild(msg);
                 document.body.appendChild(msg);
                 setTimeout(() => { msg.style.opacity = '1'; }, 10); // Fade in
                 setTimeout(() => { msg.style.opacity = '1'; }, 10);
 
                 setTimeout(() => {
                 setTimeout(() => {
                   msg.style.opacity = '0'; // Fade out
                   window.location.href = '/index.php/' + encodeURIComponent(baseTitle);
                  setTimeout(() => {
                 }, 1200);
                    msg.remove();
                    const fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
                      ? mw.util.getUrl(baseTitle)
                      : '/index.php/' + encodeURIComponent(baseTitle);
                    window.location.href = fallbackUrl;
                  }, 500);
                 }, 3000);
               } else {
               } else {
                 const fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
                 window.location.href = '/index.php/' + encodeURIComponent(baseTitle);
                  ? mw.util.getUrl(baseTitle)
                  : '/index.php/' + encodeURIComponent(baseTitle);
                window.location.href = fallbackUrl;
               }
               }
             }
             }
           }).catch(() => {
           }).catch(() => {
            const fallbackUrl = (window.mw && mw.util && mw.util.getUrl)
              ? mw.util.getUrl(baseTitle)
              : '/index.php/' + encodeURIComponent(baseTitle);
             sessionStorage.setItem('langRedirectDone', '1');
             sessionStorage.setItem('langRedirectDone', '1');
             window.location.href = fallbackUrl;
             window.location.href = '/index.php/' + encodeURIComponent(baseTitle);
           });
           });
         });
         });


         var img = document.createElement('img');
         var img = document.createElement('img');
Linha 177: Linha 136:
         container.appendChild(link);
         container.appendChild(link);
       });
       });


       document.body.appendChild(container);
       document.body.appendChild(container);

Edição das 01h13min de 1 de julho de 2025

<script>

 (function () {
   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 título desde la URL real, no desde wgPageName
     const pathParts = decodeURIComponent(window.location.pathname).split('/index.php/')[1].split('/');
     const possibleLang = pathParts[pathParts.length - 1];
     const currentLang = langs.includes(possibleLang) ? possibleLang : 'pt';
     const baseTitle = langs.includes(possibleLang) ? pathParts.slice(0, -1).join('/') : pathParts.join('/');
     const preferedLang = localStorage.getItem('preferedLang');
     const alreadyInLang = currentLang === preferedLang;
     const redirected = sessionStorage.getItem('langRedirectDone');
     // Redireccionamiento automático
     if (preferedLang && !alreadyInLang && !redirected) {
       const targetTitle = baseTitle + (preferedLang === 'pt' ?  : '/' + preferedLang);
       const baseUrl = '/index.php/' + encodeURIComponent(targetTitle);
       fetch(baseUrl, { method: 'HEAD' }).then(response => {
         sessionStorage.setItem('langRedirectDone', '1');
         window.location.href = response.ok ? baseUrl : '/index.php/' + encodeURIComponent(baseTitle);
       }).catch(() => {
         sessionStorage.setItem('langRedirectDone', '1');
         window.location.href = '/index.php/' + encodeURIComponent(baseTitle);
       });
       return;
     }
     // Contenedor de banderas
     var container = document.createElement('div');
     container.className = 'language-buttons';
     container.style.position = 'absolute';
     container.style.top = '1px';
     container.style.right = '438px';
     container.style.display = 'flex';
     container.style.gap = '8px';
     container.style.zIndex = '999';
     langs.forEach(function (lang) {
       var pageTitle = baseTitle + (lang === 'pt' ?  : '/' + lang);
       var fullUrl = '/index.php/' + encodeURIComponent(pageTitle);
       var link = document.createElement('a');
       link.href = '#';
       link.title = lang.toUpperCase();
       link.addEventListener('click', function (e) {
         e.preventDefault();
         fetch(fullUrl, { method: 'HEAD' }).then(response => {
           if (response.ok) {
             localStorage.setItem('preferedLang', lang);
             sessionStorage.setItem('langRedirectDone', '1');
             window.location.href = fullUrl;
           } else {
             sessionStorage.setItem('langRedirectDone', '1');
             const langNames = { es: 'Español', en: 'English', pl: 'Polski' };
             const msgTranslations = {
               es: 'La versión en {lang} no está disponible.',
               en: 'The {lang} version is not available.',
               pl: 'Wersja w języku {lang} jest niedostępna.',
               pt: 'A versão em {lang} não está disponível.'
             };
             if (lang !== 'pt') {
               const userLang = (navigator.language || 'en').substring(0, 2);
               const messageTemplate = msgTranslations[userLang] || msgTranslations['en'];
               const langLabel = langNames[lang] || lang;
               const msg = document.createElement('div');
               msg.textContent = messageTemplate.replace('{lang}', langLabel);
               msg.style.position = 'fixed';
               msg.style.top = '20px';
               msg.style.left = '50%';
               msg.style.transform = 'translateX(-50%)';
               msg.style.background = '#ffdddd';
               msg.style.color = '#a00';
               msg.style.padding = '12px 24px';
               msg.style.border = '1px solid #a00';
               msg.style.borderRadius = '8px';
               msg.style.fontSize = '16px';
               msg.style.zIndex = '1000';
               msg.style.boxShadow = '0 0 6px rgba(0,0,0,0.2)';
               msg.style.opacity = '0';
               msg.style.transition = 'opacity 0.3s ease';
               document.body.appendChild(msg);
               setTimeout(() => { msg.style.opacity = '1'; }, 10);
               setTimeout(() => {
                 window.location.href = '/index.php/' + encodeURIComponent(baseTitle);
               }, 1200);
             } else {
               window.location.href = '/index.php/' + encodeURIComponent(baseTitle);
             }
           }
         }).catch(() => {
           sessionStorage.setItem('langRedirectDone', '1');
           window.location.href = '/index.php/' + encodeURIComponent(baseTitle);
         });
       });
       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>