Jump to content

MediaWiki:Common.js: Difference between revisions

From OnTrackWorld
Pin sidebar open by default for all visitors
Pin sidebar open by default for all visitors
Line 19: Line 19:
   viewports, where a permanently-open sidebar would crowd out the page content. */
   viewports, where a permanently-open sidebar would crowd out the page content. */
( function () {
( function () {
   function pinMainMenu( attemptsLeft ) {
  var attempts = 0;
  var MAX_ATTEMPTS = 32; /* ~8s of enforcement, in case Vector's own later init resets it */
   function tick() {
     if ( window.innerWidth < 1000 ) { return; }
     if ( window.innerWidth < 1000 ) { return; }
     if ( document.documentElement.classList.contains( 'vector-feature-main-menu-pinned-enabled' ) ) { return; }
    attempts++;
    var btn = document.querySelector( '#vector-main-menu-dropdown .vector-pinnable-header-pin-button' );
    /* Re-check and re-click every tick rather than stopping at first success: the
    /* The button exists in the DOM from initial render, but Vector wires up its click
      button exists in the DOM from initial render but Vector wires up its click
      handler slightly later -- clicking too early is a silent no-op. So keep retrying
      handler, and re-applies its own pin/unpin state from the (empty, for a fresh
      (re-checking the pinned class above) until it actually takes, not just until the
      visitor) saved preference, slightly later -- an early click can silently no-op
      element exists. */
      or get overwritten right after. Re-asserting for a few seconds outlasts that. */
    if ( btn ) { btn.click(); }
     if ( !document.documentElement.classList.contains( 'vector-feature-main-menu-pinned-enabled' ) ) {
     if ( attemptsLeft > 0 ) {
      var btn = document.querySelector( '#vector-main-menu-dropdown .vector-pinnable-header-pin-button' );
       setTimeout( function () { pinMainMenu( attemptsLeft - 1 ); }, 250 );
      if ( btn ) { btn.click(); }
    }
     if ( attempts < MAX_ATTEMPTS ) {
       setTimeout( tick, 250 );
     }
     }
   }
   }
  function start() { pinMainMenu( 40 ); }
   if ( document.readyState === 'loading' ) {
   if ( document.readyState === 'loading' ) {
     document.addEventListener( 'DOMContentLoaded', start );
     document.addEventListener( 'DOMContentLoaded', tick );
   } else {
   } else {
     start();
     tick();
   }
   }
}() );
}() );

Revision as of 19:30, 14 September 2026

/* OPTIONAL. Append to MediaWiki:Common.js only if you want inline highlight-and-annotate
   on long-form pages (white paper, book chapters). Loads the Hypothesis client on pages
   tagged with the "Annotate" category. Readers need a free Hypothesis account to annotate;
   anyone can read annotations. Remove this block to turn it off. */
( function () {
  if ( mw.config.get( 'wgCategories' ).indexOf( 'Annotate' ) === -1 ) { return; }
  if ( mw.config.get( 'wgAction' ) !== 'view' ) { return; }
  var s = document.createElement( 'script' );
  s.src = 'https://hypothes.is/embed.js';
  s.async = true;
  document.head.appendChild( s );
}() );

/* ---- Pin the sidebar (Main menu) open by default for every visitor -----------------
   Vector 2022 only shows Main menu as a permanent left column once a user pins it
   (client preference, saved per-account/browser). This triggers that same built-in
   pin action automatically on every page load, so it defaults to open for everyone
   instead of only whoever has pinned it themselves. Skipped on narrow/mobile
   viewports, where a permanently-open sidebar would crowd out the page content. */
( function () {
  var attempts = 0;
  var MAX_ATTEMPTS = 32; /* ~8s of enforcement, in case Vector's own later init resets it */
  function tick() {
    if ( window.innerWidth < 1000 ) { return; }
    attempts++;
    /* Re-check and re-click every tick rather than stopping at first success: the
       button exists in the DOM from initial render but Vector wires up its click
       handler, and re-applies its own pin/unpin state from the (empty, for a fresh
       visitor) saved preference, slightly later -- an early click can silently no-op
       or get overwritten right after. Re-asserting for a few seconds outlasts that. */
    if ( !document.documentElement.classList.contains( 'vector-feature-main-menu-pinned-enabled' ) ) {
      var btn = document.querySelector( '#vector-main-menu-dropdown .vector-pinnable-header-pin-button' );
      if ( btn ) { btn.click(); }
    }
    if ( attempts < MAX_ATTEMPTS ) {
      setTimeout( tick, 250 );
    }
  }
  if ( document.readyState === 'loading' ) {
    document.addEventListener( 'DOMContentLoaded', tick );
  } else {
    tick();
  }
}() );