X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2Futil.js;h=39f89b0370f72fd17b739fa7b494ada7e3a82637;hp=c9c8bb3694aafaea6ad981fa45d2a7a77e60f994;hb=5d9992368bb386d2e606ae037c5478fe10ac70e8;hpb=e6475e1885c0a0f102387c01e9bcb78ac09b4ef8 diff --git a/js/util.js b/js/util.js index c9c8bb3..39f89b0 100644 --- a/js/util.js +++ b/js/util.js @@ -19,61 +19,63 @@ /*jslint laxbreak:true */ /** - * Cette classe regroupe des fonctions utilitaires (helpers) permettant notamment de : - * - afficher une boite de message - * - afficher une bulle d'aide lié à un élément - * - manipuler le curseur et réaliser des sélections sur des zones de saisie () - * @formateur permet de formater les messages affichés à l'aide de messageDialogue (facultatif), voir "formateur.js". + * This object brings some utility functions. + * - Print a message box to display some information for the user. + * - Set a tooltip for a HTML element. + * - Some text manipulation for input area. + * @formatter An object for string format */ -euphorik.Util = function (formateur) { - $("#info .fermer").click(function() { +euphorik.Util = function (formatter) { + $("#info .close").click(function() { $("#info").slideUp(50); }); - - $("body").append('
').append('

'); - - this.formateur = formateur; + + $("body").append('
').append('

'); + + this.formatter = formatter; this.bulleActive = true; }; euphorik.Util.messageType = {informatif: 0, question: 1, erreur: 2}; /** - * Affiche une boite de dialogue avec un message à l'intérieur. - * @param message le message (string) - * @param type voir 'messageType'. par défaut messageType.informatif - * @param les boutons sous la forme d'un objet ou les clefs sont les labels des boutons - * et les valeurs les fonctions executées lorsqu'un bouton est activé. - * @param formate faut-il formaté le message ? true par défaut + * Display a message box. + * @message [String] The message. + * @type [euphorik.Util.messageType] The message type like 'information' or 'error'. Default is messageType.informatif. + * @buttons An object where the properties are the labels and the values are functions which will be executed when a button is clicked. + * @format [bool] The message should be formated. (see 'formatter.js') + * @time The time while the message is displayed. -1 for infinity. */ -euphorik.Util.prototype.messageDialogue = function(message, type, boutons, formate) { +euphorik.Util.prototype.messageDialog = function(message, type, buttons, format, time) { var thisUtil = this; type = type || euphorik.Util.messageType.informatif; - formate = formate || true; + format = format === undefined ? true : format; - if (this.timeoutMessageDialogue) { - clearTimeout(this.timeoutMessageDialogue); + if (this.timeoutMessageDialog) { + clearTimeout(this.timeoutMessageDialog); } - - var fermer = function() { $("#info").slideUp(100); }; - fermer(); - - $("#info .message").html(!thisUtil.formateur || !formate ? message : thisUtil.formateur.traitementComplet(message)); - + + var close = function() { $("#info").slideUp(100); }; + close(); + + $("#info .message").html(!thisUtil.formatter || !format ? message : thisUtil.formatter.completeProcessing(message)); + switch(type) { case euphorik.Util.messageType.informatif : $("#info #icone").attr("class", "information"); break; case euphorik.Util.messageType.question : $("#info #icone").attr("class", "interrogation"); break; case euphorik.Util.messageType.erreur : $("#info #icone").attr("class", "exclamation"); break; } - - $("#info .boutons").html(""); - objectEach(boutons, function(nom, bouton) { - $("#info .boutons").append("
" + nom + "
").find("div:last").click(bouton).click(fermer); + + $("#info .buttons").html(""); + objectEach(buttons, function(name, bouton) { + $("#info .buttons").append("
" + name + "
").find("div:last").click(bouton).click(close); }); - + $("#info").slideDown(200); - this.timeoutMessageDialogue = setTimeout(fermer, euphorik.conf.tempsAffichageMessageDialogue); + if (time !== -1) { + this.timeoutMessageDialog = setTimeout(close, time || euphorik.conf.tooltipDisplayDefaultTime); + } }; euphorik.Util.positionTypeX = {gauche: 0, gaucheRecouvrement: 1, centre: 2, droiteRecouvrement: 3, droite: 4}; @@ -91,29 +93,39 @@ euphorik.Util.prototype.afficherBoite = function(boite, cible, positionX, positi var positionCible = cible.offset(); var positionBoite = { left : positionX === euphorik.Util.positionTypeX.gauche ? positionCible.left - boite.width() : - (positionX === euphorik.Util.positionTypeX.gaucheRecouvrement ? positionCible.left - boite.width() + cible.width() : + (positionX === euphorik.Util.positionTypeX.gaucheRecouvrement ? positionCible.left - boite.width() + cible.width() : (positionX === euphorik.Util.positionTypeX.droitelsRecouvrement ? positionCible.left : (positionX === euphorik.Util.positionTypeX.droite ? positionCible.left + cible.width() : positionCible.left + cible.width() / 2 - boite.width() / 2 ))), // centre top : positionY === euphorik.Util.positionTypeY.haut ? positionCible.top - boite.height() : - (positionY === euphorik.Util.positionTypeY.hautRecouvrement ? positionCible.top - boite.height() + cible.height() : + (positionY === euphorik.Util.positionTypeY.hautRecouvrement ? positionCible.top - boite.height() + cible.height() : (positionY === euphorik.Util.positionTypeY.basRecouvrement ? positionCible.top : (positionY === euphorik.Util.positionTypeY.bas ? positionCible.top + cible.height() : positionCible.top + cible.height() / 2 - boite.height() / 2 ))) // centre }; - + // calcul les décalages en x et en y pour éviter que la boite ne sorte de la fenêtre, tient compte de la position des barres de défilement - var marge = 10; + var marge = 10; positionBoite.left = positionBoite.left < marge + window.pageXOffset ? marge + window.pageXOffset : (boite.width() - $(window).width() + (positionBoite.left - window.pageXOffset) + marge > 0 ? $(window).width() - boite.width() - marge + window.pageXOffset : positionBoite.left); positionBoite.top = positionBoite.top < marge + window.pageYOffset ? marge + window.pageYOffset : (boite.height() - $(window).height() + (positionBoite.top - window.pageYOffset) + marge > 0 ? $(window).height() - boite.height() - marge + window.pageYOffset : positionBoite.top); - + boite.css("top", positionBoite.top).css("left", positionBoite.left).show(); }; euphorik.Util.positionBulleType = {haut : 0, droite : 1, bas : 2, gauche : 3}; +/** + * Affiche ou cache la barre d'attente. + */ +euphorik.Util.prototype.showWaitBar = function() { + $("#waitbar").show(); +}; +euphorik.Util.prototype.hideWaitBar = function() { + $("#waitbar").hide(); +}; + /** * Affiche un info bulle lorsque le curseur survole l'élément donné. * @param message le message à afficher @@ -122,11 +134,11 @@ euphorik.Util.positionBulleType = {haut : 0, droite : 1, bas : 2, gauche : 3}; */ euphorik.Util.prototype.infoBulle = function(message, element, position) { var thisUtil = this; - var cacherBulle = function() { - $("#flecheBulle").hide(); - $("#messageBulle").hide(); + var cacherBulle = function() { + $("#tooltipArrow").hide(); + $("#tooltipMessage").hide(); }; - + position = position || euphorik.Util.positionBulleType.haut; element.hover( @@ -135,19 +147,19 @@ euphorik.Util.prototype.infoBulle = function(message, element, position) { return; } - var m = $("#messageBulle"); - var f = $("#flecheBulle"); - f.removeClass().addClass(position === euphorik.Util.positionBulleType.haut ? "flecheBulleHaut" : - (position === euphorik.Util.positionBulleType.droite ? "flecheBulleDroite" : - (position === euphorik.Util.positionBulleType.bas ? "flecheBulleBas" : "flecheBulleGauche" ))); - + var m = $("#tooltipMessage"); + var f = $("#tooltipArrow"); + f.removeClass().addClass(position === euphorik.Util.positionBulleType.haut ? "tooltipArrowTop" : + (position === euphorik.Util.positionBulleType.droite ? "tooltipArrowRight" : + (position === euphorik.Util.positionBulleType.bas ? "tooltipArrowBottom" : "tooltipArrowLeft" ))); + // remplie le paragraphe de la bulle avec le message $("p", m).html(message); - + // réinitialise la position, évite le cas ou la boite est collé à droite et remplie avec un texte la faisant dépassé // dans ce cas la hauteur n'est pas calculé correctement m.css("top", 0).css("left", 0); - + var positionFleche = { left : position === euphorik.Util.positionBulleType.haut || position === euphorik.Util.positionBulleType.bas ? element.offset().left + element.outerWidth() / 2 - f.width() / 2 : @@ -170,7 +182,7 @@ euphorik.Util.prototype.infoBulle = function(message, element, position) { } else if (positionMessage.left < 0) { positionMessage.left = 0; } - + m.css("top", positionMessage.top).css("left", positionMessage.left).show(); f.css("top", positionFleche.top).css("left", positionFleche.left).show(); }, @@ -178,13 +190,6 @@ euphorik.Util.prototype.infoBulle = function(message, element, position) { ).click(cacherBulle); }; -/** - * Utilisé pour l'envoie de données avec la méthode ajax de jQuery. - */ -euphorik.Util.prototype.jsonVersAction = function(json) { - return { action : JSON.stringify(json) }; -}; - /** * Retourne un hash md5 d'une chaine, dépend de md5.js. * @param chaine un string quelconque @@ -194,7 +199,7 @@ euphorik.Util.prototype.md5 = function(chaine) { return hex_md5(chaine); }; -// pompé de http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130 +// Taken from http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130 euphorik.Util.prototype.setSelectionRange = function(input, selectionStart, selectionEnd) { if (input.setSelectionRange) { input.focus(); @@ -228,7 +233,7 @@ euphorik.Util.prototype.replaceSelection = function(input, replaceString) { var selectionStart = input.selectionStart; var selectionEnd = input.selectionEnd; input.value = input.value.substring(0, selectionStart) + replaceString + input.value.substring(selectionEnd); - + if (selectionStart != selectionEnd) { // has there been a selection this.setSelectionRange(input, selectionStart, selectionStart + replaceString.length); } else { // set caret @@ -248,9 +253,10 @@ euphorik.Util.prototype.replaceSelection = function(input, replaceString) { }; /** - * Rot13 d'une chaine, voir : http://fr.wikipedia.org/wiki/ROT13 + * Applies rot13 to a given string. See : http://en.wikipedia.org/wiki/ROT13. + * @param str the string. */ -euphorik.Util.prototype.rot13 = function(chaine) { +euphorik.Util.prototype.rot13 = function(str) { var ACode = 'A'.charCodeAt(0); var aCode = 'a'.charCodeAt(0); var MCode = 'M'.charCodeAt(0); @@ -262,7 +268,7 @@ euphorik.Util.prototype.rot13 = function(chaine) { if (pos === ch.length) { return ""; } - + var c = ch.charCodeAt(pos); return String.fromCharCode( c + @@ -270,5 +276,5 @@ euphorik.Util.prototype.rot13 = function(chaine) { (c > MCode && c <= ZCode || c > mCode && c <= zCode ? -13 : 0)) ) + f(ch, pos + 1); }; - return f(chaine, 0); + return f(str, 0); };