Mercurial > cosocket
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 |
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 | 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 | 97 $(window).ready( |
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 | 130 $('#outgoing-message').focus(); |
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 | 135 var content = $(this).val(); |
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 | 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 | 143 if (author) |
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 | 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 }); |