X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2Fchat%2Fconversations.js;h=ea7e742dd0a4d117b945c341e352d162b84122b8;hp=3f9fe2dfc756e68832ef5628da3ae11e32d9c993;hb=81393a74d648e4830dc8c7c562fa203f50a105f6;hpb=828daf607fdce322ea17c1786dff84f712aa1632 diff --git a/js/chat/conversations.js b/js/chat/conversations.js index 3f9fe2d..ea7e742 100644 --- a/js/chat/conversations.js +++ b/js/chat/conversations.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 */ /** @@ -26,16 +26,14 @@ euphorik.Conversations = function(client, formater, util, communication, fragmen this.formater = formater; this.util = util; this.fragment = fragment; - + // un ensemble des messages (id) auquel l'utilisateur répond (vider après l'envoie du message courant) this.messagesRepond = {}; - + this.conversations = []; // les conversations, la première représente la conversation principale - + this.nouvelleConversation(0); - - this.trollIdCourant = 0; - + this.comet = communication.createCometConnection("chat"); }; @@ -47,13 +45,13 @@ euphorik.Conversations.prototype.prefixIdMessage = "rep"; * Permet de définir un message comme étant ou n'étant plus un message auquel l'utilisateur * répond. */ -euphorik.Conversations.prototype.toggleMessageRepond = function(mess) { +euphorik.Conversations.prototype.toggleMessageRepond = function(mess) { // est-ce que l'on répond déjà à ce message ? si oui alors on l'enlève de la liste if (mess.id in this.messagesRepond) { this.enleverMessageRepond(mess); return; } - + this.ajouterMessageRepond(mess); }; @@ -74,11 +72,11 @@ euphorik.Conversations.prototype.mettreAJourFragment = function() { */ euphorik.Conversations.prototype.enleverMessagesRepond = function() { var thisConversations = this; - + objectEach(this.messagesRepond, function(messId, mess) { thisConversations.enleverMessageRepond(mess); }); - + // on réinitialise pour être sur que tout est bien enlevé this.messagesRepond = {}; $("#conversations .message").removeClass("repondEnEvidence"); @@ -100,7 +98,7 @@ euphorik.Conversations.prototype.enleverMessageRepond = function(mess) { */ euphorik.Conversations.prototype.ajouterMessageRepond = function(mess) { var thisConversations = this; - + // est-ce que le message fait partie de la même conversation que les autres messages ? // TODO : solution plus élégante pour prendre un mess parmis messagesRepond !? var mess2; @@ -110,19 +108,19 @@ euphorik.Conversations.prototype.ajouterMessageRepond = function(mess) { break; } } - + if (mess2 && mess2.racineId !== mess.racineId) { this.util.messageDialog("Impossible de répondre à deux messages ne faisant pas partie de la même conversation"); return; } - + $("form#posterMessage #repondA .messages").append(mess.XHTML(undefined, this.prefixIdMessage)); this.messagesRepond[mess.id] = mess; - + // ajout la classe 'repondEnEvidence' au message. comme il peut se trouver potentiellement dans // chaque conversation on construit tous les id potentiels $(mess.getId(this.prefixIdMessage) + ", " + this.exprIdsPotentiels(mess)).addClass("repondEnEvidence"); - + $("#" + mess.getId(this.prefixIdMessage)).click( function() { $(this).fadeOut("normal", function() { @@ -152,9 +150,9 @@ euphorik.Conversations.prototype.exprIdsPotentiels = function(mess) { euphorik.Conversations.prototype.rafraichireNombreMessagesRepond = function() { // TODO : ya pas mieux pour trouver le nombre d'objet ? var nb = objectMemberCount(this.messagesRepond); - + $("#posterMessage #repondA .nb").text(nb); - + var boite = $("#posterMessage #repondA"); if (nb > 0) { boite.show(); @@ -182,22 +180,21 @@ euphorik.Conversations.prototype.getJSONrafraichirMessages = function() { var mess = { "message_count" : euphorik.conf.nbMessageAffiche, "main_page" : this.client.mainConversationPage, - "conversations" : this.getJSONConversations(), - "troll_id" : this.trollIdCourant + "conversations" : this.getJSONConversations() }; - + if (this.client.cookie) { mess.cookie = this.client.cookie; } mess.last_message_id = this.conversations[0].idDernierMessageAffiche; - + return mess; }; euphorik.Conversations.prototype.getJSONConversations = function() { var thisConversations = this; var clientConv = []; - + this.client.conversations.each(function(i, conv) { clientConv.push({ root : conv.root, @@ -218,7 +215,7 @@ euphorik.Conversations.prototype.ajouterMessages = function(elements, numConvers if (!elements.messages.length) { return this.conversations[numConversation] !== undefined; } - + for (var i = 0; i < elements.messages.length; i++) { if (this.ajouterMessage(elements.messages[i], numConversation)) { // si une nouvelle conversation a été créée alors on lui donne la racine @@ -227,15 +224,15 @@ euphorik.Conversations.prototype.ajouterMessages = function(elements, numConvers this.mettreAJourFragment(); } } - + this.flush(numConversation); - + // renseigne la conversation sur la page courante et si c'est la dernière this.conversations[numConversation].setPage( numConversation === 0 ? this.client.mainConversationPage : this.client.conversations[numConversation - 1].page, elements.last_page ); - + return true; }; @@ -246,16 +243,16 @@ euphorik.Conversations.prototype.ajouterMessages = function(elements, numConvers * @param numConversation le numéro de la conversation, 0 = principale * @return true si une nouvelle conversation a été créée sinon false */ -euphorik.Conversations.prototype.ajouterMessage = function(element, numConversation) { - var message = +euphorik.Conversations.prototype.ajouterMessage = function(element, numConversation) { + var message = new euphorik.Message( this.client, this.formater, element ); - + var nouvelleConversation = false; - + if (!this.conversations[numConversation]) { nouvelleConversation = true; this.nouvelleConversation(numConversation); @@ -269,7 +266,7 @@ euphorik.Conversations.prototype.nouvelleConversation = function(num) { var thisConversations = this; this.conversations[num] = new euphorik.Conversation(this, num); - + this.conversations[num].setFunPage( function(num) { // page suivante thisConversations.client.nextPage(num - 1); @@ -285,7 +282,7 @@ euphorik.Conversations.prototype.nouvelleConversation = function(num) { } } ); - + this.ajusterLargeurConversations(); }; @@ -297,7 +294,7 @@ euphorik.Conversations.prototype.supprimerConversation = function(num) { return; // la numéro 0 ne peut être supprimé } this.conversations[num].supprimer(); - + // les numéros sont réassigné for (var i = num; i < this.conversations.length - 1; i++) { this.conversations[i] = this.conversations[i+1]; @@ -305,9 +302,9 @@ euphorik.Conversations.prototype.supprimerConversation = function(num) { } this.conversations.pop(); this.ajusterLargeurConversations(); - + this.client.supprimerConversation(num - 1); - + this.rafraichirMessages(true); this.mettreAJourFragment(); }; @@ -322,7 +319,7 @@ euphorik.Conversations.prototype.ajusterLargeurConversations = function() { // le "- 0.01" evite que IE se chie dessus lamentablement et affiche les conversations les unes au dessus des autres //if($.browser["msie"]) // largeurPourcent -= 0.05 - + $("#conversations td").css("width", largeurPourcent + "%"); }; @@ -338,10 +335,10 @@ euphorik.Conversations.prototype.flushAll = function() { /** * Demande à une conversation de se flusher. */ -euphorik.Conversations.prototype.flush = function(numConv) { +euphorik.Conversations.prototype.flush = function(numConv) { this.conversations[numConv].flush(); }; - + euphorik.Conversations.prototype.ouvrirConversation = function(racine) { if (this.client.ajouterConversation(racine)) { this.rafraichirMessages(true); @@ -363,38 +360,26 @@ euphorik.Conversations.prototype.viderMessages = function() { */ euphorik.Conversations.prototype.rafraichirMessages = function(vider) { var thisConversations = this; - + vider = vider || false; - + if (vider) { this.conversations.each(function(i, conv) { conv.idDernierMessageAffiche = 0; }); } - - thisConversations.util.showWaitBar(); // pour faire patienter le user :) - + + thisConversations.util.showWaitBar(); // pour faire patienter le user :) + this.comet.waitEvent( - function() { return thisConversations.getJSONrafraichirMessages(); }, { - "new_troll" : - function(data) { - thisConversations.trollIdCourant = data.troll_id; - $("#trollCourant .troll").html(thisConversations.formater.completeProcessing(data.content)).unbind("click").click( - function() { - thisConversations.ouvrirConversation(data.message_id); - } - ); - - $("#trollCourant .troll a[@rel*=lightbox]").lightBox(); - }, "new_messages" : - function(data) { - + function(data) { + if (vider) { thisConversations.viderMessages(); } - + // ajoute les messages reçus à leur conversation respective data.conversations.each(function(numConv, conv) { if (!thisConversations.ajouterMessages(conv, numConv)) { @@ -402,15 +387,16 @@ euphorik.Conversations.prototype.rafraichirMessages = function(vider) { thisConversations.client.supprimerConversation(numConv - 1); } }); - + if (vider) { thisConversations.afficherMessagesRepondConversations(); } - - vider = false; - + + vider = false; + thisConversations.util.hideWaitBar(); } - } + }, + function() { return thisConversations.getJSONrafraichirMessages(); } ); };