import { Options, Data, RETURN_FLAG, ensureProperties } from './utils'; export class ListenerArgs { public evt: Event; public data: D; public target: Element; } export class DefaultListenerArgs extends ListenerArgs { } export class Listener { public selector: string = ''; public listener: Listener; constructor(public options: O, listener: Listener = {} as Listener) { this.listener = ensureProperties(listener, { selector: '', down(_) { }, start(_) { }, update(_) { }, end(_) { }, cancel() { }, stop() { } } as Listener); } public down(args: ListenerArgs): number { return RETURN_FLAG.map(this.listener.down(args)); } public start(args: ListenerArgs): number { let result = RETURN_FLAG.map(this.listener.start(args)); if (!(result & RETURN_FLAG.START_EMITTED)) { result += RETURN_FLAG.START_EMITTED; } return result; } public update(args: ListenerArgs): number { return RETURN_FLAG.map(this.listener.update(args)); } public end(args: ListenerArgs): number { return RETURN_FLAG.map(this.listener.end(args)); } public cancel(): number { return RETURN_FLAG.map(this.listener.cancel()); } public stop() { this.listener.stop(); } } export class DefaultListener extends Listener { }