MediaWiki:Gadget-vector-headanchor.js

From mediawiki.org

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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/*!
* Vector HeadAnchors gadget, from <https://mediawiki.org/wiki/MediaWiki:Gadget-vector-headanchor.js>
*
* Copyright 2013-2020 Timo Tijhof
* @license MIT <https://opensource.org/licenses/MIT>
*/
// Revision as of 2021-01-29

mw.hook( 'wikipage.content' ).add( function ( $content ) {
	$content.find( 'span.mw-headline' ).each( function ( i, el ) {
		var heading = el.parentNode;
		if ( !el.id || heading.querySelector( '.tpl-vheadanchor') ) {
			// No anchor possible, or anchor already inserted
			return;
		}
	
		if (heading.parentNode.classList.contains('mw-heading')) {
			// DiscussionTools wraps H2 into DIV.mw-heading, setting overflow:hidden on
			// the outer DIV instead of H2. Our override has to match to avoid clipping
			// the anchor.
			heading.parentNode.classList.add('tpl-vheadanchor-heading');
		} else {
			heading.classList.add('tpl-vheadanchor-heading');
		}
	
		// Insert anchor.
		anchor = document.createElement( 'a' );
		anchor.href = '#' + el.id;
		anchor.textContent = '#';
		anchor.title = 'Link to this section';
		anchor.className = 'tpl-vheadanchor';
		heading.insertBefore( anchor, el.nextSibling );
	} );
} );