linespin
Version:
Simple progress output
133 lines (103 loc) • 3.12 kB
JavaScript
/*
Linespin - Simple Progress Output
*/
;
var Linespin, c;
c = require('./color');
Linespin = (function() {
var _continue, _errorMessage, _i, _lastMessage, _message, _pendingMessage, _prettify, _reset, _speed, _spin, _spinner, _spinnerMessage, _stdout, _successMessage, _warningMessage;
_speed = void 0;
_stdout = process.stdout;
_spin = ['-', '\\', '|', '/'];
_i = 0;
function Linespin(message, doneMessage, speed) {
this.message = message;
this.doneMessage = doneMessage;
this.speed = speed;
this.state = 'stopped';
if (this.message == null) {
this.message = 'Please wait...';
}
if (this.doneMessage == null) {
this.doneMessage = 'Finished';
}
if (this.speed == null) {
this.speed = 200;
}
}
Linespin.prototype.start = function() {
if (this.state === 'stopped') {
this.state = 'running';
_stdout.write("\n");
}
_spinnerMessage(this.message);
return _continue(this);
};
Linespin.prototype.stop = function(message) {
this.state = 'stopped';
_reset();
return _lastMessage(message || this.doneMessage);
};
Linespin.prototype.pending = function(message) {
return _pendingMessage(message);
};
Linespin.prototype.success = function(message) {
return _successMessage(message);
};
Linespin.prototype.error = function(message) {
return _errorMessage(message);
};
Linespin.prototype.warn = function(message) {
return _warningMessage(message);
};
Linespin.prototype.msg = function(message) {
return _message(message);
};
_reset = function() {
return _i = 0;
};
_continue = function(_this) {
var that;
that = _this;
return setTimeout(function() {
if (that.state === 'running') {
return that.start();
}
}, that.speed);
};
_spinner = function() {
return "" + _spin[_i = (_i + 1) % 4];
};
_prettify = function(message, symbol, newline, replace, color1, color2) {
var bump, override;
if (color2 == null) {
color2 = color1;
}
bump = newline ? "\n\n" : "\n";
override = replace ? "" + c.rewrite + c.rewrite : c.rewrite;
return _stdout.write("" + override + c[color1] + "[" + symbol + "] " + c[color2] + message + c.reset + bump);
};
_spinnerMessage = function(message) {
return _prettify(message, _spinner(), false, false, 'yellow', 'blue');
};
_lastMessage = function(message) {
return _prettify(message, '✓', false, false, 'green', 'blue');
};
_successMessage = function(message) {
return _prettify(message, '✓', true, true, 'green', 'grey');
};
_pendingMessage = function(message) {
return _prettify(message, '?', true, false, 'blue', 'white');
};
_message = function(message) {
return _prettify(message, '•', true, false, 'white');
};
_errorMessage = function(message) {
return _prettify(message, '!', true, false, 'red');
};
_warningMessage = function(message) {
return _prettify(message, '!', true, false, 'yellow');
};
return Linespin;
})();
module.exports = Linespin;