123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /*
- * grunt
- * http://gruntjs.com/
- *
- * Copyright (c) 2014 "Cowboy" Ben Alman
- * Licensed under the MIT license.
- * https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
- */
- 'use strict';
- var grunt = require('../grunt');
- // Nodejs libs.
- var path = require('path');
- // Set column widths.
- var col1len = 0;
- exports.initCol1 = function(str) {
- col1len = Math.max(col1len, str.length);
- };
- exports.initWidths = function() {
- // Widths for options/tasks table output.
- exports.widths = [1, col1len, 2, 76 - col1len];
- };
- // Render an array in table form.
- exports.table = function(arr) {
- arr.forEach(function(item) {
- grunt.log.writetableln(exports.widths, ['', grunt.util._.pad(item[0], col1len), '', item[1]]);
- });
- };
- // Methods to run, in-order.
- exports.queue = [
- 'initOptions',
- 'initTasks',
- 'initWidths',
- 'header',
- 'usage',
- 'options',
- 'optionsFooter',
- 'tasks',
- 'footer',
- ];
- // Actually display stuff.
- exports.display = function() {
- exports.queue.forEach(function(name) { exports[name](); });
- };
- // Header.
- exports.header = function() {
- grunt.log.writeln('Grunt: The JavaScript Task Runner (v' + grunt.version + ')');
- };
- // Usage info.
- exports.usage = function() {
- grunt.log.header('Usage');
- grunt.log.writeln(' ' + path.basename(process.argv[1]) + ' [options] [task [task ...]]');
- };
- // Options.
- exports.initOptions = function() {
- // Build 2-column array for table view.
- exports._options = Object.keys(grunt.cli.optlist).map(function(long) {
- var o = grunt.cli.optlist[long];
- var col1 = '--' + (o.negate ? 'no-' : '') + long + (o.short ? ', -' + o.short : '');
- exports.initCol1(col1);
- return [col1, o.info];
- });
- };
- exports.options = function() {
- grunt.log.header('Options');
- exports.table(exports._options);
- };
- exports.optionsFooter = function() {
- grunt.log.writeln().writelns(
- 'Options marked with * have methods exposed via the grunt API and should ' +
- 'instead be specified inside the Gruntfile wherever possible.'
- );
- };
- // Tasks.
- exports.initTasks = function() {
- // Initialize task system so that the tasks can be listed.
- grunt.task.init([], {help: true});
- // Build object of tasks by info (where they were loaded from).
- exports._tasks = [];
- Object.keys(grunt.task._tasks).forEach(function(name) {
- exports.initCol1(name);
- var task = grunt.task._tasks[name];
- exports._tasks.push(task);
- });
- };
- exports.tasks = function() {
- grunt.log.header('Available tasks');
- if (exports._tasks.length === 0) {
- grunt.log.writeln('(no tasks found)');
- } else {
- exports.table(exports._tasks.map(function(task) {
- var info = task.info;
- if (task.multi) { info += ' *'; }
- return [task.name, info];
- }));
- grunt.log.writeln().writelns(
- 'Tasks run in the order specified. Arguments may be passed to tasks that ' +
- 'accept them by using colons, like "lint:files". Tasks marked with * are ' +
- '"multi tasks" and will iterate over all sub-targets if no argument is ' +
- 'specified.'
- );
- }
- grunt.log.writeln().writelns(
- 'The list of available tasks may change based on tasks directories or ' +
- 'grunt plugins specified in the Gruntfile or via command-line options.'
- );
- };
- // Footer.
- exports.footer = function() {
- grunt.log.writeln().writeln('For more information, see http://gruntjs.com/');
- };
|