X-Git-Url: http://git.euphorik.ch/index.cgi?a=blobdiff_plain;ds=sidebyside;f=js%2FpageMinichat%2Fmessage.js;fp=js%2FpageMinichat%2Fmessage.js;h=f7a11106de5f6a066c1db470c1512d2fe773c4b3;hb=904f2d76c25b7fd04b1f90dfa095c7bf0f8c7ce5;hp=0000000000000000000000000000000000000000;hpb=c4669f8724bdf389a3541b113b0c1e20a70cc879;p=euphorik.git
diff --git a/js/pageMinichat/message.js b/js/pageMinichat/message.js
new file mode 100644
index 0000000..f7a1110
--- /dev/null
+++ b/js/pageMinichat/message.js
@@ -0,0 +1,172 @@
+// coding: utf-8
+// Copyright 2008 Grégory Burri
+//
+// This file is part of Euphorik.
+//
+// Euphorik is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Euphorik is distributed in the hope that it will be useful,
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// GNU General Public License for more details.
+//
+// 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 = ""
+}
+
+
+/**
+ * Représente un message.
+ */
+function Message(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.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)
+}
+
+/**
+ *
+ */
+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"]
+ )
+ }
+}
+
+/**
+ * Renvoie les messages faisant partie d'une conversation.
+ * @param messages l'ensemble des messages de la conversation
+ * @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
+
+ // les messages faisant partie de la conversation
+ var messagesEnEvidence = {}
+
+ messagesEnEvidence[this.id] = 1
+
+ // 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
+
+ // 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)
+
+ 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) + "(" + 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
+ }
+ if (XHTMLrepondA != "")
+ XHTMLrepondA = "" + XHTMLrepondA + ""
+
+ return "
" +
+ "
" +
+ "[" + this.date + "]" +
+ "" + this.auteurId + "" + identifiant + "" +
+ XHTMLrepondA +
+ "
" + this.formateur.traitementComplet(this.contenu, this.pseudo) + "" +
+ "
"
+}
+