Chat = Class.create();Object.extend(Chat.prototype, { //------------------------------------------------------ CONSTRUCTEURS --// initialize : function() { this.lastUpdate = 0; // Crée la liste des messages et la zone de rédaction d'un message this.messages = document.createElement('div'); this.messages.className = 'chat'; this.messagesPane = new Panel(); this.messagesPane.addHTMLElement(this.messages); this.messagesPane.setSize(400, 400); this.writeMessage = new TextField(); this.writeMessage.setWidth(312); this.writeMessage.setMaxLength(80); var sendMessage = new Button('Envoyer'); sendMessage.setWidth(80); // Listener envoyant le message lorsque la touche entrée est appuyée // sur le champ texte Event.observe(this.writeMessage.getComponent(), 'keydown', function(event) { var keyCode = event.keyCode ? event.keyCode : event.charCode; var type = event.type.toLowerCase(); if (type == 'keydown' && (keyCode == 3 || keyCode == 13)) this._sendMessage(); }.bind(this)); sendMessage.addActionListener(this._sendMessage.bind(this)); // Mise en forme des composants du chat var layout = new RowLayout(); layout.addComponent(this.messagesPane); layout.addRow(); layout.addComponent(this.writeMessage); layout.addComponent(sendMessage); // Fenêtre de chat this.dialog = new Dialog('Chat', false, true, true); this.dialog.addDialogClosedListener(function() { this.lastUpdate = 0; clearTimeout(this.timer); }.bind(this)); this.dialog.setComponent(layout); this.dialog.centerOnScreen(); this.dialog.addDialogClosedListener(function() { // Détruit la iframe quand la fenêtre est fermée this.messages.innerHTML = ''; }.bind(this)); }, //----------------------------------------------------------- METHODES --// /** * Affiche la fenêtre de chat et lance la réception des messages à * intervalles réguliers. La réception est stoppé quand l'utilisateur ferme * la fenêtre. */ setDialogVisible : function(visible) { if (visible) { if (this.dialog.isVisible()) { this.dialog.focus(); this.writeMessage.focus(); return; } this.messages.innerHTML = '<iframe src="' + serverURL + 'action/chat/chat.php" style="width: 400px; height: 400px;" frameborder="0"></iframe>'; this.dialog.setVisible(true); this.writeMessage.focus(); } else { this.dialog.setVisible(false); this.messages.innerHTML = ''; } }, addDialogClosedListener : function(listener) { this.dialog.addDialogClosedListener(listener); }, //--------------------------------------------------- METHODES PRIVEES --// /** * Affiche le contenu de la zone de rédaction de message et envoie au * serveur, si un message a été écrit. */ _sendMessage : function() { if (this.sendingAction && this.sendingAction.downloading) return; var text = this.writeMessage.getText(); if (text) this.sendingAction = new Action('chat/addmessage', 'message=' + encodeURIComponent(text), function() { this.writeMessage.setText(''); }.bind(this)); }});