From 043d50f53f94b8cd6fad2a08f3e0c0c9fc7d4e8d Mon Sep 17 00:00:00 2001 From: Joshua Estrin Skrzypek Date: Wed, 11 Mar 2015 14:32:42 +0200 Subject: [PATCH] fix(app): Add option for angular-material Fixes #77 --- app/index.js | 9 ++++++++ module/index.js | 1 + target/index.js | 3 ++- templates/app/_bower.json | 5 +++-- templates/app/_package.json | 14 ++++++++++-- templates/module/index.js | 1 + templates/target/scripts/main.js | 3 ++- test/app.test.js | 1 + test/module.test.js | 37 +++++++++++++++++++++++++++++++- test/testHelper.js | 1 + utils.js | 3 +++ 11 files changed, 71 insertions(+), 7 deletions(-) diff --git a/app/index.js b/app/index.js index 9af84c7..a31bad9 100644 --- a/app/index.js +++ b/app/index.js @@ -82,6 +82,11 @@ var AppGenerator = Class.extend({ type: 'confirm', message: 'Would you like to include ngCordova?', default: true + }, { + name: 'material', + type: 'confirm', + message: 'Would you like to include angular-material?', + default: true }, { name: 'fontawesome', type: 'confirm', @@ -101,6 +106,7 @@ var AppGenerator = Class.extend({ this.famous = answers.famous; this.ngCordova = answers.ngCordova; this.fontawesome = answers.fontawesome; + this.material = answers.material; this.bootstrap = answers.bootstrap; this.mobile = this.options.mobile; @@ -111,6 +117,7 @@ var AppGenerator = Class.extend({ famous: answers.famous, fontawesome: answers.fontawesome, bootstrap: answers.bootstrap, + material: answers.material, lint: true, serve: true, browserify: true, @@ -119,6 +126,7 @@ var AppGenerator = Class.extend({ test: true, style: true, dist: true + // pass answers.material } }); done(); @@ -170,6 +178,7 @@ var AppGenerator = Class.extend({ this.config.set('ngCordova', this.ngCordova); this.config.set('fontawesome', this.fontawesome); this.config.set('bootstrap', this.bootstrap); + this.config.set('material', this.material); this.config.forceSave(); }, diff --git a/module/index.js b/module/index.js index 212c557..8eec773 100644 --- a/module/index.js +++ b/module/index.js @@ -25,6 +25,7 @@ var ModuleGenerator = Class.extend({ this.ionic = this.config.get('ionic'); this.famous = this.config.get('famous'); this.ngCordova = this.config.get('ngCordova'); + this.material = this.config.get('material'); this.ngModules = utils.getNgModules(this); }, diff --git a/target/index.js b/target/index.js index 9df17fa..053bbe0 100644 --- a/target/index.js +++ b/target/index.js @@ -25,7 +25,8 @@ var TargetGenerator = Class.extend({ this.ionic = this.config.get('ionic'); this.famous = this.config.get('famous'); this.fontawesome = this.config.get('fontawesome'); - this.bootstrap = this.config.get('boostrap'); + this.bootstrap = this.config.get('bootstrap'); + this.material = this.config.get('material'); }, initializing: function() { diff --git a/templates/app/_bower.json b/templates/app/_bower.json index 03f74a0..4e1ff23 100644 --- a/templates/app/_bower.json +++ b/templates/app/_bower.json @@ -19,8 +19,9 @@ "famous-angular": "0.5.0"<% } %><% if (ngCordova) { %>, "ngCordova": "0.1.9-alpha"<% } %><% if (fontawesome) { %>, "font-awesome": "4.2.0"<% } %><% if (bootstrap) { %>, - "angular-bootstrap": "0.12.0", - "bootstrap": "3.3.1"<% } %> + "angular-bootstrap": "0.12.0", + "bootstrap": "3.3.1"<% } %><% if (material) { %>, + "angular-material": "0.8.3"<% } %> }, "resolutions": { "angular": "1.3.6" diff --git a/templates/app/_package.json b/templates/app/_package.json index 59b61a5..f7e2c26 100644 --- a/templates/app/_package.json +++ b/templates/app/_package.json @@ -26,7 +26,9 @@ "famous-angular": "./bower_components/famous-angular/dist/famous-angular.js"<% } %><% if(ngCordova) { %>, "ngCordova": "./bower_components/ngCordova/dist/ng-cordova.js", "ngCordovaMocks": "./bower_components/ngCordova/dist/ng-cordova-mocks.js"<% } %><% if(bootstrap) { %>, - "angular-bootstrap": "./bower_components/angular-bootstrap/ui-bootstrap-tpls.js"<% } %> + "angular-bootstrap": "./bower_components/angular-bootstrap/ui-bootstrap-tpls.js"<% } %><% if(material) { %>, + "angular-material": "./bower_components/angular-material/angular-material.js", + "angular-aria": "./bower_components/angular-aria/angular-aria.js"<% } %> }, "browserify": { "transform": [ @@ -93,6 +95,14 @@ "angular" ], "exports": "angular.module('ui.bootstrap').name" - }<% } %> + }<% } %><% if(material) { %>, + "angular-material": { + "depends": [ + "angular", + "angular-aria", + "angular-animate" + ] + }<% } %> + } } \ No newline at end of file diff --git a/templates/module/index.js b/templates/module/index.js index 0eea2ce..9cdc9ef 100644 --- a/templates/module/index.js +++ b/templates/module/index.js @@ -1,6 +1,7 @@ 'use strict'; require('angular-ui-router'); <% if (ionic) { %>require('angular-ionic');<% } %> +<% if (material) { %>require('angular-material');<% } %> <% if (famous) { %>require('famous-angular');<% } %> <% if (ngCordova) { %>require('ngCordova');<% } %> diff --git a/templates/target/scripts/main.js b/templates/target/scripts/main.js index 21fbcd4..8b7a0a2 100644 --- a/templates/target/scripts/main.js +++ b/templates/target/scripts/main.js @@ -4,7 +4,8 @@ var namespace = 'main'; var angular = require('angular'); <% if (ionic) { %>require('angular-ionic');<% } %> -var app = angular.module(namespace, [<% if (ionic) { %>'ionic',<% } %> +<% if (material) { %>require('angular-material');<% } %> +var app = angular.module(namespace, [<% if (ionic) { %>'ionic',<% } %><% if (material) { %>'ngMaterial',<% } %> // inject:modules start // inject:modules end ]); diff --git a/test/app.test.js b/test/app.test.js index acb930f..e0a4559 100644 --- a/test/app.test.js +++ b/test/app.test.js @@ -96,6 +96,7 @@ describe('angular-famous-ionic:app', function() { assert(config['generator-angular-famous-ionic'].ionic !== undefined, 'ionic does not exist in .yo-rc.json'); assert(config['generator-angular-famous-ionic'].famous !== undefined, 'famous does not exist in .yo-rc.json'); assert(config['generator-angular-famous-ionic'].ngCordova !== undefined, 'ngCordova does not exist in .yo-rc.json'); + assert(config['generator-angular-famous-ionic'].material !== undefined, 'angular-material does not exist in .yo-rc.json'); assert(config['generator-angular-famous-ionic'].clientFolder !== undefined, 'clientFolder does not exist in .yo-rc.json'); done(); diff --git a/test/module.test.js b/test/module.test.js index 48e342a..b006685 100644 --- a/test/module.test.js +++ b/test/module.test.js @@ -243,6 +243,37 @@ describe('angular-famous-ionic:module', function() { }); + it('should include angular-material with material', function(done) { + testHelper.runGenerator('module') + .withOptions({ + 'skip-install': true, + 'check-travis': false, + 'check-git': true + }) + .withPrompt({ + modulename: modulename + }) + .on('ready', function(generator) { + generator.clientFolder = clientFolder; + generator.log = sinon.spy(); + + generator.afterInitializing = function() { + generator.material = true; + generator.ngModules = utils.getNgModules(generator); + }; + generator.mkdir(clientFolder + '/scripts/toto'); + generator.mkdir(clientFolder + '/scripts/tata'); + }) + .on('end', function() { + var file = clientFolder + '/scripts/' + modulename + '/index.js'; + var body = testHelper.readTextFile(file); + assert(_.contains(body, 'require(\'angular-material\');')); + assert(_.contains(body, '\'ngMaterial\'')); + done(); + }); + + }); + it('should include ngCordova', function(done) { testHelper.runGenerator('module') .withOptions({ @@ -274,7 +305,7 @@ describe('angular-famous-ionic:module', function() { }); - it('should include famous-angular and angular-ionic with famous, ionic and ngCordova', function(done) { + it('should include famous-angular and angular-ionic with famous, ionic, ngCordova, and material', function(done) { testHelper.runGenerator('module') .withOptions({ 'skip-install': true, @@ -292,6 +323,7 @@ describe('angular-famous-ionic:module', function() { generator.famous = true; generator.ionic = true; generator.ngCordova = true; + generator.material = true; generator.ngModules = utils.getNgModules(generator); }; @@ -305,6 +337,7 @@ describe('angular-famous-ionic:module', function() { assert(_.contains(body, 'require(\'famous-angular\');')); assert(_.contains(body, 'require(\'angular-ionic\');')); assert(_.contains(body, 'require(\'ngCordova\');')); + assert(_.contains(body, 'require(\'angular-material\');')); assert(_.contains(body, '\'ionic\'')); assert(_.contains(body, '\'famous.angular\'')); done(); @@ -331,6 +364,7 @@ describe('angular-famous-ionic:module', function() { generator.famous = true; generator.ionic = true; generator.ngCordova = true; + generator.material = true; generator.ngModules = utils.getNgModules(generator); }; @@ -370,6 +404,7 @@ describe('angular-famous-ionic:module', function() { generator.famous = true; generator.ionic = true; generator.ngCordova = true; + generator.material = true; generator.ngModules = utils.getNgModules(generator); }; diff --git a/test/testHelper.js b/test/testHelper.js index 9064bf4..052bca1 100644 --- a/test/testHelper.js +++ b/test/testHelper.js @@ -159,6 +159,7 @@ var testHelper = { generator.ionic = true; generator.famous = true; generator.ngCordova = true; + generator.material = true; generator.ngModules = []; generator.skipRoute = false; } diff --git a/utils.js b/utils.js index 8273f7b..b33ff15 100644 --- a/utils.js +++ b/utils.js @@ -154,5 +154,8 @@ exports.getNgModules = function(generator) { if(generator.ngCordova) { retVal.push('\'ngCordova\''); } + if(generator.material) { + retVal.push('\'ngMaterial\''); + } return retVal.join(', '); }; \ No newline at end of file