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 14 septembre 2015 à 19:09 et modifiée en dernier par Orlodrim (discuter | contributions) (Place la popup directement dans <body> et utilise jquery.ui.position pour la mettre au bon endroit). 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);
});