From e2f0837cbfa11d30fce1785191499a99ea508aa5 Mon Sep 17 00:00:00 2001 From: Ben Ramey Date: Sat, 8 Mar 2014 18:37:19 -0600 Subject: [PATCH] Add modified gruntfile.js and tasks --- Gruntfile.js | 582 +++++++--------------------------- tasks/load-asv.js | 44 +++ tasks/options/clean.js | 7 + tasks/options/coffee.js | 23 ++ tasks/options/concat.js | 13 + tasks/options/copy.js | 21 ++ tasks/options/cssmin.js | 9 + tasks/options/jade.js | 14 + tasks/options/jst.js | 17 + tasks/options/less.js | 20 ++ tasks/options/sails-linker.js | 141 ++++++++ tasks/options/uglify.js | 9 + tasks/options/watch.js | 17 + 13 files changed, 447 insertions(+), 470 deletions(-) create mode 100644 tasks/load-asv.js create mode 100644 tasks/options/clean.js create mode 100644 tasks/options/coffee.js create mode 100644 tasks/options/concat.js create mode 100644 tasks/options/copy.js create mode 100644 tasks/options/cssmin.js create mode 100644 tasks/options/jade.js create mode 100644 tasks/options/jst.js create mode 100644 tasks/options/less.js create mode 100644 tasks/options/sails-linker.js create mode 100644 tasks/options/uglify.js create mode 100644 tasks/options/watch.js diff --git a/Gruntfile.js b/Gruntfile.js index d38af4e..c19c932 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,484 +1,126 @@ -/** - * Gruntfile - * - * If you created your Sails app with `sails new foo --linker`, - * the following files will be automatically injected (in order) - * into the EJS and HTML files in your `views` and `assets` folders. - * - * At the top part of this file, you'll find a few of the most commonly - * configured options, but Sails' integration with Grunt is also fully - * customizable. If you'd like to work with your assets differently - * you can change this file to do anything you like! - * - * More information on using Grunt to work with static assets: - * http://gruntjs.com/configuring-tasks - */ +module.exports = function(grunt) { + // load config functio + function loadConfig(path) { + var glob = require('glob'); + var object = {}; + var key; -module.exports = function (grunt) { + glob.sync('*', { + cwd: path + }).forEach(function(option) { + key = option.replace(/.js$/, ''); + object[key] = require(path + option)(config); + }); - - - /** - * CSS files to inject in order - * (uses Grunt-style wildcard/glob/splat expressions) - * - * By default, Sails also supports LESS in development and production. - * To use SASS/SCSS, Stylus, etc., edit the `sails-linker:devStyles` task - * below for more options. For this to work, you may need to install new - * dependencies, e.g. `npm install grunt-contrib-sass` - */ - - var cssFilesToInject = [ - 'linker/**/*.css' - ]; - - - /** - * Javascript files to inject in order - * (uses Grunt-style wildcard/glob/splat expressions) - * - * To use client-side CoffeeScript, TypeScript, etc., edit the - * `sails-linker:devJs` task below for more options. - */ - - var jsFilesToInject = [ - - // Below, as a demonstration, you'll see the built-in dependencies - // linked in the proper order order - - // Bring in the socket.io client - 'linker/js/socket.io.js', - - // then beef it up with some convenience logic for talking to Sails.js - 'linker/js/sails.io.js', - - // A simpler boilerplate library for getting you up and running w/ an - // automatic listener for incoming messages from Socket.io. - 'linker/js/app.js', - - // *-> put other dependencies here <-* - - // All of the rest of your app scripts imported here - 'linker/**/*.js' - ]; - - - /** - * Client-side HTML templates are injected using the sources below - * The ordering of these templates shouldn't matter. - * (uses Grunt-style wildcard/glob/splat expressions) - * - * By default, Sails uses JST templates and precompiles them into - * functions for you. If you want to use jade, handlebars, dust, etc., - * edit the relevant sections below. - */ - - var templateFilesToInject = [ - 'linker/**/*.html' - ]; - - - - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - // - // DANGER: - // - // With great power comes great responsibility. - // - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - - // Modify css file injection paths to use - cssFilesToInject = cssFilesToInject.map(function (path) { - return '.tmp/public/' + path; - }); - - // Modify js file injection paths to use - jsFilesToInject = jsFilesToInject.map(function (path) { - return '.tmp/public/' + path; - }); - - - templateFilesToInject = templateFilesToInject.map(function (path) { - return 'assets/' + path; - }); - - - // Get path to core grunt dependencies from Sails - var depsPath = grunt.option('gdsrc') || 'node_modules/sails/node_modules'; - grunt.loadTasks(depsPath + '/grunt-contrib-clean/tasks'); - grunt.loadTasks(depsPath + '/grunt-contrib-copy/tasks'); - grunt.loadTasks(depsPath + '/grunt-contrib-concat/tasks'); - grunt.loadTasks(depsPath + '/grunt-sails-linker/tasks'); - grunt.loadTasks(depsPath + '/grunt-contrib-jst/tasks'); - grunt.loadTasks(depsPath + '/grunt-contrib-watch/tasks'); - grunt.loadTasks(depsPath + '/grunt-contrib-uglify/tasks'); - grunt.loadTasks(depsPath + '/grunt-contrib-cssmin/tasks'); - grunt.loadTasks(depsPath + '/grunt-contrib-less/tasks'); - grunt.loadTasks(depsPath + '/grunt-contrib-coffee/tasks'); - - // Project configuration. - grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), - - copy: { - dev: { - files: [ - { - expand: true, - cwd: './assets', - src: ['**/*.!(coffee)'], - dest: '.tmp/public' - } - ] - }, - build: { - files: [ - { - expand: true, - cwd: '.tmp/public', - src: ['**/*'], - dest: 'www' - } - ] - } - }, - - clean: { - dev: ['.tmp/public/**'], - build: ['www'] - }, - - jst: { - dev: { - - // To use other sorts of templates, specify the regexp below: - // options: { - // templateSettings: { - // interpolate: /\{\{(.+?)\}\}/g - // } - // }, - - files: { - '.tmp/public/jst.js': templateFilesToInject - } - } - }, - - less: { - dev: { - files: [ - { - expand: true, - cwd: 'assets/styles/', - src: ['*.less'], - dest: '.tmp/public/styles/', - ext: '.css' - }, { - expand: true, - cwd: 'assets/linker/styles/', - src: ['*.less'], - dest: '.tmp/public/linker/styles/', - ext: '.css' - } - ] - } - }, - - coffee: { - dev: { - options:{ - bare:true - }, - files: [ - { - expand: true, - cwd: 'assets/js/', - src: ['**/*.coffee'], - dest: '.tmp/public/js/', - ext: '.js' - }, { - expand: true, - cwd: 'assets/linker/js/', - src: ['**/*.coffee'], - dest: '.tmp/public/linker/js/', - ext: '.js' - } - ] - } - }, - - concat: { - js: { - src: jsFilesToInject, - dest: '.tmp/public/concat/production.js' - }, - css: { - src: cssFilesToInject, - dest: '.tmp/public/concat/production.css' - } - }, - - uglify: { - dist: { - src: ['.tmp/public/concat/production.js'], - dest: '.tmp/public/min/production.js' - } - }, - - cssmin: { - dist: { - src: ['.tmp/public/concat/production.css'], - dest: '.tmp/public/min/production.css' - } - }, - - 'sails-linker': { - - devJs: { - options: { - startTag: '', - endTag: '', - fileTmpl: '', - appRoot: '.tmp/public' - }, - files: { - '.tmp/public/**/*.html': jsFilesToInject, - 'views/**/*.html': jsFilesToInject, - 'views/**/*.ejs': jsFilesToInject - } - }, - - prodJs: { - options: { - startTag: '', - endTag: '', - fileTmpl: '', - appRoot: '.tmp/public' - }, - files: { - '.tmp/public/**/*.html': ['.tmp/public/min/production.js'], - 'views/**/*.html': ['.tmp/public/min/production.js'], - 'views/**/*.ejs': ['.tmp/public/min/production.js'] - } - }, - - devStyles: { - options: { - startTag: '', - endTag: '', - fileTmpl: '', - appRoot: '.tmp/public' - }, - - // cssFilesToInject defined up top - files: { - '.tmp/public/**/*.html': cssFilesToInject, - 'views/**/*.html': cssFilesToInject, - 'views/**/*.ejs': cssFilesToInject - } - }, - - prodStyles: { - options: { - startTag: '', - endTag: '', - fileTmpl: '', - appRoot: '.tmp/public' - }, - files: { - '.tmp/public/index.html': ['.tmp/public/min/production.css'], - 'views/**/*.html': ['.tmp/public/min/production.css'], - 'views/**/*.ejs': ['.tmp/public/min/production.css'] - } - }, - - // Bring in JST template object - devTpl: { - options: { - startTag: '', - endTag: '', - fileTmpl: '', - appRoot: '.tmp/public' - }, - files: { - '.tmp/public/index.html': ['.tmp/public/jst.js'], - 'views/**/*.html': ['.tmp/public/jst.js'], - 'views/**/*.ejs': ['.tmp/public/jst.js'] - } - }, - - - /******************************************* - * Jade linkers (TODO: clean this up) - *******************************************/ - - devJsJADE: { - options: { - startTag: '// SCRIPTS', - endTag: '// SCRIPTS END', - fileTmpl: 'script(type="text/javascript", src="%s")', - appRoot: '.tmp/public' - }, - files: { - 'views/**/*.jade': jsFilesToInject - } - }, - - prodJsJADE: { - options: { - startTag: '// SCRIPTS', - endTag: '// SCRIPTS END', - fileTmpl: 'script(type="text/javascript", src="%s")', - appRoot: '.tmp/public' - }, - files: { - 'views/**/*.jade': ['.tmp/public/min/production.js'] - } - }, - - devStylesJADE: { - options: { - startTag: '// STYLES', - endTag: '// STYLES END', - fileTmpl: 'link(rel="stylesheet", href="%s")', - appRoot: '.tmp/public' - }, - files: { - 'views/**/*.jade': cssFilesToInject - } - }, - - prodStylesJADE: { - options: { - startTag: '// STYLES', - endTag: '// STYLES END', - fileTmpl: 'link(rel="stylesheet", href="%s")', - appRoot: '.tmp/public' - }, - files: { - 'views/**/*.jade': ['.tmp/public/min/production.css'] - } - }, - - // Bring in JST template object - devTplJADE: { - options: { - startTag: '// TEMPLATES', - endTag: '// TEMPLATES END', - fileTmpl: 'script(type="text/javascript", src="%s")', - appRoot: '.tmp/public' - }, - files: { - 'views/**/*.jade': ['.tmp/public/jst.js'] - } - } - /************************************ - * Jade linker end - ************************************/ - }, - - watch: { - api: { - - // API files to watch: - files: ['api/**/*'] - }, - assets: { - - // Assets to watch: - files: ['assets/**/*'], - - // When assets are changed: - tasks: ['compileAssets', 'linkAssets'] - } + return object; } - }); - // When Sails is lifted: - grunt.registerTask('default', [ - 'compileAssets', - 'linkAssets', - 'watch' - ]); + require('load-grunt-tasks')(grunt); + grunt.loadTasks('tasks'); - grunt.registerTask('compileAssets', [ - 'clean:dev', - 'jst:dev', - 'less:dev', - 'copy:dev', - 'coffee:dev' - ]); + // Project configuration. + var config = { + pkg: grunt.file.readJSON('package.json'), + env: process.env, + cssFilesToInject: [ + 'linker/**/*.css' + ].map(function(path) { + return '.tmp/public/' + path; + }), + jsFilesToInject: [ + 'linker/js/vendor/socket.io.js', + 'linker/js/vendor/sails.io.js', + 'linker/js/vendor/jquery-2.1.0.js', + 'linker/js/vendor/underscore.js', + 'linker/js/vender/json2.js', + 'linker/js/vendor/backbone.js', + 'linker/js/vendor/bootstrap.js', + 'linker/js/app.js', + 'linker/js/models/*.js', + 'linker/js/collections/*.js', + 'linker/js/views/*.js', + 'linker/**/*.js' + ].map(function(path) { + return '.tmp/public/' + path; + }), + templateFilesToInject: [ + 'linker/**/*.html' + ].map(function(path) { + return 'assets/' + path; + }) + }; - grunt.registerTask('linkAssets', [ + grunt.util._.extend(config, loadConfig('./tasks/options/')); + grunt.initConfig(config); - // Update link/script/template references in `assets` index.html - 'sails-linker:devJs', - 'sails-linker:devStyles', - 'sails-linker:devTpl', - 'sails-linker:devJsJADE', - 'sails-linker:devStylesJADE', - 'sails-linker:devTplJADE' - ]); + // task aliases + // When Sails is lifted: + grunt.registerTask('default', [ + 'compileAssets', + 'linkAssets', + 'watch' + ]); - // Build the assets into a web accessible folder. - // (handy for phone gap apps, chrome extensions, etc.) - grunt.registerTask('build', [ - 'compileAssets', - 'linkAssets', - 'clean:build', - 'copy:build' - ]); + grunt.registerTask('compileAssets', [ + 'clean:dev', + 'jst:dev', + 'jade:templates', + 'less:dev', + 'copy:dev', + 'coffee:dev' + ]); - // When sails is lifted in production - grunt.registerTask('prod', [ - 'clean:dev', - 'jst:dev', - 'less:dev', - 'copy:dev', - 'coffee:dev', - 'concat', - 'uglify', - 'cssmin', - 'sails-linker:prodJs', - 'sails-linker:prodStyles', - 'sails-linker:devTpl', - 'sails-linker:prodJsJADE', - 'sails-linker:prodStylesJADE', - 'sails-linker:devTplJADE' - ]); + grunt.registerTask('linkAssets', [ + // Update link/script/template references in `assets` index.html + 'sails-linker:devJs', + 'sails-linker:devStyles', + 'sails-linker:devTpl', + 'sails-linker:devJsJADE', + 'sails-linker:devStylesJADE', + 'sails-linker:devTplJADE' + ]); - // When API files are changed: - // grunt.event.on('watch', function(action, filepath) { - // grunt.log.writeln(filepath + ' has ' + action); + // Build the assets into a web accessible folder. + // (handy for phone gap apps, chrome extensions, etc.) + grunt.registerTask('build', [ + 'compileAssets', + 'linkAssets', + 'clean:build', + 'copy:build' + ]); - // // Send a request to a development-only endpoint on the server - // // which will reuptake the file that was changed. - // var baseurl = grunt.option('baseurl'); - // var gruntSignalRoute = grunt.option('signalpath'); - // var url = baseurl + gruntSignalRoute + '?action=' + action + '&filepath=' + filepath; + // When sails is lifted in production + grunt.registerTask('prod', [ + 'clean:dev', + 'jst:dev', + 'less:dev', + 'copy:dev', + 'coffee:dev', + 'concat', + 'uglify', + 'cssmin', + 'sails-linker:prodJs', + 'sails-linker:prodStyles', + 'sails-linker:devTpl', + 'sails-linker:prodJsJADE', + 'sails-linker:prodStylesJADE', + 'sails-linker:devTplJADE' + ]); - // require('http').get(url) - // .on('error', function(e) { - // console.error(filepath + ' has ' + action + ', but could not signal the Sails.js server: ' + e.message); - // }); - // }); + // When API files are changed: + // grunt.event.on('watch', function(action, filepath) { + // grunt.log.writeln(filepath + ' has ' + action); + + // // Send a request to a development-only endpoint on the server + // // which will reuptake the file that was changed. + // var baseurl = grunt.option('baseurl'); + // var gruntSignalRoute = grunt.option('signalpath'); + // var url = baseurl + gruntSignalRoute + '?action=' + action + '&filepath=' + filepath; + + // require('http').get(url) + // .on('error', function(e) { + // console.error(filepath + ' has ' + action + ', but could not signal the Sails.js server: ' + e.message); + // }); + // }); }; diff --git a/tasks/load-asv.js b/tasks/load-asv.js new file mode 100644 index 0000000..920f853 --- /dev/null +++ b/tasks/load-asv.js @@ -0,0 +1,44 @@ +module.exports = function(grunt) { + grunt.registerTask('load-asv', "Loads the ASV verses", function() { + var done = this.async(); + var path = '../dbs/t_asv.json'; + var json = grunt.file.readJSON(path).resultset.row; + var MongoClient = require('mongodb').MongoClient; + + MongoClient.connect('mongodb://localhost/BibleDev', function(err, db) { + if(err) throw err; + + var versesColl = db.collection('verse'); + grunt.log.writeln('Got collection: ' + versesColl); + grunt.log.writeln('Going to process ' + json.length + ' verses.'); + + for(var i = 0; i < json.length; i++) { + var verse = {}; + for(var k = 0; k < json[i].field.length; k++) { + var value = json[i].field[k]['_']; + var key = json[i].field[k]['$']['name']; + + if(key == 'c') key = 'chapter'; + else if (key == 'v') key = 'verse'; + else if (key == 'b') key = 'book'; + else if (key == 't') key = 'text'; + else if (key == 'id') key = 'reference'; + + verse[key] = value; + verse['number'] = i; + } + + versesColl.insert(verse, function(err, results) { + if(err) throw err; + }); + } + + versesColl.count(function(err, count) { + if(err) throw err; + grunt.log.writeln('Wrote ' + count + ' verse(s).'); + + done(); + }); + }); + }); +}; diff --git a/tasks/options/clean.js b/tasks/options/clean.js new file mode 100644 index 0000000..7719deb --- /dev/null +++ b/tasks/options/clean.js @@ -0,0 +1,7 @@ +// clean +module.exports = function(config) { + return { + dev: ['.tmp/public/**'], + build: ['www'] + }; +}; diff --git a/tasks/options/coffee.js b/tasks/options/coffee.js new file mode 100644 index 0000000..0cf7819 --- /dev/null +++ b/tasks/options/coffee.js @@ -0,0 +1,23 @@ +// coffee +module.exports = function(config) { + return { + dev: { + options: { + bare: true + }, + files: [{ + expand: true, + cwd: 'assets/js/', + src: ['**/*.coffee'], + dest: '.tmp/public/js/', + ext: '.js' + }, { + expand: true, + cwd: 'assets/linker/js/', + src: ['**/*.coffee'], + dest: '.tmp/public/linker/js/', + ext: '.js' + }] + } + }; +}; diff --git a/tasks/options/concat.js b/tasks/options/concat.js new file mode 100644 index 0000000..a4ce8b7 --- /dev/null +++ b/tasks/options/concat.js @@ -0,0 +1,13 @@ +// concat +module.exports = function(config) { + return { + js: { + src: config.jsFilesToInject, + dest: '.tmp/public/concat/production.js' + }, + css: { + src: config.cssFilesToInject, + dest: '.tmp/public/concat/production.css' + } + }; +}; diff --git a/tasks/options/copy.js b/tasks/options/copy.js new file mode 100644 index 0000000..4219ec7 --- /dev/null +++ b/tasks/options/copy.js @@ -0,0 +1,21 @@ +// copy +module.exports = function(config) { + return { + dev: { + files: [{ + expand: true, + cwd: './assets', + src: ['**/*.!(coffee|jade)'], + dest: '.tmp/public' + }] + }, + build: { + files: [{ + expand: true, + cwd: '.tmp/public', + src: ['**/*'], + dest: 'www' + }] + } + }; +}; diff --git a/tasks/options/cssmin.js b/tasks/options/cssmin.js new file mode 100644 index 0000000..ad63f4c --- /dev/null +++ b/tasks/options/cssmin.js @@ -0,0 +1,9 @@ +// cssmin +module.exports = function(config) { + return { + dist: { + src: ['.tmp/public/concat/production.css'], + dest: '.tmp/public/min/production.css' + } + }; +}; diff --git a/tasks/options/jade.js b/tasks/options/jade.js new file mode 100644 index 0000000..5316942 --- /dev/null +++ b/tasks/options/jade.js @@ -0,0 +1,14 @@ +// jade +module.exports = function(config) { + return { + templates: { + files: [{ + expand: true, + cwd: './assets/linker/templates/', + src: ['*.jade'], + dest: './assets/linker/templates/', + ext: '.html' + }] + } + }; +}; diff --git a/tasks/options/jst.js b/tasks/options/jst.js new file mode 100644 index 0000000..424df34 --- /dev/null +++ b/tasks/options/jst.js @@ -0,0 +1,17 @@ +// jst +module.exports = function(config) { + return { + dev: { + options: { + namespace: 'App.Templates', + templateSettings: { + interpolate: /\{\{(.+?)\}\}/g + } + }, + + files: { + '.tmp/public/templates.js': config.templateFilesToInject + } + } + }; +}; diff --git a/tasks/options/less.js b/tasks/options/less.js new file mode 100644 index 0000000..c72e5be --- /dev/null +++ b/tasks/options/less.js @@ -0,0 +1,20 @@ +// less +module.exports = function(config) { + return { + dev: { + files: [{ + expand: true, + cwd: 'assets/styles/', + src: ['*.less'], + dest: '.tmp/public/styles/', + ext: '.css' + }, { + expand: true, + cwd: 'assets/linker/styles/', + src: ['*.less'], + dest: '.tmp/public/linker/styles/', + ext: '.css' + }] + } + }; +}; diff --git a/tasks/options/sails-linker.js b/tasks/options/sails-linker.js new file mode 100644 index 0000000..2df1bce --- /dev/null +++ b/tasks/options/sails-linker.js @@ -0,0 +1,141 @@ +// sails-linker +module.exports = function(config) { return { + devJs: { + options: { + startTag: '', + endTag: '', + fileTmpl: '', + appRoot: '.tmp/public' + }, + files: { + '.tmp/public/**/*.html': config.jsFilesToInject, + 'views/**/*.html': config.jsFilesToInject, + 'views/**/*.ejs': config.jsFilesToInject + } + }, + + prodJs: { + options: { + startTag: '', + endTag: '', + fileTmpl: '', + appRoot: '.tmp/public' + }, + files: { + '.tmp/public/**/*.html': ['.tmp/public/min/production.js'], + 'views/**/*.html': ['.tmp/public/min/production.js'], + 'views/**/*.ejs': ['.tmp/public/min/production.js'] + } + }, + + devStyles: { + options: { + startTag: '', + endTag: '', + fileTmpl: '', + appRoot: '.tmp/public' + }, + + // config.cssFilesToInject defined up top + files: { + '.tmp/public/**/*.html': config.cssFilesToInject, + 'views/**/*.html': config.cssFilesToInject, + 'views/**/*.ejs': config.cssFilesToInject + } + }, + + prodStyles: { + options: { + startTag: '', + endTag: '', + fileTmpl: '', + appRoot: '.tmp/public' + }, + files: { + '.tmp/public/index.html': ['.tmp/public/min/production.css'], + 'views/**/*.html': ['.tmp/public/min/production.css'], + 'views/**/*.ejs': ['.tmp/public/min/production.css'] + } + }, + + // Bring in JST template object + devTpl: { + options: { + startTag: '', + endTag: '', + fileTmpl: '', + appRoot: '.tmp/public' + }, + files: { + '.tmp/public/index.html': ['.tmp/public/templates.js'], + 'views/**/*.html': ['.tmp/public/templates.js'], + 'views/**/*.ejs': ['.tmp/public/templates.js'] + } + }, + + + /******************************************* + * Jade linkers (TODO: clean this up) + *******************************************/ + + devJsJADE: { + options: { + startTag: '// SCRIPTS', + endTag: '// SCRIPTS END', + fileTmpl: 'script(type="text/javascript", src="%s")', + appRoot: '.tmp/public' + }, + files: { + 'views/**/*.jade': config.jsFilesToInject + } + }, + + prodJsJADE: { + options: { + startTag: '// SCRIPTS', + endTag: '// SCRIPTS END', + fileTmpl: 'script(type="text/javascript", src="%s")', + appRoot: '.tmp/public' + }, + files: { + 'views/**/*.jade': ['.tmp/public/min/production.js'] + } + }, + + devStylesJADE: { + options: { + startTag: '// STYLES', + endTag: '// STYLES END', + fileTmpl: 'link(rel="stylesheet", href="%s")', + appRoot: '.tmp/public' + }, + files: { + 'views/**/*.jade': config.cssFilesToInject + } + }, + + prodStylesJADE: { + options: { + startTag: '// STYLES', + endTag: '// STYLES END', + fileTmpl: 'link(rel="stylesheet", href="%s")', + appRoot: '.tmp/public' + }, + files: { + 'views/**/*.jade': ['.tmp/public/min/production.css'] + } + }, + + // Bring in JST template object + devTplJADE: { + options: { + startTag: '// TEMPLATES', + endTag: '// TEMPLATES END', + fileTmpl: 'script(type="text/javascript", src="%s")', + appRoot: '.tmp/public' + }, + files: { + 'views/**/*.jade': ['.tmp/public/templates.js'] + } + } +};}; diff --git a/tasks/options/uglify.js b/tasks/options/uglify.js new file mode 100644 index 0000000..7f8e61d --- /dev/null +++ b/tasks/options/uglify.js @@ -0,0 +1,9 @@ +// uglify +module.exports = function(config) { + return { + dist: { + src: ['.tmp/public/concat/production.js'], + dest: '.tmp/public/min/production.js' + } + }; +}; diff --git a/tasks/options/watch.js b/tasks/options/watch.js new file mode 100644 index 0000000..f336315 --- /dev/null +++ b/tasks/options/watch.js @@ -0,0 +1,17 @@ +// watch +module.exports = function(config) { + return { + api: { + // API files to watch: + files: ['api/**/*'] + }, + assets: { + + // Assets to watch: + files: ['assets/**/*'], + + // When assets are changed: + tasks: ['compileAssets', 'linkAssets'] + } + }; +};