mframejs
Version:
simple framework
81 lines (55 loc) • 2.12 kB
text/typescript
import { DOM } from '../utils/exported';
/**
* will be event handler, just need to rethink and redo it all
* main pointis to delegate the events, so we have 1 event listener for many elements and let event bubble
*
*/
export class DomEventHandler {
private eventHandlerBinded: any;
private count = 0;
private id: any[] = [];
private events: any[] = [];
private target: any[] = [];
private call: any[] = [];
constructor() {
this.eventHandlerBinded = this.eventHandler.bind(this);
}
public listenFor(event: string, target: any, call: Function): number {
this.count++;
if (this.events.indexOf(event) === -1) {
this.addEventListener(event);
}
this.id.push(this.count);
this.events.push(event);
this.target.push(target);
this.call.push(call);
return this.count;
}
public removeListener(id: number): void {
this.id.splice(id, 1);
const event = this.events.splice(id, 1);
this.target.splice(id, 1);
this.call.splice(id, 1);
if (this.events.indexOf(event) === -1) {
this.removeEventListener(event);
}
}
private addEventListener(event: any): void {
(DOM.document.body as any).addEventListener(event, (this.eventHandlerBinded as EventListenerOrEventListenerObject), false);
}
private removeEventListener(event: any): void {
(DOM.document.body as any).removeEventListener(event, (this.eventHandlerBinded as EventListenerOrEventListenerObject), false);
}
private eventHandler(event: any): void {
const targetID = this.target.indexOf(event.target);
const targetEvent = this.events[targetID];
const eventID = this.events.indexOf(event.type);
if (eventID !== -1 && targetID !== -1) {
if (targetID !== -1 && targetEvent === event.type) {
this.call[targetID](event);
} else {
// todo
}
}
}
}