grunt-contrib
Version:
A collection of common grunt tasks.
66 lines (50 loc) • 1.84 kB
JavaScript
/**
* Task: yuidoc
* Description: Generates YUIDocs for the provided directory
* Dependencies: yuidocjs
* Contributor: @gcpantazis
*/
module.exports = function(grunt) {
"use strict";
// TODO: ditch this when grunt v0.4 is released
grunt.util = grunt.util || grunt.utils;
var kindOf = grunt.util.kindOf;
grunt.registerMultiTask("yuidoc", "Create YUIDocs", function() {
var Y = require("yuidocjs");
var done = this.async();
var starttime = (new Date()).getTime();
var json;
var options = grunt.helper("options", this, {
quiet: true
});
// when invoking yuidocs via node, the project details
// are assigned under the options object using the key
// 'project'
options.project = this.data;
grunt.verbose.writeflags(options, "Options");
// Catch if required fields are not provided.
if ( !options.paths ) {
grunt.fail.warn("No path(s) provided for YUIDoc to scan.");
}
if ( !options.outdir ) {
grunt.fail.warn("You must specify a directory for YUIDoc output.");
}
// Input path: array expected, but grunt conventions allows for either a string or an array.
if (kindOf(options.paths) === "string") {
options.paths = [ options.paths ];
}
json = (new Y.YUIDoc(options)).run();
options = Y.Project.mix(json, options);
if (!options.parseOnly) {
var builder = new Y.DocBuilder(options, json);
grunt.log.writeln("Start YUIDoc compile...");
grunt.log.writeln("Scanning: " + grunt.log.wordlist(options.paths));
grunt.log.writeln("Output: " + (options.outdir).cyan);
builder.compile(function() {
var endtime = (new Date()).getTime();
grunt.log.writeln("YUIDoc compile completed in " + ((endtime - starttime) / 1000) + " seconds");
done();
});
}
});
};