- }
- f(this.repondA, true)
-
- return messagesEnEvidence
-}
-
-/**
- * Renvoie le message sous la forme de code XHTML (string) prêt à être inséré dans un document.
- * Aucun callback n'est affecté.
- */
-Message.prototype.XHTML = function(messagePair, pre)
-{
- if (messagePair == undefined)
- messagePair = true
- if (pre == undefined)
- pre = ""
-
- // construit l'identifiant de la personne
- var identifiant =
- this.client.nickFormat == "nick" || this.login == "" ? this.formateur.traitementComplet(this.pseudo) :
- (this.client.nickFormat == "login" ? this.formateur.traitementComplet(this.login) :
- this.formateur.traitementComplet(this.pseudo) + "<span class=\"login\">(" + this.formateur.traitementComplet(this.login) +")</span>" )
-
- var XHTMLrepondA = ""
- var debut = true
- for (var id in this.repondA)
- {
- if (!debut) XHTMLrepondA += ", "
- XHTMLrepondA += this.formateur.traitementComplet(this.repondA[id].pseudo)
- debut = false
- }
- if (XHTMLrepondA != "")
- XHTMLrepondA = "<span class=\"repondA\">" + XHTMLrepondA + "</span><span class=\"delimitationRepondA\"></span>"
-
- return "<div id=\"" + this.getId(pre) + "\" class=\"" + (messagePair ? "messagePair" : "messageImpair") + " message" +
- (this.appartientAuClient ? " proprietaire" : "") +
- (this.clientARepondu ? " repondu" : "") +
- (this.estUneReponse ? " reponse" : "") +
- (this.systeme ? " systeme" : "") +
- (this.ekMaster ? " ekMaster" + this.degreeOstentatoire : "") +
- "\">" +
- "<div class=\"outilsMess\"><div class=\"extraire\"></div><div class=\"extraireCompletement\"></div></div><span class=\"entete\">" +
- "<span class=\"dateComplete\">[<span class=\"date\">" + this.date + "</span>]</span>" +
- "<span class=\"pseudo\"><span class=\"id\" style=\"display: none\">" + this.auteurId + "</span class=\"ident\">" + identifiant + "</span></span><span class=\"delimitationEntete\"></span>" +
- XHTMLrepondA +
- "<span class=\"contenu\">" + this.formateur.traitementComplet(this.contenu, this.pseudo) + "</span>" +
- "</div>"
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Représente une conversation.
- * Une conversation, au niveau XHTML, est formé de deux partie, le titre et les messages.
- * Le titre comprend la navigation par page, un bouton pour la fermer, un bouton pour la plier, un bouton
- * pour créer un lien ainsi que le premier message.
- * @param conversations l'ensemble des conversations
- * @param num le numéro de la conversation
- */
-function Conversation(conversations, num)
-{
- this.conversations = conversations
- this.num = num // peut changer au cours de la vie de la conversation, n'est pas un id !
- this.id = Math.floor(Math.random() * 1000000).toString(36)
-
- this.util = this.conversations.util
- this.formateur = this.conversations.formateur
- this.client = this.conversations.client
-
- this.idDernierMessageAffiche = 0
- this.racine = undefined
-
- this.messages = []
- this.messagesParId = {}
-
- this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page
-
- var messagesXHTML = '<div class="messages"></div>'
- var messageRacineXHTML = '<div class="messageRacine"></div>'
- var reverse = this.client.chatOrder == "reverse"
-
- var XHTML =
- '<td class="conversation" id="' + this.getId() + '">' +
- (reverse ? messagesXHTML : "") +
- '<div class="titre">' +
- (reverse ? messageRacineXHTML : "") +
- '<div class="nav">' +
- (num == 0 ? '' : '<div class="fermer"></div><div class="lien"></div><div class="reduire"></div>') +
- '<span class="next"><</span><span class="numPage">1</span><span class="prev">></span>' +
- '</div>' +
- (reverse ? "" : messageRacineXHTML) +
- '</div>' +
- (reverse ? "" : messagesXHTML) +
- '</td>'
-
- $("#conversations tr").append(XHTML)
-
- this.util.infoBulle("Aller à la première page", $("#" + this.getId() + " .numPage"), positionBulleType.haut)
- if (num != 0)
- {
- this.util.infoBulle("Créer un lien vers la conversation", $("#" + this.getId() + " .lien"))
- this.util.infoBulle("Fermer la conversation", $("#" + this.getId() + " .fermer"))
- }
-}
-
-/**
- * @racine un message représentant la racine de la conversation, vaut undefined pour la conversation générale
- */
-Conversation.prototype.setRacine = function(racineElement)
-{
- this.racine = new Message(this.client, this.formateur, racineElement)
-}
-
-/**
- * Met à jour la racine, décide de l'afficher ou non.
- * On l'affiche uniquement si le message racine n'est pas déjà affiché sur la liste des messages.
- */
-Conversation.prototype.majRacine = function()
-{
- if (this.racine == undefined)
- return
-
- if (!(this.racine.id in this.messagesParId))
- {
- this.messagesParId[this.racine.id] = this.racine
- var element = $(this.racine.XHTML(true, this.getId()))
- this.attacherEventsSurMessage(element)
- $("#" + this.getId() + " .titre .messageRacine").html(element)
- }
- else // si le message fait déjà parti de la conversation on n'affiche pas la racine
- $("#" + this.getId() + " .titre .messageRacine").empty()
-}
-
-Conversation.prototype.enleverMiseEnEvidence = function()
-{
- $("#" + this.getId() + " .message").removeClass("cache")
-}
-
-Conversation.prototype.colorerEntetes = function()
-{
- var messagesReponse = ""
- var messagesRepondu = ""
- var messagesProprietaire = ""
- for (var i = 0; i < this.messages.length; i++)
- {
- if (this.messages[i].appartientAuClient)
- messagesProprietaire += "#" + this.messages[i].getId(this.getId()) + ","
- else if (this.messages[i].clientARepondu)
- messagesRepondu += "#" + this.messages[i].getId(this.getId()) + ","
- else if (this.messages[i].estUneReponse)
- messagesReponse += "#" + this.messages[i].getId(this.getId()) + ","
- }
- $(messagesReponse).addClass("reponse")
- $(messagesRepondu).addClass("repondu")
- $(messagesProprietaire).addClass("proprietaire")
-}
-
-Conversation.prototype.decolorerEntetes = function()
-{
- $("#" + this.getId() + " .messages .message")
- .removeClass("reponse")
- .removeClass("repondu")
- .removeClass("proprietaire")
-}
-
-/**
- * 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)
-{
- $("#" + this.getId() + " .numPage").text(pageCourante)
- $("#" + this.getId() + " .next").css("display", pageCourante == 1 ? "none" : "inline")
- $("#" + 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
-
- $("#" + 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
-
- $("#" + 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
-
- $("#" + this.getId() + " .next").click(
- function() { funNext(thisConversation.num) }
- )
- $("#" + this.getId() + " .prev").click(
- function() { funPrev(thisConversation.num) }
- )
- $("#" + 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 = []
- this.messagesParId = {}
- this.idDernierMessageAffiche = 0
- $("#" + this.getId() + " .messages .message").remove()
-}
-
-Conversation.prototype.idMessageFromString = function(idString)
-{
- return parseInt(idString.substr(4 + this.getId().length), 36)
-}
-
-/**
- * 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.
- */
-Conversation.prototype.flush = function()
-{
- var thisConversation = this
- var reverse = this.client.chatOrder == "reverse"
-
- // est-ce que le prochain message est pair ? (permet d'alterner le style des messages)
- var messagePair = (this.idDernierMessageAffiche == 0 ? true :
- ($("#" + this.getId() + " .messages div:" + (reverse ? "first" : "last")).attr("class").search("messagePair") == -1)
- )
-
- // construction de l'XHTML des messages
- var XHTML = ""
- for (var i = 0; i < this.messages.length; i++)
- if (this.messages[i].id > this.idDernierMessageAffiche)
- {
- XHTML += this.messages[i].XHTML(messagePair, this.getId())
- messagePair = !messagePair