annotate openwebchat.js @ 64:559c48a58254

Added the option to long poll instead of using mime multipart.
author Atul Varma <varmaa@toolness.com>
date Thu, 30 Apr 2009 06:42:13 -0700
parents b7b9932823e4
children 84bf6a3ac4ec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
1 var OpenWebChat = {
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
2 ClientStorage: function ClientStorage(localStorage, prefix) {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
3 var self = this;
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
4 if (!localStorage[prefix + 'length'])
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
5 localStorage[prefix + 'length'] = '0';
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
6
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
7 self.length = Number(localStorage[prefix + 'length'].value);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
8
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
9 self.get = function get(id) {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
10 return JSON.parse(localStorage[prefix + id].value);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
11 };
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
12
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
13 self.append = function append(msg) {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
14 localStorage[prefix + self.length] = JSON.stringify(msg);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
15 self.length += 1;
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
16 localStorage[prefix + 'length'] = self.length.toString();
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
17 };
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
18
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
19 self.wipe = function wipe() {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
20 var names = [];
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
21 for (name in localStorage)
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
22 names.push(name);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
23 names.forEach(
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
24 function(name) {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
25 if (name.indexOf(prefix) == 0)
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
26 delete localStorage[name];
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
27 });
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
28 };
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
29 },
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
30
45
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
31 startMessageListener: function startMessageListener(options) {
64
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
32 var self = this;
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
33 var req = new XMLHttpRequest();
64
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
34 var basePath = 'listen';
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
35 if (options.useMultipart) {
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
36 req.multipart = true;
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
37 basePath += '/multipart';
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
38 }
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
39 req.open('GET',
64
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
40 basePath + '?start=' + options.storage.length,
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
41 true);
34
10fcf63961d8 More misc. changes.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
42 req.overrideMimeType('application/json');
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
43 req.addEventListener(
45
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
44 "error",
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
45 function() {
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
46 options.onError(null);
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
47 },
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
48 false
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
49 );
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
50 req.addEventListener(
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
51 "load",
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
52 function onload(evt) {
64
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
53 var data;
45
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
54 var errorOccurred = false;
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
55 try {
64
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
56 data = JSON.parse(req.responseText);
45
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
57 } catch (e) {
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
58 options.onError(e);
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
59 errorOccurred = true;
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
60 }
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
61 if (!errorOccurred) {
64
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
62 function processMessage(msg) {
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
63 options.storage.append(msg);
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
64 options.onMessage(msg);
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
65 }
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
66 if (options.useMultipart)
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
67 processMessage(data);
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
68 else {
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
69 // TODO: Make sure data.messages is an array.
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
70 for (var i = 0; i < data.messages.length; i++)
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
71 processMessage(data.messages[i]);
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
72 // Start another long poll.
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
73 self.startMessageListener(options);
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
74 }
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
75 }
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
76 },
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
77 false
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
78 );
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
79 req.send(null);
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
80 },
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
81
53
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
82 sendMessage: function sendMessage(options) {
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
83 var req = new XMLHttpRequest();
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
84 req.open('POST', 'send', true);
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
85 req.overrideMimeType('application/json');
53
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
86 req.addEventListener(
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
87 "error",
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
88 function() {
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
89 options.onError(null);
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
90 },
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
91 false
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
92 );
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
93 req.send(JSON.stringify(options.message));
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
94 }
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
95 };
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
96
26
4a4b66f5229b Added open web chat module.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
97 $(window).ready(
4a4b66f5229b Added open web chat module.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
98 function() {
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
99 var ENTER_KEYCODE = 13;
49
4e21d301ea27 Added a cap on the max num of messages that can be animating at once, so that browsers don't get overloaded.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
100 var MAX_ANIMATING_MESSAGES = 3;
4e21d301ea27 Added a cap on the max num of messages that can be animating at once, so that browsers don't get overloaded.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
101
4e21d301ea27 Added a cap on the max num of messages that can be animating at once, so that browsers don't get overloaded.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
102 var animatingMessages = 0;
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
103
50
f78b986ecb6e OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents: 49
diff changeset
104 var localStorage = globalStorage[document.location.hostname];
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
105
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
106 var convStorage = new OpenWebChat.ClientStorage(
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
107 localStorage,
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
108 '/conv' + document.location.pathname
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
109 );
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
110
50
f78b986ecb6e OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents: 49
diff changeset
111 if (!localStorage.name)
f78b986ecb6e OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents: 49
diff changeset
112 localStorage.name = "A Mysterious Stranger";
f78b986ecb6e OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents: 49
diff changeset
113
52
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
114 if (!localStorage.lastMessage)
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
115 localStorage.lastMessage = "";
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
116
50
f78b986ecb6e OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents: 49
diff changeset
117 $('#name').val(localStorage.name.value);
f78b986ecb6e OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents: 49
diff changeset
118 $('#name').blur(
f78b986ecb6e OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents: 49
diff changeset
119 function() {
52
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
120 localStorage.name = $(this).val();
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
121 });
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
122
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
123 $('#outgoing-message').val(localStorage.lastMessage.value);
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
124 $('#outgoing-message').blur(
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
125 function() {
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
126 if ($(this).val())
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
127 localStorage.lastMessage = $(this).val();
50
f78b986ecb6e OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents: 49
diff changeset
128 });
f78b986ecb6e OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents: 49
diff changeset
129
34
10fcf63961d8 More misc. changes.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
130 $('#outgoing-message').focus();
10fcf63961d8 More misc. changes.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
131
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
132 $('#outgoing-message').keydown(
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
133 function(evt) {
53
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
134 var self = this;
39
882b75e96c17 Added name functionality.
Atul Varma <varmaa@toolness.com>
parents: 38
diff changeset
135 var content = $(this).val();
882b75e96c17 Added name functionality.
Atul Varma <varmaa@toolness.com>
parents: 38
diff changeset
136 var author = $('#name').val();
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
137 if (evt.keyCode == ENTER_KEYCODE) {
39
882b75e96c17 Added name functionality.
Atul Varma <varmaa@toolness.com>
parents: 38
diff changeset
138 if (content) {
52
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
139 localStorage.lastMessage = content;
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
140 $(this).val('');
40
11c4fb8bec3c Added timestamp to messages, though they're not currently displayed in any way.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
141 var msg = {content: content,
11c4fb8bec3c Added timestamp to messages, though they're not currently displayed in any way.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
142 time: new Date()};
39
882b75e96c17 Added name functionality.
Atul Varma <varmaa@toolness.com>
parents: 38
diff changeset
143 if (author)
882b75e96c17 Added name functionality.
Atul Varma <varmaa@toolness.com>
parents: 38
diff changeset
144 msg.author = author;
53
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
145 OpenWebChat.sendMessage(
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
146 {message: msg,
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
147 onError: function(exception) {
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
148 $(self).val(content);
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
149 }
67ec969d4f0d If the sending of a message fails, the content is put back into the text field.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
150 });
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
151 }
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
152 evt.preventDefault();
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
153 }
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
154 });
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
155
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
156 function onMessage(msg) {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
157 var block = $('#templates .message').clone();
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
158
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
159 if (localStorage.lastMessage.value == msg.content)
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
160 localStorage.lastMessage = "";
38
5fea1533e8ff Added dynamic detection of HTML.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
161
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
162 $('.content', block).html(msg.content);
52
3071f85fb694 Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents: 50
diff changeset
163
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
164 var author = msg.author ? msg.author : 'Anonymous';
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
165 if (author != $('#content .author:last').text())
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
166 $('.author', block).text(author);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
167 else
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
168 $('.author', block).remove();
39
882b75e96c17 Added name functionality.
Atul Varma <varmaa@toolness.com>
parents: 38
diff changeset
169
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
170 $('.timestamp', block).text(msg.time);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
171
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
172 block.hide();
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
173 $('#incoming-messages').append(block);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
174
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
175 if (animatingMessages < MAX_ANIMATING_MESSAGES) {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
176 animatingMessages += 1;
45
27785e0ac4d8 Added error detection on the client-side.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
177
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
178 block.slideDown(
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
179 function() {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
180 animatingMessages -= 1;
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
181 window.scrollTo(0, $('#bottom').position().top);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
182 });
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
183 } else
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
184 block.show();
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
185 }
49
4e21d301ea27 Added a cap on the max num of messages that can be animating at once, so that browsers don't get overloaded.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
186
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
187 var currStoredMessage = 0;
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
188 var CHUNK_SIZE = 20;
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
189 var UI_BREATHE_TIME = 10;
49
4e21d301ea27 Added a cap on the max num of messages that can be animating at once, so that browsers don't get overloaded.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
190
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
191 function showStoredConversation() {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
192 if (currStoredMessage < convStorage.length) {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
193 var i = 0;
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
194 while (i < CHUNK_SIZE && currStoredMessage < convStorage.length) {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
195 onMessage(convStorage.get(currStoredMessage));
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
196 currStoredMessage += 1;
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
197 i += 1;
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
198 }
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
199 window.setTimeout(showStoredConversation, UI_BREATHE_TIME);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
200 } else
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
201 OpenWebChat.startMessageListener(
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
202 {storage: convStorage,
64
559c48a58254 Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
203 useMultipart: false,
62
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
204 onMessage: onMessage,
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
205 onError: function onError(exception) {
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
206 if (window.console)
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
207 window.console.log('The error', exception, 'occurred.');
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
208 var error = $('#templates .error').clone();
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
209 error.hide();
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
210 $('#incoming-messages').append(error);
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
211 error.slideDown();
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
212 }
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
213 });
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
214 }
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
215
b7b9932823e4 We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
216 showStoredConversation();
33
8146a59c8045 Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents: 26
diff changeset
217 });