MediaWiki:Common.js: Difference between revisions

From SZ
Jump to navigation Jump to search
No edit summary
Tag: Reverted
No edit summary
 
(43 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
/**
* Collapsible Sidebar (Debug Build) - Patched for Vector & Vector 2022
* Logs everything to console for verification
*/


/*
$(function () {
    // Add toggle link
    var $sidebar = $('#mw-panel');
    var $toggleLink = $('<a href="#" id="collapse-sidebar">Toggle Sidebar</a>')
        .css({ display: 'block', margin: '5px', cursor: 'pointer' });


/* Collapsible sidebar functionality */
     $('#p-logo').after($toggleLink);
$(document).ready(function() {
    // Initialize collapsible elements
     $('.mw-collapsible').each(function() {
        var $this = $(this);
        var $content = $this.find('.mw-collapsible-content');
        var $header = $this.prev();


         // Create toggle button
    $toggleLink.click(function (e) {
         var $toggleBtn = $('<span class="mw-collapsible-toggle">[+]</span>');
         e.preventDefault();
         $sidebar.toggleClass('collapsed');
    });
});
*/
 
/*
 
(function () {
  window.MWSidebarDebug = true;


        // Add toggle button to header
  function log() {
        if ($header.length && $header.is('li')) {
    if (window.MWSidebarDebug) console.log('[SidebarCollapsible]', ...arguments);
            $header.append(' ').append($toggleBtn);
  }
        } else {
  function warn() {
            $this.before($('<div class="mw-collapsible-header"></div>').append($toggleBtn));
    if (window.MWSidebarDebug) console.warn('[SidebarCollapsible]', ...arguments);
        }
  }


        // Set initial state
  var skin = mw.config.get('skin');
        if ($this.hasClass('mw-collapsed')) {
  log('Init start. Detected skin =', skin);
            $content.hide();
            $toggleBtn.text('[+]');
        } else {
            $content.show();
            $toggleBtn.text('[-]');
        }


        // Toggle functionality
  function findPanels($root) {
        $toggleBtn.click(function(e) {
    // Match both Vector and Vector 2022 classes
            e.preventDefault();
    var $panels = $root.find('#mw-panel .vector-menu-portal, #mw-panel .vector-menu.mw-portlet');
            e.stopPropagation();
    log('Panels found:', $panels.length);
    return $panels;
  }


            if ($content.is(':visible')) {
  function initOnce($root) {
                $content.slideUp();
    var $panels = findPanels($root);
                $toggleBtn.text('[+]');
                $this.addClass('mw-collapsed');
            } else {
                $content.slideDown();
                $toggleBtn.text('[-]');
                $this.removeClass('mw-collapsed');
            }
        });
    });
});


/* Additional CSS for better styling */
    if (!$panels.length) {
mw.loader.using('mediawiki.util', function() {
      warn('No sidebar panels found using selectors for Vector/Vector-2022');
    mw.util.addCSS(`
      return;
        .mw-collapsible-toggle {
    }
            cursor: pointer;
            font-weight: bold;
            color: #0645ad;
            margin-left: 5px;
        }


        .mw-collapsible-toggle:hover {
    $panels.each(function (idx, el) {
            text-decoration: underline;
      var $panel = $(el);
        }
      var id = $panel.attr('id') || ('panel#' + idx);
      var $list = $panel.find('> .vector-menu-content > .vector-menu-content-list, > .body > ul').first();


        .mw-collapsible-content {
      if (!$list.length) {
            margin-top: 5px;
        warn('No list in panel:', id);
         }
         return;
      }


        .mw-collapsible.mw-collapsed .mw-collapsible-content {
      var $items = $list.children('li');
            display: none;
      log('Panel', id, ':', $items.length, 'top-level item(s)');
        }
    `);
});
/* Collapsible sidebar functionality */
$(document).ready(function() {
    // Initialize collapsible elements
    $('.mw-collapsible').each(function() {
        var $this = $(this);
        var $content = $this.find('.mw-collapsible-content');
        var $header = $this.prev();


         // Create toggle button
      $items.each(function (i, li) {
         var $toggleBtn = $('<span class="mw-collapsible-toggle">[+]</span>');
         var $li = $(li);
         var $sub = $li.children('ul');
        if (!$sub.length) return;


         // Add toggle button to header
         $li.addClass('collapsible-header');
        if ($header.length && $header.is('li')) {
        if (!$li.children('.mw-collapsible-arrow').length) {
            $header.append(' ').append($toggleBtn);
          $li.prepend($('<span class="mw-collapsible-arrow" aria-hidden="true"></span>'));
        } else {
            $this.before($('<div class="mw-collapsible-header"></div>').append($toggleBtn));
         }
         }
        $sub.hide();


         // Set initial state
         var headerText = ($li.find('> a').first().text() || '').trim();
        if ($this.hasClass('mw-collapsed')) {
        log('Registered collapsible item', i, 'in', id, 'header=', headerText);
            $content.hide();
            $toggleBtn.text('[+]');
        } else {
            $content.show();
            $toggleBtn.text('[-]');
        }


         // Toggle functionality
         $li.off('.mwCollapsibleSidebar')
        $toggleBtn.click(function(e) {
          .on('click.mwCollapsibleSidebar', function (e) {
            if ($(e.target).closest('a').length) return;
             e.preventDefault();
             e.preventDefault();
             e.stopPropagation();
             $li.toggleClass('open');
            $sub.stop(true, true).slideToggle(200);
            log('Toggled', $li.hasClass('open') ? 'open' : 'closed', ':', headerText);
          });
      });
    });
  }


            if ($content.is(':visible')) {
  mw.loader.using('mediawiki.util').then(function () {
                $content.slideUp();
    $(function () {
                $toggleBtn.text('[+]');
      console.group && console.group('[SidebarCollapsible] bootstrap');
                $this.addClass('mw-collapsed');
      initOnce($(document));
            } else {
      console.groupEnd && console.groupEnd();
                $content.slideDown();
                $toggleBtn.text('[-]');
                $this.removeClass('mw-collapsed');
            }
        });
     });
     });
});
    mw.hook('wikipage.content').add(function ($c) {
 
      log('wikipage.content hook fired (re-init on dynamic content).');
/* Additional CSS for better styling */
      initOnce($c);
mw.loader.using('mediawiki.util', function() {
    });
    mw.util.addCSS(`
  });
        .mw-collapsible-toggle {
            cursor: pointer;
            font-weight: bold;
            color: #0645ad;
            margin-left: 5px;
        }


        .mw-collapsible-toggle:hover {
            text-decoration: underline;
        }


        .mw-collapsible-content {
})();
            margin-top: 5px;
        }


        .mw-collapsible.mw-collapsed .mw-collapsible-content {
*/
            display: none;
        }
    `);
});

Latest revision as of 15:29, 26 August 2025

/**
 * Collapsible Sidebar (Debug Build) - Patched for Vector & Vector 2022
 * Logs everything to console for verification
 */

/*
$(function () {
    // Add toggle link
    var $sidebar = $('#mw-panel');
    var $toggleLink = $('<a href="#" id="collapse-sidebar">Toggle Sidebar</a>')
        .css({ display: 'block', margin: '5px', cursor: 'pointer' });

    $('#p-logo').after($toggleLink);

    $toggleLink.click(function (e) {
        e.preventDefault();
        $sidebar.toggleClass('collapsed');
    });
});
*/

/*

(function () {
  window.MWSidebarDebug = true;

  function log() {
    if (window.MWSidebarDebug) console.log('[SidebarCollapsible]', ...arguments);
  }
  function warn() {
    if (window.MWSidebarDebug) console.warn('[SidebarCollapsible]', ...arguments);
  }

  var skin = mw.config.get('skin');
  log('Init start. Detected skin =', skin);

  function findPanels($root) {
    // Match both Vector and Vector 2022 classes
    var $panels = $root.find('#mw-panel .vector-menu-portal, #mw-panel .vector-menu.mw-portlet');
    log('Panels found:', $panels.length);
    return $panels;
  }

  function initOnce($root) {
    var $panels = findPanels($root);

    if (!$panels.length) {
      warn('No sidebar panels found using selectors for Vector/Vector-2022');
      return;
    }

    $panels.each(function (idx, el) {
      var $panel = $(el);
      var id = $panel.attr('id') || ('panel#' + idx);
      var $list = $panel.find('> .vector-menu-content > .vector-menu-content-list, > .body > ul').first();

      if (!$list.length) {
        warn('No list in panel:', id);
        return;
      }

      var $items = $list.children('li');
      log('Panel', id, ':', $items.length, 'top-level item(s)');

      $items.each(function (i, li) {
        var $li = $(li);
        var $sub = $li.children('ul');
        if (!$sub.length) return;

        $li.addClass('collapsible-header');
        if (!$li.children('.mw-collapsible-arrow').length) {
          $li.prepend($('<span class="mw-collapsible-arrow" aria-hidden="true">▶</span>'));
        }
        $sub.hide();

        var headerText = ($li.find('> a').first().text() || '').trim();
        log('Registered collapsible item', i, 'in', id, 'header=', headerText);

        $li.off('.mwCollapsibleSidebar')
          .on('click.mwCollapsibleSidebar', function (e) {
            if ($(e.target).closest('a').length) return;
            e.preventDefault();
            $li.toggleClass('open');
            $sub.stop(true, true).slideToggle(200);
            log('Toggled', $li.hasClass('open') ? 'open' : 'closed', ':', headerText);
          });
      });
    });
  }

  mw.loader.using('mediawiki.util').then(function () {
    $(function () {
      console.group && console.group('[SidebarCollapsible] bootstrap');
      initOnce($(document));
      console.groupEnd && console.groupEnd();
    });
    mw.hook('wikipage.content').add(function ($c) {
      log('wikipage.content hook fired (re-init on dynamic content).');
      initOnce($c);
    });
  });


})();

*/