You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by co...@apache.org on 2016/04/30 11:05:45 UTC
incubator-zeppelin git commit: [ZEPPELIN-672] Add feature to export
tables using Datatables
Repository: incubator-zeppelin
Updated Branches:
refs/heads/master c7b6eb6fb -> d481b56c5
[ZEPPELIN-672] Add feature to export tables using Datatables
### What is this PR for?
It is an extension of #6 #714
It allows user to export data in a paragraph to a TSV/CSV file.
### What type of PR is it?
Feature
### Todos
* [x] - Improves the current Table features like Search, Fixed Headers, Sorting
### Is there a relevant Jira issue?
[ZEPPELIN-672](https://issues.apache.org/jira/browse/ZEPPELIN-672)
### How should this be tested?
1. Create a paragraph with data in %table view
2. Click on TSV/CSV button to export CSV/TSV file
### Screenshots (if appropriate)
![image](https://cloud.githubusercontent.com/assets/1140475/13525760/4913bd8e-e229-11e5-9cd5-480c8b583d5b.png)
### Questions:
* Does the licenses files need update?
Need to have MIT license for Datatables.
* Is there breaking changes for older versions?
No
* Does this needs documentation?
No
Author: ankur_jain <an...@yash.com>
Author: Ankur Jain <an...@gmail.com>
Author: Damien CORNEAU <co...@gmail.com>
Closes #761 from ankurmitujjain/master and squashes the following commits:
4ddcc0f [Ankur Jain] Updated testcases for @corneadoug pull request
e6470aa [Ankur Jain] Merge pull request #1 from corneadoug/clean/dataframe
dd8901b [Damien CORNEAU] last fixes
5aca081 [Damien CORNEAU] Last Modifications
9c4412f [Damien CORNEAU] Remove buttons
2561630 [Ankur Jain] Updated for indent
c9b675d [Ankur Jain] Updated for indent
38ee3c3 [Ankur Jain] Updated for indent
b23cab4 [Ankur Jain] Updated for indent
09c87a0 [Ankur Jain] Updated for indent
e4b3abb [ankur_jain] Removed R.md accidentally added
d3aadc6 [ankur_jain] Updated testcase
210b7a6 [ankur_jain] Updates latest code of controller
80bd58c [ankur_jain] Merge branch 'upstream/master'
0ee76b1 [ankur_jain] Update 3 files
0c5f623 [ankur_jain] Revert "Merge branch 'upstream/master'"
adb66a3 [ankur_jain] Merge branch 'upstream/master'
6363e97 [ankur_jain] Merge branch 'master' of https://github.com/ankurmitujjain/incubator-zeppelin
0c94cab [ankur_jain] Merge branch 'master' of https://github.com/ankurmitujjain/incubator-zeppelin
d23202e [ankur_jain] Merge remote-tracking branch 'refs/remotes/origin/master' into apache/master
415c1f5 [ankur_jain] Merge branch 'apache/master'
7901f5e [ankur_jain] Merge branch 'refs/heads/master' into apache/master
6e6587b [ankur_jain] Updating codebase as per @prabhjyotsingh comments
aea8446 [ankur_jain] Merge branch 'apache/master'
df1620c [ankur_jain] Updated testcase as resultant paragraph have text of buttons and search box.
00b36e5 [ankur_jain] Reverted line 117 and 2122 as per previous code
9351a0d [ankur_jain] Committed for Datatables #6
Project: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/commit/d481b56c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/tree/d481b56c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/diff/d481b56c
Branch: refs/heads/master
Commit: d481b56c50d421d513d27adf0f72e516a40be944
Parents: c7b6eb6
Author: ankur_jain <an...@yash.com>
Authored: Mon Apr 18 11:12:01 2016 +0530
Committer: Damien CORNEAU <co...@gmail.com>
Committed: Sat Apr 30 18:05:33 2016 +0900
----------------------------------------------------------------------
zeppelin-web/Gruntfile.js | 5 +++
zeppelin-web/bower.json | 4 +-
.../notebook/paragraph/paragraph-results.html | 1 +
.../notebook/paragraph/paragraph.controller.js | 47 +++++++++++++-------
.../src/app/notebook/paragraph/paragraph.css | 15 +++++++
zeppelin-web/src/index.html | 10 +++++
6 files changed, 65 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/d481b56c/zeppelin-web/Gruntfile.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/Gruntfile.js b/zeppelin-web/Gruntfile.js
index ce62d8b..71bdf15 100644
--- a/zeppelin-web/Gruntfile.js
+++ b/zeppelin-web/Gruntfile.js
@@ -356,6 +356,11 @@ module.exports = function (grunt) {
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',
dest: '<%= yeoman.dist %>/images',
src: ['generated/*']
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/d481b56c/zeppelin-web/bower.json
----------------------------------------------------------------------
diff --git a/zeppelin-web/bower.json b/zeppelin-web/bower.json
index b5ec64e..b877303 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"
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/d481b56c/zeppelin-web/src/app/notebook/paragraph/paragraph-results.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph-results.html b/zeppelin-web/src/app/notebook/paragraph/paragraph-results.html
index 77d7451..612fdbd 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 @@ limitations under the License.
-->
<div
id="p{{paragraph.id}}_resize"
+ style='padding-bottom: 5px;'
resize='{"allowresize": "{{!asIframe && !viewOnly}}", "graphType": "{{getResultType()}}"}'
resizable on-resize="resizeParagraph(width, height);">
<div ng-include src="'app/notebook/paragraph/paragraph-graph.html'"></div>
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/d481b56c/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
index c71e096..0de6584 100644
--- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
+++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
@@ -1265,40 +1265,55 @@ angular.module('zeppelinWebApp')
return '&#'+i.charCodeAt(0)+';';
});
}
- html += ' <td>'+formatTableContent(v)+'</td>';
+ html += ' <td>'+formatTableContent(v)+'</td>';
}
html += ' </tr>';
}
html += ' </tbody>';
html += '</table>';
- 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');
}
};
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/d481b56c/zeppelin-web/src/app/notebook/paragraph/paragraph.css
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.css b/zeppelin-web/src/app/notebook/paragraph/paragraph.css
index b4873cf..60f3d7f 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;
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/d481b56c/zeppelin-web/src/index.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/index.html b/zeppelin-web/src/index.html
index f5be3ea..207320e 100644
--- a/zeppelin-web/src/index.html
+++ b/zeppelin-web/src/index.html
@@ -44,6 +44,8 @@ limitations under the License.
<link rel="stylesheet" href="bower_components/highlightjs/styles/github.css" />
<link rel="stylesheet" href="bower_components/ngtoast/dist/ngToast.css" />
<link rel="stylesheet" href="bower_components/bootstrap3-dialog/dist/css/bootstrap-dialog.min.css" />
+ <link rel="stylesheet" href="bower_components/datatables.net-bs/css/dataTables.bootstrap.css" />
+ <link rel="stylesheet" href="bower_components/datatables.net-buttons-bs/css/buttons.bootstrap.css" />
<!-- endbower -->
<link rel="stylesheet" href="bower_components/jquery-ui/themes/base/all.css" />
<!-- endbuild -->
@@ -132,6 +134,14 @@ limitations under the License.
<script src="bower_components/bootstrap3-dialog/dist/js/bootstrap-dialog.min.js"></script>
<script src="bower_components/floatThead/dist/jquery.floatThead.js"></script>
<script src="bower_components/floatThead/dist/jquery.floatThead.min.js"></script>
+ <script src="bower_components/datatables.net/js/jquery.dataTables.js"></script>
+ <script src="bower_components/datatables.net-bs/js/dataTables.bootstrap.js"></script>
+ <script src="bower_components/datatables.net-buttons/js/dataTables.buttons.js"></script>
+ <script src="bower_components/datatables.net-buttons/js/buttons.colVis.js"></script>
+ <script src="bower_components/datatables.net-buttons/js/buttons.flash.js"></script>
+ <script src="bower_components/datatables.net-buttons/js/buttons.html5.js"></script>
+ <script src="bower_components/datatables.net-buttons/js/buttons.print.js"></script>
+ <script src="bower_components/datatables.net-buttons-bs/js/buttons.bootstrap.js"></script>
<!-- endbower -->
<!-- endbuild -->
<!-- build:js({.tmp,src}) scripts/scripts.js -->