X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2FpageMinichat%2Fmessage.js;fp=js%2FpageMinichat%2Fmessage.js;h=f7a11106de5f6a066c1db470c1512d2fe773c4b3;hp=0000000000000000000000000000000000000000;hb=904f2d76c25b7fd04b1f90dfa095c7bf0f8c7ce5;hpb=c4669f8724bdf389a3541b113b0c1e20a70cc879 diff --git a/js/pageMinichat/message.js b/js/pageMinichat/message.js new file mode 100644 index 0000000..f7a1110 --- /dev/null +++ b/js/pageMinichat/message.js @@ -0,0 +1,172 @@ +// 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 . + +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 = "" +} + + +/** + * Représente un message. + */ +function Message(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.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) +} + +/** + * + */ +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"] + ) + } +} + +/** + * 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 + */ +Message.prototype.getConversation = function(messages) +{ + var thisMessage = this + + // les messages faisant partie de la conversation + var messagesEnEvidence = {} + + messagesEnEvidence[this.id] = 1 + + // 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 + + // 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) + + 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 = "" + + // 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) +")" ) + + var XHTMLrepondA = "" + var debut = true + for (var id in this.repondA) + { + if (!debut) XHTMLrepondA += ", " + XHTMLrepondA += this.formateur.traitementComplet(this.repondA[id].pseudo) + debut = false + } + if (XHTMLrepondA != "") + XHTMLrepondA = "" + XHTMLrepondA + "" + + return "
" + + "
" + + "[" + this.date + "]" + + "" + this.auteurId + "" + identifiant + "" + + XHTMLrepondA + + "" + this.formateur.traitementComplet(this.contenu, this.pseudo) + "" + + "
" +} +