(function (angular) {
|
'use strict';
|
|
angular.module('ngTableToCsv.directives')
|
.directive('exportCsv', ['$parse',
|
function ($parse) {
|
return {
|
restrict : 'A',
|
scope : false,
|
link : function (scope, element, attrs) {
|
var data = '';
|
var separator = attrs.separator ? attrs.separator : ',';
|
var ignoreSelector = attrs.exportCsvIgnore || '.ng-table-filters';
|
var csv = {
|
stringify : function (str) {
|
return '"' +
|
str.replace(/^\s\s*/, '').replace(/\s*\s$/, '') // trim spaces
|
.replace(/"/g, '""') + // replace quotes with double quotes
|
'"';
|
},
|
generate : function () {
|
data = '';
|
var rows = element.find('tr');
|
angular.forEach(rows, function (row, i) {
|
var tr = angular.element(row),
|
tds = tr.find('th'),
|
rowData = '';
|
if (tr.is(ignoreSelector)) {
|
return;
|
}
|
if (tds.length === 0) {
|
tds = tr.find('td');
|
}
|
angular.forEach(tds, function (td, i) {
|
var value = '';
|
td = angular.element(td);
|
if (!td.is(ignoreSelector)) {
|
value = angular.element(td).text();
|
}
|
rowData += csv.stringify(value) + separator;
|
});
|
rowData = rowData.slice(0, rowData.length - 1); //remove last separator
|
data += rowData + '\n';
|
});
|
},
|
link : function () {
|
return 'data:text/csv;charset=UTF-8,' + encodeURIComponent(data);
|
}
|
};
|
$parse(attrs.exportCsv).assign(scope.$parent, csv);
|
}
|
};
|
}
|
]);
|
})(angular);
|