@@ -7,7 +7,7 @@ const ora = require('ora')
7
7
const SVGO = require ( 'svgo/lib/svgo' )
8
8
9
9
const dist = path . resolve ( __dirname , 'dist' )
10
- const svgPath = path . resolve ( __dirname , 'ionicons/src' )
10
+ const svgPath = path . resolve ( __dirname , 'ionicons/src/svg ' )
11
11
12
12
const svgs = fs . readdirSync ( svgPath )
13
13
const svgo = new SVGO ( )
@@ -21,59 +21,77 @@ shell.config.silent = false
21
21
shell . rm ( '-rf' , dist )
22
22
shell . rm ( '-rf' , path . resolve ( __dirname , 'demo/dist' ) )
23
23
24
+ shell . exec ( `svgo ${ svgPath } /*.svg` , { silent :true } ) ;
25
+
24
26
const getSVGString = ( svg ) => {
25
27
return new Promise ( ( resolve , reject ) => {
28
+
26
29
let filepath = path . join ( svgPath , svg )
27
- fs . readFile ( filepath , { encoding : 'utf8' } , ( err , stream ) => {
28
- svgo . optimize ( stream , { path : filepath } )
29
- . then ( function ( result ) {
30
- resolve ( result . data ) ;
31
- } )
30
+ console . log ( chalk . yellow ( `proccess ${ svg } ...` ) )
31
+ fs . readFile ( filepath , { encoding : 'utf8' } , ( err , stream ) => {
32
+ try {
33
+ let newStream = sanitizeSVG ( stream )
34
+ resolve ( newStream )
35
+ } catch ( error ) {
36
+ reject ( newStream )
37
+ }
32
38
} )
33
39
} )
34
40
}
35
41
36
- const makeHumanReadable = ( name ) => {
37
- let array = name . split ( '-' )
38
- let tempArray = array . map ( elm => {
39
- return elm . charAt ( 0 ) . toUpperCase ( ) + elm . slice ( 1 )
40
- } )
41
- return tempArray . join ( ' ' )
42
- }
43
-
44
42
const sanitizeSVG = ( stream ) => {
43
+
45
44
let newStream = stream
45
+ . replace ( '<?xml version="1.0" encoding="utf-8"?>' , '' )
46
+ . replace ( '<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->' , '' )
47
+ . replace ( '<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->' , '' )
48
+ . replace ( '<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->' , '' )
46
49
. replace ( ' xmlns="http://www.w3.org/2000/svg"' , '' )
47
- . replace ( 'width=' , ':width=' )
48
- . replace ( 'height=' , ':height=' )
49
- . replace ( '512' , 'w' )
50
- . replace ( '512' , 'h' )
51
50
. replace ( '<style>.st0{fill:#010101}</style>' , '' )
52
51
. replace ( '<style>' , '<data-style>' )
53
52
. replace ( '</style>' , '</data-style>' )
54
- . replace ( '<svg' , '<svg viewBox="0 0 512 512" class="ion__svg"' )
53
+ . replace ( 'width="512" height="512"' , '' )
54
+ . replace ( '<svg' , '<svg :width="w" :height="h" class="ion__svg"' )
55
+
56
+ if ( newStream . indexOf ( 'viewBox="0 0 512 512"' ) < 0 ) {
57
+ newStream = newStream . replace ( '<svg' , '<svg viewBox="0 0 512 512" ' )
58
+ }
55
59
56
60
return newStream
57
61
}
58
62
63
+ const makeHumanReadable = ( name ) => {
64
+ let array = name . split ( '-' )
65
+ let tempArray = array . map ( elm => {
66
+ return elm . charAt ( 0 ) . toUpperCase ( ) + elm . slice ( 1 )
67
+ } )
68
+ return tempArray . join ( ' ' )
69
+ }
70
+
59
71
const generateTemplateData = ( ) => {
60
72
let templateData = [ ] ;
61
73
let promises = svgs . map ( svgPath => {
62
- let name = svgPath . slice ( 0 , - 4 )
63
- let readableName = makeHumanReadable ( name )
64
- let libraryName = readableName . split ( ' ' ) . join ( '' )
65
-
66
- return new Promise ( ( resolve , reject ) => {
67
- getSVGString ( svgPath ) . then ( ( result ) => {
68
- templateData . push ( {
69
- name : name ,
70
- readableName : readableName ,
71
- libraryName : libraryName + 'Icon' ,
72
- svg : sanitizeSVG ( result )
74
+ if ( svgPath . indexOf ( '.svg' ) >= 0 ) {
75
+ return new Promise ( ( resolve , reject ) => {
76
+ getSVGString ( svgPath ) . then ( ( result ) => {
77
+ try {
78
+ let name = svgPath . slice ( 0 , - 4 )
79
+ let readableName = makeHumanReadable ( name )
80
+ let libraryName = readableName . split ( ' ' ) . join ( '' )
81
+
82
+ templateData . push ( {
83
+ name : name ,
84
+ readableName : readableName ,
85
+ libraryName : libraryName + 'Icon' ,
86
+ svg : result
87
+ } )
88
+ resolve ( templateData ) ;
89
+ } catch ( error ) {
90
+ reject ( templateData )
91
+ }
73
92
} )
74
- resolve ( templateData ) ;
75
93
} )
76
- } )
94
+ }
77
95
} )
78
96
79
97
return new Promise ( ( resolve , reject ) => {
@@ -85,12 +103,12 @@ const generateTemplateData = () => {
85
103
86
104
const generateBuildFile = ( template , extension , templateData ) => {
87
105
return new Promise ( ( resolve , reject ) => {
88
- fs . readFile ( template , { encoding : 'utf8' } , ( err , componentFile ) => {
106
+ fs . readFile ( template , { encoding : 'utf8' } , ( err , componentFile ) => {
89
107
for ( data of templateData ) {
90
108
let component = mustache . render ( componentFile , data )
91
109
let filename = data . name + "." + extension
92
110
fs . writeFile ( path . resolve ( dist , filename ) , component , ( err ) => {
93
- if ( err ) {
111
+ if ( err ) {
94
112
reject ( err )
95
113
}
96
114
resolve ( )
@@ -105,7 +123,7 @@ const generatePluginFile = (template, templateData) => {
105
123
spinner . stop ( )
106
124
console . log ( chalk . yellow ( 'Generating plugin file...' ) )
107
125
spinner . start ( )
108
- fs . readFile ( template , { encoding : 'utf8' } , ( err , componentFile ) => {
126
+ fs . readFile ( template , { encoding : 'utf8' } , ( err , componentFile ) => {
109
127
let data = {
110
128
data : [ ]
111
129
} ;
@@ -114,7 +132,7 @@ const generatePluginFile = (template, templateData) => {
114
132
let component = mustache . render ( componentFile , data )
115
133
let filename = "ionicons.js"
116
134
fs . writeFile ( path . resolve ( dist , filename ) , component , ( err ) => {
117
- if ( err ) {
135
+ if ( err ) {
118
136
reject ( err )
119
137
}
120
138
spinner . stop ( )
@@ -131,7 +149,7 @@ const generateDemoAppFile = (template, templateData) => {
131
149
spinner . stop ( )
132
150
console . log ( chalk . yellow ( 'Generating demo App.vue file...' ) )
133
151
spinner . start ( )
134
- fs . readFile ( template , { encoding : 'utf8' } , ( err , componentFile ) => {
152
+ fs . readFile ( template , { encoding : 'utf8' } , ( err , componentFile ) => {
135
153
let data = {
136
154
data : [ ]
137
155
} ;
@@ -140,7 +158,7 @@ const generateDemoAppFile = (template, templateData) => {
140
158
let component = mustache . render ( componentFile , data )
141
159
let filename = "App.vue"
142
160
fs . writeFile ( path . resolve ( 'demo' , filename ) , component , ( err ) => {
143
- if ( err ) {
161
+ if ( err ) {
144
162
reject ( err )
145
163
}
146
164
spinner . stop ( )
@@ -158,7 +176,7 @@ const generateVersionFile = () => {
158
176
spinner . start ( )
159
177
return new Promise ( ( resolve , reject ) => {
160
178
fs . writeFile ( path . resolve ( 'dist' , `VERSION-${ VERSION } ` ) , `VERSION: ${ VERSION } ` , ( err ) => {
161
- if ( err ) {
179
+ if ( err ) {
162
180
reject ( err )
163
181
}
164
182
spinner . stop ( )
@@ -186,5 +204,8 @@ generateTemplateData().then((templateData) => {
186
204
] ) . then ( ( ) => {
187
205
spinner . stop ( )
188
206
console . log ( chalk . green ( 'Build completed: ' + templateData . length + ' icons' ) )
207
+ } ) . catch ( ( ) => {
208
+ spinner . stop ( )
209
+ console . log ( chalk . red ( 'Error when build templateData' ) )
189
210
} )
190
211
} )
0 commit comments