From 6ad5e86785cbc585824268ba065b8a37e7526458 Mon Sep 17 00:00:00 2001 From: Asaf David Date: Sat, 10 Oct 2015 22:35:03 +0300 Subject: [PATCH] Version bump --- bower.json | 2 +- build/ng-csv.js | 21 ++++++++++++++++++--- build/ng-csv.min.js | 4 ++-- package.json | 2 +- src/ng-csv/services/csv-service.js | 10 +++++----- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/bower.json b/bower.json index 965ccb3..f247d6b 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "ng-csv", - "version": "0.3.5", + "version": "0.3.6", "main": "build/ng-csv.min.js", "dependencies": { "angular": "~1", diff --git a/build/ng-csv.js b/build/ng-csv.js index 87f9aea..80432ec 100644 --- a/build/ng-csv.js +++ b/build/ng-csv.js @@ -130,6 +130,18 @@ angular.module('ngCsv.services'). arrData = responseData(); } + // Check if using keys as labels + if (angular.isDefined(options.label) && options.label && typeof options.label === 'boolean') { + var labelArray, labelString; + + labelArray = []; + angular.forEach(arrData[0], function(value, label) { + this.push(that.stringifyField(label, options)); + }, labelArray); + labelString = labelArray.join(options.fieldSep ? options.fieldSep : ","); + csvContent += labelString + EOL; + } + angular.forEach(arrData, function (oldRow, index) { var row = angular.copy(arrData[index]); var dataString, infoArray; @@ -208,7 +220,8 @@ angular.module('ngCsv.directives'). lazyLoad: '@lazyLoad', addByteOrderMarker: "@addBom", ngClick: '&', - charset: '@charset' + charset: '@charset', + label: '&csvLabel' }, controller: [ '$scope', @@ -239,6 +252,7 @@ angular.module('ngCsv.directives'). }; if (angular.isDefined($attrs.csvHeader)) options.header = $scope.$eval($scope.header); if (angular.isDefined($attrs.csvColumnOrder)) options.columnOrder = $scope.$eval($scope.columnOrder); + if (angular.isDefined($attrs.csvLabel)) options.label = $scope.$eval($scope.label); options.fieldSep = $scope.fieldSep ? $scope.fieldSep : ","; @@ -279,12 +293,13 @@ angular.module('ngCsv.directives'). navigator.msSaveBlob(blob, scope.getFilename()); } else { - var downloadLink = angular.element(''); + var downloadContainer = angular.element('
'); + var downloadLink = angular.element(downloadContainer.children()[0]); downloadLink.attr('href', window.URL.createObjectURL(blob)); downloadLink.attr('download', scope.getFilename()); downloadLink.attr('target', '_blank'); - $document.find('body').append(downloadLink); + $document.find('body').append(downloadContainer); $timeout(function () { downloadLink[0].click(); downloadLink.remove(); diff --git a/build/ng-csv.min.js b/build/ng-csv.min.js index 29bc5f2..94dcd7f 100644 --- a/build/ng-csv.min.js +++ b/build/ng-csv.min.js @@ -1,2 +1,2 @@ -/*! ng-csv 28-09-2015 */ -!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"]),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ngCsv"),angular.module("ngCsv.services").service("CSV",["$q",function(a){var b="\r\n",c="",d={"\\t":" ","\\b":"\b","\\v":" ","\\f":"\f","\\r":"\r"};this.stringifyField=function(a,b){return"locale"===b.decimalSep&&this.isFloat(a)?a.toLocaleString():"."!==b.decimalSep&&this.isFloat(a)?a.toString().replace(".",b.decimalSep):"string"==typeof a?(a=a.replace(/"/g,'""'),(b.quoteStrings||a.indexOf(",")>-1||a.indexOf("\n")>-1||a.indexOf("\r")>-1)&&(a=b.txtDelim+a+b.txtDelim),a):"boolean"==typeof a?a?"TRUE":"FALSE":a},this.isFloat=function(a){return+a===a&&(!isFinite(a)||Boolean(a%1))},this.stringify=function(d,e){var f=a.defer(),g=this,h="",i="",j=a.when(d).then(function(a){if(angular.isDefined(e.header)&&e.header){var d,j;d=[],angular.forEach(e.header,function(a){this.push(g.stringifyField(a,e))},d),j=d.join(e.fieldSep?e.fieldSep:","),i+=j+b}var k=[];angular.isArray(a)?k=a:angular.isFunction(a)&&(k=a()),angular.forEach(k,function(a,c){var d,f,h=angular.copy(k[c]);f=[];var j=e.columnOrder?e.columnOrder:h;angular.forEach(j,function(a){var b=e.columnOrder?h[a]:a;this.push(g.stringifyField(b,e))},f),d=f.join(e.fieldSep?e.fieldSep:","),i+=c");g.attr("href",a.URL.createObjectURL(d)),g.attr("download",b.getFilename()),g.attr("target","_blank"),e.find("body").append(g),f(function(){g[0].click(),g.remove()},null)}}c.bind("click",function(){b.buildCSV().then(function(){d()}),b.$apply()})}}}])}(window,document); \ No newline at end of file +/*! ng-csv 10-10-2015 */ +!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"]),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ngCsv"),angular.module("ngCsv.services").service("CSV",["$q",function(a){var b="\r\n",c="",d={"\\t":" ","\\b":"\b","\\v":" ","\\f":"\f","\\r":"\r"};this.stringifyField=function(a,b){return"locale"===b.decimalSep&&this.isFloat(a)?a.toLocaleString():"."!==b.decimalSep&&this.isFloat(a)?a.toString().replace(".",b.decimalSep):"string"==typeof a?(a=a.replace(/"/g,'""'),(b.quoteStrings||a.indexOf(",")>-1||a.indexOf("\n")>-1||a.indexOf("\r")>-1)&&(a=b.txtDelim+a+b.txtDelim),a):"boolean"==typeof a?a?"TRUE":"FALSE":a},this.isFloat=function(a){return+a===a&&(!isFinite(a)||Boolean(a%1))},this.stringify=function(d,e){var f=a.defer(),g=this,h="",i="",j=a.when(d).then(function(a){if(angular.isDefined(e.header)&&e.header){var d,j;d=[],angular.forEach(e.header,function(a){this.push(g.stringifyField(a,e))},d),j=d.join(e.fieldSep?e.fieldSep:","),i+=j+b}var k=[];if(angular.isArray(a)?k=a:angular.isFunction(a)&&(k=a()),angular.isDefined(e.label)&&e.label&&"boolean"==typeof e.label){var l,m;l=[],angular.forEach(k[0],function(a,b){this.push(g.stringifyField(b,e))},l),m=l.join(e.fieldSep?e.fieldSep:","),i+=m+b}angular.forEach(k,function(a,c){var d,f,h=angular.copy(k[c]);f=[];var j=e.columnOrder?e.columnOrder:h;angular.forEach(j,function(a){var b=e.columnOrder?h[a]:a;this.push(g.stringifyField(b,e))},f),d=f.join(e.fieldSep?e.fieldSep:","),i+=c'),h=angular.element(g.children()[0]);h.attr("href",a.URL.createObjectURL(d)),h.attr("download",b.getFilename()),h.attr("target","_blank"),e.find("body").append(g),f(function(){h[0].click(),h.remove()},null)}}c.bind("click",function(){b.buildCSV().then(function(){d()}),b.$apply()})}}}])}(window,document); \ No newline at end of file diff --git a/package.json b/package.json index 5f9027f..67bc4a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ng-csv", - "version": "0.3.5", + "version": "0.3.6", "main": "build/ng-csv.min.js", "description": "Simple directive that turns arrays and objects into downloadable CSV files", "repository": { diff --git a/src/ng-csv/services/csv-service.js b/src/ng-csv/services/csv-service.js index 13a1a2b..3a42124 100644 --- a/src/ng-csv/services/csv-service.js +++ b/src/ng-csv/services/csv-service.js @@ -98,13 +98,13 @@ angular.module('ngCsv.services'). // Check if using keys as labels if (angular.isDefined(options.label) && options.label && typeof options.label === 'boolean') { - var encodingArray, labelString; - - encodingArray = []; + var labelArray, labelString; + + labelArray = []; angular.forEach(arrData[0], function(value, label) { this.push(that.stringifyField(label, options)); - }, encodingArray); - labelString = encodingArray.join(options.fieldSep ? options.fieldSep : ","); + }, labelArray); + labelString = labelArray.join(options.fieldSep ? options.fieldSep : ","); csvContent += labelString + EOL; }