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
, nick
, login
) {
21 this.nick
= nick
|| "";
22 this.login
= login
|| "";
26 * Représente un message.
28 euphorik
.Message = function(client
, formater
, element
) {
30 this.formater
= formater
;
33 this.auteurId
= element
.user_id
;
34 this.racineId
= element
.root
;
35 this.date
= element
.date
;
36 this.nick
= element
.nick
;
37 this.login
= element
.login
;
38 this.contenu
= element
.content
;
40 // l'ensemble des id des messages qui reponde à ce message, exemple : {45:true, 32:true} (le 'true' ne sert à rien ^_^)
41 // mis à jour au fur à mesure que des messages sont ajoutés aux conversations
42 this.estReponduPar
= {};
44 this.appartientAuClient
= element
.owner
;
45 this.clientARepondu
= element
.answered
;
46 this.estUneReponse
= element
.is_a_reply
;
47 this.systeme
= element
.system
; // est-ce un message 'système' ?
48 this.setRepondA(element
.answer_to
); // un ensemble de reponse (voir Reponse) indexé par l'id du message de la reponses
49 this.ekMaster
= element
.ek_master
;
50 this.degreeOstentatoire
= element
.ostentatious_master
;
54 * @param pre est un prefix permettant de créer un Id différent pour deux mêmes messages.
55 * Cela est utile pour afficher plusieurs mêmes messages au sein d'un document XHTML.
56 * voir également la fonction 'XHTML()'.
58 euphorik
.Message
.prototype.getId = function(pre
) {
60 return pre
+ "mess" + this.id
.toString(36);
63 euphorik
.Message
.prototype.setRepondA = function(repondAJSON
) {
64 var thisMessage
= this;
67 repondAJSON
.each(function(i
, reponse
) {
68 thisMessage
.repondA
[reponse
.id
] = new euphorik
.Reponse(reponse
.id
, reponse
.nick
, reponse
.login
);
73 * Renvoie les messages faisant partie d'une conversation.
74 * @param messages l'ensemble des messages de la conversation
75 * @return les id des messages qui ont été mis en evidence sous la forme
76 * d'un hash (object) {id => 0 | 1 | 2 | 3}. 1 : proprietaire, 2 : reponse directe, 3 : message repondu
78 euphorik
.Message
.prototype.getConversation = function(messages
) {
79 var thisMessage
= this;
81 // les messages faisant partie de la conversation
82 var messagesEnEvidence
= {};
83 messagesEnEvidence
[this.id
] = 1;
85 // parcours en profondeur
86 var f = function(ids
, premierNiveau
, ensemble
, evidence
) {
87 objectEach(ids
, function(id
) {
88 if (!messagesEnEvidence
[id
] || premierNiveau
) {
89 var message
= messages
.messagesParId
[id
];
91 messagesEnEvidence
[id
] = premierNiveau
? evidence : (message
.auteurId
=== thisMessage
.auteurId
? 1 : 0);
92 f(message
[ensemble
], false, ensemble
, evidence
);
99 f(this.estReponduPar
, true, "estReponduPar", 2);
102 f(this.repondA
, true, "repondA", 3);
104 return messagesEnEvidence
;
108 * Renvoie le message sous la forme de code XHTML (string) prêt à être inséré dans un document.
109 * Aucun callback n'est affecté.
111 euphorik
.Message
.prototype.XHTML = function(messagePair
, pre
) {
112 if (messagePair
=== undefined) {
119 // construit l'identifiant de la personne
121 this.client
.nickFormat
=== "nick" || this.login
=== "" ? this.formater
.traitementComplet(this.nick
) :
122 (this.client
.nickFormat
=== "login" ? this.formater
.traitementComplet(this.login
) :
123 this.formater
.traitementComplet(this.nick
) + "<span class=\"login\">(" + this.formater
.traitementComplet(this.login
) +")</span>" );
125 var XHTMLrepondA
= "";
127 objectEach(this.repondA
, function(id
, rep
) {
129 XHTMLrepondA
+= ", ";
131 XHTMLrepondA
+= thisMessage
.formater
.traitementComplet(rep
.nick
);
135 XHTMLrepondA
= "<span class=\"repondA\">" + XHTMLrepondA
+ "</span><span class=\"delimitationRepondA\"></span>";
138 return "<div id=\"" + this.getId(pre
) + "\" class=\"" + (messagePair
? "messagePair" : "messageImpair") + " message" +
139 (this.appartientAuClient
? " proprietaire" : "") +
140 (this.clientARepondu
? " repondu" : "") +
141 (this.estUneReponse
? " reponse" : "") +
142 (this.systeme
? " systeme" : "") +
143 (this.ekMaster
? " ekMaster" + this.degreeOstentatoire : "") +
145 "<span class=\"entete\">" +
146 "<span class=\"dateComplete\">[<span class=\"date\">" + this.date
+ "</span>]</span>" +
147 "<span class=\"nick\"><span class=\"id\" style=\"display: none\">" + this.auteurId
+ "</span><span class=\"ident\">" + identifiant
+ "</span></span>" +
149 "<span class=\"delimitationEntete\"></span>" +
151 "<span class=\"contenu\">" + this.formater
.traitementComplet(this.contenu
, this.nick
) + "</span>" +