mirror of
https://github.com/anatolykopyl/vk-mute.git
synced 2026-03-26 12:55:13 +00:00
43 lines
940 B
JavaScript
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
|
|
}
|
|
}
|