mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-24 06:22:45 +08:00
93 lines
3.0 KiB
JavaScript
93 lines
3.0 KiB
JavaScript
var colors = require('colors'),
|
|
fs = require('fs'),
|
|
path = require('path'),
|
|
inquirer = require('inquirer'),
|
|
Q = require('q'),
|
|
Generator = module.exports,
|
|
Generate = require('../../generate'),
|
|
path = require('path'),
|
|
Q = require('q');
|
|
|
|
Generator.validate = function(input) {
|
|
// console.log(typeof parseInt(input));
|
|
if (isNaN(parseInt(input))) {
|
|
// Pass the return value in the done callback
|
|
return 'You need to provide a number';
|
|
}
|
|
return true;
|
|
};
|
|
|
|
Generator.numberNames = ['first', 'second', 'third', 'fourth', 'fifth'];
|
|
|
|
Generator.promptForTabCount = function promptForTabCount() {
|
|
var q = Q.defer();
|
|
|
|
inquirer.prompt({choices: ['1', '2', '3', '4', '5'], message: 'How many tabs will you have?', name: 'count', type: 'list', validate: Generator.validate}, function(result) {
|
|
q.resolve(result.count);
|
|
});
|
|
|
|
return q.promise;
|
|
};
|
|
|
|
Generator.promptForTabName = function promptForTabName(tabIndex, options) {
|
|
var q = Q.defer();
|
|
|
|
inquirer.prompt({message: 'Enter the ' + Generator.numberNames[tabIndex] + ' tab name:', name: 'name', type: 'input'}, function(nameResult) {
|
|
Generator.tabs.push({ appDirectory: options.appDirectory, cssClassName: Generate.cssClassName(nameResult.name), fileName: Generate.fileName(nameResult.name), jsClassName: Generate.jsClassName(nameResult.name), name: nameResult.name });
|
|
q.resolve();
|
|
});
|
|
|
|
return q.promise;
|
|
}
|
|
|
|
Generator.run = function run(options) {
|
|
//Need to query user for tabs:
|
|
options.rootDirectory = options.rootDirectory || path.join('www', 'app');
|
|
var savePath = path.join(options.appDirectory, options.rootDirectory, options.fileName);
|
|
|
|
Generator.tabs = [];
|
|
|
|
return Generator.promptForTabCount()
|
|
.then(function(count) {
|
|
var promise = Q();
|
|
for(var i = 0, j = parseInt(count); i < j; i++) {
|
|
(function(index) {
|
|
promise = promise.then(function() {
|
|
return Generator.promptForTabName(index, options);
|
|
});
|
|
})(i);//avoid closure loop var
|
|
}
|
|
|
|
return promise;
|
|
})
|
|
.then(function() {
|
|
var templates = Generate.loadGeneratorTemplates(__dirname);
|
|
|
|
//Generate the tabs container page templates
|
|
templates.forEach(function(template) {
|
|
options.templatePath = template.file;
|
|
options.tabs = Generator.tabs;
|
|
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);
|
|
});
|
|
|
|
//Now render the individual tab pages
|
|
Generator.tabs.forEach(function(tab) {
|
|
tab.generatorName = 'page';
|
|
tab.appDirectory = tab.appDirectory;
|
|
Generate.generate(tab);
|
|
});
|
|
})
|
|
.catch(function(ex) {
|
|
console.log('Something went wrong', ex);
|
|
console.log(ex.stack);
|
|
throw ex;
|
|
})
|
|
.fin(function() {
|
|
console.log('√ Done'.green);
|
|
});
|
|
};
|