|
/** |
|
* Handlebars Helpers for Pattern Lab |
|
* Copyright (c) 2014 Jon Schlinkert |
|
* Licensed under the MIT License (MIT). |
|
*/ |
|
'use strict'; |
|
|
|
var path = require('path'); |
|
var file = require('fs-utils'); |
|
var _ = require('lodash'); |
|
var matter = require('gray-matter'); |
|
|
|
var inspectProperties = function(obj){ |
|
var str = ''; |
|
for(var k in obj){ |
|
if(obj.hasOwnProperty(k)){ |
|
str += k+ ": " + obj[k] + "\n"; |
|
} |
|
} |
|
return str; |
|
} |
|
|
|
module.exports.register = function (Handlebars, options, params) { |
|
options = options || {}; |
|
|
|
var config = _.extend(options, options.data || {}); |
|
|
|
var patterns = ['atom', 'molecule', 'organism']; |
|
|
|
patterns.forEach(function(pattern) { |
|
var inflection = pattern + 's'; |
|
|
|
file.expand(options.patterns[inflection]).map(function(filepath) { |
|
var name = pattern + '-' + file.base(filepath); |
|
var template = file.readFileSync(filepath); |
|
Handlebars.registerPartial(name, template); |
|
}); |
|
|
|
Handlebars.registerHelper(pattern, function(name, context) { |
|
context = _.extend(config, context || {}); |
|
|
|
var template = Handlebars.partials[pattern + '-' + name]; |
|
|
|
var frontMatter = matter(template); |
|
|
|
// the source of the partial without front-matter |
|
var body = frontMatter.content; |
|
|
|
// the data from lowest-to-highest priority being overridden in front-matter |
|
var data = _.extend(context, frontMatter.data, this, options.hash); |
|
|
|
var fn = Handlebars.compile(body); |
|
return new Handlebars.SafeString(fn(data)); |
|
}); |
|
}); |
|
}; |