class SlideShow {
constructor(slides, timeout) { if(slides.length < 2) { console.error("Aww, Jeeze! You need more slides!"); } this._slides = slides; this._first = 0; this._last = this._slides.length - 1; this._index = this._first; this.showSlide(this._index++); if(timeout) { this.spawnTimerWorker(); } } spawnTimerWorker() { this._timer = new Worker("/assets/js/slideshow/timer_worker.js"); this._timer.postMessage("go"); this._timer.addEventListener("message", _ => { this.nextSlide() }); this._timer.addEventListener("error", _ => { console.error("Woah! Something went wrong there!") }); } restartTimerWorker() { this._timer.terminate(); this.spawnTimerWorker(); } assessBounds(direction) { if(direction === "forward") { if(this._index > this._last) { this._index = this._first; } } else if(direction === "backward") { if(this._index < this._first) { this._index = this._last; } } } showSlide(index) { document.getElementById(this._slides[index]).style.display = "block"; } closeSlide(index) { document.getElementById(this._slides[index]).style.display = "none"; } closeSlides() { for(let i = this._first; i <= this._last; i++) { if(i !== this._index) { this.closeSlide(i); } } } nextSlide() { this.restartTimerWorker(); this.closeSlides(); this.showSlide(this._index++); this.assessBounds("forward"); } previousSlide() { this.restartTimerWorker(); this.closeSlides(); this.showSlide(this._index--); this.assessBounds("backward"); }
}