Browse Source

Revert "HUE-7680 [frontend] Get rid of Nicescroll to improve general performances"

This reverts commit 569d7b35d004efa118968f451898c7021891a13c.

Conflicts:
	desktop/core/src/desktop/static/desktop/css/hue.css
	desktop/core/src/desktop/static/desktop/css/hue3-extra.css
Romain Rigaux 8 years ago
parent
commit
245cfab

+ 5 - 3
apps/metastore/src/metastore/templates/metastore.mako

@@ -364,7 +364,7 @@ ${ components.menubar(is_embeddable) }
 </script>
 
 <script type="text/html" id="metastore-databases">
-  <div class="actionbar-actions" data-bind="dockable: { scrollable: '${ MAIN_SCROLLABLE }', jumpCorrection: 5, topSnap: '${ TOP_SNAP }' }">
+  <div class="actionbar-actions" data-bind="dockable: { scrollable: '${ MAIN_SCROLLABLE }', nicescroll: true, jumpCorrection: 5, topSnap: '${ TOP_SNAP }' }">
     <input class="input-xlarge search-query margin-left-10" type="text" placeholder="${ _('Search for a database...') }" data-bind="clearable: databaseQuery, value: databaseQuery, valueUpdate: 'afterkeydown'"/>
     % if has_write_access:
       <button class="btn toolbarBtn margin-left-20" title="${_('Drop the selected databases')}" data-bind="click: function () { $('#dropDatabase').modal('show'); }, disable: selectedDatabases().length === 0"><i class="fa fa-times"></i>  ${_('Drop')}</button>
@@ -478,7 +478,7 @@ ${ components.menubar(is_embeddable) }
     <div class="row-fluid">
       <div class="span12 tile">
         <h4>${ _('Tables') }</h4>
-        <div class="actionbar-actions" data-bind="visible: tables().length > 0, dockable: { scrollable: '${ MAIN_SCROLLABLE }', jumpCorrection: 5, topSnap: '${ TOP_SNAP }' }">
+        <div class="actionbar-actions" data-bind="visible: tables().length > 0, dockable: { scrollable: '${ MAIN_SCROLLABLE }', nicescroll: true, jumpCorrection: 5, topSnap: '${ TOP_SNAP }' }">
           <input class="input-xlarge search-query margin-left-10" type="text" placeholder="${ _('Search for a table...') }" data-bind="clearable: tableQuery, value: tableQuery, valueUpdate: 'afterkeydown'"/>
           <button class="btn toolbarBtn margin-left-20" title="${_('Browse the selected table')}" data-bind="click: function () { setTable(selectedTables()[0]); selectedTables([]); }, disable: selectedTables().length !== 1"><i class="fa fa-eye"></i> ${_('View')}</button>
           <button class="btn toolbarBtn" title="${_('Query the selected table')}" data-bind="click: function () { IS_HUE_4 ? queryAndWatch('/notebook/browse/' + name + '/' + selectedTables()[0].name + '/', $root.sourceType()) : location.href = '/notebook/browse/' + name + '/' + selectedTables()[0].name; }, disable: selectedTables().length !== 1">
@@ -1183,7 +1183,7 @@ ${ components.menubar(is_embeddable) }
       </div>
       <div class="resizer" data-bind="visible: $root.isLeftPanelVisible() && $root.assistAvailable(), splitDraggable : { appName: 'notebook', leftPanelVisible: $root.isLeftPanelVisible }"><div class="resize-bar">&nbsp;</div></div>
       % endif
-      <div class="content-panel">
+      <div class="content-panel" ${ not is_embeddable and 'data-bind="niceScroll"' or ''}>
         <div class="metastore-main">
           <!-- ko hueSpinner: { spin: loading, center: true, size: 'xlarge' } --><!-- /ko -->
           <!-- ko ifnot: loading -->
@@ -1311,6 +1311,7 @@ ${ components.menubar(is_embeddable) }
 
       huePubSub.subscribe('metastore.scroll.to.top', function () {
         $('${ MAIN_SCROLLABLE }').scrollTop(0);
+        $('${ MAIN_SCROLLABLE }').getNiceScroll().resize();
       });
 
       huePubSub.subscribe('metastore.clear.selection', function () {
@@ -1381,6 +1382,7 @@ ${ components.menubar(is_embeddable) }
             });
           }
         }
+        $('${ MAIN_SCROLLABLE }').getNiceScroll().resize();
       });
 
       viewModel.scrollToColumn = function (col) {

File diff suppressed because it is too large
+ 0 - 0
desktop/core/src/desktop/static/desktop/css/hue.css


File diff suppressed because it is too large
+ 0 - 0
desktop/core/src/desktop/static/desktop/css/hue3-extra.css


File diff suppressed because it is too large
+ 1 - 0
desktop/core/src/desktop/static/desktop/ext/js/jquery/plugins/jquery.nicescroll.min.js


+ 18 - 0
desktop/core/src/desktop/static/desktop/js/hue.utils.js

@@ -345,6 +345,24 @@ if (!('addRule' in CSSStyleSheet.prototype)) {
     }
   };
 
+  hueUtils.initNiceScroll = function ($el, options) {
+    var defaults = {
+      cursorcolor: "#7D7D7D",
+      cursorborder: "1px solid #7D7D7D",
+      cursoropacitymin: 0,
+      cursoropacitymax: navigator.platform.indexOf('Win') > -1 ? 1: 0.7,
+      mousescrollstep: 60,
+      cursorwidth: "6px",
+      railpadding: { top: 1, right: 1, left: 1, bottom: 1 },
+      hidecursordelay: 0,
+      scrollspeed: 100,
+      cursorminheight: 20,
+      horizrailenabled: true,
+      autohidemode: "leave"
+    };
+    return $el.niceScroll($.extend(defaults, options || {}));
+  };
+
   hueUtils.equalIgnoreCase = function (a, b) {
     return a && b && a.toLowerCase() === b.toLowerCase();
   };

+ 5 - 0
desktop/core/src/desktop/static/desktop/js/jquery.filechooser.js

@@ -450,6 +450,11 @@
 
         $('<div>').addClass('clearfix').appendTo($(_parent.element).find('.filechooser-tree'));
 
+        if (typeof $.nicescroll !== 'undefined') {
+          hueUtils.initNiceScroll($scrollingBreadcrumbs, {railhoffset: {top: 2}});
+          $scrollingBreadcrumbs.parents('.modal').find('.nicescroll-rails-vr').remove();
+        }
+
         var resizeBreadcrumbs = window.setInterval(function(){
           if ($homeBreadcrumb.is(':visible') && $homeBreadcrumb.width() > 0){
             window.clearInterval(resizeBreadcrumbs);

+ 55 - 1
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -339,6 +339,8 @@
 
       $element.hueAutocomplete(options);
 
+      ko.bindingHandlers.niceScroll.init($element.data('custom-hueAutocomplete').menu.element, function () {});
+
       var enableAutocomplete = function () {
         if ($element.data('custom-hueAutocomplete')) {
           $element.hueAutocomplete("option", "disabled", false);
@@ -1931,6 +1933,9 @@
             }
           });
         }
+        if ($.fn.niceScroll) {
+          $('.assist-flex-fill').getNiceScroll().resize();
+        }
       };
 
       resizeByRatio();
@@ -2031,6 +2036,9 @@
               panelRatios[panelDefinitions()[idx].type] = $(panel).outerHeight(true) / totalHeightForPanels;
             });
             apiHelper.setInTotalStorage('assist', 'innerPanelRatios', panelRatios);
+            if ($.fn.niceScroll) {
+              $('.assist-flex-fill').getNiceScroll().resize();
+            }
           }
         });
       });
@@ -5387,6 +5395,7 @@
             });
           });
 
+      var withNiceScroll = !options.disableNiceScroll;
       var $wrapper = $element.parent();
       if (!$wrapper.hasClass('foreach-wrapper')) {
         $wrapper = $('<div>').css({
@@ -5398,6 +5407,20 @@
           'top': 0,
           'width': '100%'
         }).appendTo($wrapper);
+
+        if ($.fn.niceScroll && withNiceScroll) {
+          hueUtils.initNiceScroll($container, {
+            horizrailenabled: false,
+            nativeparentscrolling: false,
+            enablescrollonselection: false // foreachVisible might dispose of elements on scroll
+          });
+        }
+      } else {
+        window.setTimeout(function(){
+          if ($.fn.niceScroll && withNiceScroll) {
+            $container.getNiceScroll().resize();
+          }
+        }, 200);
       }
 
       // This is kept up to date with the currently rendered elements, it's used to keep track of any
@@ -5422,6 +5445,9 @@
           totalHeight += height;
         });
         $wrapper.height(totalHeight + 'px');
+        if ($.fn.niceScroll) {
+          $container.getNiceScroll().resize();
+        }
       };
       resizeWrapper();
 
@@ -5781,6 +5807,23 @@
     }
   };
 
+  ko.bindingHandlers.niceScroll = {
+    init: function (element, valueAccessor, allBindings) {
+      var options = valueAccessor() || {};
+      if ((typeof options.enable === 'undefined' || options.enable) && $.fn.niceScroll) {
+        hueUtils.initNiceScroll($(element), options);
+        $(element).addClass('nicescrollified');
+        huePubSub.subscribe('nicescroll.resize', function () {
+          $(element).getNiceScroll().resize();
+        });
+        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
+          $(element).getNiceScroll().remove();
+        });
+      }
+    }
+  };
+
+
   ko.bindingHandlers.plotly = {
     init: function (element, valueAccessor, allBindings) {
       var options = valueAccessor() || {};
@@ -5823,7 +5866,18 @@
         }
       }
 
-      $(scrollable).on('scroll', dock);
+      if (options.nicescroll) {
+        var checkForNicescrollInit = -1;
+        checkForNicescrollInit = window.setInterval(function () {
+          if ($(scrollable).hasClass('nicescrollified')) {
+            window.clearTimeout(checkForNicescrollInit);
+            $(scrollable).on('scroll', dock);
+          }
+        }, 200);
+      }
+      else {
+        $(scrollable).on('scroll', dock);
+      }
 
       huePubSub.subscribe('scrollable.scroll.off', function (scrollElement) {
         if (scrollElement === scrollable) {

+ 1 - 5
desktop/core/src/desktop/static/desktop/less/hue-assist.less

@@ -791,14 +791,10 @@
 
 .context-popover-sample {
   text-align: left;
-  padding: 0;
+  padding: 3px;
   overflow: hidden;
   height: 100%;
 
-  .dataTables_wrapper {
-    overflow: auto;
-  }
-
   th {
     border-right: 1px solid @cui-gray-200;
   }

+ 4 - 0
desktop/core/src/desktop/static/desktop/less/hue-cross-version.less

@@ -508,6 +508,10 @@ ul.errorlist {
   background-color: @cui-gray-100;
 }
 
+.nicescroll-rails {
+  display: none;
+}
+
 .datepicker {
   z-index: 1051;
 }

+ 1 - 0
desktop/core/src/desktop/templates/common_header.mako

@@ -147,6 +147,7 @@ if USE_NEW_EDITOR.get():
   <script src="${ static('desktop/ext/js/jquery/plugins/jquery.total-storage.min.js') }"></script>
   <script src="${ static('desktop/ext/js/jquery/plugins/jquery.dataTables.1.8.2.min.js') }"></script>
   <script src="${ static('desktop/ext/js/jquery/plugins/jquery.form.js') }"></script>
+  <script src="${ static('desktop/ext/js/jquery/plugins/jquery.nicescroll.min.js') }"></script>
   <script src="${ static('desktop/js/jquery.huedatatable.js') }"></script>
   <script src="${ static('desktop/js/jquery.datatables.sorting.js') }"></script>
   <script src="${ static('desktop/ext/js/d3.v3.js') }"></script>

+ 6 - 0
desktop/core/src/desktop/templates/hue.mako

@@ -435,8 +435,12 @@ ${ commonshare() | n,unicode }
 <script src="${ static('desktop/ext/js/jquery/plugins/jquery.dataTables.1.8.2.min.js') }"></script>
 <script src="${ static('desktop/ext/js/jquery/plugins/jquery.form.js') }"></script>
 <script src="${ static('desktop/js/jquery.datatables.sorting.js') }"></script>
+
 <script src="${ static('desktop/ext/js/jquery/plugins/jquery.basictable.min.js') }"></script>
 <script src="${ static('desktop/ext/js/jquery/plugins/jquery-ui-1.10.4.custom.min.js') }"></script>
+
+<script src="${ static('desktop/ext/js/jquery/plugins/jquery.nicescroll.min.js') }"></script>
+
 <script src="${ static('desktop/js/jquery.hiveautocomplete.js') }"></script>
 <script src="${ static('desktop/js/jquery.hdfsautocomplete.js') }"></script>
 <script src="${ static('desktop/js/jquery.filechooser.js') }"></script>
@@ -798,6 +802,7 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
           });
           $('.tooltip').hide();
           huePubSub.publish('hue.datatable.search.hide');
+          huePubSub.publish('nicescroll.resize');
           huePubSub.publish('hue.scrollleft.hide');
           huePubSub.publish('context.panel.visible', false);
           huePubSub.publish('context.panel.visible.editor', false);
@@ -1171,6 +1176,7 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
           hueAnalytics.convert('hue', 'rightAssistVisible/' + val)
           window.setTimeout(function () {
             huePubSub.publish('reposition.scroll.anchor.up');
+            huePubSub.publish('nicescroll.resize');
             huePubSub.publish('split.panel.resized');
             $(window).trigger('resize');
           }, 0);

+ 1 - 1
desktop/core/src/desktop/templates/hue_ace_autocompleter.mako

@@ -34,7 +34,7 @@ from desktop.views import _ko
           <div class="autocompleter-spinner"><!-- ko hueSpinner: { spin: suggestions.loading, size: 'small' } --><!-- /ko --></div>
         </div>
         <!-- /ko -->
-        <div class="autocompleter-entries" data-bind="foreach: suggestions.filtered">
+        <div class="autocompleter-entries" data-bind="foreach: suggestions.filtered, niceScroll">
           <div class="autocompleter-suggestion" data-bind="click: function () { $parent.selectedIndex($index()); $parent.insertSuggestion(); $parent.editor().focus(); },
               css: { 'selected': $index() === $parent.selectedIndex() },
               event: { 'mouseover': function () { $parent.hoveredIndex($index()); }, 'mouseout': function () { $parent.hoveredIndex(null); } }">

+ 14 - 10
desktop/core/src/desktop/templates/ko_components/ko_context_popover.mako

@@ -110,7 +110,7 @@ from metadata.conf import has_navigator
   </script>
 
   <script type="text/html" id="context-popover-column-details">
-    <div class="context-popover-flex-fill" data-bind="with: fetchedData">
+    <div class="context-popover-flex-fill" data-bind="with: fetchedData, nicescroll">
       <div>
         <div style="margin: 0 0 5px 10px;"><a class="pointer" data-bind="text: name, attr: { title: name }, click: function() { huePubSub.publish('context.popover.scroll.to.column', name); }"></a> <!-- ko if: typeof type !== 'undefined' -->(<span data-bind="text: type.indexOf('<') !== -1 ? type.substring(0, type.indexOf('<')) : type, attr: { title: type }"></span>)<!-- /ko --></div>
         <!-- ko if: typeof comment !== 'undefined' && comment !== '' && comment !== null -->
@@ -128,7 +128,7 @@ from metadata.conf import has_navigator
   </script>
 
   <script type="text/html" id="context-popover-complex-details">
-    <div class="context-popover-flex-fill" data-bind="with: fetchedData">
+    <div class="context-popover-flex-fill" data-bind="with: fetchedData, nicescroll">
       <div style="margin: 15px;">
         <a class="pointer" data-bind="visible: typeof sample !== 'undefined', text: name || $parents[2].title, attr: { title: name || $parents[2].title }, click: function() { huePubSub.publish('context.popover.scroll.to.column', name || $parents[2].title); }"></a>
         <span data-bind="visible: typeof sample === 'undefined', text: name || $parents[2].title, attr: { title: name || $parents[2].title }"></span> <!-- ko if: typeof type !== 'undefined' -->(<span data-bind="text: type.indexOf('<') !== -1 ? type.substring(0, type.indexOf('<')) : type, attr: { title: type }"></span>)<!-- /ko -->
@@ -169,7 +169,7 @@ from metadata.conf import has_navigator
   </script>
 
   <script type="text/html" id="context-popover-table-analysis">
-    <div class="context-popover-flex-fill" data-bind="with: fetchedData">
+    <div class="context-popover-flex-fill" data-bind="with: fetchedData, niceScroll">
       <!-- ko if: stats.length > 0 -->
         <table class="table table-condensed">
           <tbody data-bind="foreach: stats">
@@ -184,7 +184,7 @@ from metadata.conf import has_navigator
   </script>
 
   <script type="text/html" id="context-popover-column-analysis">
-    <div class="context-popover-flex-fill" data-bind="with: fetchedData">
+    <div class="context-popover-flex-fill" data-bind="with: fetchedData, niceScroll">
       <table class="table table-condensed">
         <tbody data-bind="foreach: stats">
           <tr>
@@ -212,7 +212,7 @@ from metadata.conf import has_navigator
   </script>
 
   <script type="text/html" id="context-popover-hdfs-details">
-    <div class="context-popover-flex-fill" data-bind="with: details">
+    <div class="context-popover-flex-fill" data-bind="with: details, niceScroll">
       <div style="padding: 8px">
         <div style="margin: 10px 10px 18px 10px;">
           <div data-bind="hdfsTree: { isS3: $data.path.indexOf('s3a://') === 0, path: $data.path, selectedPath: $parent.selectedPath }"></div>
@@ -222,7 +222,7 @@ from metadata.conf import has_navigator
   </script>
 
   <script type="text/html" id="context-popover-collection-stats-details">
-    <div class="context-popover-flex-fill">
+    <div class="context-popover-flex-fill" data-bind="niceScroll">
       <div style="padding: 8px">
         <div data-bind="with: stats">
         <!-- ko hueSpinner: { spin:  $parent.loadingStats, center: true, size: 'large' } --><!-- /ko -->
@@ -275,7 +275,7 @@ from metadata.conf import has_navigator
 
 
   <script type="text/html" id="context-popover-collection-terms-details">
-    <div class="context-popover-flex-fill">
+    <div class="context-popover-flex-fill" data-bind="niceScroll">
       <div style="padding: 8px">
         <div data-bind="with: terms">
           <!-- ko hueSpinner: { spin:  $parent.loadingTerms, center: true, size: 'large' } --><!-- /ko -->
@@ -315,7 +315,7 @@ from metadata.conf import has_navigator
     </div>
     <!-- /ko -->
     <!-- ko if: typeof details !== 'undefined' -->
-    <div class="context-popover-flex-fill" data-bind="with: details">
+    <div class="context-popover-flex-fill" data-bind="with: details, niceScroll">
       <div style="padding: 8px">
         <p style="margin: 10px 10px 18px 10px;"><span style="white-space: pre;" class="monospace" data-bind="text: signature"></span></p>
         <p><span data-bind="text: description"></span></p>
@@ -325,7 +325,7 @@ from metadata.conf import has_navigator
   </script>
 
   <script type="text/html" id="context-popover-table-partitions">
-    <div class="context-popover-flex-fill" data-bind="with: fetchedData">
+    <div class="context-popover-flex-fill" data-bind="with: fetchedData, niceScroll">
       <div class="context-popover-header">${_('Columns')}</div>
       <div>
         <table class="table table-condensed table-nowrap">
@@ -391,7 +391,7 @@ from metadata.conf import has_navigator
   </script>
 
   <script type="text/html" id="context-document-details">
-    <div class="context-popover-flex-fill" style="overflow: auto;">
+    <div class="context-popover-flex-fill" style="overflow: auto;" data-bind="niceScroll">
       <div style="padding: 8px">
         <!-- ko if: typeof documentContents() !== 'undefined' && typeof documentContents().snippets !== 'undefined' -->
 
@@ -751,6 +751,8 @@ from metadata.conf import has_navigator
           if ($t.length === 0) {
             return;
           }
+
+          $t.parents('.dataTables_wrapper').getNiceScroll().resize();
         }, 300);
 
         self.disposals.push(function () {
@@ -866,6 +868,8 @@ from metadata.conf import has_navigator
               huePubSub.removeAll('context.popover.resized');
             });
 
+            hueUtils.initNiceScroll($t.parents('.dataTables_wrapper'));
+
             if (data && data.rows) {
               var _tempData = [];
               $.each(data.rows, function (index, row) {

+ 1 - 1
desktop/core/src/desktop/templates/ko_components/ko_global_search.mako

@@ -46,7 +46,7 @@ from desktop.views import _ko
         <div>${ _('No results found.') }</div>
       <!-- /ko -->
       <!-- ko if: searchResultCategories().length > 0 -->
-      <div class="global-search-alternatives" data-bind="foreach: searchResultCategories">
+      <div class="global-search-alternatives" data-bind="foreach: searchResultCategories, niceScroll">
         <div class="global-search-category">
           <div class="global-search-category-header" data-bind="text: label"></div>
           <ul data-bind="foreach: result">

+ 2 - 2
desktop/core/src/desktop/templates/ko_components/ko_history_panel.mako

@@ -65,14 +65,14 @@ from desktop.views import _ko
         <!-- /ko -->
         <!-- ko if: result -->
         <pre data-bind="visible: result.logs() && result.logs().length == 0" class="logs logs-bigger">${ _('No logs available at this moment.') }</pre>
-        <pre data-bind="visible: result.logs() && result.logs().length > 0, text: result.logs, logScroller: result.logs, logScrollerVisibilityEvent: showLogs" class="logs logs-bigger logs-populated" style="height: 120px"></pre>
+        <pre data-bind="visible: result.logs() && result.logs().length > 0, text: result.logs, logScroller: result.logs, logScrollerVisibilityEvent: showLogs, niceScroll" class="logs logs-bigger logs-populated" style="height: 120px"></pre>
         <!-- /ko -->
         <!-- /ko -->
         <!-- /ko -->
       </div>
       <!-- ko if: history -->
       <hr>
-      <div class="notification-history margin-bottom-10">
+      <div class="notification-history margin-bottom-10" data-bind="niceScroll">
         <!-- ko if: history().length == 0 -->
         <span style="font-style: italic">${ _('No task history.') }</span>
         <!-- /ko -->

+ 1 - 1
desktop/libs/indexer/src/indexer/templates/importer.mako

@@ -737,7 +737,7 @@ ${ assist.assistPanel() }
               <!-- /ko -->
 
               <!-- ko ifnot: $root.createWizard.source.inputFormat() === 'manual' -->
-              <form class="form-inline inline-table" data-bind="foreachVisible: { data: columns, minHeight: 54, container: MAIN_SCROLLABLE }">
+              <form class="form-inline inline-table" data-bind="foreachVisible: { data: columns, minHeight: 54, container: MAIN_SCROLLABLE, disableNiceScroll: true }">
                 <!-- ko if: $parent.outputFormat() == 'table' && $root.createWizard.source.inputFormat() != 'rdbms' -->
                   <div data-bind="template: { name: 'table-field-template', data: $data }" class="margin-top-10 field"></div>
                 <!-- /ko -->

+ 1 - 1
desktop/libs/indexer/src/indexer/templates/indexes.mako

@@ -136,7 +136,7 @@ ${ assist.assistPanel() }
         </div>
         <div class="resizer" data-bind="visible: $root.isLeftPanelVisible() && $root.assistAvailable(), splitDraggable : { appName: 'notebook', leftPanelVisible: $root.isLeftPanelVisible }"><div class="resize-bar">&nbsp;</div></div>
         % endif
-        <div class="content-panel">
+        <div class="content-panel" ${ not is_embeddable and 'data-bind="niceScroll"' or ''}>
 
 
           <div class="indexer-main">

+ 1 - 1
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -617,7 +617,7 @@ ${ sqlSyntaxDropdown.sqlSyntaxDropdown() }
         </li>
       </ul>
       <pre data-bind="visible: result.logs() && result.logs().length == 0" class="logs logs-bigger">${ _('No logs available at this moment.') }</pre>
-      <pre data-bind="visible: result.logs() && result.logs().length > 0, text: result.logs, logScroller: result.logs, logScrollerVisibilityEvent: showLogs" class="logs logs-bigger logs-populated"></pre>
+      <pre data-bind="visible: result.logs() && result.logs().length > 0, text: result.logs, logScroller: result.logs, logScrollerVisibilityEvent: showLogs, niceScroll" class="logs logs-bigger logs-populated"></pre>
     </div>
     <div class="snippet-log-resizer" data-bind="visible: result.logs().length > 0, logResizer: {parent: '.snippet-log-container', target: '.logs-populated', mainScrollable: MAIN_SCROLLABLE, onStart: hideFixedHeaders, onResize: function(){ hideFixedHeaders(); redrawFixedHeaders(500); }, minHeight: 50}">
       <i class="fa fa-ellipsis-h"></i>

+ 1 - 0
ext/thirdparty/README.md

@@ -110,6 +110,7 @@ Checked-in frontend third party dependencies
 |jQuery Form Plugin|3.51.0-2014.06.20|MIT|https://github.com/malsup/form|
 |Gridster.js|0.7.0|MIT|https://github.com/dsmorse/gridster.js|
 |jQuery Hotkeys Plugin|0.2.0|MIT|https://github.com/jeresig/jquery.hotkeys|
+|Nicescroll|3.7.6|MIT|https://github.com/inuyaksa/jquery.nicescroll|
 |TotalStorage|1.1.3|MIT|https://github.com/Upstatement/jquery-total-storage|
 |TouchSwipe|1.6.18|MIT|https://github.com/mattbryson/TouchSwipe-Jquery-Plugin|
 |TouchSwipe|1.6.18|MIT|https://github.com/mattbryson/TouchSwipe-Jquery-Plugin|

Some files were not shown because too many files changed in this diff