generator-zogram
Version:
Yeoman webapp generator. Includes Sass, Assemble, and some useful front-end components.
127 lines (104 loc) • 3.37 kB
JavaScript
'use strict';
var join = require('path').join;
var yeoman = require('yeoman-generator');
var chalk = require('chalk');
module.exports = yeoman.generators.Base.extend({
constructor: function() {
yeoman.generators.Base.apply(this, arguments);
// setup the test-framework property, Gruntfile template will need this
this.option('test-framework', {
desc: 'Test framework to be invoked',
type: String,
defaults: 'mocha'
});
this.testFramework = this.options['test-framework'];
this.pkg = require('../package.json');
},
gruntfile: function() {
this.template('_Gruntfile.js', 'Gruntfile.js');
},
packageJSON: function() {
this.template('_package.json', 'package.json');
},
git: function() {
this.template('_gitignore', '.gitignore');
this.copy('_gitattributes', '.gitattributes');
},
bower: function() {
var bower = {
name: this._.slugify(this.appname),
private: true,
dependencies: {
'normalize-css': "~3.0.1",
'normalize-opentype.css': "~0.1.2",
'grid.scss': "*",
'jquery': "~2.1.3",
'jquery.scrollTo': "~1.4.12",
'jquery.localScroll': "~1.3.5"
}
};
this.write('bower.json', JSON.stringify(bower, null, 2));
},
jshint: function() {
this.copy('_jshintrc', '.jshintrc');
},
editorConfig: function() {
this.copy('_editorconfig', '.editorconfig');
},
ymlConfig: function() {
this.copy('_config.yml', 'config.yml');
},
ftpPass: function() {
this.copy('_ftppass', '.ftppass');
},
content: function() {
this.mkdir('content');
this.copy('_content/index.md', 'content/index.md');
},
writeIndex: function() {
this.layoutFile = this.engine(
this.readFileAsString(join(this.sourceRoot(), '_layouts/default.hbs')),
this
);
this.indexFile = this.engine(
this.readFileAsString(join(this.sourceRoot(), '_pages/index.hbs')),
this
);
},
app: function() {
this.mkdir('app');
this.mkdir('app/scripts');
this.mkdir('app/styles');
this.mkdir('app/fonts');
this.mkdir('app/media');
this.mkdir('app/templates');
this.mkdir('app/templates/layouts');
this.mkdir('app/templates/partials');
this.mkdir('app/templates/pages');
this.write('app/templates/layouts/default.hbs', this.layoutFile);
this.write('app/templates/pages/index.hbs', this.indexFile);
this.copy('_htaccess', 'app/.htaccess');
this.copy('_favicon.ico', 'app/favicon.ico');
this.copy('_robots.txt', 'app/robots.txt');
this.copy('_styles/main.scss', 'app/styles/main.scss');
this.copy('_styles/_init.scss', 'app/styles/_init.scss');
this.copy('_styles/_globals.scss', 'app/styles/_globals.scss');
this.copy('_styles/_utilities.scss', 'app/styles/_utilities.scss');
this.copy('_scripts/main.js', 'app/scripts/main.js');
this.copy('_pages/404.hbs', 'app/templates/pages/404.hbs');
},
install: function() {
this.on('end', function() {
this.invoke(this.options['test-framework'], {
options: {
'skip-install': this.options['skip-install']
}
});
if (!this.options['skip-install']) {
this.installDependencies({
skipInstall: this.options['skip-install']
});
}
});
}
});