Skip to content

Commit 3191652

Browse files
committed
Fixes #15, No special template is needed
1 parent 74bc075 commit 3191652

File tree

5 files changed

+40
-48
lines changed

5 files changed

+40
-48
lines changed

bower.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ng-csv",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"main": "build/ng-csv.min.js",
55
"dependencies": {
66
"angular": "~1",
@@ -9,8 +9,5 @@
99
"devDependencies": {
1010
"angular-mocks": "~1",
1111
"angular-scenario": "~1"
12-
},
13-
"resolutions": {
14-
"angular": "~1"
1512
}
1613
}

build/ng-csv.js

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,14 @@ angular.module('ngCsv.services').
6666
var def = $q.defer();
6767

6868
var that = this;
69-
var csvContent = "data:text/csv;charset=utf-8,";
7069
var csv;
70+
var csvContent;
71+
72+
if(window.navigator.msSaveOrOpenBlob) {
73+
csvContent = "";
74+
}else{
75+
csvContent = "data:text/csv;charset=utf-8,";
76+
}
7177

7278
var dataPromise = $q.when(data).then(function (responseData)
7379
{
@@ -111,7 +117,11 @@ angular.module('ngCsv.services').
111117
csvContent += index < arrData.length ? dataString + "\n" : dataString;
112118
});
113119

114-
csv = encodeURI(csvContent);
120+
if(window.navigator.msSaveOrOpenBlob) {
121+
csv = csvContent;
122+
}else{
123+
csv = encodeURI(csvContent);
124+
}
115125
def.resolve(csv);
116126
});
117127

@@ -133,8 +143,6 @@ angular.module('ngCsv.directives').
133143
directive('ngCsv', ['$parse', '$q', 'CSV', function ($parse, $q, CSV) {
134144
return {
135145
restrict: 'AC',
136-
replace: true,
137-
transclude: true,
138146
scope: {
139147
data:'&ngCsv',
140148
filename:'@filename',
@@ -196,31 +204,31 @@ angular.module('ngCsv.directives').
196204
};
197205
}
198206
],
199-
template: '<div class="csv-wrap">' +
200-
'<div class="element" ng-transclude></div>' +
201-
'<a class="hidden-link" ng-hide="true" ng-href="{{ csv }}" download="{{ getFilename() }}"></a>' +
202-
'</div>',
203207
link: function (scope, element, attrs) {
204-
var subject = angular.element(element.children()[0]),
205-
link = angular.element(element.children()[1]);
206-
207208
function doClick() {
208-
link[0].href = "";
209-
link[0].click();
210-
link[0].href = scope.csv;
211-
link[0].click();
209+
if(window.navigator.msSaveOrOpenBlob) {
210+
var blob = new Blob([scope.csv],{
211+
type: "text/csv;charset=utf-8;"
212+
});
213+
navigator.msSaveBlob(blob, scope.getFilename());
214+
} else {
215+
var downloadLink = document.createElement("a");
216+
downloadLink.href = scope.csv;
217+
downloadLink.download = scope.getFilename();
218+
219+
document.body.appendChild(downloadLink);
220+
downloadLink.click();
221+
document.body.removeChild(downloadLink);
222+
}
223+
212224
}
213225

214-
subject.bind('click', function (e)
226+
element.bind('click', function (e)
215227
{
216228
scope.buildCSV().then(function(csv) {
217229
doClick();
218230
});
219231
scope.$apply();
220-
221-
if (!!scope.ngClick) {
222-
scope.ngClick();
223-
}
224232
});
225233
}
226234
};

build/ng-csv.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lazy_load.html

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,6 @@ <h1>ngCsv <small>example with lazy load</small></h1>
4545
};
4646

4747
$scope.getHeader = function () {return ["A", "B"]};
48-
49-
$scope.clickFn = function() {
50-
console.log("click click click");
51-
};
5248
});
5349
</script>
5450

src/ng-csv/directives/ng-csv.js

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ angular.module('ngCsv.directives').
88
directive('ngCsv', ['$parse', '$q', 'CSV', function ($parse, $q, CSV) {
99
return {
1010
restrict: 'AC',
11-
replace: true,
12-
transclude: true,
1311
scope: {
1412
data:'&ngCsv',
1513
filename:'@filename',
@@ -71,38 +69,31 @@ angular.module('ngCsv.directives').
7169
};
7270
}
7371
],
74-
template: '<div class="csv-wrap">' +
75-
'<div class="element" ng-transclude></div>' +
76-
'<a class="hidden-link" ng-hide="true" ng-href="{{ csv }}" download="{{ getFilename() }}"></a>' +
77-
'</div>',
7872
link: function (scope, element, attrs) {
79-
var subject = angular.element(element.children()[0]),
80-
link = angular.element(element.children()[1]);
81-
8273
function doClick() {
83-
link[0].href = "";
84-
link[0].click();
8574
if(window.navigator.msSaveOrOpenBlob) {
8675
var blob = new Blob([scope.csv],{
8776
type: "text/csv;charset=utf-8;"
8877
});
8978
navigator.msSaveBlob(blob, scope.getFilename());
9079
} else {
91-
link[0].href = scope.csv;
92-
link[0].click();
80+
var downloadLink = document.createElement("a");
81+
downloadLink.href = scope.csv;
82+
downloadLink.download = scope.getFilename();
83+
84+
document.body.appendChild(downloadLink);
85+
downloadLink.click();
86+
document.body.removeChild(downloadLink);
9387
}
88+
9489
}
9590

96-
subject.bind('click', function (e)
91+
element.bind('click', function (e)
9792
{
9893
scope.buildCSV().then(function(csv) {
9994
doClick();
10095
});
10196
scope.$apply();
102-
103-
if (!!scope.ngClick) {
104-
scope.ngClick();
105-
}
10697
});
10798
}
10899
};

0 commit comments

Comments
 (0)