Skip to content

Commit d01383a

Browse files
author
Brian Muenzenmeyer
committed
Merge pull request #216 from geoffp/configurable-paths-galore
Configurable paths galore
2 parents 6ad11a6 + cafd440 commit d01383a

File tree

8 files changed

+178
-102
lines changed

8 files changed

+178
-102
lines changed

builder/pattern_assembler.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
path = require('path');
9292

9393
//extract some information
94-
var subdir = path.dirname(path.relative(patternlab.config.patterns.source, file)).replace('\\', '/');
94+
var subdir = path.dirname(path.relative(patternlab.config.paths.source.patterns, file)).replace('\\', '/');
9595
var filename = path.basename(file);
9696
var ext = path.extname(filename);
9797

@@ -119,8 +119,8 @@
119119

120120
//look for a json file for this template
121121
try {
122-
var jsonFilename = patternlab.config.patterns.source + currentPattern.subdir + '/' + currentPattern.fileName + ".json";
123-
currentPattern.jsonFileData = fs.readJSONSync(jsonFilename.substring(2));
122+
var jsonFilename = path.resolve(patternlab.config.paths.source.patterns, currentPattern.subdir, currentPattern.fileName + ".json");
123+
currentPattern.jsonFileData = fs.readJSONSync(jsonFilename);
124124
if(patternlab.config.debug){
125125
console.log('found pattern-specific data.json for ' + currentPattern.key);
126126
}
@@ -130,8 +130,8 @@
130130

131131
//look for a listitems.json file for this template
132132
try {
133-
var listJsonFileName = patternlab.config.patterns.source + currentPattern.subdir + '/' + currentPattern.fileName + ".listitems.json";
134-
currentPattern.listitems = fs.readJSONSync(listJsonFileName.substring(2));
133+
var listJsonFileName = path.resolve(patternlab.config.paths.source.patterns, currentPattern.subdir,currentPattern.fileName + ".listitems.json");
134+
currentPattern.listitems = fs.readJSONSync(listJsonFileName);
135135
buildListItems(currentPattern);
136136
if(patternlab.config.debug){
137137
console.log('found pattern-specific listitems.json for ' + currentPattern.key);

builder/patternlab.js

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ var patternlab_engine = function () {
2727
patternlab.package = fs.readJSONSync('./package.json');
2828
patternlab.config = fs.readJSONSync('./config.json');
2929

30+
var paths = patternlab.config.paths;
31+
32+
3033
function getVersion() {
3134
console.log(patternlab.package.version);
3235
}
@@ -55,18 +58,18 @@ var patternlab_engine = function () {
5558
}
5659

5760
function buildPatterns(deletePatternDir){
58-
patternlab.data = fs.readJSONSync('./source/_data/data.json');
59-
patternlab.listitems = fs.readJSONSync('./source/_data/listitems.json');
60-
patternlab.header = fs.readFileSync('./source/_patternlab-files/pattern-header-footer/header.html', 'utf8');
61-
patternlab.footer = fs.readFileSync('./source/_patternlab-files/pattern-header-footer/footer.html', 'utf8');
61+
patternlab.data = fs.readJSONSync(path.resolve(paths.source.data, 'data.json'));
62+
patternlab.listitems = fs.readJSONSync(path.resolve(paths.source.data, 'listitems.json'));
63+
patternlab.header = fs.readFileSync(path.resolve(paths.source.patternlabFiles, 'pattern-header-footer/header.html'), 'utf8');
64+
patternlab.footer = fs.readFileSync(path.resolve(paths.source.patternlabFiles, 'pattern-header-footer/footer.html'), 'utf8');
6265
patternlab.patterns = [];
6366
patternlab.partials = {};
6467
patternlab.data.link = {};
6568

6669
var pattern_assembler = new pa(),
6770
entity_encoder = new he(),
6871
pattern_exporter = new pe(),
69-
patterns_dir = './source/_patterns';
72+
patterns_dir = paths.source.patterns;
7073

7174
pattern_assembler.combine_listItems(patternlab);
7275

@@ -87,7 +90,6 @@ var patternlab_engine = function () {
8790
console.log(err);
8891
return;
8992
}
90-
9193
pattern_assembler.process_pattern_iterative(file.substring(2), patternlab);
9294
});
9395

@@ -113,13 +115,12 @@ var patternlab_engine = function () {
113115
console.log(err);
114116
return;
115117
}
116-
117118
pattern_assembler.process_pattern_recursive(file.substring(2), patternlab);
118119
});
119120

120121
//delete the contents of config.patterns.public before writing
121122
if(deletePatternDir){
122-
fs.emptyDirSync(patternlab.config.patterns.public);
123+
fs.emptyDirSync(paths.public.patterns);
123124
}
124125

125126
//render all patterns last, so lineageR works
@@ -136,13 +137,13 @@ var patternlab_engine = function () {
136137
var patternFooter = pattern_assembler.renderPattern(patternlab.footer, pattern);
137138

138139
//write the compiled template to the public patterns directory
139-
fs.outputFileSync(patternlab.config.patterns.public + pattern.patternLink, patternlab.header + pattern.patternPartial + patternFooter);
140+
fs.outputFileSync(paths.public.patterns + pattern.patternLink, patternlab.header + pattern.patternPartial + patternFooter);
140141

141142
//write the mustache file too
142-
fs.outputFileSync(patternlab.config.patterns.public + pattern.patternLink.replace('.html', '.mustache'), entity_encoder.encode(pattern.template));
143+
fs.outputFileSync(paths.public.patterns + pattern.patternLink.replace('.html', '.mustache'), entity_encoder.encode(pattern.template));
143144

144145
//write the encoded version too
145-
fs.outputFileSync(patternlab.config.patterns.public + pattern.patternLink.replace('.html', '.escaped.html'), entity_encoder.encode(pattern.patternPartial));
146+
fs.outputFileSync(paths.public.patterns + pattern.patternLink.replace('.html', '.escaped.html'), entity_encoder.encode(pattern.patternPartial));
146147
});
147148

148149
//export patterns if necessary
@@ -164,7 +165,7 @@ var patternlab_engine = function () {
164165
media_hunter.find_media_queries('./source/css', patternlab);
165166

166167
// check if patterns are excluded, if not add them to styleguidePatterns
167-
if (styleGuideExcludes.length) {
168+
if (styleGuideExcludes && styleGuideExcludes.length) {
168169
for (i = 0; i < patternlab.patterns.length; i++) {
169170

170171
// skip underscore-prefixed files
@@ -187,9 +188,9 @@ var patternlab_engine = function () {
187188
}
188189

189190
//build the styleguide
190-
var styleguideTemplate = fs.readFileSync('./source/_patternlab-files/styleguide.mustache', 'utf8'),
191+
var styleguideTemplate = fs.readFileSync(path.resolve(paths.source.patternlabFiles, 'styleguide.mustache'), 'utf8'),
191192
styleguideHtml = pattern_assembler.renderPattern(styleguideTemplate, {partials: styleguidePatterns});
192-
fs.outputFileSync('./public/styleguide/html/styleguide.html', styleguideHtml);
193+
fs.outputFileSync(path.resolve(paths.public.styleguide, 'html/styleguide.html'), styleguideHtml);
193194

194195
//build the viewall pages
195196
var prevSubdir = '',
@@ -228,14 +229,14 @@ var patternlab_engine = function () {
228229
}
229230
}
230231

231-
var viewAllTemplate = fs.readFileSync('./source/_patternlab-files/viewall.mustache', 'utf8');
232+
var viewAllTemplate = fs.readFileSync(path.resolve(paths.source.patternlabFiles, 'viewall.mustache'), 'utf8');
232233
var viewAllHtml = pattern_assembler.renderPattern(viewAllTemplate, {partials: viewAllPatterns, patternPartial: patternPartial});
233-
fs.outputFileSync(patternlab.config.patterns.public + pattern.flatPatternPath + '/index.html', viewAllHtml);
234+
fs.outputFileSync(paths.public.patterns + pattern.flatPatternPath + '/index.html', viewAllHtml);
234235
}
235236
}
236237

237238
//build the patternlab website
238-
var patternlabSiteTemplate = fs.readFileSync('./source/_patternlab-files/index.mustache', 'utf8');
239+
var patternlabSiteTemplate = fs.readFileSync(path.resolve(paths.source.patternlabFiles, 'index.mustache'), 'utf8');
239240

240241
//sort all patterns explicitly.
241242
patternlab.patterns = patternlab.patterns.sort(function(a,b){
@@ -415,20 +416,20 @@ var patternlab_engine = function () {
415416

416417
//the patternlab site requires a lot of partials to be rendered.
417418
//patternNav
418-
var patternNavTemplate = fs.readFileSync('./source/_patternlab-files/partials/patternNav.mustache', 'utf8');
419+
var patternNavTemplate = fs.readFileSync(path.resolve(paths.source.patternlabFiles, 'partials/patternNav.mustache'), 'utf8');
419420
var patternNavPartialHtml = pattern_assembler.renderPattern(patternNavTemplate, patternlab);
420421

421422
//ishControls
422-
var ishControlsTemplate = fs.readFileSync('./source/_patternlab-files/partials/ishControls.mustache', 'utf8');
423+
var ishControlsTemplate = fs.readFileSync(path.resolve(paths.source.patternlabFiles, 'partials/ishControls.mustache'), 'utf8');
423424
patternlab.config.mqs = patternlab.mediaQueries;
424425
var ishControlsPartialHtml = pattern_assembler.renderPattern(ishControlsTemplate, patternlab.config);
425426

426427
//patternPaths
427-
var patternPathsTemplate = fs.readFileSync('./source/_patternlab-files/partials/patternPaths.mustache', 'utf8');
428+
var patternPathsTemplate = fs.readFileSync(path.resolve(paths.source.patternlabFiles, 'partials/patternPaths.mustache'), 'utf8');
428429
var patternPathsPartialHtml = pattern_assembler.renderPattern(patternPathsTemplate, {'patternPaths': JSON.stringify(patternlab.patternPaths)});
429430

430431
//viewAllPaths
431-
var viewAllPathsTemplate = fs.readFileSync('./source/_patternlab-files/partials/viewAllPaths.mustache', 'utf8');
432+
var viewAllPathsTemplate = fs.readFileSync(path.resolve(paths.source.patternlabFiles, 'partials/viewAllPaths.mustache'), 'utf8');
432433
var viewAllPathsPartialHtml = pattern_assembler.renderPattern(viewAllPathsTemplate, {'viewallpaths': JSON.stringify(patternlab.viewAllPaths)});
433434

434435
//render the patternlab template, with all partials
@@ -438,7 +439,7 @@ var patternlab_engine = function () {
438439
'patternPaths': patternPathsPartialHtml,
439440
'viewAllPaths': viewAllPathsPartialHtml
440441
});
441-
fs.outputFileSync('./public/index.html', patternlabSiteHtml);
442+
fs.outputFileSync(path.resolve(paths.public.root, 'index.html'), patternlabSiteHtml);
442443
}
443444

444445
function addToPatternPaths(bucketName, pattern){

builder/patternlab_gulp.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ module.exports = function(gulp) {
2121
gulp.task('patternlab:version', function(){
2222
var patternlab = patternlab_engine();
2323
patternlab.version();
24-
})
24+
});
2525

2626
gulp.task('patternlab:only_patterns', ['clean'], function(){
2727
var patternlab = patternlab_engine();
2828
patternlab.build_patterns_only(false);
29-
})
29+
});
3030

3131
gulp.task('patternlab:help', function(){
3232
var patternlab = patternlab_engine();
3333
patternlab.help();
34-
})
34+
});
3535

36-
}
36+
};

builder/pseudopattern_hunter.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
/*
2-
* patternlab-node - v1.0.1 - 2015
3-
*
1+
/*
2+
* patternlab-node - v1.0.1 - 2015
3+
*
44
* Brian Muenzenmeyer, 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

@@ -20,15 +20,16 @@
2020
pa = require('./pattern_assembler'),
2121
lh = require('./lineage_hunter'),
2222
of = require('./object_factory'),
23-
mustache = require('mustache');
23+
path = require('path');
2424

2525
var pattern_assembler = new pa();
2626
var lineage_hunter = new lh();
27+
var paths = patternlab.config.paths;
2728

2829
//look for a pseudo pattern by checking if there is a file containing same name, with ~ in it, ending in .json
2930
var needle = currentPattern.subdir + '/' + currentPattern.fileName + '~*.json';
3031
var pseudoPatterns = glob.sync(needle, {
31-
cwd: patternlab.config.patterns.source + '/',
32+
cwd: paths.source.patterns,
3233
debug: false,
3334
nodir: true,
3435
});
@@ -42,13 +43,13 @@
4243
}
4344

4445
//we want to do everything we normally would here, except instead read the pseudoPattern data
45-
var variantFileData = fs.readJSONSync(patternlab.config.patterns.source + '/' + pseudoPatterns[i]);
46+
var variantFileData = fs.readJSONSync(path.resolve(paths.source.patterns, pseudoPatterns[i]));
4647

4748
//extend any existing data with variant data
4849
variantFileData = pattern_assembler.merge_data(currentPattern.jsonFileData, variantFileData);
4950

5051
var variantName = pseudoPatterns[i].substring(pseudoPatterns[i].indexOf('~') + 1).split('.')[0];
51-
var variantFilePath = patternlab.config.patterns.source + '/' + currentPattern.subdir + '/' + currentPattern.fileName + '~' + variantName + '.json';
52+
var variantFilePath = path.resolve(paths.source.patterns, currentPattern.subdir, currentPattern.fileName + '~' + variantName + '.json');
5253
var variantFileName = currentPattern.fileName + '-' + variantName + '.';
5354
var patternVariant = new of.oPattern(variantFilePath, currentPattern.subdir, variantFileName, variantFileData);
5455

config.json

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,26 @@
1-
{
2-
"patterns" : {
3-
"source" : "./source/_patterns/",
4-
"public" : "./public/patterns/"
5-
},
1+
{
2+
"paths" : {
3+
"source" : {
4+
"root": "./source/",
5+
"patterns" : "./source/_patterns/",
6+
"data" : "./source/_data/",
7+
"patternlabFiles" : "./source/_patternlab-files/",
8+
"js" : "./source/js",
9+
"images" : "./source/images",
10+
"fonts" : "./source/fonts",
11+
"css" : "./source/css/"
12+
},
13+
"public" : {
14+
"root" : "./public/",
15+
"patterns" : "./public/patterns/",
16+
"data" : "./public/data/",
17+
"styleguide" : "./public/styleguide/",
18+
"js" : "./public/js",
19+
"images" : "./public/images",
20+
"fonts" : "./public/fonts",
21+
"css" : "./public/css"
22+
}
23+
},
624
"styleGuideExcludes": [
725
"templates",
826
"pages"
@@ -30,7 +48,7 @@
3048
"tools-docs": true
3149
},
3250
"patternStates": {
33-
"homepage-emergency" : "inprogress"
51+
"homepage-emergency" : "inprogress"
3452
},
3553
"patternExportKeys": [],
3654
"patternExportDirectory": "./pattern_exports/",

0 commit comments

Comments
 (0)