UNPKG

aurelia-binding

Version:

A modern databinding library for JavaScript and HTML.

87 lines (79 loc) 2.28 kB
export class ListenerExpression { constructor(eventManager, targetEvent, sourceExpression, delegationStrategy, preventDefault, lookupFunctions) { this.eventManager = eventManager; this.targetEvent = targetEvent; this.sourceExpression = sourceExpression; this.delegationStrategy = delegationStrategy; this.discrete = true; this.preventDefault = preventDefault; this.lookupFunctions = lookupFunctions; } createBinding(target) { return new Listener( this.eventManager, this.targetEvent, this.delegationStrategy, this.sourceExpression, target, this.preventDefault, this.lookupFunctions ); } } export class Listener { constructor(eventManager, targetEvent, delegationStrategy, sourceExpression, target, preventDefault, lookupFunctions) { this.eventManager = eventManager; this.targetEvent = targetEvent; this.delegationStrategy = delegationStrategy; this.sourceExpression = sourceExpression; this.target = target; this.preventDefault = preventDefault; this.lookupFunctions = lookupFunctions; } callSource(event) { let overrideContext = this.source.overrideContext; overrideContext.$event = event; let mustEvaluate = true; let result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate); delete overrideContext.$event; if (result !== true && this.preventDefault) { event.preventDefault(); } return result; } handleEvent(event) { this.callSource(event); } bind(source) { if (this.isBound) { if (this.source === source) { return; } this.unbind(); } this.isBound = true; this.source = source; if (this.sourceExpression.bind) { this.sourceExpression.bind(this, source, this.lookupFunctions); } this._handler = this.eventManager.addEventListener( this.target, this.targetEvent, this, this.delegationStrategy, true ); } unbind() { if (!this.isBound) { return; } this.isBound = false; if (this.sourceExpression.unbind) { this.sourceExpression.unbind(this, this.source); } this.source = null; this._handler.dispose(); this._handler = null; } }