/**\r
* Représente l'ensemble des conversations affichés.\r
*/\r
-euphorik.Conversations = function(client, formateur, util) {\r
+euphorik.Conversations = function(client, formateur, util, fragment) {\r
this.client = client;\r
this.formateur = formateur;\r
this.util = util;\r
+ this.fragment = fragment;\r
\r
// un ensemble des messages (id) auquel l'utilisateur répond (vider après l'envoie du message courant)\r
this.messagesRepond = {};\r
this.ajouterMessageRepond(mess);\r
};\r
\r
+/**\r
+ * Met à jour le fragment de l'url renseignant sur les conversations ouvertes.\r
+ */\r
+euphorik.Conversations.prototype.mettreAJourFragment = function() {\r
+ conv = [];\r
+ for(var i = 1; i < this.conversations.length; i++) {\r
+ conv.push(this.conversations[i].racine.id);\r
+ }\r
+ this.fragment.setVal("conv", conv);\r
+ this.fragment.write();\r
+};\r
+\r
/**\r
* Enlève tous les messages auquel l'utilisateur souhaite répondre.\r
*/\r
* Définit un message comme y répondant.\r
*/\r
euphorik.Conversations.prototype.ajouterMessageRepond = function(mess) {\r
- var thisMessages = this;\r
+ var thisConversations = this;\r
\r
// est-ce que le message fait partie de la même conversation que les autres messages ?\r
// TODO : solution plus élégante pour prendre un mess parmis messagesRepond !?\r
$("#" + mess.getId(this.prefixIdMessage)).click(\r
function() {\r
$(this).fadeOut("normal", function() {\r
- thisMessages.enleverMessageRepond(mess);\r
+ thisConversations.enleverMessageRepond(mess);\r
$("form#posterMessage #repondA .messages").hide();\r
});\r
}\r
};\r
\r
euphorik.Conversations.prototype.getJSONConversations = function() {\r
- var thisConversations = this\r
+ var thisConversations = this;\r
var clientConv = [];\r
\r
this.client.conversations.each(function(i, conv) {\r
if (!elements.messages.length) {\r
return this.conversations[numConversation] !== undefined;\r
}\r
-\r
+ \r
for (var i = 0; i < elements.messages.length; i++) {\r
- // si une nouvelle conversation a été créée alors on lui donne la racine\r
if (this.ajouterMessage(elements.messages[i], numConversation)) {\r
+ // si une nouvelle conversation a été créée alors on lui donne la racine\r
+ // TODO : ce block ne devrait pas se trouver ici mais dans "nouvelleConversation"\r
this.conversations[numConversation].setRacine(elements.first);\r
+ this.mettreAJourFragment();\r
}\r
}\r
\r
* @param numConversation le numéro de la conversation, 0 = principale\r
* @return true si une nouvelle conversation a été créée sinon false\r
*/\r
-euphorik.Conversations.prototype.ajouterMessage = function(element, numConversation) {\r
- var thisMessages = this;\r
-\r
- // pas d'utilisation de jquery pour des raisons de performance \r
+euphorik.Conversations.prototype.ajouterMessage = function(element, numConversation) { \r
var message = \r
new euphorik.Message(\r
this.client,\r
\r
if (!this.conversations[numConversation]) {\r
nouvelleConversation = true;\r
- this.nouvelleConversation(\r
- numConversation,\r
- function(num) { // fermeture de la conversation\r
- thisMessages.supprimerConversation(num);\r
- },\r
- function(num) { // insertion du lien vers la conversation\r
- thisPage.util.replaceSelection(\r
- $("form#posterMessage input.message")[0],\r
- "{" + thisMessages.client.conversations[num-1].root.toString(36) + "}"\r
- );\r
- }\r
- );\r
+ this.nouvelleConversation(numConversation);\r
}\r
\r
this.conversations[numConversation].ajouterMessage(message);\r
return nouvelleConversation;\r
};\r
\r
-euphorik.Conversations.prototype.nouvelleConversation = function(num, funFermer, funLien)\r
-{\r
- var thisMessages = this;\r
+euphorik.Conversations.prototype.nouvelleConversation = function(num) {\r
+ var thisConversations = this;\r
\r
this.conversations[num] = new euphorik.Conversation(this, num);\r
- \r
- if (funFermer) {\r
- this.conversations[num].eventFermer(funFermer);\r
- }\r
- \r
- if (funLien) {\r
- this.conversations[num].eventLien(funLien);\r
- }\r
-\r
+ \r
this.conversations[num].setFunPage(\r
function(num) { // page suivante\r
- thisMessages.client.pageSuivante(num - 1);\r
- thisMessages.rafraichirMessages(true);\r
+ thisConversations.client.pageSuivante(num - 1);\r
+ thisConversations.rafraichirMessages(true);\r
},\r
function(num) { // page précédente\r
- thisMessages.client.pagePrecedente(num - 1);\r
- thisMessages.rafraichirMessages(true);\r
+ thisConversations.client.pagePrecedente(num - 1);\r
+ thisConversations.rafraichirMessages(true);\r
},\r
function(num) { // retour à la page une\r
- if (thisMessages.client.goPremierePage(num - 1)) {\r
- thisMessages.rafraichirMessages(true);\r
+ if (thisConversations.client.goPremierePage(num - 1)) {\r
+ thisConversations.rafraichirMessages(true);\r
}\r
}\r
);\r
}\r
this.conversations[num].supprimer();\r
\r
- // décalage TODO : supprimer le dernier élément \r
+ // les numéros sont réassigné\r
for (var i = num; i < this.conversations.length - 1; i++) {\r
this.conversations[i] = this.conversations[i+1];\r
this.conversations[i].num -= 1;\r
this.client.supprimerConversation(num - 1);\r
\r
this.rafraichirMessages(true);\r
+ this.mettreAJourFragment();\r
};\r
\r
/**\r
* @param vider vide tous les messages avant d'afficher les nouveaux\r
*/\r
euphorik.Conversations.prototype.rafraichirMessages = function(vider) {\r
- var thisMessages = this;\r
+ var thisConversations = this;\r
\r
vider = vider || false;\r
\r
conv.idDernierMessageAffiche = 0;\r
});\r
}\r
+
+ thisConversations.util.showWaitBar(); // pour faire patienter le user :)
\r
this.comet.waitEvent(\r
- function() { return thisMessages.getJSONrafraichirMessages(); },\r
+ function() { return thisConversations.getJSONrafraichirMessages(); },\r
{\r
"new_troll" :\r
- function(data) { \r
- thisMessages.trollIdCourant = data.troll_id;\r
- $("#trollCourant .troll").html(thisMessages.formateur.traitementComplet(data.content)).unbind("click").click(\r
+ function(data) {\r
+ thisConversations.trollIdCourant = data.troll_id;\r
+ $("#trollCourant .troll").html(thisConversations.formateur.traitementComplet(data.content)).unbind("click").click(\r
function() {\r
- thisMessages.ouvrirConversation(data.message_id);\r
+ thisConversations.ouvrirConversation(data.message_id);\r
}\r
);\r
\r
$("#trollCourant .troll a[@rel*=lightbox]").lightBox();\r
},\r
"new_messages" :\r
- function(data) {\r
+ function(data) {
+ \r
if (vider) {\r
- thisMessages.viderMessages();\r
+ thisConversations.viderMessages();\r
}\r
\r
// ajoute les messages reçus à leur conversation respective\r
data.conversations.each(function(numConv, conv) {\r
- if (!thisMessages.ajouterMessages(conv, numConv)) {\r
- thisMessages.util.messageDialogue("La conversation {" + thisMessages.client.conversations[numConv - 1].root.toString(36) + "} n'existe pas");\r
- thisMessages.client.supprimerConversation(numConv - 1);\r
+ if (!thisConversations.ajouterMessages(conv, numConv)) {\r
+ thisConversations.util.messageDialogue("La conversation {" + thisConversations.client.conversations[numConv - 1].root.toString(36) + "} n'existe pas");\r
+ thisConversations.client.supprimerConversation(numConv - 1);\r
}\r
});\r
\r
if (vider) {\r
- thisMessages.afficherMessagesRepondConversations();\r
+ thisConversations.afficherMessagesRepondConversations();\r
}\r
\r
- vider = false;\r
+ vider = false;
+
+ thisConversations.util.hideWaitBar();\r
}\r
}\r
);\r