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 function Reponse(id
, pseudo
, login
)
25 if (this.pseudo
== undefined)
28 if (this.login
== undefined)
34 * Représente un message.
36 function Message(client
, formateur
, element
)
39 this.formateur
= formateur
41 this.id
= element
["id"]
42 this.auteurId
= element
["user_id"]
43 this.racineId
= element
["root"]
44 this.date
= element
["date"]
45 this.pseudo
= element
["nick"]
46 this.login
= element
["login"]
47 this.contenu
= element
["content"]
49 this.appartientAuClient
= element
["owner"]
50 this.clientARepondu
= element
["answered"]
51 this.estUneReponse
= element
["is_a_reply"]
52 this.systeme
= element
["system"] // est-ce un message 'système' ?
53 this.setRepondA(element
["answer_to"]) // un ensemble de reponse (voir Reponse) indexé par l'id du message de la reponses
54 this.ekMaster
= element
["ek_master"]
55 this.degreeOstentatoire
= element
["ostentatious_master"]
59 * @param pre est un prefix permettant de créer un Id différent pour deux mêmes messages.
60 * Cela est utile pour afficher plusieurs mêmes messages au sein d'un document XHTML.
61 * voir également la fonction 'XHTML()'.
63 Message
.prototype.getId = function(pre
)
67 return pre
+ "mess" + this.id
.toString(36)
73 Message
.prototype.setRepondA = function(repondAJSON
)
75 var thisMessage
= this
78 for(var i
= 0; i
< repondAJSON
.length
; i
++)
80 thisMessage
.repondA
[repondAJSON
[i
]["id"]] = new Reponse(
82 repondAJSON
[i
]["nick"],
83 repondAJSON
[i
]["login"]
89 * Renvoie les messages faisant partie d'une conversation.
90 * @param messages l'ensemble des messages de la conversation
91 * @return les id des messages qui ont été mis en evidence sous la forme
92 * d'un hash (object) {id => 0 | 1 | 2 | 3}. 1 : proprietaire, 2 : reponse directe, 3 : message repondu
94 Message
.prototype.getConversation = function(messages
)
96 var thisMessage
= this
98 // les messages faisant partie de la conversation
99 var messagesEnEvidence
= {}
101 messagesEnEvidence
[this.id
] = 1
103 // recherche les réponses (O(n))
104 for (var i
= 0; i
< messages
.messages
.length
; i
++)
105 if (messages
.messages
[i
].repondA
.hasOwnProperty(this.id
))
106 messagesEnEvidence
[messages
.messages
[i
].id
] = 2
109 var f = function(tabIds
, premierNiveau
)
111 for(var id
in tabIds
)
113 // si le message (id) a déjà été traité
114 if (messagesEnEvidence
[id
] != undefined && !premierNiveau
)
117 var message
= messages
.messagesParId
[id
]
118 if (message
!= undefined)
120 messagesEnEvidence
[id
] = premierNiveau
? 3 : (message
.auteurId
== thisMessage
.auteurId
? 1 : 0)
121 f (message
.repondA
, false)
125 f(this.repondA
, true)
127 return messagesEnEvidence
131 * Renvoie le message sous la forme de code XHTML (string) prêt à être inséré dans un document.
132 * Aucun callback n'est affecté.
134 Message
.prototype.XHTML = function(messagePair
, pre
)
136 if (messagePair
== undefined)
138 if (pre
== undefined)
141 // construit l'identifiant de la personne
143 this.client
.nickFormat
== "nick" || this.login
== "" ? this.formateur
.traitementComplet(this.pseudo
) :
144 (this.client
.nickFormat
== "login" ? this.formateur
.traitementComplet(this.login
) :
145 this.formateur
.traitementComplet(this.pseudo
) + "<span class=\"login\">(" + this.formateur
.traitementComplet(this.login
) +")</span>" )
147 var XHTMLrepondA
= ""
149 for (var id
in this.repondA
)
151 if (!debut
) XHTMLrepondA
+= ", "
152 XHTMLrepondA
+= this.formateur
.traitementComplet(this.repondA
[id
].pseudo
)
155 if (XHTMLrepondA
!= "")
156 XHTMLrepondA
= "<span class=\"repondA\">" + XHTMLrepondA
+ "</span><span class=\"delimitationRepondA\"></span>"
158 return "<div id=\"" + this.getId(pre
) + "\" class=\"" + (messagePair
? "messagePair" : "messageImpair") + " message" +
159 (this.appartientAuClient
? " proprietaire" : "") +
160 (this.clientARepondu
? " repondu" : "") +
161 (this.estUneReponse
? " reponse" : "") +
162 (this.systeme
? " systeme" : "") +
163 (this.ekMaster
? " ekMaster" + this.degreeOstentatoire : "") +
165 "<div class=\"outilsMess\"><div class=\"extraire\"></div><div class=\"extraireCompletement\"></div></div><span class=\"entete\">" +
166 "<span class=\"dateComplete\">[<span class=\"date\">" + this.date
+ "</span>]</span>" +
167 "<span class=\"pseudo\"><span class=\"id\" style=\"display: none\">" + this.auteurId
+ "</span class=\"ident\">" + identifiant
+ "</span></span><span class=\"delimitationEntete\"></span>" +
169 "<span class=\"contenu\">" + this.formateur
.traitementComplet(this.contenu
, this.pseudo
) + "</span>" +