Ir al contenido

MediaWiki:Common.js

De Caballipedia

Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.

  • Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
  • Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
  • Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
$(document).ready(function () {
  // Añadir clase anon-user al <body> para usuarios no logueados
  if (mw.config.get('wgUserName') === null) {
    document.body.classList.add('anon-user');
  }

  const skin = mw.config.get('skin');
  const user = mw.config.get('wgUserName');
  const action = mw.config.get('wgAction');

  if (action === 'view') {
    if (user === null && skin === 'vector-2022') {
      console.log("🛠️ Ocultando elementos para usuarios anónimos en Vector-2022");

      $('#vector-page-tools, #vector-page-tools-dropdown-checkbox, label[for="vector-page-tools-dropdown-checkbox"]').hide();

      // Ocultar pestañas principales que queremos para anónimos
      $('#ca-view, #ca-history').hide();

      $('#ca-nstab-main, #ca-nstab-category, #ca-nstab-special, #ca-nstab-image').closest('li').hide();
    }

    if (user !== null && skin === 'vector-2022') {
      console.log("🔧 Configurando interfaz para usuario logueado");

      function ocultarElementosUsuario() {
        // Ocultar lista de seguimiento y mensajes personales
        $('#pt-watchlist-2').hide();
        $('#pt-mytalk').hide();

        // Ocultar sólo botón Discusión en menú principal (no tocamos editar ni otros)
        $('#ca-talk').hide();
      }

      ocultarElementosUsuario();

      const observer = new MutationObserver(ocultarElementosUsuario);
      observer.observe(document.body, { childList: true, subtree: true });

      // Añadir botón "Ejecutar tareas"
      mw.util.addPortletLink(
        'p-tb',
        '#',
        'Ejecutar tareas',
        'pt-runjobs',
        'Ejecutar tareas pendientes desde el navegador'
      );

      $('#pt-runjobs').on('click', function (e) {
        e.preventDefault();

        if ($('#runjobs-msg').length) return;

        const heading = document.querySelector('#firstHeading');
        if (!heading) return;

        const $msg = $(`
          <div id="runjobs-msg" style="margin: 1em 0; font-size: 90%; display: flex; align-items: center; gap: 1em;">
            ¿Ejecutar las tareas pendientes ahora?
            <button id="runjobs-confirm">✅ Sí</button>
            <button id="runjobs-cancel">❌ No</button>
          </div>
        `);
        $(heading).after($msg);

        $('#runjobs-cancel').on('click', () => {
          $('#runjobs-msg').remove();
        });

        $('#runjobs-confirm').on('click', () => {
          $('#runjobs-msg').html('⏳ Ejecutando tareas...');

          fetch('/trigger-jobs.php')
            .then(res => res.text())
            .then(msg => {
              $('#runjobs-msg').html(`
                <div style="font-size: 90%; display: flex; align-items: center; gap: 1em;">
                  ${msg.trim()}
                  <button id="runjobs-close">Aceptar</button>
                </div>
              `);

              $('#runjobs-close').on('click', () => {
                $('#runjobs-msg').remove();
              });
            })
            .catch(err => {
              $('#runjobs-msg').html(`
                <div style="display: flex; align-items: center; gap: 1em; font-size: 90%;">
                  ❌ Error de red: ${err}
                  <button id="runjobs-close">Aceptar</button>
                </div>
              `);

              $('#runjobs-close').on('click', () => {
                $('#runjobs-msg').remove();
              });
            });
        });
      });

      // Mover botón "Ejecutar tareas" debajo de "Reemplazar texto"
      const runJobsItem = $('#pt-runjobs').closest('li');
      const target = $('a:contains("Reemplazar texto")').closest('li');
      if (runJobsItem.length && target.length) {
        runJobsItem.insertAfter(target);
      }
    }
  }

  // MutationObserver para eliminar sólo botones específicos en barra sticky y menús desplegables
  new MutationObserver(() => {
    // Selector exacto para solo botones que queremos ocultar (sin tocar "Editar" ni "Guardar")
    const selectors = [
      // Discusión y variantes en sticky header y menús
      '.mw-sticky-header-element #ca-talk, #p-views #ca-talk',
      '.mw-sticky-header-element a[title*="Discusión"], #p-views a[title*="Discusión"]',
      // Lista de seguimiento
      '.mw-sticky-header-element #ca-watch, #p-views #ca-watch',
      '.mw-sticky-header-element #ca-unwatch, #p-views #ca-unwatch',
      // Proteger/Desproteger
      '.mw-sticky-header-element #ca-protect, #p-views #ca-protect',
      '.mw-sticky-header-element #ca-unprotect, #p-views #ca-unprotect'
    ];

    selectors.forEach(sel => {
      document.querySelectorAll(sel).forEach(el => {
        const li = el.closest('li');
        if (li) {
          li.remove();
        } else {
          el.remove();
        }
      });
    });
  }).observe(document.body, { childList: true, subtree: true });
});