11/*
2- * patternlab-node - v2.5.1 - 2016
2+ * patternlab-node - v2.6.0-alpha - 2016
33 *
44 * Brian Muenzenmeyer, Geoff Pursell, and the web community.
55 * Licensed under the MIT license.
@@ -14,8 +14,13 @@ var diveSync = require('diveSync'),
1414 glob = require ( 'glob' ) ,
1515 _ = require ( 'lodash' ) ,
1616 path = require ( 'path' ) ,
17+ cleanHtml = require ( 'js-beautify' ) . html ,
18+ inherits = require ( 'util' ) . inherits ,
19+ pm = require ( './plugin_manager' ) ,
1720 plutils = require ( './utilities' ) ;
1821
22+ var EventEmitter = require ( 'events' ) . EventEmitter ;
23+
1924function buildPatternData ( dataFilesPath , fs ) {
2025 var dataFiles = glob . sync ( dataFilesPath + '*.json' , { "ignore" : [ dataFilesPath + 'listitems.json' ] } ) ;
2126 var mergeObject = { } ;
@@ -73,6 +78,28 @@ function checkConfiguration(patternlab) {
7378 patternlab . config . outputFileSuffixes = _ . extend ( outputFileSuffixes , patternlab . config . outputFileSuffixes ) ;
7479}
7580
81+ /**
82+ * Finds and calls the main method of any found plugins.
83+ * @param patternlab - global data store
84+ */
85+ function initializePlugins ( patternlab ) {
86+ var plugin_manager = new pm ( patternlab . config , path . resolve ( __dirname , '../../patternlab-config.json' ) ) ;
87+ var foundPlugins = plugin_manager . detect_plugins ( ) ;
88+
89+ if ( foundPlugins && foundPlugins . length > 0 ) {
90+
91+ for ( var i = 0 ; i < foundPlugins . length ; i ++ ) {
92+ var plugin = plugin_manager . load_plugin ( foundPlugins [ i ] ) ;
93+ plugin ( patternlab ) ;
94+ }
95+ }
96+ }
97+
98+ function PatternLabEventEmitter ( ) {
99+ EventEmitter . call ( this ) ;
100+ }
101+ inherits ( PatternLabEventEmitter , EventEmitter ) ;
102+
76103var patternlab_engine = function ( config ) {
77104 'use strict' ;
78105
@@ -92,9 +119,13 @@ var patternlab_engine = function (config) {
92119
93120 patternlab . package = fs . readJSONSync ( path . resolve ( __dirname , '../../package.json' ) ) ;
94121 patternlab . config = config || fs . readJSONSync ( path . resolve ( __dirname , '../../patternlab-config.json' ) ) ;
122+ patternlab . events = new PatternLabEventEmitter ( ) ;
95123
96124 checkConfiguration ( patternlab ) ;
97125
126+ //todo: determine if this is the best place to wire up plugins
127+ initializePlugins ( patternlab ) ;
128+
98129 var paths = patternlab . config . paths ;
99130
100131 function getVersion ( ) {
@@ -236,6 +267,9 @@ var patternlab_engine = function (config) {
236267 }
237268
238269 function buildPatterns ( deletePatternDir ) {
270+
271+ patternlab . events . emit ( 'patternlab-build-pattern-start' , patternlab ) ;
272+
239273 try {
240274 patternlab . data = buildPatternData ( paths . source . data , fs ) ;
241275 } catch ( ex ) {
@@ -245,7 +279,7 @@ var patternlab_engine = function (config) {
245279 try {
246280 patternlab . listitems = fs . readJSONSync ( path . resolve ( paths . source . data , 'listitems.json' ) ) ;
247281 } catch ( ex ) {
248- plutils . logRed ( ' missing or malformed' + paths . source . data + 'listitems.json Pattern Lab may not work without this file.' ) ;
282+ plutils . logOrange ( 'WARNING: missing or malformed ' + paths . source . data + 'listitems.json file. Pattern Lab may not work without this file.' ) ;
249283 patternlab . listitems = { } ;
250284 }
251285 try {
@@ -268,9 +302,13 @@ var patternlab_engine = function (config) {
268302
269303 pattern_assembler . combine_listItems ( patternlab ) ;
270304
305+ patternlab . events . emit ( 'patternlab-build-global-data-end' , patternlab ) ;
306+
271307 // diveSync once to perform iterative populating of patternlab object
272308 processAllPatternsIterative ( pattern_assembler , paths . source . patterns , patternlab ) ;
273309
310+ patternlab . events . emit ( 'patternlab-pattern-iteration-end' , patternlab ) ;
311+
274312 //diveSync again to recursively include partials, filling out the
275313 //extendedTemplate property of the patternlab.patterns elements
276314 processAllPatternsRecursive ( pattern_assembler , paths . source . patterns , patternlab ) ;
@@ -384,15 +422,26 @@ var patternlab_engine = function (config) {
384422
385423 var footerHTML = pattern_assembler . renderPattern ( patternlab . userFoot , allFooterData ) ;
386424
425+ patternlab . events . emit ( 'patternlab-pattern-write-begin' , patternlab , pattern ) ;
426+
387427 //write the compiled template to the public patterns directory
388428 var patternPage = headHTML + pattern . patternPartialCode + footerHTML ;
389- fs . outputFileSync ( paths . public . patterns + pattern . getPatternLink ( patternlab , 'rendered' ) , patternPage ) ;
429+
430+ //beautify the output if configured to do so
431+ var cleanedPatternPage = config . cleanOutputHtml ? cleanHtml ( patternPage , { indent_size : 2 } ) : patternPage ;
432+ var cleanedPatternPartialCode = config . cleanOutputHtml ? cleanHtml ( pattern . patternPartialCode , { indent_size : 2 } ) : pattern . patternPartialCode ;
433+ var cleanedPatternTemplateCode = config . cleanOutputHtml ? cleanHtml ( pattern . template , { indent_size : 2 } ) : pattern . template ;
434+
435+ //write the compiled template to the public patterns directory
436+ fs . outputFileSync ( paths . public . patterns + pattern . getPatternLink ( patternlab , 'rendered' ) , cleanedPatternPage ) ;
390437
391438 //write the mustache file too
392- fs . outputFileSync ( paths . public . patterns + pattern . getPatternLink ( patternlab , 'rawTemplate' ) , pattern . template ) ;
439+ fs . outputFileSync ( paths . public . patterns + pattern . getPatternLink ( patternlab , 'rawTemplate' ) , cleanedPatternTemplateCode ) ;
393440
394441 //write the encoded version too
395- fs . outputFileSync ( paths . public . patterns + pattern . getPatternLink ( patternlab , 'markupOnly' ) , pattern . patternPartialCode ) ;
442+ fs . outputFileSync ( paths . public . patterns + pattern . getPatternLink ( patternlab , 'markupOnly' ) , cleanedPatternPartialCode ) ;
443+
444+ patternlab . events . emit ( 'patternlab-pattern-write-end' , patternlab , pattern ) ;
396445
397446 return true ;
398447 } ) ;
0 commit comments