-/**
- * 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)) appelée lors du clic sur un bouton "extraire"
- * @param funClickMessage fonction (fun(numMess)) appelée lors du clic sur un message
- */
-Conversation.prototype.flush = function(funClickOuvrirConv, funClickMessage)
-{
- 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 = 0; i < this.messages.length; i++)
- if (this.messages[i].id > this.idDernierMessageAffiche)
- {
- XHTML += this.messages[i].XHTML(messagePair)
- messagePair = !messagePair
- }
-
- 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
- }
- )
-
- thisConversation.util.infoBulle("Extraction de la conversation à partir de ce message", $(".extraire", this))
- thisConversation.util.infoBulle("Extraction de la conversation complète", $(".extraireCompletement", this))
-
- // l'id du message
- var idMess = parseInt($(this).attr("id").substr(4), 36)
-
- $(this).click(
- function(event)
- {
- if ($(event.target).is("a") || $(event.target).parents("#outilsBan").length > 0) return
-
- // extraction d'une conversation
- if ($(event.target).is(".extraire"))
- {
- funClickOuvrirConv(idMess)
- return
- }
-
- if ($(event.target).is(".extraireCompletement"))
- {
- funClickOuvrirConv(thisConversation.messagesParId[idMess].racineId)
- return
- }
-
- funClickMessage(thisConversation.messagesParId[idMess])
- }
- )
-
- // mise en évidence de la conversation
- $(".entete", this).hover(
- function()
- {
- thisConversation.decolorerEntetes()
- thisConversation.afficherConversation(idMess)
- },
- // quand on sort de l'entête du message la mise en évidence est enlevée
- function()
- {
- thisConversation.enleverMiseEnEvidence()
- thisConversation.decolorerEntetes()
- thisConversation.colorerEntetes()
- }
- )
-
- if (thisConversation.client.viewTimes)
- $(".dateComplete", this).show()
- else
- $(".dateComplete", this).hide()
-
- $("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()
- thisConversation.util.outilsBan.css("top", offset.top - 2).css("left", offset.left - 2).height(h < 16 ? 16 : h).width(element.width() + 16 * 3 + 4 + 64).prependTo(this).show()
- $("img", thisConversation.util.outilsBan).unbind("click")
- $("#slap", thisConversation.util.outilsBan).click(
- function(e)
- {
- thisConversation.client.slap(userId, $("#outilsBan input").val())
- $("#outilsBan input").val("")
- $("#outilsBan").hide()
- }
- )
- $("#kick", thisConversation.util.outilsBan).click(
- function(e)
- {
- thisConversation.client.kick(userId, $("#outilsBan input").val())
- $("#outilsBan input").val("")
- $("#outilsBan").hide()
- }
- )
- $("#ban", thisConversation.util.outilsBan).click(
- function(e)
- {
- thisConversation.client.ban(userId, $("#outilsBan input").val())
- $("#outilsBan input").val("")
- $("#outilsBan").hide()
- }
- )
- },
- function(e)
- {
- $("#outilsBan", this).hide()
- }
- )
- }
- )
- DOM.prependTo("#conversations #" + this.getId())
-
- // enlève les messages exedentaires
- var nbMessagesAffiche = $("#conversations #" + this.getId() + " .message").size()
- if (nbMessagesAffiche > this.nbMessageMax)
- $("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).remove()
-
- 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 id l'id du message
- */
-Conversation.prototype.afficherConversation = function(id)
-{
- var message = this.messagesParId[id]
- if (message == undefined) return
-
- var mess = message.getConversation(this)
-
- // FIXME : cet appel est très lent
- $("#conversations #" + this.getId() + " .message").each(
- function()
- {
- var jq = $(this)
- var statut = mess[parseInt(jq.attr("id").substr(4), 36)]
- if (statut == undefined)
- jq.addClass("cache")
- else
- {
- jq.removeClass("cache")
- switch (statut)
- {
- // "repondu" et "reponse" sont prioritaitres à "proprietaire"
- // contrairement à la vue normale (sans mise en évidence d'une conversation)
- case 3 :
- jq.addClass("repondu")
- break;
- case 2 :
- jq.addClass("reponse")
- break;
- case 1 :
- jq.addClass("proprietaire")
- break;
- }
- }
- }
- )
-}
-
-/**
- * Supprime une conversation.
- */
-Conversation.prototype.supprimer = function()
-{
- $("#conversations #" + this.getId()).remove()
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Représente l'ensemble des messages affichés.
- * TODO : renommer cette "classe" en 'Conversations'
- */
-function Messages(client, formateur, util)
-{
- this.client = client
- this.formateur = formateur
- this.util = util
-
- // un ensemble des messages (id) auquel l'utilisateur répond (vider après l'envoie du message courant)
- this.messagesRepond = {}
-
- this.conversations = new Array() // les conversations, la première représente la conversation principale
-
- this.nouvelleConversation(0)
-
- this.trollIdCourant = 0
-
- this.pageEvent = new PageEvent("chat", this.util)
-}
-
-// les messages insérés dans le document XHTML on leur id prefixé par cette valeur
-// cela permet de les distinguer des "vrais" messages
-Messages.prototype.prefixIdMessage = "rep"
-
-/**
- * Permet de définir un message comme étant ou n'étant plus un message auquel l'utilisateur
- * répond.
- */
-Messages.prototype.toggleMessageRepond = function(mess)
-{
- // est-ce que l'on répond déjà à ce message ? si oui alors on l'enlève de la liste
- if (mess.id in this.messagesRepond)
- {
- this.enleverMessageRepond(mess)
- return