diff --git a/src/core/fresh-resume.js b/src/core/fresh-resume.js index 8484f67..adf5e2e 100644 --- a/src/core/fresh-resume.js +++ b/src/core/fresh-resume.js @@ -17,13 +17,10 @@ const extend = require('extend'); let validator = require('is-my-json-valid'); const _ = require('underscore'); const __ = require('lodash'); -const PATH = require('path'); -const moment = require('moment'); const XML = require('xml-escape'); const MD = require('marked'); const CONVERTER = require('fresh-jrs-converter'); const JRSResume = require('./jrs-resume'); -const FluentDate = require('./fluent-date'); @@ -62,9 +59,9 @@ class FreshResume {// extends AbstractResume let scrubbed; if (opts && opts.privatize) { // Ignore any element with the 'ignore: true' or 'private: true' designator. - let ignoreList, privateList; const scrubber = require('../utils/resume-scrubber'); - ({ scrubbed, ignoreList, privateList } = scrubber.scrubResume(rep, opts)); + var ret = scrubber.scrubResume(rep, opts); + scrubbed = ret.scrubbed; } // Now apply the resume representation onto this object @@ -287,11 +284,11 @@ class FreshResume {// extends AbstractResume const defSheet = FreshResume.default(); const newObject = defSheet[moniker].history - ? $.extend( true, {}, defSheet[ moniker ].history[0] ) + ? extend( true, {}, defSheet[ moniker ].history[0] ) : moniker === 'skills' - ? $.extend( true, {}, defSheet.skills.sets[0] ) - : $.extend( true, {}, defSheet[ moniker ][0] ); + ? extend( true, {}, defSheet.skills.sets[0] ) + : extend( true, {}, defSheet[ moniker ][0] ); this[ moniker ] = this[ moniker ] || []; if (this[ moniker ].history) { @@ -346,7 +343,7 @@ class FreshResume {// extends AbstractResume /** Validate the sheet against the FRESH Resume schema. */ - isValid( info ) { + isValid() { const schemaObj = require('fresh-resume-schema'); validator = require('is-my-json-valid'); const validate = validator( schemaObj, { // See Note [1]. @@ -385,7 +382,7 @@ class FreshResume {// extends AbstractResume const sortSection = function( key ) { const ar = __.get(this, key); if (ar && ar.length) { - const datedThings = obj.filter(o => o.start); + const datedThings = ar.filter(o => o.start); return datedThings.sort( byDateDesc ); } }; diff --git a/src/core/fresh-theme.js b/src/core/fresh-theme.js index c2c6d59..8e4ca8a 100644 --- a/src/core/fresh-theme.js +++ b/src/core/fresh-theme.js @@ -14,14 +14,11 @@ Definition of the FRESHTheme class. const FS = require('fs'); -const validator = require('is-my-json-valid'); const _ = require('underscore'); const PATH = require('path'); const parsePath = require('parse-filepath'); -const pathExists = require('path-exists').sync; const EXTEND = require('extend'); const HMSTATUS = require('./status-codes'); -const moment = require('moment'); const loadSafeJson = require('../utils/safe-json-loader'); const READFILES = require('recursive-readdir-sync'); @@ -40,9 +37,6 @@ class FRESHTheme { this.folder = themeFolder; - // Open the [theme-name].json file; should have the same name as folder - const pathInfo = parsePath(themeFolder); - // Set up a formats hash for the theme let formatsHash = { }; @@ -59,8 +53,6 @@ class FRESHTheme { }; } - const that = this; - // Move properties from the theme JSON file to the theme object EXTEND(true, this, themeInfo.json); @@ -116,11 +108,8 @@ class FRESHTheme { var _load = function(formatsHash) { const that = this; - const major = false; const tplFolder = PATH.join(this.folder, this.baseFolder); - const copyOnly = ['.ttf','.otf', '.png','.jpg','.jpeg','.pdf']; - // Iterate over all files in the theme folder, producing an array, fmts, // containing info for each file. While we're doing that, also build up // the formatsHash object. @@ -261,4 +250,4 @@ module.exports = FRESHTheme; function __guard__(value, transform) { return (typeof value !== 'undefined' && value !== null) ? transform(value) : undefined; -} \ No newline at end of file +} diff --git a/src/core/jrs-resume.js b/src/core/jrs-resume.js index fa65187..a382da1 100644 --- a/src/core/jrs-resume.js +++ b/src/core/jrs-resume.js @@ -18,9 +18,7 @@ const extend = require('extend'); let validator = require('is-my-json-valid'); const _ = require('underscore'); const PATH = require('path'); -const MD = require('marked'); const CONVERTER = require('fresh-jrs-converter'); -const moment = require('moment'); /** @@ -28,270 +26,268 @@ A JRS resume or CV. JRS resumes are backed by JSON, and each JRSResume object is an instantiation of that JSON decorated with utility methods. @class JRSResume */ -var JRSResume = (function() { - let clear = undefined; - JRSResume = class JRSResume { - static initClass() { - - - - /** Reset the sheet to an empty state. */ - clear = function( clearMeta ) { - clearMeta = ((clearMeta === undefined) && true) || clearMeta; - if (clearMeta) { delete this.imp; } - delete this.basics.computed; // Don't use Object.keys() here - delete this.work; - delete this.volunteer; - delete this.education; - delete this.awards; - delete this.publications; - delete this.interests; - delete this.skills; - return delete this.basics.profiles; - }; - // extends AbstractResume + + +class JRSResume { + + static initClass() { + /** Reset the sheet to an empty state. */ + // clear = function( clearMeta ) { + // clearMeta = ((clearMeta === undefined) && true) || clearMeta; + // if (clearMeta) { delete this.imp; } + // delete this.basics.computed; // Don't use Object.keys() here + // delete this.work; + // delete this.volunteer; + // delete this.education; + // delete this.awards; + // delete this.publications; + // delete this.interests; + // delete this.skills; + // return delete this.basics.profiles; + // }; + // extends AbstractResume + } + + + + /** Initialize the the JSResume from string. */ + parse( stringData, opts ) { + this.imp = this.imp != null ? this.imp : {raw: stringData}; + return this.parseJSON(JSON.parse( stringData ), opts); + } + + + + /** + Initialize the JRSResume object from JSON. + Open and parse the specified JRS resume. Merge the JSON object model onto + this Sheet instance with extend() and convert sheet dates to a safe & + consistent format. Then sort each section by startDate descending. + @param rep {Object} The raw JSON representation. + @param opts {Object} Resume loading and parsing options. + { + date: Perform safe date conversion. + sort: Sort resume items by date. + compute: Prepare computed resume totals. + } + */ + parseJSON( rep, opts ) { + let scrubbed; + opts = opts || { }; + if (opts.privatize) { + const scrubber = require('../utils/resume-scrubber'); + // Ignore any element with the 'ignore: true' or 'private: true' designator. + var ret = scrubber.scrubResume(rep, opts); + scrubbed = ret.scrubbed; } + // Extend resume properties onto ourself. + extend(true, this, opts.privatize ? scrubbed : rep); - - /** Initialize the the JSResume from string. */ - parse( stringData, opts ) { - this.imp = this.imp != null ? this.imp : {raw: stringData}; - return this.parseJSON(JSON.parse( stringData ), opts); - } - - - - /** - Initialize the JRSResume object from JSON. - Open and parse the specified JRS resume. Merge the JSON object model onto - this Sheet instance with extend() and convert sheet dates to a safe & - consistent format. Then sort each section by startDate descending. - @param rep {Object} The raw JSON representation. - @param opts {Object} Resume loading and parsing options. - { - date: Perform safe date conversion. - sort: Sort resume items by date. - compute: Prepare computed resume totals. - } - */ - parseJSON( rep, opts ) { - let scrubbed; + // Set up metadata + if (!(this.imp != null ? this.imp.processed : undefined)) { + // Set up metadata TODO: Clean up metadata on the object model. opts = opts || { }; - if (opts.privatize) { - let ignoreList, privateList; - const scrubber = require('../utils/resume-scrubber'); - // Ignore any element with the 'ignore: true' or 'private: true' designator. - ({ scrubbed, ignoreList, privateList } = scrubber.scrubResume(rep, opts)); - } - - // Extend resume properties onto ourself. - extend(true, this, opts.privatize ? scrubbed : rep); - - // Set up metadata - if (!(this.imp != null ? this.imp.processed : undefined)) { - // Set up metadata TODO: Clean up metadata on the object model. - opts = opts || { }; - if ((opts.imp === undefined) || opts.imp) { - this.imp = this.imp || { }; - this.imp.title = (opts.title || this.imp.title) || this.basics.name; - if (!this.imp.raw) { - this.imp.raw = JSON.stringify(rep); - } - } - this.imp.processed = true; - } - // Parse dates, sort dates, and calculate computed values - ((opts.date === undefined) || opts.date) && _parseDates.call( this ); - ((opts.sort === undefined) || opts.sort) && this.sort(); - if ((opts.compute === undefined) || opts.compute) { - this.basics.computed = { - numYears: this.duration(), - keywords: this.keywords() - }; - } - return this; - } - - - - /** Save the sheet to disk (for environments that have disk access). */ - save( filename ) { - this.imp.file = filename || this.imp.file; - FS.writeFileSync(this.imp.file, this.stringify( this ), 'utf8'); - return this; - } - - - - /** Save the sheet to disk in a specific format, either FRESH or JRS. */ - saveAs( filename, format ) { - if (format === 'JRS') { - this.imp.file = filename || this.imp.file; - FS.writeFileSync( this.imp.file, this.stringify(), 'utf8' ); - } else { - const newRep = CONVERTER.toFRESH(this); - const stringRep = CONVERTER.toSTRING(newRep); - FS.writeFileSync(filename, stringRep, 'utf8'); - } - return this; - } - - - - /** Return the resume format. */ - format() { return 'JRS'; } - - - - stringify() { return JRSResume.stringify( this ); } - - - - /** Return a unique list of all keywords across all skills. */ - keywords() { - let flatSkills = []; - if (this.skills && this.skills.length) { - this.skills.forEach( s => flatSkills = _.union(flatSkills, s.keywords)); - } - return flatSkills; - } - - - - /** - Return internal metadata. Create if it doesn't exist. - JSON Resume v0.0.0 doesn't allow additional properties at the root level, - so tuck this into the .basic sub-object. - */ - i() { - return this.imp = this.imp != null ? this.imp : { }; - } - - - - /** Add work experience to the sheet. */ - add( moniker ) { - const defSheet = JRSResume.default(); - const newObject = $.extend( true, {}, defSheet[ moniker ][0] ); - this[ moniker ] = this[ moniker ] || []; - this[ moniker ].push( newObject ); - return newObject; - } - - - - /** Determine if the sheet includes a specific social profile (eg, GitHub). */ - hasProfile( socialNetwork ) { - socialNetwork = socialNetwork.trim().toLowerCase(); - return this.basics.profiles && _.some(this.basics.profiles, p => p.network.trim().toLowerCase() === socialNetwork); - } - - - - /** Determine if the sheet includes a specific skill. */ - hasSkill( skill ) { - skill = skill.trim().toLowerCase(); - return this.skills && _.some(this.skills, sk => - sk.keywords && _.some(sk.keywords, kw => kw.trim().toLowerCase() === skill) - ); - } - - - - /** Validate the sheet against the JSON Resume schema. */ - isValid( ) { // TODO: ↓ fix this path ↓ - const schema = FS.readFileSync(PATH.join( __dirname, 'resume.json' ), 'utf8'); - const schemaObj = JSON.parse(schema); - validator = require('is-my-json-valid'); - const validate = validator( schemaObj, { // Note [1] - formats: { date: /^\d{4}(?:-(?:0[0-9]{1}|1[0-2]{1})(?:-[0-9]{2})?)?$/ } - }); - const temp = this.imp; - delete this.imp; - const ret = validate(this); - this.imp = temp; - if (!ret) { + if ((opts.imp === undefined) || opts.imp) { this.imp = this.imp || { }; - this.imp.validationErrors = validate.errors; + this.imp.title = (opts.title || this.imp.title) || this.basics.name; + if (!this.imp.raw) { + this.imp.raw = JSON.stringify(rep); + } } - return ret; + this.imp.processed = true; } - - - - duration(unit) { - const inspector = require('../inspectors/duration-inspector'); - return inspector.run(this, 'work', 'startDate', 'endDate', unit); - } - - - - /** - Sort dated things on the sheet by start date descending. Assumes that dates - on the sheet have been processed with _parseDates(). - */ - sort( ) { - - const byDateDesc = function(a,b) { - if (a.safeStartDate.isBefore(b.safeStartDate)) { - return 1; - } else { return ( a.safeStartDate.isAfter(b.safeStartDate) && -1 ) || 0; } + // Parse dates, sort dates, and calculate computed values + ((opts.date === undefined) || opts.date) && _parseDates.call( this ); + ((opts.sort === undefined) || opts.sort) && this.sort(); + if ((opts.compute === undefined) || opts.compute) { + this.basics.computed = { + numYears: this.duration(), + keywords: this.keywords() }; - - this.work && this.work.sort(byDateDesc); - this.education && this.education.sort(byDateDesc); - this.volunteer && this.volunteer.sort(byDateDesc); - - this.awards && this.awards.sort(function(a, b) { - if (a.safeDate.isBefore(b.safeDate)) { - return 1; - } else { return (a.safeDate.isAfter(b.safeDate) && -1 ) || 0; } - }); - - return this.publications && this.publications.sort(function(a, b) { - if ( a.safeReleaseDate.isBefore(b.safeReleaseDate) ) { - return 1; - } else { return ( a.safeReleaseDate.isAfter(b.safeReleaseDate) && -1 ) || 0; } - }); } + return this; + } - dupe() { - const rnew = new JRSResume(); - rnew.parse(this.stringify(), { }); - return rnew; + /** Save the sheet to disk (for environments that have disk access). */ + save( filename ) { + this.imp.file = filename || this.imp.file; + FS.writeFileSync(this.imp.file, this.stringify( this ), 'utf8'); + return this; + } + + + + /** Save the sheet to disk in a specific format, either FRESH or JRS. */ + saveAs( filename, format ) { + if (format === 'JRS') { + this.imp.file = filename || this.imp.file; + FS.writeFileSync( this.imp.file, this.stringify(), 'utf8' ); + } else { + const newRep = CONVERTER.toFRESH(this); + const stringRep = CONVERTER.toSTRING(newRep); + FS.writeFileSync(filename, stringRep, 'utf8'); } + return this; + } - /** - Create a copy of this resume in which all fields have been interpreted as - Markdown. - */ - harden() { + /** Return the resume format. */ + format() { return 'JRS'; } - const ret = this.dupe(); - const HD = txt => `@@@@~${txt}~@@@@`; - const HDIN = txt => - //return MD(txt || '' ).replace(/^\s*
|<\/p>\s*$/gi, ''); - HD(txt) - ; + stringify() { return JRSResume.stringify( this ); } - const transformer = require('../utils/string-transformer'); - return transformer(ret, - [ 'skills','url','website','startDate','endDate', 'releaseDate', 'date', - 'phone','email','address','postalCode','city','country','region', - 'safeStartDate','safeEndDate' ], - (key, val) => HD(val)); + + + /** Return a unique list of all keywords across all skills. */ + keywords() { + let flatSkills = []; + if (this.skills && this.skills.length) { + this.skills.forEach( s => flatSkills = _.union(flatSkills, s.keywords)); } - }; - JRSResume.initClass(); - return JRSResume; -})(); + return flatSkills; + } + + + + /** + Return internal metadata. Create if it doesn't exist. + JSON Resume v0.0.0 doesn't allow additional properties at the root level, + so tuck this into the .basic sub-object. + */ + i() { + return this.imp = this.imp != null ? this.imp : { }; + } + + + + /** Add work experience to the sheet. */ + add( moniker ) { + const defSheet = JRSResume.default(); + const newObject = extend( true, {}, defSheet[ moniker ][0] ); + this[ moniker ] = this[ moniker ] || []; + this[ moniker ].push( newObject ); + return newObject; + } + + + + /** Determine if the sheet includes a specific social profile (eg, GitHub). */ + hasProfile( socialNetwork ) { + socialNetwork = socialNetwork.trim().toLowerCase(); + return this.basics.profiles && _.some(this.basics.profiles, p => p.network.trim().toLowerCase() === socialNetwork); + } + + + + /** Determine if the sheet includes a specific skill. */ + hasSkill( skill ) { + skill = skill.trim().toLowerCase(); + return this.skills && _.some(this.skills, sk => + sk.keywords && _.some(sk.keywords, kw => kw.trim().toLowerCase() === skill) + ); + } + + + + /** Validate the sheet against the JSON Resume schema. */ + isValid( ) { // TODO: ↓ fix this path ↓ + const schema = FS.readFileSync(PATH.join( __dirname, 'resume.json' ), 'utf8'); + const schemaObj = JSON.parse(schema); + validator = require('is-my-json-valid'); + const validate = validator( schemaObj, { // Note [1] + formats: { date: /^\d{4}(?:-(?:0[0-9]{1}|1[0-2]{1})(?:-[0-9]{2})?)?$/ } + }); + const temp = this.imp; + delete this.imp; + const ret = validate(this); + this.imp = temp; + if (!ret) { + this.imp = this.imp || { }; + this.imp.validationErrors = validate.errors; + } + return ret; + } + + + + duration(unit) { + const inspector = require('../inspectors/duration-inspector'); + return inspector.run(this, 'work', 'startDate', 'endDate', unit); + } + + + + /** + Sort dated things on the sheet by start date descending. Assumes that dates + on the sheet have been processed with _parseDates(). + */ + sort( ) { + + const byDateDesc = function(a,b) { + if (a.safeStartDate.isBefore(b.safeStartDate)) { + return 1; + } else { return ( a.safeStartDate.isAfter(b.safeStartDate) && -1 ) || 0; } + }; + + this.work && this.work.sort(byDateDesc); + this.education && this.education.sort(byDateDesc); + this.volunteer && this.volunteer.sort(byDateDesc); + + this.awards && this.awards.sort(function(a, b) { + if (a.safeDate.isBefore(b.safeDate)) { + return 1; + } else { return (a.safeDate.isAfter(b.safeDate) && -1 ) || 0; } + }); + + return this.publications && this.publications.sort(function(a, b) { + if ( a.safeReleaseDate.isBefore(b.safeReleaseDate) ) { + return 1; + } else { return ( a.safeReleaseDate.isAfter(b.safeReleaseDate) && -1 ) || 0; } + }); + } + + + + dupe() { + const rnew = new JRSResume(); + rnew.parse(this.stringify(), { }); + return rnew; + } + + + + /** + Create a copy of this resume in which all fields have been interpreted as + Markdown. + */ + harden() { + + const ret = this.dupe(); + + const HD = txt => `@@@@~${txt}~@@@@`; + + // const HDIN = txt => + // //return MD(txt || '' ).replace(/^\s*
|<\/p>\s*$/gi, '');
+ // HD(txt)
+ // ;
+
+ const transformer = require('../utils/string-transformer');
+ return transformer(ret,
+ [ 'skills','url','website','startDate','endDate', 'releaseDate', 'date',
+ 'phone','email','address','postalCode','city','country','region',
+ 'safeStartDate','safeEndDate' ],
+ (key, val) => HD(val));
+ }
+}
+
+JRSResume.initClass();
+
@@ -347,6 +343,6 @@ var _parseDates = function() {
/**
-Export the JRSResume function/ctor.
+Export the JRSResume class.
*/
module.exports = JRSResume;
diff --git a/src/core/jrs-theme.js b/src/core/jrs-theme.js
index af2320d..4e84376 100644
--- a/src/core/jrs-theme.js
+++ b/src/core/jrs-theme.js
@@ -13,7 +13,6 @@ Definition of the JRSTheme class.
const _ = require('underscore');
const PATH = require('path');
-const parsePath = require('parse-filepath');
const pathExists = require('path-exists').sync;
const errors = require('./status-codes');
@@ -34,7 +33,7 @@ class JRSTheme {
open( thFolder ) {
this.folder = thFolder;
- const pathInfo = parsePath(thFolder);
+ //const pathInfo = parsePath(thFolder);
// Open and parse the theme's package.json file
const pkgJsonPath = PATH.join(thFolder, 'package.json');
diff --git a/src/core/resume-factory.js b/src/core/resume-factory.js
index f6cb699..f91d2d9 100644
--- a/src/core/resume-factory.js
+++ b/src/core/resume-factory.js
@@ -15,9 +15,6 @@ const FS = require('fs');
const HMS = require('./status-codes');
const HME = require('./event-codes');
const ResumeConverter = require('fresh-jrs-converter');
-const chalk = require('chalk');
-const SyntaxErrorEx = require('../utils/syntax-error-ex');
-const _ = require('underscore');
const resumeDetect = require('../utils/resume-detector');
require('string.prototype.startswith');
@@ -28,7 +25,7 @@ A simple factory class for FRESH and JSON Resumes.
@class ResumeFactory
*/
-const ResumeFactory = (module.exports = {
+module.exports = {
@@ -96,7 +93,7 @@ const ResumeFactory = (module.exports = {
rez
};
}
-});
+};
var _parse = function( fileName, opts, eve ) {
diff --git a/src/generators/html-generator.js b/src/generators/html-generator.js
index 0aca5e7..8089f38 100644
--- a/src/generators/html-generator.js
+++ b/src/generators/html-generator.js
@@ -11,16 +11,13 @@ Definition of the HTMLGenerator class.
-let HtmlGenerator;
const TemplateGenerator = require('./template-generator');
-const FS = require('fs-extra');
const HTML = require('html');
-const PATH = require('path');
require('string.prototype.endswith');
-module.exports = (HtmlGenerator = class HtmlGenerator extends TemplateGenerator {
+class HtmlGenerator extends TemplateGenerator {
constructor() { super('html'); }
@@ -36,4 +33,7 @@ module.exports = (HtmlGenerator = class HtmlGenerator extends TemplateGenerator
return HTML.prettyPrint(info.mk, this.opts.prettify);
} else { return info.mk; }
}
-});
+}
+
+
+module.exports = HtmlGenerator;
diff --git a/src/generators/html-pdf-cli-generator.js b/src/generators/html-pdf-cli-generator.js
index 3ac6be4..d5adcd8 100644
--- a/src/generators/html-pdf-cli-generator.js
+++ b/src/generators/html-pdf-cli-generator.js
@@ -11,7 +11,6 @@ Definition of the HtmlPdfCLIGenerator class.
-let HtmlPdfCLIGenerator;
const TemplateGenerator = require('./template-generator');
const FS = require('fs-extra');
const PATH = require('path');
@@ -27,7 +26,7 @@ wkhtmltopdf, and other PDF engines over a CLI (command-line interface).
If an engine isn't installed for a particular platform, error out gracefully.
*/
-module.exports = (HtmlPdfCLIGenerator = class HtmlPdfCLIGenerator extends TemplateGenerator {
+class HtmlPdfCLIGenerator extends TemplateGenerator {
@@ -57,9 +56,9 @@ module.exports = (HtmlPdfCLIGenerator = class HtmlPdfCLIGenerator extends Templa
onError(ex, param) {
__guardMethod__(param.errHandler, 'err', o => o.err(HMSTATUS.pdfGeneration, ex));
}
-});
-
+}
+module.exports = HtmlPdfCLIGenerator;
// TODO: Move each engine to a separate module
var engines = {
@@ -127,4 +126,4 @@ function __guardMethod__(obj, methodName, transform) {
} else {
return undefined;
}
-}
\ No newline at end of file
+}
diff --git a/src/generators/html-png-generator.js b/src/generators/html-png-generator.js
index 299683d..308f92d 100644
--- a/src/generators/html-png-generator.js
+++ b/src/generators/html-png-generator.js
@@ -11,10 +11,8 @@ Definition of the HtmlPngGenerator class.
-let HtmlPngGenerator;
const TemplateGenerator = require('./template-generator');
const FS = require('fs-extra');
-const HTML = require('html');
const SLASH = require('slash');
const SPAWN = require('../utils/safe-spawn');
const PATH = require('path');
@@ -23,11 +21,11 @@ const PATH = require('path');
/**
An HTML-based PNG resume generator for HackMyResume.
*/
-module.exports = (HtmlPngGenerator = class HtmlPngGenerator extends TemplateGenerator {
+class HtmlPngGenerator extends TemplateGenerator {
constructor() { super('png', 'html'); }
- invoke( rez, themeMarkup, cssInfo, opts ) {}
+ invoke( /*rez, themeMarkup, cssInfo, opts*/ ) {}
// TODO: Not currently called or callable.
generate( rez, f, opts ) {
@@ -35,7 +33,9 @@ module.exports = (HtmlPngGenerator = class HtmlPngGenerator extends TemplateGene
const htmlFile = htmlResults[0].final.files.filter(fl => fl.info.ext === 'html');
phantom(htmlFile[0].data, f);
}
-});
+}
+
+module.exports = HtmlPngGenerator;
/**
Generate a PDF from HTML using Phantom's CLI interface.
@@ -54,5 +54,5 @@ var phantom = function( markup, fOut ) {
PATH.resolve( __dirname, '../utils/rasterize.js' ) ) );
const sourcePath = SLASH( PATH.relative( process.cwd(), tempFile) );
const destPath = SLASH( PATH.relative( process.cwd(), fOut) );
- const info = SPAWN('phantomjs', [ scriptPath, sourcePath, destPath ]);
+ SPAWN('phantomjs', [ scriptPath, sourcePath, destPath ]);
};
diff --git a/src/generators/json-generator.js b/src/generators/json-generator.js
index 220a2dc..4d8b187 100644
--- a/src/generators/json-generator.js
+++ b/src/generators/json-generator.js
@@ -9,15 +9,13 @@ Definition of the JsonGenerator class.
@license MIT. See LICENSE.md for details.
*/
-let JsonGenerator;
const BaseGenerator = require('./base-generator');
const FS = require('fs');
-const _ = require('underscore');
const FJCV = require('fresh-jrs-converter');
/** The JsonGenerator generates a FRESH or JRS resume as an output. */
-module.exports = (JsonGenerator = class JsonGenerator extends BaseGenerator {
+class JsonGenerator extends BaseGenerator {
constructor() { super('json'); }
@@ -30,4 +28,6 @@ module.exports = (JsonGenerator = class JsonGenerator extends BaseGenerator {
generate( rez, f ) {
FS.writeFileSync(f, this.invoke(rez), 'utf8');
}
-});
+}
+
+module.exports = JsonGenerator;
diff --git a/src/generators/json-yaml-generator.js b/src/generators/json-yaml-generator.js
index 246ed02..121239b 100644
--- a/src/generators/json-yaml-generator.js
+++ b/src/generators/json-yaml-generator.js
@@ -11,7 +11,6 @@ Definition of the JsonYamlGenerator class.
-let JsonYamlGenerator;
const BaseGenerator = require('./base-generator');
const FS = require('fs');
const YAML = require('yamljs');
@@ -24,17 +23,19 @@ JSON without a template, producing an equivalent YAML-formatted resume. See
also YamlGenerator (yaml-generator.js).
*/
-module.exports = (JsonYamlGenerator = class JsonYamlGenerator extends BaseGenerator {
+class JsonYamlGenerator extends BaseGenerator {
constructor() { super('yml'); }
- invoke( rez, themeMarkup, cssInfo, opts ) {
+ invoke( rez/*, themeMarkup, cssInfo, opts*/ ) {
return YAML.stringify(JSON.parse( rez.stringify() ), Infinity, 2);
}
- generate( rez, f, opts ) {
+ generate( rez, f/*, opts */) {
const data = YAML.stringify(JSON.parse( rez.stringify() ), Infinity, 2);
FS.writeFileSync(f, data, 'utf8');
return data;
}
-});
+}
+
+module.exports = JsonYamlGenerator;
diff --git a/src/generators/latex-generator.js b/src/generators/latex-generator.js
index 0c64fc9..3fd965e 100644
--- a/src/generators/latex-generator.js
+++ b/src/generators/latex-generator.js
@@ -4,13 +4,14 @@ Definition of the LaTeXGenerator class.
@license MIT. See LICENSE.md for details.
*/
-let LaTeXGenerator;
const TemplateGenerator = require('./template-generator');
/**
LaTeXGenerator generates a LaTeX resume via TemplateGenerator.
*/
-module.exports = (LaTeXGenerator = class LaTeXGenerator extends TemplateGenerator {
+class LaTeXGenerator extends TemplateGenerator {
constructor() { super('latex', 'tex'); }
-});
+}
+
+module.exports = LaTeXGenerator;
diff --git a/src/generators/markdown-generator.js b/src/generators/markdown-generator.js
index f8f04ea..adc2053 100644
--- a/src/generators/markdown-generator.js
+++ b/src/generators/markdown-generator.js
@@ -4,13 +4,14 @@ Definition of the MarkdownGenerator class.
@license MIT. See LICENSE.md for details.
*/
-let MarkdownGenerator;
const TemplateGenerator = require('./template-generator');
/**
MarkdownGenerator generates a Markdown-formatted resume via TemplateGenerator.
*/
-module.exports = (MarkdownGenerator = class MarkdownGenerator extends TemplateGenerator {
+class MarkdownGenerator extends TemplateGenerator {
constructor() { super('md', 'txt'); }
-});
+}
+
+module.exports = MarkdownGenerator;
diff --git a/src/generators/template-generator.js b/src/generators/template-generator.js
index 0b3e398..0abc319 100644
--- a/src/generators/template-generator.js
+++ b/src/generators/template-generator.js
@@ -11,7 +11,6 @@ Definition of the TemplateGenerator class. TODO: Refactor
-let TemplateGenerator;
const FS = require('fs-extra');
const _ = require('underscore');
const MD = require('marked');
@@ -21,8 +20,6 @@ const parsePath = require('parse-filepath');
const MKDIRP = require('mkdirp');
const BaseGenerator = require('./base-generator');
const EXTEND = require('extend');
-const FRESHTheme = require('../core/fresh-theme');
-const JRSTheme = require('../core/jrs-theme');
@@ -33,7 +30,7 @@ plain text, and XML versions of Microsoft Word, Excel, and OpenOffice.
@class TemplateGenerator
*/
-module.exports = (TemplateGenerator = class TemplateGenerator extends BaseGenerator {
+class TemplateGenerator extends BaseGenerator {
@@ -41,7 +38,7 @@ module.exports = (TemplateGenerator = class TemplateGenerator extends BaseGenera
generator. Will usually be called by a derived generator such as
HTMLGenerator or MarkdownGenerator. */
- constructor( outputFormat, templateFormat, cssFile ) {
+ constructor( outputFormat, templateFormat/*, cssFile */) {
super(outputFormat);
this.tplFormat = templateFormat || outputFormat;
}
@@ -78,7 +75,7 @@ module.exports = (TemplateGenerator = class TemplateGenerator extends BaseGenera
}
//tplInfo.css contains the CSS data loaded by theme
//tplInfo.cssPath contains the absolute path to the source CSS File
- else {}
+ //else {}
// Images and non-transformable binary files
if (typeof opts.onTransform === 'function') {
opts.onTransform(tplInfo);
@@ -153,7 +150,7 @@ module.exports = (TemplateGenerator = class TemplateGenerator extends BaseGenera
// Post-processing
if (this.onAfterSave) {
- return this.onAfterSave({outputFile: fileName, mk: file.data, opts: this.opts});
+ return this.onAfterSave({outputFile: thisFilePath, mk: file.data, opts: this.opts});
}
}
@@ -186,7 +183,10 @@ module.exports = (TemplateGenerator = class TemplateGenerator extends BaseGenera
}
return result;
}
-});
+}
+
+
+module.exports = TemplateGenerator;
@@ -208,10 +208,12 @@ var createSymLinks = function( curFmt, outFolder ) {
try {
FS.symlinkSync(absTarg, absLoc, type);
succeeded = true;
- } catch (error) {}
+ } catch (error) {
+ throw error;
+ }
}
if (!succeeded) {
- throw ex;
+ throw err;
}
}
});
@@ -245,9 +247,9 @@ var _defaultOpts = {
rSym: '&retn;', // return entity
template: {
interpolate: /\{\{(.+?)\}\}/g,
- escape: /\{\{\=(.+?)\}\}/g,
- evaluate: /\{\%(.+?)\%\}/g,
- comment: /\{\#(.+?)\#\}/g
+ escape: /\{\{=(.+?)\}\}/g,
+ evaluate: /\{%(.+?)%\}/g,
+ comment: /\{#(.+?)#\}/g
},
filters: {
out( txt ) { return txt; },
@@ -271,9 +273,11 @@ var _defaultOpts = {
/** Regexes for linebreak preservation. */
+/* eslint-disable no-control-regex */
var _reg = {
regN: new RegExp( '\n', 'g' ),
regR: new RegExp( '\r', 'g' ),
regSymN: new RegExp( _defaultOpts.nSym, 'g' ),
regSymR: new RegExp( _defaultOpts.rSym, 'g' )
};
+/* eslint-enable no-control-regex */
diff --git a/src/generators/text-generator.js b/src/generators/text-generator.js
index 466b018..b1caee5 100644
--- a/src/generators/text-generator.js
+++ b/src/generators/text-generator.js
@@ -4,13 +4,13 @@ Definition of the TextGenerator class.
@license MIT. See LICENSE.md for details.
*/
-let TextGenerator;
const TemplateGenerator = require('./template-generator');
/**
The TextGenerator generates a plain-text resume via the TemplateGenerator.
*/
-module.exports = (TextGenerator = class TextGenerator extends TemplateGenerator {
-
+class TextGenerator extends TemplateGenerator {
constructor() { super('txt'); }
-});
+}
+
+module.exports = TextGenerator;
diff --git a/src/generators/word-generator.js b/src/generators/word-generator.js
index 01125de..5772ed2 100644
--- a/src/generators/word-generator.js
+++ b/src/generators/word-generator.js
@@ -5,10 +5,10 @@ Definition of the WordGenerator class.
*/
-let WordGenerator;
const TemplateGenerator = require('./template-generator');
-module.exports = (WordGenerator = class WordGenerator extends TemplateGenerator {
-
+class WordGenerator extends TemplateGenerator {
constructor() { super('doc', 'xml'); }
-});
+}
+
+module.exports = WordGenerator;
diff --git a/src/generators/xml-generator.js b/src/generators/xml-generator.js
index 9e11e47..67155af 100644
--- a/src/generators/xml-generator.js
+++ b/src/generators/xml-generator.js
@@ -4,11 +4,11 @@ Definition of the XMLGenerator class.
@module generatprs/xml-generator
*/
-let XMLGenerator;
const BaseGenerator = require('./base-generator');
/** The XmlGenerator generates an XML resume via the TemplateGenerator. */
-module.exports = (XMLGenerator = class XMLGenerator extends BaseGenerator {
-
+class XMLGenerator extends BaseGenerator {
constructor() { super('xml'); }
-});
+}
+
+module.exports = XMLGenerator;
diff --git a/src/generators/yaml-generator.js b/src/generators/yaml-generator.js
index 36a7236..5945c0f 100644
--- a/src/generators/yaml-generator.js
+++ b/src/generators/yaml-generator.js
@@ -5,14 +5,15 @@ Definition of the YAMLGenerator class.
*/
-let YAMLGenerator;
const TemplateGenerator = require('./template-generator');
/**
YamlGenerator generates a YAML-formatted resume via TemplateGenerator.
*/
-module.exports = (YAMLGenerator = class YAMLGenerator extends TemplateGenerator {
-
+class YAMLGenerator extends TemplateGenerator {
constructor() { super('yml', 'yml'); }
-});
+}
+
+
+module.exports = YAMLGenerator;
diff --git a/src/helpers/block-helpers.js b/src/helpers/block-helpers.js
index 7620c7d..aefa0b6 100644
--- a/src/helpers/block-helpers.js
+++ b/src/helpers/block-helpers.js
@@ -11,15 +11,14 @@ Block helper definitions for HackMyResume / FluentCV.
-const HMSTATUS = require('../core/status-codes');
const LO = require('lodash');
const _ = require('underscore');
-const unused = require('../utils/string');
+require('../utils/string');
/** Block helper function definitions. */
-const BlockHelpers = (module.exports = {
+module.exports = {
@@ -75,4 +74,4 @@ const BlockHelpers = (module.exports = {
@method either
*/
either( lhs, rhs, options ) { if (lhs || rhs) { return options.fn(this); } }
-});
+};
diff --git a/src/helpers/console-helpers.js b/src/helpers/console-helpers.js
index 6308a23..e7bd3ed 100644
--- a/src/helpers/console-helpers.js
+++ b/src/helpers/console-helpers.js
@@ -19,7 +19,7 @@ require('../utils/string');
-const consoleFormatHelpers = (module.exports = {
+module.exports = {
v( val, defaultVal, padding, style ) {
let retVal = ( (val === null) || (val === undefined) ) ? defaultVal : val;
@@ -64,4 +64,4 @@ const consoleFormatHelpers = (module.exports = {
pad( val, spaces ) {
return PAD(val, Math.abs(spaces), null, spaces > 0 ? PAD.LEFT : PAD.RIGHT);
}
-});
+};
diff --git a/src/helpers/generic-helpers.js b/src/helpers/generic-helpers.js
index bba452a..fdc5f7e 100644
--- a/src/helpers/generic-helpers.js
+++ b/src/helpers/generic-helpers.js
@@ -23,7 +23,7 @@ const LO = require('lodash');
const PATH = require('path');
const printf = require('printf');
const _ = require('underscore');
-const unused = require('../utils/string');
+require('../utils/string');
@@ -152,7 +152,7 @@ var GenericHelpers = (module.exports = {
@param key {String} A named style from the "fonts" section of the theme's
theme.json file. For example: 'default' or 'heading1'.
*/
- fontSize( key, defSize, units ) {
+ fontSize( key, defSize/*, units*/ ) {
let ret = '';
const hasDef = defSize && ( String.is( defSize ) || _.isNumber( defSize ));
@@ -534,9 +534,9 @@ var GenericHelpers = (module.exports = {
*/
compare(lvalue, rvalue, options) {
if (arguments.length < 3) {
- throw new Error("Template helper 'compare' needs 2 parameters");
+ throw new Error('Template helper \'compare\' needs 2 parameters');
}
- const operator = options.hash.operator || "==";
+ const operator = options.hash.operator || '==';
const operators = {
'=='(l,r) { return l === r; },
'==='(l,r) { return l === r; },
@@ -559,7 +559,7 @@ var GenericHelpers = (module.exports = {
/**
Emit padded text.
*/
- pad(stringOrArray, padAmount, unused ) {
+ pad(stringOrArray, padAmount/*, unused*/ ) {
stringOrArray = stringOrArray || '';
padAmount = padAmount || 0;
let ret = '';
@@ -591,7 +591,7 @@ var GenericHelpers = (module.exports = {
Given an object that may be a string or an object, return it as-is if it's a
string, otherwise return the value at obj[objPath].
*/
- stringOrObject( obj, objPath, rez ) {
+ stringOrObject( obj, objPath/*, rez */) {
if (_.isString(obj)) { return obj; } else { return LO.get(obj, objPath); }
}
});
diff --git a/src/helpers/handlebars-helpers.js b/src/helpers/handlebars-helpers.js
index 8efb40b..ec30be0 100644
--- a/src/helpers/handlebars-helpers.js
+++ b/src/helpers/handlebars-helpers.js
@@ -30,7 +30,7 @@ module.exports = function( theme, rez, opts ) {
// Prepare generic helpers for use with Handlebars. We do this by wrapping them
// in a Handlebars-aware wrapper which calls the helper internally.
- const wrappedHelpers = _.mapObject(helpers, function( hVal, hKey ) {
+ const wrappedHelpers = _.mapObject(helpers, function( hVal/*, hKey*/ ) {
if (_.isFunction(hVal)) {
return _.wrap(hVal, function(func) {
const args = Array.prototype.slice.call(arguments);
@@ -68,7 +68,7 @@ module.exports = function( theme, rez, opts ) {
HANDLEBARS.registerHelper(require(f)); // ..register the path
});
} else {
- throw {fluenterror: HMS.themeHelperLoad, inner: er, glob: fGlob};
+ throw {fluenterror: HMS.themeHelperLoad, inner: null, glob: fGlob};
}
});
return;
@@ -78,7 +78,6 @@ module.exports = function( theme, rez, opts ) {
inner: ex,
glob: curGlob, exit: true
};
- return;
}
}
};
diff --git a/src/helpers/underscore-helpers.js b/src/helpers/underscore-helpers.js
index c9ee890..f6e81c0 100644
--- a/src/helpers/underscore-helpers.js
+++ b/src/helpers/underscore-helpers.js
@@ -11,7 +11,6 @@ Template helper definitions for Underscore.
-const HANDLEBARS = require('handlebars');
const _ = require('underscore');
const helpers = require('./generic-helpers');
@@ -27,7 +26,7 @@ module.exports = function( theme, opts, cssInfo, ctx, eng ) {
helpers.cssInfo = cssInfo;
helpers.engine = eng;
ctx.h = helpers;
- _.each(helpers, function( hVal, hKey ) {
+ _.each(helpers, function( hVal ) {
if (_.isFunction(hVal)) {
return _.bind(hVal, ctx);
}
diff --git a/src/inspectors/gap-inspector.js b/src/inspectors/gap-inspector.js
index b202170..d6ab2b7 100644
--- a/src/inspectors/gap-inspector.js
+++ b/src/inspectors/gap-inspector.js
@@ -21,7 +21,7 @@ const LO = require('lodash');
/**
Identify gaps in the candidate's employment history.
*/
-const gapInspector = (module.exports = {
+module.exports = {
moniker: 'gap-inspector',
@@ -84,10 +84,8 @@ const gapInspector = (module.exports = {
// When the reference count is > 0, the candidate is employed. When the
// reference count reaches 2, the candidate is overlapped.
- const num_gaps = 0;
let ref_count = 0;
let total_gap_days = 0;
- const gap_start = null;
new_e.forEach(function(point) {
@@ -156,4 +154,4 @@ const gapInspector = (module.exports = {
coverage.duration = dur;
return coverage;
}
-});
+};
diff --git a/src/inspectors/keyword-inspector.js b/src/inspectors/keyword-inspector.js
index 6f0936c..2341335 100644
--- a/src/inspectors/keyword-inspector.js
+++ b/src/inspectors/keyword-inspector.js
@@ -9,16 +9,13 @@ Keyword analysis for HackMyResume.
@module inspectors/keyword-inspector
*/
-const _ = require('underscore');
-const FluentDate = require('../core/fluent-date');
-
/**
Analyze the resume's use of keywords.
TODO: BUG: Keyword search regex is inaccurate, especially for one or two
letter keywords like "C" or "CLI".
@class keywordInspector
*/
-const keywordInspector = (module.exports = {
+module.exports = {
/** A unique name for this inspector. */
moniker: 'keyword-inspector',
@@ -33,7 +30,7 @@ const keywordInspector = (module.exports = {
// "Quote" or safely escape a keyword so it can be used as a regex. For
// example, if the keyword is "C++", yield "C\+\+".
// http://stackoverflow.com/a/2593661/4942583
- const regex_quote = str => (str + '').replace(/[.?*+^$[\]\\(){}|-]/ig, "\\$&");
+ const regex_quote = str => (str + '').replace(/[.?*+^$[\]\\(){}|-]/ig, '\\$&');
// Create a searchable plain-text digest of the resume
// TODO: BUG: Don't search within keywords for other keywords. Job A
@@ -64,9 +61,8 @@ const keywordInspector = (module.exports = {
const regex_str = prefix + regex_quote( kw ) + suffix;
const regex = new RegExp( regex_str, 'ig');
- let myArray = null;
let count = 0;
- while ((myArray = regex.exec( searchable )) !== null) {
+ while (regex.exec( searchable ) !== null) {
count++;
}
return {
@@ -75,4 +71,4 @@ const keywordInspector = (module.exports = {
};
});
}
-});
+};
diff --git a/src/inspectors/totals-inspector.js b/src/inspectors/totals-inspector.js
index e0303e2..cf7b2e0 100644
--- a/src/inspectors/totals-inspector.js
+++ b/src/inspectors/totals-inspector.js
@@ -10,13 +10,12 @@ Section analysis for HackMyResume.
*/
const _ = require('underscore');
-const FluentDate = require('../core/fluent-date');
/**
Retrieve sectional overview and summary information.
@class totalsInspector
*/
-const totalsInspector = (module.exports = {
+module.exports = {
moniker: 'totals-inspector',
@@ -44,4 +43,4 @@ const totalsInspector = (module.exports = {
numSections: Object.keys( sectionTotals ).length
};
}
-});
+};
diff --git a/src/renderers/handlebars-generator.js b/src/renderers/handlebars-generator.js
index a37e61d..f928d3f 100644
--- a/src/renderers/handlebars-generator.js
+++ b/src/renderers/handlebars-generator.js
@@ -26,7 +26,7 @@ const SLASH = require('slash');
Perform template-based resume generation using Handlebars.js.
@class HandlebarsGenerator
*/
-const HandlebarsGenerator = (module.exports = {
+module.exports = {
@@ -83,7 +83,7 @@ const HandlebarsGenerator = (module.exports = {
// Render the template
return this.generateSimple(ctx, jst);
}
-});
+};
@@ -100,8 +100,7 @@ var registerPartials = function(format, theme) {
// Register global partials in the /partials/[format] folder
// TODO: Only do this once per HMR invocation.
- _.each(READFILES( partialsFolder, error=> ({ })), function( el ) {
- const pathInfo = parsePath(el);
+ _.each(READFILES( partialsFolder ), function( el ) {
const name = SLASH(PATH.relative( partialsFolder, el ).replace(/\.(?:html|xml|hbs|md|txt)$/i, ''));
const tplData = FS.readFileSync(el, 'utf8');
const compiledTemplate = HANDLEBARS.compile(tplData);
diff --git a/src/renderers/jrs-generator.js b/src/renderers/jrs-generator.js
index d905a9f..08a4394 100644
--- a/src/renderers/jrs-generator.js
+++ b/src/renderers/jrs-generator.js
@@ -9,14 +9,6 @@ Definition of the JRSGenerator class.
@module renderers/jrs-generator
*/
-const _ = require('underscore');
-const HANDLEBARS = require('handlebars');
-const FS = require('fs');
-const registerHelpers = require('../helpers/handlebars-helpers');
-const PATH = require('path');
-const parsePath = require('parse-filepath');
-const READFILES = require('recursive-readdir-sync');
-const SLASH = require('slash');
const MD = require('marked');
/**
@@ -24,15 +16,15 @@ Perform template-based resume generation for JSON Resume themes.
@class JRSGenerator
*/
-const JRSGenerator = (module.exports = {
+module.exports = {
generate( json, jst, format, cssInfo, opts, theme ) {
// Disable JRS theme chatter (console.log, console.error, etc.)
const turnoff = ['log', 'error', 'dir'];
const org = turnoff.map(function(c) {
- const ret = console[c];
- console[c] = function() {};
+ const ret = console[c]; // eslint-disable-line no-console
+ console[c] = function() {}; // eslint-disable-line no-console
return ret;
});
@@ -40,12 +32,12 @@ const JRSGenerator = (module.exports = {
let rezHtml = theme.render(json.harden());
// Turn logging back on
- turnoff.forEach((c, idx) => console[c] = org[idx]);
+ turnoff.forEach((c, idx) => console[c] = org[idx]); // eslint-disable-line no-console
// Unfreeze and apply Markdown
return rezHtml = rezHtml.replace(/@@@@~[\s\S]*?~@@@@/g, val => MDIN( val.replace( /~@@@@/g,'' ).replace( /@@@@~/g,'' ) ));
}
-});
+};
var MDIN = txt => // TODO: Move this
diff --git a/src/renderers/underscore-generator.js b/src/renderers/underscore-generator.js
index 58784fe..25ecef5 100644
--- a/src/renderers/underscore-generator.js
+++ b/src/renderers/underscore-generator.js
@@ -20,7 +20,7 @@ const escapeLaTeX = require('escape-latex');
Perform template-based resume generation using Underscore.js.
@class UnderscoreGenerator
*/
-const UnderscoreGenerator = (module.exports = {
+module.exports = {
@@ -47,7 +47,7 @@ const UnderscoreGenerator = (module.exports = {
// Tweak underscore's default template delimeters
let delims = (opts.themeObj && opts.themeObj.delimeters) || opts.template;
if (opts.themeObj && opts.themeObj.delimeters) {
- delims = _.mapObject(delims, (val,key) => new RegExp(val, "ig"));
+ delims = _.mapObject(delims, (val) => new RegExp(val, 'ig'));
}
_.templateSettings = delims;
@@ -59,7 +59,7 @@ const UnderscoreGenerator = (module.exports = {
case 'png': r = json.markdownify(); break;
case 'latex':
var traverse = require('traverse');
- r = traverse(json).map(function(x) {
+ r = traverse(json).map(function() {
if (this.isLeaf && String.is(this.node)) {
return escapeLaTeX(this.node);
}
@@ -87,4 +87,4 @@ const UnderscoreGenerator = (module.exports = {
// Generate!
return this.generateSimple(ctx, jst);
}
-});
+};
diff --git a/src/utils/md2chalk.js b/src/utils/md2chalk.js
index 439cc26..dcac382 100644
--- a/src/utils/md2chalk.js
+++ b/src/utils/md2chalk.js
@@ -10,7 +10,6 @@ Inline Markdown-to-Chalk conversion routines.
*/
-const MD = require('marked');
const CHALK = require('chalk');
const LO = require('lodash');
diff --git a/src/utils/rasterize.js b/src/utils/rasterize.js
index 687ac09..f917029 100644
--- a/src/utils/rasterize.js
+++ b/src/utils/rasterize.js
@@ -7,8 +7,10 @@
// https://raw.githubusercontent.com/ariya/phantomjs/master/examples/rasterize.js
// Converted to CoffeeScript by hacksalot
-"use strict";let output, size;
+/* eslint-disable */
+'use strict';
+let output, size;
const page = require('webpage').create();
const system = require('system');
let address = (output = (size = null));
@@ -27,14 +29,14 @@ if ((system.args.length < 3) || (system.args.length > 5)) {
output = system.args[2];
page.viewportSize = {width: 600, height: 600};
- if ((system.args.length > 3) && (system.args[2].substr(-4) === ".pdf")) {
+ if ((system.args.length > 3) && (system.args[2].substr(-4) === '.pdf')) {
size = system.args[3].split('*');
page.paperSize =
size.length === 2 ? {width: size[0], height: size[1], margin: '0px'}
: {format: system.args[3], orientation: 'portrait', margin: '1cm'};
- } else if ((system.args.length > 3) && (system.args[3].substr(-2) === "px")) {
+ } else if ((system.args.length > 3) && (system.args[3].substr(-2) === 'px')) {
let pageHeight, pageWidth;
size = system.args[3].split('*');
if (size.length === 2) {
@@ -43,10 +45,12 @@ if ((system.args.length < 3) || (system.args.length > 5)) {
page.viewportSize = {width: pageWidth, height: pageHeight};
page.clipRect = {top: 0, left: 0, width: pageWidth, height: pageHeight};
} else {
- console.log("size:", system.args[3]);
+ // eslint-ignore-next-line no-console
+ console.log('size:', system.args[3]);
pageWidth = parseInt(system.args[3], 10);
pageHeight = parseInt((pageWidth * 3)/4, 10); // it's as good an assumption as any
- console.log("pageHeight:", pageHeight);
+ // eslint-ignore-next-line no-console
+ console.log('pageHeight:', pageHeight);
page.viewportSize = {width: pageWidth, height: pageHeight};
}
}
@@ -69,3 +73,4 @@ if ((system.args.length < 3) || (system.args.length > 5)) {
}
});
}
+/* esline-enable */
diff --git a/src/utils/resume-scrubber.js b/src/utils/resume-scrubber.js
index f5a8637..3d50132 100644
--- a/src/utils/resume-scrubber.js
+++ b/src/utils/resume-scrubber.js
@@ -3,6 +3,9 @@
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
+
+const _ = require('underscore');
+
module.exports = {
/**
diff --git a/src/utils/string-transformer.js b/src/utils/string-transformer.js
index 1fca39d..0889b9f 100644
--- a/src/utils/string-transformer.js
+++ b/src/utils/string-transformer.js
@@ -19,8 +19,6 @@ a transformation function (such as a Markdown filter or XML encoder).
module.exports = function( ret, filt, transformer ) {
- const that = this;
-
// TODO: refactor recursion
var transformStringsInObject = function( obj, filters ) {
if (!obj) { return; }
diff --git a/src/utils/syntax-error-ex.js b/src/utils/syntax-error-ex.js
index d18feee..d88b7c8 100644
--- a/src/utils/syntax-error-ex.js
+++ b/src/utils/syntax-error-ex.js
@@ -22,8 +22,6 @@ See: http://stackoverflow.com/q/13323356
class SyntaxErrorEx {
constructor( ex, rawData ) {
- const lineNum = null;
- const colNum = null;
let JSONLint = require('json-lint');
const lint = JSONLint(rawData, { comments: false });
if (lint.error) { [this.line, this.col] = Array.from([lint.line, lint.character]); }
diff --git a/src/verbs/analyze.js b/src/verbs/analyze.js
index 9ab8f86..bc91fab 100644
--- a/src/verbs/analyze.js
+++ b/src/verbs/analyze.js
@@ -11,23 +11,20 @@ Implementation of the 'analyze' verb for HackMyResume.
-let AnalyzeVerb;
-const MKDIRP = require('mkdirp');
-const PATH = require('path');
const HMEVENT = require('../core/event-codes');
const HMSTATUS = require('../core/status-codes');
const _ = require('underscore');
const ResumeFactory = require('../core/resume-factory');
const Verb = require('../verbs/verb');
-const chalk = require('chalk');
/** An invokable resume analysis command. */
-module.exports = (AnalyzeVerb = class AnalyzeVerb extends Verb {
-
+class AnalyzeVerb extends Verb {
constructor() { super('analyze', _analyze); }
-});
+}
+
+module.exports = AnalyzeVerb;
@@ -69,14 +66,14 @@ var _analyze = function( sources, dst, opts ) {
/** Analyze a single resume. */
-var _analyzeOne = function( resumeObject, nlzrs, opts ) {
+var _analyzeOne = function( resumeObject, nlzrs ) {
const { rez } = resumeObject;
const safeFormat =
rez.meta && rez.meta.format && rez.meta.format.startsWith('FRESH')
? 'FRESH' : 'JRS';
this.stat( HMEVENT.beforeAnalyze, { fmt: safeFormat, file: resumeObject.file });
- const info = _.mapObject(nlzrs, (val, key) => val.run(rez));
+ const info = _.mapObject(nlzrs, (val) => val.run(rez));
this.stat(HMEVENT.afterAnalyze, { info });
return info;
};
diff --git a/src/verbs/build.js b/src/verbs/build.js
index e94bdc1..4df14b5 100644
--- a/src/verbs/build.js
+++ b/src/verbs/build.js
@@ -12,11 +12,8 @@ Implementation of the 'build' verb for HackMyResume.
-let BuildVerb;
const _ = require('underscore');
const PATH = require('path');
-const FS = require('fs');
-const MD = require('marked');
const MKDIRP = require('mkdirp');
const extend = require('extend');
const parsePath = require('parse-filepath');
@@ -34,24 +31,27 @@ const ResumeFactory = require('../core/resume-factory');
const _fmts = require('../core/default-formats');
const Verb = require('../verbs/verb');
-const _err = null;
-const _log = null;
+//const _err = null;
+//const _log = null;
let _rezObj = null;
-const build = null;
-const prep = null;
-const single = null;
-const verifyOutputs = null;
-const addFreebieFormats = null;
-const expand = null;
-const verifyTheme = null;
-const loadTheme = null;
+//const build = null;
+//const prep = null;
+//const single = null;
+//const verifyOutputs = null;
+//const addFreebieFormats = null;
+//const expand = null;
+//const verifyTheme = null;
+//const loadTheme = null;
/** An invokable resume generation command. */
-module.exports = (BuildVerb = class BuildVerb extends Verb {
+class BuildVerb extends Verb {
/** Create a new build verb. */
constructor() { super('build', _build); }
-});
+}
+
+
+module.exports = BuildVerb;
@@ -134,7 +134,7 @@ var _build = function( src, dst, opts ) {
if (mixed) {
this.err(HMSTATUS.mixedMerge);
}
- rez = _.reduceRight(sheets, ( a, b, idx ) => extend( true, b, a ));
+ rez = _.reduceRight(sheets, ( a, b ) => extend( true, b, a ));
this.stat(HMEVENT.afterMerge, { r: rez });
} else {
rez = sheets[0];
@@ -243,8 +243,6 @@ var _single = function( targInfo, theme, finished ) {
if (!targInfo.fmt) {
return { };
}
- const fType = targInfo.fmt.outFormat;
- const fName = PATH.basename(f, `.${fType}`);
let theFormat = null;
this.stat(HMEVENT.beforeGenerate, {
diff --git a/src/verbs/convert.js b/src/verbs/convert.js
index d1d9ab8..9be4934 100644
--- a/src/verbs/convert.js
+++ b/src/verbs/convert.js
@@ -11,9 +11,7 @@ Implementation of the 'convert' verb for HackMyResume.
-let ConvertVerb;
const ResumeFactory = require('../core/resume-factory');
-const chalk = require('chalk');
const Verb = require('../verbs/verb');
const HMSTATUS = require('../core/status-codes');
const _ = require('underscore');
@@ -21,10 +19,11 @@ const HMEVENT = require('../core/event-codes');
-module.exports = (ConvertVerb = class ConvertVerb extends Verb {
-
+class ConvertVerb extends Verb {
constructor() { super('convert', _convert); }
-});
+}
+
+module.exports = ConvertVerb;
@@ -59,7 +58,7 @@ var _convert = function( srcs, dst, opts ) {
}
// Validate the destination format (if specified)
- const targetVer = null;
+ //const targetVer = null;
if (opts.format) {
fmtUp = opts.format.trim().toUpperCase();
if (!_.contains(['FRESH','FRESCA','JRS','JRS@1','JRS@edge'], fmtUp)) {
diff --git a/src/verbs/create.js b/src/verbs/create.js
index 389e0b6..3be900b 100644
--- a/src/verbs/create.js
+++ b/src/verbs/create.js
@@ -11,10 +11,8 @@ Implementation of the 'create' verb for HackMyResume.
-let CreateVerb;
const MKDIRP = require('mkdirp');
const PATH = require('path');
-const chalk = require('chalk');
const Verb = require('../verbs/verb');
const _ = require('underscore');
const HMSTATUS = require('../core/status-codes');
@@ -22,10 +20,13 @@ const HMEVENT = require('../core/event-codes');
-module.exports = (CreateVerb = class CreateVerb extends Verb {
+class CreateVerb extends Verb {
constructor() { super('new', _create); }
-});
+}
+
+
+module.exports = CreateVerb;
@@ -76,10 +77,9 @@ var _createOne = function( t, opts ) {
fluenterror: HMSTATUS.createError,
inner: err
};
- return;
}
finally {
this.stat(HMEVENT.afterCreate, {fmt: safeFmt, file: t, isError: ret.fluenterror});
- return ret;
}
+ return ret;
};
diff --git a/src/verbs/peek.js b/src/verbs/peek.js
index 7f937d3..f1a46b9 100644
--- a/src/verbs/peek.js
+++ b/src/verbs/peek.js
@@ -11,7 +11,6 @@ Implementation of the 'peek' verb for HackMyResume.
-let PeekVerb;
const Verb = require('../verbs/verb');
const _ = require('underscore');
const __ = require('lodash');
@@ -21,12 +20,14 @@ const HMEVENT = require('../core/event-codes');
-module.exports = (PeekVerb = class PeekVerb extends Verb {
+class PeekVerb extends Verb {
constructor() { super('peek', _peek); }
-});
+
+}
+module.exports = PeekVerb;
/** Peek at a resume, resume section, or resume field. */
var _peek = function( src, dst, opts ) {
diff --git a/src/verbs/validate.js b/src/verbs/validate.js
index 2af97f9..02e5900 100644
--- a/src/verbs/validate.js
+++ b/src/verbs/validate.js
@@ -11,11 +11,6 @@ Implementation of the 'validate' verb for HackMyResume.
-let ValidateVerb;
-const FS = require('fs');
-const ResumeFactory = require('../core/resume-factory');
-const SyntaxErrorEx = require('../utils/syntax-error-ex');
-const chalk = require('chalk');
const Verb = require('../verbs/verb');
const HMSTATUS = require('../core/status-codes');
const HMEVENT = require('../core/event-codes');
@@ -25,12 +20,9 @@ const safeLoadJSON = require('../utils/safe-json-loader');
/** An invokable resume validation command. */
-module.exports = (ValidateVerb = class ValidateVerb extends Verb {
-
-
-
+class ValidateVerb extends Verb {
constructor() { super('validate', _validate); }
-});
+}
@@ -63,6 +55,7 @@ var _validate = function(sources, unused, opts) {
return results;
};
+module.exports = ValidateVerb;
/**
Validate a single resume.
@@ -75,7 +68,7 @@ Validate a single resume.
error: