1
0
mirror of https://github.com/JuanCanham/HackMyResume.git synced 2024-10-05 23:15:12 +01:00
HackMyResume/src/renderers/handlebars-generator.js

101 lines
2.5 KiB
JavaScript
Raw Normal View History

2015-12-06 21:19:55 +00:00
/**
2015-12-17 15:15:59 +00:00
Definition of the HandlebarsGenerator class.
@license MIT. See LICENSE.md for details.
2015-12-17 15:15:59 +00:00
@module handlebars-generator.js
2015-12-06 21:19:55 +00:00
*/
2015-12-06 21:19:55 +00:00
(function() {
2015-12-17 15:15:59 +00:00
var _ = require('underscore')
, HANDLEBARS = require('handlebars')
, FS = require('fs')
, registerHelpers = require('./handlebars-helpers')
, PATH = require('path')
, parsePath = require('parse-filepath')
, READFILES = require('recursive-readdir-sync')
, SLASH = require('slash');
2015-12-17 15:15:59 +00:00
/**
Perform template-based resume generation using Handlebars.js.
@class HandlebarsGenerator
2015-12-17 15:15:59 +00:00
*/
var HandlebarsGenerator = module.exports = {
2015-12-17 15:15:59 +00:00
generate: function( json, jst, format, cssInfo, opts, theme ) {
2016-01-06 16:18:50 +00:00
registerPartials( format, theme );
registerHelpers( theme );
2015-12-17 15:15:59 +00:00
2016-01-06 16:18:50 +00:00
// Preprocess text
var encData = json;
( format === 'html' || format === 'pdf' ) && (encData = json.markdownify());
( format === 'doc' ) && (encData = json.xmlify());
2016-01-06 16:18:50 +00:00
// Compile and run the Handlebars template.
var template = HANDLEBARS.compile(jst);
return template({
r: encData,
RAW: json,
filt: opts.filters,
cssInfo: cssInfo,
format: format,
2015-12-31 00:45:50 +00:00
opts: opts,
headFragment: opts.headFragment || ''
});
2015-12-17 15:15:59 +00:00
}
2015-12-17 15:15:59 +00:00
};
2016-01-06 16:18:50 +00:00
function registerPartials(format, theme) {
if( format === 'html' || format === 'doc' ) {
// Locate the global partials folder
var partialsFolder = PATH.join(
parsePath( require.resolve('fresh-themes') ).dirname,
'/partials/',
format
);
// Register global partials in the /partials folder
// TODO: Only do this once per HMR invocation.
_.each( READFILES( partialsFolder, function(error){ }), function( el ) {
var pathInfo = parsePath( el );
var name = SLASH( PATH.relative( partialsFolder, el )
.replace(/\.html$|\.xml$/, '') );
if( pathInfo.dirname.endsWith('section') ) {
name = SLASH(name.replace(/\.html$|\.xml$/, ''));
}
var tplData = FS.readFileSync( el, 'utf8' );
var compiledTemplate = HANDLEBARS.compile( tplData );
HANDLEBARS.registerPartial( name, compiledTemplate );
theme.partialsInitialized = true;
});
}
2016-01-06 16:18:50 +00:00
// Register theme-specific partials
_.each( theme.partials, function( el ) {
var tplData = FS.readFileSync( el.path, 'utf8' );
var compiledTemplate = HANDLEBARS.compile( tplData );
HANDLEBARS.registerPartial( el.name, compiledTemplate );
});
}
2015-12-06 21:19:55 +00:00
}());