X-Git-Url: http://git.euphorik.ch/index.cgi?a=blobdiff_plain;ds=sidebyside;f=js%2FpageMinichat%2Fmessage.js;h=417f33030946e7d93bd10bab08229f2c6ad11334;hb=149c4de8eca530d3d4edf36b903b7d2271558716;hp=f7a11106de5f6a066c1db470c1512d2fe773c4b3;hpb=904f2d76c25b7fd04b1f90dfa095c7bf0f8c7ce5;p=euphorik.git
diff --git a/js/pageMinichat/message.js b/js/pageMinichat/message.js
index f7a1110..417f330 100644
--- a/js/pageMinichat/message.js
+++ b/js/pageMinichat/message.js
@@ -16,74 +16,60 @@
// You should have received a copy of the GNU General Public License
// along with Euphorik. If not, see .
-function Reponse(id, pseudo, login)
-{
- this.id = id
- this.pseudo = pseudo
- this.login = login
-
- if (this.pseudo == undefined)
- this.pseudo = ""
-
- if (this.login == undefined)
- this.login = ""
-}
-
+euphorik.Reponse = function(id, pseudo, login) {
+ this.id = id;
+ this.pseudo = pseudo;
+ this.login = login;
+ this.pseudo = pseudo || "";
+ this.login = login || "";
+};
/**
* Représente un message.
*/
-function Message(client, formateur, element)
-{
- this.client = client
- this.formateur = formateur
+euphorik.Message = function(client, formateur, element) {
+ this.client = client;
+ this.formateur = formateur;
+
+ this.id = element.id;
+ this.auteurId = element.user_id;
+ this.racineId = element.root;
+ this.date = element.date;
+ this.pseudo = element.nick;
+ this.login = element.login;
+ this.contenu = element.content;
- this.id = element["id"]
- this.auteurId = element["user_id"]
- this.racineId = element["root"]
- this.date = element["date"]
- this.pseudo = element["nick"]
- this.login = element["login"]
- this.contenu = element["content"]
+ // l'ensemble des id des messages qui reponde à ce message, exemple : {45:true, 32:true} (le 'true' ne sert à rien ^_^)
+ // mis à jour au fur à mesure que des messages sont ajoutés aux conversations
+ this.estReponduPar = {};
- this.appartientAuClient = element["owner"]
- this.clientARepondu = element["answered"]
- this.estUneReponse = element["is_a_reply"]
- this.systeme = element["system"] // est-ce un message 'système' ?
- this.setRepondA(element["answer_to"]) // un ensemble de reponse (voir Reponse) indexé par l'id du message de la reponses
- this.ekMaster = element["ek_master"]
- this.degreeOstentatoire = element["ostentatious_master"]
-}
+ this.appartientAuClient = element.owner;
+ this.clientARepondu = element.answered;
+ this.estUneReponse = element.is_a_reply;
+ this.systeme = element.system; // est-ce un message 'système' ?
+ this.setRepondA(element.answer_to); // un ensemble de reponse (voir Reponse) indexé par l'id du message de la reponses
+ this.ekMaster = element.ek_master;
+ this.degreeOstentatoire = element.ostentatious_master;
+};
/**
* @param pre est un prefix permettant de créer un Id différent pour deux mêmes messages.
* Cela est utile pour afficher plusieurs mêmes messages au sein d'un document XHTML.
* voir également la fonction 'XHTML()'.
*/
-Message.prototype.getId = function(pre)
-{
- if (pre == undefined)
- pre = ""
- return pre + "mess" + this.id.toString(36)
-}
+euphorik.Message.prototype.getId = function(pre) {
+ pre = pre || "";
+ return pre + "mess" + this.id.toString(36);
+};
-/**
- *
- */
-Message.prototype.setRepondA = function(repondAJSON)
-{
- var thisMessage = this
- this.repondA = {}
+euphorik.Message.prototype.setRepondA = function(repondAJSON) {
+ var thisMessage = this;
+ this.repondA = {};
- for(var i = 0; i < repondAJSON.length; i++)
- {
- thisMessage.repondA[repondAJSON[i]["id"]] = new Reponse(
- repondAJSON[i]["id"],
- repondAJSON[i]["nick"],
- repondAJSON[i]["login"]
- )
- }
-}
+ repondAJSON.each(function(i, reponse) {
+ thisMessage.repondA[reponse.id] = new euphorik.Reponse(reponse.id, reponse.nick, reponse.login);
+ });
+};
/**
* Renvoie les messages faisant partie d'une conversation.
@@ -91,69 +77,65 @@ Message.prototype.setRepondA = function(repondAJSON)
* @return les id des messages qui ont été mis en evidence sous la forme
* d'un hash (object) {id => 0 | 1 | 2 | 3}. 1 : proprietaire, 2 : reponse directe, 3 : message repondu
*/
-Message.prototype.getConversation = function(messages)
-{
- var thisMessage = this
+euphorik.Message.prototype.getConversation = function(messages) {
+ var thisMessage = this;
// les messages faisant partie de la conversation
- var messagesEnEvidence = {}
+ var messagesEnEvidence = {};
+ messagesEnEvidence[this.id] = 1;
- messagesEnEvidence[this.id] = 1
+ // parcours en profondeur
+ var f = function(ids, premierNiveau, ensemble, evidence) {
+ objectEach(ids, function(id) {
+ if (!messagesEnEvidence[id] || premierNiveau) {
+ var message = messages.messagesParId[id];
+ if (message) {
+ messagesEnEvidence[id] = premierNiveau ? evidence : (message.auteurId === thisMessage.auteurId ? 1 : 0);
+ f(message[ensemble], false, ensemble, evidence);
+ }
+ }
+ });
+ };
- // recherche les réponses (O(n))
- for (var i = 0; i < messages.messages.length; i++)
- if (messages.messages[i].repondA.hasOwnProperty(this.id))
- messagesEnEvidence[messages.messages[i].id] = 2
+ // remonte le temps
+ f(this.estReponduPar, true, "estReponduPar", 2);
- // parcours en
- var f = function(tabIds, premierNiveau)
- {
- for(var id in tabIds)
- {
- // si le message (id) a déjà été traité
- if (messagesEnEvidence[id] != undefined && !premierNiveau)
- continue
-
- var message = messages.messagesParId[id]
- if (message != undefined)
- {
- messagesEnEvidence[id] = premierNiveau ? 3 : (message.auteurId == thisMessage.auteurId ? 1 : 0)
- f (message.repondA, false)
- }
- }
- }
- f(this.repondA, true)
+ // descent le temps
+ f(this.repondA, true, "repondA", 3);
- return messagesEnEvidence
-}
+ 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 = ""
+euphorik.Message.prototype.XHTML = function(messagePair, pre) {
+ if (messagePair === undefined) {
+ messagePair = true;
+ }
+ pre = pre || "";
+
+ thisMessage = this;
// 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) + "(" + this.formateur.traitementComplet(this.login) +")" )
+ 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) + "(" + this.formateur.traitementComplet(this.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
+ var XHTMLrepondA = "";
+ var debut = true;
+ objectEach(this.repondA, function(id, rep) {
+ if (!debut) {
+ XHTMLrepondA += ", ";
+ }
+ XHTMLrepondA += thisMessage.formateur.traitementComplet(rep.pseudo);
+ debut = false;
+ });
+ if (XHTMLrepondA) {
+ XHTMLrepondA = "" + XHTMLrepondA + "";
}
- if (XHTMLrepondA != "")
- XHTMLrepondA = "" + XHTMLrepondA + ""
return "
" +
- "
" +
- "[" + this.date + "]" +
- "" + this.auteurId + "" + identifiant + "" +
+ "
" +
+ "[" + this.date + "]" +
+ "" + this.auteurId + "" + identifiant + "" +
+ "" +
+ "
" +
XHTMLrepondA +
"
" + this.formateur.traitementComplet(this.contenu, this.pseudo) + "" +
- "
"
-}
-
+ "";
+};