Quellcode durchsuchen

Completely misunderstood built in Javascript event listeners. EventWindow Removed. EventCaller now exports an instance of itself by default, but classes can still etend from the EventCaller class itself.

dev-tmpl
Bryan Miller vor 6 Jahren
Ursprung
Commit
57a782e971
2 geänderte Dateien mit 2 neuen und 100 gelöschten Zeilen
  1. +2
    -1
      app/js/EventCaller.js
  2. +0
    -99
      app/js/ui/EventWindow.js

+ 2
- 1
app/js/EventCaller.js Datei anzeigen

@@ -195,7 +195,8 @@ export class EventCaller{
}



const GlobalEvent = new EventCaller();
export default GlobalEvent;




+ 0
- 99
app/js/ui/EventWindow.js Datei anzeigen

@@ -1,99 +0,0 @@
import {EventCaller} from '/app/js/EventCaller.js'



function handle_emitter(event){
var el = event.target;
if (el.hasAttribute("emit")){
var args = [el.getAttribute("emit")];
if (el.hasAttribute("emit-args")){
try {
var j = JSON.parse(el.getAttribute("emit-args"));
if (j instanceof Array){
args.concat(j);
} else {
args.push(j);
}
} catch (e) {
console.log("Failed to emit '" + args[0] + "'. Arguments not in valid JSON form.");
return;
}
}
EventWindow.instance.emit.apply(EventWindow.instance, args);
}
}


/**
* 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;
}

get emitter_attributes_enabled(){
return this.is_listening("onclick", handle_emitter);
}

enable_emitter_attributes(enable=true){
if (enable === true){
this.listen("onclick", handle_emitter);
} else {
this.unlisten("onclick", handle_emitter);
}
}

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;
}

unlisten(eventName, callback, owner=null){
super.unlisten(eventName, callback, owner);
if (window.hasOwnProperty(eventName)){
if (super.event_listener_count(eventName) == 0){
window[eventName] = undefined;
}
}
return this;
}

unlisten_event(eventName){
super.unlisten_event(eventName);
if (window.hasOwnProperty(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;


Laden…
Abbrechen
Speichern