- f(this.repondA)
-
- return messagesEnEvidence
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Représente une conversation.
- * @param numConv le numéro (appelé id) de la conversation
- * @param formateur outil permettant la mise en forme du texte des messages
- */
-function Conversation(num, util, formateur, client)
-{
- var thisConversation = this
-
- this.num = num // peut changer au cours de la vie de la conversation
- this.id = Math.random() * 100000000000000000
- this.messageOver = null // le message sur lequel se trouve le curseur
- this.util = util
- this.formateur = formateur
- this.client = client
- this.idDernierMessageAffiche = 0
-
- this.messages = new Array()
- this.messagesParId = new Object()
-
- this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page
-
- $("#conversations").append(
- '<div id="' + this.getId() + '" class="conversation">\
- <div class="titre">' +
- (num == 0 ? '' : '<div class="fermer">x</div><div class="lien">c</div>') +
- '<span class="next"><</span><span class="numPage">1</span><span class="prev">></span>\
- </div>\
- </div>'
- )
-
- // enlève la mise en évidence pour la conversation
- $("#conversations #" + this.getId()).hover(
- function(){},
- function(event)
- {
- $("#conversations .message").removeClass("cache")
- thisConversation.messageOver = null
- }
- )
-}
-
-/**
- * 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.setPage = function(pageCourante, dernierePage)
-{
- $("#conversations #" + this.getId() + " .numPage").text(pageCourante)
- $("#conversations #" + this.getId() + " .next").css("display", pageCourante == 1 ? "none" : "inline")
- $("#conversations #" + this.getId() + " .prev").css("display", dernierePage ? "none" : "inline")
-}
-
-/**
- * Evenement déclanché lors de l'insertion du lien de la conversation dans le message courant.
- */
-Conversation.prototype.eventLien = function(fun)
-{
- var thisConversation = this
-
- $("#conversations #" + this.getId() + " .titre .lien").click(
- function()
- {
- fun(thisConversation.num)
- }
- )
-}
-
-/**
- * Evenement déclanché lors de la fermeture de la conversation.
- */
-Conversation.prototype.eventFermer = function(fun)
-{
- var thisConversation = this
-
- $("#conversations #" + this.getId() + " .titre .fermer").click(
- function()
- {
- fun(thisConversation.num)
- }
- )
-}
-
-/**
- * @funNext appelé lorsque l'on passe à la page suivante (de 2 à 1 par exemple)
- * @funPrev appelé lorsque l'on passe à la page précédente (de 1 à 2 par exemple)
- * @funReset appelé lorsque l'on souhaite revenir à la page une
- */
-Conversation.prototype.setFunPage = function(funNext, funPrev, funReset)
-{
- var thisConversation = this
-
- $("#conversations #" + this.getId() + " .next").click(
- function() { funNext(thisConversation.num) }
- )
- $("#conversations #" + this.getId() + " .prev").click(
- function() { funPrev(thisConversation.num) }
- )
- $("#conversations #" + this.getId() + " .numPage").click(
- function() { funReset(thisConversation.num) }
- )
-}
-
-/**
- * Retourne l'id de la conversation sous la forme (par exemple) "conv3".
- */
-Conversation.prototype.getId = function()
-{
- return "conv" + this.id
-}
-
-Conversation.prototype.ajouterMessage = function(message)
-{
- this.messages.push(message)
- this.messagesParId[message.id] = message
- if (this.messages.length > this.nbMessageMax)
- 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()
- this.idDernierMessageAffiche = 0
- $("#conversations #" + this.getId() + " .message").remove()
-}
-
-/**
- * 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)
-{
- var thisConversation = this
-
- // est-ce que le prochain message est pair ? (permet d'alterner le style des messages)
- var messagePair = (this.idDernierMessageAffiche == 0 ? true :
- ($("#conversations #" + this.getId() + " div:first").attr("class").search("messagePair") == -1)
- )
-
- // construction de l'XHTML des messages
- var XHTML = ""
- for (var i = this.messages.length - 1; i >= 0; i--)
- if (this.messages[i].id > this.idDernierMessageAffiche)
- {
- var message = this.messages[i]
-
- // construit l'identifiant de la personne
- var identifiant =
- this.client.nickFormat == "nick" || message.login == "" ? this.formateur.traitementComplet(message.pseudo) :
- (this.client.nickFormat == "login" ? this.formateur.traitementComplet(message.login) :
- this.formateur.traitementComplet(message.pseudo) + "<span class=\"login\">(" + this.formateur.traitementComplet(message.login) +")</span>" )
-
- var XHTMLrepondA = ""
- for (var id in message.repondA)
- XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> "
- XHTMLrepondA = "<span class=\"repondA\">" + XHTMLrepondA + "</span>"
-
- XHTML +=
- "<div id=\"mess" + message.id.toString(36) + "\" class=\"" + (messagePair ? "messagePair" : "messageImpair") + " message" +
- (this.messages[i].appartientAuClient ? " proprietaire" : "") +
- (this.messages[i].clientARepondu ? " repondu" : "") +
- (this.messages[i].estUneReponse ? " reponse" : "") +
- (this.messages[i].systeme ? " systeme" : "") +
- (this.messages[i].ekMaster ? " ekMaster" : "") +
- "\">" +
- "<div class=\"extraire\">></div>" +
- "[<span class=\"date\">" + message.date + "</span>]" +
- "<span class=\"pseudo\"><span class=\"id\" style=\"display: none\">" + message.auteurId + "</span class=\"ident\">" + identifiant + "</span>:" +
- XHTMLrepondA +
- "<span class=\"contenu\">" + this.formateur.traitementComplet(message.contenu, message.pseudo) + "</span>" +
- "</div>"
-
- messagePair = !messagePair
- }
-
- // enlève les messages exedentaires
- var nbMessagesAffiche = $("#conversations #" + this.getId() + " .message").size()
-
- if (nbMessagesAffiche > this.nbMessageMax)
- $("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty()
-
-
- //.filter(function(){ return parseInt($(this).attr("id").substr(4), 36) > thisConversation.idDernierMessageAffiche })
-
- var DOM = $(XHTML)
- DOM.each(
- function()
- {
- $(".lienConv", this).click(
- function(event)
- {
- // FIXME : ya pas mieux ?
- var racine = $(event.target).text()
- funClickOuvrirConv(parseInt(racine.substring(1, racine.length - 1), 36))
- return false
- }
- )
-
- $("a[@rel*=lightbox]", this).lightBox()
-
- // les outils de bannissement (uniquement pour les ekMaster)
- if (thisConversation.client.ekMaster)
- $(".pseudo", this).hover(
- function(e)
- {
- var userId = parseInt($(".id", this).text())
- var element = $(this)
- var h = element.height()
- var offset = element.offset()
- var outils = $("#outilsBan").css("top", offset.top - 2).css("left", offset.left - 2).height(h < 16 ? 16 : h).width(element.width() + 16 * 3 + 4 + 64).show()
- $("img", outils).unbind()
- $("#slap", outils).click(
- function(e)
- {
- thisConversation.client.slap(userId, $("#outilsBan input").val())
- $("#outilsBan input").val("")
- }
- )
- $("#kick", outils).click(
- function(e)
- {
- thisConversation.client.kick(userId, $("#outilsBan input").val())
- $("#outilsBan input").val("")
- }
- )
- $("#ban", outils).click(
- function(e)
- {
- thisConversation.client.ban(userId, $("#outilsBan input").val())
- $("#outilsBan input").val("")
- }
- )
- },
- function(){}
- )
-
- $(this).click(
- function(event)
- {
- if ($(event.target).is("a")) return
-
- // l'id du message
- var idMess = $(this).attr("id").substr(4)
-
- // extraction d'une conversation
- if ($(event.target).is(".extraire"))
- {
- funClickOuvrirConv(parseInt(idMess, 36))
- return
- }
-
- var valCourant = $("input.message").val()
- if (valCourant == undefined) valCourant = ""
- var tag = $(".pseudo span.ident", this).text() + "{" + idMess + "}" + ">"
- if (valCourant.indexOf(tag, 0) == -1)
- $("input.message").val(tag + " " + valCourant)
- thisConversation.util.setCaretToEnd($("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
- }
- }
- )
- }
- )
- DOM.prependTo("#conversations #" + this.getId())