@@ -14,11 +14,13 @@ var patternlab_engine = function(){
1414 extend = require ( 'util' ) . _extend ,
1515 diveSync = require ( 'diveSync' ) ,
1616 mustache = require ( 'mustache' ) ,
17+ glob = require ( 'glob' ) ,
1718 of = require ( './object_factory' ) ,
1819 pa = require ( './pattern_assembler' ) ,
1920 mh = require ( './media_hunter' ) ,
2021 lh = require ( './lineage_hunter' ) ,
2122 pe = require ( './pattern_exporter' ) ,
23+ pa = require ( './pattern_assembler' ) ,
2224 he = require ( 'html-entities' ) . AllHtmlEntities ,
2325 patternlab = { } ;
2426
@@ -53,6 +55,8 @@ var patternlab_engine = function(){
5355 }
5456
5557 function buildPatterns ( callback ) {
58+ var assembler = new pa ( ) ;
59+
5660 patternlab . data = fs . readJSONSync ( './source/_data/data.json' ) ;
5761 patternlab . listitems = fs . readJSONSync ( './source/_data/listitems.json' ) ;
5862 patternlab . header = fs . readFileSync ( './source/_patternlab-files/pattern-header-footer/header.html' , 'utf8' ) ;
@@ -101,8 +105,6 @@ var patternlab_engine = function(){
101105 }
102106 currentPattern . template = fs . readFileSync ( abspath , 'utf8' ) ;
103107
104- //look for a pseudo pattern by checking if there is a file containing same name, with ~ in it, ending in .json
105-
106108 //find pattern lineage
107109 var lineage_hunter = new lh ( ) ;
108110 lineage_hunter . find_lineage ( currentPattern , patternlab ) ;
@@ -122,6 +124,44 @@ var patternlab_engine = function(){
122124 }
123125 patternlab . partials [ partialname ] = currentPattern . template ;
124126
127+ //look for a pseudo pattern by checking if there is a file containing same name, with ~ in it, ending in .json
128+ var needle = currentPattern . subdir + '/' + currentPattern . fileName + '~*.json' ;
129+ var pseudoPatterns = glob . sync ( needle , {
130+ cwd : 'source/_patterns/' , //relative to gruntfile
131+ debug : false ,
132+ nodir : true ,
133+ } ) ;
134+
135+ if ( pseudoPatterns . length > 0 ) {
136+ for ( var i = 0 ; i < pseudoPatterns . length ; i ++ ) {
137+ //we want to do everything we normally would here, except instead head the pseudoPattern data
138+ var variantFileData = fs . readJSONSync ( 'source/_patterns/' + pseudoPatterns [ i ] ) ;
139+
140+ //extend any existing data with variant data
141+ variantFileData = extend ( variantFileData , currentPattern . data ) ;
142+
143+ var variantName = pseudoPatterns [ i ] . substring ( pseudoPatterns [ i ] . indexOf ( '~' ) + 1 ) . split ( '.' ) [ 0 ] ;
144+ var patternVariant = new of . oPattern ( subdir , currentPattern . fileName + '-' + variantName + '.mustache' , variantFileData ) ;
145+
146+ //see if this file has a state
147+ if ( patternlab . config . patternStates [ patternVariant . patternName ] ) {
148+ patternVariant . patternState = patternlab . config . patternStates [ patternVariant . patternName ] ;
149+ } else {
150+ patternVariant . patternState = "" ;
151+ }
152+
153+ //use the same template as the non-variant
154+ patternVariant . template = currentPattern . template ;
155+
156+ //find pattern lineage
157+ lineage_hunter . find_lineage ( patternVariant , patternlab ) ;
158+
159+ //add to patternlab object so we can look these up later.
160+ patternlab . data . link [ patternVariant . patternGroup + '-' + patternVariant . patternName ] = '/patterns/' + patternVariant . patternLink ;
161+ patternlab . patterns . push ( patternVariant ) ;
162+ }
163+ }
164+
125165 //add to patternlab object so we can look these up later.
126166 patternlab . data . link [ currentPattern . patternGroup + '-' + currentPattern . patternName ] = '/patterns/' + currentPattern . patternLink ;
127167 patternlab . patterns . push ( currentPattern ) ;
0 commit comments