qtip2
Version:
Introducing... qTip2. The second generation of the advanced qTip plugin for the ever popular jQuery framework.
109 lines (92 loc) • 3.59 kB
JavaScript
module.exports = function(grunt) {
grunt.registerTask('init', 'Initialise build configuration.', function(basic) {
// Grab command - line options, using valid defaults if not given
var done = this.async(),
stable = grunt.option('stable') === true,
plugins = (grunt.option('plugins') || Object.keys( grunt.config('plugins')).join(' ')).replace(/ /g, ' ').split(' '),
styles = (grunt.option('styles') || Object.keys( grunt.config('styles')).join(' ')).replace(/ /g, ' ').split(' '),
valid;
// Setup JS/CSS arrays
var js = grunt.config('core.js'),
css = grunt.config('core.css'),
dist = grunt.option('dist') || 'dist';
// Add intro file
js.unshift(grunt.config('wrappers.js.intro'));
// If basic... go into dist/basic
if(basic) { dist += '/basic'; }
// Parse 'dist' option (decides which directory to build into)
grunt.config('dirs.dist', dist);
// Parse 'styles' option (decides which stylesheets are included)
if(!basic && grunt.option('styles') !== 0) {
styles.forEach(function(style, i) {
if(valid = grunt.config('styles.' + style)) {
css.push(valid);
}
else { styles[i] = style + '*'.red; }
});
styles.unshift('core');
}
else { styles = ['core']; }
// Parse 'plugins' option (decides which plugins are included)
if(!basic && grunt.option('plugins') !== 0) {
plugins.forEach(function(plugin, i) {
if(valid = grunt.config('plugins.' + plugin)) {
if(valid.js) { js.push(valid.js); }
if(valid.css) { css.push(valid.css); }
}
else { plugins[i] = plugin + '*'.red; }
});
}
else { plugins = ['None']; }
// Add outro file
js.push(grunt.config('wrappers.js.outro'));
// Update concatenation config
grunt.config('concat.js.src', js);
grunt.config('concat.css.src', css);
// Setup in - file text replacements (version, date etc)
grunt.util.spawn({ cmd: 'git', args: ['describe', '--tags'] }, function(err, data) {
// Ensure it succeed
if(data.code > 1) {
grunt.log.write('Uhoh... couldn\'t grab Git repository description. Somethings up!');
return done();
}
// Determine version
var version = stable ?
grunt.config('pkg.version') :
grunt.config('pkg.version', data.stdout.substr(0,10) );
// Set version type config
grunt.config('pkg.type', stable ? 'stable' : 'nightly');
// Setup styles and plugins replacements arrays
var strStyles = styles.length ? styles.join(' ') : '';
var strPlugins = plugins.length ? plugins.join(' ') : '';
// Setup build properties
var buildprops = (plugins.length ? ' * Plugins: ' + strPlugins + '\n' : '') +
(styles.length ? ' * Styles: ' + strStyles + '\n' : '');
// Setup minification build properties
var minbuildprops = plugins[0] !== 'None' || styles[0] !== 'None' ?
'(includes: ' +
(plugins[0] !== 'None' ? strPlugins : '') +
(styles[0] !== 'None' ? ' / ' + strStyles : '') + ') '
: '';
// Set replacement variables
grunt.config('replace.js.options.patterns', [{
json: {
'BUILDPROPS': buildprops,
'MINBUILDPROPS': minbuildprops,
'VERSION': stable ? version : version.substr(1),
'vVERSION': stable ? 'v' + version : version,
'DATE': grunt.template.today('dd - mm - yyyy'),
'STYLES': strStyles,
'PLUGINS': strPlugins
}
}]);
// Output current build properties
grunt.log.write('\nBuilding ' + 'qTip2'.green + ' ' + version + ' with ' +
'plugins ' + plugins.join(' ').green + ' and ' +
'styles ' +styles.join(' ').green + '\n'
);
// Async task done
done(version);
});
});
};