X-Git-Url: http://git.euphorik.ch/index.cgi?a=blobdiff_plain;ds=sidebyside;f=js%2FpageMinichat.js;h=d7f343fe7696d39be4ea3494f4baa70c27a9a8ce;hb=7f8025543a7a5d614ec47d18026dc0feb3338fdb;hp=ce0bcf0145077123bceb4099ce641b547c5d1b88;hpb=6feaef2a51f7226c41d69f9e86f605718b78aa02;p=euphorik.git diff --git a/js/pageMinichat.js b/js/pageMinichat.js index ce0bcf0..d7f343f 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -10,24 +10,22 @@ function PageMinichat(client, formateur, util) this.regexMessageTagMatch = /\{.*?\}>/g this.regexMessageTagReplace = /^(.*?\{.*?\}>)*/ - - this.messages = new Messages(this.client, this.formateur, this.util) } PageMinichat.prototype.contenu = function() { +// \ return '\
\ \ -\ -' +' } PageMinichat.prototype.charger = function() @@ -36,18 +34,12 @@ PageMinichat.prototype.charger = function() jQuery("form input.pseudo").val(this.client.pseudo) - this.messages.rafraichirMessages(true) + // cet appel ne doit pas être fait avant l'appel à 'charger' + this.messages = new Messages(this.client, this.formateur, this.util) + + this.messages.rafraichirMessages(true) this.util.setCaretToEnd(jQuery("form input.message")[0]) - - jQuery("#messages").hover( - function(){}, - function(event) - { - jQuery("#messages .message").removeClass("cache") - thisPage.messages.messageOver = null - } - ) // affichage des smiles jQuery("#smiles").html(this.formateur.getSmilesHTML()).children().each( @@ -86,9 +78,7 @@ PageMinichat.prototype.charger = function() function() { // captcha anti bot - if (jQuery("form input.captcha").val() != "") return - - thisPage.messages.allerSurLaPage(1) + if (jQuery("form input.captcha").val() != "") return thisPage.envoyerMessage( jQuery("form input.pseudo").val(), @@ -113,44 +103,25 @@ PageMinichat.prototype.charger = function() PageMinichat.prototype.decharger = function() { - if (this.attenteCourante != null) - this.attenteCourante.abort() + //alert(this.attenteCourante) + this.messages.stopAttenteCourante() } -PageMinichat.prototype.getXMLMessage = function(pseudo, message, repondA) +PageMinichat.prototype.getJSONMessage = function(pseudo, message, repondA) { - var XMLDocument = this.util.creerDocumentXMLAction() - XMLDocument.documentElement.setAttribute("name", "message") - - var nodeCookie = XMLDocument.createElement("cookie") - nodeCookie.appendChild(XMLDocument.createTextNode(this.client.cookie)) - XMLDocument.documentElement.appendChild(nodeCookie) - - var nodePseudo = XMLDocument.createElement("pseudo") - nodePseudo.appendChild(XMLDocument.createTextNode(pseudo)) - XMLDocument.documentElement.appendChild(nodePseudo) - - var nodeContenu = XMLDocument.createElement("contenu") - nodeContenu.appendChild(XMLDocument.createTextNode(message)) - XMLDocument.documentElement.appendChild(nodeContenu) - - if (repondA.length > 0) - { - var nodeReponses = XMLDocument.createElement("reponses") - XMLDocument.documentElement.appendChild(nodeReponses) - for (var i = 0; i < repondA.length; i++) - { - var nodeReponse = XMLDocument.createElement("reponse") - nodeReponse.setAttribute("id", repondA[i]) - nodeReponses.appendChild(nodeReponse) - } + return { + "action" : "put_message", + "cookie" : this.client.cookie, + "nick" : pseudo, + "content" : message, + "answer_to" : repondA } - - return XMLDocument } PageMinichat.prototype.envoyerMessage = function(pseudo, message) -{ +{ + var thisPageMinichat = this + // (un pseudo vide est autorisé) pseudo = this.formateur.filtrerInputPseudo(pseudo) @@ -160,16 +131,8 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) if (tags != null) { for(var i = 0; i < tags.length; i++) - repondA.push(/\{(.*?)\}>/.exec(tags[i])[1]) + repondA.push(parseInt(/\{(.*?)\}>/.exec(tags[i])[1], 36)) message = message.replace(this.regexMessageTagReplace, "") - - // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) - for (var i = 0; i < repondA.length; i++) - { - jQuery("#messages div#" + repondA[i]).addClass("repondu") - for (var m = 0; m < this.messages.messages.length; m++) - this.messages.messages[m].clientARepondu = true - } } message = message.trim() @@ -179,22 +142,41 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) return } - if (!this.client.identifie()) + if (!this.client.authentifie()) if (!this.client.enregistrement()) { this.util.messageDialogue("login impossible") return - } - - //this.util.log(this.util.xmlVersAction(this.getXMLmessage(pseudo, message, repondA)).action) - //alert(this.util.xmlVersAction(this.getXMLMessage(pseudo, message, repondA)).action) - jQuery.post("request", this.util.xmlVersAction(this.getXMLMessage(pseudo, message, repondA)), - function(data, textStatus) - { - // TODO : traiter les erreurs - //alert(data) - jQuery("form input.message").val("") - } + } + + ;;; dumpObj(this.getJSONMessage(pseudo, message, repondA)) + jQuery.ajax( + { + url : "request", + type: "POST", + data : this.util.jsonVersAction(this.getJSONMessage(pseudo, message, repondA)), + dataType : "json", + success : function(data, textStatus) + { + ;;; dumpObj(data) + + if(data["reply"] == "ok") + { + jQuery("form input.message").val("") + + // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) + for (var i = 0; i < repondA.length; i++) + { + jQuery("#conversations div#" + repondA[i]).addClass("repondu") + /* Ca sert à rien, TODO : tester/virer + for (var c = 0; c < thisPageMinichat.messages.conversations.length; c++) + for (var m = 0; m < thisPageMinichat.messages.conversations[c].messages.length; m++) + thisPageMinichat.messages.conversations[c].messages[m].clientARepondu = true + */ + } + } + } + } ) } @@ -241,25 +223,27 @@ function Message(id, date, pseudo, contenu) /** * */ -Message.prototype.setRepondA = function(element) +Message.prototype.setRepondA = function(repondAJSON) { - this.repondA = {} - var thisMessage = this - - jQuery("id", element).each ( - function() - { - var reponse = new Reponse(jQuery(this).attr("id"), jQuery(this).attr("pseudo"), jQuery(this).attr("login")) - thisMessage.repondA[reponse.id] = reponse - } - ) + 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"] + ) + } } /** - * @return les id des messages qui ont été mis en evidence sous la forme d'un objet + * 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 => bool} */ -Message.prototype.afficherConversation = function(messages) +Message.prototype.getConversation = function(messages) { // les messages faisant partie de la conversation var messagesEnEvidence = {} @@ -291,159 +275,232 @@ Message.prototype.afficherConversation = function(messages) /////////////////////////////////////////////////////////////////////////////////////////////////// /** - * Représente l'ensemble des messages affichés. + * Représente une conversation. + * @param numConv le numéro (appelé id) de la conversation + * @param formateur outil permettant la mise en forme du texte des messages */ -function Messages(client, formateur, util) +function Conversation(num, util, formateur) { - this.client = client - this.formateur = formateur - this.util = util + var thisConversation = this - this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page - this.idDernierMesssage = null // l'id du dernier message connu - this.page = 1 // par défaut on se trouve sur la première page - + this.num = num // peut changer au cours de la vie de la conversation + this.id = Math.random() * 100000000000000000 + this.messageOver = null // le message sur lequel se trouve le curseur + this.util = util + this.formateur = formateur this.messages = new Array() this.messagesParId = new Object() - // l'objet XMLHttpRequest représentant la connexion d'attente - this.attenteCourante = null + this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page + + jQuery("#conversations").append( + '