124 lines
3.1 KiB
JavaScript
124 lines
3.1 KiB
JavaScript
const _GenericBar = require('./generic-bar');
|
|
const _options = require('./options');
|
|
|
|
// Progress-Bar constructor
|
|
module.exports = class SingleBar extends _GenericBar{
|
|
|
|
constructor(options, preset){
|
|
super(_options.parse(options, preset));
|
|
|
|
// the update timer
|
|
this.timer = null;
|
|
|
|
// disable synchronous updates in notty mode
|
|
if (this.options.noTTYOutput && this.terminal.isTTY() === false){
|
|
this.options.synchronousUpdate = false;
|
|
}
|
|
|
|
// update interval
|
|
this.schedulingRate = (this.terminal.isTTY() ? this.options.throttleTime : this.options.notTTYSchedule);
|
|
}
|
|
|
|
// internal render function
|
|
render(){
|
|
// stop timer
|
|
if (this.timer){
|
|
clearTimeout(this.timer);
|
|
this.timer = null;
|
|
}
|
|
|
|
// run internal rendering
|
|
super.render();
|
|
|
|
// add new line in notty mode!
|
|
if (this.options.noTTYOutput && this.terminal.isTTY() === false){
|
|
this.terminal.newline();
|
|
}
|
|
|
|
// next update
|
|
this.timer = setTimeout(this.render.bind(this), this.schedulingRate);
|
|
}
|
|
|
|
update(current, payload){
|
|
// timer inactive ?
|
|
if (!this.timer) {
|
|
return;
|
|
}
|
|
|
|
super.update(current, payload);
|
|
|
|
// trigger synchronous update ?
|
|
// check for throttle time
|
|
if (this.options.synchronousUpdate && (this.lastRedraw + this.options.throttleTime*2) < Date.now()){
|
|
// force update
|
|
this.render();
|
|
}
|
|
}
|
|
|
|
// start the progress bar
|
|
start(total, startValue, payload){
|
|
// progress updates are only visible in TTY mode!
|
|
if (this.options.noTTYOutput === false && this.terminal.isTTY() === false){
|
|
return;
|
|
}
|
|
|
|
// save current cursor settings
|
|
this.terminal.cursorSave();
|
|
|
|
// hide the cursor ?
|
|
if (this.options.hideCursor === true){
|
|
this.terminal.cursor(false);
|
|
}
|
|
|
|
// disable line wrapping ?
|
|
if (this.options.linewrap === false){
|
|
this.terminal.lineWrapping(false);
|
|
}
|
|
|
|
// initialize bar
|
|
super.start(total, startValue, payload);
|
|
|
|
// redraw on start!
|
|
this.render();
|
|
}
|
|
|
|
// stop the bar
|
|
stop(){
|
|
// timer inactive ?
|
|
if (!this.timer) {
|
|
return;
|
|
}
|
|
|
|
// trigger final rendering
|
|
this.render();
|
|
|
|
// restore state
|
|
super.stop();
|
|
|
|
// stop timer
|
|
clearTimeout(this.timer);
|
|
this.timer = null;
|
|
|
|
// cursor hidden ?
|
|
if (this.options.hideCursor === true){
|
|
this.terminal.cursor(true);
|
|
}
|
|
|
|
// re-enable line wrapping ?
|
|
if (this.options.linewrap === false){
|
|
this.terminal.lineWrapping(true);
|
|
}
|
|
|
|
// restore cursor on complete (position + settings)
|
|
this.terminal.cursorRestore();
|
|
|
|
// clear line on complete ?
|
|
if (this.options.clearOnComplete){
|
|
this.terminal.cursorTo(0, null);
|
|
this.terminal.clearLine();
|
|
}else{
|
|
// new line on complete
|
|
this.terminal.newline();
|
|
}
|
|
}
|
|
} |