X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=js%2FpageMinichat.js;h=31d19ba30399f03b63efc10247585f7c15f394d8;hb=ac67ff1ae69108b98f190f3da18ced663a84c0da;hp=60c3a64ef1ddb03d061ad89a65c32ea6f8e025e2;hpb=5e6e8d4d1aecf4e7522592dc9876818851c99c9c;p=euphorik.git diff --git a/js/pageMinichat.js b/js/pageMinichat.js index 60c3a64..31d19ba 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,35 +142,45 @@ 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) - /* Obsolète - 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("") - } - )*/ - + + this.client.pseudo = pseudo + + ;;; dumpObj(this.getJSONMessage(pseudo, message, repondA)) jQuery.ajax( { url : "request", type: "POST", - data : this.util.xmlVersAction(this.getXMLMessage(pseudo, message, repondA)), - dataType : "xml", + data : this.util.jsonVersAction(this.getJSONMessage(pseudo, message, repondA)), + dataType : "json", + beforeSend : function(xmlHttpRequest) + { + xmlHttpRequest.setRequestHeader("X-Requested-With", "") + }, success : function(data, textStatus) { - if(jQuery("statut", data.documentElement).text() == "ok") - jQuery("form input.message").val("") + ;;; 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 + */ + } + } } } ) @@ -237,11 +210,12 @@ function Reponse(id, pseudo, login) * @param pseudo * @param contenu */ -function Message(id, date, pseudo, contenu) +function Message(id, date, pseudo, login, contenu) { this.id = id this.date = date this.pseudo = pseudo + this.login = login this.contenu = contenu this.appartientAuClient = false @@ -256,25 +230,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 = {} @@ -307,204 +283,245 @@ Message.prototype.afficherConversation = function(messages) /** * 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 Conversation() +function Conversation(num, util, formateur, client) { + var thisConversation = this + + 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.client = client + this.idDernierMessageAffiche = 0 + this.messages = new Array() this.messagesParId = new Object() - this.idDernierMesssage = null // la racine de la conversation (string), null = conversation principale + this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page - this.page = 1 // par défaut on se trouve sur la première page + jQuery("#conversations").append( + '