diff --git a/zeppelin-web/Gruntfile.js b/zeppelin-web/Gruntfile.js index 906c1427289..2a83f7e33e2 100644 --- a/zeppelin-web/Gruntfile.js +++ b/zeppelin-web/Gruntfile.js @@ -354,6 +354,11 @@ module.exports = function (grunt) { cwd: '<%= yeoman.app %>', dest: '<%= yeoman.dist %>', src: ['app/**/*.html', 'components/**/*.html'] + }, { + expand: true, + cwd: 'bower_components/datatables/media/images', + src: '{,*/}*.{png,jpg,jpeg,gif}', + dest: '<%= yeoman.dist %>/images' }, { expand: true, cwd: '.tmp/images', diff --git a/zeppelin-web/bower.json b/zeppelin-web/bower.json index c5fc7ab9332..ebc0a8ba177 100644 --- a/zeppelin-web/bower.json +++ b/zeppelin-web/bower.json @@ -30,7 +30,9 @@ "ngtoast": "~2.0.0", "ng-focus-if": "~1.0.2", "bootstrap3-dialog": "bootstrap-dialog#~1.34.7", - "floatThead": "~1.3.2" + "floatThead": "~1.3.2", + "datatables.net-bs": "~1.10.11", + "datatables.net-buttons-bs": "~1.1.2" }, "devDependencies": { "angular-mocks": "1.5.0" diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph-results.html b/zeppelin-web/src/app/notebook/paragraph/paragraph-results.html index 77d74519795..612fdbd88f6 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph-results.html +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph-results.html @@ -13,6 +13,7 @@ -->
diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js index 599ed901fa6..6a878c498b1 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js @@ -1260,40 +1260,55 @@ angular.module('zeppelinWebApp') return '&#'+i.charCodeAt(0)+';'; }); } - html += ' '+formatTableContent(v)+''; + html += ' '+formatTableContent(v)+''; } html += ' '; } html += ' '; html += ''; - angular.element('#p' + $scope.paragraph.id + '_table').html(html); + var tableDomEl = angular.element('#p' + $scope.paragraph.id + '_table'); + tableDomEl.html(html); + var oTable = tableDomEl.children(1).DataTable({ + paging: false, + info: false, + autoWidth: false, + lengthChange: false, + searching: false, + dom: '<>' + }); + if ($scope.paragraph.result.msgTable.length > 10000) { - angular.element('#p' + $scope.paragraph.id + '_table').css('overflow', 'scroll'); - // set table height - var height = $scope.paragraph.config.graph.height; - angular.element('#p' + $scope.paragraph.id + '_table').css('height', height); + tableDomEl.css({ + 'overflow': 'scroll', + 'height': $scope.paragraph.config.graph.height + }); } else { + var dataTable = angular.element('#p' + $scope.paragraph.id + '_table .table'); dataTable.floatThead({ - scrollContainer: function (dataTable) { - return angular.element('#p' + $scope.paragraph.id + '_table'); + scrollContainer: function(dataTable) { + return tableDomEl; } }); - angular.element('#p' + $scope.paragraph.id + '_table .table').on('remove', function () { - angular.element('#p' + $scope.paragraph.id + '_table .table').floatThead('destroy'); + + dataTable.on('remove', function () { + dataTable.floatThead('destroy'); + }); + + tableDomEl.css({ + 'position': 'relative', + 'height': '100%' }); + tableDomEl.perfectScrollbar('destroy') + .perfectScrollbar({minScrollbarLength: 20}); - angular.element('#p' + $scope.paragraph.id + '_table').css('position', 'relative'); - angular.element('#p' + $scope.paragraph.id + '_table').css('height', '100%'); - angular.element('#p' + $scope.paragraph.id + '_table').perfectScrollbar('destroy'); - angular.element('#p' + $scope.paragraph.id + '_table').perfectScrollbar(); angular.element('.ps-scrollbar-y-rail').css('z-index', '1002'); // set table height var psHeight = $scope.paragraph.config.graph.height; - angular.element('#p' + $scope.paragraph.id + '_table').css('height', psHeight); - angular.element('#p' + $scope.paragraph.id + '_table').perfectScrollbar('update'); + tableDomEl.css('height', psHeight); + tableDomEl.perfectScrollbar('update'); } }; diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.css b/zeppelin-web/src/app/notebook/paragraph/paragraph.css index b4873cf562d..60f3d7fb3cf 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.css +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.css @@ -52,6 +52,21 @@ width: 100%; } +table.dataTable { + margin-top: 0px !important; + margin-bottom: 6px !important; +} + +table.dataTable.table-condensed > thead > tr > th { + padding-right: 28px; +} + +table.dataTable.table-condensed .sorting:after, +table.dataTable.table-condensed .sorting_asc:after, +table.dataTable.table-condensed .sorting_desc:after { + right: 12px; +} + .graphContainer { position: relative; margin-bottom: 5px; diff --git a/zeppelin-web/src/index.html b/zeppelin-web/src/index.html index 5c3a8ada71b..8332216a5ec 100644 --- a/zeppelin-web/src/index.html +++ b/zeppelin-web/src/index.html @@ -44,6 +44,8 @@ + + @@ -131,6 +133,14 @@ + + + + + + + +