-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
69 lines (63 loc) · 2.27 KB
/
index.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
'use strict'
const chalk = require('chalk')
module.exports = function (percentageValue, options) {
options = options || {}
process.stdout.cursorTo(0)
const MAXIMUM = process.stdout.columns
const PROGRESS_BAR_COLOR = 'green'
const PEOGRESSBAR_SIZE = 10
// NOTE: A complete list can be found at https://en.wikipedia.org/wiki/Block_Elements
const PROGRESS_BAR_CHARACTER_DESIGN = '▄'
const progressBarColor = options.color ? options.color : PROGRESS_BAR_COLOR
let progressBarSize = options.sizeInColumns ? options.sizeInColumns : PEOGRESSBAR_SIZE
const progressBarCharacterDesign = options.design ? options.design : PROGRESS_BAR_CHARACTER_DESIGN
let counter = 0
let progressBar = ''
if (progressBarSize > process.stdout.columns || progressBarSize < 1) {
progressBarSize = MAXIMUM
}
percentageValue = percentageValue > 100 ? 100 : percentageValue
percentageValue = percentageValue < 0 ? 0 : percentageValue
for (counter = 0; counter < progressBarSize; counter++) {
progressBar = chalk.gray(progressBarCharacterDesign)
process.stdout.write(`${progressBar}`)
}
const STEPS = Math.floor((percentageValue * progressBarSize) / 100)
for (counter = 0; counter < STEPS; counter++) {
progressBar = chalk.blue(progressBarCharacterDesign)
switch (progressBarColor) {
case 'red':
progressBar = chalk.red(progressBarCharacterDesign)
break
case 'green':
progressBar = chalk.green(progressBarCharacterDesign)
break
case 'yellow':
progressBar = chalk.yellow(progressBarCharacterDesign)
break
case 'magenta':
progressBar = chalk.magenta(progressBarCharacterDesign)
break
case 'cyan':
progressBar = chalk.cyan(progressBarCharacterDesign)
break
case 'white':
progressBar = chalk.white(progressBarCharacterDesign)
break
case 'gray':
progressBar = chalk.gray(progressBarCharacterDesign)
break
default:
progressBar = chalk.blue(progressBarCharacterDesign)
break
}
process.stdout.cursorTo(counter)
process.stdout.write(`${progressBar}`)
}
if (options.hasNewLine) {
process.stdout.write('\n')
} else {
process.stdout.cursorTo(progressBarSize + 1)
process.stdout.write(' ')
}
}