X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2Fchat%2Fconversation.js;fp=js%2Fchat%2Fconversation.js;h=8c11752d8e84a272453a7ecb6e5934cba589eb97;hp=5321380b4d071644e4e2486474f16839180ddf56;hb=81393a74d648e4830dc8c7c562fa203f50a105f6;hpb=828daf607fdce322ea17c1786dff84f712aa1632 diff --git a/js/chat/conversation.js b/js/chat/conversation.js index 5321380..8c11752 100644 --- a/js/chat/conversation.js +++ b/js/chat/conversation.js @@ -15,7 +15,7 @@ // // You should have received a copy of the GNU General Public License // along with Euphorik. If not, see . - + /*jslint laxbreak:true */ /** @@ -28,29 +28,29 @@ */ euphorik.Conversation = function(conversations, num) { this.conversations = conversations; - + // peut changer au cours de la vie de la conversation, n'est pas un id ! this.num = num; - + this.id = Math.floor(Math.random() * 1000000).toString(36); - + this.util = this.conversations.util; this.formater = this.conversations.formater; this.client = this.conversations.client; - + this.idDernierMessageAffiche = 0; this.racine = undefined; - + this.messages = []; this.messagesParId = {}; - + this.nbMessageMax = euphorik.conf.nbMessageAffiche; // Le nombre de message affiché par page var messagesXHTML = '
'; var messageRacineXHTML = '
'; var reverse = this.client.chatOrder === "reverse"; - - var XHTML = + + var XHTML = '' + (reverse ? messagesXHTML : "") + '
' + @@ -64,24 +64,24 @@ euphorik.Conversation = function(conversations, num) { (reverse ? "" : messagesXHTML) + //'
' + ''; - + $("#conversations tr").append(XHTML); - + // les infos bulles this.util.infoBulle("Aller à la première page", $("#" + this.getId() + " .titre .numPage"), euphorik.Util.positionBulleType.haut); if (this.num !== 0) { this.util.infoBulle("Créer un lien vers la conversation", $("#" + this.getId() + " .titre .creerLien")); this.util.infoBulle("Close the conversation", $("#" + this.getId() + " .titre .close")); } - + // les différents événements liés à la conversation - var thisConversation = this; + var thisConversation = this; $("#" + this.getId() + " .titre .creerLien").click(function() { thisConversation.util.replaceSelection( $("form#posterMessage input.message")[0], "{" + thisConversation.client.conversations[thisConversation.num - 1].root.toString(36) + "}" ); - }); + }); $("#" + this.getId() + " .titre .close").click(function() { thisConversation.conversations.supprimerConversation(thisConversation.num); }); @@ -118,7 +118,7 @@ euphorik.Conversation.prototype.majRacine = function() { if (!this.racine) { return; } - + if (!(this.racine.id in this.messagesParId)) { this.messagesParId[this.racine.id] = this.racine; var element = $(this.racine.XHTML(true, this.getId())); @@ -176,7 +176,7 @@ euphorik.Conversation.prototype.setPage = function(pageCourante, dernierePage) { */ euphorik.Conversation.prototype.setFunPage = function(funNext, funPrev, funReset) { var thisConversation = this; - + $("#" + this.getId() + " .next").click( function() { funNext(thisConversation.num); } ); @@ -201,12 +201,12 @@ euphorik.Conversation.prototype.getId = function() { euphorik.Conversation.prototype.ajouterMessage = function(message) { this.messages.push(message); this.messagesParId[message.id] = message; - + // enlève le message exedentaire si nécessaire if (this.messages.length > this.nbMessageMax) { delete this.messagesParId[this.messages.shift().id]; } - + // met à jour le membre 'estReponduPar' des messages de la conversation for (var i = 0; i < this.messages.length - 1; i++) { var autreMess = this.messages[i]; @@ -224,7 +224,7 @@ euphorik.Conversation.prototype.viderMessages = function() { this.messagesParId = {}; this.idDernierMessageAffiche = 0; $("#" + this.getId() + " .messages .message").remove(); - + // enlève également la racine $("#" + this.getId() + " .titre .messageRacine").empty(); }; @@ -244,35 +244,35 @@ euphorik.Conversation.prototype.flush = function() { var messagePair = (this.idDernierMessageAffiche === 0 ? true : ($("#" + this.getId() + " .messages div:" + (reverse ? "first" : "last")).attr("class").search("messagePair") === -1) - ); - - // permet d'itérer sur les nouveaux messages à afficher - var pourChaqueNouveauMessage = function(f) { - thisConversation.messages.each(function(i, mess) { - if (mess.id > thisConversation.idDernierMessageAffiche) { - f(mess); - } - }); + ); + + // permet d'itérer sur les nouveaux messages à afficher + var pourChaqueNouveauMessage = function(f) { + thisConversation.messages.each(function(i, mess) { + if (mess.id > thisConversation.idDernierMessageAffiche) { + f(mess); + } + }); }; - + // construction de l'XHTML des messages - var XHTML = ""; + var XHTML = ""; pourChaqueNouveauMessage(function(mess) { XHTML += mess.XHTML(messagePair, thisConversation.getId()); messagePair = !messagePair; }); - - var DOM = $(XHTML); - + + var DOM = $(XHTML); + // pour chaque nouveau message au niveau du document on lui assigne ses événements DOM.each(function() { thisConversation.attacherEventsSurMessage(this); }); - + if (reverse) { DOM.prependTo("#" + this.getId() + " .messages"); } else { DOM.appendTo("#" + this.getId() + " .messages"); } - + // enlève les messages exedentaires au niveau du document var nbMessagesAffiche = $("#" + this.getId() + " .messages .message").size(); if (nbMessagesAffiche > this.nbMessageMax) { @@ -281,26 +281,26 @@ euphorik.Conversation.prototype.flush = function() { } else { $("#" + this.getId() + " .messages .message").slice(0, nbMessagesAffiche - this.nbMessageMax).remove(); } - } - - // met à jour la classe des messages auquels repondent les nouveaux messages - // dans le cas où ce message appartient au client courant (c'est un peu de la triche) TODO : ya mieux ? - pourChaqueNouveauMessage(function(mess) { - if (mess.auteurId === thisConversation.client.id) { - objectEach(mess.repondA, function(messId) { - var mess = thisConversation.messagesParId[messId]; - if (mess) { - mess.clientARepondu = true; - $("#conversations #" + mess.getId(thisConversation.getId())).addClass("repondu"); - } - }); - } + } + + // met à jour la classe des messages auquels repondent les nouveaux messages + // dans le cas où ce message appartient au client courant (c'est un peu de la triche) TODO : ya mieux ? + pourChaqueNouveauMessage(function(mess) { + if (mess.auteurId === thisConversation.client.id) { + objectEach(mess.repondA, function(messId) { + var mess = thisConversation.messagesParId[messId]; + if (mess) { + mess.clientARepondu = true; + $("#conversations #" + mess.getId(thisConversation.getId())).addClass("repondu"); + } + }); + } }); - + if (this.messages.length > 0) { this.idDernierMessageAffiche = this.messages[this.messages.length-1].id; - } - + } + // met à jour la racine de la conversation this.majRacine(); }; @@ -313,11 +313,11 @@ euphorik.Conversation.prototype.flush = function() { euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) { // l'id du message var idMess = this.idMessageFromString($(element).attr("id")); - + if (idMess in this.conversations.messagesRepond) { $(element).addClass("repondEnEvidence"); } - + var thisConversation = this; $(".conversationLink", element).click( function(event) { @@ -327,7 +327,7 @@ euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) { return false; } ); - + $(element).click(function(event) { if ($(event.target).is("a") || $(event.target).parents("#outilsBan").length > 0) { return; @@ -386,7 +386,7 @@ euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) { // les outils de bannissement (uniquement pour les ekMaster) if (thisConversation.client.ekMaster) { $(".nick", element).hover( - function(e) { + function(e) { var userId = parseInt($(".id", this).text(), 10); var nick = $(this); var h = nick.outerHeight(); @@ -422,22 +422,22 @@ euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) { ); } }; - + /** * Etablit une liste des messages à mettre en evidence et des messages à cacher. * Puis applique un plan diabolique. * @param id l'id du message */ -euphorik.Conversation.prototype.afficherConversation = function(id) { +euphorik.Conversation.prototype.afficherConversation = function(id) { var thisConversation = this; - + var message = this.messagesParId[id]; if (!message) { return; } var mess = message.getConversation(this); - + // FIXME : cet appel est très lent $("#" + this.getId() + " .messages .message").each( function() {