Skip to content

Commit ba8d04e

Browse files
committed
support for encoding. fixed #27
1 parent ae8fa38 commit ba8d04e

File tree

8 files changed

+165
-61
lines changed

8 files changed

+165
-61
lines changed

dist/angular-csv-import.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/*! angular-csv-import - v0.0.20 - 2015-09-22
2+
* Copyright (c) 2015 ; Licensed */
13
/*! angular-csv-import - v0.0.18 - 2015-09-04
24
* Copyright (c) 2015 ; Licensed */
35
'use strict';
@@ -15,21 +17,25 @@ csvImport.directive('ngCsvImport', function() {
1517
headerVisible: '=?',
1618
separator: '=?',
1719
separatorVisible: '=?',
18-
result: '=?'
20+
result: '=?',
21+
encoding: '=?',
22+
encodingVisible: '=?'
1923
},
2024
template: '<div><div ng-show="headerVisible"><div class="label">Header</div><input type="checkbox" ng-model="header"></div>'+
21-
'<div ng-show="separator && separatorVisible"><div class="label">Seperator</div><input type="text" ng-change="changeSeparator" ng-model="separator"></div>'+
25+
'<div ng-show="encoding && encodingVisible"><div class="label">Encoding</div><span>{{encoding}}</span></div>'+
26+
'<div ng-show="separator && separatorVisible"><div class="label">Seperator</div><span><input class="separator-input" type="text" ng-change="changeSeparator" ng-model="separator"><span></div>'+
2227
'<div><input class="btn cta gray" type="file"/></div></div>',
2328
link: function(scope, element) {
2429
scope.separatorVisible = scope.separatorVisible || false;
2530
scope.headerVisible = scope.headerVisible || false;
2631

27-
element.on('keyup', function(e){
32+
angular.element(element[0].querySelector('.separator-input')).on('keyup', function(e) {
2833
if ( scope.content != null ) {
2934
var content = {
3035
csv: scope.content,
3136
header: scope.header,
32-
separator: e.target.value
37+
separator: e.target.value,
38+
encoding: scope.encoding
3339
};
3440
scope.result = csvToJSON(content);
3541
scope.$apply();
@@ -46,15 +52,14 @@ csvImport.directive('ngCsvImport', function() {
4652
header: scope.header,
4753
separator: scope.separator
4854
};
49-
5055
scope.content = content.csv;
5156
scope.result = csvToJSON(content);
5257
scope.result.filename = scope.filename;
5358
});
5459
};
5560

5661
if ( (onChangeEvent.target.type === "file") && (onChangeEvent.target.files != null || onChangeEvent.srcElement.files != null) ) {
57-
reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0]);
62+
reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0], scope.encoding);
5863
} else {
5964
if ( scope.content != null ) {
6065
var content = {

dist/angular-csv-import.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.

examples/app/scripts/controllers/main.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@ angular.module('examplesApp')
55
$scope.csv = {
66
content: null,
77
header: true,
8+
headerVisible: true,
89
separator: ',',
9-
result: null
10+
separatorVisible: true,
11+
result: null,
12+
encoding: 'ISO-8859-1',
13+
encodingVisible: true,
1014
};
1115

1216
var _lastGoodResult = '';

examples/app/styles/main.css

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,19 @@ div.container {
1010
text-align: center;
1111
}
1212

13-
div.import {
14-
width: 300px;
13+
div.block.row {
14+
width: 100%;
15+
margin: 10px 0px;
1516
}
1617

17-
div.import>div {
18-
margin: 5px 0px;
18+
div.block.row > div {
19+
display: inline-block;
20+
vertical-align: middle;
21+
}
22+
23+
div.block.row > div.title {
24+
width: 30%;
25+
color: white;
1926
}
2027

2128
div.import>div>div.label {
@@ -32,17 +39,17 @@ div.import>div>input {
3239
margin: 5px 5px;
3340
}
3441

35-
div.import>div>input[type="text"] {
42+
43+
div.import > div> span {
44+
color: white;
45+
}
46+
47+
div.import > div> span > input[type="text"] {
3648
font-size: 18px;
3749
color: #d6492f;
38-
padding: 2px 5px;
3950
font-weight: bold;
40-
text-align: center;
41-
border-radius: 2px;
42-
width: 30px;
43-
}
44-
45-
div.import>div>input[type="file"] {
51+
border-radius: none;
52+
outline: none;
4653
}
4754

4855
div.import>div>input[type="file"] {
@@ -80,13 +87,6 @@ div.block {
8087
display: inline-block;
8188
vertical-align: middle;
8289
text-align: left;
83-
margin: 0px 50px;
84-
}
85-
86-
div.block>h2 {
87-
color: white;
88-
font-family: "Verdana";
89-
text-align:center;
9090
}
9191

9292
div.block.left {
@@ -107,23 +107,14 @@ div.block>div.content>pre {
107107
margin: 0;
108108
}
109109

110-
div.block.center {
111-
width: 200px;
112-
display: block;
113-
margin: 10px auto;
114-
}
115-
116-
div.block.right {
117-
}
118-
119-
120110
footer {
121111
}
122112

123113
footer>div {
124-
position: absolute;
125114
color: white;
126115
bottom: 40px;
116+
display: inline-block;
117+
margin: 0px 50px;
127118
}
128119

129120
footer>div a {
@@ -148,7 +139,7 @@ footer>div.twitter>div {
148139

149140
footer>div.twitter>div.avatar {
150141
margin: 0px 5px 0px 0px;
151-
background: url("../images/about.bahaaldine.png");
142+
background: url("https://avatars1.githubusercontent.com/u/820299?v=3&s=460");
152143
background-size: contain;
153144
border: solid 3px white;
154145
width: 40px;

examples/app/views/main.html

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
1-
<div class="block center">
2-
<ng-csv-import
3-
class="import"
4-
content="csv.content"
5-
header="csv.header"
6-
separator="csv.separator"
7-
result="csv.result"></ng-csv-import>
8-
</div>
91

10-
<div ng-if="csv.content" class="block left">
11-
<h2>CSV</h2>
12-
<div class="content"><pre>{{ csv.content }}</pre></div>
13-
</div>
2+
<div class="block row">
3+
<div class="title"><h4>Select your CSV file: </h4></div>
4+
<div class="block right">
5+
<ng-csv-import
6+
class="import"
7+
content="csv.content"
8+
header="csv.header"
9+
header-visible="csv.headerVisible"
10+
separator="csv.separator"
11+
separator-visible="csv.separatorVisible"
12+
result="csv.result"
13+
encoding="csv.encoding"
14+
encoding-visible="csv.encodingVisible"></ng-csv-import>
15+
</div>
16+
</div>
1417

15-
<div class="block right" ng-if="csv.result">
16-
<h2>JSON</h2>
17-
<div class="content" hljs source="toPrettyJSON(csv.result, 2)"></div>
18+
<div class="block row">
19+
<div class="title"><h4>See the results</h4></div>
20+
<div class="content" hljs source="toPrettyJSON(csv.result, 2)"></div>
1821
</div>
1922

23+
<!--div ng-if="csv.content" class="block left">
24+
<h2>CSV</h2>
25+
<div class="content"><pre>{{ csv.content }}</pre></div>
26+
</div-->
27+
2028
<footer>
2129
<div class="twitter">
2230
<div class="avatar"></div>

examples/source/source.csv

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
column1;column2;column3;column4;column5;column6;column7;column8
2+
row11;row21;row31;row41;row51;row61;row71;row81
3+
row12;row22;row32;row42;row52;row62;row72;row82
4+
row13;row23;row33;row43;row53;row63;row73;row83
5+
row14;row24;row34;row44;row54;row64;row74;row84
6+
row15;row25;row35;row45;row55;row65;row75;row85
7+
row16;row26;row36;row46;row56;row66;row76;row86
8+
row17;row27;row37;row47;row57;row67;row77;row87
9+
row18;row28;row38;row48;row58;row68;row78;row88
10+
row19;row29;row39;row49;row59;row69;row79;row89
11+
row20;row30;row40;row50;row60;row70;row80;row90
12+
row21;row31;row41;row51;row61;row71;row81;row91
13+
row22;row32;row42;row52;row62;row72;row82;row92
14+
row23;row33;row43;row53;row63;row73;row83;row93
15+
row24;row34;row44;row54;row64;row74;row84;row94
16+
row25;row35;row45;row55;row65;row75;row85;row95
17+
row26;row36;row46;row56;row66;row76;row86;row96
18+
row27;row37;row47;row57;row67;row77;row87;row97
19+
row28;row38;row48;row58;row68;row78;row88;row98
20+
row29;row39;row49;row59;row69;row79;row89;row99
21+
row30;row40;row50;row60;row70;row80;row90;row100
22+
row31;row41;row51;row61;row71;row81;row91;row101
23+
row32;row42;row52;row62;row72;row82;row92;row102
24+
row33;row43;row53;row63;row73;row83;row93;row103
25+
row34;row44;row54;row64;row74;row84;row94;row104
26+
row35;row45;row55;row65;row75;row85;row95;row105
27+
row36;row46;row56;row66;row76;row86;row96;row106
28+
row37;row47;row57;row67;row77;row87;row97;row107
29+
row38;row48;row58;row68;row78;row88;row98;row108
30+
row39;row49;row59;row69;row79;row89;row99;row109
31+
row40;row50;row60;row70;row80;row90;row100;row110
32+
row41;row51;row61;row71;row81;row91;row101;row111
33+
row42;row52;row62;row72;row82;row92;row102;row112
34+
row43;row53;row63;row73;row83;row93;row103;row113
35+
row44;row54;row64;row74;row84;row94;row104;row114
36+
row45;row55;row65;row75;row85;row95;row105;row115
37+
row46;row56;row66;row76;row86;row96;row106;row116
38+
row47;row57;row67;row77;row87;row97;row107;row117
39+
row48;row58;row68;row78;row88;row98;row108;row118
40+
row49;row59;row69;row79;row89;row99;row109;row119
41+
row50;row60;row70;row80;row90;row100;row110;row120
42+
row51;row61;row71;row81;row91;row101;row111;row121
43+
row52;row62;row72;row82;row92;row102;row112;row122
44+
row53;row63;row73;row83;row93;row103;row113;row123
45+
row54;row64;row74;row84;row94;row104;row114;row124
46+
row55;row65;row75;row85;row95;row105;row115;row125
47+
row56;row66;row76;row86;row96;row106;row116;row126
48+
row57;row67;row77;row87;row97;row107;row117;row127
49+
row58;row68;row78;row88;row98;row108;row118;row128
50+
row59;row69;row79;row89;row99;row109;row119;row129
51+
row60;row70;row80;row90;row100;row110;row120;row130
52+
row61;row71;row81;row91;row101;row111;row121;row131
53+
row62;row72;row82;row92;row102;row112;row122;row132
54+
row63;row73;row83;row93;row103;row113;row123;row133
55+
row64;row74;row84;row94;row104;row114;row124;row134
56+
row65;row75;row85;row95;row105;row115;row125;row135
57+
row66;row76;row86;row96;row106;row116;row126;row136
58+
row67;row77;row87;row97;row107;row117;row127;row137
59+
row68;row78;row88;row98;row108;row118;row128;row138
60+
row69;row79;row89;row99;row109;row119;row129;row139
61+
row70;row80;row90;row100;row110;row120;row130;row140
62+
row71;row81;row91;row101;row111;row121;row131;row141
63+
row72;row82;row92;row102;row112;row122;row132;row142
64+
row73;row83;row93;row103;row113;row123;row133;row143
65+
row74;row84;row94;row104;row114;row124;row134;row144
66+
row75;row85;row95;row105;row115;row125;row135;row145
67+
row76;row86;row96;row106;row116;row126;row136;row146
68+
row77;row87;row97;row107;row117;row127;row137;row147
69+
row78;row88;row98;row108;row118;row128;row138;row148
70+
row79;row89;row99;row109;row119;row129;row139;row149
71+
row80;row90;row100;row110;row120;row130;row140;row150
72+
row81;row91;row101;row111;row121;row131;row141;row151
73+
row82;row92;row102;row112;row122;row132;row142;row152
74+
row83;row93;row103;row113;row123;row133;row143;row153
75+
row84;row94;row104;row114;row124;row134;row144;row154

examples/source/source_es.csv

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
column1;column2;column3;column4;column5;column6;column7;column8
2+
row11;row21;row31;row41;row51;row61;row71;row81
3+
ni�o1;ni�o1;ni�o1;ni�o1;ni�o1;ni�o1;ni�o1;ni�o1
4+
ni�o2;ni�o2;ni�o2;ni�o2;ni�o2;ni�o2;ni�o2;ni�o2
5+
ni�o3;ni�o3;ni�o3;ni�o3;ni�o3;ni�o3;ni�o3;ni�o3
6+
ni�o4;ni�o4;ni�o4;ni�o4;ni�o4;ni�o4;ni�o4;ni�o4
7+
ni�o5;ni�o5;ni�o5;ni�o5;ni�o5;ni�o5;ni�o5;ni�o5
8+
ni�o6;ni�o6;ni�o6;ni�o6;ni�o6;ni�o6;ni�o6;ni�o6
9+
ni�o7;ni�o7;ni�o7;ni�o7;ni�o7;ni�o7;ni�o7;ni�o7
10+
ni�o8;ni�o8;ni�o8;ni�o8;ni�o8;ni�o8;ni�o8;ni�o8
11+
ni�o9;ni�o9;ni�o9;ni�o9;ni�o9;ni�o9;ni�o9;ni�o9
12+
ni�o10;ni�o10;ni�o10;ni�o10;ni�o10;ni�o10;ni�o10;ni�o10
13+
ni�o11;ni�o11;ni�o11;ni�o11;ni�o11;ni�o11;ni�o11;ni�o11
14+
ni�o12;ni�o12;ni�o12;ni�o12;ni�o12;ni�o12;ni�o12;ni�o12
15+
ni�o13;ni�o13;ni�o13;ni�o13;ni�o13;ni�o13;ni�o13;ni�o13
16+
ni�o14;ni�o14;ni�o14;ni�o14;ni�o14;ni�o14;ni�o14;ni�o14

lib/angular-csv-import.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/*! angular-csv-import - v0.0.18 - 2015-09-04
2+
* Copyright (c) 2015 ; Licensed */
13
'use strict';
24

35
var csvImport = angular.module('ngCsvImport', []);
@@ -13,21 +15,25 @@ csvImport.directive('ngCsvImport', function() {
1315
headerVisible: '=?',
1416
separator: '=?',
1517
separatorVisible: '=?',
16-
result: '=?'
18+
result: '=?',
19+
encoding: '=?',
20+
encodingVisible: '=?'
1721
},
1822
template: '<div><div ng-show="headerVisible"><div class="label">Header</div><input type="checkbox" ng-model="header"></div>'+
19-
'<div ng-show="separator && separatorVisible"><div class="label">Seperator</div><input type="text" ng-change="changeSeparator" ng-model="separator"></div>'+
23+
'<div ng-show="encoding && encodingVisible"><div class="label">Encoding</div><span>{{encoding}}</span></div>'+
24+
'<div ng-show="separator && separatorVisible"><div class="label">Seperator</div><span><input class="separator-input" type="text" ng-change="changeSeparator" ng-model="separator"><span></div>'+
2025
'<div><input class="btn cta gray" type="file"/></div></div>',
2126
link: function(scope, element) {
2227
scope.separatorVisible = scope.separatorVisible || false;
2328
scope.headerVisible = scope.headerVisible || false;
2429

25-
element.on('keyup', function(e){
30+
angular.element(element[0].querySelector('.separator-input')).on('keyup', function(e) {
2631
if ( scope.content != null ) {
2732
var content = {
2833
csv: scope.content,
2934
header: scope.header,
30-
separator: e.target.value
35+
separator: e.target.value,
36+
encoding: scope.encoding
3137
};
3238
scope.result = csvToJSON(content);
3339
scope.$apply();
@@ -44,15 +50,14 @@ csvImport.directive('ngCsvImport', function() {
4450
header: scope.header,
4551
separator: scope.separator
4652
};
47-
4853
scope.content = content.csv;
4954
scope.result = csvToJSON(content);
5055
scope.result.filename = scope.filename;
5156
});
5257
};
5358

5459
if ( (onChangeEvent.target.type === "file") && (onChangeEvent.target.files != null || onChangeEvent.srcElement.files != null) ) {
55-
reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0]);
60+
reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0], scope.encoding);
5661
} else {
5762
if ( scope.content != null ) {
5863
var content = {

0 commit comments

Comments
 (0)