From 7e471788d9356b1cb8659513674df9a883101807 Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Thu, 24 Jul 2008 16:43:48 +0000 Subject: [PATCH] =?utf8?q?MOD=20avancement=20dans=20la=20Grande=20Restruct?= =?utf8?q?uration=20ADD=20syst=C3=A8me=20de=20commandes=20avec=20la=20comm?= =?utf8?q?ande=20/nick=20(pas=20test=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- js/pageMinichat/commandes.js | 68 ++++++ js/pageMinichat/conversations.js | 4 +- js/pageMinichat/pageMinichat.js | 364 +++++++++++++++---------------- 3 files changed, 249 insertions(+), 187 deletions(-) create mode 100644 js/pageMinichat/commandes.js diff --git a/js/pageMinichat/commandes.js b/js/pageMinichat/commandes.js new file mode 100644 index 0000000..0a2c38e --- /dev/null +++ b/js/pageMinichat/commandes.js @@ -0,0 +1,68 @@ +// coding: utf-8 +// Copyright 2008 Grégory Burri +// +// This file is part of Euphorik. +// +// Euphorik is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Euphorik is distributed in the hope that it will be useful, +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Euphorik. If not, see . + + /*jslint laxbreak:true */ + +/** + * Permet d'executer des commandes tapées par l'utilisateur. + * les commandes sont entrées directement dans la ligne de saisie du message sous la forme : + * / + * + * Voici les commandes supportées : + * /nick + * Modifie le pseudo courant + */ +euphorik.Commandes = function(client) { + this.client = client; +}; + +euphorik.Commandes.statut = {ok : 0, pas_une_commande : 1, erreur_commande : 2}; + +/** + * Execute une commande. + * @return [statut, message], 'message' n'est utilisé que pour le statut 'erreur_commande'. + */ +euphorik.Commandes.prototype.exec = function(chaine) { + chaine = chaine.trim(); + + var fragments = chaine.split(/\s*/); + if (fragments.length === 0 || fragments[0].charAt(0) != '/') { + return [euphorik.Commandes.statut.pas_une_commande, '']; + } + + var commande = fragments[0].slice(1); + var args = fragments.slice(1); + + switch (commande) { + case "" : return [euphorik.Commandes.statut.erreur_commande, 'La commande est vide']; + case "nick" : return this.commandeNick(args); + } + + return [euphorik.Commandes.statut.erreur_commande, 'La commande \\' + commande + ' est inconnue']; +}; + +euphorik.Commandes.prototype.commandeNick = function(args) { + if (args.length === 0) { + return [euphorik.Commandes.statut.erreur_commande, 'Utilisation de la commande : "\nick "']; + } + + this.client.pseudo = args[0]; + $("form#posterMessage input.pseudo").val(this.client.pseudo); + + return [euphorik.Commandes.statut.ok, '']; +}; diff --git a/js/pageMinichat/conversations.js b/js/pageMinichat/conversations.js index 12c713e..d5a40e6 100644 --- a/js/pageMinichat/conversations.js +++ b/js/pageMinichat/conversations.js @@ -35,7 +35,7 @@ euphorik.Conversations = function(client, formateur, util) { this.trollIdCourant = 0; - this.pageEvent = new euphorik.PageEvent("chat", this.util); + this.comet = new Comet("chat", euphorik.conf.versionProtocole); }; // les messages auquels l'utilisateur répond et qui sont insérés dans le document XHTML @@ -378,7 +378,7 @@ euphorik.Conversations.prototype.rafraichirMessages = function(vider) { }); } - this.pageEvent.waitEvent( + this.comet.waitEvent( function() { return thisMessages.getJSONrafraichirMessages(); }, { "new_troll" : diff --git a/js/pageMinichat/pageMinichat.js b/js/pageMinichat/pageMinichat.js index 333d22d..7aeb158 100755 --- a/js/pageMinichat/pageMinichat.js +++ b/js/pageMinichat/pageMinichat.js @@ -15,182 +15,189 @@ // // You should have received a copy of the GNU General Public License // along with Euphorik. If not, see . - -function PageMinichat(client, formateur, util) -{ - this.nom = "minichat" + +/*jslint laxbreak:true */ + +euphorik.PageMinichat = function(client, formateur, util) { + this.nom = "minichat"; - this.client = client - this.formateur = formateur - this.util = util + this.client = client; + this.formateur = formateur; + this.util = util; + this.commandes = new euphorik.Commandes(this.client); // permet d'éviter d'envoyer plusieurs messages simultanément en pressant // rapidement sur "enter" par exemple - this.envoieMessageEnCours = false + this.envoieMessageEnCours = false; - this.regexMessageTagMatch = /\{.*?\}>/g - this.regexMessageTagReplace = /^(.*?\{.*?\}>)*/ -} + this.regexMessageTagMatch = /\{.*?\}>/g; + this.regexMessageTagReplace = /^(.*?\{.*?\}>)*/; +}; -PageMinichat.prototype.contenu = function() -{ +euphorik.PageMinichat.prototype.contenu = function() { // le fait que tout soit collé est fait exprès, permet d'éviter d'avoir des espaces supplémentaires entre les spans' - var formulaireXHTML = '
\ -

\ -\ -\ -0\ -\ -\ -\ -

\ -
' - var trollXHTML = '
Troll de la semaine :
' - //var titreXHTML = '' - //var messagesXHTML = '' - var conversationXHTML = '
' + var formulaireXHTML = '' + + '
' + + '

' + + ' ' + + ' ' + + ' 0' + + ' ' + + ' ' + + ' ' + + '

' + + '
'; + + var trollXHTML = '
Troll de la semaine :
'; + var conversationXHTML = '
'; - if (this.client.chatOrder === "reverse") - return trollXHTML + formulaireXHTML + conversationXHTML - else - return trollXHTML + conversationXHTML + formulaireXHTML -} + if (this.client.chatOrder === "reverse") { + return trollXHTML + formulaireXHTML + conversationXHTML; + } else { + return trollXHTML + conversationXHTML + formulaireXHTML; + } +}; -PageMinichat.prototype.classes = function() -{ - return this.client.chatOrder === "reverse" ? "orderReverse" : "orderChrono" -} +euphorik.PageMinichat.prototype.classes = function() { + return this.client.chatOrder === "reverse" ? "orderReverse" : "orderChrono"; +}; -PageMinichat.prototype.charger = function() -{ - thisPage = this +euphorik.PageMinichat.prototype.charger = function() { + thisPage = this; - $("form input.pseudo").val(this.client.pseudo) + $("#posterMessage input.pseudo").val(this.client.pseudo); // cet appel ne doit pas être fait avant l'appel à 'charger' - this.conversations = new Conversations(this.client, this.formateur, this.util) + this.conversations = new Conversations(this.client, this.formateur, this.util); - this.conversations.rafraichirMessages(true) + this.conversations.rafraichirMessages(true); - this.util.setCaretToEnd($("form input.message")[0]) + this.util.setCaretToEnd($("form#posterMessage input.message")[0]); // les outils de bannissement (uniquement pour les ekMaster) - if (this.client.ekMaster) - { + if (this.client.ekMaster) { this.util.outilsBan = $( '' + - '' + - '

' + - 'Ban de 3 jours' + - 'Ban de 15min' + - 'Avertissement' + + ' ' + + '

' + + ' Ban de 3 jours' + + ' Ban de 15min' + + ' Avertissement' + '
' - ) + ); - this.util.infoBulle("Slap", $("#slap", this.util.outilsBan)) - this.util.infoBulle("Kick (" + euphorik.conf.tempsKick + "min)", $("#kick", this.util.outilsBan)) - this.util.infoBulle("Ban (" + euphorik.conf.tempsBan / 24 / 60 + " jours)", $("#ban", this.util.outilsBan)) - this.util.infoBulle("La raison", $("input", this.util.outilsBan)) + this.util.infoBulle("Slap", $("#slap", this.util.outilsBan)); + this.util.infoBulle("Kick (" + euphorik.conf.tempsKick + "min)", $("#kick", this.util.outilsBan)); + this.util.infoBulle("Ban (" + euphorik.conf.tempsBan / 24 / 60 + " jours)", $("#ban", this.util.outilsBan)); + this.util.infoBulle("La raison", $("input", this.util.outilsBan)); } - this.util.infoBulle("Ouvrir la conversation liée au troll de la semaine", $("#trollCourant .troll")) + this.util.infoBulle("Ouvrir la conversation liée au troll de la semaine", $("#trollCourant .troll")); this.util.infoBulle("Cliquer sur les messages pour les enlevers de la liste", $("form#posterMessage #repondA").hover( - function() { thisPage.util.afficherBoite($(".messages", this), $(this), positionTypeX.centre, positionTypeY.bas) }, - function() { $(".messages", this).hide() } + function() { thisPage.util.afficherBoite($(".messages", this), $(this), positionTypeX.centre, positionTypeY.bas); }, + function() { $(".messages", this).hide(); } ).click( - function(e) - { - if ($(e.target).is(".nb")) - thisPage.conversations.enleverMessagesRepond() + function(e) { + if ($(e.target).is(".nb")) { + thisPage.conversations.enleverMessagesRepond(); + } } ), euphorik.Util.positionBulleType.droite - ) + ); // - $("body").append('
') + $("body").append('
'); // affichage des smiles $("#smiles").append(this.formateur.getSmilesHTML()).children().each( - function(i) - { - var opacityBase = $(this).css("opacity") + function(i) { + var opacityBase = $(this).css("opacity"); $(this).click( - function() - { - thisPage.util.replaceSelection($("form#posterMessage input.message")[0], thisPage.formateur.smiles[$(this).attr("class")][0].source.replace(/\\/g, "")) + function() { + thisPage.util.replaceSelection($("form#posterMessage input.message")[0], thisPage.formateur.smiles[$(this).attr("class")][0].source.replace(/\\/g, "")); } ).hover( - function() { $(this).animate({opacity: 1}, 200) }, - function() { $(this).animate({opacity: opacityBase}, 200) } - ) + function() { $(this).animate({opacity: 1}, 200); }, + function() { $(this).animate({opacity: opacityBase}, 200); } + ); } - ) - $("form button.smiles").hover( + ); + $("form#posterMessage button.smiles").hover( // affichage de la boite présentant les smiles - function(e){ thisPage.util.afficherBoite($("#smiles"), $(e.target), positionTypeX.centre, positionTypeY.basRecouvrement) }, + function(e){ thisPage.util.afficherBoite($("#smiles"), $(e.target), positionTypeX.centre, positionTypeY.basRecouvrement); }, function(){} - ) + ); $("#smiles").hover( function(){}, - function() - { - $("#smiles").hide() + function() { + $("#smiles").hide(); } - ) + ); //
// événements var nouveauMessage = - function() - { + function() { // captcha anti bot - if ($("form input.captcha").val() != "") return - - thisPage.envoyerMessage( - $("form input.pseudo").val(), - $("form input.message").val() - ) + if ($("form#posterMessage input.captcha").val() !== "") { + return; + } + + var message = $("form#posterMessage input.message").val(); + + // traitement des commandes.. + var retCommandes = thisPage.commandes.exec(message); + switch (retCommandes[0]) { + case euphorik.Commandes.statut.pas_une_commande : + thisPage.envoyerMessage(message, $("form#posterMessage input.message").val()); + break; + case euphorik.Commandes.statut.erreur_commande : + thisPage.util.messageDialogue(retCommandes[1], euphorik.Util.messageType.erreur); + break; + case euphorik.Commandes.statut.ok : + $("form#posterMessage input.message").val(""); + break; + } - $("form input.message").focus() - } + $("form#posterMessage input.message").focus(); + }; - $("form").keypress( - function(e) - { - if (e.which === 13) // return - nouveauMessage() + $("form#posterMessage").keypress( + function(e) { + if (e.which === 13) { // return + nouveauMessage(); + } } - ) + ); - $("form button.return").click(nouveauMessage) + $("form#posterMessage button.return").click(nouveauMessage); // interdiction de submiter le formulaire - $("form").submit(function(){ return false}) + $("form#posterMessage").submit(function(){ return false; }); $("input.pseudo").click( - function() - { - var input = $("input.pseudo")[0] - if (input.value === euphorik.conf.pseudoDefaut) - input.value = "" + function() { + var input = $("input.pseudo")[0]; + if (input.value === euphorik.conf.pseudoDefaut) { + input.value = ""; + } } - ) -} + ); +}; -PageMinichat.prototype.decharger = function() -{ - this.conversations.pageEvent.stopAttenteCourante() +euphorik.PageMinichat.prototype.decharger = function() { + this.conversations.comet.stopAttenteCourante(); - $("body #smiles").remove() -} + $("body #smiles").remove(); +}; -PageMinichat.prototype.getJSONMessage = function(pseudo, message) -{ - var repondA = [] - for (var id in this.conversations.messagesRepond) - repondA.push(parseInt(id)) // FIXME : une propriété ne peut pas être de type int ? +euphorik.PageMinichat.prototype.getJSONMessage = function(pseudo, message) { + var repondA = []; + objectEach(this.conversations.messagesRepond, function(id) { + repondA.push(parseInt(id, 10)); + }); return { "header" : { "action" : "put_message", "version" : euphorik.conf.versionProtocole }, @@ -198,87 +205,74 @@ PageMinichat.prototype.getJSONMessage = function(pseudo, message) "nick" : pseudo, "content" : message, "answer_to" : repondA - } -} + }; +}; -PageMinichat.prototype.envoyerMessage = function(pseudo, message) -{ - var thisPageMinichat = this +euphorik.PageMinichat.prototype.envoyerMessage = function(pseudo, message) { + var thisPageMinichat = this; // (un pseudo vide est autorisé) - pseudo = this.formateur.filtrerInputPseudo(pseudo) + pseudo = this.formateur.filtrerInputPseudo(pseudo); - if (pseudo === euphorik.conf.nickDefaut) - { - this.util.messageDialogue("Le pseudo ne peut pas être " + euphorik.conf.nickDefaut) - return + if (pseudo === euphorik.conf.nickDefaut) { + this.util.messageDialogue("Le pseudo ne peut pas être " + euphorik.conf.nickDefaut); + return; } - - message = message.trim() - if (!message) - { - this.util.messageDialogue("Le message est vide") - return + + message = message.trim(); + if (!message) { + this.util.messageDialogue("Le message est vide"); + return; } - if (!this.client.authentifie()) - if (!this.client.enregistrement()) - { - this.util.messageDialogue("login impossible") - return - } + if (!this.client.authentifie()) { + if (!this.client.enregistrement()) { + this.util.messageDialogue("login impossible"); + return; + } + } - this.client.pseudo = pseudo + this.client.pseudo = pseudo; // évite le double post - if (this.envoieMessageEnCours) - { - this.util.messageDialogue("Message en cours d'envoie...") - return + if (this.envoieMessageEnCours) { + this.util.messageDialogue("Message en cours d'envoie..."); + return; } - this.envoieMessageEnCours = true + this.envoieMessageEnCours = true; - jQuery.ajax( - { - url : "request", - type: "POST", - data : this.util.jsonVersAction(this.getJSONMessage(pseudo, message)), - dataType : "json", - beforeSend : function(xmlHttpRequest) - { - // TODO : ça marche ça ?? - xmlHttpRequest.setRequestHeader("X-Requested-With", "") - }, - success : function(data, textStatus) - { - if(data["reply"] === "ok") - { - // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) TODO : ya mieux ? - for (var messId in thisPageMinichat.conversations.messagesRepond) - { - for (var j = 0; j < thisPageMinichat.conversations.conversations.length; j++) - { - var mess = thisPageMinichat.conversations.conversations[j].messagesParId[messId] - if (mess != undefined) - mess.clientARepondu = true + jQuery.ajax({ + url : "request", + type: "POST", + data : this.util.jsonVersAction(this.getJSONMessage(pseudo, message)), + dataType : "json", + beforeSend : function(xmlHttpRequest) { + // TODO : ça marche ça ?? + xmlHttpRequest.setRequestHeader("X-Requested-With", ""); + }, + success : function(data, textStatus) { + if(data.reply === "ok") { + // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) TODO : ya mieux ? + objectEach(thisPageMinichat.conversations.messagesRepond, function(messId) { + thisPageMinichat.conversations.conversations.each(function(i, conv) { + var mess = conv.messagesParId[messId]; + if (!mess) { + mess.clientARepondu = true; } - // TODO : ca sert à qque chose ? - //$("#conversations div#" + thisPageMinichat.conversations.messagesRepond[messId].getId()).addClass("repondu") - } - - $("form input.message").val("") - thisPageMinichat.conversations.enleverMessagesRepond() - } - else if (data["reply"] === "error") - { - thisPageMinichat.util.messageDialogue(data["error_message"]) - } - thisPageMinichat.envoieMessageEnCours = false - }, - error : function() - { - thisPageMinichat.envoieMessageEnCours = false + }); + // TODO : ca sert à qque chose ? + //$("#conversations div#" + thisPageMinichat.conversations.messagesRepond[messId].getId()).addClass("repondu") + }); + + $("form#posterMessage input.message").val(""); + thisPageMinichat.conversations.enleverMessagesRepond(); + } else if (data.reply === "error") { + thisPageMinichat.util.messageDialogue(data.error_message); } + thisPageMinichat.envoieMessageEnCours = false; + }, + error : function() { + thisPageMinichat.envoieMessageEnCours = false; } - ) -} + }); +}; -- 2.43.0