summaryrefslogtreecommitdiffstatshomepage
path: root/includes/js/dijit/demos/chat/room.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dijit/demos/chat/room.js')
-rw-r--r--includes/js/dijit/demos/chat/room.js127
1 files changed, 127 insertions, 0 deletions
diff --git a/includes/js/dijit/demos/chat/room.js b/includes/js/dijit/demos/chat/room.js
new file mode 100644
index 0000000..b1847f4
--- /dev/null
+++ b/includes/js/dijit/demos/chat/room.js
@@ -0,0 +1,127 @@
+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 mode
+ this.joining.className='';
+ this.joined.className='hidden';
+ this.username.focus();
+ this._username=null;
+ },
+
+ chat: function(text){
+ // summary: publish a text message to the room
+ if(text != null && text.length>0){
+ // lame attempt to prevent markup
+ text=text.replace(/</g,'&lt;');
+ text=text.replace(/>/g,'&gt;');
+ dojox.cometd.publish("/chat/demo/" + this.roomId, { user: this._username, chat: text});
+ }
+ },
+
+ _chat: function(message){
+ // summary: process an incoming message
+ if (!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+"&nbsp;</span><span class=\"text\">"+text+"</span></span><br/>";
+ this._last="";
+ }else{
+ this.chatNode.innerHTML += "<span class=\"from\">"+from+"&nbsp;</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='';
+ }
+ }
+});
+
+}