MediaWiki:Common.js: Difference between revisions

From NARA
Jump to navigation Jump to search
No edit summary
No edit summary
Line 11: Line 11:
}
}


// Force links to open in new tab in embed mode
// Force links to open in new tab when embedded in an iframe
if (document.body.classList.contains('vc-embed-mode')) {
( function () {
   document.addEventListener('DOMContentLoaded', function () {
   if ( window === window.top ) return;
    const links = document.querySelectorAll('a[href]');
   
    links.forEach(link => {
      const href = link.getAttribute('href');


       // Skip anchors and empty links
  function retargetLinks() {
       if (!href || href.startsWith('#')) return;
    document.querySelectorAll( 'a[href]' ).forEach( function ( link ) {
       var href = link.getAttribute( 'href' );
       if ( !href || href.startsWith( '#' ) ) return;
      link.setAttribute( 'target', '_blank' );
      link.setAttribute( 'rel', 'noopener noreferrer' );
    } );
  }


      // Make all links open in new tab
  window.addEventListener( 'load', retargetLinks );
      link.setAttribute('target', '_blank');
  if ( typeof mw !== 'undefined' ) {
      link.setAttribute('rel', 'noopener noreferrer');
    mw.hook( 'wikipage.content' ).add( retargetLinks );
    });
  }
  });
} )();
}


( function () {
( function () {

Revision as of 19:55, 2 April 2026

/* Any JavaScript here will be loaded for all users on every page load. */

// Remove whitespace tags using JS. The CSS-based approach seems to work fine on Chromium-based browsers, but not very well on Firefox.
window.onload = function() {
  var paras = document.querySelectorAll('.mw-parser-output p');
  for (var i = 0; i < paras.length; i++) {
    if (paras[i].childNodes[0].nodeName === 'BR') {
      paras[i].remove();
    }
  } 
}

// Force links to open in new tab when embedded in an iframe
( function () {
  if ( window === window.top ) return;

  function retargetLinks() {
    document.querySelectorAll( 'a[href]' ).forEach( function ( link ) {
      var href = link.getAttribute( 'href' );
      if ( !href || href.startsWith( '#' ) ) return;
      link.setAttribute( 'target', '_blank' );
      link.setAttribute( 'rel', 'noopener noreferrer' );
    } );
  }

  window.addEventListener( 'load', retargetLinks );
  if ( typeof mw !== 'undefined' ) {
    mw.hook( 'wikipage.content' ).add( retargetLinks );
  }
} )();

( function () {
  if ( window === window.top ) return;

  function sendHeight() {
    var h = document.body ? document.body.scrollHeight : 0;
    if ( h > 0 ) window.parent.postMessage( { embedHeight: h }, '*' );
  }

  // Fire on multiple events to catch all page types
  document.addEventListener( 'DOMContentLoaded', sendHeight );
  window.addEventListener( 'load', function () {
    sendHeight();
    setTimeout( sendHeight, 500 );
    setTimeout( sendHeight, 1500 );
  } );
  if ( typeof mw !== 'undefined' ) {
    mw.hook( 'wikipage.content' ).add( sendHeight );
  }

  // Anchor scroll forwarding
  document.addEventListener( 'click', function ( e ) {
    var link = e.target.closest( 'a' );
    if ( !link ) return;
    var href = link.getAttribute( 'href' );
    if ( !href || !href.startsWith( '#' ) ) return;
    var id = href.slice( 1 );
    var target = document.getElementById( id ) || document.querySelector( '[name="' + id + '"]' );
    if ( !target ) return;
    e.preventDefault();
    window.parent.postMessage( { embedScrollTo: target.getBoundingClientRect().top + window.scrollY }, '*' );
  } );
} )();