$("body #smiles").remove()
}
-PageMinichat.prototype.getJSONMessage = function(pseudo, message, repondA)
+PageMinichat.prototype.getJSONMessage = function(pseudo, message)
{
+ repondA = []
+ for (var id in this.messages.messagesRepond)
+ repondA.push(parseInt(id)) // FIXME : une propriété ne peut pas être de type int ?
+
return {
"action" : "put_message",
"cookie" : this.client.cookie,
// (un pseudo vide est autorisé)
pseudo = this.formateur.filtrerInputPseudo(pseudo)
-
- // extraction des id des messages (en base 36 évidemment) auquels le user répond
- var repondA = []
- var tags = message.match(this.regexMessageTagMatch)
- if (tags != null)
- {
- for(var i = 0; i < tags.length; i++)
- repondA.push(parseInt(/\{(.*?)\}>/.exec(tags[i])[1], 36))
- message = message.replace(this.regexMessageTagReplace, "")
- }
if (pseudo == conf.nickDefaut)
{
}
this.envoieMessageEnCours = true
- ;; dumpObj(this.getJSONMessage(pseudo, message, repondA))
+ ;; dumpObj(this.getJSONMessage(pseudo, message))
jQuery.ajax(
+
{
url : "request",
type: "POST",
- data : this.util.jsonVersAction(this.getJSONMessage(pseudo, message, repondA)),
+ data : this.util.jsonVersAction(this.getJSONMessage(pseudo, message)),
dataType : "json",
beforeSend : function(xmlHttpRequest)
{
if(data["reply"] == "ok")
{
$("form input.message").val("")
+ thisPageMinichat.messages.enleverMessagesRepond()
// met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) TODO : ya mieux ?
for (var i = 0; i < repondA.length; i++)
* @param pseudo
* @param contenu
*/
-function Message(id, auteurId, date, pseudo, login, contenu)
+function Message(client, formateur, id, auteurId, racineId, date, pseudo, login, contenu)
{
+ this.client = client
+ this.formateur = formateur
this.id = id
this.auteurId = auteurId
+ this.racineId = racineId
this.date = date
this.pseudo = pseudo
this.login = login
this.repondA = {} // un ensemble de reponse (voir Reponse) indexé par l'id du message de la reponses
}
+Message.prototype.getId = function()
+{
+ return "mess" + this.id.toString(36)
+}
+
/**
*
*/
return messagesEnEvidence
}
+Message.prototype.XHTML = function(messagePair)
+{
+ if (messagePair == undefined)
+ messagePair = true
+
+ // 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(message.login) :
+ this.formateur.traitementComplet(this.pseudo) + "<span class=\"login\">(" + this.formateur.traitementComplet(message.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() + "\" class=\"" + (messagePair ? "messagePair" : "messageImpair") + " message" +
+ (this.appartientAuClient ? " proprietaire" : "") +
+ (this.clientARepondu ? " repondu" : "") +
+ (this.estUneReponse ? " reponse" : "") +
+ (this.systeme ? " systeme" : "") +
+ (this.ekMaster ? " ekMaster" : "") +
+ "\">" +
+ "<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>"
+}
+
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
}
}
-/**
- *
- */
Conversation.prototype.enleverMiseEnEvidence = function()
{
$("#conversations .message").removeClass("cache")
for (var i = 0; i < this.messages.length; i++)
{
if (this.messages[i].appartientAuClient)
- messagesProprietaire += "#mess" + this.messages[i].id.toString(36) + ","
+ messagesProprietaire += "#" + this.messages[i].getId() + ","
else if (this.messages[i].estUneReponse)
- messagesReponse += "#mess" + this.messages[i].id.toString(36) + ","
+ messagesReponse += "#" + this.messages[i].getId() + ","
else if (this.messages[i].clientARepondu)
- messagesRepondu += "#mess" + this.messages[i].id.toString(36) + ","
+ messagesRepondu += "#" + this.messages[i].getId() + ","
}
$(messagesReponse).addClass("reponse")
$(messagesRepondu).addClass("repondu")
* 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"
+ * @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)
+Conversation.prototype.flush = function(funClickOuvrirConv, funClickMessage)
{
var thisConversation = this
var XHTML = ""
for (var i = 0; i < this.messages.length; 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 = ""
- var debut = true
- for (var id in message.repondA)
- {
- if (!debut) XHTMLrepondA += ", "
- ;; dumpObj(message.repondA.count)
- XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo)
- debut = false
- }
- if (XHTMLrepondA != "")
- XHTMLrepondA = "<span class=\"repondA\">" + XHTMLrepondA + "</span><span class=\"delimitationRepondA\"></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=\"outilsMess\"><div class=\"extraire\"></div><div class=\"extraireCompletement\"></div></div><span class=\"entete\">" +
- "<span class=\"dateComplete\">[<span class=\"date\">" + message.date + "</span>]</span>" +
- "<span class=\"pseudo\"><span class=\"id\" style=\"display: none\">" + message.auteurId + "</span class=\"ident\">" + identifiant + "</span></span><span class=\"delimitationEntete\"></span>" +
- XHTMLrepondA +
- "<span class=\"contenu\">" + this.formateur.traitementComplet(message.contenu, message.pseudo) + "</span>" +
- "</div>"
-
+ {
+ XHTML += this.messages[i].XHTML(messagePair)
messagePair = !messagePair
}
thisConversation.util.infoBulle("Extraction de la conversation complète", $(".extraireCompletement", this))
// l'id du message
- var idMess36 = $(this).attr("id").substr(4)
- var idMess = parseInt(idMess36, 36)
+ var idMess = parseInt($(this).attr("id").substr(4), 36)
$(this).click(
function(event)
funClickOuvrirConv(idMess)
return
}
-
- var valCourant = $("input.message").val()
- if (valCourant == undefined) valCourant = ""
- var tag = $(".pseudo span.ident", this).text() + "{" + idMess36 + "}" + ">"
- if (valCourant.indexOf(tag, 0) == -1)
- $("input.message").val(tag + " " + valCourant)
- thisConversation.util.setCaretToEnd($("form input.message")[0])
+
+ if ($(event.target).is(".extraireCompletement"))
+ {
+ funClickOuvrirConv(thisConversation.messagesParId[idMess].racineId)
+ return
+ }
+
+ funClickMessage(thisConversation.messagesParId[idMess])
}
)
/**
* Représente l'ensemble des messages affichés.
+ * TODO : renommer cette "classe" en 'Conversations'
*/
function Messages(client, formateur, util)
{
- var thisMessages = this
-
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.pageEvent = new PageEvent("chat", this.util)
}
+/**
+ * Si le message
+ */
+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)
+ {
+ $("#" + mess.getId()).removeClass("repondEnEvidence")
+ delete this.messagesRepond[mess.id]
+ return
+ }
+
+ // est-ce que le message fait partie de la même conversation que les autres messages ?
+ // TODO : solution plus élégante pour prendre un mess parmis messagesRepond !?
+ var mess2
+ for(mess2 in this.messagesRepond){ break; }
+ mess2 = this.messagesRepond[mess2]
+
+ if (mess2 != undefined && mess2.racineId != mess.racineId)
+ {
+ this.util.messageDialogue("Impossible de répondre à deux messages ne faisant pas partie de la même conversation")
+ return
+ }
+
+ this.messagesRepond[mess.id] = mess
+ $("#" + mess.getId()).addClass("repondEnEvidence")
+}
+
+/**
+ * Enlève tous les messages auquel l'utilisateur souhaite répond.
+ */
+Messages.prototype.enleverMessagesRepond = function()
+{
+ this.messagesRepond = {}
+ $(".message").removeClass("repondEnEvidence")
+}
+
+
+/**
+ * Définit un message comme n'y répondant plus.
+ */
+/*Messages.prototype.enleverMessageRepond = function(id)
+{
+
+}*/
+
+/**
+ * Définit un message comme y répondant.
+ */
+/*Messages.prototype.ajouterMessageRepond = function(id)
+{
+
+}*/
+
/**
* Crée un message JSON contenant le message demandant un rafraichissement.
*/
var id = element["id"]
var message = new Message(
+ this.client,
+ this.formateur,
id,
element["user_id"],
+ element["root"],
element["date"],
element["nick"],
element["login"],
var thisMessages = this
this.conversations[numConv].flush(
- function(racine) // appelé lorsqu'un utilisateur click sur un lien vers une conversation
+ function(racine) // appelé lors d'un clic sur un lien vers une conversation
{
thisMessages.ouvrirConversation(racine)
+ },
+ // 'Mess' correspond à un objet de type 'Message'
+ function(Mess) // appelé lors d'un clic sur un message
+ {
+ // met ou enlève la mise en evidence du message
+ thisMessages.toggleMessageRepond(Mess)
}
)
}