diff --git a/app/controllers/public/chat_controller.rb b/app/controllers/public/chat_controller.rb index 46a82fc..6187b6a 100644 --- a/app/controllers/public/chat_controller.rb +++ b/app/controllers/public/chat_controller.rb @@ -29,12 +29,12 @@ class ChatController < PublicController end def index - presence = current_user.last_chat_status - if presence.blank? or presence == 'chat' - render :action => 'auto_connect_online' - else - render :action => 'auto_connect_busy' - end + #presence = current_user.last_chat_status + #if presence.blank? or presence == 'chat' + # render :action => 'auto_connect_online' + #else + # render :action => 'auto_connect_busy' + #end end def update_presence_status diff --git a/app/helpers/layout_helper.rb b/app/helpers/layout_helper.rb index e2db756..364df0a 100644 --- a/app/helpers/layout_helper.rb +++ b/app/helpers/layout_helper.rb @@ -28,6 +28,7 @@ module LayoutHelper 'lightbox', 'colorbox', 'inputosaurus', + 'chat', pngfix_stylesheet_path, ] + tokeninput_stylesheets plugins_stylesheets = @plugins.select(&:stylesheet?).map { |plugin| plugin.class.public_path('style.css') } diff --git a/app/views/chat/index.html.erb b/app/views/chat/index.html.erb new file mode 100644 index 0000000..b7c1769 --- /dev/null +++ b/app/views/chat/index.html.erb @@ -0,0 +1,70 @@ + <%= javascript_include_tag 'strophejs-1.0.1/strophe', 'jquery.emoticon', '../designs/icons/pidgin/emoticons.js', 'ba-linkify', 'jquery.ba-hashchange', 'jquery.sound', 'chat', 'perfect-scrollbar.min.js', 'perfect-scrollbar.with-mousewheel.min.js', :cache => 'cache/chat' %> + <%= stylesheet_link_tag 'perfect-scrollbar.min.css' %> + + <% extend ChatHelper %> + + + +
+
+

<%= _("Online") % h(page_title) %> (0)

+
+
+
+
<%= user_status_menu('icon-menu-offline', _('Offline')) %>
+ +
+ +
+
+
+
    +
+
+
+ +
+
+ <%= _('Back') %> +
+
+
+ +
+
+ + + +
+
+
+ +
%{name}
+
+
+ %{time} +

%{message}

+
+
+
+
+
diff --git a/app/views/layouts/application-ng.html.erb b/app/views/layouts/application-ng.html.erb index 2bad06a..b1f7d89 100644 --- a/app/views/layouts/application-ng.html.erb +++ b/app/views/layouts/application-ng.html.erb @@ -88,5 +88,6 @@ if content.respond_to?(:call) then instance_exec(&content).html_safe else content.html_safe end end.join("\n") %> + <%= render :file => 'chat/index' if logged_in? %> diff --git a/public/javascripts/application.js b/public/javascripts/application.js index e33a894..bb36e77 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -599,9 +599,7 @@ function display_notice(message) { } function open_chat_window(self_link, anchor) { - anchor = anchor || '#'; - var noosfero_chat_window = window.open('/chat' + anchor,'noosfero_chat','width=900,height=500'); - noosfero_chat_window.focus(); + jQuery('#chat').toggle('fast'); return false; } diff --git a/public/javascripts/chat.js b/public/javascripts/chat.js index 58a4ed9..ee724f6 100644 --- a/public/javascripts/chat.js +++ b/public/javascripts/chat.js @@ -20,7 +20,7 @@ jQuery(function($) { var Jabber = { debug: true, connection: null, - bosh_service: '/http-bind', + bosh_service: 'http://10.32.113.131/http-bind', muc_domain: $muc_domain, muc_supported: false, presence_status: '', @@ -30,10 +30,8 @@ jQuery(function($) { rooms: {}, templates: { - buddy_item: "
  • %{name}
  • ", occupant_item: "
  • %{name}
  • ", room_item: "
  • %{name}
  • ", - message: $balloon_template, error: "%{text}", occupant_list: "
    " }, @@ -58,9 +56,11 @@ jQuery(function($) { insert_or_update_user: function (list, item, jid, name, presence, template) { var jid_id = Jabber.jid_to_id(jid); + var identifier = Strophe.getNodeFromJid(jid); var html = template .replace('%{jid_id}', jid_id) .replace(/%{presence_status}/g, presence) + .replace('%{avatar_url}', '/chat/avatar/' + identifier) .replace('%{name}', name); if ($(item).length > 0) { $(item).parent('li').replaceWith(html); @@ -75,7 +75,7 @@ jQuery(function($) { var item = $('#' + jid_id); presence = presence || ($(item).length > 0 ? $(item).parent('li').attr('class') : 'offline'); log('adding or updating contact ' + jid + ' as ' + presence); - Jabber.insert_or_update_user(list, item, jid, name, presence, Jabber.templates.buddy_item); + Jabber.insert_or_update_user(list, item, jid, name, presence, $('#chat #chat-templates .buddy-item').clone().html()); $("#chat-window .tab a[href='#"+ Jabber.tab_prefix + jid_id +"']") .removeClass() .addClass('icon-menu-' + presence + '-11'); @@ -115,12 +115,12 @@ jQuery(function($) { var jid_id = Jabber.jid_to_id(jid); var tab_id = '#' + Jabber.tab_prefix + jid_id; if ($(tab_id).find('.message').length > 0 && $(tab_id).find('.message:last').attr('data-who') == who) { - $(tab_id).find('.history').find('.message:last .comment-balloon-content').append('

    ' + body + '

    '); + $(tab_id).find('.history').find('.message:last .content').append('

    ' + body + '

    '); } else { var time = new Date(); time = time.getHours() + ':' + checkTime(time.getMinutes()); - var message_html = Jabber.templates.message + var message_html = $('#chat #chat-templates .message').clone().html() .replace('%{message}', body) .replace(/%{who}/g, who) .replace('%{time}', time) @@ -189,14 +189,14 @@ jQuery(function($) { Jabber.update_chat_title(); $('#chat-window .tab a').removeClass().addClass('icon-menu-offline-11'); $('#buddy-list .toolbar').removeClass('small-loading-dark'); - $('textarea').attr('disabled', 'disabled'); + $('textarea').prop('disabled', 'disabled'); break; case Strophe.Status.CONNECTED: log('connected'); case Strophe.Status.ATTACHED: log('XMPP/BOSH session attached'); $('#buddy-list .toolbar').removeClass('small-loading-dark'); - $('textarea').attr('disabled', ''); + $('textarea').prop('disabled', ''); break; } }, @@ -526,11 +526,17 @@ jQuery(function($) { $('.conversation textarea:visible').focus(); }); + $('.conversation .back').live('click', function() { + $(this).parents('.conversation').hide(); + }); + function create_conversation_tab(title, jid_id) { - if (! $('#' + Jabber.tab_prefix + jid_id).length > 0) { + var conversation_id = Jabber.tab_prefix + jid_id; + if (! $('#' + conversation_id).length > 0) { // opening chat with selected online friend - var panel = $('
    ').appendTo($tabs); - panel.append("
    "); + var panel = $('
    ').appendTo($tabs); + panel.append($('#chat #chat-templates .conversation').clone()); + $('#chat .history').perfectScrollbar(); //FIXME //var notice = $starting_chat_notice.replace('%{name}', $(ui.tab).html()); @@ -545,11 +551,12 @@ jQuery(function($) { } $tabs.find('.ui-tabs-nav').append( "
  • "+title+"
  • " ); - $tabs.tabs('refresh'); var jid = Jabber.jid_of(jid_id); $("a[href='#" + Jabber.tab_prefix + jid_id + "']").addClass($('#' + jid_id).attr('class') || 'icon-chat'); $('#' + Jabber.tab_prefix + jid_id).find('textarea').attr('data-to', jid); + } else { + $('#' + conversation_id).find('.conversation').show(); } } @@ -568,78 +575,7 @@ jQuery(function($) { } // creating tabs - var $tabs = $('#chat-window #tabs').tabs({ - tabTemplate: '
  • #{label}
  • ', - panelTemplate: "
    ", - add: function(event, ui) { //FIXME DEPRECATED - var jid_id = ui.panel.id.replace(Jabber.tab_prefix, ''); - - var notice = $starting_chat_notice.replace('%{name}', $(ui.tab).html()); - Jabber.show_notice(jid_id, notice); - - // define textarea name as '' - $(ui.panel).find('textarea').attr('name', ui.panel.id); - - if (Jabber.is_a_room(jid_id)) { - $(ui.panel).append(Jabber.templates.occupant_list); - $(ui.panel).find('.history').addClass('room'); - } - }, - show: function(event, ui) { - $(ui.panel).find('.history').scrollTo({top:'100%', left:'0%'}); - $(ui.panel).find('textarea').focus(); - var jid_id = ui.panel.id.replace(Jabber.tab_prefix, ''); - count_unread_messages(jid_id, true); - }, - remove: function(event, ui) { //FIXME DEPRECATED - var jid_id = ui.panel.id.replace(Jabber.tab_prefix, ''); - if (Jabber.is_a_room(jid_id)) { - // exiting from a chat room - var jid = Jabber.jid_of(jid_id); - log('leaving chatroom ' + jid); - Jabber.leave_room(jid); - } - else { - // TODO notify to friend when I close chat window - } - } - }).scrollabletab({ - closable: true - }); - - // remove some unnecessary css classes to apply style for tabs in bottom - $(".tabs-bottom .ui-tabs-nav, .tabs-bottom .ui-tabs-nav > *") - .removeClass("ui-corner-all ui-corner-top ui-helper-clearfix"); - $('#chat-window #tabs').removeClass("ui-corner-all ui-widget-content"); - - // positionting scrollabletab wrapper at bottom and tabs next/prev buttons - $('#stTabswrapper,#tabs').css({'position':'absolute', 'top':0, 'bottom':0, 'left': 0, 'right': 0, 'width': 'auto'}); - $('.stNavWrapper').css('position', 'absolute').css('bottom', 0).css('left', 0).css('right', 0) - .find('.stNav').css('top', null).css('bottom', '12px').css('height', '22px') - .find('.ui-icon').css('margin-top', '2px'); - $('.webkit .stNavWrapper .stNav').css('height', '20px'); - - // // blink window title alerting about new unread messages - // - // FIXME disabling window blinking for now - // - // $(window).blur(function() { - // setTimeout(function() { - // window.blinkInterval = setInterval(function() { - // if (document.title.match(/\*.+\* .+/)) { - // document.title = document.title.replace(/\*.+\* /g, ''); - // } - // else if (document.alert_title) { - // document.title = '*'+ document.alert_title +'* '+ document.title.replace(/\*.+\* /g, ''); - // }}, 2000 - // ); - // }, 2000); - // }, false); - // $(window).focus(function() { - // clearInterval(window.blinkInterval); - // document.alert_title = null; - // document.title = document.title.replace(/\*.+\* /g, ''); - // }, false); + var $tabs = $('#chat-window #tabs'); function log(msg) { if(Jabber.debug && window.console && window.console.log) { diff --git a/public/javascripts/perfect-scrollbar.min.js b/public/javascripts/perfect-scrollbar.min.js new file mode 100644 index 0000000..3720496 --- /dev/null +++ b/public/javascripts/perfect-scrollbar.min.js @@ -0,0 +1,4 @@ +/*! perfect-scrollbar - v0.4.11 +* http://noraesae.github.com/perfect-scrollbar/ +* Copyright (c) 2014 Hyeonje Alex Jun; Licensed MIT */ +(function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(jQuery)})(function(e){"use strict";var t={wheelSpeed:10,wheelPropagation:!1,minScrollbarLength:null,maxScrollbarLength:null,useBothWheelAxes:!1,useKeyboard:!0,suppressScrollX:!1,suppressScrollY:!1,scrollXMarginOffset:0,scrollYMarginOffset:0,includePadding:!1},o=function(){var e=0;return function(){var t=e;return e+=1,".perfect-scrollbar-"+t}}();e.fn.perfectScrollbar=function(r,n){return this.each(function(){var l=e.extend(!0,{},t),s=e(this);if("object"==typeof r?e.extend(!0,l,r):n=r,"update"===n)return s.data("perfect-scrollbar-update")&&s.data("perfect-scrollbar-update")(),s;if("destroy"===n)return s.data("perfect-scrollbar-destroy")&&s.data("perfect-scrollbar-destroy")(),s;if(s.data("perfect-scrollbar"))return s.data("perfect-scrollbar");s.addClass("ps-container");var a,c,i,u,d,p,f,h,v,b,g=e("
    ").appendTo(s),m=e("
    ").appendTo(s),w=e("
    ").appendTo(g),T=e("
    ").appendTo(m),L=parseInt(g.css("bottom"),10),y=L===L,I=y?null:parseInt(g.css("top"),10),S=parseInt(m.css("right"),10),x=S===S,C=x?null:parseInt(m.css("left"),10),P="rtl"===s.css("direction"),D=o(),X=parseInt(g.css("borderLeftWidth"),10)+parseInt(g.css("borderRightWidth"),10),Y=parseInt(g.css("borderTopWidth"),10)+parseInt(g.css("borderBottomWidth"),10),k=function(e,t){var o=e+t,r=u-v;b=0>o?0:o>r?r:o;var n=parseInt(b*(p-u)/(u-v),10);s.scrollTop(n),y?g.css({bottom:L-n}):g.css({top:I+n})},M=function(e,t){var o=e+t,r=i-f;h=0>o?0:o>r?r:o;var n=parseInt(h*(d-i)/(i-f),10);s.scrollLeft(n),x?m.css({right:S-n}):m.css({left:C+n})},W=function(e){return l.minScrollbarLength&&(e=Math.max(e,l.minScrollbarLength)),l.maxScrollbarLength&&(e=Math.min(e,l.maxScrollbarLength)),e},j=function(){var e={width:i,display:a?"inherit":"none"};e.left=P?s.scrollLeft()+i-d:s.scrollLeft(),y?e.bottom=L-s.scrollTop():e.top=I+s.scrollTop(),g.css(e);var t={top:s.scrollTop(),height:u,display:c?"inherit":"none"};x?t.right=P?d-s.scrollLeft()-S-T.outerWidth():S-s.scrollLeft():t.left=P?s.scrollLeft()+2*i-d-C-T.outerWidth():C+s.scrollLeft(),m.css(t),w.css({left:h,width:f-X}),T.css({top:b,height:v-Y}),a?s.addClass("ps-active-x"):s.removeClass("ps-active-x"),c?s.addClass("ps-active-y"):s.removeClass("ps-active-y")},E=function(){i=l.includePadding?s.innerWidth():s.width(),u=l.includePadding?s.innerHeight():s.height(),d=s.prop("scrollWidth"),p=s.prop("scrollHeight"),!l.suppressScrollX&&d>i+l.scrollXMarginOffset?(a=!0,f=W(parseInt(i*i/d,10)),h=parseInt(s.scrollLeft()*(i-f)/(d-i),10)):(a=!1,f=0,h=0,s.scrollLeft(0)),!l.suppressScrollY&&p>u+l.scrollYMarginOffset?(c=!0,v=W(parseInt(u*u/p,10)),b=parseInt(s.scrollTop()*(u-v)/(p-u),10)):(c=!1,v=0,b=0,s.scrollTop(0)),b>=u-v&&(b=u-v),h>=i-f&&(h=i-f),j()},O=function(){var t,o;w.bind("mousedown"+D,function(e){o=e.pageX,t=w.position().left,g.addClass("in-scrolling"),e.stopPropagation(),e.preventDefault()}),e(document).bind("mousemove"+D,function(e){g.hasClass("in-scrolling")&&(M(t,e.pageX-o),e.stopPropagation(),e.preventDefault())}),e(document).bind("mouseup"+D,function(){g.hasClass("in-scrolling")&&g.removeClass("in-scrolling")}),t=o=null},q=function(){var t,o;T.bind("mousedown"+D,function(e){o=e.pageY,t=T.position().top,m.addClass("in-scrolling"),e.stopPropagation(),e.preventDefault()}),e(document).bind("mousemove"+D,function(e){m.hasClass("in-scrolling")&&(k(t,e.pageY-o),e.stopPropagation(),e.preventDefault())}),e(document).bind("mouseup"+D,function(){m.hasClass("in-scrolling")&&m.removeClass("in-scrolling")}),t=o=null},A=function(e,t){var o=s.scrollTop();if(0===e){if(!c)return!1;if(0===o&&t>0||o>=p-u&&0>t)return!l.wheelPropagation}var r=s.scrollLeft();if(0===t){if(!a)return!1;if(0===r&&0>e||r>=d-i&&e>0)return!l.wheelPropagation}return!0},B=function(){l.wheelSpeed/=10;var e=!1;s.bind("mousewheel"+D,function(t,o,r,n){var i=t.deltaX*t.deltaFactor||r,u=t.deltaY*t.deltaFactor||n;e=!1,l.useBothWheelAxes?c&&!a?(u?s.scrollTop(s.scrollTop()-u*l.wheelSpeed):s.scrollTop(s.scrollTop()+i*l.wheelSpeed),e=!0):a&&!c&&(i?s.scrollLeft(s.scrollLeft()+i*l.wheelSpeed):s.scrollLeft(s.scrollLeft()-u*l.wheelSpeed),e=!0):(s.scrollTop(s.scrollTop()-u*l.wheelSpeed),s.scrollLeft(s.scrollLeft()+i*l.wheelSpeed)),E(),e=e||A(i,u),e&&(t.stopPropagation(),t.preventDefault())}),s.bind("MozMousePixelScroll"+D,function(t){e&&t.preventDefault()})},F=function(){var t=!1;s.bind("mouseenter"+D,function(){t=!0}),s.bind("mouseleave"+D,function(){t=!1});var o=!1;e(document).bind("keydown"+D,function(r){if(!(r.isDefaultPrevented&&r.isDefaultPrevented()||!t||e(document.activeElement).is(":input,[contenteditable]"))){var n=0,l=0;switch(r.which){case 37:n=-30;break;case 38:l=30;break;case 39:n=30;break;case 40:l=-30;break;case 33:l=90;break;case 32:case 34:l=-90;break;case 35:l=-u;break;case 36:l=u;break;default:return}s.scrollTop(s.scrollTop()-l),s.scrollLeft(s.scrollLeft()+n),o=A(n,l),o&&r.preventDefault()}})},H=function(){var e=function(e){e.stopPropagation()};T.bind("click"+D,e),m.bind("click"+D,function(e){var t=parseInt(v/2,10),o=e.pageY-m.offset().top-t,r=u-v,n=o/r;0>n?n=0:n>1&&(n=1),s.scrollTop((p-u)*n)}),w.bind("click"+D,e),g.bind("click"+D,function(e){var t=parseInt(f/2,10),o=e.pageX-g.offset().left-t,r=i-f,n=o/r;0>n?n=0:n>1&&(n=1),s.scrollLeft((d-i)*n)})},K=function(){var t=function(e,t){s.scrollTop(s.scrollTop()-t),s.scrollLeft(s.scrollLeft()-e),E()},o={},r=0,n={},l=null,a=!1;e(window).bind("touchstart"+D,function(){a=!0}),e(window).bind("touchend"+D,function(){a=!1}),s.bind("touchstart"+D,function(e){var t=e.originalEvent.targetTouches[0];o.pageX=t.pageX,o.pageY=t.pageY,r=(new Date).getTime(),null!==l&&clearInterval(l),e.stopPropagation()}),s.bind("touchmove"+D,function(e){if(!a&&1===e.originalEvent.targetTouches.length){var l=e.originalEvent.targetTouches[0],s={};s.pageX=l.pageX,s.pageY=l.pageY;var c=s.pageX-o.pageX,i=s.pageY-o.pageY;t(c,i),o=s;var u=(new Date).getTime(),d=u-r;d>0&&(n.x=c/d,n.y=i/d,r=u),e.preventDefault()}}),s.bind("touchend"+D,function(){clearInterval(l),l=setInterval(function(){return.01>Math.abs(n.x)&&.01>Math.abs(n.y)?(clearInterval(l),void 0):(t(30*n.x,30*n.y),n.x*=.8,n.y*=.8,void 0)},10)})},z=function(){s.bind("scroll"+D,function(){E()})},Q=function(){s.unbind(D),e(window).unbind(D),e(document).unbind(D),s.data("perfect-scrollbar",null),s.data("perfect-scrollbar-update",null),s.data("perfect-scrollbar-destroy",null),w.remove(),T.remove(),g.remove(),m.remove(),g=m=w=T=a=c=i=u=d=p=f=h=L=y=I=v=b=S=x=C=P=D=null},R=function(t){s.addClass("ie").addClass("ie"+t);var o=function(){var t=function(){e(this).addClass("hover")},o=function(){e(this).removeClass("hover")};s.bind("mouseenter"+D,t).bind("mouseleave"+D,o),g.bind("mouseenter"+D,t).bind("mouseleave"+D,o),m.bind("mouseenter"+D,t).bind("mouseleave"+D,o),w.bind("mouseenter"+D,t).bind("mouseleave"+D,o),T.bind("mouseenter"+D,t).bind("mouseleave"+D,o)},r=function(){j=function(){var e={left:h+s.scrollLeft(),width:f};y?e.bottom=L:e.top=I,w.css(e);var t={top:b+s.scrollTop(),height:v};x?t.right=S:t.left=C,T.css(t),w.hide().show(),T.hide().show()}};6===t&&(o(),r())},G="ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch,J=function(){var e=navigator.userAgent.toLowerCase().match(/(msie) ([\w.]+)/);e&&"msie"===e[1]&&R(parseInt(e[2],10)),E(),z(),O(),q(),H(),G&&K(),s.mousewheel&&B(),l.useKeyboard&&F(),s.data("perfect-scrollbar",s),s.data("perfect-scrollbar-update",E),s.data("perfect-scrollbar-destroy",Q)};return J(),s})}}); \ No newline at end of file diff --git a/public/javascripts/perfect-scrollbar.with-mousewheel.min.js b/public/javascripts/perfect-scrollbar.with-mousewheel.min.js new file mode 100644 index 0000000..ee02199 --- /dev/null +++ b/public/javascripts/perfect-scrollbar.with-mousewheel.min.js @@ -0,0 +1,4 @@ +/*! perfect-scrollbar - v0.4.11 +* http://noraesae.github.com/perfect-scrollbar/ +* Copyright (c) 2014 Hyeonje Alex Jun; Licensed MIT */ +(function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(jQuery)})(function(e){"use strict";var t={wheelSpeed:10,wheelPropagation:!1,minScrollbarLength:null,maxScrollbarLength:null,useBothWheelAxes:!1,useKeyboard:!0,suppressScrollX:!1,suppressScrollY:!1,scrollXMarginOffset:0,scrollYMarginOffset:0,includePadding:!1},o=function(){var e=0;return function(){var t=e;return e+=1,".perfect-scrollbar-"+t}}();e.fn.perfectScrollbar=function(n,r){return this.each(function(){var l=e.extend(!0,{},t),s=e(this);if("object"==typeof n?e.extend(!0,l,n):r=n,"update"===r)return s.data("perfect-scrollbar-update")&&s.data("perfect-scrollbar-update")(),s;if("destroy"===r)return s.data("perfect-scrollbar-destroy")&&s.data("perfect-scrollbar-destroy")(),s;if(s.data("perfect-scrollbar"))return s.data("perfect-scrollbar");s.addClass("ps-container");var a,i,c,u,d,p,f,h,v,b,g=e("
    ").appendTo(s),m=e("
    ").appendTo(s),w=e("
    ").appendTo(g),L=e("
    ").appendTo(m),T=parseInt(g.css("bottom"),10),y=T===T,x=y?null:parseInt(g.css("top"),10),S=parseInt(m.css("right"),10),I=S===S,P=I?null:parseInt(m.css("left"),10),D="rtl"===s.css("direction"),M=o(),C=parseInt(g.css("borderLeftWidth"),10)+parseInt(g.css("borderRightWidth"),10),X=parseInt(g.css("borderTopWidth"),10)+parseInt(g.css("borderBottomWidth"),10),Y=function(e,t){var o=e+t,n=u-v;b=0>o?0:o>n?n:o;var r=parseInt(b*(p-u)/(u-v),10);s.scrollTop(r),y?g.css({bottom:T-r}):g.css({top:x+r})},k=function(e,t){var o=e+t,n=c-f;h=0>o?0:o>n?n:o;var r=parseInt(h*(d-c)/(c-f),10);s.scrollLeft(r),I?m.css({right:S-r}):m.css({left:P+r})},W=function(e){return l.minScrollbarLength&&(e=Math.max(e,l.minScrollbarLength)),l.maxScrollbarLength&&(e=Math.min(e,l.maxScrollbarLength)),e},j=function(){var e={width:c,display:a?"inherit":"none"};e.left=D?s.scrollLeft()+c-d:s.scrollLeft(),y?e.bottom=T-s.scrollTop():e.top=x+s.scrollTop(),g.css(e);var t={top:s.scrollTop(),height:u,display:i?"inherit":"none"};I?t.right=D?d-s.scrollLeft()-S-L.outerWidth():S-s.scrollLeft():t.left=D?s.scrollLeft()+2*c-d-P-L.outerWidth():P+s.scrollLeft(),m.css(t),w.css({left:h,width:f-C}),L.css({top:b,height:v-X}),a?s.addClass("ps-active-x"):s.removeClass("ps-active-x"),i?s.addClass("ps-active-y"):s.removeClass("ps-active-y")},O=function(){c=l.includePadding?s.innerWidth():s.width(),u=l.includePadding?s.innerHeight():s.height(),d=s.prop("scrollWidth"),p=s.prop("scrollHeight"),!l.suppressScrollX&&d>c+l.scrollXMarginOffset?(a=!0,f=W(parseInt(c*c/d,10)),h=parseInt(s.scrollLeft()*(c-f)/(d-c),10)):(a=!1,f=0,h=0,s.scrollLeft(0)),!l.suppressScrollY&&p>u+l.scrollYMarginOffset?(i=!0,v=W(parseInt(u*u/p,10)),b=parseInt(s.scrollTop()*(u-v)/(p-u),10)):(i=!1,v=0,b=0,s.scrollTop(0)),b>=u-v&&(b=u-v),h>=c-f&&(h=c-f),j()},E=function(){var t,o;w.bind("mousedown"+M,function(e){o=e.pageX,t=w.position().left,g.addClass("in-scrolling"),e.stopPropagation(),e.preventDefault()}),e(document).bind("mousemove"+M,function(e){g.hasClass("in-scrolling")&&(k(t,e.pageX-o),e.stopPropagation(),e.preventDefault())}),e(document).bind("mouseup"+M,function(){g.hasClass("in-scrolling")&&g.removeClass("in-scrolling")}),t=o=null},H=function(){var t,o;L.bind("mousedown"+M,function(e){o=e.pageY,t=L.position().top,m.addClass("in-scrolling"),e.stopPropagation(),e.preventDefault()}),e(document).bind("mousemove"+M,function(e){m.hasClass("in-scrolling")&&(Y(t,e.pageY-o),e.stopPropagation(),e.preventDefault())}),e(document).bind("mouseup"+M,function(){m.hasClass("in-scrolling")&&m.removeClass("in-scrolling")}),t=o=null},A=function(e,t){var o=s.scrollTop();if(0===e){if(!i)return!1;if(0===o&&t>0||o>=p-u&&0>t)return!l.wheelPropagation}var n=s.scrollLeft();if(0===t){if(!a)return!1;if(0===n&&0>e||n>=d-c&&e>0)return!l.wheelPropagation}return!0},q=function(){l.wheelSpeed/=10;var e=!1;s.bind("mousewheel"+M,function(t,o,n,r){var c=t.deltaX*t.deltaFactor||n,u=t.deltaY*t.deltaFactor||r;e=!1,l.useBothWheelAxes?i&&!a?(u?s.scrollTop(s.scrollTop()-u*l.wheelSpeed):s.scrollTop(s.scrollTop()+c*l.wheelSpeed),e=!0):a&&!i&&(c?s.scrollLeft(s.scrollLeft()+c*l.wheelSpeed):s.scrollLeft(s.scrollLeft()-u*l.wheelSpeed),e=!0):(s.scrollTop(s.scrollTop()-u*l.wheelSpeed),s.scrollLeft(s.scrollLeft()+c*l.wheelSpeed)),O(),e=e||A(c,u),e&&(t.stopPropagation(),t.preventDefault())}),s.bind("MozMousePixelScroll"+M,function(t){e&&t.preventDefault()})},B=function(){var t=!1;s.bind("mouseenter"+M,function(){t=!0}),s.bind("mouseleave"+M,function(){t=!1});var o=!1;e(document).bind("keydown"+M,function(n){if(!(n.isDefaultPrevented&&n.isDefaultPrevented()||!t||e(document.activeElement).is(":input,[contenteditable]"))){var r=0,l=0;switch(n.which){case 37:r=-30;break;case 38:l=30;break;case 39:r=30;break;case 40:l=-30;break;case 33:l=90;break;case 32:case 34:l=-90;break;case 35:l=-u;break;case 36:l=u;break;default:return}s.scrollTop(s.scrollTop()-l),s.scrollLeft(s.scrollLeft()+r),o=A(r,l),o&&n.preventDefault()}})},F=function(){var e=function(e){e.stopPropagation()};L.bind("click"+M,e),m.bind("click"+M,function(e){var t=parseInt(v/2,10),o=e.pageY-m.offset().top-t,n=u-v,r=o/n;0>r?r=0:r>1&&(r=1),s.scrollTop((p-u)*r)}),w.bind("click"+M,e),g.bind("click"+M,function(e){var t=parseInt(f/2,10),o=e.pageX-g.offset().left-t,n=c-f,r=o/n;0>r?r=0:r>1&&(r=1),s.scrollLeft((d-c)*r)})},z=function(){var t=function(e,t){s.scrollTop(s.scrollTop()-t),s.scrollLeft(s.scrollLeft()-e),O()},o={},n=0,r={},l=null,a=!1;e(window).bind("touchstart"+M,function(){a=!0}),e(window).bind("touchend"+M,function(){a=!1}),s.bind("touchstart"+M,function(e){var t=e.originalEvent.targetTouches[0];o.pageX=t.pageX,o.pageY=t.pageY,n=(new Date).getTime(),null!==l&&clearInterval(l),e.stopPropagation()}),s.bind("touchmove"+M,function(e){if(!a&&1===e.originalEvent.targetTouches.length){var l=e.originalEvent.targetTouches[0],s={};s.pageX=l.pageX,s.pageY=l.pageY;var i=s.pageX-o.pageX,c=s.pageY-o.pageY;t(i,c),o=s;var u=(new Date).getTime(),d=u-n;d>0&&(r.x=i/d,r.y=c/d,n=u),e.preventDefault()}}),s.bind("touchend"+M,function(){clearInterval(l),l=setInterval(function(){return.01>Math.abs(r.x)&&.01>Math.abs(r.y)?(clearInterval(l),void 0):(t(30*r.x,30*r.y),r.x*=.8,r.y*=.8,void 0)},10)})},K=function(){s.bind("scroll"+M,function(){O()})},Q=function(){s.unbind(M),e(window).unbind(M),e(document).unbind(M),s.data("perfect-scrollbar",null),s.data("perfect-scrollbar-update",null),s.data("perfect-scrollbar-destroy",null),w.remove(),L.remove(),g.remove(),m.remove(),g=m=w=L=a=i=c=u=d=p=f=h=T=y=x=v=b=S=I=P=D=M=null},R=function(t){s.addClass("ie").addClass("ie"+t);var o=function(){var t=function(){e(this).addClass("hover")},o=function(){e(this).removeClass("hover")};s.bind("mouseenter"+M,t).bind("mouseleave"+M,o),g.bind("mouseenter"+M,t).bind("mouseleave"+M,o),m.bind("mouseenter"+M,t).bind("mouseleave"+M,o),w.bind("mouseenter"+M,t).bind("mouseleave"+M,o),L.bind("mouseenter"+M,t).bind("mouseleave"+M,o)},n=function(){j=function(){var e={left:h+s.scrollLeft(),width:f};y?e.bottom=T:e.top=x,w.css(e);var t={top:b+s.scrollTop(),height:v};I?t.right=S:t.left=P,L.css(t),w.hide().show(),L.hide().show()}};6===t&&(o(),n())},N="ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch,Z=function(){var e=navigator.userAgent.toLowerCase().match(/(msie) ([\w.]+)/);e&&"msie"===e[1]&&R(parseInt(e[2],10)),O(),K(),E(),H(),F(),N&&z(),s.mousewheel&&q(),l.useKeyboard&&B(),s.data("perfect-scrollbar",s),s.data("perfect-scrollbar-update",O),s.data("perfect-scrollbar-destroy",Q)};return Z(),s})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){function t(t){var s=t||window.event,a=i.call(arguments,1),c=0,u=0,d=0,p=0;if(t=e.event.fix(s),t.type="mousewheel","detail"in s&&(d=-1*s.detail),"wheelDelta"in s&&(d=s.wheelDelta),"wheelDeltaY"in s&&(d=s.wheelDeltaY),"wheelDeltaX"in s&&(u=-1*s.wheelDeltaX),"axis"in s&&s.axis===s.HORIZONTAL_AXIS&&(u=-1*d,d=0),c=0===d?u:d,"deltaY"in s&&(d=-1*s.deltaY,c=d),"deltaX"in s&&(u=s.deltaX,0===d&&(c=-1*u)),0!==d||0!==u){if(1===s.deltaMode){var f=e.data(this,"mousewheel-line-height");c*=f,d*=f,u*=f}else if(2===s.deltaMode){var h=e.data(this,"mousewheel-page-height");c*=h,d*=h,u*=h}return p=Math.max(Math.abs(d),Math.abs(u)),(!l||l>p)&&(l=p,n(s,p)&&(l/=40)),n(s,p)&&(c/=40,u/=40,d/=40),c=Math[c>=1?"floor":"ceil"](c/l),u=Math[u>=1?"floor":"ceil"](u/l),d=Math[d>=1?"floor":"ceil"](d/l),t.deltaX=u,t.deltaY=d,t.deltaFactor=l,t.deltaMode=0,a.unshift(t,c,u,d),r&&clearTimeout(r),r=setTimeout(o,200),(e.event.dispatch||e.event.handle).apply(this,a)}}function o(){l=null}function n(e,t){return u.settings.adjustOldDeltas&&"mousewheel"===e.type&&0===t%120}var r,l,s=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],a="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(e.event.fixHooks)for(var c=s.length;c;)e.event.fixHooks[s[--c]]=e.event.mouseHooks;var u=e.event.special.mousewheel={version:"3.1.9",setup:function(){if(this.addEventListener)for(var o=a.length;o;)this.addEventListener(a[--o],t,!1);else this.onmousewheel=t;e.data(this,"mousewheel-line-height",u.getLineHeight(this)),e.data(this,"mousewheel-page-height",u.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=a.length;e;)this.removeEventListener(a[--e],t,!1);else this.onmousewheel=null},getLineHeight:function(t){return parseInt(e(t)["offsetParent"in e.fn?"offsetParent":"parent"]().css("fontSize"),10)},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0}};e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})}); \ No newline at end of file diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index bc6913a..024d2fa 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -5028,220 +5028,6 @@ h1#agenda-title { height: 16px; padding-left: 18px; } -/* chat window {{{ */ - -#title-bar { - height: 25px; - width: 100%; - position: absolute; - background: #ccc url(/images/icons-app/chat-22x22.png) 2px 2px no-repeat; -} -#title-bar .title { - margin: 0; - font-size: 12px; - margin: 4px 0; - padding-left: 30px; -} -#buddy-list { - position: absolute; - bottom: 0; - top: 25px; - -webkit-top: 5px; - width: 250px; - overflow-y: scroll; -} -#buddy-list .buddy-list { - list-style-type: none; - padding: 0; - margin: 10px 0; -} -#buddy-list .buddy-list li { - line-height: 21px; -} -#buddy-list .buddy-list li a, .occupant-list li a { - background-position: 15px 50%; - padding-left: 30px; - display: block; - text-decoration: none; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; -} -#buddy-list #environment-logo { - text-align: center; - padding: 15px 0; -} -#buddy-list .buddy-list li.offline, .occupant-list li.offline { - display: none; -} -#buddy-list .toolbar { - border-left: 0; - border-right: 0; - background-position: 90%; - position: relative; - height: 20px; -} -#buddy-list .toolbar .dialog-error { - position: absolute; - top: 30px; - left: 10px; - padding: 5px; - width: 170px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background: white; - border: 1px solid #888; -} -#buddy-list .toolbar .dialog-error p { - margin: 0 0 5px 0; -} -#chat-window { - position: absolute; - bottom: 0; - right: 0; - top: 25px; - left: 250px; - background: white; -} -.conversation { - margin: 15px; -} -.conversation .input-div { - position: absolute; - left: 0; - right: 25px; - bottom: 40px; - padding: 0 20px 10px 15px; -} -.msie7 .conversation .input-div { - padding-left: 5px; - margin-right: 10px; -} -.conversation .input-div .icon-chat { - width: 16px; - height: 16px; - position: relative; - bottom: -23px; - left: 5px; -} -.msie7 .conversation .input-div .icon-chat { - left: 20px; -} -.conversation textarea { - height: 60px; - width: 100%; - padding-left: 25px; - overflow: auto; -} -.conversation .history { - position: absolute; - right: 0px; - top: 0px; - bottom: 125px; - left: 18px; - overflow-y: scroll; - padding-top: 5px; -} -.msie7 #chat-window .conversation .history { - overflow-x: hidden; -} -#chat .unread-messages { - background: red; - position: absolute; - right: 22px; - margin: 2px 0; - padding: 0 2px; - color: white; - display: block; - line-height: 1em; -} -#chat .tabs-bottom .ui-tabs-nav { - position: absolute; - left: 0; - bottom: 0; - right:0; - padding: 0 5px 10px 5px; - border: 0; - background: #eee; -} -#chat .tabs-bottom .ui-tabs-nav li { - top: 0; - margin-top: 0; - margin-bottom: 0; - border: 1px solid transparent; - border-top: none; -} -#chat .tabs-bottom .ui-tabs-nav li a { - padding: 0.3em 0.5em 0.3em 2.0em; - background-position: 0.5em 50%; -} -#chat .tabs-bottom .ui-tabs-nav li:hover, #chat .tabs-bottom .ui-tabs-nav .ui-state-active { - border: 1px solid #AAAAAA !important; - border-top: 0 !important; -} -#chat .tabs-bottom li .ui-icon-close { - margin: 0.4em 0.5em 0 0 !important; -} -#chat .ui-tabs .ui-tabs-panel { - border: none; -} -#chat-window .history .message { - padding: 0 50px 0 40px; - position: relative; -} -#chat-window .history .message .time { - position: absolute; - right: 10px; - top: 5px; - color: gray; - font-style: italic; - font-size: 11px; -} -#chat-window .history .message h5, #chat-window .history .message p { - margin: 0; -} -#chat-window .history .message p { - max-width: 100%; - overflow: auto; -} - -#chat-window .history .message .avatar { - position: absolute; - left: 0; - max-height: 32px; - max-width: 32px; - top: 10px; -} -#chat-window .history .notice { - font-size: 10px; - font-style: italic; - color: gray; - text-align: center; - display: block; -} -.conversation .occupant-list { - position: absolute; - top: 0; - right: 0; - width: 200px; - bottom: 125px; -} -.conversation .occupant-list ul { - padding: 0; - list-style: none; - font-size: 12px; -} -#chat-window .history.room { - right: 200px -} -#chat-window .comment-balloon-content { - min-height: 50px; - padding: 5px 0 5px 25px; - position: relative; -} -#chat-window .comment-wrapper-1 { - margin-left: 0; -} -/* chat window }}} */ #profile-activity ul, #profile-network ul, #profile-wall ul { padding-left: 0; diff --git a/public/stylesheets/chat.css b/public/stylesheets/chat.css new file mode 100644 index 0000000..dedbc1e --- /dev/null +++ b/public/stylesheets/chat.css @@ -0,0 +1,236 @@ +#chat { + width: 250px; +} + +#buddy-list { + background-color: #303030; + position: absolute; + bottom: 0; + top: 25px; + -webkit-top: 5px; + width: 250px; + overflow-y: auto; + right: 0; +} +#buddy-list .buddy-list { + list-style-type: none; + padding: 0; + margin: 0; +} +#buddy-list .buddy-list li { + line-height: 30px; + border-bottom: 1px solid #383838; +} +#buddy-list .buddy-list li a, .occupant-list li a { + background: none; + display: block; + padding-left: 30px; + padding-top: 10px; + text-decoration: none; + color: rgb(238, 238, 238); +} +#buddy-list .buddy-list li a .name, .occupant-list li a .name { + vertical-align: top; +} +#buddy-list .buddy-list li a img, .occupant-list li a img { + max-height: 32px; + max-width: 32px; +} +#buddy-list .buddy-list li.offline, .occupant-list li.offline { + display: none; +} +#buddy-list .toolbar { + border-left: 0; + border-right: 0; + background-position: 90%; + position: relative; + height: 20px; +} +#buddy-list .toolbar .dialog-error { + position: absolute; + top: 30px; + left: 10px; + padding: 5px; + width: 170px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + background: white; + border: 1px solid #888; +} +#buddy-list .toolbar .dialog-error p { + margin: 0 0 5px 0; +} +#chat-window { + background: white; +} +.conversation { + margin: 15px; +} +.conversation .input-div { + position: absolute; + right: 0; + bottom: 40px; + padding: 0 20px 10px 15px; +} +.msie7 .conversation .input-div { + padding-left: 5px; + margin-right: 10px; +} +.conversation .input-div .icon-chat { + width: 16px; + height: 16px; + position: relative; + bottom: -23px; + left: 5px; +} +.msie7 .conversation .input-div .icon-chat { + left: 20px; +} +.conversation textarea { + height: 60px; + padding-left: 25px; + overflow: auto; +} +.conversation .history { + position: absolute; + right: 0; + top: 25px; + bottom: 125px; + overflow: hidden; + padding-top: 5px; + width: 250px; + background-color: #303030; +} +.msie7 #chat-window .conversation .history { + overflow-x: hidden; +} +#chat .unread-messages { + background: red; + position: absolute; + right: 22px; + margin: 2px 0; + padding: 0 2px; + color: white; + display: block; + line-height: 1em; +} +#chat .tabs-bottom .ui-tabs-nav { + position: absolute; + left: 0; + bottom: 0; + right:0; + padding: 0 5px 10px 5px; + border: 0; + background: #eee; +} +#chat .tabs-bottom .ui-tabs-nav li { + top: 0; + margin-top: 0; + margin-bottom: 0; + border: 1px solid transparent; + border-top: none; +} +#chat .tabs-bottom .ui-tabs-nav li a { + padding: 0.3em 0.5em 0.3em 2.0em; + background-position: 0.5em 50%; +} +#chat .tabs-bottom .ui-tabs-nav li:hover, #chat .tabs-bottom .ui-tabs-nav .ui-state-active { + border: 1px solid #AAAAAA !important; + border-top: 0 !important; +} +#chat .tabs-bottom li .ui-icon-close { + margin: 0.4em 0.5em 0 0 !important; +} +#chat .ui-tabs .ui-tabs-panel { + border: none; +} +#chat-window .history .message { + padding: 0 10px; + /*position: relative;*/ +} +#chat-window .history .message .time { + position: absolute; + right: 10px; + top: 5px; + color: gray; + font-style: italic; + font-size: 11px; +} +#chat-window .history .message h5, #chat-window .history .message p { + margin: 0; +} +#chat-window .history .message p { + max-width: 100%; + overflow: auto; +} + +#chat-window .history .message .content { + background-color: #383838; + color: rgb(223, 223, 223); + padding: 5px; +} + +#chat-window .history .message .avatar { + max-height: 32px; + max-width: 32px; +} +#chat-window .history .notice { + font-size: 10px; + font-style: italic; + color: gray; + text-align: center; + display: block; +} +.conversation .occupant-list { + position: absolute; + top: 0; + right: 0; + width: 200px; + bottom: 125px; +} +.conversation .occupant-list ul { + padding: 0; + list-style: none; + font-size: 12px; +} +#chat-window .history.room { + right: 200px +} +#chat-window .comment-balloon-content { + min-height: 50px; + padding: 5px 0 5px 25px; + position: relative; +} +#chat-window .comment-wrapper-1 { + margin-left: 0; +} + +#title-bar { + top: 0; + height: 25px; + position: absolute; + background: #ccc url(/images/icons-app/chat-22x22.png) 2px 2px no-repeat; + width: 250px; + right: 0; +} +#title-bar .title { + margin: 0; + font-size: 12px; + margin: 4px 0; + padding-left: 30px; +} +#chat #chat-templates { + display: none; +} +.conversation .back { + position: absolute; + top: 5px; + right: 8px; + color: white; +} +#chat #chat-window .history .other-name { + color: #6C9EDD; +} +#chat #chat-window .history .self-name { + color: #6C87DD; +} diff --git a/public/stylesheets/perfect-scrollbar.min.css b/public/stylesheets/perfect-scrollbar.min.css new file mode 100644 index 0000000..44217d9 --- /dev/null +++ b/public/stylesheets/perfect-scrollbar.min.css @@ -0,0 +1,5 @@ +/*! perfect-scrollbar - v0.4.11 +* http://noraesae.github.com/perfect-scrollbar/ +* Copyright (c) 2014 Hyeonje Alex Jun; Licensed MIT */ + +.ps-container .ps-scrollbar-x-rail{position:absolute;bottom:3px;height:8px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;opacity:0;filter:alpha(opacity=0);-o-transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;-moz-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear}.ps-container:hover .ps-scrollbar-x-rail,.ps-container.hover .ps-scrollbar-x-rail{opacity:.6;filter:alpha(opacity=60)}.ps-container .ps-scrollbar-x-rail:hover,.ps-container .ps-scrollbar-x-rail.hover{background-color:#eee;opacity:.9;filter:alpha(opacity=90)}.ps-container .ps-scrollbar-x-rail.in-scrolling{background-color:#eee;opacity:.9;filter:alpha(opacity=90)}.ps-container .ps-scrollbar-y-rail{position:absolute;right:3px;width:8px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;opacity:0;filter:alpha(opacity=0);-o-transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;-moz-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear}.ps-container:hover .ps-scrollbar-y-rail,.ps-container.hover .ps-scrollbar-y-rail{opacity:.6;filter:alpha(opacity=60)}.ps-container .ps-scrollbar-y-rail:hover,.ps-container .ps-scrollbar-y-rail.hover{background-color:#eee;opacity:.9;filter:alpha(opacity=90)}.ps-container .ps-scrollbar-y-rail.in-scrolling{background-color:#eee;opacity:.9;filter:alpha(opacity=90)}.ps-container .ps-scrollbar-x{position:absolute;bottom:0;height:8px;background-color:#aaa;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-o-transition:background-color .2s linear;-webkit-transition:background-color.2s linear;-moz-transition:background-color .2s linear;transition:background-color .2s linear}.ps-container.ie6 .ps-scrollbar-x{font-size:0}.ps-container .ps-scrollbar-x-rail:hover .ps-scrollbar-x,.ps-container .ps-scrollbar-x-rail.hover .ps-scrollbar-x{background-color:#999}.ps-container .ps-scrollbar-y{position:absolute;right:0;width:8px;background-color:#aaa;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-o-transition:background-color .2s linear;-webkit-transition:background-color.2s linear;-moz-transition:background-color .2s linear;transition:background-color .2s linear}.ps-container.ie6 .ps-scrollbar-y{font-size:0}.ps-container .ps-scrollbar-y-rail:hover .ps-scrollbar-y,.ps-container .ps-scrollbar-y-rail.hover .ps-scrollbar-y{background-color:#999}.ps-container.ie .ps-scrollbar-x,.ps-container.ie .ps-scrollbar-y{visibility:hidden}.ps-container.ie:hover .ps-scrollbar-x,.ps-container.ie:hover .ps-scrollbar-y,.ps-container.ie.hover .ps-scrollbar-x,.ps-container.ie.hover .ps-scrollbar-y{visibility:visible} \ No newline at end of file -- libgit2 0.21.2