This repository has been archived by the owner on Oct 10, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 36
/
bar.js
81 lines (65 loc) · 1.85 KB
/
bar.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
var characterSet = require('cli-character-set')
var logUpdate = require('log-update')
var padLeft = require('lodash.padleft')
var padRight = require('lodash.padright')
var util = require('util')
require('colour')
var themes = {
unicode: {
complete: '▓',
incomplete: '░'
},
ascii: {
complete: '#',
incomplete: '-'
},
cp437: {
complete: '█',
incomplete: '░'
}
}
var ProgressBar = function () {
this.msg = ''
this.spun = 0
this.progress = 0
this.theme = themes[characterSet()]
this._largestMsgWidth = 0
}
ProgressBar.prototype._columns = function () {
return process.stdout.columns - 2
}
ProgressBar.prototype._getFullMsg = function () {
return util.format('%s', padRight(this.msg, this._largestMsgWidth))
}
ProgressBar.prototype._getProgressBar = function () {
var self = this
var percentage = this.progress
function getProgressWidth () {
return self._columns() - self._getFullMsg().length
}
function getComplete (percentage) {
return padLeft('', (percentage * getProgressWidth()), self.theme.complete)
}
function getIncomplete (percentage) {
var width = getProgressWidth() - (percentage * getProgressWidth())
return padRight('', width, self.theme.incomplete)
}
var complete = getComplete(percentage).blue
var incomplete = getIncomplete(percentage)
return complete + incomplete
}
ProgressBar.prototype.show = function (msg, percentage) {
this.msg = msg.trim() === '' ? this.msg : msg
this._largestMsgWidth = Math.max(msg.length, this._largestMsgWidth)
this.progress = percentage || this.progress
this._draw()
}
ProgressBar.prototype.hide = function () {
logUpdate.clear()
}
ProgressBar.prototype._draw = function () {
var bar = this._getProgressBar(this.progress)
var msg = this._getFullMsg()
logUpdate(util.format('%s %s', msg, bar))
}
module.exports = ProgressBar