X-Git-Url: http://git.euphorik.ch/index.cgi?a=blobdiff_plain;f=js%2Fchat%2Fconversation.js;fp=js%2Fchat%2Fconversation.js;h=8c11752d8e84a272453a7ecb6e5934cba589eb97;hb=81393a74d648e4830dc8c7c562fa203f50a105f6;hp=5321380b4d071644e4e2486474f16839180ddf56;hpb=828daf607fdce322ea17c1786dff84f712aa1632;p=euphorik.git
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() {