X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2Fchat%2Fmessage.js;fp=js%2Fchat%2Fmessage.js;h=c24be1dd1aa12c83510d2dfa4bf13493c53a7b8b;hp=0000000000000000000000000000000000000000;hb=e49a1c483f1751f129c0766d1061b3da44b60581;hpb=d6dcd0fd8af56bd4791aa4e621c2e5058033c37a diff --git a/js/chat/message.js b/js/chat/message.js new file mode 100644 index 0000000..c24be1d --- /dev/null +++ b/js/chat/message.js @@ -0,0 +1,155 @@ +// coding: utf-8 +// Copyright 2008 Grégory Burri +// +// This file is part of Euphorik. +// +// Euphorik is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Euphorik is distributed in the hope that it will be useful, +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Euphorik. If not, see . + +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. + */ +euphorik.Message = function(client, formater, element) { + this.client = client; + this.formater = formater; + + 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; +}; + +/** + * @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()'. + */ +euphorik.Message.prototype.getId = function(pre) { + pre = pre || ""; + return pre + "mess" + this.id.toString(36); +}; + +euphorik.Message.prototype.setRepondA = function(repondAJSON) { + var thisMessage = this; + this.repondA = {}; + + 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. + * @param messages l'ensemble des messages de la conversation + * @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 + */ +euphorik.Message.prototype.getConversation = function(messages) { + var thisMessage = this; + + // les messages faisant partie de la conversation + var messagesEnEvidence = {}; + 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); + } + } + }); + }; + + // remonte le temps + f(this.estReponduPar, true, "estReponduPar", 2); + + // descent le temps + f(this.repondA, true, "repondA", 3); + + 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é. + */ +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.formater.traitementComplet(this.pseudo) : + (this.client.nickFormat === "login" ? this.formater.traitementComplet(this.login) : + this.formater.traitementComplet(this.pseudo) + "(" + this.formater.traitementComplet(this.login) +")" ); + + var XHTMLrepondA = ""; + var debut = true; + objectEach(this.repondA, function(id, rep) { + if (!debut) { + XHTMLrepondA += ", "; + } + XHTMLrepondA += thisMessage.formater.traitementComplet(rep.pseudo); + debut = false; + }); + if (XHTMLrepondA) { + XHTMLrepondA = "" + XHTMLrepondA + ""; + } + + return "
" + + "" + + "[" + this.date + "]" + + "" + this.auteurId + "" + identifiant + "" + + "" + + "" + + XHTMLrepondA + + "" + this.formater.traitementComplet(this.contenu, this.pseudo) + "" + + "
"; +};