MediaWiki:Common.js: Difference between revisions

From WIKI
Created page with "Any JavaScript here will be loaded for all users on every page load.: mw.hook('wikipage.content').add(function () { console.log("[Language Menu] Script started"); var path = mw.config.get("wgPageName"); console.log("[Language Menu] Current path:", path); var currentLang = ''; var base = path; var langs = ['pt', 'en', 'es']; // Detecta idioma pelo sufixo langs.forEach(function (lang) { var suffix = '/' + lang; if (path.toLowerCase().endsWit..."
 
No edit summary
Line 23: Line 23:
   if (!currentLang) currentLang = 'en';
   if (!currentLang) currentLang = 'en';


   // Labels e links
   // Labels
   var labels = {
   var labels = {
     'pt': 'Português',
     'pt': 'Português',
Line 30: Line 30:
   };
   };


   var links = {};
  // Links por padrão (apenas adiciona /lang)
   var links = {
    'pt': base + '/pt',
    'en': base,          // inglês é sempre sem sufixo
    'es': base + '/es'
  };
 
  // Corrige nomes da página principal
   if (base === 'Main_Page' || base === 'Página_principal') {
   if (base === 'Main_Page' || base === 'Página_principal') {
     links = {
     links = {
       'pt': 'Página_principal/pt',
       'pt': 'Main_Page/pt',
       'en': 'Main_Page',     // inglês é base
       'en': 'Main_Page',
       'es': 'Main_Page/es'
       'es': 'Main_Page/es'
    };
  } else {
    links = {
      'pt': base + '/pt',
      'en': base,            // inglês é sem sufixo
      'es': base + '/es'
     };
     };
   }
   }
Line 53: Line 54:
       el.textContent = labels[lang];
       el.textContent = labels[lang];
     } else {
     } else {
       el.innerHTML = '<a class="lang-menu-link" href="' + mw.util.getUrl(links[lang]) + '">' + labels[lang] + '</a>';
       el.innerHTML = '<a class="lang-menu-link" href="' +
        mw.util.getUrl(links[lang]) + '">' + labels[lang] + '</a>';
     }
     }
   }
   }

Revision as of 13:36, 17 September 2025

/* Any JavaScript here will be loaded for all users on every page load. */
mw.hook('wikipage.content').add(function () {
  console.log("[Language Menu] Script started");

  var path = mw.config.get("wgPageName");
  console.log("[Language Menu] Current path:", path);

  var currentLang = '';
  var base = path;
  var langs = ['pt', 'en', 'es'];

  // Detecta idioma pelo sufixo
  langs.forEach(function (lang) {
    var suffix = '/' + lang;
    if (path.toLowerCase().endsWith(suffix)) {
      currentLang = lang;
      base = path.slice(0, -suffix.length);
      console.log("[Language Menu] Detected language:", lang, "Base:", base);
    }
  });

  // Se não detectou idioma → assume inglês (default)
  if (!currentLang) currentLang = 'en';

  // Labels
  var labels = {
    'pt': 'Português',
    'en': 'English',
    'es': 'Español'
  };

  // Links por padrão (apenas adiciona /lang)
  var links = {
    'pt': base + '/pt',
    'en': base,          // inglês é sempre sem sufixo
    'es': base + '/es'
  };

  // Corrige nomes da página principal
  if (base === 'Main_Page' || base === 'Página_principal') {
    links = {
      'pt': 'Main_Page/pt',
      'en': 'Main_Page',
      'es': 'Main_Page/es'
    };
  }

  // Monta menu de idiomas
  function insertContent(id, lang) {
    var el = document.getElementById(id);
    if (!el) return;

    if (lang === currentLang) {
      el.textContent = labels[lang];
    } else {
      el.innerHTML = '<a class="lang-menu-link" href="' +
        mw.util.getUrl(links[lang]) + '">' + labels[lang] + '</a>';
    }
  }

  insertContent("link-pt", "pt");
  insertContent("link-en", "en");
  insertContent("link-es", "es");

  // 🌀 Reescreve links do conteúdo
  console.log("[Language Menu] Rewriting content links for:", currentLang);

  document.querySelectorAll('#mw-content-text a[href^="/"]').forEach(function (link) {
    if (link.classList.contains('lang-menu-link')) return; // ignora menu de idiomas

    var href = link.getAttribute('href');
    if (!href) return;

    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, ''));

    // Ignora âncoras e parâmetros
    if (href.includes('?') || href.includes('#')) return;

    // Ignora namespaces especiais
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;

    // Ignora se já tem idioma
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;

    // Adiciona idioma se não for inglês
    if (currentLang !== 'en') {
      var newHref = hrefNormalized + '/' + currentLang;
      link.setAttribute('href', newHref);
      console.log("[Language Menu] Link modificado:", href, "→", newHref);
    }
  });
});