2016-01-27 10:29:26 +00:00
|
|
|
(function() {
|
2018-02-12 05:05:29 +00:00
|
|
|
/**
|
|
|
|
Definition of the HandlebarsGenerator class.
|
|
|
|
@license MIT. See LICENSE.md for details.
|
|
|
|
@module renderers/handlebars-generator
|
|
|
|
*/
|
|
|
|
/**
|
|
|
|
Perform template-based resume generation using Handlebars.js.
|
|
|
|
@class HandlebarsGenerator
|
|
|
|
*/
|
2016-01-27 10:29:26 +00:00
|
|
|
var FS, HANDLEBARS, HMSTATUS, HandlebarsGenerator, PATH, READFILES, SLASH, _, parsePath, registerHelpers, registerPartials;
|
|
|
|
|
|
|
|
_ = require('underscore');
|
|
|
|
|
|
|
|
HANDLEBARS = require('handlebars');
|
|
|
|
|
|
|
|
FS = require('fs');
|
|
|
|
|
|
|
|
registerHelpers = require('../helpers/handlebars-helpers');
|
|
|
|
|
|
|
|
PATH = require('path');
|
|
|
|
|
|
|
|
parsePath = require('parse-filepath');
|
|
|
|
|
|
|
|
READFILES = require('recursive-readdir-sync');
|
|
|
|
|
|
|
|
HMSTATUS = require('../core/status-codes');
|
|
|
|
|
|
|
|
SLASH = require('slash');
|
|
|
|
|
|
|
|
HandlebarsGenerator = module.exports = {
|
|
|
|
generateSimple: function(data, tpl) {
|
2018-02-12 05:05:29 +00:00
|
|
|
var err, template;
|
2016-01-27 10:29:26 +00:00
|
|
|
try {
|
2018-02-12 05:05:29 +00:00
|
|
|
// Compile and run the Handlebars template.
|
2016-01-27 10:29:26 +00:00
|
|
|
template = HANDLEBARS.compile(tpl, {
|
|
|
|
strict: false,
|
2016-12-15 02:14:45 +00:00
|
|
|
assumeObjects: false,
|
2018-02-04 06:43:51 +00:00
|
|
|
noEscape: data.opts.noescape
|
2016-01-27 10:29:26 +00:00
|
|
|
});
|
|
|
|
return template(data);
|
2018-02-12 05:05:29 +00:00
|
|
|
} catch (error1) {
|
|
|
|
err = error1;
|
2016-01-27 10:29:26 +00:00
|
|
|
throw {
|
2016-02-04 23:49:16 +00:00
|
|
|
fluenterror: HMSTATUS[template ? 'invokeTemplate' : 'compileTemplate'],
|
2018-02-12 05:05:29 +00:00
|
|
|
inner: err
|
2016-01-27 10:29:26 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
},
|
|
|
|
generate: function(json, jst, format, curFmt, opts, theme) {
|
|
|
|
var ctx, encData;
|
2018-02-12 05:05:29 +00:00
|
|
|
// Preprocess text
|
2016-01-27 10:29:26 +00:00
|
|
|
encData = json;
|
|
|
|
if (format === 'html' || format === 'pdf') {
|
|
|
|
encData = json.markdownify();
|
|
|
|
}
|
|
|
|
if (format === 'doc') {
|
|
|
|
encData = json.xmlify();
|
|
|
|
}
|
2018-02-12 05:05:29 +00:00
|
|
|
// Set up partials and helpers
|
2018-02-07 10:49:02 +00:00
|
|
|
registerPartials(format, theme);
|
|
|
|
registerHelpers(theme, encData, opts);
|
2018-02-12 05:05:29 +00:00
|
|
|
// Set up the context
|
2016-01-27 10:29:26 +00:00
|
|
|
ctx = {
|
|
|
|
r: encData,
|
|
|
|
RAW: json,
|
|
|
|
filt: opts.filters,
|
|
|
|
format: format,
|
|
|
|
opts: opts,
|
|
|
|
engine: this,
|
|
|
|
results: curFmt.files,
|
|
|
|
headFragment: opts.headFragment || ''
|
|
|
|
};
|
2018-02-12 05:05:29 +00:00
|
|
|
// Render the template
|
2016-01-27 10:29:26 +00:00
|
|
|
return this.generateSimple(ctx, jst);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
registerPartials = function(format, theme) {
|
|
|
|
var partialsFolder;
|
|
|
|
if (_.contains(['html', 'doc', 'md', 'txt', 'pdf'], format)) {
|
2018-02-12 05:05:29 +00:00
|
|
|
// Locate the global partials folder
|
2016-01-27 10:29:26 +00:00
|
|
|
partialsFolder = PATH.join(parsePath(require.resolve('fresh-themes')).dirname, '/partials/', format === 'pdf' ? 'html' : format);
|
2018-02-12 05:05:29 +00:00
|
|
|
// Register global partials in the /partials/[format] folder
|
|
|
|
// TODO: Only do this once per HMR invocation.
|
2016-01-27 10:29:26 +00:00
|
|
|
_.each(READFILES(partialsFolder, function(error) {
|
|
|
|
return {};
|
|
|
|
}), function(el) {
|
|
|
|
var compiledTemplate, name, pathInfo, tplData;
|
|
|
|
pathInfo = parsePath(el);
|
|
|
|
name = SLASH(PATH.relative(partialsFolder, el).replace(/\.(?:html|xml|hbs|md|txt)$/i, ''));
|
|
|
|
tplData = FS.readFileSync(el, 'utf8');
|
|
|
|
compiledTemplate = HANDLEBARS.compile(tplData);
|
|
|
|
HANDLEBARS.registerPartial(name, compiledTemplate);
|
|
|
|
return theme.partialsInitialized = true;
|
|
|
|
});
|
|
|
|
}
|
2018-02-12 05:05:29 +00:00
|
|
|
// Register theme-specific partials
|
2016-01-27 10:29:26 +00:00
|
|
|
return _.each(theme.partials, function(el) {
|
|
|
|
var compiledTemplate, tplData;
|
|
|
|
tplData = FS.readFileSync(el.path, 'utf8');
|
|
|
|
compiledTemplate = HANDLEBARS.compile(tplData);
|
|
|
|
return HANDLEBARS.registerPartial(el.name, compiledTemplate);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
}).call(this);
|
2016-02-02 02:14:36 +00:00
|
|
|
|
|
|
|
//# sourceMappingURL=handlebars-generator.js.map
|