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