From 2e1d36681553b52162a7219ac166ff8561914d00 Mon Sep 17 00:00:00 2001 From: Brady Isom Date: Tue, 20 May 2014 22:05:48 -0600 Subject: [PATCH 1/2] Add CoffeeScript support Solve #8 Add CoffeeScript prompt Add CoffeeScript versions of app source files Did not convert gulpfile.js to gulpfile.coffee --- slushfile.js | 7 ++++++ templates/gulpfile.js | 21 +++++++++++++---- templates/package.json | 5 ++-- templates/src/app/app.coffee | 14 +++++++++++ templates/src/app/todo/todo-controller.coffee | 20 ++++++++++++++++ .../src/app/todo/todo-controller_test.coffee | 23 +++++++++++++++++++ templates/src/app/todo/todo.coffee | 1 + 7 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 templates/src/app/app.coffee create mode 100644 templates/src/app/todo/todo-controller.coffee create mode 100644 templates/src/app/todo/todo-controller_test.coffee create mode 100644 templates/src/app/todo/todo.coffee diff --git a/slushfile.js b/slushfile.js index 62aee60..30b12b7 100644 --- a/slushfile.js +++ b/slushfile.js @@ -35,12 +35,19 @@ gulp.task('default', function (done) { {name: 'LESS', value: 'less'}, {name: 'Sass', value: 'sass'} ]}, + {type: 'confirm', name: 'coffee', message: 'Do you want to use CoffeScript in your app?', default: false}, {type: 'confirm', name: 'example', message: 'Do you want to include a Todo List example in your app?', default: true} ], function (answers) { answers.nameDashed = _.slugify(answers.name); answers.modulename = _.camelize(answers.nameDashed); var files = [__dirname + '/templates/**']; + if (answers.coffee) { + files.push('!' + __dirname + '/templates/src/**/*.js') + } + else { + files.push('!' + __dirname + '/templates/src/**/*.coffee') + } if (!answers.example) { files.push('!' + __dirname + '/templates/src/app/todo/**'); } diff --git a/templates/gulpfile.js b/templates/gulpfile.js index 03bf996..1c1f3ff 100644 --- a/templates/gulpfile.js +++ b/templates/gulpfile.js @@ -60,7 +60,18 @@ gulp.task('csslint', ['styles'], function () { .pipe(g.csslint('./.csslintrc')) .pipe(g.csslint.reporter()); }); - +<% if(coffee) { %> +/** + * CoffeeScript + */ +gulp.task('coffee', function () { + return gulp.src([ + './src/app/**/*.coffee' + ]) + .pipe(g.coffee()) + .pipe(gulp.dest('./.tmp/src/app')); +}); +<% } %> /** * Scripts */ @@ -94,7 +105,7 @@ gulp.task('vendors', function () { * Index */ gulp.task('index', index); -gulp.task('build-all', ['styles', 'templates'], index); +gulp.task('build-all', ['styles', 'templates'<%if(coffee){%>, 'coffee'<%}%>], index); function index () { var opt = {read: false}; @@ -131,7 +142,7 @@ gulp.task('dist', ['vendors', 'assets', 'styles-dist', 'scripts-dist'], function */ gulp.task('statics', g.serve({ port: 3000, - root: ['./.tmp', './src/app', './bower_components'] + root: ['./.tmp', './.tmp/src/app', './src/app', './bower_components'] })); /** @@ -202,7 +213,7 @@ function testFiles() { .queue(g.bowerFiles().pipe(g.filter('**/*.js'))) .queue(gulp.src('./bower_components/angular-mocks/angular-mocks.js')) .queue(appFiles()) - .queue(gulp.src('./src/app/**/*_test.js')) + .queue(gulp.src(['./src/app/**/*_test.js', './.tmp/src/app/**/*_test.js'])) .done(); } @@ -219,6 +230,8 @@ function cssFiles (opt) { function appFiles () { var files = [ './.tmp/' + bower.name + '-templates.js', + './.tmp/src/app/**/*.js', + '!./.tmp/src/app/**/*_test.js', './src/app/**/*.js', '!./src/app/**/*_test.js' ]; diff --git a/templates/package.json b/templates/package.json index df43c0d..e375317 100644 --- a/templates/package.json +++ b/templates/package.json @@ -31,8 +31,9 @@ "gulp-serve": "~0.1.1", "gulp-concat": "~2.1.7", "gulp-clean": "~0.2.4", - "<%= styleData.plugin %>": "<%= styleData.pluginVersion %>", - "gulp-minify-css": "~0.3.0", + "<%= styleData.plugin %>": "<%= styleData.pluginVersion %>",<% if(coffee) {%> + "gulp-coffee": "~1.4.3", + <% } %>"gulp-minify-css": "~0.3.0", "gulp-csslint": "~0.1.3", "event-stream": "~3.1.0", "sort-stream": "~1.0.0", diff --git a/templates/src/app/app.coffee b/templates/src/app/app.coffee new file mode 100644 index 0000000..d2d4e9b --- /dev/null +++ b/templates/src/app/app.coffee @@ -0,0 +1,14 @@ +angular.module('<%= modulename %>', [ + 'ngRoute' + <% if (example) { %>'<%= modulename %>.todo' + <% } %>'<%= nameDashed %>-templates' +])<% if (example) { %> +.config ($routeProvider) -> + 'use strict' + $routeProvider + .when '/todo', + controller: 'TodoCtrl' + templateUrl: '/<%= nameDashed %>/todo/todo.html' + .otherwise + redirectTo: '/todo' +<% } %> diff --git a/templates/src/app/todo/todo-controller.coffee b/templates/src/app/todo/todo-controller.coffee new file mode 100644 index 0000000..1282884 --- /dev/null +++ b/templates/src/app/todo/todo-controller.coffee @@ -0,0 +1,20 @@ +angular + .module '<%= modulename %>.todo' + .controller 'TodoCtrl', ($scope, $window) -> + 'use strict' + $scope.todos = JSON.parse($window.localStorage.getItem('todos') or '[]') + $scope.$watch('todos', (newTodos, oldTodos) -> + if (newTodos != oldTodos) + $window.localStorage.setItem 'todos', JSON.stringify(angular.copy($scope.todos)) + , true) + + $scope.add = -> + todo = + label: $scope.label + isDone: false + $scope.todos.push(todo) + $window.localStorage.setItem 'todos', JSON.stringify(angular.copy($scope.todos)) + $scope.label = '' + + $scope.check = -> + @todo.isDone = not @todo.isDone diff --git a/templates/src/app/todo/todo-controller_test.coffee b/templates/src/app/todo/todo-controller_test.coffee new file mode 100644 index 0000000..30ce6f4 --- /dev/null +++ b/templates/src/app/todo/todo-controller_test.coffee @@ -0,0 +1,23 @@ +describe 'TodoCtrl', -> + todoCtrl = null + scope = null + + beforeEach module('<%= modulename %>') + + beforeEach inject ($injector) -> + scope = $injector.get('$rootScope') + + todoCtrl = -> + $injector.get('$controller')('TodoCtrl', $scope:scope) + + it 'should add new todos on add()', -> + todo = + label: 'A new todo' + isDone: false + todoCtrl() + scope.label = todo.label + scope.add() + scope.label.length.should.equal(0) + scope.todos.length.should.equal(1) + scope.todos[scope.todos.length - 1].label.should.equal(todo.label) + scope.todos[scope.todos.length - 1].isDone.should.equal(false) diff --git a/templates/src/app/todo/todo.coffee b/templates/src/app/todo/todo.coffee new file mode 100644 index 0000000..43ba97d --- /dev/null +++ b/templates/src/app/todo/todo.coffee @@ -0,0 +1 @@ +angular.module '<%= modulename %>.todo', [] From 9643f4d9f9f281d6314656562372e594cbeac52c Mon Sep 17 00:00:00 2001 From: Brady Isom Date: Tue, 20 May 2014 22:05:48 -0600 Subject: [PATCH 2/2] Add CoffeeScript support Solve #8 Add CoffeeScript prompt Add CoffeeScript versions of app source files Did not convert gulpfile.js to gulpfile.coffee --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c2658d7..8d2ac4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules/ +.tmp