From c79ccfc5ca94a5b73faa0c1625b68c72c954747e Mon Sep 17 00:00:00 2001 From: jbavari Date: Fri, 30 Oct 2015 23:21:54 -0600 Subject: [PATCH] Feature(generators): Add generators for components, directives, and injectables --- .../generators/component/component.tmpl.html | 3 +++ .../generators/component/component.tmpl.js | 15 +++++++++++ tooling/generators/component/index.js | 26 ++++++++++++++++++ .../generators/directive/directive.tmpl.js | 11 ++++++++ tooling/generators/directive/index.js | 26 ++++++++++++++++++ tooling/generators/injectable/index.js | 27 +++++++++++++++++++ .../generators/injectable/injectable.tmpl.js | 21 +++++++++++++++ 7 files changed, 129 insertions(+) create mode 100644 tooling/generators/component/component.tmpl.html create mode 100644 tooling/generators/component/component.tmpl.js create mode 100644 tooling/generators/component/index.js create mode 100644 tooling/generators/directive/directive.tmpl.js create mode 100644 tooling/generators/directive/index.js create mode 100644 tooling/generators/injectable/index.js create mode 100644 tooling/generators/injectable/injectable.tmpl.js diff --git a/tooling/generators/component/component.tmpl.html b/tooling/generators/component/component.tmpl.html new file mode 100644 index 0000000000..db07f53219 --- /dev/null +++ b/tooling/generators/component/component.tmpl.html @@ -0,0 +1,3 @@ +
+ <%= javascriptClassName %> +
diff --git a/tooling/generators/component/component.tmpl.js b/tooling/generators/component/component.tmpl.js new file mode 100644 index 0000000000..753ba7263c --- /dev/null +++ b/tooling/generators/component/component.tmpl.js @@ -0,0 +1,15 @@ +import {Component, NgIf} from 'angular2/angular2'; + +@Component({ + directives: [NgIf], + properties: ['value'], //Change to be whatever properties you want, ex: <<%= fileAndClassName %> value="5"> + selector: '<%= fileAndClassName %>', + templateUrl: 'app/<%= fileAndClassName %>/<%= fileAndClassName %>.html' +}) +export class <%= javascriptClassName %> { + constructor() { + this.nav = nav; + this.popup = popup; + this.dataService = dataService; + } +} diff --git a/tooling/generators/component/index.js b/tooling/generators/component/index.js new file mode 100644 index 0000000000..8d361acd1d --- /dev/null +++ b/tooling/generators/component/index.js @@ -0,0 +1,26 @@ +var fs = require('fs'), + Generator = module.exports, + Generate = require('../../generate'), + path = require('path'), + Q = require('q'); +/* + @options + name: Page name + appDirectory: App directory of where to save file +*/ +Generator.run = function run(options) { + options.rootDirectory = options.rootDirectory || path.join('www', 'app'); + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileAndClassName); + + var templates = Generate.loadGeneratorTemplates(__dirname); + + templates.forEach(function(template) { + var templatePath = path.join(__dirname, template.file); + options.templatePath = templatePath; + var renderedTemplate = Generate.renderTemplateFromFile(options); + var saveFilePath = path.join(savePath, [options.fileAndClassName, template.type].join('')); + // console.log('renderedTemplate', renderedTemplate, 'saving to', saveFilePath); + console.log('√ Create'.blue, path.relative(options.appDirectory, saveFilePath)); + fs.writeFileSync(saveFilePath, renderedTemplate); + }); +}; diff --git a/tooling/generators/directive/directive.tmpl.js b/tooling/generators/directive/directive.tmpl.js new file mode 100644 index 0000000000..4441ef0f21 --- /dev/null +++ b/tooling/generators/directive/directive.tmpl.js @@ -0,0 +1,11 @@ +import {Directive, ElementRef} from 'angular2/angular2'; + +@Directive({ + properties: ['<%= fileAndClassName %>'], //Change to be whatever properties you want, ex: <<%= fileAndClassName %> value="5"> + inputs: ['<%= fileAndClassName %>'] +}) +export class <%= javascriptClassName %> { + constructor(elementRef: ElementRef) { + this.ele = elementRef; + } +} diff --git a/tooling/generators/directive/index.js b/tooling/generators/directive/index.js new file mode 100644 index 0000000000..8d361acd1d --- /dev/null +++ b/tooling/generators/directive/index.js @@ -0,0 +1,26 @@ +var fs = require('fs'), + Generator = module.exports, + Generate = require('../../generate'), + path = require('path'), + Q = require('q'); +/* + @options + name: Page name + appDirectory: App directory of where to save file +*/ +Generator.run = function run(options) { + options.rootDirectory = options.rootDirectory || path.join('www', 'app'); + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileAndClassName); + + var templates = Generate.loadGeneratorTemplates(__dirname); + + templates.forEach(function(template) { + var templatePath = path.join(__dirname, template.file); + options.templatePath = templatePath; + var renderedTemplate = Generate.renderTemplateFromFile(options); + var saveFilePath = path.join(savePath, [options.fileAndClassName, template.type].join('')); + // console.log('renderedTemplate', renderedTemplate, 'saving to', saveFilePath); + console.log('√ Create'.blue, path.relative(options.appDirectory, saveFilePath)); + fs.writeFileSync(saveFilePath, renderedTemplate); + }); +}; diff --git a/tooling/generators/injectable/index.js b/tooling/generators/injectable/index.js new file mode 100644 index 0000000000..70cddd3626 --- /dev/null +++ b/tooling/generators/injectable/index.js @@ -0,0 +1,27 @@ +var fs = require('fs'), + Generator = module.exports, + Generate = require('../../generate'), + path = require('path'), + Q = require('q'); +/* + @options + name: Page name + appDirectory: App directory of where to save file +*/ +Generator.run = function run(options) { + + options.rootDirectory = options.rootDirectory || path.join('www', 'app'); + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileAndClassName); + + var templates = Generate.loadGeneratorTemplates(__dirname); + + templates.forEach(function(template) { + var templatePath = path.join(__dirname, template.file); + options.templatePath = templatePath; + var renderedTemplate = Generate.renderTemplateFromFile(options); + var saveFilePath = path.join(savePath, [options.fileAndClassName, template.type].join('')); + // console.log('renderedTemplate', renderedTemplate, 'saving to', saveFilePath); + console.log('√ Create'.blue, path.relative(options.appDirectory, saveFilePath)); + fs.writeFileSync(saveFilePath, renderedTemplate); + }); +}; diff --git a/tooling/generators/injectable/injectable.tmpl.js b/tooling/generators/injectable/injectable.tmpl.js new file mode 100644 index 0000000000..d1b2865c15 --- /dev/null +++ b/tooling/generators/injectable/injectable.tmpl.js @@ -0,0 +1,21 @@ +import {Injectable} from 'angular2/angular2'; +import {Http} from 'angular2/http'; + +@Injectable() +export class <%= javascriptClassName %> { + constructor(http: Http) { + this.http = http; + this.data = null; + } + + retrieveData() { + //Here, we're going to get a JSON data file, use the `map` call to parse json + // and finally subscribe to the observable and set our data + //to the value it provides once the http request is complete. + this.http.get('path/to/data.json') + .map(res => res.json()) + .subscribe(data => { + this.data = data; + }); + } +}