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

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 1: Linha 1:
<script>
<script>
mw.loader.using(['jquery'], function () {
(function () {
   $(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 langs = ['pt', 'en', 'es', 'pl'];
     const langFlags = {
     const langFlags = {
Linha 10: Linha 19:
     };
     };


     const currentTitle = mw.config.get('wgPageName');
     // Obtener el nombre de la página actual (wgPageName)
     const baseTitle = currentTitle.replace(/\/(pt|en|es|pl)$/, '');
    // MediaWiki inserta una variable global mw.config, sino se puede adaptar
     const currentLang = currentTitle.match(/\/(pt|en|es|pl)$/)?.[1] || 'pt';
    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 preferedLang = localStorage.getItem('preferedLang');
     const alreadyInLang = currentLang === preferedLang;
     const alreadyInLang = currentLang === preferedLang;
Linha 21: Linha 40:
       const targetTitle = baseTitle + (preferedLang === 'pt' ? '' : '/' + preferedLang);
       const targetTitle = baseTitle + (preferedLang === 'pt' ? '' : '/' + preferedLang);
       sessionStorage.setItem('langRedirectDone', '1');
       sessionStorage.setItem('langRedirectDone', '1');
       window.location.href = mw.util.getUrl(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);
      window.location.href = baseUrl;
       return;
       return;
     }
     }


     const $container = $('<div>').addClass('language-buttons').css({
     // Crear contenedor
      position: 'fixed',
    var container = document.createElement('div');
      top: '20px',
    container.className = 'language-buttons';
      right: '20px',
    container.style.position = 'fixed';
      display: 'flex',
    container.style.top = '20px';
      gap: '8px',
    container.style.right = '20px';
      background: '#ffffffcc',
    container.style.display = 'flex';
      padding: '6px 10px',
    container.style.gap = '8px';
      borderRadius: '8px',
    container.style.background = '#ffffffcc';
      boxShadow: '0 0 6px rgba(0,0,0,0.2)',
    container.style.padding = '6px 10px';
      zIndex: 999
    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 link = document.createElement('a');
      link.href = (window.mw && mw.util && mw.util.getUrl) ? mw.util.getUrl(pageTitle) : '/index.php/' + encodeURIComponent(pageTitle);
      link.title = lang.toUpperCase();
 
      // Al hacer clic, guardar preferencia de idioma
      link.addEventListener('click', function() {
        localStorage.setItem('preferedLang', lang);
        sessionStorage.removeItem('langRedirectDone');
      });


    langs.forEach(lang => {
      var img = document.createElement('img');
       const pageTitle = baseTitle + (lang === 'pt' ? '' : '/' + lang);
       img.src = langFlags[lang];
       const $link = $('<a>')
      img.style.width = '32px';
        .attr('href', mw.util.getUrl(pageTitle))
       img.style.height = '24px';
        .attr('title', lang.toUpperCase())
      img.style.borderRadius = '6px';
        .on('click', function () {
      img.style.border = (lang === currentLang) ? '2px solid #333' : '1px solid #ccc';
          localStorage.setItem('preferedLang', lang);
      img.style.transition = 'transform 0.2s ease';
          sessionStorage.removeItem('langRedirectDone');
      img.style.objectFit = 'cover';
        });
      img.style.cursor = 'pointer';


       const $img = $('<img>')
       // Hover effect con JS puro
         .attr('src', langFlags[lang])
      img.addEventListener('mouseenter', function() {
         .css({
         img.style.transform = 'scale(1.1)';
          width: '32px',
         img.style.borderColor = '#888';
          height: '24px',
      });
          borderRadius: '6px',
      img.addEventListener('mouseleave', function() {
          border: lang === currentLang ? '2px solid #333' : '1px solid #ccc',
        img.style.transform = 'scale(1)';
          transition: 'transform 0.2s',
        img.style.borderColor = (lang === currentLang) ? '#333' : '#ccc';
          objectFit: 'cover'
      });
        })
        .hover(
          function () { $(this).css('transform', 'scale(1.1)'); },
          function () { $(this).css('transform', 'scale(1)'); }
        );


       $link.append($img);
       link.appendChild(img);
       $container.append($link);
       container.appendChild(link);
     });
     });


     $('body').append($container);
     document.body.appendChild(container);
   });
   });
});
})();
</script>
</script>

Edição das 00h12min 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);
     sessionStorage.setItem('langRedirectDone', '1');
     // 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);
     window.location.href = baseUrl;
     return;
   }
   // 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 link = document.createElement('a');
     link.href = (window.mw && mw.util && mw.util.getUrl) ? mw.util.getUrl(pageTitle) : '/index.php/' + encodeURIComponent(pageTitle);
     link.title = lang.toUpperCase();
     // Al hacer clic, guardar preferencia de idioma
     link.addEventListener('click', function() {
       localStorage.setItem('preferedLang', lang);
       sessionStorage.removeItem('langRedirectDone');
     });
     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';
     // Hover effect con JS puro
     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>