All pastes #756850 Raw Edit

Miscellany

public javascript v1 · immutable
#756850 ·published 2007-10-31 19:54 UTC
rendered paste body
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));	}});