mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2024-12-23 13:47:22 +00:00
Refactor generator logic.
This commit is contained in:
parent
d901047043
commit
558a321fe8
@ -47,7 +47,7 @@
|
||||
"dependencies": {
|
||||
"colors": "^1.1.2",
|
||||
"copy": "^0.1.3",
|
||||
"fresh-themes": "~0.9.0-beta",
|
||||
"fresh-themes": "~0.9.2-beta",
|
||||
"fresca": "~0.2.2",
|
||||
"fs-extra": "^0.24.0",
|
||||
"handlebars": "^4.0.5",
|
||||
|
@ -1,6 +1,6 @@
|
||||
/**
|
||||
Definition of the HtmlPngGenerator class.
|
||||
@license MIT. Copyright (c) 2015 James Devlin / FluentDesk.
|
||||
@license MIT. See LICENSE.MD for details.
|
||||
@module html-png-generator.js
|
||||
*/
|
||||
|
||||
@ -11,7 +11,7 @@ Definition of the HtmlPngGenerator class.
|
||||
, HTML = require( 'html' );
|
||||
|
||||
/**
|
||||
An HTML-based PDF resume generator for HackMyResume.
|
||||
An HTML-based PNG resume generator for HackMyResume.
|
||||
*/
|
||||
var HtmlPngGenerator = module.exports = TemplateGenerator.extend({
|
||||
|
||||
@ -19,24 +19,29 @@ Definition of the HtmlPngGenerator class.
|
||||
this._super( 'png', 'html' );
|
||||
},
|
||||
|
||||
/**
|
||||
Generate the binary PDF.
|
||||
*/
|
||||
onBeforeSave: function( info ) {
|
||||
png( info.mk, info.outputFile );
|
||||
return null; // halt further processing
|
||||
invoke: function( rez, themeMarkup, cssInfo, opts ) {
|
||||
//return YAML.stringify( JSON.parse( rez.stringify() ), Infinity, 2 );
|
||||
},
|
||||
|
||||
generate: function( rez, f, opts ) {
|
||||
var htmlResults = opts.targets.filter(function(t){
|
||||
return t.fmt.outFormat === 'html';
|
||||
});
|
||||
var htmlFile = htmlResults[0].final.files.filter(function(fl){
|
||||
return fl.info.ext === 'html';
|
||||
});
|
||||
png(htmlFile[0].data, f);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
Generate a PDF from HTML.
|
||||
Generate a PNG from HTML.
|
||||
*/
|
||||
function png( markup, fOut ) {
|
||||
|
||||
require('webshot')( markup , { encoding: 'binary', siteType: 'html' } )
|
||||
.pipe( FS.createWriteStream( fOut ) );
|
||||
|
||||
// require('webshot')( markup , { encoding: 'binary', siteType: 'html' } )
|
||||
// .pipe( FS.createWriteStream( fOut ) );
|
||||
require('webshot')( markup , fOut, { siteType: 'html' }, function(err) { } );
|
||||
}
|
||||
|
||||
}());
|
||||
|
@ -6,6 +6,8 @@ Implementation of the 'generate' verb for HackMyResume.
|
||||
|
||||
(function() {
|
||||
|
||||
|
||||
|
||||
var PATH = require('path')
|
||||
, FS = require('fs')
|
||||
, MD = require('marked')
|
||||
@ -70,22 +72,23 @@ Implementation of the 'generate' verb for HackMyResume.
|
||||
var targets = expand( dst, theTheme );
|
||||
|
||||
// Run the transformation!
|
||||
var finished = targets.map( function(t) {
|
||||
return EXTEND(true, t, { markup: single(t, theTheme) });
|
||||
targets.forEach( function(t) {
|
||||
t.final = single( t, theTheme, targets );
|
||||
});
|
||||
|
||||
// Don't send the client back empty-handed
|
||||
return { sheet: rez, targets: targets, processed: finished };
|
||||
return { sheet: rez, targets: targets, processed: targets };
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Generate a single resume of a specific format. TODO: Refactor.
|
||||
Generate a single target resume such as "out/rez.html" or "out/rez.doc".
|
||||
@param targInfo Information for the target resume.
|
||||
@param theme A FRESHTheme or JRSTheme object.
|
||||
@returns
|
||||
*/
|
||||
function single( targInfo, theme ) {
|
||||
function single( targInfo, theme, finished ) {
|
||||
|
||||
function MDIN(txt) { // TODO: Move this
|
||||
return MD(txt || '' ).replace(/^\s*<p>|<\/p>\s*$/gi, '');
|
||||
@ -107,7 +110,8 @@ Implementation of the 'generate' verb for HackMyResume.
|
||||
theFormat = _fmts.filter(
|
||||
function(fmt) { return fmt.name === targInfo.fmt.outFormat; })[0];
|
||||
MKDIRP.sync( PATH.dirname( f ) ); // Ensure dest folder exists;
|
||||
theFormat.gen.generate( rez, f, _opts );
|
||||
_opts.targets = finished;
|
||||
return theFormat.gen.generate( rez, f, _opts );
|
||||
}
|
||||
|
||||
// Otherwise this is either a) a JSON Resume theme or b) an ad-hoc format
|
||||
@ -166,29 +170,67 @@ Implementation of the 'generate' verb for HackMyResume.
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Expand output files.
|
||||
Expand output files. For example, "foo.all" should be expanded to
|
||||
["foo.html", "foo.doc", "foo.pdf", "etc"].
|
||||
@param dst An array of output files as specified by the user.
|
||||
@param theTheme A FRESHTheme or JRSTheme object.
|
||||
*/
|
||||
function expand( dst, theTheme ) {
|
||||
var targets = [];
|
||||
// (can't use map() here).
|
||||
( (dst && dst.length && dst) || ['resume.all'] ).forEach( function(t) {
|
||||
|
||||
var to = PATH.resolve(t),
|
||||
pa = parsePath(to),
|
||||
fmat = pa.extname || '.all';
|
||||
// Add freebie formats (JSON, YAML, PNG) every theme gets...
|
||||
// Add HTML-driven PNG only if the theme has an HTML format.
|
||||
theTheme.formats.json = theTheme.formats.json || {
|
||||
freebie: true, title: 'json', outFormat: 'json', pre: 'json',
|
||||
ext: 'json', path: null, data: null
|
||||
};
|
||||
theTheme.formats.yml = theTheme.formats.yml || {
|
||||
freebie: true, title: 'yaml', outFormat: 'yml', pre: 'yml',
|
||||
ext: 'yml', path: null, data: null
|
||||
};
|
||||
theTheme.formats.png = theTheme.formats.png ||
|
||||
( theTheme.formats.html && {
|
||||
freebie: true, title: 'png', outFormat: 'png',
|
||||
ext: 'yml', path: null, data: null
|
||||
});
|
||||
|
||||
// Set up the destination collection. It's either the array of files passed
|
||||
// by the user or 'out/resume.all' if no targets were specified.
|
||||
var destColl = (dst && dst.length && dst) ||
|
||||
[PATH.normalize('out/resume.all')]
|
||||
|
||||
// Assemble an array of expanded target files... (can't use map() here)
|
||||
var targets = [];
|
||||
destColl.forEach( function(t) {
|
||||
|
||||
var to = PATH.resolve(t), pa = parsePath(to),fmat = pa.extname || '.all';
|
||||
|
||||
var explicitFormats = _.omit( theTheme.formats, function(val) {
|
||||
return !val.freebie;
|
||||
});
|
||||
var implicitFormats = _.omit( theTheme.formats, function(val) {
|
||||
return val.freebie;
|
||||
});
|
||||
|
||||
targets.push.apply(
|
||||
targets, fmat === '.all' ?
|
||||
|
||||
Object.keys( theTheme.formats ).map(function(k){
|
||||
Object.keys( implicitFormats ).map( function( k ) {
|
||||
var z = theTheme.formats[k];
|
||||
return { file: to.replace(/all$/g,z.outFormat), fmt: z };
|
||||
return { file: to.replace( /all$/g, z.outFormat ), fmt: z };
|
||||
}) :
|
||||
[{ file: to, fmt: theTheme.getFormat( fmat.slice(1) ) }]);
|
||||
|
||||
targets.push.apply(
|
||||
targets, fmat === '.all' ?
|
||||
Object.keys( explicitFormats ).map( function( k ) {
|
||||
var z = theTheme.formats[k];
|
||||
return { file: to.replace( /all$/g, z.outFormat ), fmt: z };
|
||||
}) :
|
||||
[{ file: to, fmt: theTheme.getFormat( fmat.slice(1) ) }]);
|
||||
|
||||
});
|
||||
|
||||
return targets;
|
||||
}
|
||||
|
||||
@ -223,16 +265,6 @@ Implementation of the 'generate' verb for HackMyResume.
|
||||
var theTheme = _opts.theme.indexOf('jsonresume-theme-') > -1 ?
|
||||
new JRSTheme().open(tFolder) : new FluentTheme().open( tFolder );
|
||||
|
||||
// Add freebie formats every theme gets
|
||||
theTheme.formats.json = theTheme.formats.json || {
|
||||
title: 'json', outFormat: 'json', pre: 'json',
|
||||
ext: 'json', path: null, data: null
|
||||
};
|
||||
theTheme.formats.yml = theTheme.formats.yml || {
|
||||
title: 'yaml', outFormat: 'yml', pre: 'yml',
|
||||
ext: 'yml', path: null, data: null
|
||||
};
|
||||
|
||||
// Cache the theme object
|
||||
_opts.themeObj = theTheme;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user