MediaWiki:Common.js: Difference between revisions

From WIKI
No edit summary
No edit summary
Line 30: Line 30:
   };
   };


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


   // Corrige nomes da página principal
   // Página principal → sempre forçar "Main_Page"
   if (base === 'Main_Page' || base === 'Página_principal') {
   if (base === 'Main_Page' || base === 'Página_principal') {
     links = {
     links = {

Revision as of 13:38, 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 padrão
  var links = {
    'pt': base + '/pt',
    'en': base,
    'es': base + '/es'
  };

  // Página principal → sempre forçar "Main_Page"
  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);
    }
  });
});