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 @@
+
+
+
+
+
+
+
+