import {EventCaller} from '/app/js/EventCaller.js' /** * Wraps the browser's window object around the EventCaller allowing the user to connect to system events * by listening for those events (ex: "onclick", "onresize", etc). * * Users should not directly set the window event handler functions if using this class. */ class EventWindow extends EventCaller{ constructor(){ super(); if (!EventWindow.instance) EventWindow.instance = this; return EventWindow.instance; } listen(eventName, callback, owner=null, once=false){ if (window.hasOwnProperty(eventName)){ if (window[eventName] === null || typeof(window[eventName]) === 'undefined'){ window[eventName] = (function(event){ this.emit(eventName, event); }).bind(this); } super.listen(eventName, callback, owner, once); return this; } throw new ValueError("Window object has no event named '" + eventName +"'."); } unlisten(eventName, callback, owner=null){ if (window.hasOwnProperty(eventName)){ super.unlisten(eventName, callback, owner); if (super.event_listener_count(eventName) == 0){ window[eventName] = undefined; } } return this; } unlisten_event(eventName){ if (window.hasOwnProperty(eventName)){ super.unlisten_event(eventName); window[eventName] = undefined; } return this; } unlisten_all(){ var we = this.watchedEvents; super.unlisten_all(); for (var i=0; i < we.length; i++){ if (window.hasOwnProperty(we[i])){ window[we[i]] = undefined; } } return this; } } const instance = new EventWindow(); Object.freeze(instance); export default instance;