Commit 7212de73bb870b95913a6c727b5cd51ef3f8d343

Authored by Victor Costa
Committed by Rodrigo Souto
1 parent ebede9d0

Small fixes for chat

app/helpers/chat_helper.rb
@@ -7,7 +7,7 @@ module ChatHelper @@ -7,7 +7,7 @@ module ChatHelper
7 ['icon-menu-offline', _('Sign out of chat'), 'chat-disconnect'], 7 ['icon-menu-offline', _('Sign out of chat'), 'chat-disconnect'],
8 ] 8 ]
9 content_tag('span', 9 content_tag('span',
10 - link_to(content_tag('span', status) + ui_icon('ui-icon-triangle-1-s'), 10 + link_to(content_tag('span', user.name) + ui_icon('ui-icon-triangle-1-s'),
11 '#', 11 '#',
12 :onclick => 'toggleMenu(this); return false', 12 :onclick => 'toggleMenu(this); return false',
13 :class => icon_class + ' simplemenu-trigger' 13 :class => icon_class + ' simplemenu-trigger'
app/views/shared/logged_in/xmpp_chat.html.erb
@@ -29,27 +29,33 @@ @@ -29,27 +29,33 @@
29 </script> 29 </script>
30 30
31 <div id='chat'> 31 <div id='chat'>
32 - <div id='title-bar'>  
33 - <h1 class='title'><%= _("Online") % h(page_title) %>&nbsp;(<span id='friends-online'>0</span>)</h1>  
34 - </div>  
35 <div id='buddy-list'> 32 <div id='buddy-list'>
36 <div class='toolbar'> 33 <div class='toolbar'>
37 - <div id='user-status'><%= user_status_menu('icon-menu-offline', _('Offline')) %></div> 34 + <div id='user-status'>
  35 + <span class="avatar"></span>
  36 + <%= user_status_menu('icon-menu-offline', _('Offline')) %>
  37 + </div>
38 <div class='dialog-error' style='display: none'></div> 38 <div class='dialog-error' style='display: none'></div>
39 </div> 39 </div>
  40 + <div id='title-bar'>
  41 + <h1 class='title'><%= _("Online") % h(page_title) %>&nbsp;(<span id='friends-online'>0</span>)</h1>
  42 + </div>
40 <ul class='buddy-list'> 43 <ul class='buddy-list'>
41 </ul> 44 </ul>
42 </div> 45 </div>
43 - <div id='chat-window' class='tabs-bottom'>  
44 - <div id='tabs'>  
45 - <ul>  
46 - </ul>  
47 - </div> 46 + <div id='chat-window'>
  47 + <div id='conversations'></div>
48 </div> 48 </div>
49 49
50 <div id="chat-templates"> 50 <div id="chat-templates">
51 - <div class='conversation'>  
52 - <a href="#" class="back"><%= _('Back') %></a> 51 + <div class='conversation' style="display: none;">
  52 + <div class="header">
  53 + <span class="chat-target">
  54 + <img class="avatar">
  55 + <span class="other-name"></span>
  56 + </span>
  57 + <a href="#" class="back"><%= _('Back') %></a>
  58 + </div>
53 <div class='history'></div> 59 <div class='history'></div>
54 <div class='input-div'> 60 <div class='input-div'>
55 <div class='icon-chat'></div> 61 <div class='icon-chat'></div>
@@ -60,8 +66,9 @@ @@ -60,8 +66,9 @@
60 <div class="buddy-item"> 66 <div class="buddy-item">
61 <li class='%{presence_status}'> 67 <li class='%{presence_status}'>
62 <a id='%{jid_id}' class='icon-menu-%{presence_status}-11' href='#'> 68 <a id='%{jid_id}' class='icon-menu-%{presence_status}-11' href='#'>
63 - <img class="avatar" src="%{avatar_url}"/> 69 + %{avatar}
64 <span class="name">%{name}<span> 70 <span class="name">%{name}<span>
  71 + <span class="unread-messages icon-chat"></span>
65 </a> 72 </a>
66 </li> 73 </li>
67 </div> 74 </div>
@@ -69,7 +76,7 @@ @@ -69,7 +76,7 @@
69 <div class="message"> 76 <div class="message">
70 <div data-who="%{who}" class="message %{who}"> 77 <div data-who="%{who}" class="message %{who}">
71 <div class="author"> 78 <div class="author">
72 - <img class="avatar" src="%{avatar_url}"/> 79 + %{avatar}
73 <h5 class="%{who}-name">%{name}</h5> 80 <h5 class="%{who}-name">%{name}</h5>
74 </div> 81 </div>
75 <div class="content"> 82 <div class="content">
public/javascripts/chat.js
@@ -25,7 +25,7 @@ jQuery(function($) { @@ -25,7 +25,7 @@ jQuery(function($) {
25 muc_supported: false, 25 muc_supported: false,
26 presence_status: '', 26 presence_status: '',
27 update_presence_status_every: $update_presence_status_every, // time in seconds of how often update presence status to Noosfero DB 27 update_presence_status_every: $update_presence_status_every, // time in seconds of how often update presence status to Noosfero DB
28 - tab_prefix: 'conversation-', // used to compose jQuery UI tabs and anchors to select then 28 + conversation_prefix: 'conversation-',
29 jids: {}, 29 jids: {},
30 rooms: {}, 30 rooms: {},
31 31
@@ -60,7 +60,7 @@ jQuery(function($) { @@ -60,7 +60,7 @@ jQuery(function($) {
60 var html = template 60 var html = template
61 .replace('%{jid_id}', jid_id) 61 .replace('%{jid_id}', jid_id)
62 .replace(/%{presence_status}/g, presence) 62 .replace(/%{presence_status}/g, presence)
63 - .replace('%{avatar_url}', '/chat/avatar/' + identifier) 63 + .replace('%{avatar}', getAvatar(identifier))
64 .replace('%{name}', name); 64 .replace('%{name}', name);
65 if ($(item).length > 0) { 65 if ($(item).length > 0) {
66 $(item).parent('li').replaceWith(html); 66 $(item).parent('li').replaceWith(html);
@@ -76,14 +76,14 @@ jQuery(function($) { @@ -76,14 +76,14 @@ jQuery(function($) {
76 presence = presence || ($(item).length > 0 ? $(item).parent('li').attr('class') : 'offline'); 76 presence = presence || ($(item).length > 0 ? $(item).parent('li').attr('class') : 'offline');
77 log('adding or updating contact ' + jid + ' as ' + presence); 77 log('adding or updating contact ' + jid + ' as ' + presence);
78 Jabber.insert_or_update_user(list, item, jid, name, presence, $('#chat #chat-templates .buddy-item').clone().html()); 78 Jabber.insert_or_update_user(list, item, jid, name, presence, $('#chat #chat-templates .buddy-item').clone().html());
79 - $("#chat-window .tab a[href='#"+ Jabber.tab_prefix + jid_id +"']") 79 + $("#chat-window .tab a[href='#"+ Jabber.conversation_prefix + jid_id +"']")
80 .removeClass() 80 .removeClass()
81 .addClass('icon-menu-' + presence + '-11'); 81 .addClass('icon-menu-' + presence + '-11');
82 }, 82 },
83 insert_or_update_occupant: function (jid, name, presence, room_jid) { 83 insert_or_update_occupant: function (jid, name, presence, room_jid) {
84 log('adding or updating occupant ' + jid + ' as ' + presence); 84 log('adding or updating occupant ' + jid + ' as ' + presence);
85 var jid_id = Jabber.jid_to_id(jid); 85 var jid_id = Jabber.jid_to_id(jid);
86 - var list = $('#' + Jabber.tab_prefix + Jabber.jid_to_id(room_jid) + ' .occupant-list ul'); 86 + var list = $('#' + Jabber.conversation_prefix + Jabber.jid_to_id(room_jid) + ' .occupant-list ul');
87 var item = $(list).find('a[data-id='+ jid_id +']'); 87 var item = $(list).find('a[data-id='+ jid_id +']');
88 Jabber.insert_or_update_user(list, item, jid, name, presence, Jabber.templates.occupant_item); 88 Jabber.insert_or_update_user(list, item, jid, name, presence, Jabber.templates.occupant_item);
89 if (Jabber.rooms[Jabber.jid_to_id(room_jid)] === undefined) { 89 if (Jabber.rooms[Jabber.jid_to_id(room_jid)] === undefined) {
@@ -113,7 +113,7 @@ jQuery(function($) { @@ -113,7 +113,7 @@ jQuery(function($) {
113 if (body) { 113 if (body) {
114 body = Jabber.render_body_message(body); 114 body = Jabber.render_body_message(body);
115 var jid_id = Jabber.jid_to_id(jid); 115 var jid_id = Jabber.jid_to_id(jid);
116 - var tab_id = '#' + Jabber.tab_prefix + jid_id; 116 + var tab_id = '#' + Jabber.conversation_prefix + jid_id;
117 if ($(tab_id).find('.message').length > 0 && $(tab_id).find('.message:last').attr('data-who') == who) { 117 if ($(tab_id).find('.message').length > 0 && $(tab_id).find('.message:last').attr('data-who') == who) {
118 $(tab_id).find('.history').find('.message:last .content').append('<p>' + body + '</p>'); 118 $(tab_id).find('.history').find('.message:last .content').append('<p>' + body + '</p>');
119 } 119 }
@@ -125,8 +125,8 @@ jQuery(function($) { @@ -125,8 +125,8 @@ jQuery(function($) {
125 .replace(/%{who}/g, who) 125 .replace(/%{who}/g, who)
126 .replace('%{time}', time) 126 .replace('%{time}', time)
127 .replace('%{name}', name) 127 .replace('%{name}', name)
128 - .replace('%{avatar_url}', '/chat/avatar/' + identifier);  
129 - $('#' + Jabber.tab_prefix + jid_id).find('.history').append(message_html); 128 + .replace('%{avatar}', getAvatar(identifier));
  129 + $('#' + Jabber.conversation_prefix + jid_id).find('.history').append(message_html);
130 } 130 }
131 $(tab_id).find('.history').scrollTo({top:'100%', left:'0%'}); 131 $(tab_id).find('.history').scrollTo({top:'100%', left:'0%'});
132 if (who != "self") { 132 if (who != "self") {
@@ -144,8 +144,8 @@ jQuery(function($) { @@ -144,8 +144,8 @@ jQuery(function($) {
144 .removeClass('icon-menu-chat') 144 .removeClass('icon-menu-chat')
145 .removeClass('icon-menu-offline') 145 .removeClass('icon-menu-offline')
146 .removeClass('icon-menu-dnd') 146 .removeClass('icon-menu-dnd')
147 - .addClass('icon-menu-' + (presence || 'offline'))  
148 - .find('span').html($presence_status_label[presence]); 147 + .addClass('icon-menu-' + (presence || 'offline'));
  148 + $('#buddy-list #user-status span.avatar').replaceWith(getMyAvatar());
149 $.get('/chat/update_presence_status', { status: {chat_status: presence, last_chat_status: presence} }); 149 $.get('/chat/update_presence_status', { status: {chat_status: presence, last_chat_status: presence} });
150 }, 150 },
151 151
@@ -165,7 +165,7 @@ jQuery(function($) { @@ -165,7 +165,7 @@ jQuery(function($) {
165 }, 165 },
166 166
167 update_chat_title: function () { 167 update_chat_title: function () {
168 - var friends_online = $('#buddy-list .buddy-list li.chat').length; 168 + var friends_online = $('#buddy-list .buddy-list li:not(.offline)').length;
169 $('#friends-online').text(friends_online); 169 $('#friends-online').text(friends_online);
170 }, 170 },
171 171
@@ -439,7 +439,7 @@ jQuery(function($) { @@ -439,7 +439,7 @@ jQuery(function($) {
439 }, 439 },
440 440
441 show_notice: function(jid_id, msg) { 441 show_notice: function(jid_id, msg) {
442 - var tab_id = '#' + Jabber.tab_prefix + jid_id; 442 + var tab_id = '#' + Jabber.conversation_prefix + jid_id;
443 $(tab_id).find('.history').append("<span class='notice'>" + msg + "</span>"); 443 $(tab_id).find('.history').append("<span class='notice'>" + msg + "</span>");
444 } 444 }
445 }; 445 };
@@ -470,6 +470,7 @@ jQuery(function($) { @@ -470,6 +470,7 @@ jQuery(function($) {
470 Jabber.connect(); 470 Jabber.connect();
471 }); 471 });
472 472
  473 + // FIXME
473 // detect when click in chat with a community or person in main window of Noosfero environment 474 // detect when click in chat with a community or person in main window of Noosfero environment
474 $(window).bind('hashchange', function() { 475 $(window).bind('hashchange', function() {
475 if (window.location.hash) { 476 if (window.location.hash) {
@@ -511,6 +512,10 @@ jQuery(function($) { @@ -511,6 +512,10 @@ jQuery(function($) {
511 var jid_id = $(this).attr('id'); 512 var jid_id = $(this).attr('id');
512 var name = Jabber.name_of(jid_id); 513 var name = Jabber.name_of(jid_id);
513 create_conversation_tab(name, jid_id); 514 create_conversation_tab(name, jid_id);
  515 +
  516 + var conversation_id = Jabber.conversation_prefix + jid_id;
  517 + $('#' + conversation_id).find('.conversation').show();
  518 + count_unread_messages(jid_id, true);
514 }); 519 });
515 520
516 // put name into text area when click in one occupant 521 // put name into text area when click in one occupant
@@ -526,22 +531,22 @@ jQuery(function($) { @@ -526,22 +531,22 @@ jQuery(function($) {
526 }); 531 });
527 532
528 $('.conversation .back').live('click', function() { 533 $('.conversation .back').live('click', function() {
529 - $(this).parents('.conversation').hide(); 534 + $('#chat #chat-window .conversation').hide();
530 }); 535 });
531 536
532 function create_conversation_tab(title, jid_id) { 537 function create_conversation_tab(title, jid_id) {
533 - var conversation_id = Jabber.tab_prefix + jid_id; 538 + var conversation_id = Jabber.conversation_prefix + jid_id;
534 if (! $('#' + conversation_id).length > 0) { 539 if (! $('#' + conversation_id).length > 0) {
  540 + var jid = Jabber.jid_of(jid_id);
  541 + var identifier = getIdentifier(jid);
  542 +
535 // opening chat with selected online friend 543 // opening chat with selected online friend
536 - var panel = $('<div id="'+conversation_id +'"></div>').appendTo($tabs); 544 + var panel = $('<div id="'+conversation_id +'"></div>').appendTo($conversations);
537 panel.append($('#chat #chat-templates .conversation').clone()); 545 panel.append($('#chat #chat-templates .conversation').clone());
  546 + panel.find('.chat-target .avatar').replaceWith(getAvatar(identifier));
  547 + panel.find('.chat-target .other-name').html(title);
538 $('#chat .history').perfectScrollbar(); 548 $('#chat .history').perfectScrollbar();
539 549
540 - //FIXME  
541 - //var notice = $starting_chat_notice.replace('%{name}', $(ui.tab).html());  
542 - //Jabber.show_notice(jid_id, notice);  
543 -  
544 - // define textarea name as '<TAB_ID>'  
545 panel.find('textarea').attr('name', panel.id); 550 panel.find('textarea').attr('name', panel.id);
546 551
547 if (Jabber.is_a_room(jid_id)) { 552 if (Jabber.is_a_room(jid_id)) {
@@ -549,32 +554,26 @@ jQuery(function($) { @@ -549,32 +554,26 @@ jQuery(function($) {
549 panel.find('.history').addClass('room'); 554 panel.find('.history').addClass('room');
550 } 555 }
551 556
552 - $tabs.find('.ui-tabs-nav').append( "<li><a href='"+('#' + Jabber.tab_prefix + jid_id)+"'><span class=\"unread-messages\" style=\"display:none\"></span>"+title+"</a></li>" );  
553 -  
554 - var jid = Jabber.jid_of(jid_id);  
555 - $("a[href='#" + Jabber.tab_prefix + jid_id + "']").addClass($('#' + jid_id).attr('class') || 'icon-chat');  
556 - $('#' + Jabber.tab_prefix + jid_id).find('textarea').attr('data-to', jid);  
557 - } else {  
558 - $('#' + conversation_id).find('.conversation').show(); 557 + $('#' + Jabber.conversation_prefix + jid_id).find('textarea').attr('data-to', jid);
559 } 558 }
560 } 559 }
561 560
562 function count_unread_messages(jid_id, hide) { 561 function count_unread_messages(jid_id, hide) {
  562 + var unread = $('.buddy-list #'+jid_id+ ' .unread-messages');
563 if (hide) { 563 if (hide) {
564 - $('a[href=#' + Jabber.tab_prefix + jid_id + ']').find('.unread-messages').hide(); 564 + unread.hide();
565 Jabber.unread_messages_of(jid_id, 0); 565 Jabber.unread_messages_of(jid_id, 0);
566 - $('a[href=#' + Jabber.tab_prefix + jid_id + ']').find('.unread-messages').text(''); 566 + unread.text('');
567 } 567 }
568 else { 568 else {
569 - $('a[href=#' + Jabber.tab_prefix + jid_id + ']').find('.unread-messages').show(); 569 + unread.show();
570 var unread_messages = Jabber.unread_messages_of(jid_id) || 0; 570 var unread_messages = Jabber.unread_messages_of(jid_id) || 0;
571 Jabber.unread_messages_of(jid_id, ++unread_messages); 571 Jabber.unread_messages_of(jid_id, ++unread_messages);
572 - $('a[href=#' + Jabber.tab_prefix + jid_id + ']').find('.unread-messages').text(unread_messages); 572 + unread.text(unread_messages);
573 } 573 }
574 } 574 }
575 575
576 - // creating tabs  
577 - var $tabs = $('#chat-window #tabs'); 576 + var $conversations = $('#chat-window #conversations');
578 577
579 function log(msg) { 578 function log(msg) {
580 if(Jabber.debug && window.console && window.console.log) { 579 if(Jabber.debug && window.console && window.console.log) {
@@ -590,6 +589,22 @@ jQuery(function($) { @@ -590,6 +589,22 @@ jQuery(function($) {
590 .replace(/>/g, '&gt;'); 589 .replace(/>/g, '&gt;');
591 } 590 }
592 591
  592 + function getCurrentIdentifier() {
  593 + return getIdentifier(Jabber.connection.jid);
  594 + }
  595 +
  596 + function getIdentifier(jid) {
  597 + return Strophe.getNodeFromJid(jid);
  598 + }
  599 +
  600 + function getMyAvatar() {
  601 + return getAvatar(getCurrentIdentifier());
  602 + }
  603 +
  604 + function getAvatar(identifier) {
  605 + return '<img class="avatar" src="/chat/avatar/' + identifier + '">';
  606 + }
  607 +
593 }); 608 });
594 609
595 function checkTime(i) { 610 function checkTime(i) {
public/stylesheets/chat.css
1 #chat { 1 #chat {
2 width: 250px; 2 width: 250px;
  3 + height: 100%;
3 display: none; 4 display: none;
  5 + position: fixed;
  6 + right: 0;
  7 + top: 0;
  8 + z-index: 900;
4 } 9 }
5 10
6 #buddy-list { 11 #buddy-list {
7 background-color: #303030; 12 background-color: #303030;
8 - position: absolute;  
9 - bottom: 0;  
10 - top: 25px;  
11 - -webkit-top: 5px;  
12 width: 250px; 13 width: 250px;
  14 + height: 100%;
13 overflow-y: auto; 15 overflow-y: auto;
14 - right: 0;  
15 } 16 }
16 #buddy-list .buddy-list { 17 #buddy-list .buddy-list {
17 list-style-type: none; 18 list-style-type: none;
@@ -22,6 +23,9 @@ @@ -22,6 +23,9 @@
22 line-height: 30px; 23 line-height: 30px;
23 border-bottom: 1px solid #383838; 24 border-bottom: 1px solid #383838;
24 } 25 }
  26 +#buddy-list .buddy-list li a:hover, .occupant-list li a:hover {
  27 + background: rgb(58, 58, 58);
  28 +}
25 #buddy-list .buddy-list li a, .occupant-list li a { 29 #buddy-list .buddy-list li a, .occupant-list li a {
26 background: none; 30 background: none;
27 display: block; 31 display: block;
@@ -32,20 +36,21 @@ @@ -32,20 +36,21 @@
32 } 36 }
33 #buddy-list .buddy-list li a .name, .occupant-list li a .name { 37 #buddy-list .buddy-list li a .name, .occupant-list li a .name {
34 vertical-align: top; 38 vertical-align: top;
  39 + margin-left: 5px;
35 } 40 }
36 -#buddy-list .buddy-list li a img, .occupant-list li a img {  
37 - max-height: 32px; 41 +#buddy-list .buddy-list li a img, .occupant-list li a img, #chat .avatar {
  42 + height: 32px;
38 max-width: 32px; 43 max-width: 32px;
  44 + border-radius: 15%;
39 } 45 }
40 #buddy-list .buddy-list li.offline, .occupant-list li.offline { 46 #buddy-list .buddy-list li.offline, .occupant-list li.offline {
41 display: none; 47 display: none;
42 } 48 }
43 -#buddy-list .toolbar {  
44 - border-left: 0;  
45 - border-right: 0;  
46 - background-position: 90%;  
47 - position: relative;  
48 - height: 20px; 49 +#chat #buddy-list .toolbar {
  50 + border: 0;
  51 + height: 40px;
  52 + background-color: rgb(39, 39, 39);
  53 + border-bottom: 1px solid #383838;
49 } 54 }
50 #buddy-list .toolbar .dialog-error { 55 #buddy-list .toolbar .dialog-error {
51 position: absolute; 56 position: absolute;
@@ -70,8 +75,8 @@ @@ -70,8 +75,8 @@
70 .conversation .input-div { 75 .conversation .input-div {
71 position: absolute; 76 position: absolute;
72 right: 0; 77 right: 0;
73 - bottom: 40px;  
74 - padding: 0 20px 10px 15px; 78 + bottom: 0;
  79 + padding: 0 20px 15px 15px;
75 } 80 }
76 .msie7 .conversation .input-div { 81 .msie7 .conversation .input-div {
77 padding-left: 5px; 82 padding-left: 5px;
@@ -95,64 +100,26 @@ @@ -95,64 +100,26 @@
95 .conversation .history { 100 .conversation .history {
96 position: absolute; 101 position: absolute;
97 right: 0; 102 right: 0;
98 - top: 25px;  
99 - bottom: 125px; 103 + top: 41px;
  104 + bottom: 100px;
100 overflow: hidden; 105 overflow: hidden;
101 - padding-top: 5px;  
102 - width: 250px; 106 + width: 100%;
103 background-color: #303030; 107 background-color: #303030;
104 } 108 }
105 .msie7 #chat-window .conversation .history { 109 .msie7 #chat-window .conversation .history {
106 overflow-x: hidden; 110 overflow-x: hidden;
107 } 111 }
108 #chat .unread-messages { 112 #chat .unread-messages {
109 - background: red;  
110 - position: absolute;  
111 - right: 22px;  
112 - margin: 2px 0;  
113 - padding: 0 2px;  
114 - color: white;  
115 - display: block;  
116 - line-height: 1em;  
117 -}  
118 -#chat .tabs-bottom .ui-tabs-nav {  
119 - position: absolute;  
120 - left: 0;  
121 - bottom: 0;  
122 - right:0;  
123 - padding: 0 5px 10px 5px;  
124 - border: 0;  
125 - background: #eee;  
126 -}  
127 -#chat .tabs-bottom .ui-tabs-nav li {  
128 - top: 0;  
129 - margin-top: 0;  
130 - margin-bottom: 0;  
131 - border: 1px solid transparent;  
132 - border-top: none;  
133 -}  
134 -#chat .tabs-bottom .ui-tabs-nav li a {  
135 - padding: 0.3em 0.5em 0.3em 2.0em;  
136 - background-position: 0.5em 50%;  
137 -}  
138 -#chat .tabs-bottom .ui-tabs-nav li:hover, #chat .tabs-bottom .ui-tabs-nav .ui-state-active {  
139 - border: 1px solid #AAAAAA !important;  
140 - border-top: 0 !important;  
141 -}  
142 -#chat .tabs-bottom li .ui-icon-close {  
143 - margin: 0.4em 0.5em 0 0 !important;  
144 -}  
145 -#chat .ui-tabs .ui-tabs-panel {  
146 - border: none; 113 + float: right;
  114 + margin-right: 25px;
  115 + padding-left: 22px;
  116 + background-position: 0;
147 } 117 }
148 #chat-window .history .message { 118 #chat-window .history .message {
149 - padding: 0 10px;  
150 - /*position: relative;*/ 119 + padding: 8px 8px 8px 6px;
151 } 120 }
152 #chat-window .history .message .time { 121 #chat-window .history .message .time {
153 - position: absolute;  
154 - right: 10px;  
155 - top: 5px; 122 + float: right;
156 color: gray; 123 color: gray;
157 font-style: italic; 124 font-style: italic;
158 font-size: 11px; 125 font-size: 11px;
@@ -166,14 +133,22 @@ @@ -166,14 +133,22 @@
166 } 133 }
167 134
168 #chat-window .history .message .content { 135 #chat-window .history .message .content {
169 - background-color: #383838; 136 + background-color: #494949;
170 color: rgb(223, 223, 223); 137 color: rgb(223, 223, 223);
171 padding: 5px; 138 padding: 5px;
  139 + border-radius: 3%;
  140 + display: inline-block;
  141 + width: 74%;
  142 +}
  143 +#chat-window .history .message.self .content {
  144 + background-color: #383838;
172 } 145 }
173 146
174 #chat-window .history .message .avatar { 147 #chat-window .history .message .avatar {
175 max-height: 32px; 148 max-height: 32px;
176 max-width: 32px; 149 max-width: 32px;
  150 + margin: auto;
  151 + display: block;
177 } 152 }
178 #chat-window .history .notice { 153 #chat-window .history .notice {
179 font-size: 10px; 154 font-size: 10px;
@@ -206,32 +181,93 @@ @@ -206,32 +181,93 @@
206 margin-left: 0; 181 margin-left: 0;
207 } 182 }
208 183
209 -#title-bar {  
210 - top: 0;  
211 - height: 25px;  
212 - position: absolute;  
213 - background: #ccc url(/images/icons-app/chat-22x22.png) 2px 2px no-repeat; 184 +#chat #title-bar {
  185 + height: 34px;
  186 + background: #ccc url(/images/icons-app/chat-22x22.png) 3px 5px no-repeat;
214 width: 250px; 187 width: 250px;
215 - right: 0; 188 + background-color: #303030;
  189 + border-bottom: 1px solid #383838;
216 } 190 }
217 #title-bar .title { 191 #title-bar .title {
218 margin: 0; 192 margin: 0;
219 font-size: 12px; 193 font-size: 12px;
220 - margin: 4px 0;  
221 padding-left: 30px; 194 padding-left: 30px;
  195 + line-height: 32px;
  196 + color: rgb(82, 212, 253);
222 } 197 }
223 #chat #chat-templates { 198 #chat #chat-templates {
224 display: none; 199 display: none;
225 } 200 }
226 -.conversation .back { 201 +.conversation .header {
227 position: absolute; 202 position: absolute;
228 - top: 5px;  
229 - right: 8px; 203 + top: 0;
  204 + right: 0;
  205 + width: 100%;
  206 + background-color: rgb(39, 39, 39);
  207 +}
  208 +.conversation .header .chat-target {
  209 + padding: 6px;
  210 + display: inline-block;
  211 +}
  212 +.conversation .header .back {
  213 + float: right;
  214 + margin: 6px;
  215 + padding: 7px;
  216 + background-color: rgb(98, 98, 98);
  217 + border-radius: 12%;
  218 + text-decoration: none;
  219 + font-weight: bold;
230 color: white; 220 color: white;
231 } 221 }
232 -#chat #chat-window .history .other-name { 222 +#chat #chat-window .other-name {
233 color: #6C9EDD; 223 color: #6C9EDD;
234 } 224 }
235 #chat #chat-window .history .self-name { 225 #chat #chat-window .history .self-name {
236 color: #6C87DD; 226 color: #6C87DD;
237 } 227 }
  228 +#chat #chat-window .history h5 {
  229 + text-align: center;
  230 + word-wrap: break-word;
  231 +}
  232 +.webkit .simplemenu-submenu.opened {
  233 + top: 18px;
  234 +}
  235 +#chat .simplemenu-submenu {
  236 + background: #585858;
  237 + border: 1px solid #6B6B6B;
  238 +}
  239 +.user-status a {
  240 + color: rgb(224, 224, 224);
  241 +}
  242 +#user-status .avatar {
  243 + position: relative;
  244 + left: 16px;
  245 + top: 2px;
  246 +}
  247 +.user-status span {
  248 + position: relative;
  249 +}
  250 +.user-status span, .user-status .ui-icon {
  251 + top: -3px;
  252 +}
  253 +
  254 +.buddy-list span.name {
  255 + padding: 20px;
  256 + position: relative;
  257 + left: -20px;
  258 +}
  259 +.buddy-list .dnd span.name {
  260 + background: url(/designs/icons/pidgin/pidgin/status/16/busy.png) 0px 30px no-repeat;
  261 +}
  262 +.buddy-list .chat span.name {
  263 + background: url(/designs/icons/pidgin/pidgin/status/16/available.png) 0px 30px no-repeat;
  264 +}
  265 +
  266 +.conversation .author {
  267 + width: 20%;
  268 + display: inline-block;
  269 + vertical-align: top;
  270 +}
  271 +.conversation .self .author {
  272 + float: right;
  273 +}