this.messages.push(message)
this.messagesParId[message.id] = message
if (this.messages.length > this.nbMessageMax)
- delete this.messagesParId[this.messages.shift().id]
+ delete this.messagesParId[this.messages.shift().id]
+}
+
+Conversation.prototype.viderMessages = function()
+{
+ this.messages = new Array()
+ jQuery("#messages").empty()
+}
+
+/**
+ * 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
+
+ var idDernierMessageAffiche = jQuery("#messages div:first").attr("id")
+ if (idDernierMessageAffiche == undefined) idDernierMessageAffiche = "0"
+
+ var XHTML = ""
+ for (var i = this.messages.length - 1; i >= 0; i--)
+ if (parseInt(this.messages[i].id, 36) > parseInt(idDernierMessageAffiche, 36))
+ {
+ var message = this.messages[i]
+ var XHTMLrepondA = ""
+ for (var id in message.repondA)
+ XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> "
+ XHTMLrepondA = "<div class=\"repondA\">" + XHTMLrepondA + "</div>"
+
+ XHTML +=
+ "<div id=\"" + message.id + "\" class=\"" + (parseInt(message.id, 36) % 2 == 0 ? "messagePair" : "messageImpair") + " message" +
+ (this.messages[i].appartientAuClient ? " proprietaire" : "") + (this.messages[i].clientARepondu ? " repondu" : "") + (this.messages[i].estUneReponse ? " reponse" : "") + (this.messages[i].systeme ? " systeme" : "") +
+ "\" >" +
+ "[<div class=\"date\">" + message.date + "</div>]" +
+ "<div class=\"pseudo\">" + this.formateur.traitementComplet(message.pseudo) + "</div>:" +
+ XHTMLrepondA +
+ "<div class=\"contenu\">" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo))+ "</div>" +
+ "</div>"
+ }
+ jQuery("#messages").prepend(XHTML)
+
+ if (myLightbox != null)
+ myLightbox.updateImageList()
+
+ var nbMessagesAffiche = jQuery("#messages .message").size()
+ if (nbMessagesAffiche > this.nbMessageMax)
+ jQuery("#messages .message").slice(this.nbMessageMax, nbMessagesAffiche).empty();
+
+ jQuery("#messages .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each(
+ function()
+ {
+ jQuery(this).click(
+ function(event)
+ {
+ if (jQuery(event.target).is("a")) return
+
+ var valCourant = jQuery("input.message").val()
+ if (valCourant == undefined) valCourant = ""
+ var tag = jQuery(".pseudo", this).text() + "{" + jQuery(this).attr("id") + "}" + ">"
+ if (valCourant.indexOf(tag, 0) == -1)
+ jQuery("input.message").val(tag + " " + valCourant)
+ thisMessages.util.setCaretToEnd(jQuery("form input.message")[0])
+ }
+ )
+ // Q : pourquoi pas un .hover ?
+ // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence
+ .mousemove(
+ function(e)
+ {
+ if (this !== thisMessages.messageOver)
+ {
+ thisMessages.afficherConversation(this)
+ thisMessages.messageOver = this
+ }
+ }
+ )
+ }
+ )
}
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
* 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 numConversation le numéro de la conversation, 0 = principale
- * @param autoFlush si oui alors le message est directement ajouté à la vue
*/
-Messages.prototype.ajouterMessage = function(element, numConversation, autoFlush)
+Messages.prototype.ajouterMessage = function(element, numConversation)
{
- if (autoFlush == undefined) autoFlush = true // valeur par défaut
-
// pas d'utilisation de jquery pour des raisons de performance
this.idDernierMesssage = element.getAttribute("id")
if (this.conversations[numConversation] == null)
this.conversations[numConversation] = new Conversation()
-
this.conversations[numConversation].ajouterMessage(message)
-
- if (autoFlush)
- this.flush()
}
-
-// <<< TODO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-
-
+/**
+ * Demande à toutes les conversations de se flusher (afficher les messages non-affichés).
+ */
Messages.prototype.flush = function()
{
- var thisMessages = this
-
- var idDernierMessageAffiche = jQuery("#messages div:first").attr("id")
- if (idDernierMessageAffiche == undefined) idDernierMessageAffiche = "0"
-
- var XHTML = ""
- for (var i = this.messages.length - 1; i >= 0; i--)
- if (parseInt(this.messages[i].id, 36) > parseInt(idDernierMessageAffiche, 36))
- {
- var message = this.messages[i]
- var XHTMLrepondA = ""
- for (var id in message.repondA)
- XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> "
- XHTMLrepondA = "<div class=\"repondA\">" + XHTMLrepondA + "</div>"
-
- XHTML +=
- "<div id=\"" + message.id + "\" class=\"" + (parseInt(message.id, 36) % 2 == 0 ? "messagePair" : "messageImpair") + " message" +
- (this.messages[i].appartientAuClient ? " proprietaire" : "") + (this.messages[i].clientARepondu ? " repondu" : "") + (this.messages[i].estUneReponse ? " reponse" : "") + (this.messages[i].systeme ? " systeme" : "") +
- "\" >" +
- "[<div class=\"date\">" + message.date + "</div>]" +
- "<div class=\"pseudo\">" + this.formateur.traitementComplet(message.pseudo) + "</div>:" +
- XHTMLrepondA +
- "<div class=\"contenu\">" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo))+ "</div>" +
- "</div>"
- }
- jQuery("#messages").prepend(XHTML)\r
- \r
- if (myLightbox != null)
- myLightbox.updateImageList()
-
- var nbMessagesAffiche = jQuery("#messages .message").size()
- if (nbMessagesAffiche > this.nbMessageMax)
- jQuery("#messages .message").slice(this.nbMessageMax, nbMessagesAffiche).empty();
-
- jQuery("#messages .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each(
- function()
- {
- jQuery(this).click(
- function(event)
- {\r
- if (jQuery(event.target).is("a")) return\r
-
- var valCourant = jQuery("input.message").val()
- if (valCourant == undefined) valCourant = ""
- var tag = jQuery(".pseudo", this).text() + "{" + jQuery(this).attr("id") + "}" + ">"
- if (valCourant.indexOf(tag, 0) == -1)
- jQuery("input.message").val(tag + " " + valCourant)
- thisMessages.util.setCaretToEnd(jQuery("form input.message")[0])
- }
- )
- // Q : pourquoi pas un .hover ?
- // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence
- .mousemove(
- function(e)
- {
- if (this !== thisMessages.messageOver)
- {
- thisMessages.afficherConversation(this)
- thisMessages.messageOver = this
- }
- }
- )
- }
- )
+ for (var i = 0; i < this.conversations.length; i++)
+ this.conversations[i].flush().
}
/**
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()
}
/**
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:
)
}
+/* Osbolète
Messages.prototype.MAJPages = function(nbPage)
{
//alert(nbPage)
}
)
}
-}
+}*/
+/* Obsolète
Messages.prototype.allerSurLaPage = function(page)
{
if (page == this.page)
)
this.rafraichirMessages(true)
-}
+}*/