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
, formater
, element
) {
32 this.formater
= formater
;
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 // l'ensemble des id des messages qui reponde à ce message, exemple : {45:true, 32:true} (le 'true' ne sert à rien ^_^)
43 // mis à jour au fur à mesure que des messages sont ajoutés aux conversations
44 this.estReponduPar
= {};
46 this.appartientAuClient
= element
.owner
;
47 this.clientARepondu
= element
.answered
;
48 this.estUneReponse
= element
.is_a_reply
;
49 this.systeme
= element
.system
; // est-ce un message 'système' ?
50 this.setRepondA(element
.answer_to
); // un ensemble de reponse (voir Reponse) indexé par l'id du message de la reponses
51 this.ekMaster
= element
.ek_master
;
52 this.degreeOstentatoire
= element
.ostentatious_master
;
56 * @param pre est un prefix permettant de créer un Id différent pour deux mêmes messages.
57 * Cela est utile pour afficher plusieurs mêmes messages au sein d'un document XHTML.
58 * voir également la fonction 'XHTML()'.
60 euphorik
.Message
.prototype.getId = function(pre
) {
62 return pre
+ "mess" + this.id
.toString(36);
65 euphorik
.Message
.prototype.setRepondA = function(repondAJSON
) {
66 var thisMessage
= this;
69 repondAJSON
.each(function(i
, reponse
) {
70 thisMessage
.repondA
[reponse
.id
] = new euphorik
.Reponse(reponse
.id
, reponse
.nick
, reponse
.login
);
75 * Renvoie les messages faisant partie d'une conversation.
76 * @param messages l'ensemble des messages de la conversation
77 * @return les id des messages qui ont été mis en evidence sous la forme
78 * d'un hash (object) {id => 0 | 1 | 2 | 3}. 1 : proprietaire, 2 : reponse directe, 3 : message repondu
80 euphorik
.Message
.prototype.getConversation = function(messages
) {
81 var thisMessage
= this;
83 // les messages faisant partie de la conversation
84 var messagesEnEvidence
= {};
85 messagesEnEvidence
[this.id
] = 1;
87 // parcours en profondeur
88 var f = function(ids
, premierNiveau
, ensemble
, evidence
) {
89 objectEach(ids
, function(id
) {
90 if (!messagesEnEvidence
[id
] || premierNiveau
) {
91 var message
= messages
.messagesParId
[id
];
93 messagesEnEvidence
[id
] = premierNiveau
? evidence : (message
.auteurId
=== thisMessage
.auteurId
? 1 : 0);
94 f(message
[ensemble
], false, ensemble
, evidence
);
101 f(this.estReponduPar
, true, "estReponduPar", 2);
104 f(this.repondA
, true, "repondA", 3);
106 return messagesEnEvidence
;
110 * Renvoie le message sous la forme de code XHTML (string) prêt à être inséré dans un document.
111 * Aucun callback n'est affecté.
113 euphorik
.Message
.prototype.XHTML = function(messagePair
, pre
) {
114 if (messagePair
=== undefined) {
121 // construit l'identifiant de la personne
123 this.client
.nickFormat
=== "nick" || this.login
=== "" ? this.formater
.traitementComplet(this.pseudo
) :
124 (this.client
.nickFormat
=== "login" ? this.formater
.traitementComplet(this.login
) :
125 this.formater
.traitementComplet(this.pseudo
) + "<span class=\"login\">(" + this.formater
.traitementComplet(this.login
) +")</span>" );
127 var XHTMLrepondA
= "";
129 objectEach(this.repondA
, function(id
, rep
) {
131 XHTMLrepondA
+= ", ";
133 XHTMLrepondA
+= thisMessage
.formater
.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 "<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><span class=\"ident\">" + identifiant
+ "</span></span>" +
151 "<span class=\"delimitationEntete\"></span>" +
153 "<span class=\"contenu\">" + this.formater
.traitementComplet(this.contenu
, this.pseudo
) + "</span>" +