From 65851c440487ca7116278daaf444e6a2d9109708 Mon Sep 17 00:00:00 2001 From: Eddie Lau 3dd13 Date: Tue, 29 Dec 2015 16:35:16 +0800 Subject: [PATCH 1/2] update component, directive, injectable and page generator to work with latest folder structure --- tooling/generate.js | 47 +++++++------ .../generators/component/component.tmpl.js | 7 +- tooling/generators/component/index.js | 12 ++-- tooling/generators/directive/index.js | 11 ++-- tooling/generators/injectable/index.js | 44 ++++++------- .../generators/injectable/injectable.tmpl.js | 29 +++++--- tooling/generators/page-login/index.js | 11 ++-- tooling/generators/page-signup/index.js | 10 +-- tooling/generators/page/index.js | 66 +++++++++---------- tooling/generators/page/page.tmpl.js | 1 + tooling/generators/pipe/index.js | 10 +-- tooling/generators/tabs/index.js | 4 +- 12 files changed, 132 insertions(+), 120 deletions(-) diff --git a/tooling/generate.js b/tooling/generate.js index 91272423e2..0ac43da82f 100644 --- a/tooling/generate.js +++ b/tooling/generate.js @@ -49,8 +49,6 @@ Generate.generate = function generate(options) { template: options.generator }; - Generate.createScaffoldDirectories({appDirectory: options.appDirectory, fileName: generateOptions.fileName}); - try { //Try to run the generator if it supplies a run method. var generator = Generate.generators[options.generator]; @@ -144,27 +142,27 @@ Generate.renderTemplateFromFile = function renderTemplateFromFile(options) { // Tabs - name = name of the page with the tabs, // tabs = array of the tabs to create. -Generate.tabPages = function tabPages(appDirectory, name, tabs) { - Generate.createScaffoldDirectories(appDirectory, name); - - // Generate page with tabs: - var tabsfileName = Generate.fileName(name); - - var tabsHtml = Generate.generateTabsHtmlTemplate(appDirectory, name, tabs); - var tabsJs = Generate.generateTabsJsTemplate(appDirectory, name, tabs); - // var tabsScss = Generate.generateTabsScssTemplate(appDirectory, name, tabs); - var pagePath = path.join(appDirectory, 'www', 'app', tabsfileName), - jsPath = path.join(pagePath, [tabsfileName, '.js'].join('')), - htmlPath = path.join(pagePath, [tabsfileName, '.html'].join('')); - // scssPath = path.join(pagePath, [tabsfileName, '.scss'].join('')); - - tabs.forEach(function(tab) { - Generate.createScaffoldDirectories(appDirectory, tab); - var tabJs = Generate.generateJsTemplate(appDirectory, tab); - var tabHtml = Generate.generateHtmlTemplate(appDirectory, tab); - - }) -}; +// Generate.tabPages = function tabPages(appDirectory, name, tabs) { +// Generate.createScaffoldDirectories(appDirectory, 'tabs', name); +// +// // Generate page with tabs: +// var tabsfileName = Generate.fileName(name); +// +// var tabsHtml = Generate.generateTabsHtmlTemplate(appDirectory, name, tabs); +// var tabsJs = Generate.generateTabsJsTemplate(appDirectory, name, tabs); +// // var tabsScss = Generate.generateTabsScssTemplate(appDirectory, name, tabs); +// var pagePath = path.join(appDirectory, 'app', tabsfileName), +// jsPath = path.join(pagePath, [tabsfileName, '.js'].join('')), +// htmlPath = path.join(pagePath, [tabsfileName, '.html'].join('')); +// // scssPath = path.join(pagePath, [tabsfileName, '.scss'].join('')); +// +// tabs.forEach(function(tab) { +// Generate.createScaffoldDirectories(appDirectory, 'tabs', tab); +// var tabJs = Generate.generateJsTemplate(appDirectory, tab); +// var tabHtml = Generate.generateHtmlTemplate(appDirectory, tab); +// +// }) +// }; Generate.generateTabJsTemplate = function generateTabJsTemplate(appDirectory, name) { throw new Error('not implemented'); @@ -201,8 +199,9 @@ Generate.generateTabsJsTemplate = function generateTabsJsTemplate(appDirectory, }; Generate.createScaffoldDirectories = function createScaffoldDirectories(options) { + console.log('createScaffoldDirectories', options); // Generate.log('Create', options.appDirectory, options.fileName); - var componentPath = path.join(options.appDirectory, 'www', 'app', options.fileName); + var componentPath = path.join(options.appDirectory, 'app', options.componentDirectory, options.fileName); shell.mkdir('-p', componentPath); }; diff --git a/tooling/generators/component/component.tmpl.js b/tooling/generators/component/component.tmpl.js index 423a3027b8..dccfeda66f 100644 --- a/tooling/generators/component/component.tmpl.js +++ b/tooling/generators/component/component.tmpl.js @@ -1,15 +1,14 @@ import {Component, NgIf} from 'angular2/angular2'; +import {NavController} from 'ionic/ionic'; @Component({ directives: [NgIf], - properties: ['value'], //Change to be whatever properties you want, ex: <<%= fileAndClassName %> value="5"> + properties: ['value'], //Change to be whatever properties you want, ex: <<%= fileName %> value="5"> selector: '<%= fileName %>', templateUrl: 'app/<%= fileName %>/<%= fileName %>.html' }) export class <%= jsClassName %> { - constructor() { + constructor(nav: NavController) { this.nav = nav; - this.popup = popup; - this.dataService = dataService; } } diff --git a/tooling/generators/component/index.js b/tooling/generators/component/index.js index 8d361acd1d..5df36f8499 100644 --- a/tooling/generators/component/index.js +++ b/tooling/generators/component/index.js @@ -9,16 +9,18 @@ var fs = require('fs'), 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); + Generate.createScaffoldDirectories({appDirectory: options.appDirectory, componentDirectory: 'components', fileName: options.fileName}); + + options.rootDirectory = options.rootDirectory || path.join('app', 'components'); + + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName); var templates = Generate.loadGeneratorTemplates(__dirname); templates.forEach(function(template) { - var templatePath = path.join(__dirname, template.file); - options.templatePath = templatePath; + options.templatePath = template.file; var renderedTemplate = Generate.renderTemplateFromFile(options); - var saveFilePath = path.join(savePath, [options.fileAndClassName, template.type].join('')); + var saveFilePath = path.join(savePath, [options.fileName, 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/index.js b/tooling/generators/directive/index.js index 8d361acd1d..f87bdaaf55 100644 --- a/tooling/generators/directive/index.js +++ b/tooling/generators/directive/index.js @@ -9,16 +9,17 @@ var fs = require('fs'), 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); + Generate.createScaffoldDirectories({appDirectory: options.appDirectory, componentDirectory: 'directives', fileName: options.fileName}); + + options.rootDirectory = options.rootDirectory || path.join('app', 'directives'); + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName); var templates = Generate.loadGeneratorTemplates(__dirname); templates.forEach(function(template) { - var templatePath = path.join(__dirname, template.file); - options.templatePath = templatePath; + options.templatePath = template.file; var renderedTemplate = Generate.renderTemplateFromFile(options); - var saveFilePath = path.join(savePath, [options.fileAndClassName, template.type].join('')); + var saveFilePath = path.join(savePath, [options.fileName, 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 index 3cccf510c8..5eb8341c4d 100644 --- a/tooling/generators/injectable/index.js +++ b/tooling/generators/injectable/index.js @@ -1,27 +1,23 @@ -// 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) { +var fs = require('fs'), + Generator = module.exports, + Generate = require('../../generate'), + path = require('path'), + Q = require('q'); -// options.rootDirectory = options.rootDirectory || path.join('www', 'app'); -// var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileAndClassName); +Generator.run = function run(options) { + Generate.createScaffoldDirectories({appDirectory: options.appDirectory, componentDirectory: 'injectables', fileName: options.fileName}); -// var templates = Generate.loadGeneratorTemplates(__dirname); + options.rootDirectory = options.rootDirectory || path.join('app', 'injectables'); + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName); -// 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); -// }); -// }; + var templates = Generate.loadGeneratorTemplates(__dirname); + + templates.forEach(function(template) { + options.templatePath = template.file; + var renderedTemplate = Generate.renderTemplateFromFile(options); + var saveFilePath = path.join(savePath, [options.fileName, 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 index 77fd294a35..8462adf0e0 100644 --- a/tooling/generators/injectable/injectable.tmpl.js +++ b/tooling/generators/injectable/injectable.tmpl.js @@ -8,14 +8,25 @@ export class <%= jsClassName %> { 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; - }); + load() { + if (this.data) { + // already loaded data + return Promise.resolve(this.data); + } + + // don't have the data yet + return new Promise(resolve => { + // We're using Angular Http provider to request the data, + // then on the response it'll map the JSON data to a parsed JS object. + // Next we process the data and resolve the promise with the new data. + this.http.get('path/to/data.json') + .map(res => res.json()) + .subscribe(data => { + // we've got back the raw data, now generate the core schedule data + // and save the data for later reference + this.data = data; + resolve(this.data); + }); + }); } } diff --git a/tooling/generators/page-login/index.js b/tooling/generators/page-login/index.js index 8d361acd1d..f98361fb78 100644 --- a/tooling/generators/page-login/index.js +++ b/tooling/generators/page-login/index.js @@ -9,16 +9,17 @@ var fs = require('fs'), 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); + Generate.createScaffoldDirectories({appDirectory: options.appDirectory, componentDirectory: 'pages', fileName: options.fileName}); + + options.rootDirectory = options.rootDirectory || path.join('app', 'pages'); + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName); var templates = Generate.loadGeneratorTemplates(__dirname); templates.forEach(function(template) { - var templatePath = path.join(__dirname, template.file); - options.templatePath = templatePath; + options.templatePath = template.file; var renderedTemplate = Generate.renderTemplateFromFile(options); - var saveFilePath = path.join(savePath, [options.fileAndClassName, template.type].join('')); + var saveFilePath = path.join(savePath, [options.fileName, 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/page-signup/index.js b/tooling/generators/page-signup/index.js index 70cddd3626..f98361fb78 100644 --- a/tooling/generators/page-signup/index.js +++ b/tooling/generators/page-signup/index.js @@ -9,17 +9,17 @@ var fs = require('fs'), appDirectory: App directory of where to save file */ Generator.run = function run(options) { + Generate.createScaffoldDirectories({appDirectory: options.appDirectory, componentDirectory: 'pages', fileName: options.fileName}); - options.rootDirectory = options.rootDirectory || path.join('www', 'app'); - var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileAndClassName); + options.rootDirectory = options.rootDirectory || path.join('app', 'pages'); + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName); var templates = Generate.loadGeneratorTemplates(__dirname); templates.forEach(function(template) { - var templatePath = path.join(__dirname, template.file); - options.templatePath = templatePath; + options.templatePath = template.file; var renderedTemplate = Generate.renderTemplateFromFile(options); - var saveFilePath = path.join(savePath, [options.fileAndClassName, template.type].join('')); + var saveFilePath = path.join(savePath, [options.fileName, 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/page/index.js b/tooling/generators/page/index.js index 4ea6f231b2..b7dcfaa9aa 100644 --- a/tooling/generators/page/index.js +++ b/tooling/generators/page/index.js @@ -1,36 +1,36 @@ -// /* -// ionic g page about -// what should happen: -// create directories if not existing: /www, /www/app, /www/app/about -// create files (about.html, about.scss, about.js) in /www/app/about -// */ -// var fs = require('fs'), -// Generator = module.exports, -// Generate = require('../../generate'), -// path = require('path'), -// Q = require('q'); -// /* -// Run: generate a page template from the name and save -// it in the desired app directory -// @options -// name: Page name -// appDirectory: App directory of where to save file -// */ -// Generator.run = function run(options) { +/* + ionic g page about + what should happen: + create directories if not existing: /www, /www/app, /www/app/about + create files (about.html, about.scss, about.js) in /www/app/about +*/ +var fs = require('fs'), + Generator = module.exports, + Generate = require('../../generate'), + path = require('path'), + Q = require('q'); +/* + Run: generate a page template from the name and save + it in the desired app directory + @options + name: Page name + appDirectory: App directory of where to save file +*/ +Generator.run = function run(options) { + Generate.createScaffoldDirectories({appDirectory: options.appDirectory, componentDirectory: 'pages', fileName: options.fileName}); -// // Generate.defaultTemplates(options) -// // options.rootDirectory = options.rootDirectory || path.join('www', 'app'); -// // var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName); + // Generate.defaultTemplates(options) + options.rootDirectory = options.rootDirectory || path.join('app', 'pages'); + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName); -// // var templates = Generate.loadGeneratorTemplates(__dirname); + 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.fileName, template.type].join('')); -// // // console.log('renderedTemplate', renderedTemplate, 'saving to', saveFilePath); -// // console.log('√ Create'.blue, path.relative(options.appDirectory, saveFilePath)); -// // fs.writeFileSync(saveFilePath, renderedTemplate); -// // }); -// }; + templates.forEach(function(template) { + options.templatePath = template.file; + var renderedTemplate = Generate.renderTemplateFromFile(options); + var saveFilePath = path.join(savePath, [options.fileName, 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/page/page.tmpl.js b/tooling/generators/page/page.tmpl.js index 30d18b2d3d..c28d788664 100644 --- a/tooling/generators/page/page.tmpl.js +++ b/tooling/generators/page/page.tmpl.js @@ -1,4 +1,5 @@ import {Page, NavController} from 'ionic/ionic'; + @Page({ templateUrl: 'app/<%= fileName %>/<%= fileName %>.html', }) diff --git a/tooling/generators/pipe/index.js b/tooling/generators/pipe/index.js index 70cddd3626..a5823bd4a5 100644 --- a/tooling/generators/pipe/index.js +++ b/tooling/generators/pipe/index.js @@ -9,17 +9,17 @@ var fs = require('fs'), appDirectory: App directory of where to save file */ Generator.run = function run(options) { + Generate.createScaffoldDirectories({appDirectory: options.appDirectory, componentDirectory: 'pipes', fileName: options.fileName}); - options.rootDirectory = options.rootDirectory || path.join('www', 'app'); - var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileAndClassName); + options.rootDirectory = options.rootDirectory || path.join('app', 'pipes'); + var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName); var templates = Generate.loadGeneratorTemplates(__dirname); templates.forEach(function(template) { - var templatePath = path.join(__dirname, template.file); - options.templatePath = templatePath; + options.templatePath = template.file; var renderedTemplate = Generate.renderTemplateFromFile(options); - var saveFilePath = path.join(savePath, [options.fileAndClassName, template.type].join('')); + var saveFilePath = path.join(savePath, [options.fileName, 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/tabs/index.js b/tooling/generators/tabs/index.js index 1286feb5f7..60ad64e5c5 100644 --- a/tooling/generators/tabs/index.js +++ b/tooling/generators/tabs/index.js @@ -41,8 +41,10 @@ Generator.promptForTabName = function promptForTabName(tabIndex, options) { } Generator.run = function run(options) { + Generate.createScaffoldDirectories({appDirectory: options.appDirectory, componentDirectory: 'tabs', fileName: options.fileName}); + //Need to query user for tabs: - options.rootDirectory = options.rootDirectory || path.join('www', 'app'); + options.rootDirectory = options.rootDirectory || path.join('app', 'tabs'); var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName); Generator.tabs = []; From bcf69a05581790ea42c2ecbf5b9a4d4c89bcf458 Mon Sep 17 00:00:00 2001 From: Eddie Lau 3dd13 Date: Tue, 29 Dec 2015 16:54:06 +0800 Subject: [PATCH 2/2] fix path to import pages from tabs js --- tooling/generators/tabs/tabs.tmpl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tooling/generators/tabs/tabs.tmpl.js b/tooling/generators/tabs/tabs.tmpl.js index 9a0f1b52c2..29f0c085aa 100644 --- a/tooling/generators/tabs/tabs.tmpl.js +++ b/tooling/generators/tabs/tabs.tmpl.js @@ -1,6 +1,6 @@ import {NavController, Page} from 'ionic/ionic'; -<% _.forEach(tabs, function(tab) { %>import {<%= tab.jsClassName %>} from '../<%= tab.fileName %>/<%= tab.fileName %>'; +<% _.forEach(tabs, function(tab) { %>import {<%= tab.jsClassName %>} from '../../<%= tab.fileName %>/<%= tab.fileName %>'; <% }); %> @Page({ templateUrl: 'app/<%= fileName %>/<%= fileName %>.html'