Commit d5dfb87bd18edb3de480a9f2456e1fcbb2c43de4

Authored by Rodrigo Souto
1 parent acb91951

chat: improve label and fix minor bugs

app/controllers/public/chat_controller.rb
@@ -68,6 +68,11 @@ class ChatController < PublicController @@ -68,6 +68,11 @@ class ChatController < PublicController
68 render :json => {:order => conversations_order.reverse, :domain => environment.default_hostname.gsub('.','-')}.to_json 68 render :json => {:order => conversations_order.reverse, :domain => environment.default_hostname.gsub('.','-')}.to_json
69 end 69 end
70 70
  71 + #TODO Ideally this is done through roster table on ejabberd.
  72 + def roster_groups
  73 + render :text => user.memberships.map {|m| {:jid => m.jid, :name => m.name}}.to_json
  74 + end
  75 +
71 protected 76 protected
72 77
73 def check_environment_feature 78 def check_environment_feature
app/views/shared/logged_in/xmpp_chat.html.erb
@@ -13,11 +13,9 @@ @@ -13,11 +13,9 @@
13 </script> 13 </script>
14 14
15 15
16 - <div id="chat-label" class="opened">  
17 - <span class="right-arrow">&gt;</span> 16 + <div id="chat-label">
  17 + <span class="right-arrow">&#9654;</span>
18 <span class="title"><%= _('Chat') %></span> 18 <span class="title"><%= _('Chat') %></span>
19 - <br clear="both" />  
20 - <div class="icon-big-chat"></div>  
21 </div> 19 </div>
22 20
23 <div id='chat'> 21 <div id='chat'>
public/javascripts/application.js
@@ -567,14 +567,14 @@ function display_notice(message) { @@ -567,14 +567,14 @@ function display_notice(message) {
567 setTimeout(function() { $noticeBox.fadeOut('fast'); }, 5000); 567 setTimeout(function() { $noticeBox.fadeOut('fast'); }, 5000);
568 } 568 }
569 569
570 -function open_chat_window(self_link, anchor) { 570 +function open_chat_window(anchor) {
571 jQuery('#chat').addClass('opened'); 571 jQuery('#chat').addClass('opened');
572 - jQuery('#chat-label').removeClass('opened'); 572 + jQuery('#chat-label').addClass('opened');
573 jQuery("#chat" ).trigger('opengroup', anchor); 573 jQuery("#chat" ).trigger('opengroup', anchor);
574 return false; 574 return false;
575 } 575 }
576 576
577 -function toggle_chat_window(self_link) { 577 +function toggle_chat_window() {
578 if(jQuery('#conversations .conversation').length == 0) jQuery('.buddies a').first().click(); 578 if(jQuery('#conversations .conversation').length == 0) jQuery('.buddies a').first().click();
579 jQuery('#chat').toggleClass('opened'); 579 jQuery('#chat').toggleClass('opened');
580 jQuery('#chat-label').toggleClass('opened'); 580 jQuery('#chat-label').toggleClass('opened');
public/javascripts/chat.js
@@ -177,7 +177,7 @@ jQuery(function($) { @@ -177,7 +177,7 @@ jQuery(function($) {
177 Jabber.connection.send( 177 Jabber.connection.send(
178 $pres({to: room_jid + '/' + $own_name}).c('x', {xmlns: Strophe.NS.MUC}).c('history', {maxchars: 0}) 178 $pres({to: room_jid + '/' + $own_name}).c('x', {xmlns: Strophe.NS.MUC}).c('history', {maxchars: 0})
179 ); 179 );
180 - Jabber.insert_or_update_group(room_jid, 'group'); 180 + Jabber.insert_or_update_group(room_jid, 'online');
181 Jabber.update_chat_title(); 181 Jabber.update_chat_title();
182 }, 182 },
183 183
@@ -232,6 +232,22 @@ jQuery(function($) { @@ -232,6 +232,22 @@ jQuery(function($) {
232 var jid_id = Jabber.jid_to_id(jid); 232 var jid_id = Jabber.jid_to_id(jid);
233 Jabber.insert_or_update_contact(jid, name); 233 Jabber.insert_or_update_contact(jid, name);
234 }); 234 });
  235 + //TODO Add groups through roster too...
  236 + $.ajax({
  237 + url: '/chat/roster_groups',
  238 + dataType: 'json',
  239 + success: function(data){
  240 + data.each(function(room){
  241 + console.log('==> '+room.jid);
  242 + var jid_id = Jabber.jid_to_id(room.jid);
  243 + Jabber.jids[jid_id] = {jid: room.jid, name: room.name, type: 'groupchat'};
  244 + Jabber.insert_or_update_group(room.jid, 'online');
  245 + });
  246 + },
  247 + error: function(data, textStatus, jqXHR){
  248 + console.log(data);
  249 + },
  250 + });
235 sort_conversations(); 251 sort_conversations();
236 // set up presence handler and send initial presence 252 // set up presence handler and send initial presence
237 Jabber.connection.addHandler(Jabber.on_presence, null, "presence"); 253 Jabber.connection.addHandler(Jabber.on_presence, null, "presence");
@@ -719,12 +735,12 @@ jQuery(function($) { @@ -719,12 +735,12 @@ jQuery(function($) {
719 var name = Jabber.name_of(jid_id); 735 var name = Jabber.name_of(jid_id);
720 var identifier = Strophe.getNodeFromJid(jid); 736 var identifier = Strophe.getNodeFromJid(jid);
721 var avatar = "/chat/avatar/"+identifier 737 var avatar = "/chat/avatar/"+identifier
722 - if(!$('#chat').is(':visible') || window.isHidden()) { 738 + if(!$('#chat').hasClass('opened') || window.isHidden()) {
723 var options = {body: message.body, icon: avatar, tag: jid_id}; 739 var options = {body: message.body, icon: avatar, tag: jid_id};
724 - notifyMe(name, options).onclick = function(){  
725 - jQuery('#chat').show('fast');  
726 - jQuery('a#'+jid_id).click();  
727 - }; 740 + console.log('Notify '+name);
  741 + $(notifyMe(name, options)).on('click', function(){
  742 + open_chat_window('#'+jid+'/'+name);
  743 + });
728 $.sound.play('/sounds/receive.wav'); 744 $.sound.play('/sounds/receive.wav');
729 } 745 }
730 } 746 }
@@ -773,6 +789,6 @@ jQuery(function($) { @@ -773,6 +789,6 @@ jQuery(function($) {
773 }); 789 });
774 790
775 $('#chat-label').click(function(){ 791 $('#chat-label').click(function(){
776 - toggle_chat_window(this); 792 + toggle_chat_window();
777 }); 793 });
778 }); 794 });
public/stylesheets/chat.css
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 #chat #buddy-list { 23 #chat #buddy-list {
24 background-color: #f9f9f9; 24 background-color: #f9f9f9;
25 top: 0; 25 top: 0;
26 - right: 0; 26 + right: -5px;
27 width: 0; 27 width: 0;
28 bottom: 100px; 28 bottom: 100px;
29 position: absolute; 29 position: absolute;
@@ -39,6 +39,7 @@ @@ -39,6 +39,7 @@
39 } 39 }
40 40
41 #chat #buddy-list:hover { 41 #chat #buddy-list:hover {
  42 + right: 0;
42 width: 190px; 43 width: 190px;
43 transition: width 0.3s ease-in; 44 transition: width 0.3s ease-in;
44 } 45 }
@@ -479,35 +480,31 @@ div.occupants &gt; a.up { @@ -479,35 +480,31 @@ div.occupants &gt; a.up {
479 } 480 }
480 481
481 #chat-label { 482 #chat-label {
482 - width: 20px;  
483 - height: 80px;  
484 - background-color: #2E3436; 483 + right: 0;
  484 + width: 0;
  485 + height: 0;
  486 + background-color: #888A85;
485 position: fixed; 487 position: fixed;
486 top: 20%; 488 top: 20%;
487 - right: 350px;  
488 cursor: pointer; 489 cursor: pointer;
489 text-align: center; 490 text-align: center;
490 z-index: 11; 491 z-index: 11;
491 - transition: background-color 0.2s linear, right 0.3s ease-in, width 0.3s ease-in;  
492 - border-top-left-radius: 10px;  
493 - border-bottom-left-radius: 10px; 492 + transition: background-color 0.2s linear, right 0.3s ease-in;
494 } 493 }
495 494
496 #chat-label.opened { 495 #chat-label.opened {
497 - right: 0;  
498 - width: 100px;  
499 - transition: background-color 0.2s linear, right 0.3s ease-in, width 0.3s ease-in;  
500 -}  
501 -  
502 -#chat-label.opened:hover { 496 + width: 20px;
  497 + height: 90px;
  498 + right: 350px;
503 background-color: #888A85; 499 background-color: #888A85;
504 - transition: background-color 0.2s linear, right 0.3s ease-in, width 0.3s ease-in; 500 + border-radius: 10px 0px 0 10px;
  501 + font-size: 14px;
  502 + transition: background-color 0.2s linear, right 0.3s ease-in;
505 } 503 }
506 504
507 -#chat-label:hover {  
508 - background-color: #888A85; 505 +#chat-label.opened:hover {
  506 + background-color: #2E3436;
509 transition: background-color 0.2s linear, right 0.3s ease-in; 507 transition: background-color 0.2s linear, right 0.3s ease-in;
510 - transition: background-color 0.2s linear, right 0.3s ease-in, width 0.3s ease-in;  
511 } 508 }
512 509
513 #chat-label span { 510 #chat-label span {
@@ -515,29 +512,43 @@ div.occupants &gt; a.up { @@ -515,29 +512,43 @@ div.occupants &gt; a.up {
515 } 512 }
516 513
517 #chat-label span.title { 514 #chat-label span.title {
518 - font-size: 18px;  
519 - line-height: 24px; 515 + font-size: 16px;
  516 + position: absolute;
  517 + background-color: #888A85;
  518 + border-radius: 10px 10px 0 0;
  519 + transform: rotate(-90deg);
  520 + top: 35px;
  521 + right: -34px;
  522 + width: 80px;
  523 + padding: 2px 5px;
  524 + text-shadow: 1px -1px 0 #666;
  525 + transition: background-color 0.2s linear, right 0.3s ease-in;
  526 +}
  527 +
  528 +#chat-label:hover span.title {
  529 + background-color: #2E3436;
  530 + transition: background-color 0.2s linear, right 0.3s ease-in;
520 } 531 }
521 532
522 #chat-label span.right-arrow { 533 #chat-label span.right-arrow {
523 - font-size: 24px;  
524 - line-height: 77px; 534 + font-size: 18pxpx;
  535 + line-height: 87px;
525 } 536 }
526 537
527 #chat-label .title { 538 #chat-label .title {
528 - display: none; 539 + display: inline;
529 } 540 }
530 541
531 #chat-label.opened .title { 542 #chat-label.opened .title {
532 - display: inline; 543 + display: none;
533 } 544 }
534 545
535 #chat-label .right-arrow { 546 #chat-label .right-arrow {
536 - display: inline; 547 + display: none;
537 } 548 }
538 549
539 #chat-label.opened .right-arrow { 550 #chat-label.opened .right-arrow {
540 - display: none; 551 + display: inline;
541 } 552 }
542 553
543 #chat-label div { 554 #chat-label div {