8
8
*
9
9
*/
10
10
11
- var patternlab_engine = function ( grunt ) {
11
+ var patternlab_engine = function ( ) {
12
12
var path = require ( 'path' ) ,
13
+ fs = require ( 'fs-extra' ) ,
14
+ diveSync = require ( 'diveSync' ) ,
13
15
mustache = require ( 'mustache' ) ,
14
16
of = require ( './object_factory' ) ,
15
17
pa = require ( './pattern_assembler' ) ,
16
18
patternlab = { } ;
17
19
18
- patternlab . package = grunt . file . readJSON ( ' package.json') ;
19
- patternlab . config = grunt . file . readJSON ( ' config.json') ;
20
+ patternlab . package = fs . readJSONSync ( './ package.json') ;
21
+ patternlab . config = fs . readJSONSync ( './ config.json') ;
20
22
21
23
function getVersion ( ) {
22
- grunt . log . ok ( patternlab . package . version ) ;
24
+ console . log ( patternlab . package . version ) ;
23
25
}
24
26
25
27
function help ( ) {
26
- grunt . log . subhead ( 'Patternlab Node Help' ) ;
27
- grunt . log . writeln ( '===============================' ) ;
28
- grunt . log . writeln ( 'Command Line Arguments' ) ;
29
- grunt . log . writeln ( 'patternlab:only_patterns' ) ;
30
- grunt . log . writeln ( ' > Compiles the patterns only, outputting to ./public/patterns' ) ;
31
- grunt . log . writeln ( 'patternlab:v' ) ;
32
- grunt . log . writeln ( ' > Retrieve the version of patternlab-node you have installed' ) ;
33
- grunt . log . writeln ( 'patternlab:help' ) ;
34
- grunt . log . writeln ( ' > Get more information about patternlab-node, pattern lab in general, and where to report issues.' ) ;
35
- grunt . log . writeln ( '===============================' ) ;
36
- grunt . log . writeln ( 'Visit http://patternlab.io/docs/index.html for general help on pattern-lab' ) ;
37
- grunt . log . writeln ( 'Visit https://github.com/pattern-lab/patternlab-node/issues to open a bug.' ) ;
28
+ console . log ( 'Patternlab Node Help' ) ;
29
+ console . log ( '===============================' ) ;
30
+ console . log ( 'Command Line Arguments' ) ;
31
+ console . log ( 'patternlab:only_patterns' ) ;
32
+ console . log ( ' > Compiles the patterns only, outputting to ./public/patterns' ) ;
33
+ console . log ( 'patternlab:v' ) ;
34
+ console . log ( ' > Retrieve the version of patternlab-node you have installed' ) ;
35
+ console . log ( 'patternlab:help' ) ;
36
+ console . log ( ' > Get more information about patternlab-node, pattern lab in general, and where to report issues.' ) ;
37
+ console . log ( '===============================' ) ;
38
+ console . log ( 'Visit http://patternlab.io/docs/index.html for general help on pattern-lab' ) ;
39
+ console . log ( 'Visit https://github.com/pattern-lab/patternlab-node/issues to open a bug.' ) ;
38
40
}
39
41
40
42
function printDebug ( ) {
41
43
//debug file can be written by setting flag on config.json
42
44
if ( patternlab . config . debug ) {
43
- var outputFilename = ' ./patternlab.json';
44
- grunt . file . write ( outputFilename , JSON . stringify ( patternlab , null , 3 ) ) ;
45
+ console . log ( 'writing patternlab debug file to ./patternlab.json') ;
46
+ fs . outputFileSync ( './patternlab.json' , JSON . stringify ( patternlab , null , 3 ) ) ;
45
47
}
46
48
}
47
49
48
- function buildPatterns ( ) {
49
- patternlab . data = grunt . file . readJSON ( './source/_data/data.json' ) ;
50
- patternlab . listitems = grunt . file . readJSON ( './source/_data/listitems.json' ) ;
51
- patternlab . header = grunt . file . read ( './source/_patternlab-files/pattern-header-footer/header.html' ) ;
52
- patternlab . footer = grunt . file . read ( './source/_patternlab-files/pattern-header-footer/footer.html' ) ;
50
+ function buildPatterns ( callback ) {
51
+ patternlab . data = fs . readJSONSync ( './source/_data/data.json' ) ;
52
+ patternlab . listitems = fs . readJSONSync ( './source/_data/listitems.json' ) ;
53
+ patternlab . header = fs . readFileSync ( './source/_patternlab-files/pattern-header-footer/header.html' , 'utf8 ') ;
54
+ patternlab . footer = fs . readFileSync ( './source/_patternlab-files/pattern-header-footer/footer.html' , 'utf8 ') ;
53
55
patternlab . patterns = [ ] ;
54
56
patternlab . patternIndex = [ ] ;
55
57
patternlab . partials = { } ;
56
58
57
- grunt . file . recurse ( './source/_patterns' , function ( abspath , rootdir , subdir , filename ) {
59
+ diveSync ( './source/_patterns' , function ( err , file ) {
60
+
61
+ //log any errors
62
+ if ( err ) {
63
+ console . log ( err ) ;
64
+ return ;
65
+ }
66
+
67
+ //extract some information
68
+ var abspath = file . substring ( 2 ) ;
69
+ var subdir = path . dirname ( path . relative ( './source/_patterns' , file ) ) ;
70
+ var filename = path . basename ( file ) ;
71
+
58
72
//check if the pattern already exists.
59
- var patternName = filename . substring ( 0 , filename . indexOf ( '.' ) ) ;
60
- var patternIndex = patternlab . patternIndex . indexOf ( subdir + '-' + patternName ) ;
61
- var currentPattern ;
62
- var flatPatternPath ;
73
+ var patternName = filename . substring ( 0 , filename . indexOf ( '.' ) ) ,
74
+ patternIndex = patternlab . patternIndex . indexOf ( subdir + '-' + patternName ) ,
75
+ currentPattern ,
76
+ flatPatternPath ;
63
77
64
78
//ignore _underscored patterns and json
65
- if ( filename . charAt ( 0 ) === '_' || grunt . util . _ . str . include ( filename , ' json') ) {
79
+ if ( filename . charAt ( 0 ) === '_' || path . extname ( filename ) === '. json') {
66
80
return ;
67
81
}
68
-
69
82
70
83
//make a new Pattern Object
71
- var flatPatternName = subdir . replace ( / \/ / g, '-' ) + '-' + patternName ;
72
- flatPatternName = flatPatternName . replace ( / \/ / g, '-' ) ;
84
+ var flatPatternName = subdir . replace ( / \\ / g, '-' ) + '-' + patternName ;
85
+
86
+ flatPatternName = flatPatternName . replace ( / \\ / g, '-' ) ;
73
87
currentPattern = new of . oPattern ( flatPatternName , subdir , filename , { } ) ;
74
88
currentPattern . patternName = patternName . substring ( patternName . indexOf ( '-' ) + 1 ) ;
75
89
currentPattern . data = null ;
76
90
77
91
//look for a json file for this template
78
92
try {
79
93
var jsonFilename = abspath . substr ( 0 , abspath . lastIndexOf ( "." ) ) + ".json" ;
80
- currentPattern . data = grunt . file . readJSON ( jsonFilename ) ;
94
+ currentPattern . data = fs . readJSONSync ( jsonFilename ) ;
81
95
}
82
96
catch ( e ) {
83
97
84
98
}
85
99
86
- currentPattern . template = grunt . file . read ( abspath ) ;
100
+ currentPattern . template = fs . readFileSync ( abspath , 'utf8' ) ;
87
101
88
102
//render the pattern. pass partials object just in case.
89
103
if ( currentPattern . data ) { // Pass JSON as data
@@ -98,7 +112,7 @@ var patternlab_engine = function(grunt){
98
112
//add footer info before writing
99
113
var currentPatternFooter = renderPattern ( patternlab . footer , currentPattern ) ;
100
114
101
- grunt . file . write ( './public/patterns/' + flatPatternPath , patternlab . header + currentPattern . patternPartial + currentPatternFooter ) ;
115
+ fs . outputFileSync ( './public/patterns/' + flatPatternPath , patternlab . header + currentPattern . patternPartial + currentPatternFooter ) ;
102
116
currentPattern . patternLink = flatPatternPath ;
103
117
104
118
//add as a partial in case this is referenced later. convert to syntax needed by existing patterns
@@ -119,7 +133,6 @@ var patternlab_engine = function(grunt){
119
133
//add to patternlab arrays so we can look these up later. this could probably just be an object.
120
134
patternlab . patternIndex . push ( currentPattern . name ) ;
121
135
patternlab . patterns . push ( currentPattern ) ;
122
-
123
136
} ) ;
124
137
125
138
}
@@ -131,17 +144,17 @@ var patternlab_engine = function(grunt){
131
144
patternlab . viewAllPaths = { } ;
132
145
133
146
//build the styleguide
134
- var styleguideTemplate = grunt . file . read ( './source/_patternlab-files/styleguide.mustache' ) ;
147
+ var styleguideTemplate = fs . readFileSync ( './source/_patternlab-files/styleguide.mustache' , 'utf8 ') ;
135
148
var styleguideHtml = renderPattern ( styleguideTemplate , { partials : patternlab . patterns } ) ;
136
- grunt . file . write ( './public/styleguide/html/styleguide.html' , styleguideHtml ) ;
149
+ fs . outputFileSync ( './public/styleguide/html/styleguide.html' , styleguideHtml ) ;
137
150
138
151
//build the patternlab website
139
- var patternlabSiteTemplate = grunt . file . read ( './source/_patternlab-files/index.mustache' ) ;
152
+ var patternlabSiteTemplate = fs . readFileSync ( './source/_patternlab-files/index.mustache' , 'utf8 ') ;
140
153
141
154
//loop through all patterns. deciding to do this separate from the recursion, even at a performance hit, to attempt to separate the tasks of styleguide creation versus site menu creation
142
155
for ( var i = 0 ; i < patternlab . patterns . length ; i ++ ) {
143
156
var pattern = patternlab . patterns [ i ] ;
144
- var bucketName = pattern . name . replace ( / \/ / g, '-' ) . split ( '-' ) [ 1 ] ;
157
+ var bucketName = pattern . name . replace ( / \\ / g, '-' ) . split ( '-' ) [ 1 ] ;
145
158
146
159
//check if the bucket already exists
147
160
var bucketIndex = patternlab . bucketIndex . indexOf ( bucketName ) ;
@@ -158,8 +171,6 @@ var patternlab_engine = function(grunt){
158
171
//get the navSubItem
159
172
var navSubItemName = pattern . patternName . replace ( / - / g, ' ' ) ;
160
173
161
- //grunt.log.writeln('new bucket found: ' + bucketName + " " + navItemName + " " + navSubItemName);
162
-
163
174
//test whether the pattern struture is flat or not - usually due to a template or page
164
175
var flatPatternItem = false ;
165
176
if ( navItemName === bucketName ) {
@@ -180,7 +191,7 @@ var patternlab_engine = function(grunt){
180
191
bucket . patternItems . push ( navSubItem ) ;
181
192
182
193
//add to patternPaths
183
- patternlab . patternPaths [ bucketName ] [ pattern . patternName ] = pattern . subdir + "/" + pattern . filename . substring ( 0 , pattern . filename . indexOf ( '.' ) ) ;
194
+ addToPatternPaths ( bucketName , pattern ) ;
184
195
185
196
} else {
186
197
@@ -190,7 +201,7 @@ var patternlab_engine = function(grunt){
190
201
navItem . navSubItemsIndex . push ( navSubItemName ) ;
191
202
192
203
//add to patternPaths
193
- patternlab . patternPaths [ bucketName ] [ pattern . patternName ] = pattern . subdir + "/" + pattern . filename . substring ( 0 , pattern . filename . indexOf ( '.' ) ) ;
204
+ addToPatternPaths ( bucketName , pattern ) ;
194
205
195
206
}
196
207
@@ -228,7 +239,7 @@ var patternlab_engine = function(grunt){
228
239
bucket . patternItems . push ( navSubItem ) ;
229
240
230
241
//add to patternPaths
231
- patternlab . patternPaths [ bucketName ] [ pattern . patternName ] = pattern . subdir + "/" + pattern . filename . substring ( 0 , pattern . filename . indexOf ( '.' ) ) ;
242
+ addToPatternPaths ( bucketName , pattern ) ;
232
243
233
244
} else {
234
245
//check to see if navItem exists
@@ -251,8 +262,7 @@ var patternlab_engine = function(grunt){
251
262
}
252
263
253
264
// just add to patternPaths
254
- patternlab . patternPaths [ bucketName ] [ pattern . patternName ] = pattern . subdir + "/" + pattern . filename . substring ( 0 , pattern . filename . indexOf ( '.' ) ) ;
255
-
265
+ addToPatternPaths ( bucketName , pattern ) ;
256
266
}
257
267
258
268
}
@@ -261,23 +271,23 @@ var patternlab_engine = function(grunt){
261
271
262
272
//the patternlab site requires a lot of partials to be rendered.
263
273
//patternNav
264
- var patternNavTemplate = grunt . file . read ( './source/_patternlab-files/partials/patternNav.mustache' ) ;
274
+ var patternNavTemplate = fs . readFileSync ( './source/_patternlab-files/partials/patternNav.mustache' , 'utf8 ') ;
265
275
var patternNavPartialHtml = renderPattern ( patternNavTemplate , patternlab ) ;
266
276
267
277
//ishControls
268
- var ishControlsTemplate = grunt . file . read ( './source/_patternlab-files/partials/ishControls.mustache' ) ;
278
+ var ishControlsTemplate = fs . readFileSync ( './source/_patternlab-files/partials/ishControls.mustache' , 'utf8 ') ;
269
279
var ishControlsPartialHtml = renderPattern ( ishControlsTemplate , patternlab . config ) ;
270
280
271
281
//patternPaths
272
- var patternPathsTemplate = grunt . file . read ( './source/_patternlab-files/partials/patternPaths.mustache' ) ;
282
+ var patternPathsTemplate = fs . readFileSync ( './source/_patternlab-files/partials/patternPaths.mustache' , 'utf8 ') ;
273
283
var patternPathsPartialHtml = renderPattern ( patternPathsTemplate , { 'patternPaths' : JSON . stringify ( patternlab . patternPaths ) } ) ;
274
284
275
285
//viewAllPaths
276
- var viewAllPathsTemplate = grunt . file . read ( './source/_patternlab-files/partials/viewAllPaths.mustache' ) ;
286
+ var viewAllPathsTemplate = fs . readFileSync ( './source/_patternlab-files/partials/viewAllPaths.mustache' , 'utf8 ') ;
277
287
var viewAllPathersPartialHtml = renderPattern ( viewAllPathsTemplate , { 'viewallpaths' : JSON . stringify ( patternlab . viewAllPaths ) } ) ;
278
288
279
289
//websockets
280
- var websocketsTemplate = grunt . file . read ( './source/_patternlab-files/partials/websockets.mustache' ) ;
290
+ var websocketsTemplate = fs . readFileSync ( './source/_patternlab-files/partials/websockets.mustache' , 'utf8 ') ;
281
291
patternlab . contentsyncport = patternlab . config . contentSyncPort ;
282
292
patternlab . navsyncport = patternlab . config . navSyncPort ;
283
293
@@ -291,8 +301,7 @@ var patternlab_engine = function(grunt){
291
301
'websockets' : websocketsPartialHtml ,
292
302
'viewAllPaths' : viewAllPathersPartialHtml
293
303
} ) ;
294
- grunt . file . write ( './public/index.html' , patternlabSiteHtml ) ;
295
-
304
+ fs . outputFileSync ( './public/index.html' , patternlabSiteHtml ) ;
296
305
}
297
306
298
307
function renderPattern ( name , data , partials ) {
@@ -303,6 +312,11 @@ var patternlab_engine = function(grunt){
303
312
}
304
313
}
305
314
315
+ function addToPatternPaths ( bucketName , pattern ) {
316
+ //this is messy, could use a refactor.
317
+ patternlab . patternPaths [ bucketName ] [ pattern . patternName ] = pattern . subdir . replace ( / \\ / g, '/' ) + "/" + pattern . filename . substring ( 0 , pattern . filename . indexOf ( '.' ) ) ;
318
+ }
319
+
306
320
return {
307
321
version : function ( ) {
308
322
return getVersion ( ) ;
@@ -311,13 +325,11 @@ var patternlab_engine = function(grunt){
311
325
buildPatterns ( ) ;
312
326
buildFrontEnd ( ) ;
313
327
printDebug ( ) ;
314
-
315
328
} ,
316
329
help : function ( ) {
317
330
help ( ) ;
318
331
} ,
319
332
build_patterns_only : function ( ) {
320
- grunt . log . ok ( 'only_patterns argument not yet implemented' ) ;
321
333
buildPatterns ( ) ;
322
334
printDebug ( ) ;
323
335
}
@@ -327,31 +339,3 @@ var patternlab_engine = function(grunt){
327
339
328
340
module . exports = patternlab_engine ;
329
341
330
- module . exports = function ( grunt ) {
331
- grunt . registerTask ( 'patternlab' , 'create design systems with atomic design' , function ( arg ) {
332
-
333
- var patternlab = patternlab_engine ( grunt ) ;
334
-
335
- if ( arguments . length === 0 ) {
336
- patternlab . build ( ) ;
337
- }
338
-
339
- if ( arg && arg === 'v' ) {
340
- patternlab . version ( ) ;
341
- }
342
-
343
- if ( arg && arg === "only_patterns" ) {
344
- patternlab . build_patterns_only ( ) ;
345
- }
346
-
347
- if ( arg && arg === "help" ) {
348
- patternlab . help ( ) ;
349
- }
350
-
351
- if ( arg && ( arg !== "v" && arg !== "only_patterns" && arg !== "help" ) ) {
352
- patternlab . help ( ) ;
353
- }
354
-
355
- } ) ;
356
-
357
- } ;
0 commit comments