X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2FpageMinichat%2Fmessage.js;h=a3d4d32c4d275d779c80091d126cdfdbed488f52;hp=f7a11106de5f6a066c1db470c1512d2fe773c4b3;hb=11fe8f6d268a9b1c0a773294cc7d70ffdb6afb30;hpb=904f2d76c25b7fd04b1f90dfa095c7bf0f8c7ce5 diff --git a/js/pageMinichat/message.js b/js/pageMinichat/message.js index f7a1110..a3d4d32 100644 --- a/js/pageMinichat/message.js +++ b/js/pageMinichat/message.js @@ -16,74 +16,60 @@ // 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 = "" -} - +euphorik.Reponse = function(id, pseudo, login) { + this.id = id; + this.pseudo = pseudo; + this.login = login; + this.pseudo = pseudo || ""; + this.login = login || ""; +}; /** * Représente un message. */ -function Message(client, formateur, element) -{ - this.client = client - this.formateur = formateur +euphorik.Message = function(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.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"] + // l'ensemble des id des messages qui reponde à ce message, exemple : {45:true, 32:true} (le 'true' ne sert à rien ^_^) + // mis à jour au fur à mesure que des messages sont ajoutés aux conversations + this.estReponduPar = {}; - 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"] -} + 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) -} +euphorik.Message.prototype.getId = function(pre) { + pre = pre || ""; + return pre + "mess" + this.id.toString(36); +}; -/** - * - */ -Message.prototype.setRepondA = function(repondAJSON) -{ - var thisMessage = this - this.repondA = {} +euphorik.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"] - ) - } -} + repondAJSON.each(function(i, reponse) { + thisMessage.repondA[reponse.id] = new euphorik.Reponse(reponse.id, reponse.nick, reponse.login); + }); +}; /** * Renvoie les messages faisant partie d'une conversation. @@ -91,69 +77,65 @@ Message.prototype.setRepondA = function(repondAJSON) * @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 +euphorik.Message.prototype.getConversation = function(messages) { + var thisMessage = this; // les messages faisant partie de la conversation - var messagesEnEvidence = {} + var messagesEnEvidence = {}; + messagesEnEvidence[this.id] = 1; - messagesEnEvidence[this.id] = 1 + // parcours en profondeur + var f = function(ids, premierNiveau, ensemble, evidence) { + objectEach(ids, function(id) { + if (!messagesEnEvidence[id] || premierNiveau) { + var message = messages.messagesParId[id]; + if (message) { + messagesEnEvidence[id] = premierNiveau ? evidence : (message.auteurId === thisMessage.auteurId ? 1 : 0); + f(message[ensemble], false, ensemble, evidence); + } + } + }); + }; - // 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 + // remonte le temps + f(this.estReponduPar, true, "estReponduPar", 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) + // descent le temps + f(this.repondA, true, "repondA", 3); - return messagesEnEvidence -} + 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 = "" +euphorik.Message.prototype.XHTML = function(messagePair, pre) { + if (messagePair === undefined) { + messagePair = true; + } + pre = pre || ""; + + thisMessage = this; // 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) +")" ) + 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 + var XHTMLrepondA = ""; + var debut = true; + objectEach(this.repondA, function(id, rep) { + if (!debut) { + XHTMLrepondA += ", "; + } + XHTMLrepondA += thisMessage.formateur.traitementComplet(rep.pseudo); + debut = false; + }); + if (XHTMLrepondA) { + XHTMLrepondA = "" + XHTMLrepondA + ""; } - if (XHTMLrepondA != "") - XHTMLrepondA = "" + XHTMLrepondA + "" return "
" + this.auteurId + "" + identifiant + "" + XHTMLrepondA + "" + this.formateur.traitementComplet(this.contenu, this.pseudo) + "" + - "
" -} - + ""; +};