X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2FpageMinichat.js;fp=js%2FpageMinichat.js;h=2be7ca5af0930c899de54150494c868613ed5f48;hp=c118c5415e72986b189e5bbafa2c363926d6418a;hb=13bf850da2316cde3ad2ff8d5c26fb32928bf7b4;hpb=00f9e2153808b4f03a455958489c786d2ae24489 diff --git a/js/pageMinichat.js b/js/pageMinichat.js index c118c54..2be7ca5 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -250,6 +250,7 @@ function Message(id, date, pseudo, login, contenu) this.appartientAuClient = false this.clientARepondu = false this.estUneReponse = false + this.ekMaster = false this.systeme = false // est-ce un message 'système' ? @@ -353,11 +354,11 @@ function Conversation(num, util, formateur, client) } /** - * Défini les fonctions (callback) appelées lorsque l'on change de page. + * Défini la page courante et s'il l'on se trouve sur la dernière page. * @pageCourante la page courante * @dernierePage true si c'est la dernière page sinon false */ -Conversation.prototype.eventsPage = function(pageCourante, dernierePage) +Conversation.prototype.setPage = function(pageCourante, dernierePage) { jQuery("#conversations #" + this.getId() + " .numPage").text(pageCourante) jQuery("#conversations #" + this.getId() + " .next").css("display", pageCourante == 1 ? "none" : "inline") @@ -430,6 +431,9 @@ Conversation.prototype.ajouterMessage = function(message) delete this.messagesParId[this.messages.shift().id] } +/** + * FIXME : méthode très lourde. ne serait-ce pas mieux de virer d'un coup l'élément conversation et d'en remettre un vide ? + */ Conversation.prototype.viderMessages = function() { this.messages = new Array() @@ -440,6 +444,7 @@ Conversation.prototype.viderMessages = function() /** * Après l'ajout d'un ou plusieurs message cette méthode est appelée afin * d'afficher les messages non-affichés. + * FIXME : méthode super lourde, à optimiser. * @param funClickExtract fonction (fun(numMess)) appellée lors du clic sur un bouton "extraire" */ Conversation.prototype.flush = function(funClickOuvrirConv) @@ -475,6 +480,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv) (this.messages[i].clientARepondu ? " repondu" : "") + (this.messages[i].estUneReponse ? " reponse" : "") + (this.messages[i].systeme ? " systeme" : "") + + (this.messages[i].ekMaster ? " ekMaster" : "") + "\">" + "
>
" + "[" + message.date + "]" + @@ -498,7 +504,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv) if (nbMessagesAffiche > this.nbMessageMax) jQuery("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty() - // Ajoute les événements liés à chaque message + // ajoute les événements liés à chaque nouveau message jQuery("#conversations #" + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > thisConversation.idDernierMessageAffiche}).each( function() { @@ -649,12 +655,24 @@ Messages.prototype.getJSONConversations = function() * Ajoute un ensemble de messages puis les affiches. * @param elements un tableau d'éléments JSON représentant les messages, voir protocole.txt * @param numConversation le numéro de la conversation auquel appartiennent les messages + * @return true si les messages on été ajoutés, false si la conversation n'existe pas et qu'il n'y a pas de message */ Messages.prototype.ajouterMessages = function(elements, numConversation) { + if (elements["messages"].length == 0 && typeof(this.conversations[numConversation]) == "undefined") + return false + for (var i = 0; i < elements["messages"].length; i++) this.ajouterMessage(elements["messages"][i], numConversation) 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.pagePrincipale : this.client.conversations[numConversation - 1].page, + elements["last_page"] + ) + + return true } /** @@ -670,10 +688,6 @@ Messages.prototype.ajouterMessage = function(element, numConversation) // pas d'utilisation de jquery pour des raisons de performance var id = element["id"] - // Obsolète - /*if (this.idDernierMessage == null || id > this.idDernierMessage) - this.idDernierMessage = id*/ - var message = new Message( id, element["date"], @@ -687,6 +701,7 @@ Messages.prototype.ajouterMessage = function(element, numConversation) message.estUneReponse = element["is_a_reply"] message.systeme = element["system"] message.setRepondA(element["answer_to"]) + message.ekMaster = element["ek_master"] if (this.conversations[numConversation] == null) { @@ -700,7 +715,7 @@ Messages.prototype.ajouterMessage = function(element, numConversation) { thisPage.util.replaceSelection( jQuery("form input.message")[0], - "{" + thisMessages.client.conversations[num-1].root + "}" + "{" + thisMessages.client.conversations[num-1].root.toString(36) + "}" ) } ) @@ -857,16 +872,14 @@ Messages.prototype.rafraichirMessages = function(vider) // ajoute les messages reçus à leur conversation respective for (var numConv = 0; numConv < data["conversations"].length; numConv++) { - // ya pas de nouveaux message -> on passe à la prochaine conversation - if (data["conversations"][numConv]["messages"].length == 0) continue - - thisMessages.ajouterMessages(data["conversations"][numConv], numConv) + // ya pas de nouveaux message -> on passe à la prochaine conversation FIXME : marche pas + //if (data["conversations"][numConv]["messages"].length == 0) continue - // définit les événements liés à la conversation - thisMessages.conversations[numConv].eventsPage( - numConv == 0 ? thisMessages.client.pagePrincipale : thisMessages.client.conversations[numConv - 1].page, - data["conversations"][numConv]["last_page"] - ) + if (! thisMessages.ajouterMessages(data["conversations"][numConv], numConv)) + { + thisMessages.util.messageDialogue("La conversation {" + thisMessages.client.conversations[numConv -1].root.toString(36) + "} n'existe pas") + thisMessages.client.supprimerConversation(numConv - 1) + } } // rappel de la fonction dans 100 ms