X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2FpageMinichat.js;h=b09b4ca760493fe548e86973aca8c7023486e3bb;hp=ec745f357f424e84b2a9617b68cf4a5a967bb1cd;hb=e82b363f65838828948a62ef4452e752743ef661;hpb=600dd53279be74ea09f2c92db35c805b5fd28607
diff --git a/js/pageMinichat.js b/js/pageMinichat.js
index ec745f3..b09b4ca 100755
--- a/js/pageMinichat.js
+++ b/js/pageMinichat.js
@@ -165,8 +165,12 @@ PageMinichat.prototype.decharger = function()
$("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,
@@ -182,16 +186,6 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message)
// (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)
{
@@ -223,12 +217,13 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message)
}
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)
{
@@ -242,6 +237,7 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message)
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++)
@@ -293,10 +289,13 @@ function Reponse(id, pseudo, login)
* @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
@@ -312,6 +311,11 @@ function Message(id, auteurId, date, pseudo, login, contenu)
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)
+}
+
/**
*
*/
@@ -369,6 +373,43 @@ Message.prototype.getConversation = function(messages)
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) + "(" + this.formateur.traitementComplet(message.login) +")" )
+
+ 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 = "" + XHTMLrepondA + ""
+
+ return "
" +
+ "
" +
+ "[" + this.date + "]" +
+ "" + this.auteurId + "" + identifiant + "" +
+ XHTMLrepondA +
+ "
" + this.formateur.traitementComplet(this.contenu, this.pseudo) + "" +
+ "
"
+}
+
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
@@ -409,9 +450,6 @@ function Conversation(num, util, formateur, client)
}
}
-/**
- *
- */
Conversation.prototype.enleverMiseEnEvidence = function()
{
$("#conversations .message").removeClass("cache")
@@ -425,11 +463,11 @@ Conversation.prototype.colorerEntetes = function()
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")
@@ -536,9 +574,10 @@ Conversation.prototype.viderMessages = function()
* 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
@@ -551,42 +590,8 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
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) + "(" + this.formateur.traitementComplet(message.login) +")" )
-
- 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 = "" + XHTMLrepondA + ""
-
- XHTML +=
- "" +
- "
" +
- "[" + message.date + "]" +
- "" + message.auteurId + "" + identifiant + "" +
- XHTMLrepondA +
- "
" + this.formateur.traitementComplet(message.contenu, message.pseudo) + "" +
- "
"
-
+ {
+ XHTML += this.messages[i].XHTML(messagePair)
messagePair = !messagePair
}
@@ -608,8 +613,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
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)
@@ -622,13 +626,14 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
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])
}
)
@@ -763,15 +768,17 @@ Conversation.prototype.supprimer = function()
/**
* 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)
@@ -781,6 +788,61 @@ function Messages(client, formateur, util)
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.
*/
@@ -854,8 +916,11 @@ Messages.prototype.ajouterMessage = function(element, numConversation)
var id = element["id"]
var message = new Message(
+ this.client,
+ this.formateur,
id,
element["user_id"],
+ element["root"],
element["date"],
element["nick"],
element["login"],
@@ -973,9 +1038,15 @@ Messages.prototype.flush = function(numConv)
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)
}
)
}