MediaWiki:Common.js

From London Book Trades
Jump to navigation Jump to search

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. */
/* Any JavaScript here will be loaded for all users on every page load. */

/* Category A–Z jump bar (pages/subcats/files) */
mw.loader.using(['mediawiki.util'], function () {
  // Only on normal views of Category: pages
  if (mw.config.get('wgNamespaceNumber') !== 14) return;
  if (mw.config.get('wgAction') !== 'view') return;

  const pageName = mw.config.get('wgPageName'); // e.g. "Category:Foo_bar"

  function addJumpBar(sectionSelector, paramName, fragmentId) {
    const section = document.querySelector(sectionSelector);
    if (!section) return;

    const bar = document.createElement('div');
    bar.className = 'mw-category-jumpbar';
    bar.appendChild(document.createTextNode('Jump to: '));

    const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
    letters.forEach((ch, i) => {
      const a = document.createElement('a');
      a.textContent = ch;
      a.href = mw.util.getUrl(pageName, { [paramName]: ch }) + fragmentId;
      bar.appendChild(a);
      if (i !== letters.length - 1) bar.appendChild(document.createTextNode(' · '));
    });

    // Put it at the top of that section
    section.insertBefore(bar, section.firstChild);
  }

  // Pages list
  addJumpBar('#mw-pages', 'pagefrom', '#mw-pages');

  // Subcategories list (if present)
  addJumpBar('#mw-subcategories', 'subcatfrom', '#mw-subcategories');

  // Files list (if present)
  addJumpBar('#mw-category-media', 'filefrom', '#mw-category-media');
});