UNPKG

ferngully-aurelia-tools

Version:

Ferngully Tools for Aurelia

51 lines 2.2 kB
import { EventManager, bindingMode } from 'aurelia-binding'; const notApplicableMessage = 'The updateTrigger binding behavior can only be applied to two-way bindings on input/select elements.'; export class updateTriggerOnKeyPressBindingBehavior { constructor(eventManager) { this.eventManager = eventManager; } bind(binding, source, ...keyCodes) { if (binding.mode !== bindingMode.twoWay) { throw new Error(notApplicableMessage); } if (keyCodes.length === 0) { keyCodes = ["Enter"]; } let targetObserver = binding.observerLocator.getObserver(binding.target, binding.targetProperty); if (!targetObserver.handler) { throw new Error(notApplicableMessage); } binding.targetObserver = targetObserver; targetObserver.originalHandler = binding.targetObserver.handler; let handler = this.createElementHandlerforKeyCodes(['keydown'], keyCodes); targetObserver.handler = handler; } unbind(binding, source) { binding.targetObserver.handler = binding.targetObserver.originalHandler; binding.targetObserver.originalHandler = null; } createElementHandlerforKeyCodes(events, keyCodes) { return { subscribe(target, defaultBindingEventHandler) { let checkKey = (event) => { if (keyCodes.indexOf(event.key) !== -1) { event.stopPropagation(); defaultBindingEventHandler(event); return false; } return true; }; events.forEach(changeEvent => { target.addEventListener(changeEvent, checkKey, false); }); return function () { events.forEach(changeEvent => { target.removeEventListener(changeEvent, checkKey); }); }; } }; } } updateTriggerOnKeyPressBindingBehavior.inject = [EventManager]; //# sourceMappingURL=updateTriggerOnKeyPress.js.map