From 1c620393cdc8fb953bdc95bdaabcf70ff88fc4b3 Mon Sep 17 00:00:00 2001 From: yo mama Date: Thu, 4 Dec 2014 12:00:43 -0800 Subject: added some stuff --- app/express-example/index.js | 186 +++++++++++++++++++++ app/express-example/templates/basic-coffee/app.js | 65 +++++++ app/express-example/templates/basic-coffee/bin/www | 9 + .../templates/basic-coffee/package.json | 37 ++++ .../templates/basic-coffee/routes/index.coffee | 8 + .../templates/basic-coffee/routes/user.coffee | 8 + app/express-example/templates/basic/app.js | 63 +++++++ app/express-example/templates/basic/bin/www | 9 + app/express-example/templates/basic/package.json | 35 ++++ .../templates/basic/routes/index.js | 9 + app/express-example/templates/basic/routes/user.js | 9 + app/express-example/templates/common/_.bowerrc | 4 + app/express-example/templates/common/_.gitignore | 3 + app/express-example/templates/common/_bower.json | 9 + app/express-example/templates/css/css/style.css | 8 + app/express-example/templates/css/less/style.less | 8 + app/express-example/templates/css/sass/style.scss | 8 + .../templates/extras/basic-coffee/Gruntfile.js | 109 ++++++++++++ .../templates/extras/basic-coffee/gulpfile.js | 59 +++++++ .../templates/extras/basic/Gruntfile.js | 109 ++++++++++++ .../templates/extras/basic/gulpfile.js | 59 +++++++ .../templates/extras/mvc-coffee/Gruntfile.js | 103 ++++++++++++ .../templates/extras/mvc-coffee/gulpfile.js | 59 +++++++ .../templates/extras/mvc-coffee/model-index.coffee | 24 +++ .../templates/extras/mvc/Gruntfile.js | 103 ++++++++++++ .../templates/extras/mvc/gulpfile.js | 59 +++++++ .../templates/extras/mvc/model-index.js | 26 +++ app/express-example/templates/mvc-coffee/app.js | 34 ++++ .../mvc-coffee/app/controllers/home.coffee | 17 ++ .../templates/mvc-coffee/app/models/article.coffee | 23 +++ .../templates/mvc-coffee/config/config.coffee | 42 +++++ .../templates/mvc-coffee/config/express.coffee | 55 ++++++ .../templates/mvc-coffee/package.json | 46 +++++ app/express-example/templates/mvc/app.js | 32 ++++ .../templates/mvc/app/controllers/home.js | 23 +++ .../templates/mvc/app/models/article.js | 38 +++++ app/express-example/templates/mvc/config/config.js | 49 ++++++ .../templates/mvc/config/express.js | 57 +++++++ app/express-example/templates/mvc/package.json | 46 +++++ app/express-example/templates/views/ejs/error.ejs | 7 + app/express-example/templates/views/ejs/footer.ejs | 2 + app/express-example/templates/views/ejs/header.ejs | 10 ++ app/express-example/templates/views/ejs/index.ejs | 6 + .../templates/views/jade/error.jade | 6 + .../templates/views/jade/index.jade | 5 + .../templates/views/jade/layout.jade | 12 ++ app/index.js | 19 ++- app/templates/.Gruntfile.js.swp | Bin 0 -> 12288 bytes app/templates/.bowerrc | 3 + app/templates/Gruntfile.js | 55 ++++++ app/templates/Gruntfile.js2 | 80 +++++++++ ascii_scrap/ascii_stuff | 88 ---------- ascii_scrap/ascii_stuff.js | 83 +++++++++ ascii_scrap/mirc_translate.js | 58 ------- 54 files changed, 1935 insertions(+), 149 deletions(-) create mode 100644 app/express-example/index.js create mode 100644 app/express-example/templates/basic-coffee/app.js create mode 100644 app/express-example/templates/basic-coffee/bin/www create mode 100644 app/express-example/templates/basic-coffee/package.json create mode 100644 app/express-example/templates/basic-coffee/routes/index.coffee create mode 100644 app/express-example/templates/basic-coffee/routes/user.coffee create mode 100644 app/express-example/templates/basic/app.js create mode 100644 app/express-example/templates/basic/bin/www create mode 100644 app/express-example/templates/basic/package.json create mode 100644 app/express-example/templates/basic/routes/index.js create mode 100644 app/express-example/templates/basic/routes/user.js create mode 100644 app/express-example/templates/common/_.bowerrc create mode 100644 app/express-example/templates/common/_.gitignore create mode 100644 app/express-example/templates/common/_bower.json create mode 100644 app/express-example/templates/css/css/style.css create mode 100644 app/express-example/templates/css/less/style.less create mode 100644 app/express-example/templates/css/sass/style.scss create mode 100644 app/express-example/templates/extras/basic-coffee/Gruntfile.js create mode 100644 app/express-example/templates/extras/basic-coffee/gulpfile.js create mode 100644 app/express-example/templates/extras/basic/Gruntfile.js create mode 100644 app/express-example/templates/extras/basic/gulpfile.js create mode 100644 app/express-example/templates/extras/mvc-coffee/Gruntfile.js create mode 100644 app/express-example/templates/extras/mvc-coffee/gulpfile.js create mode 100644 app/express-example/templates/extras/mvc-coffee/model-index.coffee create mode 100644 app/express-example/templates/extras/mvc/Gruntfile.js create mode 100644 app/express-example/templates/extras/mvc/gulpfile.js create mode 100644 app/express-example/templates/extras/mvc/model-index.js create mode 100644 app/express-example/templates/mvc-coffee/app.js create mode 100644 app/express-example/templates/mvc-coffee/app/controllers/home.coffee create mode 100644 app/express-example/templates/mvc-coffee/app/models/article.coffee create mode 100644 app/express-example/templates/mvc-coffee/config/config.coffee create mode 100644 app/express-example/templates/mvc-coffee/config/express.coffee create mode 100644 app/express-example/templates/mvc-coffee/package.json create mode 100644 app/express-example/templates/mvc/app.js create mode 100644 app/express-example/templates/mvc/app/controllers/home.js create mode 100644 app/express-example/templates/mvc/app/models/article.js create mode 100644 app/express-example/templates/mvc/config/config.js create mode 100644 app/express-example/templates/mvc/config/express.js create mode 100644 app/express-example/templates/mvc/package.json create mode 100644 app/express-example/templates/views/ejs/error.ejs create mode 100644 app/express-example/templates/views/ejs/footer.ejs create mode 100644 app/express-example/templates/views/ejs/header.ejs create mode 100644 app/express-example/templates/views/ejs/index.ejs create mode 100644 app/express-example/templates/views/jade/error.jade create mode 100644 app/express-example/templates/views/jade/index.jade create mode 100644 app/express-example/templates/views/jade/layout.jade create mode 100644 app/templates/.Gruntfile.js.swp create mode 100644 app/templates/.bowerrc create mode 100644 app/templates/Gruntfile.js create mode 100644 app/templates/Gruntfile.js2 delete mode 100755 ascii_scrap/ascii_stuff create mode 100755 ascii_scrap/ascii_stuff.js delete mode 100644 ascii_scrap/mirc_translate.js diff --git a/app/express-example/index.js b/app/express-example/index.js new file mode 100644 index 0000000..be8812e --- /dev/null +++ b/app/express-example/index.js @@ -0,0 +1,186 @@ +'use strict'; +var util = require('util'); +var path = require('path'); +var yeoman = require('yeoman-generator'); + +function ExpressGenerator(args, options, config) { + yeoman.generators.Base.apply(this, arguments); + + this.on('end', function () { + this.installDependencies({ skipInstall: options['skip-install'] }); + }); + + this.pkg = JSON.parse(this.readFileAsString(path.join(__dirname, '../package.json'))); +} + +util.inherits(ExpressGenerator, yeoman.generators.Base); + +ExpressGenerator.prototype.promptType = function promptType() { + // Short circuit if an option was explicitly specified + if (this.options.mvc || this.options.basic) { + return true; + } + + var done = this.async(); + var prompt = [{ + type: 'list', + name: 'type', + message: 'Select a version to install:', + choices: [ + 'Basic', + 'MVC' + ] + }]; + + this.prompt(prompt, function (responses) { + this.options.mvc = responses.type.match(/^MVC$/i) !== null; + done(); + }.bind(this)); +}; + +ExpressGenerator.prototype.promptViewEngine = function () { + + if (this.options.viewEngine) { + return true; + } + + var done = this.async(); + var prompt = [{ + type: 'list', + name: 'viewEngine', + message: 'Select a view engine to use:', + choices: [ + 'Jade', + 'EJS' + ] + }]; + + this.prompt(prompt, function (response) { + this.options.viewEngine = response.viewEngine.toLowerCase(); + done(); + }.bind(this)); +}; + +ExpressGenerator.prototype.promptCssPreprocessor = function () { + + if (this.options.cssPreprocessor) { + return true; + } + + var done = this.async(); + var prompt = [{ + type: 'list', + name: 'cssPreprocessor', + message: 'Select a css preprocessor to use (Sass Requires Ruby):' , + choices: [ + 'None', + 'Node-Sass', + 'Sass', + 'less' + ] + }]; + + this.prompt(prompt, function (response) { + this.options.cssPreprocessor = response.cssPreprocessor.toLowerCase(); + done(); + }.bind(this)); +}; + +ExpressGenerator.prototype.promptDatabase = function () { + + if (this.options.database || !this.options.mvc) { + return true; + } + + var done = this.async(); + var prompt = [{ + type: 'list', + name: 'database', + message: 'Select a database to use:', + choices: [ + 'None', + 'MongoDB', + 'MySQL', + 'PostgreSQL' + ] + }]; + this.prompt(prompt, function (response) { + this.options.database = response.database.toLowerCase(); + done(); + }.bind(this)); +}; + +ExpressGenerator.prototype.promptBuildTool = function () { + + if (this.options.buildTool) { + return true; + } + + var done = this.async(); + var prompt = [{ + type: 'list', + name: 'buildTool', + message: 'Select a build tool to use:', + choices: [ + 'Grunt', + 'Gulp' + ] + }]; + + this.prompt(prompt, function (response) { + this.options.buildTool = response.buildTool.toLowerCase(); + done(); + }.bind(this)); +}; + +ExpressGenerator.prototype.buildEnv = function buildEnv() { + this.sourceRoot(path.join(__dirname, 'templates', 'common')); + this.expandFiles('**', { cwd: this.sourceRoot() }).map(function (file) { + this.template(file, file.replace(/^_/, '')); + }, this); + + var name = this.options.mvc ? 'mvc' : 'basic'; + var filetype = 'js'; + if (this.options.coffee) { + name += '-coffee'; + filetype = 'coffee'; + } + this.sourceRoot(path.join(__dirname, 'templates', name)); + this.directory('.', '.'); + + var views = this.options.viewEngine; + this.sourceRoot(path.join(__dirname, 'templates', 'views', views)); + if (this.options.mvc) { + this.directory('.', 'app/views'); + } else { + this.directory('.', 'views'); + } + + var stylesheets = this.options.cssPreprocessor; + if (stylesheets === 'sass') { + this.sourceRoot(path.join(__dirname, 'templates', 'css', 'sass')); + } else if (stylesheets === 'node-sass') { + this.sourceRoot(path.join(__dirname, 'templates', 'css', 'sass')); + } else if (stylesheets === 'less') { + this.sourceRoot(path.join(__dirname, 'templates', 'css', 'less')); + } else if (stylesheets === 'none') { + this.sourceRoot(path.join(__dirname, 'templates', 'css', 'css')); + } + this.directory('.', 'public/css'); + + if (this.options.database === 'mysql' || this.options.database === 'postgresql') { + this.copy(path.join(__dirname, 'templates', 'extras', name, 'model-index.' + filetype), 'app/models/index.' + filetype); + } + var buildFile = this.options.buildTool === 'grunt' ? 'Gruntfile.js' : 'gulpfile.js'; + this.copy(path.join(__dirname, 'templates', 'extras', name, buildFile), buildFile); +}; + +ExpressGenerator.prototype.assetsDirs = function assetsDirs() { + this.mkdir('public'); + this.mkdir('public/components'); + this.mkdir('public/js'); + this.mkdir('public/css'); + this.mkdir('public/img'); +}; + +module.exports = ExpressGenerator; diff --git a/app/express-example/templates/basic-coffee/app.js b/app/express-example/templates/basic-coffee/app.js new file mode 100644 index 0000000..14986cb --- /dev/null +++ b/app/express-example/templates/basic-coffee/app.js @@ -0,0 +1,65 @@ +require('coffee-script/register'); + +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var routes = require('./routes/index'); +var users = require('./routes/user'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', '<%= options.viewEngine %>'); + +// app.use(favicon(__dirname + '/public/img/favicon.ico')); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ + extended: true +})); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', routes); +app.use('/users', users); + +/// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +/// error handlers + +// development error handler +// will print stacktrace +if (app.get('env') === 'development') { + app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err, + title: 'error' + }); + }); +} + +// production error handler +// no stacktraces leaked to user +app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {}, + title: 'error' + }); +}); + + +module.exports = app; diff --git a/app/express-example/templates/basic-coffee/bin/www b/app/express-example/templates/basic-coffee/bin/www new file mode 100644 index 0000000..d7f4447 --- /dev/null +++ b/app/express-example/templates/basic-coffee/bin/www @@ -0,0 +1,9 @@ +#!/usr/bin/env node +var debug = require('debug')('expressapp'); +var app = require('../app'); + +app.set('port', process.env.PORT || 3000); + +var server = app.listen(app.get('port'), function() { + debug('Express server listening on port ' + server.address().port); +}); diff --git a/app/express-example/templates/basic-coffee/package.json b/app/express-example/templates/basic-coffee/package.json new file mode 100644 index 0000000..3f6cb15 --- /dev/null +++ b/app/express-example/templates/basic-coffee/package.json @@ -0,0 +1,37 @@ +{ + "name": "<%= _.slugify(appname) %>", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "./bin/www" + }, + "dependencies": { + "express": "~4.4.5", + "static-favicon": "~2.0.0-alpha", + "serve-favicon": "^2.0.1", + "morgan": "~1.1.1", + "cookie-parser": "~1.3.2", + "body-parser": "~1.4.3", + "debug": "~1.0.2"<% if(options.viewEngine == 'jade'){ %>, + "jade": "~1.3.1"<% } %><% if(options.viewEngine == 'ejs'){ %>, + "ejs": "~1.0.0"<% } %> + }, + "devDependencies": {<% if(options.buildTool == 'grunt'){ %> + "grunt": "~0.4.5", + "grunt-develop": "~0.4.0"<% if(options.cssPreprocessor == 'sass'){ %>, + "grunt-contrib-sass": "^0.8.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + "grunt-sass": "^0.16.1"<% } %><% if(options.cssPreprocessor == 'less'){ %>, + "grunt-contrib-less": "^0.12.0"<% } %>, + "grunt-contrib-watch": "~0.6.1", + "request": "~2.36.0", + "time-grunt": "~0.3.2", + "load-grunt-tasks": "~0.6.0", + "coffee-script": "^1.7.1"<% } %><% if(options.buildTool == 'gulp'){ %> + "gulp": "~3.8.8"<% if(options.cssPreprocessor == 'sass'){ %>, + "gulp-ruby-sass": "^0.7.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + "gulp-sass": "^1.2.2"<% } %><% if(options.cssPreprocessor == 'less'){ %>, + "gulp-less": "^1.3.6"<% } %>, + "gulp-nodemon": "~1.0.4", + "gulp-livereload": "~2.1.1"<% } %> + } +} diff --git a/app/express-example/templates/basic-coffee/routes/index.coffee b/app/express-example/templates/basic-coffee/routes/index.coffee new file mode 100644 index 0000000..d7583ce --- /dev/null +++ b/app/express-example/templates/basic-coffee/routes/index.coffee @@ -0,0 +1,8 @@ +express = require 'express' +router = express.Router() + +# GET home page. +router.get '/', (req, res) -> + res.render 'index', { title: 'Express' } + +module.exports = router diff --git a/app/express-example/templates/basic-coffee/routes/user.coffee b/app/express-example/templates/basic-coffee/routes/user.coffee new file mode 100644 index 0000000..832fe87 --- /dev/null +++ b/app/express-example/templates/basic-coffee/routes/user.coffee @@ -0,0 +1,8 @@ +express = require 'express' +router = express.Router() + +# GET users listing. +router.get '/', (req, res) -> + res.send 'respond with a resource' + +module.exports = router diff --git a/app/express-example/templates/basic/app.js b/app/express-example/templates/basic/app.js new file mode 100644 index 0000000..dc4539c --- /dev/null +++ b/app/express-example/templates/basic/app.js @@ -0,0 +1,63 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var routes = require('./routes/index'); +var users = require('./routes/user'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', '<%= options.viewEngine %>'); + +// app.use(favicon(__dirname + '/public/img/favicon.ico')); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ + extended: true +})); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', routes); +app.use('/users', users); + +/// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +/// error handlers + +// development error handler +// will print stacktrace +if (app.get('env') === 'development') { + app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err, + title: 'error' + }); + }); +} + +// production error handler +// no stacktraces leaked to user +app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {}, + title: 'error' + }); +}); + + +module.exports = app; diff --git a/app/express-example/templates/basic/bin/www b/app/express-example/templates/basic/bin/www new file mode 100644 index 0000000..d7f4447 --- /dev/null +++ b/app/express-example/templates/basic/bin/www @@ -0,0 +1,9 @@ +#!/usr/bin/env node +var debug = require('debug')('expressapp'); +var app = require('../app'); + +app.set('port', process.env.PORT || 3000); + +var server = app.listen(app.get('port'), function() { + debug('Express server listening on port ' + server.address().port); +}); diff --git a/app/express-example/templates/basic/package.json b/app/express-example/templates/basic/package.json new file mode 100644 index 0000000..fd4b113 --- /dev/null +++ b/app/express-example/templates/basic/package.json @@ -0,0 +1,35 @@ +{ + "name": "<%= _.slugify(appname) %>", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "express": "~4.4.5", + "serve-favicon": "~2.0.1", + "morgan": "~1.1.1", + "cookie-parser": "~1.3.2", + "body-parser": "~1.4.3", + "debug": "~1.0.2"<% if(options.viewEngine == 'jade'){ %>, + "jade": "~1.3.1"<% } %><% if(options.viewEngine == 'ejs'){ %>, + "ejs": "~1.0.0"<% } %> + }, + "devDependencies": {<% if(options.buildTool == 'grunt'){ %> + "grunt": "~0.4.5", + "grunt-develop": "~0.4.0"<% if(options.cssPreprocessor == 'sass'){ %>, + "grunt-contrib-sass": "^0.8.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + "grunt-sass": "^0.16.1"<% } %><% if(options.cssPreprocessor == 'less'){ %>, + "grunt-contrib-less": "^0.12.0"<% } %>, + "grunt-contrib-watch": "~0.6.1", + "request": "~2.36.0", + "time-grunt": "~0.3.2", + "load-grunt-tasks": "~0.6.0"<% } %><% if(options.buildTool == 'gulp'){ %> + "gulp": "~3.8.8"<% if(options.cssPreprocessor == 'sass'){ %>, + "gulp-ruby-sass": "^0.7.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + "gulp-sass": "^1.2.2"<% } %><% if(options.cssPreprocessor == 'less'){ %>, + "gulp-less": "^1.3.6"<% } %>, + "gulp-nodemon": "~1.0.4", + "gulp-livereload": "~2.1.1"<% } %> + } +} diff --git a/app/express-example/templates/basic/routes/index.js b/app/express-example/templates/basic/routes/index.js new file mode 100644 index 0000000..896c948 --- /dev/null +++ b/app/express-example/templates/basic/routes/index.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res) { + res.render('index', { title: 'Express' }); +}); + +module.exports = router; diff --git a/app/express-example/templates/basic/routes/user.js b/app/express-example/templates/basic/routes/user.js new file mode 100644 index 0000000..c00d7de --- /dev/null +++ b/app/express-example/templates/basic/routes/user.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET users listing. */ +router.get('/', function(req, res) { + res.send('respond with a resource'); +}); + +module.exports = router; diff --git a/app/express-example/templates/common/_.bowerrc b/app/express-example/templates/common/_.bowerrc new file mode 100644 index 0000000..2f00fdf --- /dev/null +++ b/app/express-example/templates/common/_.bowerrc @@ -0,0 +1,4 @@ +{ + "directory": "public/components", + "json": "bower.json" +} diff --git a/app/express-example/templates/common/_.gitignore b/app/express-example/templates/common/_.gitignore new file mode 100644 index 0000000..80fcba8 --- /dev/null +++ b/app/express-example/templates/common/_.gitignore @@ -0,0 +1,3 @@ +node_modules/ +public/components +.sass-cache \ No newline at end of file diff --git a/app/express-example/templates/common/_bower.json b/app/express-example/templates/common/_bower.json new file mode 100644 index 0000000..97fc464 --- /dev/null +++ b/app/express-example/templates/common/_bower.json @@ -0,0 +1,9 @@ +{ + "name": "<%= _.slugify(appname) %>", + "version": "0.0.1", + "ignore": [ + "**/.*", + "node_modules", + "components" + ] +} diff --git a/app/express-example/templates/css/css/style.css b/app/express-example/templates/css/css/style.css new file mode 100644 index 0000000..30e047d --- /dev/null +++ b/app/express-example/templates/css/css/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} \ No newline at end of file diff --git a/app/express-example/templates/css/less/style.less b/app/express-example/templates/css/less/style.less new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/app/express-example/templates/css/less/style.less @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/app/express-example/templates/css/sass/style.scss b/app/express-example/templates/css/sass/style.scss new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/app/express-example/templates/css/sass/style.scss @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/app/express-example/templates/extras/basic-coffee/Gruntfile.js b/app/express-example/templates/extras/basic-coffee/Gruntfile.js new file mode 100644 index 0000000..921f04d --- /dev/null +++ b/app/express-example/templates/extras/basic-coffee/Gruntfile.js @@ -0,0 +1,109 @@ +'use strict'; + +var request = require('request'); + +module.exports = function (grunt) { + // show elapsed time at the end + require('time-grunt')(grunt); + // load all grunt tasks + require('load-grunt-tasks')(grunt); + + var reloadPort = 35729, files; + + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + develop: { + server: { + file: 'bin/www' + } + },<% if(options.cssPreprocessor == 'sass'){ %> + sass: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.scss' + } + } + },<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + sass: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.scss' + } + } + },<% } %><% if(options.cssPreprocessor == 'less'){ %> + less: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.less' + } + } + },<% } %> + watch: { + options: { + nospawn: true, + livereload: reloadPort + }, + server: { + files: [ + 'bin/www', + 'app.js', + 'routes/*.coffee' + ], + tasks: ['develop', 'delayed-livereload'] + }, + js: { + files: ['public/js/*.js'], + options: { + livereload: reloadPort + } + }, + css: { + files: [<% if(options.cssPreprocessor == 'none'){ %> + 'public/css/*.css'<% } %><% if(options.cssPreprocessor == 'sass'){ %> + 'public/css/*.scss'<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'public/css/*.scss'<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'public/css/*.less'<% } %> + ],<% if(options.cssPreprocessor == 'sass'){ %> + tasks: ['sass'],<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + tasks: ['sass'],<% } %><% if(options.cssPreprocessor == 'less'){ %> + tasks: ['less'],<% } %> + options: { + livereload: reloadPort + } + }, + views: { + files: ['views/*.<%= options.viewEngine %>'], + options: { + livereload: reloadPort + } + } + } + }); + + grunt.config.requires('watch.server.files'); + files = grunt.config('watch.server.files'); + files = grunt.file.expand(files); + + grunt.registerTask('delayed-livereload', 'Live reload after the node server has restarted.', function () { + var done = this.async(); + setTimeout(function () { + request.get('http://localhost:' + reloadPort + '/changed?files=' + files.join(','), function (err, res) { + var reloaded = !err && res.statusCode === 200; + if (reloaded) { + grunt.log.ok('Delayed live reload successful.'); + } else { + grunt.log.error('Unable to make a delayed live reload.'); + } + done(reloaded); + }); + }, 500); + }); + + grunt.registerTask('default', [<% if(options.cssPreprocessor == 'sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'less',<% } %> + 'develop', + 'watch' + ]); +}; diff --git a/app/express-example/templates/extras/basic-coffee/gulpfile.js b/app/express-example/templates/extras/basic-coffee/gulpfile.js new file mode 100644 index 0000000..5dd34e1 --- /dev/null +++ b/app/express-example/templates/extras/basic-coffee/gulpfile.js @@ -0,0 +1,59 @@ +var gulp = require('gulp'), + nodemon = require('gulp-nodemon'), + livereload = require('gulp-livereload')<% if(options.cssPreprocessor == 'sass'){ %>, + sass = require('gulp-ruby-sass')<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + sass = require('gulp-sass')<% } %><% if(options.cssPreprocessor == 'less'){ %>, + less = require('gulp-less')<% } %>; +<% if(options.cssPreprocessor == 'sass'){ %> +gulp.task('sass', function () { + return gulp.src('./public/css/*.scss') + .pipe(sass()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.scss', ['sass']); +});<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> +gulp.task('sass', function () { + gulp.src('./public/css/*.scss') + .pipe(sass()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.scss', ['sass']); +});<% } %><% if(options.cssPreprocessor == 'less'){ %> +gulp.task('less', function () { + gulp.src('./public/css/*.less') + .pipe(less()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.less', ['less']); +});<% } %> + +gulp.task('develop', function () { + livereload.listen(); + nodemon({ + script: 'bin/www', + ext: 'js coffee <%= options.viewEngine %>', + }).on('restart', function () { + setTimeout(function () { + livereload.changed(); + }, 500); + }); +}); + +gulp.task('default', [<% if(options.cssPreprocessor == 'sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'less',<% } %> + 'develop'<% if(options.cssPreprocessor == 'sass' || + options.cssPreprocessor == 'node-sass' || + options.cssPreprocessor == 'less'){ %>, + 'watch'<% } %> +]); diff --git a/app/express-example/templates/extras/basic/Gruntfile.js b/app/express-example/templates/extras/basic/Gruntfile.js new file mode 100644 index 0000000..ffe4bae --- /dev/null +++ b/app/express-example/templates/extras/basic/Gruntfile.js @@ -0,0 +1,109 @@ +'use strict'; + +var request = require('request'); + +module.exports = function (grunt) { + // show elapsed time at the end + require('time-grunt')(grunt); + // load all grunt tasks + require('load-grunt-tasks')(grunt); + + var reloadPort = 35729, files; + + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + develop: { + server: { + file: 'bin/www' + } + },<% if(options.cssPreprocessor == 'sass'){ %> + sass: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.scss' + } + } + },<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + sass: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.scss' + } + } + },<% } %><% if(options.cssPreprocessor == 'less'){ %> + less: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.less' + } + } + },<% } %> + watch: { + options: { + nospawn: true, + livereload: reloadPort + }, + server: { + files: [ + 'bin/www', + 'app.js', + 'routes/*.js' + ], + tasks: ['develop', 'delayed-livereload'] + }, + js: { + files: ['public/js/*.js'], + options: { + livereload: reloadPort + } + }, + css: { + files: [<% if(options.cssPreprocessor == 'none'){ %> + 'public/css/*.css'<% } %><% if(options.cssPreprocessor == 'sass'){ %> + 'public/css/*.scss'<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'public/css/*.scss'<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'public/css/*.less'<% } %> + ],<% if(options.cssPreprocessor == 'sass'){ %> + tasks: ['sass'],<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + tasks: ['sass'],<% } %><% if(options.cssPreprocessor == 'less'){ %> + tasks: ['less'],<% } %> + options: { + livereload: reloadPort + } + }, + views: { + files: ['views/*.<%= options.viewEngine %>'], + options: { + livereload: reloadPort + } + } + } + }); + + grunt.config.requires('watch.server.files'); + files = grunt.config('watch.server.files'); + files = grunt.file.expand(files); + + grunt.registerTask('delayed-livereload', 'Live reload after the node server has restarted.', function () { + var done = this.async(); + setTimeout(function () { + request.get('http://localhost:' + reloadPort + '/changed?files=' + files.join(','), function (err, res) { + var reloaded = !err && res.statusCode === 200; + if (reloaded) { + grunt.log.ok('Delayed live reload successful.'); + } else { + grunt.log.error('Unable to make a delayed live reload.'); + } + done(reloaded); + }); + }, 500); + }); + + grunt.registerTask('default', [<% if(options.cssPreprocessor == 'sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'less',<% } %> + 'develop', + 'watch' + ]); +}; diff --git a/app/express-example/templates/extras/basic/gulpfile.js b/app/express-example/templates/extras/basic/gulpfile.js new file mode 100644 index 0000000..d73c578 --- /dev/null +++ b/app/express-example/templates/extras/basic/gulpfile.js @@ -0,0 +1,59 @@ +var gulp = require('gulp'), + nodemon = require('gulp-nodemon'), + livereload = require('gulp-livereload')<% if(options.cssPreprocessor == 'sass'){ %>, + sass = require('gulp-ruby-sass')<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + sass = require('gulp-sass')<% } %><% if(options.cssPreprocessor == 'less'){ %>, + less = require('gulp-less')<% } %>; +<% if(options.cssPreprocessor == 'sass'){ %> +gulp.task('sass', function () { + return gulp.src('./public/css/*.scss') + .pipe(sass()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.scss', ['sass']); +});<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> +gulp.task('sass', function () { + gulp.src('./public/css/*.scss') + .pipe(sass()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.scss', ['sass']); +});<% } %><% if(options.cssPreprocessor == 'less'){ %> +gulp.task('less', function () { + gulp.src('./public/css/*.less') + .pipe(less()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.less', ['less']); +});<% } %> + +gulp.task('develop', function () { + livereload.listen(); + nodemon({ + script: 'bin/www', + ext: 'js <%= options.viewEngine %>', + }).on('restart', function () { + setTimeout(function () { + livereload.changed(); + }, 500); + }); +}); + +gulp.task('default', [<% if(options.cssPreprocessor == 'sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'less',<% } %> + 'develop'<% if(options.cssPreprocessor == 'sass' || + options.cssPreprocessor == 'node-sass' || + options.cssPreprocessor == 'less'){ %>, + 'watch'<% } %> +]); diff --git a/app/express-example/templates/extras/mvc-coffee/Gruntfile.js b/app/express-example/templates/extras/mvc-coffee/Gruntfile.js new file mode 100644 index 0000000..57a03df --- /dev/null +++ b/app/express-example/templates/extras/mvc-coffee/Gruntfile.js @@ -0,0 +1,103 @@ +'use strict'; + +var request = require('request'); + +module.exports = function (grunt) { + // show elapsed time at the end + require('time-grunt')(grunt); + // load all grunt tasks + require('load-grunt-tasks')(grunt); + + var reloadPort = 35729, files; + + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + develop: { + server: { + file: 'app.js' + } + },<% if(options.cssPreprocessor == 'sass'){ %> + sass: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.scss' + } + } + },<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + sass: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.scss' + } + } + },<% } %><% if(options.cssPreprocessor == 'less'){ %> + less: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.less' + } + } + },<% } %> + watch: { + options: { + nospawn: true, + livereload: reloadPort + }, + js: { + files: [ + 'app.coffee', + 'app/**/*.coffee', + 'config/*.coffee' + ], + tasks: ['develop', 'delayed-livereload'] + }, + css: { + files: [<% if(options.cssPreprocessor == 'none'){ %> + 'public/css/*.css'<% } %><% if(options.cssPreprocessor == 'sass'){ %> + 'public/css/*.scss'<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'public/css/*.scss'<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'public/css/*.less'<% } %> + ],<% if(options.cssPreprocessor == 'sass'){ %> + tasks: ['sass'],<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + tasks: ['sass'],<% } %><% if(options.cssPreprocessor == 'less'){ %> + tasks: ['less'],<% } %> + options: { + livereload: reloadPort + } + }, + views: { + files: [ + 'app/views/*.<%= options.viewEngine %>', + 'app/views/**/*.<%= options.viewEngine %>' + ], + options: { livereload: reloadPort } + } + } + }); + + grunt.config.requires('watch.js.files'); + files = grunt.config('watch.js.files'); + files = grunt.file.expand(files); + + grunt.registerTask('delayed-livereload', 'Live reload after the node server has restarted.', function () { + var done = this.async(); + setTimeout(function () { + request.get('http://localhost:' + reloadPort + '/changed?files=' + files.join(','), function(err, res) { + var reloaded = !err && res.statusCode === 200; + if (reloaded) + grunt.log.ok('Delayed live reload successful.'); + else + grunt.log.error('Unable to make a delayed live reload.'); + done(reloaded); + }); + }, 500); + }); + + grunt.registerTask('default', [<% if(options.cssPreprocessor == 'sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'less',<% } %> + 'develop', + 'watch' + ]); +}; diff --git a/app/express-example/templates/extras/mvc-coffee/gulpfile.js b/app/express-example/templates/extras/mvc-coffee/gulpfile.js new file mode 100644 index 0000000..0475ad4 --- /dev/null +++ b/app/express-example/templates/extras/mvc-coffee/gulpfile.js @@ -0,0 +1,59 @@ +var gulp = require('gulp'), + nodemon = require('gulp-nodemon'), + livereload = require('gulp-livereload')<% if(options.cssPreprocessor == 'sass'){ %>, + sass = require('gulp-ruby-sass')<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + sass = require('gulp-sass')<% } %><% if(options.cssPreprocessor == 'less'){ %>, + less = require('gulp-less')<% } %>; +<% if(options.cssPreprocessor == 'sass'){ %> +gulp.task('sass', function () { + return gulp.src('./public/css/*.scss') + .pipe(sass()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.scss', ['sass']); +});<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> +gulp.task('sass', function () { + gulp.src('./public/css/*.scss') + .pipe(sass()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.scss', ['sass']); +});<% } %><% if(options.cssPreprocessor == 'less'){ %> +gulp.task('less', function () { + gulp.src('./public/css/*.less') + .pipe(less()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.less', ['less']); +});<% } %> + +gulp.task('develop', function () { + livereload.listen(); + nodemon({ + script: 'app.js', + ext: 'js coffee <%= options.viewEngine %>', + }).on('restart', function () { + setTimeout(function () { + livereload.changed(); + }, 500); + }); +}); + +gulp.task('default', [<% if(options.cssPreprocessor == 'sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'less',<% } %> + 'develop'<% if(options.cssPreprocessor == 'sass' || + options.cssPreprocessor == 'node-sass' || + options.cssPreprocessor == 'less'){ %>, + 'watch'<% } %> +]); diff --git a/app/express-example/templates/extras/mvc-coffee/model-index.coffee b/app/express-example/templates/extras/mvc-coffee/model-index.coffee new file mode 100644 index 0000000..2016c32 --- /dev/null +++ b/app/express-example/templates/extras/mvc-coffee/model-index.coffee @@ -0,0 +1,24 @@ +fs = require('fs') +path = require('path') +Sequelize = require('sequelize') +lodash = require('lodash') +config = require('../../config/config') +db = {} + +sequelize = new Sequelize config.db + +fs.readdirSync(__dirname) + .filter (file) -> + file.indexOf('.') != 0 and file != 'index.coffee' + .forEach (file) -> + model = sequelize.import path.join(__dirname, file) + db[model.name] = model + +Object.keys(db).forEach (modelName) -> + if 'associate' of db[modelName] + db[modelName].associate db + +module.exports = lodash.extend + sequelize: sequelize, + Sequelize: Sequelize +, db diff --git a/app/express-example/templates/extras/mvc/Gruntfile.js b/app/express-example/templates/extras/mvc/Gruntfile.js new file mode 100644 index 0000000..2268bb5 --- /dev/null +++ b/app/express-example/templates/extras/mvc/Gruntfile.js @@ -0,0 +1,103 @@ +'use strict'; + +var request = require('request'); + +module.exports = function (grunt) { + // show elapsed time at the end + require('time-grunt')(grunt); + // load all grunt tasks + require('load-grunt-tasks')(grunt); + + var reloadPort = 35729, files; + + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + develop: { + server: { + file: 'app.js' + } + },<% if(options.cssPreprocessor == 'sass'){ %> + sass: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.scss' + } + } + },<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + sass: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.scss' + } + } + },<% } %><% if(options.cssPreprocessor == 'less'){ %> + less: { + dist: { + files: { + 'public/css/style.css': 'public/css/style.less' + } + } + },<% } %> + watch: { + options: { + nospawn: true, + livereload: reloadPort + }, + js: { + files: [ + 'app.js', + 'app/**/*.js', + 'config/*.js' + ], + tasks: ['develop', 'delayed-livereload'] + }, + css: { + files: [<% if(options.cssPreprocessor == 'none'){ %> + 'public/css/*.css'<% } %><% if(options.cssPreprocessor == 'sass'){ %> + 'public/css/*.scss'<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'public/css/*.scss'<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'public/css/*.less'<% } %> + ],<% if(options.cssPreprocessor == 'sass'){ %> + tasks: ['sass'],<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + tasks: ['sass'],<% } %><% if(options.cssPreprocessor == 'less'){ %> + tasks: ['less'],<% } %> + options: { + livereload: reloadPort + } + }, + views: { + files: [ + 'app/views/*.<%= options.viewEngine %>', + 'app/views/**/*.<%= options.viewEngine %>' + ], + options: { livereload: reloadPort } + } + } + }); + + grunt.config.requires('watch.js.files'); + files = grunt.config('watch.js.files'); + files = grunt.file.expand(files); + + grunt.registerTask('delayed-livereload', 'Live reload after the node server has restarted.', function () { + var done = this.async(); + setTimeout(function () { + request.get('http://localhost:' + reloadPort + '/changed?files=' + files.join(','), function(err, res) { + var reloaded = !err && res.statusCode === 200; + if (reloaded) + grunt.log.ok('Delayed live reload successful.'); + else + grunt.log.error('Unable to make a delayed live reload.'); + done(reloaded); + }); + }, 500); + }); + + grunt.registerTask('default', [<% if(options.cssPreprocessor == 'sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'less',<% } %> + 'develop', + 'watch' + ]); +}; diff --git a/app/express-example/templates/extras/mvc/gulpfile.js b/app/express-example/templates/extras/mvc/gulpfile.js new file mode 100644 index 0000000..5a70d05 --- /dev/null +++ b/app/express-example/templates/extras/mvc/gulpfile.js @@ -0,0 +1,59 @@ +var gulp = require('gulp'), + nodemon = require('gulp-nodemon'), + livereload = require('gulp-livereload')<% if(options.cssPreprocessor == 'sass'){ %>, + sass = require('gulp-ruby-sass')<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + sass = require('gulp-sass')<% } %><% if(options.cssPreprocessor == 'less'){ %>, + less = require('gulp-less')<% } %>; +<% if(options.cssPreprocessor == 'sass'){ %> +gulp.task('sass', function () { + return gulp.src('./public/css/*.scss') + .pipe(sass()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.scss', ['sass']); +});<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> +gulp.task('sass', function () { + gulp.src('./public/css/*.scss') + .pipe(sass()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.scss', ['sass']); +});<% } %><% if(options.cssPreprocessor == 'less'){ %> +gulp.task('less', function () { + gulp.src('./public/css/*.less') + .pipe(less()) + .pipe(gulp.dest('./public/css')) + .pipe(livereload()); +}); + +gulp.task('watch', function() { + gulp.watch('./public/css/*.less', ['less']); +});<% } %> + +gulp.task('develop', function () { + livereload.listen(); + nodemon({ + script: 'app.js', + ext: 'js <%= options.viewEngine %>', + }).on('restart', function () { + setTimeout(function () { + livereload.changed(); + }, 500); + }); +}); + +gulp.task('default', [<% if(options.cssPreprocessor == 'sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'node-sass'){ %> + 'sass',<% } %><% if(options.cssPreprocessor == 'less'){ %> + 'less',<% } %> + 'develop'<% if(options.cssPreprocessor == 'sass' || + options.cssPreprocessor == 'node-sass' || + options.cssPreprocessor == 'less'){ %>, + 'watch'<% } %> +]); diff --git a/app/express-example/templates/extras/mvc/model-index.js b/app/express-example/templates/extras/mvc/model-index.js new file mode 100644 index 0000000..7cb2ec7 --- /dev/null +++ b/app/express-example/templates/extras/mvc/model-index.js @@ -0,0 +1,26 @@ +var fs = require('fs'), + path = require('path'), + Sequelize = require('sequelize'), + lodash = require('lodash'), + config = require('../../config/config'), + db = {}; + +var sequelize = new Sequelize(config.db); + +fs.readdirSync(__dirname).filter(function (file) { + return (file.indexOf('.') !== 0) && (file !== 'index.js'); +}).forEach(function (file) { + var model = sequelize.import(path.join(__dirname, file)); + db[model.name] = model; +}); + +Object.keys(db).forEach(function (modelName) { + if ('associate' in db[modelName]) { + db[modelName].associate(db); + } +}); + +module.exports = lodash.extend({ + sequelize: sequelize, + Sequelize: Sequelize +}, db); diff --git a/app/express-example/templates/mvc-coffee/app.js b/app/express-example/templates/mvc-coffee/app.js new file mode 100644 index 0000000..f256f81 --- /dev/null +++ b/app/express-example/templates/mvc-coffee/app.js @@ -0,0 +1,34 @@ +require('coffee-script/register'); + +var express = require('express'), + config = require('./config/config')<% if(options.database == 'none'){ %>;<% } %><% if(options.database == 'mongodb'){ %>, + glob = require('glob'), + mongoose = require('mongoose');<% } %><% if(options.database == 'mysql' || options.database == 'postgresql'){ %>, + db = require('./app/models');<% } %> +<% if(options.database == 'mongodb'){ %> +mongoose.connect(config.db); +var db = mongoose.connection; +db.on('error', function () { + throw new Error('unable to connect to database at ' + config.db); +}); + +var models = glob.sync(config.root + '/app/models/*.coffee'); +models.forEach(function (model) { + require(model); +});<% } %> +var app = express(); + +require('./config/express')(app, config); +<% if(options.database == 'mysql' || options.database == 'postgresql'){ %> +db.sequelize + .sync() + .complete(function (err) { + if(err){ + throw err[0]; + }else{ + app.listen(config.port); + } + }); +<% } else { %> +app.listen(config.port); +<% } %> diff --git a/app/express-example/templates/mvc-coffee/app/controllers/home.coffee b/app/express-example/templates/mvc-coffee/app/controllers/home.coffee new file mode 100644 index 0000000..b8767e8 --- /dev/null +++ b/app/express-example/templates/mvc-coffee/app/controllers/home.coffee @@ -0,0 +1,17 @@ +express = require 'express' +router = express.Router()<% if(options.database == 'mongodb'){ %> +mongoose = require 'mongoose' +Article = mongoose.model 'Article'<% } %><% if(options.database == 'mysql' || options.database == 'postgresql'){ %> +db = require '../models'<% } %> + +module.exports = (app) -> + app.use '/', router + +router.get '/', (req, res, next) -> +<% if(options.database == 'mongodb'){ %> + Article.find (err, articles) -> + return next(err) if err<% } %><% if(options.database == 'mysql' || options.database == 'postgresql'){ %> + db.Article.findAll().success (articles) -><% } %> + res.render 'index', + title: 'Generator-Express MVC' + articles: articles diff --git a/app/express-example/templates/mvc-coffee/app/models/article.coffee b/app/express-example/templates/mvc-coffee/app/models/article.coffee new file mode 100644 index 0000000..1446f5f --- /dev/null +++ b/app/express-example/templates/mvc-coffee/app/models/article.coffee @@ -0,0 +1,23 @@ +# Example model +<% if(options.database == 'mongodb'){ %> +mongoose = require 'mongoose' +Schema = mongoose.Schema + +ArticleSchema = new Schema( + title: String + url: String + text: String +) + +ArticleSchema.virtual('date') + .get (-> this._id.getTimestamp()) + +mongoose.model 'Article', ArticleSchema<% } %> +<% if(options.database == 'mysql' || options.database == 'postgresql'){ %> +module.exports = (sequelize, DataTypes) -> + + Article = sequelize.define 'Article', + title: DataTypes.STRING, + url: DataTypes.STRING, + text: DataTypes.STRING +<% } %> \ No newline at end of file diff --git a/app/express-example/templates/mvc-coffee/config/config.coffee b/app/express-example/templates/mvc-coffee/config/config.coffee new file mode 100644 index 0000000..051934c --- /dev/null +++ b/app/express-example/templates/mvc-coffee/config/config.coffee @@ -0,0 +1,42 @@ +path = require 'path' +rootPath = path.normalize __dirname + '/..' +env = process.env.NODE_ENV || 'development' + +config = + development: + root: rootPath + app: + name: '<%= _.slugify(appname) %>' + port: 3000<% if(options.database == 'mongodb'){ %> + db: 'mongodb://localhost/<%= _.slugify(appname) %>-development' + <% } %><% if(options.database == 'mysql'){ %> + db: 'mysql://localhost/<%= _.slugify(appname) %>-development' + <% } %><% if(options.database == 'postgresql'){ %> + db: 'postgres://localhost/<%= _.slugify(appname) %>-development' + <% } %> + + test: + root: rootPath + app: + name: '<%= _.slugify(appname) %>' + port: 3000<% if(options.database == 'mongodb'){ %> + db: 'mongodb://localhost/<%= _.slugify(appname) %>-test' + <% } %><% if(options.database == 'mysql'){ %> + db: 'mysql://localhost/<%= _.slugify(appname) %>-test' + <% } %><% if(options.database == 'postgresql'){ %> + db: 'postgres://localhost/<%= _.slugify(appname) %>-test' + <% } %> + + production: + root: rootPath + app: + name: '<%= _.slugify(appname) %>' + port: 3000<% if(options.database == 'mongodb'){ %> + db: 'mongodb://localhost/<%= _.slugify(appname) %>-production' + <% } %><% if(options.database == 'mysql'){ %> + db: 'mysql://localhost/<%= _.slugify(appname) %>-production' + <% } %><% if(options.database == 'postgresql'){ %> + db: 'postgres://localhost/<%= _.slugify(appname) %>-production' + <% } %> + +module.exports = config[env] diff --git a/app/express-example/templates/mvc-coffee/config/express.coffee b/app/express-example/templates/mvc-coffee/config/express.coffee new file mode 100644 index 0000000..9ca1b1c --- /dev/null +++ b/app/express-example/templates/mvc-coffee/config/express.coffee @@ -0,0 +1,55 @@ +express = require 'express' +glob = require 'glob' + +favicon = require 'serve-favicon' +logger = require 'morgan' +cookieParser = require 'cookie-parser' +bodyParser = require 'body-parser' +compress = require 'compression' +methodOverride = require 'method-override' + +module.exports = (app, config) -> + app.set 'views', config.root + '/app/views' + app.set 'view engine', '<%= options.viewEngine %>' + + # app.use(favicon(config.root + '/public/img/favicon.ico')); + app.use logger 'dev' + app.use bodyParser.json() + app.use bodyParser.urlencoded( + extended: true + ) + app.use cookieParser() + app.use compress() + app.use express.static config.root + '/public' + app.use methodOverride() + + controllers = glob.sync config.root + '/app/controllers/**/*.coffee' + controllers.forEach (controller) -> + require(controller)(app); + + # catch 404 and forward to error handler + app.use (req, res, next) -> + err = new Error 'Not Found' + err.status = 404 + next err + + # error handlers + + # development error handler + # will print stacktrace + if app.get('env') == 'development' + app.use (err, req, res, next) -> + res.status err.status || 500 + res.render 'error', + message: err.message + error: err + title: 'error' + + # production error handler + # no stacktraces leaked to user + app.use (err, req, res, next) -> + res.status err.status || 500 + res.render 'error', + message: err.message + error: {} + title: 'error' diff --git a/app/express-example/templates/mvc-coffee/package.json b/app/express-example/templates/mvc-coffee/package.json new file mode 100644 index 0000000..f5802ac --- /dev/null +++ b/app/express-example/templates/mvc-coffee/package.json @@ -0,0 +1,46 @@ +{ + "name": "<%= _.slugify(appname) %>", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node app.js" + }, + "dependencies": { + "express": "~4.2.0", + "serve-favicon": "~2.0.1", + "morgan": "~1.1.1", + "cookie-parser": "~1.3.2", + "body-parser": "~1.4.3", + "compression": "~1.0.8", + "method-override": "~2.1.1", + "glob": "~4.0.5"<% if(options.database == 'mongodb'){ %>, + "mongoose": "~3.8.12"<% } %><% if(options.database == 'mysql'){ %>, + "sequelize": "~1.7.9", + "lodash": "~2.4.1", + "mysql": "~2.4.0"<% } %><% if(options.database == 'postgresql'){ %>, + "sequelize": "~1.7.9", + "lodash": "~2.4.1", + "pg": "~3.4.0"<% } %><% if(options.viewEngine == 'jade'){ %>, + "jade": "~1.3.0"<% } %><% if(options.viewEngine == 'ejs'){ %>, + "ejs": "~1.0.0"<% } %> + }, + "devDependencies": {<% if(options.buildTool == 'grunt'){ %> + "grunt": "~0.4.5", + "grunt-develop": "~0.4.0"<% if(options.cssPreprocessor == 'sass'){ %>, + "grunt-contrib-sass": "^0.8.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + "grunt-sass": "^0.16.1"<% } %><% if(options.cssPreprocessor == 'less'){ %>, + "grunt-contrib-less": "^0.12.0"<% } %>, + "grunt-contrib-watch": "~0.6.1", + "grunt-contrib-compass": "~0.9.0", + "request": "~2.36.0", + "time-grunt": "~0.3.2", + "load-grunt-tasks": "~0.6.0", + "coffee-script": "^1.7.1"<% } %><% if(options.buildTool == 'gulp'){ %> + "gulp": "~3.8.8"<% if(options.cssPreprocessor == 'sass'){ %>, + "gulp-ruby-sass": "^0.7.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + "gulp-sass": "^1.2.2"<% } %><% if(options.cssPreprocessor == 'less'){ %>, + "gulp-less": "^1.3.6"<% } %>, + "gulp-nodemon": "~1.0.4", + "gulp-livereload": "~2.1.1"<% } %> + } +} diff --git a/app/express-example/templates/mvc/app.js b/app/express-example/templates/mvc/app.js new file mode 100644 index 0000000..7894745 --- /dev/null +++ b/app/express-example/templates/mvc/app.js @@ -0,0 +1,32 @@ +var express = require('express'), + config = require('./config/config')<% if(options.database == 'none'){ %>;<% } %><% if(options.database == 'mongodb'){ %>, + glob = require('glob'), + mongoose = require('mongoose');<% } %><% if(options.database == 'mysql' || options.database == 'postgresql'){ %>, + db = require('./app/models');<% } %> +<% if(options.database == 'mongodb'){ %> +mongoose.connect(config.db); +var db = mongoose.connection; +db.on('error', function () { + throw new Error('unable to connect to database at ' + config.db); +}); + +var models = glob.sync(config.root + '/app/models/*.js'); +models.forEach(function (model) { + require(model); +});<% } %> +var app = express(); + +require('./config/express')(app, config); +<% if(options.database == 'mysql' || options.database == 'postgresql'){ %> +db.sequelize + .sync() + .complete(function (err) { + if(err){ + throw err[0]; + }else{ + app.listen(config.port); + } + }); +<% } else { %> +app.listen(config.port); +<% } %> diff --git a/app/express-example/templates/mvc/app/controllers/home.js b/app/express-example/templates/mvc/app/controllers/home.js new file mode 100644 index 0000000..277fea4 --- /dev/null +++ b/app/express-example/templates/mvc/app/controllers/home.js @@ -0,0 +1,23 @@ +var express = require('express'), + router = express.Router(),<% if(options.database == 'mongodb'){ %> + mongoose = require('mongoose'), + Article = mongoose.model('Article');<% } %><% if(options.database == 'mysql' || options.database == 'postgresql'){ %> + db = require('../models');<% } %><% if(options.database == 'none'){ %> + Article = require('../models/article');<% } %> + +module.exports = function (app) { + app.use('/', router); +}; + +router.get('/', function (req, res, next) { +<% if(options.database == 'mongodb'){ %> + Article.find(function (err, articles) { + if (err) return next(err);<% } %><% if(options.database == 'mysql' || options.database == 'postgresql'){ %> + db.Article.findAll().success(function (articles) {<% } %><% if(options.database == 'none'){ %> + var articles = [new Article(), new Article()];<% } %> + res.render('index', { + title: 'Generator-Express MVC', + articles: articles + });<% if(options.database !== 'none'){ %> + });<% } %> +}); diff --git a/app/express-example/templates/mvc/app/models/article.js b/app/express-example/templates/mvc/app/models/article.js new file mode 100644 index 0000000..866a3df --- /dev/null +++ b/app/express-example/templates/mvc/app/models/article.js @@ -0,0 +1,38 @@ +// Example model +<% if(options.database == 'mongodb'){ %> +var mongoose = require('mongoose'), + Schema = mongoose.Schema; + +var ArticleSchema = new Schema({ + title: String, + url: String, + text: String +}); + +ArticleSchema.virtual('date') + .get(function(){ + return this._id.getTimestamp(); + }); + +mongoose.model('Article', ArticleSchema);<% } %> +<% if(options.database == 'mysql' || options.database == 'postgresql'){ %> +module.exports = function (sequelize, DataTypes) { + + var Article = sequelize.define('Article', { + title: DataTypes.STRING, + url: DataTypes.STRING, + text: DataTypes.STRING + }); + + return Article; +}; +<% } %><% if(options.database == 'none'){ %> +function Article (opts) { + if(!opts) opts = {}; + this.title = opts.title || ''; + this.url = opts.url || ''; + this.text = opts.text || ''; +} + +module.exports = Article; +<% } %> diff --git a/app/express-example/templates/mvc/config/config.js b/app/express-example/templates/mvc/config/config.js new file mode 100644 index 0000000..92cd1b2 --- /dev/null +++ b/app/express-example/templates/mvc/config/config.js @@ -0,0 +1,49 @@ +var path = require('path'), + rootPath = path.normalize(__dirname + '/..'), + env = process.env.NODE_ENV || 'development'; + +var config = { + development: { + root: rootPath, + app: { + name: '<%= _.slugify(appname) %>' + }, + port: 3000,<% if(options.database == 'mongodb'){ %> + db: 'mongodb://localhost/<%= _.slugify(appname) %>-development' + <% } %><% if(options.database == 'mysql'){ %> + db: 'mysql://localhost/<%= _.slugify(appname) %>-development' + <% } %><% if(options.database == 'postgresql'){ %> + db: 'postgres://localhost/<%= _.slugify(appname) %>-development' + <% } %> + }, + + test: { + root: rootPath, + app: { + name: '<%= _.slugify(appname) %>' + }, + port: 3000,<% if(options.database == 'mongodb'){ %> + db: 'mongodb://localhost/<%= _.slugify(appname) %>-test' + <% } %><% if(options.database == 'mysql'){ %> + db: 'mysql://localhost/<%= _.slugify(appname) %>-test' + <% } %><% if(options.database == 'postgresql'){ %> + db: 'postgres://localhost/<%= _.slugify(appname) %>-test' + <% } %> + }, + + production: { + root: rootPath, + app: { + name: '<%= _.slugify(appname) %>' + }, + port: 3000,<% if(options.database == 'mongodb'){ %> + db: 'mongodb://localhost/<%= _.slugify(appname) %>-production' + <% } %><% if(options.database == 'mysql'){ %> + db: 'mysql://localhost/<%= _.slugify(appname) %>-production' + <% } %><% if(options.database == 'postgresql'){ %> + db: 'postgres://localhost/<%= _.slugify(appname) %>-production' + <% } %> + } +}; + +module.exports = config[env]; diff --git a/app/express-example/templates/mvc/config/express.js b/app/express-example/templates/mvc/config/express.js new file mode 100644 index 0000000..a74ec73 --- /dev/null +++ b/app/express-example/templates/mvc/config/express.js @@ -0,0 +1,57 @@ +var express = require('express'); +var glob = require('glob'); + +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); +var compress = require('compression'); +var methodOverride = require('method-override'); + +module.exports = function(app, config) { + app.set('views', config.root + '/app/views'); + app.set('view engine', '<%= options.viewEngine %>'); + + // app.use(favicon(config.root + '/public/img/favicon.ico')); + app.use(logger('dev')); + app.use(bodyParser.json()); + app.use(bodyParser.urlencoded({ + extended: true + })); + app.use(cookieParser()); + app.use(compress()); + app.use(express.static(config.root + '/public')); + app.use(methodOverride()); + + var controllers = glob.sync(config.root + '/app/controllers/*.js'); + controllers.forEach(function (controller) { + require(controller)(app); + }); + + app.use(function (req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); + }); + + if(app.get('env') === 'development'){ + app.use(function (err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err, + title: 'error' + }); + }); + } + + app.use(function (err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {}, + title: 'error' + }); + }); + +}; diff --git a/app/express-example/templates/mvc/package.json b/app/express-example/templates/mvc/package.json new file mode 100644 index 0000000..62eda82 --- /dev/null +++ b/app/express-example/templates/mvc/package.json @@ -0,0 +1,46 @@ +{ + "name": "<%= _.slugify(appname) %>", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node app.js" + }, + "dependencies": { + "express": "~4.2.0", + "glob": "^4.0.5", + "serve-favicon": "~2.0.1", + "morgan": "~1.1.1", + "cookie-parser": "~1.3.2", + "body-parser": "~1.4.3", + "compression": "~1.0.8", + "method-override": "~2.1.1", + "glob": "~4.0.5"<% if(options.database == 'mongodb'){ %>, + "mongoose": "~3.8.12"<% } %><% if(options.database == 'mysql'){ %>, + "sequelize": "~1.7.9", + "lodash": "~2.4.1", + "mysql": "~2.4.0"<% } %><% if(options.database == 'postgresql'){ %>, + "sequelize": "~1.7.9", + "lodash": "~2.4.1", + "pg": "~3.4.0"<% } %><% if(options.viewEngine == 'jade'){ %>, + "jade": "~1.3.0"<% } %><% if(options.viewEngine == 'ejs'){ %>, + "ejs": "~1.0.0"<% } %> + }, + "devDependencies": {<% if(options.buildTool == 'grunt'){ %> + "grunt": "~0.4.5", + "grunt-develop": "~0.4.0"<% if(options.cssPreprocessor == 'sass'){ %>, + "grunt-contrib-sass": "^0.8.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + "grunt-sass": "^0.16.1"<% } %><% if(options.cssPreprocessor == 'less'){ %>, + "grunt-contrib-less": "^0.12.0"<% } %>, + "grunt-contrib-watch": "~0.6.1", + "grunt-contrib-compass": "~0.9.0", + "request": "~2.36.0", + "time-grunt": "~0.3.2", + "load-grunt-tasks": "~0.6.0"<% } %><% if(options.buildTool == 'gulp'){ %> + "gulp": "~3.8.8"<% if(options.cssPreprocessor == 'sass'){ %>, + "gulp-ruby-sass": "^0.7.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>, + "gulp-sass": "^1.2.2"<% } %><% if(options.cssPreprocessor == 'less'){ %>, + "gulp-less": "^1.3.6"<% } %>, + "gulp-nodemon": "~1.0.4", + "gulp-livereload": "~2.1.1"<% } %> + } +} diff --git a/app/express-example/templates/views/ejs/error.ejs b/app/express-example/templates/views/ejs/error.ejs new file mode 100644 index 0000000..c2d4fa3 --- /dev/null +++ b/app/express-example/templates/views/ejs/error.ejs @@ -0,0 +1,7 @@ +<% include header %> + + <%- message %> + <%- error.status %> + <%- error.stack %> + +<% include footer %> \ No newline at end of file diff --git a/app/express-example/templates/views/ejs/footer.ejs b/app/express-example/templates/views/ejs/footer.ejs new file mode 100644 index 0000000..691287b --- /dev/null +++ b/app/express-example/templates/views/ejs/footer.ejs @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app/express-example/templates/views/ejs/header.ejs b/app/express-example/templates/views/ejs/header.ejs new file mode 100644 index 0000000..0424eb7 --- /dev/null +++ b/app/express-example/templates/views/ejs/header.ejs @@ -0,0 +1,10 @@ + + + + + + <%-title %> + + + + diff --git a/app/express-example/templates/views/ejs/index.ejs b/app/express-example/templates/views/ejs/index.ejs new file mode 100644 index 0000000..306db20 --- /dev/null +++ b/app/express-example/templates/views/ejs/index.ejs @@ -0,0 +1,6 @@ +<% include header %> + +

<%-title %>

+

Welcome to <%-title %>

+ +<% include footer %> \ No newline at end of file diff --git a/app/express-example/templates/views/jade/error.jade b/app/express-example/templates/views/jade/error.jade new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/app/express-example/templates/views/jade/error.jade @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/app/express-example/templates/views/jade/index.jade b/app/express-example/templates/views/jade/index.jade new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/app/express-example/templates/views/jade/index.jade @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/app/express-example/templates/views/jade/layout.jade b/app/express-example/templates/views/jade/layout.jade new file mode 100644 index 0000000..31e2f68 --- /dev/null +++ b/app/express-example/templates/views/jade/layout.jade @@ -0,0 +1,12 @@ +doctype html +html(lang='en') + head + meta(charset='UTF-8') + meta(name='viewport', content='width=device-width') + title= title + block css + link(rel='stylesheet', href='/css/style.css') + block js + script(src='http://localhost:35729/livereload.js') + body + block content diff --git a/app/index.js b/app/index.js index 300cc12..7f24639 100644 --- a/app/index.js +++ b/app/index.js @@ -75,12 +75,25 @@ var UnsemanticExpressGenerator = yeoman.generators.Base.extend({ installingExpress: function() { if (this.jQuery){ // var done = this.async(); - this.npmInstall(['express'], { 'saveDev': true }); + this.npmInstall(['express'], { 'save': true }); // this.npmInstall(['express'], { 'saveDev': true }, done); } }, - installingUnsemantic: function() { - if (! this.jQuery){ + installingTaskEngine: function(){ + this.npmInstall(['grunt'], { 'save': true }); + }, + installingDevelopmentTools: function(){ + this.npmInstall(['grunt-contrib-watch'], { 'saveDev': true }); + this.npmInstall(['grunt-contrib-concat'], { 'saveDev': true }); + this.npmInstall(['grunt-contrib-uglify'], { 'saveDev': true }); + this.npmInstall(['grunt-traceur'], { 'saveDev': true }); + }, + installingProductionTools: function() { + this.npmInstall(['grunt-google-cdn'], { 'save': true }); + this.npmInstall(['google-cdn-data'], { 'save': true }); + }, + installingCss: function() { + if (this.unsemantic){ this.bowerInstall(['unsemantic'], { 'saveDev': true }); } }, diff --git a/app/templates/.Gruntfile.js.swp b/app/templates/.Gruntfile.js.swp new file mode 100644 index 0000000..8b0a69d Binary files /dev/null and b/app/templates/.Gruntfile.js.swp differ diff --git a/app/templates/.bowerrc b/app/templates/.bowerrc new file mode 100644 index 0000000..1e6420b --- /dev/null +++ b/app/templates/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "lib/vendor" +} diff --git a/app/templates/Gruntfile.js b/app/templates/Gruntfile.js new file mode 100644 index 0000000..cb5ac91 --- /dev/null +++ b/app/templates/Gruntfile.js @@ -0,0 +1,55 @@ +module.exports = function(grunt) { + + // 1. All configuration goes here + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + + concat: { + dist : { +// expand : true, + src: [ + 'js/vendor/**/*.js', + 'js/main.js', + ], + dest: 'js/build/all.js', + } + }, + watch: { + scripts: { + files: ['js/*.js'], + tasks: ['concat'], + options: { + interrupt: true, + livereload: true, + /* FIXME + // livereloadjs script...might not need custom js, might be served internally + // + if https: + livereload: { + port: 9000, + key: grunt.file.read('path/to/ssl.key'), + cert: grunt.file.read('path/to/ssl.crt') + // you can pass in any other options you'd like to the https server, as listed here: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener + }*/ + }, + }, + }, + cdnify: { + options: { + cdn: require('google-cdn-data') + }, + dist: { + html: ['app/*.html'] + } + } + }); + + // 3. Where we tell Grunt we plan to use this plug-in. + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-google-cdn'); + grunt.loadNpmTasks('grunt-traceur'); + // 4. Where we tell Grunt what to do when we type "grunt" into the terminal. + grunt.registerTask('default', ['concat','watch']); + +}; diff --git a/app/templates/Gruntfile.js2 b/app/templates/Gruntfile.js2 new file mode 100644 index 0000000..5c156f2 --- /dev/null +++ b/app/templates/Gruntfile.js2 @@ -0,0 +1,80 @@ +'use strict'; + +var request = require('request'); + +module.exports = function (grunt) { + // show elapsed time at the end + require('time-grunt')(grunt); + // load all grunt tasks + require('load-grunt-tasks')(grunt); + + var reloadPort = 35729; + var files; + + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + develop: { + server: { + file: 'bin/www' + } + }, + watch: { + options: { + nospawn: true, + livereload: reloadPort + }, + server: { + files: [ + 'bin/www', + 'app.js', + 'routes/*.js' + ], + tasks: ['develop', 'delayed-livereload'] + }, + js: { + files: ['public/js/*.js'], + options: { + livereload: reloadPort + } + }, + css: { + files: [ + 'public/css/*.css' + ], + options: { + livereload: reloadPort + } + }, + views: { + files: ['views/*.ejs'], + options: { + livereload: reloadPort + } + } + } + }); + + grunt.config.requires('watch.server.files'); + files = grunt.config('watch.server.files'); + files = grunt.file.expand(files); + + grunt.registerTask('delayed-livereload', 'Live reload after the node server has restarted.', function () { + var done = this.async(); + setTimeout(function () { + request.get('http://localhost:' + reloadPort + '/changed?files=' + files.join(','), function (err, res) { + var reloaded = !err && res.statusCode === 200; + if (reloaded) { + grunt.log.ok('Delayed live reload successful.'); + } else { + grunt.log.error('Unable to make a delayed live reload.'); + } + done(reloaded); + }); + }, 500); + }); + + grunt.registerTask('default', [ + 'develop', + 'watch' + ]); +}; diff --git a/ascii_scrap/ascii_stuff b/ascii_scrap/ascii_stuff deleted file mode 100755 index 9e44e57..0000000 --- a/ascii_scrap/ascii_stuff +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env node -_s = require('underscore.string'); -var line = "\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\n \x0311,1Y\x03\x037,1O\x03\x037,1 \x03\x0313,1Y\x03\x0313,1O\x03\x0313,1 \x03\x036,1Y\x03\x036,1O\x03\x036,1!\x03\x036,1!\x03\x036,1!\x03\x036,1!\x03\n \x030,11 \x03\x030,11 \x03\x030,11 \x03\n \x030,11 \x03\x030,11 \x03\x030,11 \x03 \x030,11 \x03 \x030,11 \x03\n \x030,11 \x03\n \x030,12 \x03 \x030,12 \x03\n \x030,10 \x03\n \x030,10 \x03\x030,10 \x03 \x030,12 \x03\n \x030,12 \x03\x030,12 \x03\x030,12 \x03\n \x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\n \x030,4 \x03\x030,4 \x03\x030,4 \x03\x030,4 \x03\x030,4 \x03\x030,4 \x03\x030,4 \x03\n \x030,4 \x03\x030,4 \x03\x030,4 \x03 \x030,4 \x03\x030,4 \x03\x030,4 \x03\n \x030,4 \x03\x030,4 \x03\x030,4 \x03\n"; -var parts = line.split("\x03"); -var mirc = -{ -'0':'white', -'1':'black', -'2':'blue', -'3':'green', -'4':'red', -'5':'brown', -'6':'purple', -'7':'orange', -'8':'yellow', -'9':'light green', -'10':'teal', -'11':'light cyan', -'12':'light blue', -'13':'pink', -'14':'gray', -'15':'light gray', -} -var term_background = -{ -'white':'107', -'black':'40', -'blue':'44', -'green':'42', -'red':'41', - -'purple':'45', -'yellow':'43', -'teal':'46', -'light gray':'47', -'dark gray':'100', -'orange':'101', -'light green':'102', -'light yellow':'103', -'light blue':'104', -'pink':'105', -'light cyan':'106', -} -var term_foreground = -{ -'black':'30', -'red':'31', -'green':'32', -'yellow':'33', -'blue':'34', -'purple':'35', -'teal':'36', -'light gray':'37', -'dark gray':'90', -'orange':'91', -'light green':'92', -'light yellow':'93', -'light blue':'94', -'pink':'95', -'light cyan':'96', -'white':'97', -} - -for(var i = 0; i < parts.length; i++){ - var match = parts[i].match(/(\d+),(\d+)(.*)/); - if (match){ - match_list = parts[i].split(/(\d+),(\d+)(.*)/); - var fg = mirc[match_list[1]]; - var bg = mirc[match_list[2]]; - var content = match_list[3]; - var background_color = term_background[bg]; - var foreground_color = term_foreground[fg]; -// var result = _s.sprintf("foreground: %s, background: %s, content: %s\n", fg, bg, content); - var result = _s.sprintf("\\033[1;%s;%sm%s\\033[0m", foreground_color, background_color, content); - parts[i] = result; -// console.log(result) -// console.log(background_color); - - if (typeof(background_color) === 'undefined'){ - console.log(bg); process.exit(1); - } - }else{ - var result = _s.sprintf("content: %s", parts[i]); - console.log(result); - } -}; - -console.log(parts.join()); diff --git a/ascii_scrap/ascii_stuff.js b/ascii_scrap/ascii_stuff.js new file mode 100755 index 0000000..aac452a --- /dev/null +++ b/ascii_scrap/ascii_stuff.js @@ -0,0 +1,83 @@ +#!/usr/bin/env node +_s = require('underscore.string'); +var line = "\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\x030,11 \x03\n \x0311,1Y\x03\x037,1O\x03\x037,1 \x03\x0313,1Y\x03\x0313,1O\x03\x0313,1 \x03\x036,1Y\x03\x036,1O\x03\x036,1!\x03\x036,1!\x03\x036,1!\x03\x036,1!\x03\n \x030,11 \x03\x030,11 \x03\x030,11 \x03\n \x030,11 \x03\x030,11 \x03\x030,11 \x03 \x030,11 \x03 \x030,11 \x03\n \x030,11 \x03\n \x030,12 \x03 \x030,12 \x03\n \x030,10 \x03\n \x030,10 \x03\x030,10 \x03 \x030,12 \x03\n \x030,12 \x03\x030,12 \x03\x030,12 \x03\n \x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\x030,12 \x03\n \x030,4 \x03\x030,4 \x03\x030,4 \x03\x030,4 \x03\x030,4 \x03\x030,4 \x03\x030,4 \x03\n \x030,4 \x03\x030,4 \x03\x030,4 \x03 \x030,4 \x03\x030,4 \x03\x030,4 \x03\n \x030,4 \x03\x030,4 \x03\x030,4 \x03\n"; +var parts = line.split("\x03"); +var mirc = +{ +'0':'white', +'1':'black', +'2':'blue', +'3':'green', +'4':'red', +'5':'brown', +'6':'purple', +'7':'orange', +'8':'yellow', +'9':'light green', +'10':'teal', +'11':'light cyan', +'12':'light blue', +'13':'pink', +'14':'gray', +'15':'light gray', +} +var term_background = +{ +'white':'107', +'black':'40', +'blue':'44', +'green':'42', +'red':'41', +'brown':'103',//light yellow +'purple':'45', +'orange':'101', +'yellow':'43', +'light green':'102', +'teal':'46', +'light cyan':'106', +'light blue':'104', +'pink':'105', +'gray':'100', +'light gray':'47', +} +var term_foreground = +{ +'white':'97', +'black':'30', +'blue':'34', +'green':'32', +'red':'31', +'brown':'93',//light yellow +'purple':'35', +'orange':'91', +'yellow':'33', +'light green':'92', +'teal':'36', +'light cyan':'96', +'light blue':'94', +'pink':'95', +'gray':'90', +'light gray':'37', +} + +for(var i = 0; i < parts.length; i++){ + var match = parts[i].match(/(\d+),(\d+)(.*)/); + if (match){ + match_list = parts[i].split(/(\d+),(\d+)(.*)/); + var fg = mirc[match_list[1]]; + var bg = mirc[match_list[2]]; + var content = match_list[3]; + var bg_code = term_background[bg]; + var fg_code = term_foreground[fg]; + var result = _s.sprintf("\033[1;%s;%sm%s\033[0m", fg_code, bg_code, content); + parts[i] = result; + if (typeof(bg_code) === 'undefined' || typeof(fg_code) === 'undefined'){ + console.log(bg); process.exit(1); + } + }else{ + + } +}; + +var result = parts.join(""); +process.stdout.write(result); diff --git a/ascii_scrap/mirc_translate.js b/ascii_scrap/mirc_translate.js deleted file mode 100644 index 0080963..0000000 --- a/ascii_scrap/mirc_translate.js +++ /dev/null @@ -1,58 +0,0 @@ -var mirc = -{ -'white':'0', -'black':'1', -'blue':'2', -'green':'3', -'red':'4', -'brown':'5', -'purple':'6', -'orange':'7', -'yellow':'8', -'light green':'9', -'teal':'10', -'light cyan':'11', -'light blue':'12', -'pink':'13', -'gray':'14', -'light gray':'15', -} -var term_background = -{ -'white':'107', -'black':'40', -'blue':'44', -'green':'42', -'red':'41', - -'purple':'45', -'yellow':'43', -'cyan':'46', -'light gray':'47', -'dark gray':'100', -'light red':'101', -'light green':'102', -'light yellow':'103', -'light blue':'104', -'pink':'105', -'light cyan':'106', -} -var term_foreground = -{ -'black':'30', -'red':'31', -'green':'32', -'yellow':'33', -'blue':'34', -'pink':'35', -'cyan':'36', -'light gray':'37', -'dark gray':'90', -'light red':'91', -'light green':'92', -'light yellow':'93', -'light blue':'94', -'light magenta':'95', -'light cyan':'96', -'white':'97', -} -- cgit v1.2.3-70-g09d2