autoload-hogan.js 1.05 KB
//override the function that loads a new template, to make it load partials dynamically based on their path
var autoload = require('./autoload-path');
var fs = require('fs');

module.exports = function(hogan, paths) {
 var $page_name , $layout_name;
 this.set_params = function(page_name , layout_name) {
	$page_name = page_name || 'index';
	$layout_name = layout_name || 'default';
 }

 hogan.Template.prototype.rp = function(symbol, context, partials, indent) {
	var partial = this.ep(symbol, partials);
	
	if (!partial) {
	  var partial_name = symbol.replace(/^([^\w\d])/ , '').replace(/(\d)?(\d{1,})$/, '$1');
	  //convert something like: "<page.style_32" to "page.style_3"

	  var partial_path = autoload(partial_name , {'page_name' : $page_name , 'layout_name' : $layout_name} , paths);
	  if(partial_path != '') partial = fs.readFileSync(partial_path, 'utf-8');
	}
	if (!partial) {
        return '';
    }
	
	if (this.c && typeof partial == 'string') {
		partial = this.c.compile(partial, this.options);
    }
	
    return partial.ri(context, partials, indent);
 }
}