38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
let startTime;
|
|
let current = 0;
|
|
let percentage;
|
|
|
|
const progressBar = (totalInMilliseconds, size, reset = false) => {
|
|
if (reset) {
|
|
startTime = Date.now();
|
|
current = 0;
|
|
}
|
|
|
|
if (!startTime) {
|
|
startTime = Date.now();
|
|
}
|
|
|
|
current = Date.now() - startTime;
|
|
|
|
const totalInSeconds = totalInMilliseconds / 1000;
|
|
percentage = Math.min((current / 1000) / totalInSeconds, 1);
|
|
const progress = Math.round((size * percentage));
|
|
const emptyProgress = size - progress;
|
|
|
|
const progressText = '▇'.repeat(progress);
|
|
const emptyProgressText = '—'.repeat(emptyProgress);
|
|
|
|
let elapsedTimeText = new Date(current).toISOString().slice(11, -5);
|
|
let totalTimeText = new Date(totalInMilliseconds).toISOString().slice(11, -5);
|
|
|
|
if (totalTimeText.startsWith('00:')) {
|
|
elapsedTimeText = elapsedTimeText.slice(3);
|
|
totalTimeText = totalTimeText.slice(3);
|
|
}
|
|
|
|
const progressBarString = `${elapsedTimeText} \`${progressText}${emptyProgressText}\` ${totalTimeText}`; // Creating and returning the bar
|
|
|
|
return { progressBarString, isDone: percentage === 1 };
|
|
};
|
|
|
|
module.exports.progressBar = progressBar; |