Aller au contenu

MediaWiki:Gadget-tooltipRef.js

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 17 décembre 2017 à 01:47 et modifiée en dernier par Od1n (discuter | contributions) (escaping nécessaire pour le lien Aller ("fallback", id), et je suppose aussi pour le "more" id2). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/**
 * Accès immédiat au contenu des références et notes en bas de page
 * dans une fenêtre contextuelle.
 * auteur : http://fr.wikipedia.org/wiki/Utilisateur:Lgd
 * licence : MIT
 *
 * Utilise : http://fr.wikipedia.org/wiki/MediaWiki:Gadget-tooltipRef.css
 *
 * Paramétrage: ajouter var tooltipRefHover = true dans le common.js personnel
 * pour utiliser au survol plutôt qu'au clic
 *
 * {{Catégorisation JS|TooltipRef}}
 */

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 '#' + $.escapeSelector( myid.substr( 1 ) );
	}
	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="' + mw.html.escape( 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="' + mw.html.escape( 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 );
});