X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=js%2FpageMinichat.js;h=f6b73c0040c5e95dee421842c1fe4bb36496bd72;hb=ccb7fdfe9914f47cc38f96e5973851f2c6f0c4b6;hp=ed1a46c177875531e51cb39069f7e3f1e80a5bc0;hpb=42445687d95289c3c3f70e1e8d76278107a8b125;p=euphorik.git diff --git a/js/pageMinichat.js b/js/pageMinichat.js index ed1a46c..f6b73c0 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -103,8 +103,8 @@ 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) @@ -132,7 +132,7 @@ PageMinichat.prototype.getXMLMessage = function(pseudo, message, repondA) { var nodeReponse = XMLDocument.createElement("reponse") nodeReponse.setAttribute("id", repondA[i]) - nodeReponses.appendChild(nodeReponse) + nodeReponses.appendChild(nodeReponse) } } @@ -140,7 +140,9 @@ PageMinichat.prototype.getXMLMessage = function(pseudo, message, repondA) } PageMinichat.prototype.envoyerMessage = function(pseudo, message) -{ +{ + var thisPageMinichat = this + // (un pseudo vide est autorisé) pseudo = this.formateur.filtrerInputPseudo(pseudo) @@ -152,15 +154,6 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) for(var i = 0; i < tags.length; i++) repondA.push(/\{(.*?)\}>/.exec(tags[i])[1]) 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("#conversation div#" + repondA[i]).addClass("repondu") - for (var c = 0; c < this.messages.conversations.length; c++) - for (var m = 0; m < this.messages.conversations[c].messages.length; m++) - this.messages.conversations[c].messages[m].clientARepondu = true - } } message = message.trim() @@ -185,8 +178,21 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) dataType : "xml", success : function(data, textStatus) { - if(jQuery("statut", data.documentElement).text() == "ok") - jQuery("form input.message").val("") + if(jQuery("statut", data.documentElement).text() == "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 + */ + } + } } } ) @@ -291,7 +297,7 @@ Message.prototype.getConversation = function(messages) * @param numConv le numéro (appelé id) de la conversation * @param formateur outil permettant la mise en forme du texte des messages */ -function Conversation(num, util, formateur, funFermer) +function Conversation(num, util, formateur) { var thisConversation = this @@ -302,11 +308,13 @@ function Conversation(num, util, formateur, funFermer) this.formateur = formateur this.messages = new Array() this.messagesParId = new Object() + + this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page jQuery("#conversations").append( '
\
' + - (funFermer == undefined ? '' : '
x
') + + (num == 0 ? '' : '
x
c
') + '<1>\
\
' @@ -321,15 +329,6 @@ function Conversation(num, util, formateur, funFermer) thisConversation.messageOver = null } ) - - // suppression de la conversation - if (funFermer != undefined) - jQuery("#conversations #" + this.getId() + " .titre .fermer").click( - function() - { - funFermer(thisConversation.num) - } - ) } /** @@ -337,13 +336,43 @@ function Conversation(num, util, formateur, funFermer) * @pageCourante la page courante * @dernierePage true si c'est la dernière page sinon false */ -Conversation.prototype.setPage = function(pageCourante, dernierePage) +Conversation.prototype.eventsPage = function(pageCourante, dernierePage) { jQuery("#conversations #" + this.getId() + " .numPage").text(pageCourante) jQuery("#conversations #" + this.getId() + " .next").css("display", pageCourante == 1 ? "none" : "inline") jQuery("#conversations #" + this.getId() + " .prev").css("display", dernierePage ? "none" : "inline") } +/** + * Evenement déclanché lors de l'insertion du lien de la conversation dans le message courant. + */ +Conversation.prototype.eventLien = function(fun) +{ + var thisConversation = this + + jQuery("#conversations #" + this.getId() + " .titre .lien").click( + function() + { + fun(thisConversation.num) + } + ) +} + +/** + * Evenement déclanché lors de la fermeture de la conversation. + */ +Conversation.prototype.eventFermer = function(fun) +{ + var thisConversation = this + + jQuery("#conversations #" + this.getId() + " .titre .fermer").click( + function() + { + fun(thisConversation.num) + } + ) +} + /** * @funNext appelé lorsque l'on passe à la page suivante (de 2 à 1 par exemple) * @funPrev appelé lorsque l'on passe à la page précédente (de 1 à 2 par exemple) @@ -391,13 +420,14 @@ Conversation.prototype.viderMessages = function() * d'afficher les messages non-affichés. * @param funClickExtract fonction (fun(numMess)) appellée lors du clic sur un bouton "extraire" */ -Conversation.prototype.flush = function(funClickExtract) +Conversation.prototype.flush = function(funClickExtract, funClickLienConv) { var thisConversation = this var idDernierMessageAffiche = jQuery("#conversations #" + this.getId() + " div:first").attr("id") if (idDernierMessageAffiche == undefined) idDernierMessageAffiche = "0" + // construction de l'XHTML des messages var XHTML = "" for (var i = this.messages.length - 1; i >= 0; i--) if (parseInt(this.messages[i].id, 36) > parseInt(idDernierMessageAffiche, 36)) @@ -405,13 +435,13 @@ Conversation.prototype.flush = function(funClickExtract) var message = this.messages[i] var XHTMLrepondA = "" for (var id in message.repondA) - XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> " + XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> " XHTMLrepondA = "" + XHTMLrepondA + "" XHTML += "
" + "
>
" + "[" + message.date + "]" + "" + this.formateur.traitementComplet(message.pseudo) + ":" + @@ -426,14 +456,26 @@ Conversation.prototype.flush = function(funClickExtract) if (myLightbox != null) myLightbox.updateImageList() + // enlève les messages exedentaires var nbMessagesAffiche = jQuery("#conversations #" + this.getId() + " .message").size() + if (nbMessagesAffiche > this.nbMessageMax) - jQuery("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty(); + jQuery("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty() // Ajoute les événements liés à chaque message jQuery("#conversations #" + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each( function() { + jQuery(".lienConv", this).click( + function(event) + { + // FIXME : ya pas mieux ? + var racine = jQuery(event.target).text() + funClickLienConv(racine.substring(1, racine.length - 1)) + return false + } + ) + jQuery(this).click( function(event) { @@ -515,6 +557,8 @@ Conversation.prototype.supprimer = function() */ function Messages(client, formateur, util) { + var thisMessages = this + this.client = client this.formateur = formateur this.util = util @@ -604,6 +648,13 @@ Messages.prototype.ajouterMessage = function(element, numConversation) function(num) // fermeture de la conversation { thisMessages.supprimerConversation(num) + }, + function(num) // insertion du lien vers la conversation + { + thisPage.util.replaceSelection( + jQuery("form input.message")[0], + "{" + thisMessages.client.conversations[num-1].racine + "}" + ) } ) } @@ -611,11 +662,15 @@ Messages.prototype.ajouterMessage = function(element, numConversation) this.conversations[numConversation].ajouterMessage(message) } -Messages.prototype.nouvelleConversation = function(num, funFermer) +Messages.prototype.nouvelleConversation = function(num, funFermer, funLien) { var thisMessages = this - this.conversations[num] = new Conversation(num, this.util, this.formateur, funFermer) + this.conversations[num] = new Conversation(num, this.util, this.formateur) + if (funFermer != undefined) + this.conversations[num].eventFermer(funFermer) + if (funLien != undefined) + this.conversations[num].eventLien(funLien) this.conversations[num].setFunPage( function(num) // page suivante @@ -684,13 +739,17 @@ Messages.prototype.flush = function(numConv) { var thisMessages = this - this.conversations[numConv].flush - ( + this.conversations[numConv].flush( // fonction appelée lors de la demande d'extraction d'une conversation function(idMess) { if (thisMessages.client.ajouterConversation(idMess)) thisMessages.rafraichirMessages(true) + }, + function(racine) // appelé lorsqu'un utilisateur click sur un lien vers une conversation + { + if (thisMessages.client.ajouterConversation(racine)) + thisMessages.rafraichirMessages(true) } ) } @@ -703,6 +762,15 @@ Messages.prototype.viderMessages = function() this.conversations[i].viderMessages() } +/** + * Arrete l'attente courante s'il y en a une. + */ +Messages.prototype.stopAttenteCourante = function() +{ + if (this.attenteCourante != null) + this.attenteCourante.abort() +} + /** * Met à jour les messages de manière continue. * (AJAX-Comet-style proof) @@ -712,16 +780,15 @@ Messages.prototype.rafraichirMessages = function(vider) { var thisMessages = this // caisupair javacrypte - if (this.attenteCourante != null) - this.attenteCourante.abort() - if (vider == undefined) vider = false + + this.stopAttenteCourante() if (vider) this.idDernierMessage = null - //this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump() + ;;; this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump("Client") this.attenteCourante = jQuery.ajax({ type: "POST", url: "request", @@ -730,7 +797,7 @@ Messages.prototype.rafraichirMessages = function(vider) success: function(data) { - //thisMessages.util.serializer.serializeToString(data).dump() + ;;; thisMessages.util.serializer.serializeToString(data).dump("Serveur") if (vider) thisMessages.viderMessages() @@ -751,7 +818,7 @@ Messages.prototype.rafraichirMessages = function(vider) thisMessages.ajouterMessages(messages, numConv) - thisMessages.conversations[numConv].setPage( + thisMessages.conversations[numConv].eventsPage( numConv == 0 ? thisMessages.client.pagePrincipale : thisMessages.client.conversations[numConv - 1].page, jQuery("autresPages", this).text() != "true" )