var helper = require('jsdoc/util/templateHelper');
var template = require('./template');
var handlebars = require('handlebars');
// require and register the layout helpers for handlebars
require('handlebars-layouts').register(handlebars);
var tmpl = exports.tmpl = require('../tmpl');
exports.render = function(doclet, resolveLinks){
var tmp = tmpl.doclet;
if (tmpl[doclet.kind]){
tmp = tmpl[doclet.kind];
}
var html = tmp({
crumbs: template.createCrumbs(doclet),
doclet: doclet,
config: template.config,
options: template.options,
navbar: template.navbar
});
if (resolveLinks){
html = helper.resolveLinks(html);
}
return html;
};
handlebars.registerHelper("json", function(context, options){
try {
return !!options.hash.pretty ? JSON.stringify(context, null, 2) : JSON.stringify(context);
} catch(err) {
return err.message;
}
});
handlebars.registerHelper("symbol", function(doclet, options){
var result = "", kind = doclet.kind;
if (kind === 'class' && options.hash.primary){
kind = 'function';
}
if (tmpl['symbol/'+kind]){
result = tmpl['symbol/'+kind](doclet, {data: options.hash});
} else if (template.kinds.pages.indexOf(kind) !== -1 && !options.hash.primary) {
result = tmpl['symbol/page'](doclet, {data: options.hash});
} else {
result = tmpl['symbol/inline'](doclet, {data: options.hash});
}
return new handlebars.SafeString(result);
});
handlebars.registerHelper("type-names", function(type){
var result = "";
if (type && type.names && type.names.length){
type.names.forEach(function(name, i){
if (i > 0) result += ' | ';
result += ''+helper.linkto(name, helper.htmlsafe(name))+'';
});
}
return new handlebars.SafeString(result);
});
handlebars.registerHelper("param-attribs", function(param){
var result = "";
if (param){
if (param.optional){
result += '<optional>
'
}
if (param.nullable){
result += '<nullable>
'
}
if (param.variable){
result += '<repeatable>
'
}
}
return new handlebars.SafeString(result);
});
handlebars.registerHelper("callout", function(title, classes, options){
title = typeof title === 'string' ? title : '';
classes = typeof classes === 'string' ? classes : 'callout-default';
var result = '