social_stream-presence 0.0.20 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
@@ -3,7 +3,7 @@
3
3
  ////////////////////
4
4
 
5
5
  function log(msg) {
6
- console.log(msg)
6
+ //console.log(msg)
7
7
  }
8
8
 
9
9
 
@@ -17,6 +17,12 @@ statusMessage['away'] = "Away";
17
17
  statusMessage['xa'] = "Away";
18
18
  statusMessage['dnd'] = "Busy";
19
19
 
20
+ var statusIcons = new Array();
21
+ statusIcons[''] = "available";
22
+ statusIcons['chat'] = "available";
23
+ statusIcons['away'] = "away";
24
+ statusIcons['xa'] = "away";
25
+ statusIcons['dnd'] = "dnd";
20
26
 
21
27
  ////////////////////
22
28
  //Connect functions
@@ -56,6 +62,33 @@ function connectToServerWithPassword(chatPassword){
56
62
  return true;
57
63
  }
58
64
 
65
+
66
+ ////////////////////
67
+ //Reconnect button functions
68
+ ////////////////////
69
+
70
+ var connectButtonTimer;
71
+ var periodBetweenAttempts=15; //(seg)
72
+ var connectButtonTimerCounter=periodBetweenAttempts;
73
+
74
+ function connectButtonTimerFunction(){
75
+ if(connectButtonTimerCounter < periodBetweenAttempts){
76
+ connectButtonTimerCounter++;
77
+ } else if (connectButtonTimerCounter == periodBetweenAttempts) {
78
+ $("#chat_header_title").html('<%=I18n.t('chat.disconnected')%>')
79
+ }
80
+ }
81
+
82
+ function requestConnectToChat(){
83
+ if (connectButtonTimerCounter > (periodBetweenAttempts-1)) {
84
+ connectButtonTimerCounter=0;
85
+ $("#chat_header_title").html('<%=I18n.t('chat.connecting')%>')
86
+ return true
87
+ } else {
88
+ return false
89
+ }
90
+ }
91
+
59
92
  ////////////////////
60
93
  //Strophe functions
61
94
  ////////////////////
@@ -114,9 +147,9 @@ function onConnect(status) {
114
147
  setTimeout ("onReconnect()", 3000);
115
148
  } else if (status == Strophe.Status.AUTHFAIL) {
116
149
  log('Strophe authentication fail.');
117
- if ((window.sessionStorage)&&(sessionStorage.getItem("ss_user_pass") != null)){
118
- sessionStorage.setItem("ss_user_pass",null);
119
- }
150
+ if ((window.sessionStorage)&&(sessionStorage.getItem("ss_user_pass") != null)){
151
+ sessionStorage.setItem("ss_user_pass",null);
152
+ }
120
153
  userConnected = false;
121
154
  } else if (status == Strophe.Status.ERROR) {
122
155
  log('Strophe error.');
@@ -165,26 +198,31 @@ function onMessage(msg) {
165
198
  var from_slug = from.split("@")[0];
166
199
  var from_name = $("#" + from_slug).attr("name");
167
200
  var from_jid = from_slug + "@" + domain;
168
-
169
- log(from + ' says: ' + Strophe.getText(body));
201
+
170
202
 
171
203
  if (typeof ($('div.user_presence[slug=' + from_slug + ']').attr('name')) == 'undefined') {
204
+ //No connectionBox for this user!
172
205
  var from_name = from_slug;
206
+ refreshChatWindow();
173
207
  } else {
208
+ showConnectionBoxFromSlug(from_slug);
174
209
  var from_name = $('div.user_presence[slug=' + from_slug + ']').attr('name');
175
210
  }
176
211
 
177
- if (mustPlaySoundForChatWindow(window[from_slug])){
178
- playSound("onMessageAudio");
179
- }
180
-
181
212
  if (createChatBox(from_slug,from_name,from_jid,user_name,user_jid)) {
182
213
  } else {
183
- window[from_slug].chatbox("option", "boxManager").toggleBox(true);
214
+ window[getChatVariableFromSlug(from_slug)].chatbox("option", "boxManager").toggleBox(true);
184
215
  }
185
-
186
- $("#" + from_slug).chatbox("option", "boxManager").addMsg(from_name, Strophe.getText(body));
216
+
217
+ content = parseContent(Strophe.getText(body));
218
+ //Send message to chatBox and post-message functions.
219
+ $("#" + from_slug).chatbox("option", "boxManager").addMsg(from_name, content);
187
220
  rotatePriority(from_slug);
221
+ blinkTitleOnMessage(from_name);
222
+ if (mustPlaySoundForChatWindow(window[getChatVariableFromSlug(from_slug)])){
223
+ playSound("onMessageAudio");
224
+ }
225
+
188
226
  }
189
227
 
190
228
  // we must return true to keep the handler alive.
@@ -192,25 +230,259 @@ function onMessage(msg) {
192
230
  return true;
193
231
  }
194
232
 
233
+ ///////////////////////////////////////////////////////
234
+ //Allow new features in chat msg like links, images, icons, ...
235
+ ///////////////////////////////////////////////////////
236
+
237
+ var chatIcons = new Array();
238
+ chatIcons[':)'] = "face-smile.png";
239
+ chatIcons[':('] = "face-sad.png";
240
+ chatIcons['(B)'] = "beer.png";
241
+ chatIcons['(C)'] = "clock.png";
242
+ chatIcons['(P)'] = "present.png";
243
+ chatIcons[':P']= "face-raspberry.png";
244
+ chatIcons[':Z']= "face-tired.png";
245
+ chatIcons['(R)']= "rain.png";
246
+ chatIcons['(S)']= "sun.png";
247
+ chatIcons[';)']= "face-wink.png";
248
+
249
+
250
+ function parseContent(content){
251
+
252
+ var html_tag_pattern=/.*\<[^>]+>.*/g
253
+ if (html_tag_pattern.test(content)){
254
+ content = content.replace(/>/g, "&gt;");
255
+ content = content.replace(/</g, "&lt;");
256
+ return "<pre>" + content + "</pre>"
257
+ }
258
+
259
+ words = content.split(" ");
260
+ for(i=0; i<words.length; i++){
261
+ words[i] = parseWord(words[i]);
262
+ }
263
+
264
+ return words.join(" ");
265
+ }
266
+
267
+ function parseWord(word){
268
+
269
+ //Look for empty words
270
+ if (word.trim()==""){
271
+ return word
272
+ }
273
+
274
+ //Look for simple words
275
+ var simple_word_pattern=/^[aA-zZ0-9]+$/g
276
+ if (simple_word_pattern.test(word)){
277
+ return word
278
+ }
279
+
280
+ //Look for http urls
281
+ var http_urls_pattern=/(http(s)?:\/\/)([aA-zZ0-9%=_&+?])+([./-][aA-zZ0-9%=_&+?]+)*[/]?/g
282
+ http_urls = word.match(http_urls_pattern)
283
+ if (http_urls!=null){
284
+ url = http_urls[0]
285
+ type = getUrlType(url);
286
+
287
+ switch(type){
288
+ case "link":
289
+ link = buildUrlLink(url,url)
290
+ subwords = word.split(url)
291
+ word = parseWord(subwords[0]) + link + parseWord(subwords[1])
292
+ break;
293
+ case "image":
294
+ imageLink = buildImageLink(url);
295
+ subwords = word.split(url)
296
+ word = parseWord(subwords[0]) + imageLink + parseWord(subwords[1])
297
+ break;
298
+ default:
299
+ }
300
+ return word
301
+ }
302
+
303
+
304
+ //Look for www urls
305
+ var www_urls_pattern = /(www[.])([aA-zZ0-9%=_&+?])+([.][aA-zZ0-9%=_&+?]+)*[/]?/g
306
+ www_urls = word.match(www_urls_pattern)
307
+ if (www_urls!=null){
308
+ url = www_urls[0]
309
+ type = getUrlType(url);
310
+
311
+ switch(type){
312
+ case "link":
313
+ link = buildUrlLink("http://" + url,url)
314
+ subwords = word.split(url)
315
+ word = parseWord(subwords[0]) + link + parseWord(subwords[1])
316
+ break;
317
+ case "image":
318
+ imageLink = buildImageLink("http://" + url);
319
+ subwords = word.split(url)
320
+ word = parseWord(subwords[0]) + imageLink + parseWord(subwords[1])
321
+ break;
322
+ default:
323
+ }
324
+ return word
325
+ }
326
+
327
+ //Look for icons: Directly replace
328
+ var icons_a_pattern=/\(([A-Z])+\)/g
329
+ var icons_b_pattern=/(:|;)([()A-Z])(.)*/g
330
+ if (((icons_a_pattern.test(word))) || (icons_b_pattern.test(word))) {
331
+ for (var i in chatIcons) {
332
+ word = word.replace(buildRegex(i), buildIconImage(i))
333
+ }
334
+ }
335
+
336
+ //Look for icons with Regex
337
+ // var icons_a_pattern=/\(([A-Z])+\)/g
338
+ // if (icons_a_pattern.test(word)){
339
+ // icon = word.replace(/[^(]*(\([A-Z]+\))(\([A-Z]+\))?(.)*/g, "$1")
340
+ // subwords = splitFirst(word,icon)
341
+ // image = buildIconImage(icon);
342
+ // return subwords[0] + image + subwords[1];
343
+ // }
344
+
345
+ // var icons_b_pattern=/:([()A-Z])(.)*/g
346
+ // if (icons_b_pattern.test(word)){
347
+ // icon = word.replace(/[aA-zZ]*(:[()A-Z])(.)*/g, "$1")
348
+ // subwords = splitFirst(word,icon)
349
+ // image = buildIconImage(icon);
350
+ // return subwords[0] + image + subwords[1];
351
+ //return parseWord(subwords[0]) + image + parseWord(subwords[1]);
352
+ // }
353
+
354
+
355
+ //No special content detected
356
+ return word
357
+ }
358
+
359
+ function splitFirst(word,key){
360
+ split=[]
361
+ cut = word.split(key);
362
+ split[0]=cut[0]
363
+ cut.shift()
364
+ paste = cut.join(key)
365
+ split[1]=paste
366
+ return split
367
+ }
368
+
369
+ function buildIconImage(icon){
370
+ if (icon in chatIcons){
371
+ image_file = chatIcons[icon]
372
+ image = "<img class=\"chatIcon\" src=\"assets/emoticons/" + image_file + "\"/>";
373
+ return image
374
+ }
375
+ return icon
376
+ }
377
+
378
+ function buildUrlLink(url,name){
379
+ link = "<a target=\"_blank\" class=\"chatLink\" href=\"" + url + "\">" + name + "</a>";
380
+ return link
381
+ }
382
+
383
+ function buildImageLink(url){
384
+ link = "<a target=\"_blank\" class=\"chatImageLink\" href=\"" + url + "\">" + "<img class=\"chatImage\" src=\"" + url + "\"/>" + "</a>";
385
+ return link
386
+ }
387
+
388
+
389
+ function buildRegex(word){
390
+ word = word.replace(")","\\)")
391
+ word = word.replace("(","\\(")
392
+ pattern = "(" + word + ")";
393
+ pattern = buildPattern(pattern)
394
+ return (new RegExp(pattern,'g'));
395
+ }
396
+
397
+ function buildPattern(pattern){
398
+ //Escape pattern special characters
399
+ pattern = pattern.replace("+","\\+")
400
+ pattern = pattern.replace("?","\\?")
401
+ return pattern
402
+ }
403
+
404
+ function getUrlType(url){
405
+ urlArray = url.split(".");
406
+ if (urlArray!=null && urlArray.length>0){
407
+ extension= urlArray[urlArray.length-1]
408
+ } else {
409
+ extension = null;
410
+ }
411
+
412
+ switch(extension){
413
+ case "jpg":
414
+ return "image"
415
+ break;
416
+ case "png":
417
+ return "image"
418
+ break;
419
+ case "gif":
420
+ return "image"
421
+ break;
422
+ default:
423
+ return "link"
424
+ }
425
+ }
426
+
427
+
195
428
 
196
429
  function onPresence(presence) {
197
- //log(presence);
198
- from = $(presence).attr('from');
199
- slug = from.split("@")[0];
200
- if(slug != user_slug){
201
- setTimeout("refreshChatWindow()", 2000);
202
- }
430
+
431
+ //Check presence stanza type
432
+ ptype = $(presence).attr('type');
433
+
434
+ switch (ptype){
435
+ case undefined:
436
+ processAvailablePresenceStanza(presence)
437
+ break;
438
+ case "available":
439
+ processAvailablePresenceStanza(presence)
440
+ break;
441
+ case "unavailable":
442
+ processUnavailablePresenceStanza(presence)
443
+ break;
444
+ default :
445
+ //Stanza type not recognize
446
+ processAvailablePresenceStanza(presence)
447
+ }
448
+
203
449
  return true;
204
450
  }
205
451
 
452
+ function processAvailablePresenceStanza(presence){
453
+ from = $(presence).attr('from');
454
+ slug = from.split("@")[0];
455
+
456
+ if (slug != user_slug) {
457
+ if (getConnectionBoxFromSlug(slug)!=null){
458
+ status = $(presence).find('show').text();
459
+ setUserIconStatus(slug, status);
460
+ if (cacheConnectedUsers.indexOf(slug) != -1) {
461
+ showConnectionBoxFromSlug(slug);
462
+ }
463
+ } else {
464
+ setTimeout("refreshChatWindow()", 3000);
465
+ }
466
+ }
467
+ }
468
+
469
+ function processUnavailablePresenceStanza(presence){
470
+ from = $(presence).attr('from');
471
+ slug = from.split("@")[0];
472
+
473
+ if (slug != user_slug) {
474
+ if (getConnectionBoxFromSlug(slug)!=null){
475
+ hideConnectionBoxFromSlug(slug)
476
+ }
477
+ }
478
+ }
206
479
 
207
480
  function sendChatMessage(from,to,text){
208
481
  var type = "chat";
209
482
  var body= $build("body");
210
483
  body.t(text);
211
484
  var message = $msg({to: to, from: from, type: 'chat'}).cnode(body.tree());
212
- connection.send(message.tree());
213
- log(from + ' says: ' + text + ' to ' + to);
485
+ connection.send(message.tree());
214
486
  resumeAwayTimerIfAway();
215
487
  return true;
216
488
  }
@@ -302,7 +574,7 @@ function setUserFunctions(){
302
574
 
303
575
  if (createChatBox(guest_slug, guest_name, guest_jid, user_name, user_jid)) {
304
576
  } else {
305
- window[guest_slug].chatbox("option", "boxManager").toggleBox(true);
577
+ window[getChatVariableFromSlug(guest_slug)].chatbox("option", "boxManager").toggleBox(true);
306
578
  };
307
579
  });
308
580
 
@@ -401,18 +673,121 @@ function sendStatus(status){
401
673
 
402
674
 
403
675
  function mustPlaySoundForChatWindow(chatBox){
676
+ //Deny conditions
404
677
  if(userStatus == "dnd"){
405
678
  return false;
406
679
  }
407
680
 
408
- if (typeof chatBox == 'undefined') {
681
+ //Accept conditions
682
+ if (!chatFocus){
409
683
  return true;
410
- }
684
+ }
411
685
 
412
- //Enable sounds only for new (or hidden) chatBoxes
413
- return (chatBox.chatbox("option", "hidden") == true);
686
+ //Default action
687
+ return false
688
+ }
689
+
690
+
691
+ var chatFocus;
692
+
693
+ function onChatBlur() {
694
+ chatFocus = false;
695
+ };
696
+
697
+ function onChatFocus(){
698
+ stopBlink();
699
+ titles = []; //Remove titles after StopBlink!
700
+ chatFocus = true;
701
+ };
702
+
703
+ function initFocusListeners(){
704
+ if (/*@cc_on!@*/false) { // check for Internet Explorer
705
+ document.onfocusin = onFocus;
706
+ document.onfocusout = onBlur;
707
+ } else {
708
+ window.onfocus = onChatFocus;
709
+ window.onblur = onChatBlur;
710
+ }
711
+ }
712
+
713
+
714
+ var blinkTimer;
715
+ var titles=[];
716
+
717
+ function blinkTitle(titles,index){
718
+ $(document).attr("title", titles[index]);
719
+ index = (index+1)%titles.length
720
+ blinkTimer=setTimeout(function(){blinkTitle(titles,index)}, 2000);
414
721
  }
415
722
 
723
+ function stopBlink(){
724
+ clearTimeout(blinkTimer);
725
+ if (titles.length > 0) {
726
+ $(document).attr("title", titles[0]);
727
+ }
728
+ }
729
+
730
+ function blinkTitleOnMessage(username){
731
+ if (!chatFocus){
732
+ if (titles.length==0){
733
+ titles.push($(document).attr("title"))
734
+ }
735
+ if (titles.indexOf(username) == -1){
736
+ titles.push(username + " says...")
737
+ }
738
+ stopBlink();
739
+ blinkTitle(titles,titles.length-1);
740
+ }
741
+ }
742
+
743
+ function getConnectionBoxFromSlug(slug){
744
+ if ($('div.user_presence[slug=' + slug + ']').length > 0){
745
+ return ($('div.user_presence[slug=' + slug + ']'))[0];
746
+ } else {
747
+ return null;
748
+ }
749
+ }
750
+
751
+
752
+ var cacheConnectedUsers = [];
753
+ function hideConnectionBoxFromSlug(slug){
754
+ if ($('div.user_presence[slug=' + slug + ']').length > 0){
755
+ $('div.user_presence[slug=' + slug + ']').hide();
756
+ if(cacheConnectedUsers.indexOf(slug)==-1){
757
+ cacheConnectedUsers.push(slug);
758
+ }
759
+ }
760
+ }
761
+
762
+ function showConnectionBoxFromSlug(slug){
763
+ if ($('div.user_presence[slug=' + slug + ']').length > 0){
764
+ if (!($('div.user_presence[slug=' + slug + ']').is(":visible"))){
765
+ $('div.user_presence[slug=' + slug + ']').show();
766
+ }
767
+ }
768
+ }
769
+
770
+ function setUserIconStatus(slug, status){
771
+ if (status in statusIcons) {
772
+ iconName = statusIcons[status];
773
+ var $img_status = $('img.presence_status');
774
+ connectionBox = getConnectionBoxFromSlug(slug);
775
+ $(connectionBox).find($img_status).attr("src", "/assets/status/" + iconName + ".png")
776
+ }
777
+ }
778
+
779
+ function getAllConnectedSlugs(){
780
+ connectedSlugs=[];
781
+ connectionBoxes = $('div.user_presence[slug]');
782
+ $.each(connectionBoxes, function(index, value) {
783
+ if($(value).is(":visible")){
784
+ connectedSlugs.push($(value).attr("slug"))
785
+ }
786
+ });
787
+ return connectedSlugs
788
+ }
789
+
790
+
416
791
  ////////////////////
417
792
  //Chat functions
418
793
  ////////////////////
@@ -429,8 +804,8 @@ function createChatBox(guest_slug,guest_name,guest_jid,user_name,user_jid){
429
804
  //Create chatbox for new conversations
430
805
  //Open chatbox for old conversations
431
806
 
432
- //Box Variable name = guest_slug
433
- if (typeof window[guest_slug] == 'undefined') {
807
+ //Box Variable name = getChatVariableFromSlug(guest_slug)
808
+ if (typeof window[getChatVariableFromSlug(guest_slug)] == 'undefined') {
434
809
 
435
810
  //Add div with id = guest_slug
436
811
  $("#chat_divs").append("<div id=" + guest_slug + " name=" + guest_name + "></div>")
@@ -444,7 +819,7 @@ function createChatBox(guest_slug,guest_name,guest_jid,user_name,user_jid){
444
819
  var position = boxParams[1];
445
820
 
446
821
 
447
- window[guest_slug] = $("#" + guest_slug).chatbox({id: user_name,
822
+ window[getChatVariableFromSlug(guest_slug)] = $("#" + guest_slug).chatbox({id: user_name,
448
823
  user:{key : "value"},
449
824
  hidden: false,
450
825
  offset: offset, // relative to right edge of the browser window
@@ -468,31 +843,29 @@ function createChatBox(guest_slug,guest_name,guest_jid,user_name,user_jid){
468
843
 
469
844
  messageSent : function(id, user, msg) {
470
845
  rotatePriority(guest_slug);
471
- $("#" + guest_slug).chatbox("option", "boxManager").addMsg(id, msg);
846
+ $("#" + guest_slug).chatbox("option", "boxManager").addMsg(id, parseContent(msg));
472
847
  sendChatMessage(user_jid,guest_jid,msg);
473
848
  }});
474
849
 
475
- visibleChatBoxes[position-1] = window[guest_slug];
476
-
477
-
850
+ visibleChatBoxes[position-1] = window[getChatVariableFromSlug(guest_slug)];
478
851
 
479
852
  return true;
480
853
 
481
854
  } else {
482
855
 
483
- if (visibleChatBoxes.indexOf(window[guest_slug]) == -1) {
856
+ if (visibleChatBoxes.indexOf(window[getChatVariableFromSlug(guest_slug)]) == -1) {
484
857
 
485
858
  //Offset Management for old box
486
859
  boxParams = getBoxParams();
487
860
  var offset = boxParams[0];
488
861
  var position = boxParams[1];
489
862
 
490
- window[guest_slug].chatbox("option", "offset", offset);
491
- window[guest_slug].chatbox("option", "position", position);
492
- visibleChatBoxes[position-1] = window[guest_slug];
863
+ window[getChatVariableFromSlug(guest_slug)].chatbox("option", "offset", offset);
864
+ window[getChatVariableFromSlug(guest_slug)].chatbox("option", "position", position);
865
+ visibleChatBoxes[position-1] = window[getChatVariableFromSlug(guest_slug)];
493
866
  }
494
867
 
495
- window[guest_slug].chatbox("option", "hidden", false);
868
+ window[getChatVariableFromSlug(guest_slug)].chatbox("option", "hidden", false);
496
869
  return false;
497
870
  }
498
871
 
@@ -543,4 +916,10 @@ function rotatePriority(guest_slug){
543
916
  }
544
917
  }
545
918
 
919
+ function getChatVariableFromSlug(slug){
920
+ return "slug_" + slug;
921
+ }
546
922
 
923
+ function getSlugFromChatVariable(variable){
924
+ return variable.split("_")[1];
925
+ }
@@ -237,3 +237,23 @@ input.connectChatButton{
237
237
  margin-top:5px;
238
238
  margin-bottom:5px;
239
239
  }
240
+
241
+
242
+ /* Chat text */
243
+
244
+ .chatImage {
245
+ max-width: 100px;
246
+ max-height: 100px;
247
+ }
248
+
249
+ .chatIcon {
250
+ max-width:20px;
251
+ max-height: 20px;
252
+ }
253
+
254
+ a.chatLink:link, a.chatLink:visited {
255
+ color: #1E726A;
256
+ }
257
+
258
+ .chatImageLink {
259
+ }
@@ -16,5 +16,5 @@ module XmppHelper
16
16
 
17
17
  return connected_users
18
18
  end
19
-
19
+
20
20
  end
@@ -37,11 +37,13 @@
37
37
 
38
38
  initialTimer = setTimeout("updateChatWindow()", 15000);
39
39
  initAudio();
40
+ initFocusListeners();
40
41
 
41
42
  });
42
43
 
43
44
  </script>
44
45
 
46
+
45
47
  <div id="chat_partial">
46
48
  <%= render :partial => 'xmpp/chat_connecting' %>
47
49
  </div>
@@ -1,12 +1,17 @@
1
1
  <script type="text/javascript">
2
- $(document).ready(function () {
3
-
2
+ $(document).ready(function () {
3
+
4
+ connectButtonTimer = setInterval("connectButtonTimerFunction()", 1000)
5
+ connectButtonTimerCounter=periodBetweenAttempts+1
6
+
4
7
  if (authByCookie()){
5
8
  //Authentication by cookie
6
9
 
7
10
  $("#passwordFormChat").hide();
8
11
  $('.connectChatButton').bind('click', function () {
9
- connectToServerWithCookie();
12
+ if (requestConnectToChat()){
13
+ connectToServerWithCookie();
14
+ }
10
15
  });
11
16
 
12
17
  } else {
@@ -19,7 +24,9 @@
19
24
  }
20
25
 
21
26
  $('.connectChatButton').bind('click', function () {
22
- connectToServerWithPassword($('#user_password').val());
27
+ if (requestConnectToChat()) {
28
+ connectToServerWithPassword($('#user_password').val());
29
+ }
23
30
  });
24
31
 
25
32
  $('.storePass').bind('click', function () {
@@ -29,13 +36,14 @@
29
36
  }
30
37
 
31
38
  });
39
+
32
40
  </script>
33
41
 
34
42
  <div class="block">
35
43
  <div class="header">
36
44
  <%=image_tag("btn/btn_friend.png", :class => "header_icon")%>
37
45
  <div class="header_text">
38
- <%=t('chat.disconnected')%>
46
+ <p id="chat_header_title"><%=t('chat.disconnected')%></p>
39
47
  </div>
40
48
  </div>
41
49
  </div>
@@ -8,7 +8,7 @@ module SocialStream
8
8
  include SocialStream::Presence::Models::BuddyManager
9
9
  end
10
10
 
11
- end
11
+ end
12
12
 
13
13
  end
14
14
  end
@@ -1,5 +1,5 @@
1
1
  module Socialstream
2
2
  module Presence
3
- VERSION = "0.0.20"
3
+ VERSION = "0.0.21"
4
4
  end
5
5
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 20
9
- version: 0.0.20
8
+ - 21
9
+ version: 0.0.21
10
10
  platform: ruby
11
11
  authors:
12
12
  - Aldo Gordillo
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-11-04 00:00:00 +01:00
17
+ date: 2011-11-11 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -87,6 +87,16 @@ files:
87
87
  - app/assets/audio/chat/onMessageAudio.mp3
88
88
  - app/assets/audio/chat/onMessageAudio.wav
89
89
  - app/assets/images/black_arrow3.png
90
+ - app/assets/images/emoticons/beer.png
91
+ - app/assets/images/emoticons/clock.png
92
+ - app/assets/images/emoticons/face-raspberry.png
93
+ - app/assets/images/emoticons/face-sad.png
94
+ - app/assets/images/emoticons/face-smile.png
95
+ - app/assets/images/emoticons/face-tired.png
96
+ - app/assets/images/emoticons/face-wink.png
97
+ - app/assets/images/emoticons/present.png
98
+ - app/assets/images/emoticons/rain.png
99
+ - app/assets/images/emoticons/sun.png
90
100
  - app/assets/images/status/available.png
91
101
  - app/assets/images/status/away.png
92
102
  - app/assets/images/status/dnd.png