User:Jeblad/popup references/script.js

From Meta, a Wikimedia project coordination wiki

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.
// Code to build ref-toolbars
// © John Erling Blad, Creative Commons by Attribution 3.0

var inContentNamespace = function( namespaces ) {
	return 0 <= namespaces.indexOf( mw.config.get( 'wgNamespaceNumber' ) );
}

var isAction = function( action ) {
	return 'view' === mw.config.get( 'wgAction' )
}

mw.loader.using( ['mediawiki.util'], function () {
	"use strict";
	if ( !inContentNamespace( mw.config.get( 'wgContentNamespaces' ) )
		|| !isAction( 'view' )
	) {
		mw.log( 'PackReferences: ', 'terminates' );
		return;
	}

	mw.hook( 'wikipage.content' ).add(function( $content ) {
		var moveLink = function() {
			var $prev = $(this).prev('sup.reference');
			if ($prev.length === 0) return;
			var $children = $(this).children();
			$prev.append($children);
			$(this).remove();
		};
		var $refs = mw.util.$content.find('sup.reference');
		$refs.each(moveLink);
		var wrapLinks = function() {
			var $children = $(this).children();
			$children.wrapAll('<div class="ref-toolbar"/>');
			var html = '<a href="#" class="ref-handle">[' + ($children.length === 1 ? '†' : '‡') + ']</a>';
			$(html).prependTo($(this));
		};
		$refs = mw.util.$content.find('sup.reference');
		$refs.each(wrapLinks);
		var showToolbar = function() {
			$(this).next('.ref-toolbar').animate({width: 'show'});
			return false;
		};
		$refs.children('.ref-handle').click(showToolbar);
		var showSelf = function() {
			//$(this).animate({width: 'show'});
		};
		var hideSelf = function() {
			$(this).animate({width: 'hide'});
		};
		$refs.children('.ref-toolbar').hover(showSelf, hideSelf);
	});
});