|
|
@@ -0,0 +1,55 @@ |
|
|
|
import '/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. |
|
|
|
*/ |
|
|
|
export class EventWindow extends EventCaller{ |
|
|
|
constructor(){ |
|
|
|
super(); |
|
|
|
} |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
} |