diff --git a/.eslintrc b/.eslintrc index eeab660720f..b3274a273ac 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,9 +1,13 @@ { + "env": { + "mocha": true, + "node": true, + }, + "rules": { + "camelcase": 1 + }, "extends": [ "mongodb-js/node", "mongodb-js/browser" - ], - "rules": { - "camelcase": 1 - } + ] } diff --git a/.gitignore b/.gitignore index b40eafe2fce..cbdaf629f6a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ src/app/templates.js src/connect/static-connect.html report.json .user-data/ +src/app/compiled-less/ diff --git a/package.json b/package.json index cf3286b4bba..2ccc309b7e1 100644 --- a/package.json +++ b/package.json @@ -27,14 +27,15 @@ "prestart": "node scripts/prestart.js", "start": "node scripts/start.js", "//": "Run only the fast unit tests", - "pretest": "node scripts/templatize.js", + "pretest": "npm run compile-ui", "test": "xvfb-maybe node scripts/test.js", "prepublish": "node scripts/prepublish.js", "postuninstall": "node scripts/postuninstall.js", - "precheck": "node scripts/templatize.js", + "precheck": "npm run compile-ui", "check": "mongodb-js-precommit ./src/app/*.js ./src/app/**/**/*.js ./src/{app/**/*.js,main/**/*.js} ./{scripts,test}/*.js", "ci": "npm run test", "clean": "npm run postuninstall", + "compile-ui": "node scripts/compile-ui.js", "fmt": "mongodb-js-fmt ./*.js src/{**/*.js,*.js} test/{**/*.js,*.js} scripts/*.js", "release": "npm run prepublish", "test-functional": "npm test -- --functional", @@ -77,6 +78,7 @@ "jquery": "^2.1.4", "keytar": "mongodb-js/node-keytar#node-pre-gyp", "less": "^2.6.1", + "less-cache": "^0.23.0", "local-links": "^1.4.0", "lodash": "^3.10.1", "marked": "^0.3.5", diff --git a/scripts/compile-ui.js b/scripts/compile-ui.js new file mode 100644 index 00000000000..055516b8034 --- /dev/null +++ b/scripts/compile-ui.js @@ -0,0 +1,58 @@ +var async = require('async'); +var templatizer = require('templatizer'); +var path = require('path'); +var createCLI = require('mongodb-js-cli'); +var cli = createCLI('mongodb-compass:scripts:compile-ui'); +var LessCache = require('less-cache'); +var fs = require('fs'); + +function generateLessCache(CONFIG, done) { + var appDir = path.join(__dirname, '..', 'src', 'app'); + var cacheDir = path.join(appDir, 'compiled-less'); + var src = path.join(appDir, 'index.less'); + + var callback = done; + if (typeof CONFIG === 'function') { + callback = CONFIG; + } + + var lessCache = new LessCache({ cacheDir: cacheDir, resourcePath: appDir }); + + fs.readFile(src, 'utf-8', function(err, contents) { + if (err) { + return done(err); + } + lessCache.cssForFile(src, contents); + callback(); + }); +} + +function generateTemplates(CONFIG, done) { + var callback = done; + if (typeof CONFIG === 'function') { + callback = CONFIG; + } + var appdir = path.join(__dirname, '..', 'src', 'app'); + templatizer(appdir, path.join(appdir, 'templates.js'), callback); +} + +module.exports.generateTemplates = generateTemplates; +module.exports.generateLessCache = generateLessCache; + +function main() { + async.series([ + generateTemplates, + generateLessCache + ], function(err) { + cli.abortIfError(err); + cli.debug('Compiled application UI.'); + process.exit(0); + }); +} + +/** + * ## Main + */ +if (cli.argv.$0 && cli.argv.$0.indexOf('compile-ui.js') > -1) { + main(); +} diff --git a/scripts/postuninstall.js b/scripts/postuninstall.js index c21f46efe5d..d75be39976d 100755 --- a/scripts/postuninstall.js +++ b/scripts/postuninstall.js @@ -18,14 +18,14 @@ if (cli.argv.verbose) { require('debug').enable('ele*,mon*'); } - var del = require('del'); var async = require('async'); var path = require('path'); +var COMPILED_LESS = path.join('src', 'app', 'compiled-less'); cli.spinner('Removing build artifacts'); -async.parallel(['dist/', 'node_modules/'].map(function(p) { +async.parallel(['dist/', 'node_modules/', COMPILED_LESS].map(function(p) { return function(cb) { del(path.join(__dirname, '..', p)).then(cb.bind(null, null)); }; diff --git a/scripts/prepublish.js b/scripts/prepublish.js index 7d534950c84..726ae4b9b49 100755 --- a/scripts/prepublish.js +++ b/scripts/prepublish.js @@ -50,7 +50,9 @@ var run = require('electron-installer-run'); var license = require('electron-license'); var createCLI = require('mongodb-js-cli'); var config = require('./config'); -var generateTemplates = require('./templatize'); +var compileUI = require('./compile-ui'); +var generateTemplates = compileUI.generateTemplates; +var generateLessCache = compileUI.generateLessCache; /** * TODO (imlucas) Document and use yargs environment variable support. @@ -119,18 +121,6 @@ function cleanupBrandedApplicationScaffold(CONFIG, done) { }, done); } -/** - * TODO (imlucas) Currently just a stub. - * - * @see [Atom's `prebuild-less-task.coffee`](https://git.io/vaZkL) - * @param {Object} CONFIG - * @param {Function} done - * @api public - */ -function compileApplicationUI(CONFIG, done) { - done(); -} - /** * Replace the LICENSE file `electron-packager` creates w/ a LICENSE * file specific to the project. @@ -372,12 +362,12 @@ function main() { var tasks = [ createBrandedApplication, cleanupBrandedApplicationScaffold, - compileApplicationUI, + generateTemplates, + generateLessCache, writeLicenseFile, writeVersionFile, transformPackageJson, installDependencies, - generateTemplates, removeDevelopmentFiles, createApplicationAsar, createApplicationZip, diff --git a/scripts/prestart.js b/scripts/prestart.js index 630a653be42..1bd745930e1 100755 --- a/scripts/prestart.js +++ b/scripts/prestart.js @@ -36,7 +36,9 @@ var format = require('util').format; var run = require('electron-installer-run'); var checkPython = require('check-python'); var async = require('async'); -var generateTemplates = require('./templatize'); +var compileUI = require('./compile-ui'); +var generateTemplates = compileUI.generateTemplates; +var generateLessCache = compileUI.generateLessCache; function checkNpmAndNodejs(done) { run('npm', ['version', '--json', '--loglevel', 'error'], { @@ -79,7 +81,8 @@ function main() { async.series([ checkPython, checkNpmAndNodejs, - generateTemplates + generateTemplates, + generateLessCache ], function(err) { cli.abortIfError(err); cli.debug('Environment verified as sane!'); diff --git a/scripts/templatize.js b/scripts/templatize.js deleted file mode 100644 index 854c05c5703..00000000000 --- a/scripts/templatize.js +++ /dev/null @@ -1,28 +0,0 @@ -var templatizer = require('templatizer'); -var path = require('path'); -var createCLI = require('mongodb-js-cli'); -var cli = createCLI('mongodb-compass:scripts:templatize'); - -function generateTemplates(config, done) { - var callback = done; - if (typeof config === 'function') { - callback = config; - } - var appdir = path.join(__dirname, '..', 'src', 'app'); - templatizer(appdir, path.join(appdir, 'templates.js'), callback); -} - -module.exports = generateTemplates; - -function main() { - generateTemplates(function() { - cli.debug('Generated jade template functions.'); - }); -} - -/** - * ## Main - */ -if (cli.argv.$0 && cli.argv.$0.indexOf('templatize.js') > -1) { - main(); -} diff --git a/src/app/index.html b/src/app/index.html index a450a00b3b1..e1a8ef0d0d9 100644 --- a/src/app/index.html +++ b/src/app/index.html @@ -3,7 +3,6 @@