MediaWiki:Common.js: Difference between revisions

Clarke (talk | contribs)
m try some different js
No edit summary
 
(15 intermediate revisions by the same user not shown)
Line 9: Line 9:
     }
     }
   }  
   }  
}
};
 
/* ── Embed: dynamic height + anchor scroll ── */
( function () {
  if ( window === window.top ) return;
 
  function sendHeight() {
    var h = document.body ? document.body.scrollHeight : 0;
    if ( h > 0 ) window.parent.postMessage( { embedHeight: h + 10 }, '*' );
  }
 
  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 );
  }
 
  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 }, '*' );
  } );
} )();
 
/* ── Embed: open links in new tab (only when ?embed=1) ── */
( function () {
  if ( window === window.top ) return;
  if ( !window.location.search.includes( 'embed=1' ) ) return;
 
  function retargetLinks() {
    var links = document.querySelectorAll( 'a[href]' );
    for ( var i = 0; i < links.length; i++ ) {
      var href = links[ i ].getAttribute( 'href' );
      if ( !href || href.charAt( 0 ) === '#' ) continue;
      links[ i ].setAttribute( 'target', '_blank' );
      links[ i ].setAttribute( 'rel', 'noopener noreferrer' );
    }
  }
 
  window.addEventListener( 'load', retargetLinks );
  if ( typeof mw !== 'undefined' ) {
    mw.hook( 'wikipage.content' ).add( retargetLinks );
  }
} )();