12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- module.exports = function (progress) {
- function bar (r) {
- var s = '\r', M = 50
- for(var i = 0; i < M; i++)
- s += i < M*r ? '*' : '.'
- return s
- }
- function round (n, p) {
- return Math.round(n * p) / p
- }
- function percent (n) {
- return (round(n, 1000)*100).toString().substring(0, 4)+'%'
- }
- function rate (prog) {
- if(prog.target == prog.current) return 1
- return (prog.current - prog.start) / (prog.target - prog.start)
- }
- var prog = -1
- var int = setInterval(function () {
- var p = progress()
- var r = 1, c = 0
- var tasks = []
- for(var k in p) {
- var _r = rate(p[k])
- if(_r < 1)
- tasks.push(k+':'+percent(_r))
- r = Math.min(_r, r)
- c++
- }
- if(r != prog) {
- prog = r
- var msg = tasks.join(', ')
- process.stdout.write('\r'+bar(prog) + ' ('+msg+')\x1b[K\r')
- }
- }, 333)
- int.unref && int.unref()
- }
|