From 6053a5ee79d435ed4d073964692ce6193c267164 Mon Sep 17 00:00:00 2001 From: Asaf David Date: Wed, 26 Nov 2014 01:01:22 +0200 Subject: [PATCH] Fixes #66 --- build/ng-csv.js | 17 ++++++++++------- build/ng-csv.min.js | 2 +- example/index.html | 11 ++++++++--- src/ng-csv/services/csv-service.js | 17 ++++++++++------- 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/build/ng-csv.js b/build/ng-csv.js index c680304..218f70f 100644 --- a/build/ng-csv.js +++ b/build/ng-csv.js @@ -116,15 +116,18 @@ angular.module('ngCsv.services'). csvContent += index < arrData.length ? dataString + EOL : dataString; }); - if(window.navigator.msSaveOrOpenBlob) { - csv = csvContent; - }else{ + // IE uses the BLOB way so no need for DATA_URI_PREFIX + if(!window.navigator.msSaveOrOpenBlob) { csv = DATA_URI_PREFIX; - if (options.addByteOrderMarker){ - csv += BOM; - } - csv += csvContent; } + + // Add BOM if needed + if (options.addByteOrderMarker){ + csv += BOM; + } + + // Append the content and resolve. + csv += csvContent; def.resolve(csv); }); diff --git a/build/ng-csv.min.js b/build/ng-csv.min.js index c2ec9a9..e90e21f 100644 --- a/build/ng-csv.min.js +++ b/build/ng-csv.min.js @@ -1,2 +1,2 @@ /*! ng-csv 26-11-2014 */ -!function(a){angular.module("ngCsv.config",[]).value("ngCsv.config",{debug:!0}).config(["$compileProvider",function(a){angular.isDefined(a.urlSanitizationWhitelist)?a.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/):a.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/)}]),angular.module("ngCsv.directives",["ngCsv.services"]),angular.module("ngCsv.services",[]),angular.module("ngCsv",["ngCsv.config","ngCsv.services","ngCsv.directives","ngSanitize"]),angular.module("ngCsv.services").service("CSV",["$q",function(b){var c=encodeURIComponent("\r\n"),d="%ef%bb%bf",e="data:text/csv;charset=utf-8,";this.stringifyField=function(a,b,c){return"string"==typeof a?(a=a.replace(/"/g,'""'),(c||a.indexOf(",")>-1||a.indexOf("\n")>-1||a.indexOf("\r")>-1)&&(a=b+a+b),encodeURIComponent(a)):"boolean"==typeof a?a?"TRUE":"FALSE":a},this.stringify=function(f,g){var h,i=b.defer(),j=this,k="",l=b.when(f).then(function(b){if(b=angular.copy(b),angular.isDefined(g.header)&&g.header){var f,l;f=[],angular.forEach(g.header,function(a){this.push(j.stringifyField(a,g.txtDelim,g.quoteStrings))},f),l=f.join(g.fieldSep?g.fieldSep:","),k+=l+c}var m;m=angular.isArray(b)?b:b(),angular.forEach(m,function(a,b){var d,e;e=[],angular.forEach(a,function(a){this.push(j.stringifyField(a,g.txtDelim,g.quoteStrings))},e),d=e.join(g.fieldSep?g.fieldSep:","),k+=b");d.attr("href",b.csv),d.attr("download",b.getFilename()),e.find("body").append(d),f(function(){d[0].click(),d.remove()},null)}}c.bind("click",function(){b.buildCSV().then(function(){d()}),b.$apply()})}}}])}(window,document); \ No newline at end of file +!function(a){angular.module("ngCsv.config",[]).value("ngCsv.config",{debug:!0}).config(["$compileProvider",function(a){angular.isDefined(a.urlSanitizationWhitelist)?a.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/):a.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/)}]),angular.module("ngCsv.directives",["ngCsv.services"]),angular.module("ngCsv.services",[]),angular.module("ngCsv",["ngCsv.config","ngCsv.services","ngCsv.directives","ngSanitize"]),angular.module("ngCsv.services").service("CSV",["$q",function(b){var c=encodeURIComponent("\r\n"),d="%ef%bb%bf",e="data:text/csv;charset=utf-8,";this.stringifyField=function(a,b,c){return"string"==typeof a?(a=a.replace(/"/g,'""'),(c||a.indexOf(",")>-1||a.indexOf("\n")>-1||a.indexOf("\r")>-1)&&(a=b+a+b),encodeURIComponent(a)):"boolean"==typeof a?a?"TRUE":"FALSE":a},this.stringify=function(f,g){var h,i=b.defer(),j=this,k="",l=b.when(f).then(function(b){if(b=angular.copy(b),angular.isDefined(g.header)&&g.header){var f,l;f=[],angular.forEach(g.header,function(a){this.push(j.stringifyField(a,g.txtDelim,g.quoteStrings))},f),l=f.join(g.fieldSep?g.fieldSep:","),k+=l+c}var m;m=angular.isArray(b)?b:b(),angular.forEach(m,function(a,b){var d,e;e=[],angular.forEach(a,function(a){this.push(j.stringifyField(a,g.txtDelim,g.quoteStrings))},e),d=e.join(g.fieldSep?g.fieldSep:","),k+=b");d.attr("href",b.csv),d.attr("download",b.getFilename()),e.find("body").append(d),f(function(){d[0].click(),d.remove()},null)}}c.bind("click",function(){b.buildCSV().then(function(){d()}),b.$apply()})}}}])}(window,document); \ No newline at end of file diff --git a/example/index.html b/example/index.html index 0106f56..70933c0 100644 --- a/example/index.html +++ b/example/index.html @@ -2,8 +2,8 @@ - - + + @@ -28,6 +28,7 @@

ngCsv example

+ @@ -36,6 +37,10 @@

ngCsv example

ng-csv="getArray" csv-header="getHeader()" filename="{{ filename }}" field-separator="{{separator}}" ng-click="clickFn()">Export with ng-click + + @@ -50,7 +55,7 @@

ngCsv example

$scope.addRandomRow = function() { $scope.getArray.push({a: Math.floor((Math.random()*10)+1), b: Math.floor((Math.random()*10)+1)}); }; - + $scope.getHeader = function () {return ["A", "B"]}; $scope.clickFn = function() { diff --git a/src/ng-csv/services/csv-service.js b/src/ng-csv/services/csv-service.js index b2c3f99..9991f4a 100644 --- a/src/ng-csv/services/csv-service.js +++ b/src/ng-csv/services/csv-service.js @@ -87,15 +87,18 @@ angular.module('ngCsv.services'). csvContent += index < arrData.length ? dataString + EOL : dataString; }); - if(window.navigator.msSaveOrOpenBlob) { - csv = csvContent; - }else{ + // IE uses the BLOB way so no need for DATA_URI_PREFIX + if(!window.navigator.msSaveOrOpenBlob) { csv = DATA_URI_PREFIX; - if (options.addByteOrderMarker){ - csv += BOM; - } - csv += csvContent; } + + // Add BOM if needed + if (options.addByteOrderMarker){ + csv += BOM; + } + + // Append the content and resolve. + csv += csvContent; def.resolve(csv); });