UNPKG

mframejs

Version:
81 lines (55 loc) 2.12 kB
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 } } } }