瀏覽代碼

HUE-4508 [editor] Search in result set is js erroring

Enrico Berti 9 年之前
父節點
當前提交
6d9284bef1

+ 33 - 22
desktop/core/src/desktop/static/desktop/js/jquery.huedatatable.js

@@ -81,7 +81,7 @@
           'right': '70px',
           'opacity': 0.85
         }).addClass('hueAnchor hue-datatable-search').appendTo($('body'));
-        search.html('<input type="text"> <i class="fa fa-chevron-down pointer muted"></i> <i class="fa fa-chevron-up pointer muted"></i> <i class="fa fa-times"></i>');
+        search.html('<input type="text"> <i class="fa fa-chevron-down pointer muted"></i> <i class="fa fa-chevron-up pointer muted"></i> &nbsp; <span></span> &nbsp; <i class="fa fa-times"></i>');
 
         search.find('.fa-times').on('click', function () {
           search.hide();
@@ -108,30 +108,40 @@
     }
 
     self.fnSearch = function (what) {
-      $('.hue-datatable-search').find('.fa-chevron-down').addClass('muted');
-      $('.hue-datatable-search').find('.fa-chevron-up').addClass('muted');
-      var coords = [];
       var $t = self.$table;
-      $t.data('searchCoords', []);
-      $t.data('searchCoordHighlighted', 0);
-      var data = self.$table.data('data');
-      data.forEach(function (row, rowIdx) {
-        row.forEach(function (fld, fldIdx) {
-          if ((fld + "").replace(/\&nbsp;/, ' ').toLowerCase().indexOf(what.toLowerCase()) > -1) {
-            coords.push({
-              row: rowIdx,
-              col: fldIdx
-            });
-          }
+      $t.find('.columnSelected').removeClass('columnSelected');
+      $t.data('scrollToCol', null);
+      $t.data('scrollToRow', null);
+
+      if (what !== '') {
+        $('.hue-datatable-search').find('span').text('');
+        $('.hue-datatable-search').find('.fa-chevron-down').addClass('muted');
+        $('.hue-datatable-search').find('.fa-chevron-up').addClass('muted');
+        var coords = [];
+        $t.data('searchCoords', []);
+        $t.data('searchCoordHighlighted', 0);
+        var data = self.$table.data('data');
+        data.forEach(function (row, rowIdx) {
+          row.forEach(function (fld, fldIdx) {
+            if ((fld + "").replace(/\&nbsp;/, ' ').toLowerCase().indexOf(what.toLowerCase()) > -1) {
+              coords.push({
+                row: rowIdx,
+                col: fldIdx
+              });
+            }
+          });
         });
-      });
-      $t.data('searchCoords', coords);
-      if (coords.length > 0) {
-        if ($('.hue-datatable-search').find('input').val() !== '') {
-          $('.hue-datatable-search').find('.fa-chevron-down').removeClass('muted');
-          $('.hue-datatable-search').find('.fa-chevron-up').removeClass('muted');
+        $t.data('searchCoords', coords);
+        if (coords.length > 0) {
+          if ($('.hue-datatable-search').find('input').val() !== '') {
+            $('.hue-datatable-search').find('.fa-chevron-down').removeClass('muted');
+            $('.hue-datatable-search').find('.fa-chevron-up').removeClass('muted');
+          }
+          self.fnScrollTo(coords[0].row, coords[0].col);
+        }
+        else {
+          $('.hue-datatable-search').find('span').text($t.data('oInit')['i18n'].NO_RESULTS);
         }
-        self.fnScrollTo(coords[0].row, coords[0].col);
       }
     };
 
@@ -157,6 +167,7 @@
 
     self.fnScrollTo = function (row, col) {
       var $t = self.$table;
+      $('.hue-datatable-search').find('span').text(($t.data('searchCoordHighlighted') + 1) + ' ' + $t.data('oInit')['i18n'].OF + ' ' + $t.data('searchCoords').length);
       var colSel = $t.find("tr th:nth-child(" + (col + 1) + ")");
       $t.parent().animate({
         scrollLeft: colSel.position().left + $t.parent().scrollLeft() - $t.parent().offset().left - 30

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

@@ -1216,7 +1216,7 @@ ${ hueIcons.symbols() }
         <!-- ko if: result.hasSomeResults -->
         <li data-bind="click: function(){ currentQueryTab('queryResults'); }, css: {'active': currentQueryTab() == 'queryResults'}">
           <a class="inactive-action" href="#queryResults" data-toggle="tab">${_('Results')}
-            <div class="inline-block inactive-action margin-left-10 pointer" title="${_('Search the results')}" data-bind="click: function(data, e){ $(e.target).parents('table').hueDataTable().fnShowSearch() }"><i class="snippet-icon fa fa-search"></i></div>
+            <div class="inline-block inactive-action margin-left-10 pointer" title="${_('Search the results')}" data-bind="click: function(data, e){ $(e.target).parents('.snippet').find('.resultTable').hueDataTable().fnShowSearch() }"><i class="snippet-icon fa fa-search"></i></div>
             <div class="inline-block inactive-action pointer" title="${_('Expand results')}" rel="tooltip" data-bind="visible: !$root.isFullscreenMode() && !$root.isPlayerMode(), click: function(){ $root.isPlayerMode(true); }"><i class="snippet-icon fa fa-expand"></i></div>
             <div class="inline-block inactive-action pointer" title="${_('Collapse results')}" rel="tooltip" data-bind="visible: !$root.isFullscreenMode() && $root.isPlayerMode(), click: function(){ $root.isPlayerMode(false); }"><i class="snippet-icon fa fa-compress"></i></div>
           </a>
@@ -2249,9 +2249,9 @@ ${ hueIcons.symbols() }
   function createHueDatatable(el, snippet, vm) {
     var DATATABLES_MAX_HEIGHT = 330;
     var _dt = $(el).hueDataTable({
-      oLanguage: {
-        "sEmptyTable": "${_('No data available')}",
-        "sZeroRecords": "${_('No matching records')}"
+      i18n: {
+        NO_RESULTS: "${_('No results found.')}",
+        OF: "${_('of')}"
       },
       fnDrawCallback: function (oSettings) {
         if (vm.editorMode()) {