88 *
99 */
1010
11- var patternlab_engine = function ( grunt ) {
11+ var patternlab_engine = function ( ) {
1212 var path = require ( 'path' ) ,
13+ fs = require ( 'fs-extra' ) ,
14+ diveSync = require ( 'diveSync' ) ,
1315 mustache = require ( 'mustache' ) ,
1416 of = require ( './object_factory' ) ,
1517 pa = require ( './pattern_assembler' ) ,
1618 patternlab = { } ;
1719
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') ;
2022
2123 function getVersion ( ) {
22- grunt . log . ok ( patternlab . package . version ) ;
24+ console . log ( patternlab . package . version ) ;
2325 }
2426
2527 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.' ) ;
3840 }
3941
4042 function printDebug ( ) {
4143 //debug file can be written by setting flag on config.json
4244 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 ) ) ;
4547 }
4648 }
4749
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 ') ;
5355 patternlab . patterns = [ ] ;
5456 patternlab . patternIndex = [ ] ;
5557 patternlab . partials = { } ;
5658
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+
5872 //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 ;
6377
6478 //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') {
6680 return ;
6781 }
68-
6982
7083 //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, '-' ) ;
7387 currentPattern = new of . oPattern ( flatPatternName , subdir , filename , { } ) ;
7488 currentPattern . patternName = patternName . substring ( patternName . indexOf ( '-' ) + 1 ) ;
7589 currentPattern . data = null ;
7690
7791 //look for a json file for this template
7892 try {
7993 var jsonFilename = abspath . substr ( 0 , abspath . lastIndexOf ( "." ) ) + ".json" ;
80- currentPattern . data = grunt . file . readJSON ( jsonFilename ) ;
94+ currentPattern . data = fs . readJSONSync ( jsonFilename ) ;
8195 }
8296 catch ( e ) {
8397
8498 }
8599
86- currentPattern . template = grunt . file . read ( abspath ) ;
100+ currentPattern . template = fs . readFileSync ( abspath , 'utf8' ) ;
87101
88102 //render the pattern. pass partials object just in case.
89103 if ( currentPattern . data ) { // Pass JSON as data
@@ -98,7 +112,7 @@ var patternlab_engine = function(grunt){
98112 //add footer info before writing
99113 var currentPatternFooter = renderPattern ( patternlab . footer , currentPattern ) ;
100114
101- grunt . file . write ( './public/patterns/' + flatPatternPath , patternlab . header + currentPattern . patternPartial + currentPatternFooter ) ;
115+ fs . outputFileSync ( './public/patterns/' + flatPatternPath , patternlab . header + currentPattern . patternPartial + currentPatternFooter ) ;
102116 currentPattern . patternLink = flatPatternPath ;
103117
104118 //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){
119133 //add to patternlab arrays so we can look these up later. this could probably just be an object.
120134 patternlab . patternIndex . push ( currentPattern . name ) ;
121135 patternlab . patterns . push ( currentPattern ) ;
122-
123136 } ) ;
124137
125138 }
@@ -131,17 +144,17 @@ var patternlab_engine = function(grunt){
131144 patternlab . viewAllPaths = { } ;
132145
133146 //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 ') ;
135148 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 ) ;
137150
138151 //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 ') ;
140153
141154 //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
142155 for ( var i = 0 ; i < patternlab . patterns . length ; i ++ ) {
143156 var pattern = patternlab . patterns [ i ] ;
144- var bucketName = pattern . name . replace ( / \/ / g, '-' ) . split ( '-' ) [ 1 ] ;
157+ var bucketName = pattern . name . replace ( / \\ / g, '-' ) . split ( '-' ) [ 1 ] ;
145158
146159 //check if the bucket already exists
147160 var bucketIndex = patternlab . bucketIndex . indexOf ( bucketName ) ;
@@ -158,8 +171,6 @@ var patternlab_engine = function(grunt){
158171 //get the navSubItem
159172 var navSubItemName = pattern . patternName . replace ( / - / g, ' ' ) ;
160173
161- //grunt.log.writeln('new bucket found: ' + bucketName + " " + navItemName + " " + navSubItemName);
162-
163174 //test whether the pattern struture is flat or not - usually due to a template or page
164175 var flatPatternItem = false ;
165176 if ( navItemName === bucketName ) {
@@ -180,7 +191,7 @@ var patternlab_engine = function(grunt){
180191 bucket . patternItems . push ( navSubItem ) ;
181192
182193 //add to patternPaths
183- patternlab . patternPaths [ bucketName ] [ pattern . patternName ] = pattern . subdir + "/" + pattern . filename . substring ( 0 , pattern . filename . indexOf ( '.' ) ) ;
194+ addToPatternPaths ( bucketName , pattern ) ;
184195
185196 } else {
186197
@@ -190,7 +201,7 @@ var patternlab_engine = function(grunt){
190201 navItem . navSubItemsIndex . push ( navSubItemName ) ;
191202
192203 //add to patternPaths
193- patternlab . patternPaths [ bucketName ] [ pattern . patternName ] = pattern . subdir + "/" + pattern . filename . substring ( 0 , pattern . filename . indexOf ( '.' ) ) ;
204+ addToPatternPaths ( bucketName , pattern ) ;
194205
195206 }
196207
@@ -228,7 +239,7 @@ var patternlab_engine = function(grunt){
228239 bucket . patternItems . push ( navSubItem ) ;
229240
230241 //add to patternPaths
231- patternlab . patternPaths [ bucketName ] [ pattern . patternName ] = pattern . subdir + "/" + pattern . filename . substring ( 0 , pattern . filename . indexOf ( '.' ) ) ;
242+ addToPatternPaths ( bucketName , pattern ) ;
232243
233244 } else {
234245 //check to see if navItem exists
@@ -251,8 +262,7 @@ var patternlab_engine = function(grunt){
251262 }
252263
253264 // just add to patternPaths
254- patternlab . patternPaths [ bucketName ] [ pattern . patternName ] = pattern . subdir + "/" + pattern . filename . substring ( 0 , pattern . filename . indexOf ( '.' ) ) ;
255-
265+ addToPatternPaths ( bucketName , pattern ) ;
256266 }
257267
258268 }
@@ -261,23 +271,23 @@ var patternlab_engine = function(grunt){
261271
262272 //the patternlab site requires a lot of partials to be rendered.
263273 //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 ') ;
265275 var patternNavPartialHtml = renderPattern ( patternNavTemplate , patternlab ) ;
266276
267277 //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 ') ;
269279 var ishControlsPartialHtml = renderPattern ( ishControlsTemplate , patternlab . config ) ;
270280
271281 //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 ') ;
273283 var patternPathsPartialHtml = renderPattern ( patternPathsTemplate , { 'patternPaths' : JSON . stringify ( patternlab . patternPaths ) } ) ;
274284
275285 //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 ') ;
277287 var viewAllPathersPartialHtml = renderPattern ( viewAllPathsTemplate , { 'viewallpaths' : JSON . stringify ( patternlab . viewAllPaths ) } ) ;
278288
279289 //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 ') ;
281291 patternlab . contentsyncport = patternlab . config . contentSyncPort ;
282292 patternlab . navsyncport = patternlab . config . navSyncPort ;
283293
@@ -291,8 +301,7 @@ var patternlab_engine = function(grunt){
291301 'websockets' : websocketsPartialHtml ,
292302 'viewAllPaths' : viewAllPathersPartialHtml
293303 } ) ;
294- grunt . file . write ( './public/index.html' , patternlabSiteHtml ) ;
295-
304+ fs . outputFileSync ( './public/index.html' , patternlabSiteHtml ) ;
296305 }
297306
298307 function renderPattern ( name , data , partials ) {
@@ -303,6 +312,11 @@ var patternlab_engine = function(grunt){
303312 }
304313 }
305314
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+
306320 return {
307321 version : function ( ) {
308322 return getVersion ( ) ;
@@ -311,13 +325,11 @@ var patternlab_engine = function(grunt){
311325 buildPatterns ( ) ;
312326 buildFrontEnd ( ) ;
313327 printDebug ( ) ;
314-
315328 } ,
316329 help : function ( ) {
317330 help ( ) ;
318331 } ,
319332 build_patterns_only : function ( ) {
320- grunt . log . ok ( 'only_patterns argument not yet implemented' ) ;
321333 buildPatterns ( ) ;
322334 printDebug ( ) ;
323335 }
@@ -327,31 +339,3 @@ var patternlab_engine = function(grunt){
327339
328340module . exports = patternlab_engine ;
329341
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