2 // Copyright 2008 Grégory Burri
4 // This file is part of Euphorik.
6 // Euphorik is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
11 // Euphorik is distributed in the hope that it will be useful,
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with Euphorik. If not, see <http://www.gnu.org/licenses/>.
19 euphorik
.Reponse = function(id
, pseudo
, login
) {
23 this.pseudo
= pseudo
|| "";
24 this.login
= login
|| "";
28 * Représente un message.
30 euphorik
.Message = function(client
, formateur
, element
) {
32 this.formateur
= formateur
;
35 this.auteurId
= element
.user_id
;
36 this.racineId
= element
.root
;
37 this.date
= element
.date
;
38 this.pseudo
= element
.nick
;
39 this.login
= element
.login
;
40 this.contenu
= element
.content
;
42 this.appartientAuClient
= element
.owner
;
43 this.clientARepondu
= element
.answered
;
44 this.estUneReponse
= element
.is_a_reply
;
45 this.systeme
= element
.system
; // est-ce un message 'système' ?
46 this.setRepondA(element
.answer_to
); // un ensemble de reponse (voir Reponse) indexé par l'id du message de la reponses
47 this.ekMaster
= element
.ek_master
;
48 this.degreeOstentatoire
= element
.ostentatious_master
;
52 * @param pre est un prefix permettant de créer un Id différent pour deux mêmes messages.
53 * Cela est utile pour afficher plusieurs mêmes messages au sein d'un document XHTML.
54 * voir également la fonction 'XHTML()'.
56 euphorik
.Message
.prototype.getId = function(pre
) {
58 return pre
+ "mess" + this.id
.toString(36);
61 euphorik
.Message
.prototype.setRepondA = function(repondAJSON
) {
62 var thisMessage
= this;
65 repondAJSON
.each(function(i
, reponse
) {
66 thisMessage
.repondA
[reponse
.id
] = new Reponse(reponse
.id
, reponse
.nick
, reponse
.login
);
71 * Renvoie les messages faisant partie d'une conversation.
72 * @param messages l'ensemble des messages de la conversation
73 * @return les id des messages qui ont été mis en evidence sous la forme
74 * d'un hash (object) {id => 0 | 1 | 2 | 3}. 1 : proprietaire, 2 : reponse directe, 3 : message repondu
76 euphorik
.Message
.prototype.getConversation = function(messages
) {
77 var thisMessage
= this;
79 // les messages faisant partie de la conversation
80 var messagesEnEvidence
= {};
82 messagesEnEvidence
[this.id
] = 1;
84 // recherche les réponses (O(n))
85 messages
.messages
.each(function(i
, mess
) {
86 if (mess
.repondA
.hasOwnProperty(thisMessage
.id
)) {
87 messagesEnEvidence
[mess
.id
] = 2;
91 // parcours en largeur
92 var f = function(tabIds
, premierNiveau
) {
93 objectEach(tabIds
, function(id
) {
94 // si le message (id) a déjà été traité
95 if (!messagesEnEvidence
[id
] && !premierNiveau
) {
99 var message
= messages
.messagesParId
[id
];
101 messagesEnEvidence
[id
] = premierNiveau
? 3 : (message
.auteurId
== thisMessage
.auteurId
? 1 : 0);
102 f (message
.repondA
, false);
106 f(this.repondA
, true);
108 return messagesEnEvidence
;
112 * Renvoie le message sous la forme de code XHTML (string) prêt à être inséré dans un document.
113 * Aucun callback n'est affecté.
115 euphorik
.Message
.prototype.XHTML = function(messagePair
, pre
) {
116 messagePair
= messagePair
|| true;
121 // construit l'identifiant de la personne
123 this.client
.nickFormat
== "nick" || this.login
=== "" ? this.formateur
.traitementComplet(this.pseudo
) :
124 (this.client
.nickFormat
== "login" ? this.formateur
.traitementComplet(this.login
) :
125 this.formateur
.traitementComplet(this.pseudo
) + "<span class=\"login\">(" + this.formateur
.traitementComplet(this.login
) +")</span>" );
127 var XHTMLrepondA
= "";
129 objectEach(function(id
, rep
) {
131 XHTMLrepondA
+= ", ";
133 XHTMLrepondA
+= thisMessage
.formateur
.traitementComplet(rep
.pseudo
);
137 XHTMLrepondA
= "<span class=\"repondA\">" + XHTMLrepondA
+ "</span><span class=\"delimitationRepondA\"></span>";
140 return "<div id=\"" + this.getId(pre
) + "\" class=\"" + (messagePair
? "messagePair" : "messageImpair") + " message" +
141 (this.appartientAuClient
? " proprietaire" : "") +
142 (this.clientARepondu
? " repondu" : "") +
143 (this.estUneReponse
? " reponse" : "") +
144 (this.systeme
? " systeme" : "") +
145 (this.ekMaster
? " ekMaster" + this.degreeOstentatoire : "") +
147 "<div class=\"outilsMess\"><div class=\"extraire\"></div><div class=\"extraireCompletement\"></div></div><span class=\"entete\">" +
148 "<span class=\"dateComplete\">[<span class=\"date\">" + this.date
+ "</span>]</span>" +
149 "<span class=\"pseudo\"><span class=\"id\" style=\"display: none\">" + this.auteurId
+ "</span class=\"ident\">" + identifiant
+ "</span></span><span class=\"delimitationEntete\"></span>" +
151 "<span class=\"contenu\">" + this.formateur
.traitementComplet(this.contenu
, this.pseudo
) + "</span>" +