MediaWiki:Common.js

From WIKI
Revision as of 13:48, 17 September 2025 by Admin (talk | contribs)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* 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';

  // 🔧 Força mapeamento da página principal para "Main_Page"
  if (base === 'Main_Page' || base === 'Página_principal') {
    base = 'Main_Page';
  }

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

  // Links finais
  var links = {
    'pt': base + '/pt',
    'en': base,
    'es': base + '/es'
  };

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

    var href = '/doc/' + links[lang]; // Gera URL corretamente
    if (lang === currentLang) {
      el.textContent = labels[lang];
    } else {
      el.innerHTML = '<a class="lang-menu-link" href="' + href + '">' + labels[lang] + '</a>';
    }
  }

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

  // 🌀 Reescreve links do conteúdo para o idioma atual
  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);
    }
  });
});