MediaWiki:Gadget-tooltipRef.js

De Anekdotos

Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
  • Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
  • Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
  • Opera : appuyez sur Ctrl + F5.
var tooltipRef = function ( $ ) {

	var backClass = '.renvois_vers_le_texte';
	var msg_err1 = 'Erreur : note ou référence non trouvée.';
	var msg_err2 = 'Erreur: entrée non trouvée dans la bibliographie.';
	var msg_err3 = '<br>Cette fonctionnalité peut ne pas être disponible en mode édition si vous prévisualisez une section de page.';
	var msg_close = 'Fermer';
	var msg_go1 = 'Aller';
	var msg_go1title = 'Aller à cette référence en fin de page';
	var msg_go2 ='Aller à la bibliographie';
	var tooltipRefTimer = false;


	function fixId( myid ) { // replaces special characters in id name
		return myid.replace( /[\[\]:.]/g, "\\$&" );
	}
	function closeNote() {
		$( '.hasnote' ).removeClass( 'hasnote' );
		$( 'li.tooltipRef' ).remove();
	}
	function closeNoteAfterDelay() {
		tooltipRefTimer = setTimeout( closeNote, 400 );
	}
	function cancelDelayedNoteClosure() {
		clearTimeout( tooltipRefTimer );
	}

	function openNote( ref ) {
		closeNote();
		var id = ref.attr( 'href' );
		var note;
		var fallback;
		var idfix = fixId( id );
		if ( $( idfix ).length !== 0 ) {
			note = $( idfix ).clone();
			// copy computed styles to clone as inline styles
			var links1 = $( idfix ).find( 'a.external' );
			var links2 = note.find( 'a.external' );
			links1.each( function ( i, elm ) {
				var computed = $( elm ).css( [ 'color', 'background-image', 'background-position', 'background-repeat', 'padding-right' ] );
				links2.eq( i ).css( computed );
			} );
			note.removeAttr( 'id' ).addClass( 'tooltipRef' );
			note.find( backClass ).remove();
			note.find( '[href^="#"]' ).click( function() {
				if ( $( this ).is( '.open' ) ) {
					$( '.subnote' ).remove();
					$( this ).removeClass( 'open' );
					return false;
				}
				$( '.subnote' ).remove();
				$( '.tooltipRef .open' ).removeClass( 'open' );
				var id2 = $( this ).attr( 'href' );
				var more = $( '<a href="' + id2 + '">' + msg_go2 + '</a>' );
				more.click( closeNote );
				var note2;
				id2 = fixId( id2 );
				if ( $( id2 ).length !== 0) {
					note2 = $( id2 ).clone().addClass( 'subnote' ).removeAttr( 'id' );
					var morep = $( '<p class="more"></p>' );
					morep.append( more );
					note2.append( morep );
				} else {
					note2 = $( '<span class="subnote">' + msg_err2 + '</span>' );
				}
				note.append( note2 );
				$( this ).addClass( 'open' );
				return false;
			} );
			fallback = $( '<a href="' + id + '" class="go" title="' + msg_go1title + '">' + msg_go1 + '</a>&nbsp;' );
			fallback.click( closeNote );
		} else {
			note = $( '<li class="tooltipRef">' + msg_err1 + '</li>' );
		}
		var link = $( '<a href="#" class="close" title="' + msg_close + '">X</a>' );
		link.click( function () {
			closeNote();
			return false;
		} );
		var span = $( '<span class="actions">&nbsp;</span>' );
		span.prepend( fallback ).append( link );
		note.prepend( span );
		if ( typeof tooltipRefHover !== 'undefined' && tooltipRefHover ) {
			note.mouseover( cancelDelayedNoteClosure );
			note.mouseout( closeNoteAfterDelay );
		}
		$( 'body' ).append( note );
		var offset = ref.offset();
		note.offset( {
			top : offset.top + ref.height(),
			left: offset.left > 500 ? offset.left - note.outerWidth() : offset.left
		} );
		ref.addClass( 'hasnote' );
		return false;
	}

	if ( typeof tooltipRefHover !== 'undefined' && tooltipRefHover ) {
		$( 'sup.reference > a' ).mouseenter( function () {
			openNote( $ ( this ) );
		} );
		$( 'sup.reference' ).mouseover( cancelDelayedNoteClosure );
		$( 'sup.reference' ).mouseout( closeNoteAfterDelay );
		$( 'sup.reference > a' ).click( function () {
			return false;
		} );
	} else {
		$( 'sup.reference > a' ).click( function () {
			if ( $( this ).is( '.hasnote' ) ) {
				closeNote();
				return false;
			}
			openNote( $( this ) );
			return false;
		} );
	}
};

mw.loader.using( [ 'user', 'user.options' ], function () {

	if ( !mw.user.options.get( 'gadget-tooltipRef' ) ) {
		importStylesheet( 'MediaWiki:Gadget-tooltipRef.css' );
	}

	$( document ).ready( tooltipRef );
});