Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dijit.demos.chat.room"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dijit.demos.chat.room"] = true;dojo.provide("dijit.demos.chat.room");dojo.require("dojox.cometd");dojo.require("dijit._Widget");dojo.require("dijit._Templated");dojo.declare("dijit.demos.chat.Room",[dijit._Widget,dijit._Templated],{_last: "",_username: null,roomId: "public",isPrivate: false,prompt: "Name:",templateString: '<div id="${id}" class="chatroom">'+'<div dojoAttachPoint="chatNode" class="chat"></div>'+'<div dojoAttachPoint="input" class="input">'+'<div dojoAttachPoint="joining">'+'<span>${prompt}</span><input class="username" dojoAttachPoint="username" type="text" dojoAttachEvent="onkeyup: _join"> <input dojoAttachPoint="joinB" class="button" type="submit" name="join" value="Contact" dojoAttachEvent="onclick: _join"/>'+'</div>'+'<div dojoAttachPoint="joined" class="hidden">'+'<input type="text" class="phrase" dojoAttachPoint="phrase" dojoAttachEvent="onkeyup: _cleanInput" />'+'<input type="submit" class="button" value="Send" dojoAttachPoint="sendB" dojoAttachEvent="onclick: _sendPhrase"/>'+'</div>'+'</div>'+'</div>',join: function(name){if(name == null || name.length==0){alert('Please enter a username!');}else{if(this.isPrivate){ this.roomId = name; }this._username=name;this.joining.className='hidden';this.joined.className='';this.phrase.focus();console.log(this.roomId);dojox.cometd.subscribe("/chat/demo/" + this.roomId, this, "_chat");dojox.cometd.publish("/chat/demo/" + this.roomId, { user: this._username, join: true, chat : this._username+" has joined the room."});dojox.cometd.publish("/chat/demo", { user: this._username, joined: this.roomId });}},_join: function(/* Event */e){var key = (e.charCode == dojo.keys.SPACE ? dojo.keys.SPACE : e.keyCode);if (key == dojo.keys.ENTER || e.type=="click"){this.join(this.username.value);}},leave: function(){dojox.cometd.unsubscribe("/chat/demo/" + this.roomId, this, "_chat");dojox.cometd.publish("/chat/demo/" + this.roomId, { user: this._username, leave: true, chat : this._username+" has left the chat."});// switch the input form back to login modethis.joining.className='';this.joined.className='hidden';this.username.focus();this._username=null;},chat: function(text){// summary: publish a text message to the roomif(text != null && text.length>0){// lame attempt to prevent markuptext=text.replace(/</g,'<');text=text.replace(/>/g,'>');dojox.cometd.publish("/chat/demo/" + this.roomId, { user: this._username, chat: text});}},_chat: function(message){// summary: process an incoming messageif (!message.data){console.warn("bad message format "+message);return;}var from=message.data.user;var special=message.data.join || message.data.leave;var text=message.data.chat;if(text!=null){if(!special && from == this._last ){ from="...";}else{this._last=from;from+=":";}if(special){this.chatNode.innerHTML += "<span class=\"alert\"><span class=\"from\">"+from+" </span><span class=\"text\">"+text+"</span></span><br/>";this._last="";}else{this.chatNode.innerHTML += "<span class=\"from\">"+from+" </span><span class=\"text\">"+text+"</span><br/>";this.chatNode.scrollTop = this.chatNode.scrollHeight - this.chatNode.clientHeight;}}},startup: function(){this.joining.className='';this.joined.className='hidden';//this.username.focus();this.username.setAttribute("autocomplete","OFF");if (this.registeredAs) { this.join(this.registeredAs); }this.inherited("startup",arguments);},_cleanInput: function(/* Event */e){var key = (e.charCode == dojo.keys.SPACE ? dojo.keys.SPACE : e.keyCode);if(key == dojo.keys.ENTER || key == 13){this.chat(this.phrase.value);this.phrase.value='';}},_sendPhrase: function(/* Event */e){if (this.phrase.value){this.chat(this.phrase.value);this.phrase.value='';}}});}