Files
vk-mute/src/utils/Url.js
2023-12-10 14:04:02 +03:00

43 lines
940 B
JavaScript

const INTERVAL_TIME = 100
export class UrlController {
constructor() {
this._changeListeners = []
this._interval = null
this._url = window.location.href
}
onChange(cb) {
this._changeListeners.push(cb)
if (this._interval === null)
this._createInterval()
}
removeEventListener(cb) {
this._changeListeners = this._changeListeners.filter(item => item !== cb)
if (this._changeListeners.length === 0)
this._clearInterval()
}
_intervalTick() {
const currentUrl = window.location.href
if (currentUrl !== this.url) {
this._broadcast(this.url, currentUrl)
this.url = currentUrl
}
}
_broadcast(oldUrl, newUrl) {
this._changeListeners.forEach(cb => cb(oldUrl, newUrl))
}
_createInterval() {
this.interval = setInterval(() => this._intervalTick(), INTERVAL_TIME)
}
_clearInterval() {
clearInterval(this.interval)
this.interval = null
}
}