UNPKG

ferngully-aurelia-tools

Version:

Ferngully Tools for Aurelia

59 lines 2.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var aurelia_binding_1 = require("aurelia-binding"); var notApplicableMessage = 'The updateTrigger binding behavior can only be applied to two-way bindings on input/select elements.'; var updateTriggerOnKeyPressBindingBehavior = (function () { function updateTriggerOnKeyPressBindingBehavior(eventManager) { this.eventManager = eventManager; } updateTriggerOnKeyPressBindingBehavior.prototype.bind = function (binding, source) { var keyCodes = []; for (var _i = 2; _i < arguments.length; _i++) { keyCodes[_i - 2] = arguments[_i]; } if (binding.mode !== aurelia_binding_1.bindingMode.twoWay) { throw new Error(notApplicableMessage); } if (keyCodes.length === 0) { keyCodes = ["Enter"]; } var targetObserver = binding.observerLocator.getObserver(binding.target, binding.targetProperty); if (!targetObserver.handler) { throw new Error(notApplicableMessage); } binding.targetObserver = targetObserver; targetObserver.originalHandler = binding.targetObserver.handler; var handler = this.createElementHandlerforKeyCodes(['keydown'], keyCodes); targetObserver.handler = handler; }; updateTriggerOnKeyPressBindingBehavior.prototype.unbind = function (binding, source) { binding.targetObserver.handler = binding.targetObserver.originalHandler; binding.targetObserver.originalHandler = null; }; updateTriggerOnKeyPressBindingBehavior.prototype.createElementHandlerforKeyCodes = function (events, keyCodes) { return { subscribe: function (target, defaultBindingEventHandler) { var checkKey = function (event) { if (keyCodes.indexOf(event.key) !== -1) { event.stopPropagation(); defaultBindingEventHandler(event); return false; } return true; }; events.forEach(function (changeEvent) { target.addEventListener(changeEvent, checkKey, false); }); return function () { events.forEach(function (changeEvent) { target.removeEventListener(changeEvent, checkKey); }); }; } }; }; updateTriggerOnKeyPressBindingBehavior.inject = [aurelia_binding_1.EventManager]; return updateTriggerOnKeyPressBindingBehavior; }()); exports.updateTriggerOnKeyPressBindingBehavior = updateTriggerOnKeyPressBindingBehavior; //# sourceMappingURL=updateTriggerOnKeyPress.js.map