Mercurial > cosocket
annotate media/js/openwebchat.js @ 78:0effc4481d18
refactored display code a bit
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Thu, 30 Apr 2009 18:15:32 -0700 |
parents | 1c99c08d2a54 |
children | 91f31d2030b9 |
rev | line source |
---|---|
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
1 var OpenWebStorage = { |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
2 UnsupportedError: function UnsupportedError() {}, |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
3 |
70
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
4 FakeStorage: function FakeStorage() { |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
5 var contents = {}; |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
6 |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
7 function deepCopy(obj) { |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
8 return JSON.parse(JSON.stringify(obj)); |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
9 } |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
10 |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
11 this.set = function set(key, value) { |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
12 contents[key] = deepCopy(value); |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
13 }; |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
14 |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
15 this.get = function get(key, defaultValue) { |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
16 if (key in contents) |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
17 return deepCopy(contents[key]); |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
18 return defaultValue; |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
19 }; |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
20 }, |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
21 |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
22 DOMLocalStorage: function DOMLocalStorage() { |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
23 var self = this; |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
24 var localStorage = window.localStorage; |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
25 |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
26 if (window.globalStorage) |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
27 localStorage = window.globalStorage[document.location.hostname]; |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
28 |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
29 if (!localStorage) |
70
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
30 throw new OpenWebStorage.UnsupportedError('no local DOM storage'); |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
31 |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
32 self.set = function set(key, value) { |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
33 localStorage[key] = JSON.stringify(value); |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
34 }; |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
35 |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
36 self.get = function get(key, defaultValue) { |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
37 var value = defaultValue; |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
38 |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
39 if (localStorage[key]) |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
40 try { |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
41 value = JSON.parse(localStorage[key].value); |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
42 } catch (e) {} |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
43 |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
44 return value; |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
45 }; |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
46 } |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
47 }; |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
48 |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
49 var OpenWebChat = { |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
50 ClientStorage: function ClientStorage(owStorage, prefix) { |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
51 var self = this; |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
52 self.length = owStorage.get(prefix + 'length', 0); |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
53 |
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
54 self.get = function get(id) { |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
55 return owStorage.get(prefix + id); |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
56 }; |
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
57 |
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
58 self.append = function append(msg) { |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
59 owStorage.set(prefix + self.length, msg); |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
60 self.length += 1; |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
61 owStorage.set(prefix + 'length', self.length); |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
62 }; |
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
63 }, |
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
64 |
68
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
65 SEND_TIMEOUT: 10000, |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
66 |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
67 LISTEN_TIMEOUT: 60000, |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
68 |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
69 listenForMessages: function listenForMessages(options) { |
64
559c48a58254
Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
70 var self = this; |
68
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
71 |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
72 function processMessage(msg) { |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
73 options.storage.append(msg); |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
74 options.onMessage(msg); |
64
559c48a58254
Added the option to long poll instead of using mime multipart.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
75 } |
68
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
76 |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
77 jQuery.ajax( |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
78 {type: 'GET', |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
79 url: 'listen', |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
80 data: {start: options.storage.length}, |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
81 dataType: 'json', |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
82 timeout: self.LISTEN_TIMEOUT, |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
83 error: function(xhr, textStatus, errorThrown) { |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
84 if (textStatus == "timeout") |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
85 // Start another long poll. |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
86 self.listenForMessages(options); |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
87 else |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
88 options.onError([textStatus, errorThrown]); |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
89 }, |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
90 success: function(data, textStatus) { |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
91 // TODO: Make sure data.messages is an array. |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
92 for (var i = 0; i < data.messages.length; i++) |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
93 processMessage(data.messages[i]); |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
94 // Start another long poll. |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
95 self.listenForMessages(options); |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
96 } |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
97 }); |
33
8146a59c8045
Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents:
26
diff
changeset
|
98 }, |
8146a59c8045
Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents:
26
diff
changeset
|
99 |
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
|
100 sendMessage: function sendMessage(options) { |
68
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
101 jQuery.ajax( |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
102 {type: 'POST', |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
103 url: 'send', |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
104 contentType: 'application/json', |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
105 data: JSON.stringify(options.message), |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
106 processData: false, |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
107 timeout: this.LISTEN_TIMEOUT, |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
108 error: function(xhr, textStatus, errorThrown) { |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
109 options.onError([textStatus, errorThrown]); |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
110 } |
84bf6a3ac4ec
All XMLHttpRequest actions are now handled by jquery, which should help with error detection a lot, and long polling logic is much better now. mime multipart is disabled for the time being.
Atul Varma <varmaa@toolness.com>
parents:
64
diff
changeset
|
111 }); |
33
8146a59c8045
Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents:
26
diff
changeset
|
112 } |
8146a59c8045
Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents:
26
diff
changeset
|
113 }; |
8146a59c8045
Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents:
26
diff
changeset
|
114 |
26 | 115 $(window).ready( |
116 function() { | |
33
8146a59c8045
Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents:
26
diff
changeset
|
117 var ENTER_KEYCODE = 13; |
72
923709d7434f
We now work on the iphone, albeit not very well.
Atul Varma <varmaa@toolness.com>
parents:
71
diff
changeset
|
118 var RETURN_KEYCODE = 10; |
923709d7434f
We now work on the iphone, albeit not very well.
Atul Varma <varmaa@toolness.com>
parents:
71
diff
changeset
|
119 |
70
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
120 var owStorage; |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
121 |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
122 try { |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
123 owStorage = new OpenWebStorage.DOMLocalStorage(); |
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
124 } catch (e) { |
71 | 125 if (e instanceof OpenWebStorage.UnsupportedError) |
126 owStorage = new OpenWebStorage.FakeStorage(); | |
127 else | |
128 throw e; | |
70
91767ca52ca9
Added support for safari via a new FakeStorage class (in the future we can make one that draws from sqlite).
Atul Varma <varmaa@toolness.com>
parents:
69
diff
changeset
|
129 } |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
130 |
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
131 var convStorage = new OpenWebChat.ClientStorage( |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
132 owStorage, |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
133 '/conv' + document.location.pathname |
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
134 ); |
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
135 |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
136 $('#name').val(owStorage.get('name', "A Mysterious Stranger")); |
50
f78b986ecb6e
OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents:
49
diff
changeset
|
137 $('#name').blur( |
f78b986ecb6e
OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents:
49
diff
changeset
|
138 function() { |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
139 owStorage.set('name', $(this).val()); |
52
3071f85fb694
Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents:
50
diff
changeset
|
140 }); |
3071f85fb694
Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents:
50
diff
changeset
|
141 |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
142 $('#outgoing-message').val(owStorage.get('lastMessage', '')); |
52
3071f85fb694
Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents:
50
diff
changeset
|
143 $('#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
|
144 function() { |
3071f85fb694
Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents:
50
diff
changeset
|
145 if ($(this).val()) |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
146 owStorage.set('lastMessage', $(this).val()); |
50
f78b986ecb6e
OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents:
49
diff
changeset
|
147 }); |
f78b986ecb6e
OWC now remembers your name.
Atul Varma <varmaa@toolness.com>
parents:
49
diff
changeset
|
148 |
34 | 149 $('#outgoing-message').focus(); |
150 | |
77
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
151 function onKey(evt) { |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
152 var self = this; |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
153 var content = $(this).val(); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
154 var author = $('#name').val(); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
155 if (evt.keyCode == ENTER_KEYCODE || |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
156 evt.keyCode == RETURN_KEYCODE) { |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
157 if (content) { |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
158 owStorage.set('lastMessage', content); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
159 $(this).val(''); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
160 var msg = {content: content, |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
161 time: new Date()}; |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
162 if (author) |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
163 msg.author = author; |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
164 OpenWebChat.sendMessage( |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
165 {message: msg, |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
166 onError: function(exception) { |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
167 $(self).val(content); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
168 } |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
169 }); |
33
8146a59c8045
Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents:
26
diff
changeset
|
170 } |
77
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
171 evt.preventDefault(); |
72
923709d7434f
We now work on the iphone, albeit not very well.
Atul Varma <varmaa@toolness.com>
parents:
71
diff
changeset
|
172 } |
77
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
173 } |
72
923709d7434f
We now work on the iphone, albeit not very well.
Atul Varma <varmaa@toolness.com>
parents:
71
diff
changeset
|
174 |
923709d7434f
We now work on the iphone, albeit not very well.
Atul Varma <varmaa@toolness.com>
parents:
71
diff
changeset
|
175 $('#outgoing-message').keydown(onKey); |
923709d7434f
We now work on the iphone, albeit not very well.
Atul Varma <varmaa@toolness.com>
parents:
71
diff
changeset
|
176 $('#outgoing-message').keyup(onKey); |
33
8146a59c8045
Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents:
26
diff
changeset
|
177 |
77
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
178 function scrollToBottom() { |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
179 window.scrollTo(0, $('#bottom').position().top); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
180 } |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
181 |
78
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
182 function msg2dom(msg) { |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
183 var message = $('<div class="message"></div>'); |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
184 message.append('<div class="author"></div>'); |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
185 message.append('<div class="timestamp"></div>'); |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
186 message.append('<div class="content"></div>'); |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
187 message.append('<div class="raw-content"></div>'); |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
188 |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
189 $('.content', message).html(msg.content); |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
190 $('.raw-content', message).text(msg.content); |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
191 |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
192 $('.author', message).text(msg.author); |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
193 $('.timestamp', message).text(msg.time); |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
194 |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
195 return message; |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
196 } |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
197 |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
198 var lastAuthor; |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
199 |
75
fb25fead3374
displaying long conversations shouldn't be as jerky now.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
200 function onMessage(msg, doAnimation) { |
fb25fead3374
displaying long conversations shouldn't be as jerky now.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
201 if (typeof(doAnimation) == "undefined") |
fb25fead3374
displaying long conversations shouldn't be as jerky now.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
202 doAnimation = true; |
fb25fead3374
displaying long conversations shouldn't be as jerky now.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
203 |
69
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
204 if (owStorage.get('lastMessage') == msg.content) |
9004f7daf4c4
Abstracted away localStorage into a generic storage interface to make this easier to port to other browsers.
Atul Varma <varmaa@toolness.com>
parents:
68
diff
changeset
|
205 owStorage.set('lastMessage', ''); |
38
5fea1533e8ff
Added dynamic detection of HTML.
Atul Varma <varmaa@toolness.com>
parents:
34
diff
changeset
|
206 |
78
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
207 var message = msg2dom(msg); |
52
3071f85fb694
Last-message content is now saved if the user loses their connection, etc.
Atul Varma <varmaa@toolness.com>
parents:
50
diff
changeset
|
208 |
78
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
209 if (msg.author == lastAuthor) |
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
210 $('.author', message).hide(); |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
211 else |
78
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
212 lastAuthor = msg.author; |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
213 |
77
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
214 if (doAnimation) |
78
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
215 message.hide(); |
77
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
216 |
78
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
217 $('#incoming-messages').append(message); |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
218 |
77
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
219 if (doAnimation) |
78
0effc4481d18
refactored display code a bit
Atul Varma <varmaa@toolness.com>
parents:
77
diff
changeset
|
220 message.slideDown(scrollToBottom); |
62
b7b9932823e4
We now store conversations in local/globalStorage.
Atul Varma <varmaa@toolness.com>
parents:
61
diff
changeset
|
221 } |
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
|
222 |
77
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
223 $('#incoming-messages').hide(); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
224 |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
225 for (var i = 0; i < convStorage.length; i++) |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
226 onMessage(convStorage.get(i), false); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
227 |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
228 $('#incoming-messages').slideDown(); |
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
|
229 |
77
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
230 OpenWebChat.listenForMessages( |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
231 {storage: convStorage, |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
232 onMessage: onMessage, |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
233 onError: function onError(exception) { |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
234 if (window.console) |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
235 window.console.log('The error', exception, 'occurred.'); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
236 var error = $('#templates .error').clone(); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
237 error.hide(); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
238 $('#incoming-messages').append(error); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
239 error.slideDown(); |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
240 } |
1c99c08d2a54
Sort of simplified message display a bit
Atul Varma <varmaa@toolness.com>
parents:
76
diff
changeset
|
241 }); |
33
8146a59c8045
Added basic 'chat' functionality.
Atul Varma <varmaa@toolness.com>
parents:
26
diff
changeset
|
242 }); |