UNPKG

generator-robonkey

Version:

A Yeoman generator for Gulp, Templating, CSS Preprocessors, Coffeescript, PostCSS, Modernizr, svg icons/icon font generator, BrowserSync, and some libraries to choose from. Express, Wordpress, Drupal, CodeIgniter, Laravel subgenerators are available.

233 lines (189 loc) 6.61 kB
'use strict'; var yeoman = require('yeoman-generator'), yosay = require('yosay'), fs = require('fs'), path = require('path'), util = require('util'), chalk = require('chalk'), rimraf = require('rimraf'), exec = require('child_process').exec, semver = require('semver'), mkdirp = require('mkdirp'), generatorName = path.basename(__dirname); var greeting = require('../app/helpers/greeting'), walk = require('../app/helpers/walk'), printTitle = require('../app/helpers/printTitle'), hasFeature = require('../app/helpers/hasFeature'), createJson = require('../app/helpers/createJson'); var init = require('../app/config/init'), setConfigVars = require('../app/config/setConfigVars'), setConfigFiles = require('../app/config/setConfigFiles'), setBaseConfigVars = require('../app/config/setBaseConfigVars'), getFramework = require('../app/config/getFramework'); var structureExistsPrompt = require('../app/prompts/structureExistsPrompt'), frameworkPrompt = require('../app/prompts/frameworkPrompt'), gulpPrompt = require('../app/prompts/gulpPrompt'), staticPrompt = require('../app/prompts/staticPrompt'); module.exports = yeoman.generators.Base.extend({ initializing: function(){ var done = this.async(), self = this; init(this, function(){ greeting(self); done(); }); }, prompting: { existingEnvironment: function(){ this.cfg.environmentOption ='drupal'; if(this.calledFrom === 'app' || !this.calledFrom){ var done = this.async(), self = this, destRoot = this.destinationRoot(), frameworks = ['wordpress', 'codeigniter', 'drupal', 'express', 'laravel']; frameworkPrompt(frameworks, destRoot, this.calledFrom, this, function(environmentOption){ self.cfg.environmentOption = environmentOption; }); } }, gulp: function(){ var done = this.async(); gulpPrompt(this, function(){ done(); }) }, drupal: function(){ if(this.exit) return; var done = this.async(), self = this; var drupal6 = '6.38', drupal7 = '7.43', drupal8 = '8.0.6'; console.log(printTitle('Configuring Drupal')); this.prompt([{ type: 'list', name: 'drupalVersion', message: 'Which version of Drupal do you want?', choices: [drupal6, drupal7, drupal8, 'Specify a version'], default: drupal7 }, { when: function(answers){ return answers.drupalVersion === 'Specify a version' }, name: 'drupalVersion', message: 'Specify a Drupal version (0.0.0)', default: '0.0.0' }, { name: 'mainDir', message: 'Where to place Drupal?', default: function(answers) { if(self.cfg.mainDir) { return self.cfg.mainDir } else { return 'website' } } }, { type: 'input', name: 'themeName', message: 'What is the name of your theme?', default: function(answers) { if(self.cfg.themeName) { return self.cfg.themeName } else { return 'My Theme' } } }, { type: 'confirm', name: 'removeDefaultThemes', message: 'Remove built-in themes?', default: function(answers) { if(self.cfg.removeDefaultThemes) { return self.cfg.removeDefaultThemes } else { return true } } }], function (answers) { this.cfg.environmentOption = 'drupal'; this.cfg.mainDir = answers.mainDir; this.cfg.themeName = answers.themeName; this.cfg.themeDir = answers.themeName.replace(/\W/g, '').toLowerCase(); this.cfg.themeNameSpace = answers.themeNameSpace; this.cfg.drupalVersion = answers.drupalVersion; this.cfg.removeDefaultThemes = answers.removeDefaultThemes; done(); }.bind(this)); } }, configuring: { answers: function () { if(this.exit) return; var done = this.async(), self = this; setBaseConfigVars(this, function(){ self.themeName = self.cfg.themeName; self.themeDir = self.cfg.themeDir; self.themeNameSpace = self.cfg.themeNameSpace; self.drupalVersion = self.cfg.drupalVersion; self.removeDefaultThemes = self.cfg.removeDefaultThemes; self.config.set(self.cfg); done(); }); } }, writing: { downloading: function(){ if(this.exit) return; var done = this.async(), self = this; console.log(printTitle('Installing Drupal')); console.log('Downloading Drupal version ' + this.drupalVersion); try { fs.accessSync(self.mainDir, fs.F_OK); console.log('Folder ' + self.mainDir + ' exists'); rimraf(self.mainDir, function(){ getFramework.drupal(self, function(){ done(); }) }); } catch (e) { console.log('Folder ' + self.mainDir + ' doesn\'t exist'); getFramework.drupal(self, function(){ done(); }) } }, themes: function(){ if(this.exit) return; var done = this.async(), self = this; var drupalThemes = path.join(this.mainDir, 'themes/'); // Remove redundant themes if(this.removeDefaultThemes === true) { console.log(printTitle('Remove built-in themes')); // remove the existing themes fs.readdir(drupalThemes, function(err, files) { if (typeof files != 'undefined' && files.length !== 0) { files.forEach(function(file) { var pathFile = fs.realpathSync(drupalThemes + file), isDirectory = fs.statSync(pathFile).isDirectory() if (isDirectory) { rimraf.sync(pathFile); console.log('Removing ' + pathFile); } }); } }); } // Create the theme directory mkdirp(path.join(drupalThemes, self.themeDir)); done(); }, }, end: function(){ console.log(printTitle('Drupal is installed')); console.log('You can now run ' + chalk.yellow.bold('yo robonkey') + ' to continue installing your project.\n\n') } });