1- /*
2- * patternlab-node - v2.6.0-alpha - 2016
3- *
1+ /*
2+ * patternlab-node - v2.6.1 - 2016
3+ *
44 * Brian Muenzenmeyer, Geoff Pursell, and the web community.
5- * Licensed under the MIT license.
6- *
7- * Many thanks to Brad Frost and Dave Olsen for inspiration, encouragement, and advice.
5+ * Licensed under the MIT license.
6+ *
7+ * Many thanks to Brad Frost and Dave Olsen for inspiration, encouragement, and advice.
88 *
99 */
1010
@@ -17,15 +17,16 @@ var diveSync = require('diveSync'),
1717 cleanHtml = require ( 'js-beautify' ) . html ,
1818 inherits = require ( 'util' ) . inherits ,
1919 pm = require ( './plugin_manager' ) ,
20+ fs = require ( 'fs-extra' ) ,
2021 plutils = require ( './utilities' ) ;
2122
2223var EventEmitter = require ( 'events' ) . EventEmitter ;
2324
24- function buildPatternData ( dataFilesPath , fs ) {
25+ function buildPatternData ( dataFilesPath , fsDep ) {
2526 var dataFiles = glob . sync ( dataFilesPath + '*.json' , { "ignore" : [ dataFilesPath + 'listitems.json' ] } ) ;
2627 var mergeObject = { } ;
2728 dataFiles . forEach ( function ( filePath ) {
28- var jsonData = fs . readJSONSync ( path . resolve ( filePath ) , 'utf8' ) ;
29+ var jsonData = fsDep . readJSONSync ( path . resolve ( filePath ) , 'utf8' ) ;
2930 mergeObject = _ . merge ( mergeObject , jsonData ) ;
3031 } ) ;
3132 return mergeObject ;
@@ -83,18 +84,42 @@ function checkConfiguration(patternlab) {
8384 * @param patternlab - global data store
8485 */
8586function initializePlugins ( patternlab ) {
87+
88+ if ( ! patternlab . config . plugins ) { return ; }
89+
8690 var plugin_manager = new pm ( patternlab . config , path . resolve ( __dirname , '../../patternlab-config.json' ) ) ;
8791 var foundPlugins = plugin_manager . detect_plugins ( ) ;
8892
8993 if ( foundPlugins && foundPlugins . length > 0 ) {
9094
9195 for ( var i = 0 ; i < foundPlugins . length ; i ++ ) {
92- var plugin = plugin_manager . load_plugin ( foundPlugins [ i ] ) ;
96+
97+ let pluginKey = foundPlugins [ i ] ;
98+
99+ if ( patternlab . config . debug ) {
100+ console . log ( 'Found plugin: ' , pluginKey ) ;
101+ console . log ( 'Attempting to load and initialize plugin.' ) ;
102+ }
103+
104+ var plugin = plugin_manager . load_plugin ( pluginKey ) ;
93105 plugin ( patternlab ) ;
94106 }
95107 }
96108}
97109
110+ /**
111+ * Installs a given plugin. Assumes it has already been pulled down via npm
112+ * @param pluginName - the name of the plugin
113+ */
114+ function installPlugin ( pluginName ) {
115+ //get the config
116+ var configPath = path . resolve ( process . cwd ( ) , 'patternlab-config.json' ) ;
117+ var config = fs . readJSONSync ( path . resolve ( configPath ) , 'utf8' ) ;
118+ var plugin_manager = new pm ( config , configPath ) ;
119+
120+ plugin_manager . install_plugin ( pluginName ) ;
121+ }
122+
98123function PatternLabEventEmitter ( ) {
99124 EventEmitter . call ( this ) ;
100125}
@@ -104,7 +129,6 @@ var patternlab_engine = function (config) {
104129 'use strict' ;
105130
106131 var JSON5 = require ( 'json5' ) ,
107- fs = require ( 'fs-extra' ) ,
108132 pa = require ( './pattern_assembler' ) ,
109133 pe = require ( './pattern_exporter' ) ,
110134 lh = require ( './lineage_hunter' ) ,
@@ -123,7 +147,6 @@ var patternlab_engine = function (config) {
123147
124148 checkConfiguration ( patternlab ) ;
125149
126- //todo: determine if this is the best place to wire up plugins
127150 initializePlugins ( patternlab ) ;
128151
129152 var paths = patternlab . config . paths ;
@@ -266,6 +289,37 @@ var patternlab_engine = function (config) {
266289 }
267290 }
268291
292+ function writePatternFiles ( headHTML , pattern , footerHTML ) {
293+ const nullFormatter = str => str ;
294+ const defaultFormatter = codeString => cleanHtml ( codeString , { indent_size : 2 } ) ;
295+ const makePath = type => path . join ( paths . public . patterns , pattern . getPatternLink ( patternlab , type ) ) ;
296+ const patternPage = headHTML + pattern . patternPartialCode + footerHTML ;
297+ const eng = pattern . engine ;
298+
299+ //beautify the output if configured to do so
300+ const formatters = config . cleanOutputHtml ? {
301+ rendered : eng . renderedCodeFormatter || defaultFormatter ,
302+ rawTemplate : eng . rawTemplateCodeFormatter || defaultFormatter ,
303+ markupOnly : eng . markupOnlyCodeFormatter || defaultFormatter
304+ } : {
305+ rendered : nullFormatter ,
306+ rawTemplate : nullFormatter ,
307+ markupOnly : nullFormatter
308+ } ;
309+
310+ //prepare the path and contents of each output file
311+ const outputFiles = [
312+ { path : makePath ( 'rendered' ) , content : formatters . rendered ( patternPage , pattern ) } ,
313+ { path : makePath ( 'rawTemplate' ) , content : formatters . rawTemplate ( pattern . template , pattern ) } ,
314+ { path : makePath ( 'markupOnly' ) , content : formatters . markupOnly ( pattern . patternPartialCode , pattern ) }
315+ ] . concat (
316+ eng . addOutputFiles ? eng . addOutputFiles ( paths , patternlab ) : [ ]
317+ ) ;
318+
319+ //write the compiled template to the public patterns directory
320+ outputFiles . forEach ( outFile => fs . outputFileSync ( outFile . path , outFile . content ) ) ;
321+ }
322+
269323 function buildPatterns ( deletePatternDir ) {
270324
271325 patternlab . events . emit ( 'patternlab-build-pattern-start' , patternlab ) ;
@@ -357,6 +411,8 @@ var patternlab_engine = function (config) {
357411 pattern . patternLineageRExists = pattern . lineageR . length > 0 ;
358412 pattern . patternLineageEExists = pattern . patternLineageExists || pattern . patternLineageRExists ;
359413
414+ patternlab . events . emit ( 'patternlab-pattern-before-data-merge' , patternlab , pattern ) ;
415+
360416 //render the pattern, but first consolidate any data we may have
361417 var allData ;
362418 try {
@@ -425,21 +481,7 @@ var patternlab_engine = function (config) {
425481 patternlab . events . emit ( 'patternlab-pattern-write-begin' , patternlab , pattern ) ;
426482
427483 //write the compiled template to the public patterns directory
428- var patternPage = headHTML + pattern . patternPartialCode + footerHTML ;
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 ) ;
437-
438- //write the mustache file too
439- fs . outputFileSync ( paths . public . patterns + pattern . getPatternLink ( patternlab , 'rawTemplate' ) , cleanedPatternTemplateCode ) ;
440-
441- //write the encoded version too
442- fs . outputFileSync ( paths . public . patterns + pattern . getPatternLink ( patternlab , 'markupOnly' ) , cleanedPatternPartialCode ) ;
484+ writePatternFiles ( headHTML , pattern , footerHTML ) ;
443485
444486 patternlab . events . emit ( 'patternlab-pattern-write-end' , patternlab , pattern ) ;
445487
@@ -485,6 +527,9 @@ var patternlab_engine = function (config) {
485527 } ,
486528 loadstarterkit : function ( starterkitName , clean ) {
487529 loadStarterKit ( starterkitName , clean ) ;
530+ } ,
531+ installplugin : function ( pluginName ) {
532+ installPlugin ( pluginName ) ;
488533 }
489534 } ;
490535} ;
0 commit comments