mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2024-11-05 09:56:22 +00:00
Add baseline Handlebars support.
This commit is contained in:
parent
fb783cdbc6
commit
3b8d100f39
@ -10,10 +10,11 @@ Abstract theme representation.
|
||||
, validator = require('is-my-json-valid')
|
||||
, _ = require('underscore')
|
||||
, PATH = require('path')
|
||||
, EXTEND = require('../utils/extend')
|
||||
, moment = require('moment');
|
||||
|
||||
/**
|
||||
The Theme class represents a specific presentation of a resume.
|
||||
The Theme class is a representation of a FluentCV theme asset.
|
||||
@class Theme
|
||||
*/
|
||||
function Theme() {
|
||||
@ -31,8 +32,12 @@ Abstract theme representation.
|
||||
return friendly[val] || val;
|
||||
}
|
||||
|
||||
// Remember the theme folder; might be custom
|
||||
// Open the theme.json file; should have the same name as folder
|
||||
this.folder = themeFolder;
|
||||
var pathInfo = PATH.parse( themeFolder );
|
||||
var themeFile = PATH.join( themeFolder, pathInfo.base + '.json' );
|
||||
var themeInfo = JSON.parse( FS.readFileSync( themeFile, 'utf8' ) );
|
||||
EXTEND( true, this, themeInfo );
|
||||
|
||||
// Iterate over all files in the theme folder, producing an array, fmts,
|
||||
// containing info for each file.
|
||||
|
18
src/eng/handlebars-generator.js
Normal file
18
src/eng/handlebars-generator.js
Normal file
@ -0,0 +1,18 @@
|
||||
/**
|
||||
Handlebars template generate for FluentCV.
|
||||
@license MIT. Copyright (c) 2015 James M. Devlin / FluentDesk.
|
||||
*/
|
||||
|
||||
(function() {
|
||||
|
||||
var _ = require('underscore');
|
||||
var HANDLEBARS = require('handlebars');
|
||||
|
||||
module.exports = function( json, jst, format, cssInfo, opts ) {
|
||||
|
||||
var template = HANDLEBARS.compile(jst);
|
||||
return template( { r: json, filt: opts.filters, cssInfo: cssInfo, headFragment: opts.headFragment || '' } )
|
||||
|
||||
};
|
||||
|
||||
}());
|
37
src/eng/underscore-generator.js
Normal file
37
src/eng/underscore-generator.js
Normal file
@ -0,0 +1,37 @@
|
||||
/**
|
||||
Underscore template generate for FluentCV.
|
||||
@license MIT. Copyright (c) 2015 James M. Devlin / FluentDesk.
|
||||
*/
|
||||
|
||||
(function() {
|
||||
|
||||
var _ = require('underscore');
|
||||
|
||||
module.exports = function( json, jst, format, cssInfo, opts ) {
|
||||
|
||||
// Tweak underscore's default template delimeters
|
||||
_.templateSettings = opts.template;
|
||||
|
||||
// Convert {{ someVar }} to {% print(filt.out(someVar) %}
|
||||
// Convert {{ someVar|someFilter }} to {% print(filt.someFilter(someVar) %}
|
||||
jst = jst.replace( _.templateSettings.interpolate, function replace(m, p1) {
|
||||
if( p1.indexOf('|') > -1 ) {
|
||||
var terms = p1.split('|');
|
||||
return '{% print( filt.' + terms[1] + '( ' + terms[0] + ' )) %}';
|
||||
}
|
||||
else {
|
||||
return '{% print( filt.out(' + p1 + ') ) %}';
|
||||
}
|
||||
});
|
||||
|
||||
// Strip {# comments #}
|
||||
jst = jst.replace( _.templateSettings.comment, '');
|
||||
|
||||
// Compile and run the template. TODO: avoid unnecessary recompiles.
|
||||
jst = _.template(jst)({ r: json, filt: opts.filters, cssInfo: cssInfo, headFragment: opts.headFragment || '' });
|
||||
|
||||
return jst;
|
||||
|
||||
};
|
||||
|
||||
}());
|
@ -1,8 +1,10 @@
|
||||
/**
|
||||
Template-based resume generator base for FluentCV.
|
||||
@license Copyright (c) 2015 | James M. Devlin
|
||||
@license MIT. Copyright (c) 2015 James M. Devlin / FluentDesk.
|
||||
*/
|
||||
|
||||
(function() {
|
||||
|
||||
var FS = require( 'fs' )
|
||||
, _ = require( 'underscore' )
|
||||
, MD = require( 'marked' )
|
||||
@ -14,6 +16,7 @@ var FS = require( 'fs' )
|
||||
|
||||
// Default options.
|
||||
var _defaultOpts = {
|
||||
engine: 'underscore',
|
||||
keepBreaks: true,
|
||||
freezeBreaks: true,
|
||||
nSym: '&newl;', // newline entity
|
||||
@ -43,9 +46,9 @@ var _defaultOpts = {
|
||||
};
|
||||
|
||||
/**
|
||||
TemplateGenerator performs resume generation via Underscore-style template
|
||||
expansion and is appropriate for text-based formats like HTML, plain text,
|
||||
and XML versions of Microsoft Word, Excel, and OpenOffice.
|
||||
TemplateGenerator performs resume generation via local Handlebar or Underscore
|
||||
style template expansion and is appropriate for text-based formats like HTML,
|
||||
plain text, and XML versions of Microsoft Word, Excel, and OpenOffice.
|
||||
*/
|
||||
var TemplateGenerator = module.exports = BaseGenerator.extend({
|
||||
|
||||
@ -96,7 +99,7 @@ var TemplateGenerator = module.exports = BaseGenerator.extend({
|
||||
var cssInfo = { file: curFmt.css ? curFmt.cssPath : null, data: curFmt.css || null };
|
||||
|
||||
// Compile and invoke the template!
|
||||
var mk = this.single( rez, curFmt.data, this.format, cssInfo, opts );
|
||||
var mk = this.single( rez, curFmt.data, this.format, cssInfo, this.opts );
|
||||
this.onBeforeSave && (mk = this.onBeforeSave( { mk: mk, theme: theme, outputFile: f } ));
|
||||
FS.writeFileSync( f, mk, { encoding: 'utf8', flags: 'w' } );
|
||||
|
||||
@ -112,31 +115,14 @@ var TemplateGenerator = module.exports = BaseGenerator.extend({
|
||||
// Freeze whitespace in the template.
|
||||
this.opts.freezeBreaks && ( jst = freeze(jst) );
|
||||
|
||||
// Tweak underscore's default template delimeters
|
||||
_.templateSettings = this.opts.template;
|
||||
// Apply the template.
|
||||
var eng = require( '../eng/' + opts.themeObj.engine + '-generator' );
|
||||
var result = eng( json, jst, format, cssInfo, opts );
|
||||
|
||||
// Convert {{ someVar }} to {% print(filt.out(someVar) %}
|
||||
// Convert {{ someVar|someFilter }} to {% print(filt.someFilter(someVar) %}
|
||||
jst = jst.replace( _.templateSettings.interpolate, function replace(m, p1) {
|
||||
if( p1.indexOf('|') > -1 ) {
|
||||
var terms = p1.split('|');
|
||||
return '{% print( filt.' + terms[1] + '( ' + terms[0] + ' )) %}';
|
||||
}
|
||||
else {
|
||||
return '{% print( filt.out(' + p1 + ') ) %}';
|
||||
}
|
||||
});
|
||||
// Unfreeze whitespace.
|
||||
this.opts.freezeBreaks && ( result = unfreeze(result) );
|
||||
|
||||
// Strip {# comments #}
|
||||
jst = jst.replace( _.templateSettings.comment, '');
|
||||
|
||||
// Compile and run the template. TODO: avoid unnecessary recompiles.
|
||||
jst = _.template(jst)({ r: json, filt: this.opts.filters, cssInfo: cssInfo, headFragment: this.opts.headFragment || '' });
|
||||
|
||||
// Unfreeze whitespace
|
||||
this.opts.freezeBreaks && ( jst = unfreeze(jst) );
|
||||
|
||||
return jst;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@ -174,3 +160,5 @@ var _reg = {
|
||||
regSymN: new RegExp( _defaultOpts.nSym, 'g' ),
|
||||
regSymR: new RegExp( _defaultOpts.rSym, 'g' )
|
||||
};
|
||||
|
||||
}());
|
||||
|
Loading…
Reference in New Issue
Block a user