User:Sichek/common.js

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
/**
 * 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
 */

var tooltipRef = function ($) {
 
  var backClass = '';
  var fixOverflow = '.gallerytext, .thumbinner, h2, h3, h4, h5, h6, .overflow';
  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(link) {
    var note=link.closest('span.tooltipRef');
    note.prev('a.hasnote').removeClass('hasnote');
    note.parents(fixOverflow).first().css('overflow','hidden');
    note.remove();
    return false;
  }
 
  function openNote(ref) {
    $('.tooltipRef a.close').each(function(){closeNote($(this));});
    var id = ref.attr('href');
    var note;
    var fallback;
    var idfix = fixId(id);
    if($(idfix).length != 0) {
      note = $(idfix).find('.reference-text').clone().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(function(){
          closeNote($(this));
        });
        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(function(){
        closeNote($(this));
      });
    } else {
      note = $('<span class="tooltipRef">'+msg_err1+'</span>');
    }
    var offset=ref.offset().left;
    if(offset > 500){ note.addClass('noteleft'); };
    var link=$('<a href="#" class="close" title="'+msg_close+'">X</a>');
    link.click(function() {
      closeNote($(this));
      return false;
    });
    var span=$('<span class="actions">&nbsp;</span>');
    span.prepend(fallback).append(link);
    note.prepend(span);
    ref.parent().append(note);
    ref.addClass('hasnote');
    ref.parents(fixOverflow).first().css('overflow','visible');
    return false;
  }
 
  if (typeof tooltipRefHover !== 'undefined' && tooltipRefHover) {
    $('sup.reference > a').mouseenter(function(event) { 
      openNote($(this));
    });
    $('sup.reference').mouseover(function() { 
      clearTimeout(tooltipRefTimer);
    });
    $('sup.reference').mouseout(function() { 
      tooltipRefTimer = setTimeout(function(){
        var ref = $(this).find('a').first();
        $('.hasnote').removeClass('hasnote');
        ref.parents(fixOverflow).first().css('overflow','hidden');
        $('.tooltipRef').remove();
        return false;
      },400)
    });
    $('sup.reference > a').click(function() {
      return false;
    });
  } else {
    $('sup.reference > a').click(function() {
      if($(this).is('.hasnote')) {
        closeNote($(this).parent().find('.close'));return false;
      }
      openNote($(this))
      return false;
    });
  }
}
$(document).ready(tooltipRef);