From 42445687d95289c3c3f70e1e8d76278107a8b125 Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Tue, 15 Apr 2008 22:29:54 +0000 Subject: [PATCH] =?utf8?q?MOD=20fin=20du=20syst=C3=A8me=20de=20page=20et?= =?utf8?q?=20cleanage=20du=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- css/1/pageMinichat.css | 23 +++- js/euphorik.js | 91 ++++++++++----- js/pageMinichat.js | 182 +++++++++-------------------- modules/erl/euphorik_minichat.erl | 5 +- modules/erl/euphorik_protocole.erl | 2 +- 5 files changed, 139 insertions(+), 164 deletions(-) diff --git a/css/1/pageMinichat.css b/css/1/pageMinichat.css index d965d6a..e24092c 100755 --- a/css/1/pageMinichat.css +++ b/css/1/pageMinichat.css @@ -176,11 +176,26 @@ } #page.minichat #conversations .titre .next, -#page.minichat #conversations .titre .prev -{ - display:none +#page.minichat #conversations .titre .prev { + display: none; } - + +#page.minichat #conversations .titre .next, +#page.minichat #conversations .titre .prev, +#page.minichat #conversations .titre .numPage { + background-color: #42380b; + cursor: pointer; + padding-right: 5px; + padding-left: 5px; +} + +#page.minichat #conversations .titre .next:hover, +#page.minichat #conversations .titre .prev:hover, +#page.minichat #conversations .titre .numPage:hover { + background-color: #7c6e2e +} + + #page.minichat #pages { margin-top: 10px; } diff --git a/js/euphorik.js b/js/euphorik.js index 8487f77..4b76b93 100755 --- a/js/euphorik.js +++ b/js/euphorik.js @@ -53,11 +53,12 @@ String.prototype.rtrim = function() return this.replace(/\s+$/, ""); } -String.prototype.dump = function() -{ +String.prototype.dump = function(titre) +{ + titre = titre == undefined ? "" : titre if (typeof dump != "undefined") { - dump("\n--- EUPHORIK.CH ---\n") + dump("\n--- EUPHORIK.CH : " + titre + " ---\n") dump(this) dump("\n------\n") } @@ -123,25 +124,29 @@ Util.prototype.serializeXML = function(documentXML) return documentXML.xml } +var documentXMLBase = undefined // singleton Util.prototype.creerDocumentXMLAction = function() -{ - if (document.implementation && document.implementation.createDocument) - { - // var doc = document.implementation.createDocument("", "action", null) - var parser = new DOMParser(); - var doc = parser.parseFromString("\n", "text/xml") - //alert(this.serializeXML(doc)) - return doc - } - else if (window.ActiveXObject) +{ + // FIXME : essayer de garder le doc de base en cache (singleton) et d'en retourner une copie + if (true)//documentXMLBase == undefined) { - var doc = new ActiveXObject("MSXML2.DOMDocument") //("Microsoft.XMLDOM") - doc.appendChild(doc.createElement("action")); - //doc.loadXML("") - //alert(doc.documentElement) - //doc.createElement("action") - return doc - } + if (document.implementation && document.implementation.createDocument) + { + // var doc = document.implementation.createDocument("", "action", null) + var parser = new DOMParser(); + documentXMLBase = parser.parseFromString("\n", "text/xml") + //alert(this.serializeXML(doc)) + } + else if (window.ActiveXObject) + { + documentXMLBase = new ActiveXObject("MSXML2.DOMDocument") //("Microsoft.XMLDOM") + documentXMLBase.appendChild(doc.createElement("action")); + //doc.loadXML("") + //alert(doc.documentElement) + //doc.createElement("action") + } + } + return documentXMLBase } Util.prototype.xmlVersAction = function(xml) @@ -298,7 +303,7 @@ Formateur.prototype.traitementComplet = function(M, pseudo) } /** - * FIXME : Cette méthode est attrocement lourde !! + * FIXME : Cette méthode est attrocement lourde ! A optimiser. */ Formateur.prototype.traiterSmiles = function(M) { @@ -434,21 +439,43 @@ Client.prototype.setCss = function(css) } Client.prototype.pageSuivante = function(numConv) +{ + if (numConv < 0 && this.pagePrincipale > 1) + this.pagePrincipale -= 1 + else if (this.conversations[numConv].page > 1) + this.conversations[numConv].page -= 1 + this.flush(false) +} + +Client.prototype.pagePrecedente = function(numConv) { if (numConv < 0) this.pagePrincipale += 1 - else + else this.conversations[numConv].page += 1 this.flush(false) } -Client.prototype.pagePrecedente = function(numConv) +/** + * Définit la première page pour la conversation donnée. + * @return true si la page a changé sinon false + */ +Client.prototype.goPremierePage = function(numConv) { if (numConv < 0) - this.pagePrincipale -= 1 - else - this.conversations[numConv].page -= 1 + { + if (this.pagePrincipale == 1) + return false + this.pagePrincipale = 1 + } + else + { + if (this.conversations[numConv].page == 1) + return false + this.conversations[numConv].page = 1 + } this.flush(false) + return true } /** @@ -551,6 +578,10 @@ Client.prototype.getXMLEnregistrement = function(login, password) return XMLDocument } +/** + * Sérialize le profile en XML. + * TODO : méthode assez lourde, 3.25ms de moyenne + */ Client.prototype.getXMLProfile = function() { var XMLDocument = this.util.creerDocumentXMLAction() @@ -581,7 +612,7 @@ Client.prototype.getXMLProfile = function() XMLDocument.documentElement.appendChild(nodeCSS) var nodePagePrincipale = XMLDocument.createElement("pagePrincipale") - nodePagePrincipale.appendChild(XMLDocument.createTextNode(this.pagePrincipale)) + nodePagePrincipale.appendChild(XMLDocument.createTextNode(this.pagePrincipale < 1 ? 1 : this.pagePrincipale)) XMLDocument.documentElement.appendChild(nodePagePrincipale) // mémorise les conversations affichées @@ -729,7 +760,7 @@ Client.prototype.connexion = function(action) success: function(data) { - //thisClient.util.serializer.serializeToString(data).dump() + //thisClient.util.serializer.serializeToString(data).dump("Charger client") thisClient.chargerDonnees(data) } } @@ -762,7 +793,7 @@ Client.prototype.chargerDonnees = function(data) // la page de la conversation principale var tmp = jQuery("pagePrincipale", data.documentElement) - this.pagePrincipale = tmp.length < 1 ? 1 : tmp.text() + this.pagePrincipale = tmp.length < 1 ? 1 : parseInt(tmp.text()) // met à jour la css if (this.css != "") @@ -792,7 +823,7 @@ Client.prototype.flush = function(async) async = true thisClient = this - //thisClient.util.log(this.util.xmlVersAction(this.getXMLProfile()).action) + //this.util.xmlVersAction(this.getXMLProfile()).action.dump("Flush client") jQuery.ajax( { async: async, diff --git a/js/pageMinichat.js b/js/pageMinichat.js index c41aa6a..ed1a46c 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -175,19 +175,7 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) { 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("") - } - )*/ + } jQuery.ajax( { @@ -305,7 +293,6 @@ Message.prototype.getConversation = function(messages) */ function Conversation(num, util, formateur, funFermer) { - //alert("ok") var thisConversation = this this.num = num // peut changer au cours de la vie de la conversation @@ -320,7 +307,7 @@ function Conversation(num, util, formateur, funFermer) '
\
' + (funFermer == undefined ? '' : '
x
') + - '<1>\ + '<1>\
\
' ) @@ -347,24 +334,34 @@ function Conversation(num, util, formateur, funFermer) /** * Défini les fonctions (callback) appelées lorsque l'on change de page. - * @funNext appelé lorsque l'on revient une page en arrière - * @funPrev appelé lorsque l'on passe à la page suisvante * @pageCourante la page courante * @dernierePage true si c'est la dernière page sinon false */ -Conversation.prototype.initPage = function(funNext, funPrev, pageCourante, dernierePage) +Conversation.prototype.setPage = function(pageCourante, dernierePage) { - var thisConversation = this + 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") +} +/** + * @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) + * @funReset appelé lorsque l'on souhaite revenir à la page une + */ +Conversation.prototype.setFunPage = function(funNext, funPrev, funReset) +{ + var thisConversation = this + jQuery("#conversations #" + this.getId() + " .next").click( function() { funNext(thisConversation.num) } ) jQuery("#conversations #" + this.getId() + " .prev").click( function() { funPrev(thisConversation.num) } ) - - jQuery("#conversations #" + this.getId() + " .next").css("display", pageCourante == 1 ? "none" : "inline") - jQuery("#conversations #" + this.getId() + " .prev").css("display", dernierePage ? "none" : "inline") + jQuery("#conversations #" + this.getId() + " .numPage").click( + function() { funReset(thisConversation.num) } + ) } /** @@ -414,7 +411,7 @@ Conversation.prototype.flush = function(funClickExtract) XHTML += "
" + + "\" >" + "
>
" + "[" + message.date + "]" + "" + this.formateur.traitementComplet(message.pseudo) + ":" + @@ -422,9 +419,8 @@ Conversation.prototype.flush = function(funClickExtract) "" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo)) + "" + "
" } - //alert(this.getId()) + jQuery("#conversations #" + this.getId()).prepend(XHTML) - //alert(jQuery("#conversations").text()) // mise à jour des images (LightBox) après l'ajout de message if (myLightbox != null) @@ -438,13 +434,6 @@ Conversation.prototype.flush = function(funClickExtract) jQuery("#conversations #" + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each( function() { - /*jQuery(".extraire", this).click( - function(event) - { - funClickExtract() - return false - } - )*/ jQuery(this).click( function(event) { @@ -531,7 +520,7 @@ function Messages(client, formateur, util) this.util = util this.conversations = new Array() // les conversations, la première représente la conversation principale - this.conversations[0] = new Conversation(0, this.util, this.formateur) + this.nouvelleConversation(0) this.idDernierMessage = null // l'id du dernier message connu @@ -546,8 +535,6 @@ Messages.prototype.getXMLrafraichirMessages = function() { var XMLDocument = this.util.creerDocumentXMLAction() XMLDocument.documentElement.setAttribute("name", "refreshMessages") - - //alert(this.util.serializer.serializeToString(XMLDocument)) if (this.client.identifie()) { @@ -567,26 +554,6 @@ Messages.prototype.getXMLrafraichirMessages = function() nodeNombreMessage.appendChild(XMLDocument.createTextNode(conf.nbMessageAffiche)) XMLDocument.documentElement.appendChild(nodeNombreMessage) - /*var nodePage = XMLDocument.createElement("page") - nodePage.appendChild(XMLDocument.createTextNode(this.conversations[0].page)) - XMLDocument.documentElement.appendChild(nodePage)*/ - - // les conversations - /* Obsolète, le serveur les recupères directement auprès des informations utilisateurs - for (var i = 0; i < this.client.conversations.length; i++) - { - var nodeConversation = XMLDocument.createElement("conversation") - XMLDocument.documentElement.appendChild(nodeConversation) - - var nodeRacine = XMLDocument.createElement("racine") - nodeRacine.appendChild(XMLDocument.createTextNode(this.client.conversations[i].racine)) - nodeConversation.appendChild(nodeRacine) - - var nodePageConv = XMLDocument.createElement("page") - nodePageConv.appendChild(XMLDocument.createTextNode(this.client.conversations[i].page)) - nodeConversation.appendChild(nodePageConv) - }*/ - return XMLDocument; } @@ -614,10 +581,8 @@ Messages.prototype.ajouterMessage = function(element, numConversation) // pas d'utilisation de jquery pour des raisons de performance var id = element.getAttribute("id") - //alert(parseInt(null, 36) +" " + parseInt(this.idDernierMessage, 36)) if (this.idDernierMessage == null || parseInt(id, 36) > parseInt(this.idDernierMessage, 36)) this.idDernierMessage = id - //alert(this.idDernierMessage) var message = new Message( id, @@ -634,19 +599,45 @@ Messages.prototype.ajouterMessage = function(element, numConversation) if (this.conversations[numConversation] == null) { - this.conversations[numConversation] = new Conversation(numConversation, this.util, this.formateur, + this.nouvelleConversation( + numConversation, function(num) // fermeture de la conversation { thisMessages.supprimerConversation(num) } ) - - this.ajusterLargeurConversations() } this.conversations[numConversation].ajouterMessage(message) } +Messages.prototype.nouvelleConversation = function(num, funFermer) +{ + var thisMessages = this + + this.conversations[num] = new Conversation(num, this.util, this.formateur, funFermer) + + this.conversations[num].setFunPage( + function(num) // page suivante + { + thisMessages.client.pageSuivante(num - 1) + thisMessages.rafraichirMessages(true) + }, + function(num) // page précédente + { + thisMessages.client.pagePrecedente(num - 1) + thisMessages.rafraichirMessages(true) + }, + function(num) // retour à la page une + { + if (thisMessages.client.goPremierePage(num - 1)) + thisMessages.rafraichirMessages(true) + } + ) + + this.ajusterLargeurConversations() +} + /** * Enlève une conversation. */ @@ -730,8 +721,7 @@ Messages.prototype.rafraichirMessages = function(vider) if (vider) this.idDernierMessage = null - this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump() - //alert(this.util.xmlVersAction(this.getXMLrafraichirMessages()).action) + //this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump() this.attenteCourante = jQuery.ajax({ type: "POST", url: "request", @@ -740,13 +730,11 @@ Messages.prototype.rafraichirMessages = function(vider) success: function(data) { - thisMessages.util.serializer.serializeToString(data).dump() + //thisMessages.util.serializer.serializeToString(data).dump() if (vider) thisMessages.viderMessages() - //thisMessages.MAJPages(parseInt(jQuery("nbPage", data.documentElement).text())) - // ajoute les messages reçu à leur conversation respective var numConv = 0 jQuery("conversation", data.documentElement).each( @@ -760,18 +748,10 @@ Messages.prototype.rafraichirMessages = function(vider) messages.push(this) } ) - //alert("ajoutMess : " + messages.length + " " + numConv) + thisMessages.ajouterMessages(messages, numConv) - thisMessages.conversations[numConv].initPage( - function(num) // page suivante - { - thisMessages.client.pageSuivante(num - 1) - }, - function(num) // page précédente - { - thisMessages.client.pagePrecedente(num - 1) - }, + thisMessages.conversations[numConv].setPage( numConv == 0 ? thisMessages.client.pagePrincipale : thisMessages.client.conversations[numConv - 1].page, jQuery("autresPages", this).text() != "true" ) @@ -779,9 +759,6 @@ Messages.prototype.rafraichirMessages = function(vider) } ) - // 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); }, @@ -793,52 +770,3 @@ Messages.prototype.rafraichirMessages = function(vider) } ) } - -/* Osbolète -Messages.prototype.MAJPages = function(nbPage) -{ - //alert(nbPage) - - var thisMessages = this - - var nbPageActuel = jQuery("#pages span").size() - - for(var p = nbPageActuel + 1; p <= nbPage && p <= 3; p++) - { - jQuery("#pages").append("" + p + "").click( - function(event) - { - var target = jQuery(event.target) - - if(!target.is("span")) - return - - thisMessages.allerSurLaPage(parseInt(jQuery(event.target).text())) - } - ) - } -}*/ - -/* Obsolète -Messages.prototype.allerSurLaPage = function(page) -{ - if (page == this.page) - return - this.page = page - - var thisMessages = this - - //jQuery("#pages span").removeClass("pageCourante") - jQuery("#pages span").each( - function(i) - { - if (jQuery(this).text() == thisMessages.page) - jQuery(this).addClass("pageCourante") - else - jQuery(this).removeClass("pageCourante") - } - ) - - this.rafraichirMessages(true) -}*/ - diff --git a/modules/erl/euphorik_minichat.erl b/modules/erl/euphorik_minichat.erl index 53fe1e3..4268fef 100755 --- a/modules/erl/euphorik_minichat.erl +++ b/modules/erl/euphorik_minichat.erl @@ -205,13 +205,14 @@ set_profile(Cookie, Login, Password, Pseudo, Email, Css, Page_principale, Conver login_deja_pris; _ -> User_modifie = User#user{ - % TODO : pourquoi ne pas tester avec la valeur "undefined" plutôt qu'avec "is_list" ? + % TODO : pourquoi ne pas tester avec la valeur "undefined" plutôt qu'avec "is_list" ? + % TODO : validation plus strict des données (pas de page négative dans les conv par exemple) login = if is_list(Login) -> Login; true -> User#user.login end, password = if is_list(Password) -> Password; true -> User#user.password end, pseudo = if is_list(Pseudo) -> Pseudo; true -> User#user.pseudo end, email = if is_list(Email) -> Email; true -> User#user.email end, css = if is_list(Css) -> Css; true -> User#user.css end, - page_principale = if is_list(Page_principale) -> Page_principale; true -> User#user.page_principale end, + page_principale = if is_integer(Page_principale), Page_principale > 0 -> Page_principale; true -> User#user.page_principale end, conversations = if is_list(Conversations) -> Conversations; true -> User#user.conversations end }, mnesia:write(User_modifie), diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index 19932f2..251d4c1 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -199,7 +199,7 @@ refreshMessage(Action) -> ) ] } - end, + end, euphorik_minichat_conversation:conversations(User#user.conversations, Nb_message, Dernier_id, User#user.page_principale) ) }]; -- 2.45.2