Repository: ignite Updated Branches: refs/heads/master 58b504136 -> fe6bbab9a
IGNITE-6914. Web Console: Exporting large CSV files via file-saver library. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/fe6bbab9 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/fe6bbab9 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/fe6bbab9 Branch: refs/heads/master Commit: fe6bbab9aae4efaae84ed9ea0dd908f36c74f9c5 Parents: 58b5041 Author: alexdel <verba...@yandex.ru> Authored: Tue Nov 21 20:15:32 2017 +0700 Committer: Alexey Kuznetsov <akuznet...@apache.org> Committed: Tue Nov 21 20:15:32 2017 +0700 ---------------------------------------------------------------------- modules/web-console/frontend/app/app.js | 18 +++++++++--------- .../frontend/app/modules/sql/sql.controller.js | 4 ++-- .../frontend/app/services/LegacyUtils.service.js | 18 +++++------------- modules/web-console/frontend/package.json | 2 +- .../web-console/frontend/views/sql/sql.tpl.pug | 4 ++-- 5 files changed, 19 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/fe6bbab9/modules/web-console/frontend/app/app.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/app.js b/modules/web-console/frontend/app/app.js index 44454f6..ca678fc 100644 --- a/modules/web-console/frontend/app/app.js +++ b/modules/web-console/frontend/app/app.js @@ -142,23 +142,23 @@ angular.module('ignite-console', [ 'ngAnimate', 'ngSanitize', // Third party libs. - 'ngRetina', 'btford.socket-io', - 'mgcrea.ngStrap', - 'ui.router', - 'ui.router.state.events', - 'gridster', 'dndLists', + 'gridster', + 'mgcrea.ngStrap', + 'ngRetina', 'nvd3', + 'pascalprecht.translate', 'smart-table', 'treeControl', - 'pascalprecht.translate', 'ui.grid', - 'ui.grid.saveState', - 'ui.grid.selection', - 'ui.grid.resizeColumns', 'ui.grid.autoResize', 'ui.grid.exporter', + 'ui.grid.resizeColumns', + 'ui.grid.saveState', + 'ui.grid.selection', + 'ui.router', + 'ui.router.state.events', // Base modules. 'ignite-console.core', 'ignite-console.ace', http://git-wip-us.apache.org/repos/asf/ignite/blob/fe6bbab9/modules/web-console/frontend/app/modules/sql/sql.controller.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/sql/sql.controller.js b/modules/web-console/frontend/app/modules/sql/sql.controller.js index e97825c..ea0a06d 100644 --- a/modules/web-console/frontend/app/modules/sql/sql.controller.js +++ b/modules/web-console/frontend/app/modules/sql/sql.controller.js @@ -1652,7 +1652,7 @@ export default ['$rootScope', '$scope', '$http', '$q', '$timeout', '$interval', csvContent += cols.join(';') + '\n'; }); - LegacyUtils.download('application/octet-stream;charset=utf-8', fileName, escape(csvContent)); + LegacyUtils.download('text/csv', fileName, csvContent); }; /** @@ -1767,7 +1767,7 @@ export default ['$rootScope', '$scope', '$http', '$q', '$timeout', '$interval', }; $scope.scanAvailable = function(paragraph) { - return $scope.caches.length && !paragraph.loading; + return $scope.caches.length && !(paragraph.loading || paragraph.csvIsPreparing); }; $scope.scanTooltip = function(paragraph) { http://git-wip-us.apache.org/repos/asf/ignite/blob/fe6bbab9/modules/web-console/frontend/app/services/LegacyUtils.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/services/LegacyUtils.service.js b/modules/web-console/frontend/app/services/LegacyUtils.service.js index be593b0..b19bde3 100644 --- a/modules/web-console/frontend/app/services/LegacyUtils.service.js +++ b/modules/web-console/frontend/app/services/LegacyUtils.service.js @@ -15,6 +15,8 @@ * limitations under the License. */ +import saver from 'file-saver'; + // TODO: Refactor this service for legacy tables with more than one input field. export default ['IgniteLegacyUtils', ['IgniteErrorPopover', (ErrorPopover) => { function isDefined(v) { @@ -351,20 +353,10 @@ export default ['IgniteLegacyUtils', ['IgniteErrorPopover', (ErrorPopover) => { return !isEmpty; }, domainForStoreConfigured, - download(type, name, data) { - const file = document.createElement('a'); - - file.setAttribute('href', 'data:' + type + ';charset=utf-8,' + data); - file.setAttribute('download', name); - file.setAttribute('target', '_self'); - - file.style.display = 'none'; - - document.body.appendChild(file); - - file.click(); + download(type = 'application/octet-stream', name = 'file.txt', data = '') { + const file = new Blob([data], { type: `${type};charset=utf-8`}); - document.body.removeChild(file); + saver.saveAs(file, name, false); }, getQueryVariable(name) { const attrs = window.location.search.substring(1).split('&'); http://git-wip-us.apache.org/repos/asf/ignite/blob/fe6bbab9/modules/web-console/frontend/package.json ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/package.json b/modules/web-console/frontend/package.json index 49e69b4..18635f7 100644 --- a/modules/web-console/frontend/package.json +++ b/modules/web-console/frontend/package.json @@ -76,8 +76,8 @@ "html-loader": "0.4.5", "html-webpack-plugin": "2.29.0", "jquery": "3.2.1", - "json-loader": "0.5.7", "json-bigint": "0.2.3", + "json-loader": "0.5.7", "jszip": "3.1.4", "lodash": "4.17.4", "node-sass": "4.6.0", http://git-wip-us.apache.org/repos/asf/ignite/blob/fe6bbab9/modules/web-console/frontend/views/sql/sql.tpl.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/sql/sql.tpl.pug b/modules/web-console/frontend/views/sql/sql.tpl.pug index 44989e8..a53a082 100644 --- a/modules/web-console/frontend/views/sql/sql.tpl.pug +++ b/modules/web-console/frontend/views/sql/sql.tpl.pug @@ -204,7 +204,7 @@ mixin table-result-heading-scan button.btn.btn-primary.btn--with-icon( ng-click='exportCsv(paragraph)' - ng-disabled='paragraph.loading' + ng-disabled='paragraph.loading || paragraph.csvIsPreparing' bs-tooltip='' ng-attr-title='{{ scanTooltip(paragraph) }}' @@ -218,7 +218,7 @@ mixin table-result-heading-scan -var options = [{ text: "Export", click: 'exportCsv(paragraph)' }, { text: 'Export all', click: 'exportCsvAll(paragraph)' }] button.btn.dropdown-toggle.btn-primary( - ng-disabled='paragraph.loading' + ng-disabled='paragraph.loading || paragraph.csvIsPreparing' bs-dropdown=`${JSON.stringify(options)}`