Sha256: 4f23741ad10a8fee08073d1f1dde5cb06aee217d642e308851a3cb4fd00aff78
Contents?: true
Size: 1.31 KB
Versions: 24
Compression:
Stored size: 1.31 KB
Contents
import { Controller } from "@hotwired/stimulus" export default class extends Controller { static values = { src: String, interval: 60000 } static targets = ["progressBar"] connect() { this.startRefreshProcess() if (this.hasProgressBarTarget) { this.resetProgressBar() } else { setTimeout(() => { this.resetProgressBar() }, 500) } } disconnect() { this.stopRefreshProcess() } startRefreshProcess() { this.intervalId = setInterval(() => { this.refreshContent() }, this.intervalValue) } stopRefreshProcess() { clearInterval(this.intervalId) clearInterval(this.countdownId) } refreshContent() { if (this.element.src) { this.element.reload() } else { this.element.setAttribute('src', this.srcValue) } this.resetProgressBar() } startProgressBar() { let percentage = 100 this.progressBarTarget.style.width = `${percentage}%` const countdown = () => { percentage -= 100 / (this.intervalValue / 500) this.progressBarTarget.style.width = `${percentage}%` if (percentage <= 0) { clearInterval(this.countdownId) } } this.countdownId = setInterval(countdown, 500) } resetProgressBar() { clearInterval(this.countdownId) this.startProgressBar() } }
Version data entries
24 entries across 24 versions & 1 rubygems