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 2 octobre 2016 à 16:26 et modifiée en dernier par Od1n (discuter | contributions) (indentation 4 espaces, parce que 2 espaces c'est vraiment illisible…). 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
        myid = myid.replace(/\[/g, "\\[").replace(/\]/g, "\\]");
        return myid.replace(/(:|\.)/g,'\\$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().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 offset = ref.offset().left;
        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);
        note.position({my: offset > 500 ? "right top" : "left top", at: "left bottom", collision: "none", of: ref.parent()});
        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(["jquery.ui.position"], function() {
    $(document).ready(tooltipRef);
});