Explorar el Código

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 hace 6 años
padre
commit
57a782e971
Se han modificado 2 ficheros con 2 adiciones y 100 borrados
  1. +2
    -1
      app/js/EventCaller.js
  2. +0
    -99
      app/js/ui/EventWindow.js

+ 2
- 1
app/js/EventCaller.js Ver fichero

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



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




+ 0
- 99
app/js/ui/EventWindow.js Ver fichero

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


Cargando…
Cancelar
Guardar