X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=js%2FpageMinichat.js;h=223f6c976532094faa120407910a7d29ae1cb84d;hb=e9efabd2fcb945c99ee4cf2eec0823c0fa64102b;hp=30938071b0bbe0b13bfa263f08a926fba352e95b;hpb=83bc327682deb0f857cdbbc71b619350cee6deee;p=euphorik.git diff --git a/js/pageMinichat.js b/js/pageMinichat.js index 3093807..223f6c9 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -205,10 +205,9 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) data : this.util.xmlVersAction(this.getXMLMessage(pseudo, message, repondA)), dataType : "xml", success : function(data, textStatus) - { - // TODO : traiter les erreurs - //alert(data) - jQuery("form input.message").val("") + { + if(jQuery("statut", data.documentElement).text() == "ok") + jQuery("form input.message").val("") } } ) @@ -307,99 +306,37 @@ Message.prototype.afficherConversation = function(messages) /////////////////////////////////////////////////////////////////////////////////////////////////// /** - * Représente l'ensemble des messages affichés. + * Représente une conversation. */ -function Messages(client, formateur, util) +function Conversation() { - this.client = client - this.formateur = formateur - this.util = util - - this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page - this.idDernierMesssage = null // l'id du dernier message connu - this.page = 1 // par défaut on se trouve sur la première page - this.messages = new Array() this.messagesParId = new Object() - // l'objet XMLHttpRequest représentant la connexion d'attente - this.attenteCourante = null - - var messageOver = null // element -} + this.idDernierMesssage = null // la racine de la conversation (string), null = conversation principale -/** - * Crée un document XML contenant le message demandant un rafraichissement. - */ -Messages.prototype.getXMLrafraichirMessages = function() -{ - var XMLDocument = this.util.creerDocumentXMLAction() - XMLDocument.documentElement.setAttribute("name", "refreshMessages") - - //alert(this.util.serializer.serializeToString(XMLDocument)) - - if (this.client.identifie()) - { - var nodeCookie= XMLDocument.createElement("cookie") - nodeCookie.appendChild(XMLDocument.createTextNode(this.client.cookie)) - XMLDocument.documentElement.appendChild(nodeCookie) - } - - if (this.idDernierMesssage != null) - { - var nodeDernierMessageId = XMLDocument.createElement("dernierMessageId") - nodeDernierMessageId.appendChild(XMLDocument.createTextNode(this.idDernierMesssage)) - XMLDocument.documentElement.appendChild(nodeDernierMessageId) - } - - var nodeNombreMessage = XMLDocument.createElement("nombreMessage") - nodeNombreMessage.appendChild(XMLDocument.createTextNode(this.nbMessageMax)) - XMLDocument.documentElement.appendChild(nodeNombreMessage) - - var nodePage = XMLDocument.createElement("page") - nodePage.appendChild(XMLDocument.createTextNode(this.page)) - XMLDocument.documentElement.appendChild(nodePage) - - return XMLDocument; + this.page = 1 // par défaut on se trouve sur la première page } -/** - * Création d'un nouveau message. - * Les message sont données dans l'ordre de leur id. - * Met directement à jour l'affichage. - * @param element un element xml représentant le message - * @param autoFlush si oui alors le message est directement ajouté à la vue - */ -Messages.prototype.ajouterMessage = function(element, autoFlush) +Conversation.prototype.ajouterMessage = function(message) { - if (autoFlush == undefined) autoFlush = true // valeur par défaut - - // pas d'utilisation de jquery pour des raisons de performance - this.idDernierMesssage = element.getAttribute("id") - - var message = new Message( - this.idDernierMesssage, - jQuery("date", element).text(), - jQuery("pseudo", element).text(), - jQuery("contenu", element).text() - ) - - message.appartientAuClient = jQuery("proprietaire", element).text() == "true" - message.clientARepondu = jQuery("repondu", element).text() == "true" - message.estUneReponse = jQuery("reponse", element).text() == "true" - message.systeme = jQuery("systeme", element).text() == "true" - message.setRepondA(jQuery("repondA", element)) - this.messages.push(message) this.messagesParId[message.id] = message if (this.messages.length > this.nbMessageMax) delete this.messagesParId[this.messages.shift().id] +} - if (autoFlush) - this.flush() +Conversation.prototype.viderMessages = function() +{ + this.messages = new Array() + jQuery("#messages").empty() } -Messages.prototype.flush = function() +/** + * Après l'ajout d'un ou plusieurs message cette méthode est appelée afin + * d'afficher les messages non-affichés. + */ +Conversation.prototype.flush = function() { var thisMessages = this @@ -426,8 +363,8 @@ Messages.prototype.flush = function() "
" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo))+ "
" + "" } - jQuery("#messages").prepend(XHTML) - + jQuery("#messages").prepend(XHTML) + if (myLightbox != null) myLightbox.updateImageList() @@ -440,8 +377,8 @@ Messages.prototype.flush = function() { jQuery(this).click( function(event) - { - if (jQuery(event.target).is("a")) return + { + if (jQuery(event.target).is("a")) return var valCourant = jQuery("input.message").val() if (valCourant == undefined) valCourant = "" @@ -467,6 +404,116 @@ Messages.prototype.flush = function() ) } +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Représente l'ensemble des messages affichés. + */ +function Messages(client, formateur, util) +{ + this.client = client + this.formateur = formateur + this.util = util + + this.conversations = new Array() // les conversations, la première représente la conversation principale + this.conversations[0] = new Conversation() + + this.idDernierMesssage = null // l'id du dernier message connu + + // l'objet XMLHttpRequest représentant la connexion d'attente + this.attenteCourante = null + + var messageOver = null // element +} + +/** + * Crée un document XML contenant le message demandant un rafraichissement. + */ +Messages.prototype.getXMLrafraichirMessages = function() +{ + var XMLDocument = this.util.creerDocumentXMLAction() + XMLDocument.documentElement.setAttribute("name", "refreshMessages") + + //alert(this.util.serializer.serializeToString(XMLDocument)) + + if (this.client.identifie()) + { + var nodeCookie= XMLDocument.createElement("cookie") + nodeCookie.appendChild(XMLDocument.createTextNode(this.client.cookie)) + XMLDocument.documentElement.appendChild(nodeCookie) + } + + if (this.idDernierMesssage != null) + { + var nodeDernierMessageId = XMLDocument.createElement("dernierMessageId") + nodeDernierMessageId.appendChild(XMLDocument.createTextNode(this.idDernierMesssage)) + XMLDocument.documentElement.appendChild(nodeDernierMessageId) + } + + var nodeNombreMessage = XMLDocument.createElement("nombreMessage") + nodeNombreMessage.appendChild(XMLDocument.createTextNode(conf.nbMessageAffiche)) + XMLDocument.documentElement.appendChild(nodeNombreMessage) + + var nodePage = XMLDocument.createElement("page") + nodePage.appendChild(XMLDocument.createTextNode(this.conversation[0].page)) + XMLDocument.documentElement.appendChild(nodePage) + + // les conversations + for (var i = 1; i < this.conversations.length; i++) + { + var nodeConversation = XMLDocument.createElement("conversation") + XMLDocument.documentElement.appendChild(nodeConversation) + + var nodeRacine = XMLDocument.createElement("racine") + nodeRacine.appendChild(XMLDocument.createTextNode(this.conversation.racine)) + nodeConversation.appendChild(nodeRacine) + + var nodePageConv = XMLDocument.createElement("page") + nodePageConv.appendChild(XMLDocument.createTextNode(this.conversation.page)) + nodeConversation.appendChild(nodePageConv) + } + + return XMLDocument; +} + +/** + * Création d'un nouveau message. + * Les message sont données dans l'ordre de leur id. + * @param element un element xml représentant le message + * @param numConversation le numéro de la conversation, 0 = principale + */ +Messages.prototype.ajouterMessage = function(element, numConversation) +{ + // pas d'utilisation de jquery pour des raisons de performance + this.idDernierMesssage = element.getAttribute("id") + + var message = new Message( + this.idDernierMesssage, + jQuery("date", element).text(), + jQuery("pseudo", element).text(), + jQuery("contenu", element).text() + ) + + message.appartientAuClient = jQuery("proprietaire", element).text() == "true" + message.clientARepondu = jQuery("repondu", element).text() == "true" + message.estUneReponse = jQuery("reponse", element).text() == "true" + message.systeme = jQuery("systeme", element).text() == "true" + message.setRepondA(jQuery("repondA", element)) + + if (this.conversations[numConversation] == null) + this.conversations[numConversation] = new Conversation() + this.conversations[numConversation].ajouterMessage(message) +} + +/** + * Demande à toutes les conversations de se flusher (afficher les messages non-affichés). + */ +Messages.prototype.flush = function() +{ + for (var i = 0; i < this.conversations.length; i++) + this.conversations[i].flush(). +} + /** * Etablit une liste des messages à mettre en evidence et des messages à cacher. * Puis applique un plan diabolique. @@ -497,8 +544,9 @@ Messages.prototype.afficherConversation = function(element) Messages.prototype.viderMessages = function() { this.idDernierMesssage = null - this.messages = new Array() - jQuery("#messages").empty() + + for (var i = 0; i < this.conversations.length; i++) + this.conversations[i].viderMessages() } /** @@ -523,6 +571,7 @@ Messages.prototype.rafraichirMessages = function(vider) var thisMessages = this // caisupair javacrypte //this.util.log(this.util.serializer.serializeToString(this.getXMLrafraichirMessages())) + //alert(this.util.xmlVersAction(this.getXMLrafraichirMessages()).action) this.attenteCourante = jQuery.ajax({ type: "POST", url: "request", @@ -536,15 +585,25 @@ Messages.prototype.rafraichirMessages = function(vider) if (vider) thisMessages.viderMessages() - thisMessages.MAJPages(parseInt(jQuery("nbPage", data.documentElement).text())) + //thisMessages.MAJPages(parseInt(jQuery("nbPage", data.documentElement).text())) - reponse = jQuery("message", data.documentElement).each( + // ajoute chaque message reçu à sa conversation respective + jQuery("conversation", data.documentElement).each( function(i) { - thisMessages.ajouterMessage(this, false) + jQuery("message", this).each( + function(j) + { + thisMessages.ajouterMessage(this, numConv) + } + ) } ) - thisMessages.flush() + + // demande à toutes les conversations d'afficher les messages non-affichés + thisMessages.flush() + + // rappel de la fonction dans 100 ms setTimeout(function(){ thisMessages.rafraichirMessages() }, 100); }, error: @@ -556,6 +615,7 @@ Messages.prototype.rafraichirMessages = function(vider) ) } +/* Osbolète Messages.prototype.MAJPages = function(nbPage) { //alert(nbPage) @@ -578,8 +638,9 @@ Messages.prototype.MAJPages = function(nbPage) } ) } -} +}*/ +/* Obsolète Messages.prototype.allerSurLaPage = function(page) { if (page == this.page) @@ -600,5 +661,5 @@ Messages.prototype.allerSurLaPage = function(page) ) this.rafraichirMessages(true) -} +}*/