| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | export default class Timer {	// eslint-disable-next-line require-jsdoc	constructor(callback, delay, paused) {		this.callback = callback;		this.timerId = undefined;		this.start = undefined;		this.paused = paused;		this.remaining = delay;		this.timeWhenPaused = 0;		this.timePaused = Date.now();		if (!paused) {			this.resume();		}	}	/**	 * Pauses the timer	 *	 */	pause() {		clearTimeout(this.timerId);		this.remaining -= Date.now() - this.start;		this.timePaused = Date.now();		this.paused = true;	}	/**	 * Ensures the timer's resume function is called if it is paused	 *	 */	ifNotPaused() {		if (!this.paused) {			this.resume();		}	}	/**	 * Resumes the timer	 *	 */	resume() {		this.start = Date.now();		clearTimeout(this.timerId);		this.timerId = setTimeout(this.callback, this.remaining);		this.timeWhenPaused = Date.now() - this.timePaused;		this.paused = false;	}	/**	 * Resets the time when paused	 *	 */	resetTimeWhenPaused() {		this.timeWhenPaused = 0;	}	/**	 * Gets the amount of time the timer has been paused	 *	 * @returns {Date} - the amount of time the timer has been paused	 */	getTimePaused() {		if (!this.paused) {			return this.timeWhenPaused;		}		return Date.now() - this.timePaused;	}}
 |