@@ -36,6 +36,14 @@ angular.module('ngCsv.services').
36
36
var EOL = '\r\n' ;
37
37
var BOM = "\ufeff" ;
38
38
39
+ var specialChars = {
40
+ '\\t' : '\t' ,
41
+ '\\b' : '\b' ,
42
+ '\\v' : '\v' ,
43
+ '\\f' : '\f' ,
44
+ '\\r' : '\r'
45
+ } ;
46
+
39
47
/**
40
48
* Stringify one field
41
49
* @param data
@@ -94,7 +102,7 @@ angular.module('ngCsv.services').
94
102
var csvContent = "" ;
95
103
96
104
var dataPromise = $q . when ( data ) . then ( function ( responseData ) {
97
- responseData = angular . copy ( responseData ) ;
105
+ // responseData = angular.copy(responseData);//moved to row creation
98
106
// Check if there's a provided header array
99
107
if ( angular . isDefined ( options . header ) && options . header ) {
100
108
var encodingArray , headerString ;
@@ -117,7 +125,8 @@ angular.module('ngCsv.services').
117
125
arrData = responseData ( ) ;
118
126
}
119
127
120
- angular . forEach ( arrData , function ( row , index ) {
128
+ angular . forEach ( arrData , function ( oldRow , index ) {
129
+ var row = angular . copy ( arrData [ index ] ) ;
121
130
var dataString , infoArray ;
122
131
123
132
infoArray = [ ] ;
@@ -148,6 +157,27 @@ angular.module('ngCsv.services').
148
157
149
158
return def . promise ;
150
159
} ;
160
+
161
+ /**
162
+ * Helper function to check if input is really a special character
163
+ * @param input
164
+ * @returns {boolean }
165
+ */
166
+ this . isSpecialChar = function ( input ) {
167
+ return specialChars [ input ] !== undefined ;
168
+ } ;
169
+
170
+ /**
171
+ * Helper function to get what the special character was supposed to be
172
+ * since Angular escapes the first backslash
173
+ * @param input
174
+ * @returns {special character string }
175
+ */
176
+ this . getSpecialChar = function ( input ) {
177
+ return specialChars [ input ] ;
178
+ } ;
179
+
180
+
151
181
} ] ) ;
152
182
/**
153
183
* ng-csv module
@@ -200,8 +230,13 @@ angular.module('ngCsv.directives').
200
230
addByteOrderMarker : $scope . addByteOrderMarker
201
231
} ;
202
232
if ( angular . isDefined ( $attrs . csvHeader ) ) options . header = $scope . $eval ( $scope . header ) ;
233
+
234
+
203
235
options . fieldSep = $scope . fieldSep ? $scope . fieldSep : "," ;
204
236
237
+ // Replaces any badly formatted special character string with correct special character
238
+ options . fieldSep = CSV . isSpecialChar ( options . fieldSep ) ? CSV . getSpecialChar ( options . fieldSep ) : options . fieldSep ;
239
+
205
240
return options ;
206
241
}
207
242
0 commit comments