-
- jQuery("#conversations #" + this.getId()).prepend(XHTML)
-
- // mise à jour des images (LightBox) après l'ajout de message
- if (myLightbox != null)
- myLightbox.updateImageList()
-
- // enlève les messages exedentaires
- var nbMessagesAffiche = jQuery("#conversations #" + this.getId() + " .message").size()
-
- if (nbMessagesAffiche > this.nbMessageMax)
- jQuery("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty()
-
- // 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()
- {
- jQuery(".lienConv", this).click(
- function(event)
- {
- // FIXME : ya pas mieux ?
- var racine = jQuery(event.target).text()
- funClickOuvrirConv(parseInt(racine.substring(1, racine.length - 1), 36))
- return false
- }
- )
-
- // les outils de bannissement (uniquement pour les ekMaster)
- if (thisConversation.client.ekMaster)
- jQuery(".pseudo", this).hover(
- function(e)
- {
- var userId = parseInt(jQuery(this).attr("id").substr(4))
- var element = jQuery(e.target)
- var h = element.height()
- var offset = element.offset()
- var outils = jQuery("#outilsBan").css("top", offset.top - 2).css("left", offset.left - 2).height(h < 16 ? 16 : h).width(element.width() + 16 * 3 + 4).show()
- jQuery("img", outils).unbind()
- jQuery("#kick", outils).click(
- function(e)
- {
- thisConversation.client.kick(userId)
- }
- )
- jQuery("#ban", outils).click(
- function(e)
- {
- thisConversation.client.ban(userId)
- }
- )
- },
- function(){}
- )
-
- jQuery(this).click(
- function(event)
- {
- if (jQuery(event.target).is("a")) return
-
- // l'id du message
- var idMess = jQuery(this).attr("id")
-
- // extraction d'une conversation
- if (jQuery(event.target).is(".extraire"))
- {
- funClickOuvrirConv(parseInt(idMess, 36))
- return
- }
-
- var valCourant = jQuery("input.message").val()
- if (valCourant == undefined) valCourant = ""
- var tag = jQuery(".pseudo", this).text() + "{" + idMess + "}" + ">"
- if (valCourant.indexOf(tag, 0) == -1)
- jQuery("input.message").val(tag + " " + valCourant)
- thisConversation.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 (uniquement pour Firefox)
- .mousemove(
- function(e)
- {
- if (this !== thisConversation.messageOver)
- {
- thisConversation.afficherConversation(this)
- thisConversation.messageOver = this
- }
- }
- )
- }
- )
-
- if (this.messages.length > 0)
- this.idDernierMessageAffiche = this.messages[this.messages.length-1].id
-}
-
-/**
- * Etablit une liste des messages à mettre en evidence et des messages à cacher.
- * Puis applique un plan diabolique.
- * @param element un message de la liste des messages
- */
-Conversation.prototype.afficherConversation = function(element)
-{
- // cherche le message selectionné
- var id = parseInt(jQuery(element).attr("id"), 36)
-
- var message = this.messagesParId[id]
- if (message == undefined) return
-
- mess = message.getConversation(this)
-
- // FIXME : cet appel est très lent
- jQuery("#conversations #" + this.getId() + " .message").each(
- function()
- {
- var jq = jQuery(this)
- if (!mess.hasOwnProperty(parseInt(jq.attr("id"), 36)))
- jq.addClass("cache")
- else
- jq.removeClass("cache")
- }
- )
-}
-
-/**
- * Supprime une conversation.
- */
-Conversation.prototype.supprimer = function()
-{
- jQuery("#conversations #" + this.getId()).remove()
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Représente l'ensemble des messages affichés.
- */
-function Messages(client, formateur, util)
-{
- var thisMessages = this
-
- this.client = client
- this.formateur = formateur
- this.util = util
-
- this.conversations = new Array() // les conversations, la première représente la conversation principale
- this.nouvelleConversation(0)
-
- // l'objet JSONHttpRequest représentant la connexion d'attente
- this.attenteCourante = null
-}
-
-/**
- * Crée un message JSON contenant le message demandant un rafraichissement.
- */
-Messages.prototype.getJSONrafraichirMessages = function()
-{
- var mess = {
- "action" : "wait_event",
- "page" : "chat",
- "message_count" : conf.nbMessageAffiche,
- "main_page" : this.client.pagePrincipale,
- "conversations" : this.getJSONConversations()
- }
-
- if (this.client.cookie != null) mess["cookie"] = this.client.cookie;
- mess["last_message_id"] = this.conversations[0].idDernierMessageAffiche
-
- // obsolète
- //if (this.idDernierMessage != null) mess["last_message_id"] = this.idDernierMessage
-
- return mess
-}
-
-Messages.prototype.getJSONConversations = function()
-{
- var clientConv = this.client.getJSONConversations()
- for (var i = 1; i < this.conversations.length; i++)
- {
- clientConv[i-1]["last_message_id"] = this.conversations[i].idDernierMessageAffiche