From e9efabd2fcb945c99ee4cf2eec0823c0fa64102b Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Sat, 15 Mar 2008 17:24:05 +0000 Subject: [PATCH] MOD Avancement sur les conversations (pas fini) --- doc/protocole2.txt | 2 +- doc/technique.txt | 8 ++ js/pageMinichat.js | 192 +++++++++++++++++------------- modules/erl/euphorik_minichat.erl | 2 +- sessions/erl.session | 5 - 5 files changed, 116 insertions(+), 93 deletions(-) create mode 100644 doc/technique.txt diff --git a/doc/protocole2.txt b/doc/protocole2.txt index 52453c6..c8ae1a6 100644 --- a/doc/protocole2.txt +++ b/doc/protocole2.txt @@ -109,7 +109,7 @@ c -> s s -> c - + true Hier 17:26:54 diff --git a/doc/technique.txt b/doc/technique.txt new file mode 100644 index 0000000..81e781e --- /dev/null +++ b/doc/technique.txt @@ -0,0 +1,8 @@ +Euphorik - doc technique + +== Page message == +Classes : + * Messages + + * Conversation + * Message \ No newline at end of file diff --git a/js/pageMinichat.js b/js/pageMinichat.js index 60c3a64..223f6c9 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -323,7 +323,85 @@ Conversation.prototype.ajouterMessage = function(message) this.messages.push(message) this.messagesParId[message.id] = message if (this.messages.length > this.nbMessageMax) - delete this.messagesParId[this.messages.shift().id] + delete this.messagesParId[this.messages.shift().id] +} + +Conversation.prototype.viderMessages = function() +{ + this.messages = new Array() + jQuery("#messages").empty() +} + +/** + * Après l'ajout d'un ou plusieurs message cette méthode est appelée afin + * d'afficher les messages non-affichés. + */ +Conversation.prototype.flush = function() +{ + var thisMessages = this + + var idDernierMessageAffiche = jQuery("#messages div:first").attr("id") + if (idDernierMessageAffiche == undefined) idDernierMessageAffiche = "0" + + var XHTML = "" + for (var i = this.messages.length - 1; i >= 0; i--) + if (parseInt(this.messages[i].id, 36) > parseInt(idDernierMessageAffiche, 36)) + { + var message = this.messages[i] + var XHTMLrepondA = "" + for (var id in message.repondA) + XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> " + XHTMLrepondA = "
" + XHTMLrepondA + "
" + + XHTML += + "
" + + "[
" + message.date + "
]" + + "
" + this.formateur.traitementComplet(message.pseudo) + "
:" + + XHTMLrepondA + + "
" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo))+ "
" + + "
" + } + jQuery("#messages").prepend(XHTML) + + if (myLightbox != null) + myLightbox.updateImageList() + + var nbMessagesAffiche = jQuery("#messages .message").size() + if (nbMessagesAffiche > this.nbMessageMax) + jQuery("#messages .message").slice(this.nbMessageMax, nbMessagesAffiche).empty(); + + jQuery("#messages .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each( + function() + { + jQuery(this).click( + function(event) + { + if (jQuery(event.target).is("a")) return + + var valCourant = jQuery("input.message").val() + if (valCourant == undefined) valCourant = "" + var tag = jQuery(".pseudo", this).text() + "{" + jQuery(this).attr("id") + "}" + ">" + if (valCourant.indexOf(tag, 0) == -1) + jQuery("input.message").val(tag + " " + valCourant) + thisMessages.util.setCaretToEnd(jQuery("form input.message")[0]) + } + ) + // Q : pourquoi pas un .hover ? + // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence + .mousemove( + function(e) + { + if (this !== thisMessages.messageOver) + { + thisMessages.afficherConversation(this) + thisMessages.messageOver = this + } + } + ) + } + ) } /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -401,15 +479,11 @@ Messages.prototype.getXMLrafraichirMessages = function() /** * Création d'un nouveau message. * Les message sont données dans l'ordre de leur id. - * Met directement à jour l'affichage. * @param element un element xml représentant le message * @param numConversation le numéro de la conversation, 0 = principale - * @param autoFlush si oui alors le message est directement ajouté à la vue */ -Messages.prototype.ajouterMessage = function(element, numConversation, autoFlush) +Messages.prototype.ajouterMessage = function(element, numConversation) { - if (autoFlush == undefined) autoFlush = true // valeur par défaut - // pas d'utilisation de jquery pour des raisons de performance this.idDernierMesssage = element.getAttribute("id") @@ -428,83 +502,16 @@ Messages.prototype.ajouterMessage = function(element, numConversation, autoFlush if (this.conversations[numConversation] == null) this.conversations[numConversation] = new Conversation() - this.conversations[numConversation].ajouterMessage(message) - - if (autoFlush) - this.flush() } - -// <<< TODO <<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - +/** + * Demande à toutes les conversations de se flusher (afficher les messages non-affichés). + */ Messages.prototype.flush = function() { - var thisMessages = this - - var idDernierMessageAffiche = jQuery("#messages div:first").attr("id") - if (idDernierMessageAffiche == undefined) idDernierMessageAffiche = "0" - - var XHTML = "" - for (var i = this.messages.length - 1; i >= 0; i--) - if (parseInt(this.messages[i].id, 36) > parseInt(idDernierMessageAffiche, 36)) - { - var message = this.messages[i] - var XHTMLrepondA = "" - for (var id in message.repondA) - XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> " - XHTMLrepondA = "
" + XHTMLrepondA + "
" - - XHTML += - "
" + - "[
" + message.date + "
]" + - "
" + this.formateur.traitementComplet(message.pseudo) + "
:" + - XHTMLrepondA + - "
" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo))+ "
" + - "
" - } - jQuery("#messages").prepend(XHTML) - - if (myLightbox != null) - myLightbox.updateImageList() - - var nbMessagesAffiche = jQuery("#messages .message").size() - if (nbMessagesAffiche > this.nbMessageMax) - jQuery("#messages .message").slice(this.nbMessageMax, nbMessagesAffiche).empty(); - - jQuery("#messages .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each( - function() - { - jQuery(this).click( - function(event) - { - if (jQuery(event.target).is("a")) return - - var valCourant = jQuery("input.message").val() - if (valCourant == undefined) valCourant = "" - var tag = jQuery(".pseudo", this).text() + "{" + jQuery(this).attr("id") + "}" + ">" - if (valCourant.indexOf(tag, 0) == -1) - jQuery("input.message").val(tag + " " + valCourant) - thisMessages.util.setCaretToEnd(jQuery("form input.message")[0]) - } - ) - // Q : pourquoi pas un .hover ? - // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence - .mousemove( - function(e) - { - if (this !== thisMessages.messageOver) - { - thisMessages.afficherConversation(this) - thisMessages.messageOver = this - } - } - ) - } - ) + for (var i = 0; i < this.conversations.length; i++) + this.conversations[i].flush(). } /** @@ -537,8 +544,9 @@ Messages.prototype.afficherConversation = function(element) Messages.prototype.viderMessages = function() { this.idDernierMesssage = null - this.messages = new Array() - jQuery("#messages").empty() + + for (var i = 0; i < this.conversations.length; i++) + this.conversations[i].viderMessages() } /** @@ -577,15 +585,25 @@ Messages.prototype.rafraichirMessages = function(vider) if (vider) thisMessages.viderMessages() - thisMessages.MAJPages(parseInt(jQuery("nbPage", data.documentElement).text())) + //thisMessages.MAJPages(parseInt(jQuery("nbPage", data.documentElement).text())) - reponse = jQuery("message", data.documentElement).each( + // ajoute chaque message reçu à sa conversation respective + jQuery("conversation", data.documentElement).each( function(i) { - thisMessages.ajouterMessage(this, false) + jQuery("message", this).each( + function(j) + { + thisMessages.ajouterMessage(this, numConv) + } + ) } ) - thisMessages.flush() + + // demande à toutes les conversations d'afficher les messages non-affichés + thisMessages.flush() + + // rappel de la fonction dans 100 ms setTimeout(function(){ thisMessages.rafraichirMessages() }, 100); }, error: @@ -597,6 +615,7 @@ Messages.prototype.rafraichirMessages = function(vider) ) } +/* Osbolète Messages.prototype.MAJPages = function(nbPage) { //alert(nbPage) @@ -619,8 +638,9 @@ Messages.prototype.MAJPages = function(nbPage) } ) } -} +}*/ +/* Obsolète Messages.prototype.allerSurLaPage = function(page) { if (page == this.page) @@ -641,5 +661,5 @@ Messages.prototype.allerSurLaPage = function(page) ) this.rafraichirMessages(true) -} +}*/ diff --git a/modules/erl/euphorik_minichat.erl b/modules/erl/euphorik_minichat.erl index 68c1ed5..0ef8ef5 100755 --- a/modules/erl/euphorik_minichat.erl +++ b/modules/erl/euphorik_minichat.erl @@ -53,7 +53,7 @@ % Connexion à la base de données de yaws sur overnux connect() -> mnesia:start(), - mnesia:change_config(extra_db_nodes, [yaws@Plop]). + mnesia:change_config(extra_db_nodes, [yaws@flynux]). % Efface tous les users, minichat_reponse et minichat. diff --git a/sessions/erl.session b/sessions/erl.session index b8fe724..c1a5360 100755 --- a/sessions/erl.session +++ b/sessions/erl.session @@ -19,8 +19,3 @@ buffer.6.position=1 buffer.7.path=../modules/erl/euphorik_requests.erl buffer.7.position=1 - - - - - -- 2.43.0