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 22: Line 22:
   var MAX_ATTEMPTS = 32; /* ~8s of enforcement, in case Vector's own later init resets it */
   var MAX_ATTEMPTS = 32; /* ~8s of enforcement, in case Vector's own later init resets it */
   function tick() {
   function tick() {
    if ( window.innerWidth < 1000 ) { return; }
     attempts++;
     attempts++;
     /* Re-check and re-click every tick rather than stopping at first success: the
     /* window.innerWidth is checked fresh every tick, not once up front -- an early
      tick reading a not-yet-settled viewport must not permanently abandon the loop.
      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
       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
       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
       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. */
       or get overwritten right after. Re-asserting for a few seconds outlasts that. */
     if ( !document.documentElement.classList.contains( 'vector-feature-main-menu-pinned-enabled' ) ) {
     if ( window.innerWidth >= 1000 &&
      !document.documentElement.classList.contains( 'vector-feature-main-menu-pinned-enabled' ) ) {
       var btn = document.querySelector( '#vector-main-menu-dropdown .vector-pinnable-header-pin-button' );
       var btn = document.querySelector( '#vector-main-menu-dropdown .vector-pinnable-header-pin-button' );
       if ( btn ) { btn.click(); }
       if ( btn ) { btn.click(); }
      if ( window.console && window.console.log ) {
        console.log( '[otw-pin] tick ' + attempts + ': width=' + window.innerWidth + ' btnFound=' + ( !!btn ) );
      }
     }
     }
     if ( attempts < MAX_ATTEMPTS ) {
     if ( attempts < MAX_ATTEMPTS ) {

Revision as of 19:31, 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() {
    attempts++;
    /* window.innerWidth is checked fresh every tick, not once up front -- an early
       tick reading a not-yet-settled viewport must not permanently abandon the loop.
       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 ( window.innerWidth >= 1000 &&
      !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 ( window.console && window.console.log ) {
        console.log( '[otw-pin] tick ' + attempts + ': width=' + window.innerWidth + ' btnFound=' + ( !!btn ) );
      }
    }
    if ( attempts < MAX_ATTEMPTS ) {
      setTimeout( tick, 250 );
    }
  }
  if ( document.readyState === 'loading' ) {
    document.addEventListener( 'DOMContentLoaded', tick );
  } else {
    tick();
  }
}() );