social_stream-presence 0.13.1 → 0.13.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. data/app/assets/javascripts/jquery.flexselect.sstreampresence.js +2 -2
  2. data/app/assets/javascripts/jquery.ui.chatbox.sstreampresence.js +5 -5
  3. data/app/assets/javascripts/presence.js.erb +6 -4
  4. data/app/assets/javascripts/presence_XmppClient.js.erb +1136 -996
  5. data/app/assets/javascripts/presence_audio.js.erb +74 -60
  6. data/app/assets/javascripts/presence_game.js.erb +35 -22
  7. data/app/assets/javascripts/presence_game_comunication.js.erb +22 -5
  8. data/app/assets/javascripts/presence_game_factory.js.erb +1 -1
  9. data/app/assets/javascripts/presence_game_interface.js.erb +33 -13
  10. data/app/assets/javascripts/presence_notifications.js +206 -183
  11. data/app/assets/javascripts/presence_parser.js +265 -247
  12. data/app/assets/javascripts/presence_persistence.js +199 -188
  13. data/app/assets/javascripts/presence_store.js +22 -11
  14. data/app/assets/javascripts/presence_uiManager.js.erb +553 -530
  15. data/app/assets/javascripts/presence_utilities.js +244 -219
  16. data/app/assets/javascripts/presence_videochat.js.erb +436 -409
  17. data/app/assets/javascripts/presence_windowManager.js +586 -532
  18. data/app/views/chat/_index.html.erb +7 -13
  19. data/config/locales/en.yml +2 -1
  20. data/config/locales/es.yml +2 -1
  21. data/ejabberd/ejabberd_files.zip +0 -0
  22. data/ejabberd/ejabberd_scripts/authentication_script +9 -2
  23. data/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
  24. data/lib/generators/social_stream/presence/templates/initializer.rb +4 -0
  25. data/lib/social_stream/presence/version.rb +1 -1
  26. data/lib/social_stream/presence/xmpp_server_order.rb +1 -0
  27. data/lib/social_stream-presence.rb +3 -0
  28. metadata +68 -63
@@ -1,257 +1,275 @@
1
1
  ////////////////////
2
- //Hash table
2
+ //Social Stream Presence: Parser module
3
3
  ////////////////////
4
- var chatIcons = new Array();
5
- chatIcons[':)'] = "face-smile.png";
6
- chatIcons[':('] = "face-sad.png";
7
- chatIcons['(B)'] = "beer.png";
8
- chatIcons['(C)'] = "clock.png";
9
- chatIcons['(P)'] = "present.png";
10
- chatIcons[':P']= "face-raspberry.png";
11
- chatIcons[':Z']= "face-tired.png";
12
- chatIcons['(R)']= "rain.png";
13
- chatIcons['(S)']= "sun.png";
14
- chatIcons[';)']= "face-wink.png";
15
4
 
16
- ///////////////////////////////////////////////////////
17
- // Parser functions
18
- // Allow new features in chat msg like links, images, emoticons, ...
19
- ///////////////////////////////////////////////////////
5
+ PRESENCE.PARSER = (function(P,$,undefined){
20
6
 
21
- //Patterns
22
- var html_tag_pattern=/.*\<[^>]+>.*/g
23
- var simple_word_pattern=/^[aA-zZ0-9]+$/g
24
- var http_urls_pattern=/(http(s)?:\/\/)([aA-zZ0-9%=_&+?])+([./-][aA-zZ0-9%=_&+?]+)*[/]?/g
25
- var www_urls_pattern = /(www[.])([aA-zZ0-9%=_&+?])+([./-][aA-zZ0-9%=_&+?]+)*[/]?/g
26
- var icons_a_pattern=/\([A-Z]\)/g
27
- var icons_b_pattern=/((:|;)([()A-Z]))/g
28
- var youtube_video_pattern=/(http(s)?:\/\/)?(((youtu.be\/)([aA-zZ0-9]+))|((www.youtube.com\/watch\?v=)([aA-z0-9Z&=.])+))/g
7
+ ////////////////////
8
+ //Hash table
9
+ ////////////////////
10
+ var chatIcons = new Array();
11
+ chatIcons[':)'] = "face-smile.png";
12
+ chatIcons[':('] = "face-sad.png";
13
+ chatIcons['(B)'] = "beer.png";
14
+ chatIcons['(C)'] = "clock.png";
15
+ chatIcons['(P)'] = "present.png";
16
+ chatIcons[':P']= "face-raspberry.png";
17
+ chatIcons[':Z']= "face-tired.png";
18
+ chatIcons['(R)']= "rain.png";
19
+ chatIcons['(S)']= "sun.png";
20
+ chatIcons[';)']= "face-wink.png";
29
21
 
22
+ var init = function(){ }
30
23
 
31
- function getParsedContent(content,fromUser){
32
- if (fromUser){
33
- var chatTextclass = "ownChatText"
34
- } else {
35
- var chatTextclass = "guestChatText"
36
- }
37
- return ("<span class=\"" + chatTextclass + "\">" + parseContent(content) + "</span>");
38
- }
39
-
40
-
41
- function parseContent(content){
42
-
43
- if (content.match(html_tag_pattern)!=null){
44
- content = content.replace(/>/g, "&gt;");
45
- content = content.replace(/</g, "&lt;");
46
- return "<pre>" + content + "</pre>"
47
- }
48
-
49
- var words = content.split(" ");
50
- for(i=0; i<words.length; i++){
51
- words[i] = parseWord(words[i]);
52
- }
53
-
54
- return words.join(" ");
55
- }
56
-
57
- function parseWord(word){
58
-
59
- //Look for empty or simple words
60
- if ((word.trim()=="")||(word.match(simple_word_pattern)!=null)){
61
- return word
62
- }
63
-
64
- //Look for http urls
65
- var http_urls = word.match(http_urls_pattern)
66
- if (http_urls!=null){
67
- var url = http_urls[0]
68
- var type = getUrlType(url);
69
-
70
- switch(type){
71
- case "link":
72
- var link = buildUrlLink(url,url)
73
- var subwords = splitFirst(word,url)
74
- return parseWord(subwords[0]) + link + parseWord(subwords[1])
75
- case "image":
76
- var imageLink = buildImageLink(url);
77
- var subwords = splitFirst(word,url)
78
- return parseWord(subwords[0]) + imageLink + parseWord(subwords[1])
79
- case "video-youtube":
80
- var youtubeLink = buildYoutubeVideoLink(url);
81
- var subwords = splitFirst(word,url)
82
- return parseWord(subwords[0]) + youtubeLink + parseWord(subwords[1])
83
- default:
84
- return word
85
- }
86
- }
87
-
88
-
89
- //Look for www urls
90
- var www_urls = word.match(www_urls_pattern)
91
- if (www_urls!=null){
92
- var url = www_urls[0]
93
- var type = getUrlType(url);
94
-
95
- switch(type){
96
- case "link":
97
- var link = buildUrlLink("http://" + url,url)
98
- var subwords = splitFirst(word,url)
99
- return parseWord(subwords[0]) + link + parseWord(subwords[1])
100
- case "image":
101
- var imageLink = buildImageLink("http://" + url);
102
- var subwords = splitFirst(word,url)
103
- return parseWord(subwords[0]) + imageLink + parseWord(subwords[1])
104
- case "video-youtube":
105
- var youtubeLink = buildYoutubeVideoLink("http://" + url);
106
- var subwords = splitFirst(word,url)
107
- return parseWord(subwords[0]) + youtubeLink + parseWord(subwords[1])
108
- default:
109
- return word
110
- }
111
- }
112
-
113
- //Look for icons: Regex
114
- var icons_a = word.match(icons_a_pattern)
115
- if(icons_a!=null){
116
- for(g=0; g<icons_a.length; g++){
117
- word = word.replace(buildRegex(icons_a[g]), buildIconImage(icons_a[g]))
118
- }
119
- }
120
-
121
- var icons_b = word.match(icons_b_pattern)
122
- if(icons_b!=null){
123
- for(h=0; h<icons_b.length; h++){
124
- word = word.replace(buildRegex(icons_b[h]), buildIconImage(icons_b[h]))
125
- }
126
- }
127
-
128
-
129
- //No special content detected (maybe emoticons but not special pattern like urls)
130
- return word
131
- }
132
-
133
- function splitFirst(word,key){
134
- var split=[]
135
- var cut = word.split(key);
136
- split[0]=cut[0]
137
- cut.shift()
138
- var paste = cut.join(key)
139
- split[1]=paste
140
- return split
141
- }
142
-
143
- function buildIconImage(icon){
144
- if (icon in chatIcons){
145
- var image_file = chatIcons[icon]
146
- return "<img class=\"chatEmoticon\" src=\"/assets/emoticons/" + image_file + "\"/>";
147
- }
148
- return icon
149
- }
150
-
151
- function buildUrlLink(url,name){
152
- return "<a target=\"_blank\" class=\"chatLink\" href=\"" + url + "\">" + name + "</a>";
153
- }
154
-
155
- function buildImageLink(url){
156
- return "<a target=\"_blank\" class=\"chatImageLink\" href=\"" + url + "\">" + "<img class=\"chatImage\" src=\"" + url + "\"/>" + "</a>";
157
- }
158
-
159
- function buildYoutubeVideoLink(url){
160
- //Get youtube video id
161
- var youtube_video_id=url.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0];
162
- var youtube_api_url = "http://gdata.youtube.com/feeds/api/videos/" + youtube_video_id
163
-
164
- //Get info from the video
165
- $.ajax({
166
- type: "GET",
167
- url: youtube_api_url,
168
- cache: false,
169
- dataType:'jsonp',
170
- success: function(data){
171
- var url_name = url;
172
- var youtube_video_thumbnail = "";
173
-
174
- //Video title
175
- var video_title = $(data).find("media\\:title")
176
- if (video_title.length > 0) {
177
- //url_name = url + " (" + $(video_title).text() + ")";
178
- url_name = $(video_title).text()
179
- }
180
-
181
- //Thumbnails
182
- var thumbnails = $(data).find("media\\:thumbnail")
183
- if (thumbnails.length>0){
184
- var thumbnail_url = $(thumbnails[0]).attr("url")
185
- if (thumbnail_url!=null){
186
- youtube_video_thumbnail = "<p><img class=\"chatVideoImage\" src=\"" + thumbnail_url + "\"/></p>";
187
- }
188
- }
189
-
190
- //Replace video link
191
- $("a[youtube_id=" + youtube_video_id + "]").html(buildUrlLink(url,url_name)+youtube_video_thumbnail);
192
- },
193
- error: function(xOptions, textStatus){
194
- //Handle errors
195
- }
196
- });
197
-
198
- return "<a target=\"_blank\" youtube_id=\"" + youtube_video_id + "\" class=\"chatLink\" href=\"" + url + "\">" + url + "</a>";
199
- }
200
-
201
- function buildRegex(word){
202
- word = word.replace(")","\\)")
203
- word = word.replace("(","\\(")
204
- var pattern = "(" + word + ")";
205
- pattern = buildPattern(pattern)
206
- return (new RegExp(pattern,'g'));
207
- }
208
24
 
209
- function buildPattern(pattern){
210
- //Escape pattern special characters
211
- pattern = pattern.replace("+","\\+")
212
- pattern = pattern.replace("?","\\?")
213
- return pattern
214
- }
215
-
216
-
217
- function getUrlType(url){
218
-
219
- if (url.match(youtube_video_pattern)!=null){
220
- return "video-youtube"
221
- }
222
-
223
- var urlArray = url.split(".");
224
- if (urlArray!=null && urlArray.length>0){
225
- var extension= urlArray[urlArray.length-1]
226
- } else {
227
- var extension = null;
228
- }
229
-
230
- switch(extension){
231
- case "jpg":
232
- return "image"
233
- break;
234
- case "png":
235
- return "image"
236
- break;
237
- case "gif":
238
- return "image"
239
- break;
240
- default:
241
- return "link"
242
- }
243
- }
25
+ ///////////////////////////////////////////////////////
26
+ // Parser functions
27
+ // Allow new features in chat msg like links, images, emoticons, ...
28
+ ///////////////////////////////////////////////////////
29
+
30
+ //Patterns
31
+ var html_tag_pattern=/.*\<[^>]+>.*/g
32
+ var simple_word_pattern=/^[aA-zZ0-9]+$/g
33
+ var http_urls_pattern=/(http(s)?:\/\/)([aA-zZ0-9%=_&+?])+([./-][aA-zZ0-9%=_&+?]+)*[/]?/g
34
+ var www_urls_pattern = /(www[.])([aA-zZ0-9%=_&+?])+([./-][aA-zZ0-9%=_&+?]+)*[/]?/g
35
+ var icons_a_pattern=/\([A-Z]\)/g
36
+ var icons_b_pattern=/((:|;)([()A-Z]))/g
37
+ var youtube_video_pattern=/(http(s)?:\/\/)?(((youtu.be\/)([aA-zZ0-9]+))|((www.youtube.com\/watch\?v=)([aA-z0-9Z&=.])+))/g
38
+
39
+
40
+ function getParsedContent(content,fromUser){
41
+ if (fromUser){
42
+ var chatTextclass = "ownChatText"
43
+ } else {
44
+ var chatTextclass = "guestChatText"
45
+ }
46
+ return ("<span class=\"" + chatTextclass + "\">" + parseContent(content) + "</span>");
47
+ }
48
+
49
+
50
+ function parseContent(content){
51
+
52
+ if (content.match(html_tag_pattern)!=null){
53
+ content = content.replace(/>/g, "&gt;");
54
+ content = content.replace(/</g, "&lt;");
55
+ return "<pre>" + content + "</pre>"
56
+ }
57
+
58
+ var words = content.split(" ");
59
+ for(i=0; i<words.length; i++){
60
+ words[i] = parseWord(words[i]);
61
+ }
62
+
63
+ return words.join(" ");
64
+ }
65
+
66
+ function parseWord(word){
67
+
68
+ //Look for empty or simple words
69
+ if ((word.trim()=="")||(word.match(simple_word_pattern)!=null)){
70
+ return word
71
+ }
72
+
73
+ //Look for http urls
74
+ var http_urls = word.match(http_urls_pattern)
75
+ if (http_urls!=null){
76
+ var url = http_urls[0]
77
+ var type = getUrlType(url);
78
+
79
+ switch(type){
80
+ case "link":
81
+ var link = buildUrlLink(url,url)
82
+ var subwords = splitFirst(word,url)
83
+ return parseWord(subwords[0]) + link + parseWord(subwords[1])
84
+ case "image":
85
+ var imageLink = buildImageLink(url);
86
+ var subwords = splitFirst(word,url)
87
+ return parseWord(subwords[0]) + imageLink + parseWord(subwords[1])
88
+ case "video-youtube":
89
+ var youtubeLink = buildYoutubeVideoLink(url);
90
+ var subwords = splitFirst(word,url)
91
+ return parseWord(subwords[0]) + youtubeLink + parseWord(subwords[1])
92
+ default:
93
+ return word
94
+ }
95
+ }
96
+
97
+
98
+ //Look for www urls
99
+ var www_urls = word.match(www_urls_pattern)
100
+ if (www_urls!=null){
101
+ var url = www_urls[0]
102
+ var type = getUrlType(url);
103
+
104
+ switch(type){
105
+ case "link":
106
+ var link = buildUrlLink("http://" + url,url)
107
+ var subwords = splitFirst(word,url)
108
+ return parseWord(subwords[0]) + link + parseWord(subwords[1])
109
+ case "image":
110
+ var imageLink = buildImageLink("http://" + url);
111
+ var subwords = splitFirst(word,url)
112
+ return parseWord(subwords[0]) + imageLink + parseWord(subwords[1])
113
+ case "video-youtube":
114
+ var youtubeLink = buildYoutubeVideoLink("http://" + url);
115
+ var subwords = splitFirst(word,url)
116
+ return parseWord(subwords[0]) + youtubeLink + parseWord(subwords[1])
117
+ default:
118
+ return word
119
+ }
120
+ }
121
+
122
+ //Look for icons: Regex
123
+ var icons_a = word.match(icons_a_pattern)
124
+ if(icons_a!=null){
125
+ for(g=0; g<icons_a.length; g++){
126
+ word = word.replace(buildRegex(icons_a[g]), buildIconImage(icons_a[g]))
127
+ }
128
+ }
129
+
130
+ var icons_b = word.match(icons_b_pattern)
131
+ if(icons_b!=null){
132
+ for(h=0; h<icons_b.length; h++){
133
+ word = word.replace(buildRegex(icons_b[h]), buildIconImage(icons_b[h]))
134
+ }
135
+ }
136
+
137
+
138
+ //No special content detected (maybe emoticons but not special pattern like urls)
139
+ return word
140
+ }
141
+
142
+ function splitFirst(word,key){
143
+ var split=[]
144
+ var cut = word.split(key);
145
+ split[0]=cut[0]
146
+ cut.shift()
147
+ var paste = cut.join(key)
148
+ split[1]=paste
149
+ return split
150
+ }
151
+
152
+ function buildIconImage(icon){
153
+ if (icon in chatIcons){
154
+ var image_file = chatIcons[icon]
155
+ return "<img class=\"chatEmoticon\" src=\"/assets/emoticons/" + image_file + "\"/>";
156
+ }
157
+ return icon
158
+ }
159
+
160
+ function buildUrlLink(url,name){
161
+ return "<a target=\"_blank\" class=\"chatLink\" href=\"" + url + "\">" + name + "</a>";
162
+ }
163
+
164
+ function buildImageLink(url){
165
+ return "<a target=\"_blank\" class=\"chatImageLink\" href=\"" + url + "\">" + "<img class=\"chatImage\" src=\"" + url + "\"/>" + "</a>";
166
+ }
167
+
168
+ function buildYoutubeVideoLink(url){
169
+ //Get youtube video id
170
+ var youtube_video_id=url.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0];
171
+ var youtube_api_url = "http://gdata.youtube.com/feeds/api/videos/" + youtube_video_id
172
+
173
+ //Get info from the video
174
+ $.ajax({
175
+ type: "GET",
176
+ url: youtube_api_url,
177
+ cache: false,
178
+ dataType:'jsonp',
179
+ success: function(data){
180
+ var url_name = url;
181
+ var youtube_video_thumbnail = "";
182
+
183
+ //Video title
184
+ var video_title = $(data).find("media\\:title")
185
+ if (video_title.length > 0) {
186
+ //url_name = url + " (" + $(video_title).text() + ")";
187
+ url_name = $(video_title).text()
188
+ }
189
+
190
+ //Thumbnails
191
+ var thumbnails = $(data).find("media\\:thumbnail")
192
+ if (thumbnails.length>0){
193
+ var thumbnail_url = $(thumbnails[0]).attr("url")
194
+ if (thumbnail_url!=null){
195
+ youtube_video_thumbnail = "<p><img class=\"chatVideoImage\" src=\"" + thumbnail_url + "\"/></p>";
196
+ }
197
+ }
198
+
199
+ //Replace video link
200
+ $("a[youtube_id=" + youtube_video_id + "]").html(buildUrlLink(url,url_name)+youtube_video_thumbnail);
201
+ },
202
+ error: function(xOptions, textStatus){
203
+ //Handle errors
204
+ }
205
+ });
206
+
207
+ return "<a target=\"_blank\" youtube_id=\"" + youtube_video_id + "\" class=\"chatLink\" href=\"" + url + "\">" + url + "</a>";
208
+ }
209
+
210
+ function buildRegex(word){
211
+ word = word.replace(")","\\)")
212
+ word = word.replace("(","\\(")
213
+ var pattern = "(" + word + ")";
214
+ pattern = buildPattern(pattern)
215
+ return (new RegExp(pattern,'g'));
216
+ }
217
+
218
+ function buildPattern(pattern){
219
+ //Escape pattern special characters
220
+ pattern = pattern.replace("+","\\+")
221
+ pattern = pattern.replace("?","\\?")
222
+ return pattern
223
+ }
224
+
225
+
226
+ function getUrlType(url){
227
+
228
+ if (url.match(youtube_video_pattern)!=null){
229
+ return "video-youtube"
230
+ }
231
+
232
+ var urlArray = url.split(".");
233
+ if (urlArray!=null && urlArray.length>0){
234
+ var extension= urlArray[urlArray.length-1]
235
+ } else {
236
+ var extension = null;
237
+ }
238
+
239
+ switch(extension){
240
+ case "jpg":
241
+ return "image"
242
+ break;
243
+ case "png":
244
+ return "image"
245
+ break;
246
+ case "gif":
247
+ return "image"
248
+ break;
249
+ default:
250
+ return "link"
251
+ }
252
+ }
253
+
254
+
255
+ ///////////////////////////////////////////////////////
256
+ // Parsing user titles
257
+ ///////////////////////////////////////////////////////
258
+
259
+ function getParsedName(name, fromUser){
260
+ if (fromUser){
261
+ var chatTextclass = "ownName"
262
+ } else {
263
+ var chatTextclass = "guestName"
264
+ }
265
+ return ("<span class=\"" + chatTextclass + "\">" + name + "</span>");
266
+ }
244
267
 
245
268
 
246
- ///////////////////////////////////////////////////////
247
- // Parsing user titles
248
- ///////////////////////////////////////////////////////
269
+ return {
270
+ init: init,
271
+ getParsedContent : getParsedContent,
272
+ getParsedName : getParsedName
273
+ };
249
274
 
250
- function getParsedName(name, fromUser){
251
- if (fromUser){
252
- var chatTextclass = "ownName"
253
- } else {
254
- var chatTextclass = "guestName"
255
- }
256
- return ("<span class=\"" + chatTextclass + "\">" + name + "</span>");
257
- }
275
+ }) (PRESENCE, jQuery);