UNPKG

angular2-multievent-bindings-plugin

Version:

A small plugin which allows you to bind multiple events in your angular2 templates.

65 lines 8.26 kB
"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; require('@angular/common'); var event_manager_1 = require('@angular/platform-browser/src/dom/events/event_manager'); var core_1 = require('@angular/core'); var MultiEventPlugin = (function (_super) { __extends(MultiEventPlugin, _super); function MultiEventPlugin() { _super.apply(this, arguments); } MultiEventPlugin.prototype.getMultiEventArray = function (eventName) { return eventName.split(",") .filter(function (item, index) { return item && item != ''; }); }; MultiEventPlugin.prototype.supports = function (eventName) { return this.getMultiEventArray(eventName).length > 1; }; MultiEventPlugin.prototype.addEventListener = function (element, eventName, handler) { var _this = this; var zone = this.manager.getZone(); var eventsArray = this.getMultiEventArray(eventName); // Entering back into angular to trigger changeDetection var outsideHandler = function (event) { zone.run(function () { return handler(event); }); }; // Executed outside of angular so that change detection is not constantly triggered. var addAndRemoveHostListenersForOutsideEvents = function () { eventsArray.forEach(function (singleEventName) { _this.manager.addEventListener(element, singleEventName, outsideHandler); }); }; return this.manager.getZone().runOutsideAngular(addAndRemoveHostListenersForOutsideEvents); }; MultiEventPlugin.prototype.addGlobalEventListener = function (target, eventName, handler) { var _this = this; var zone = this.manager.getZone(); var eventsArray = this.getMultiEventArray(eventName); var outsideHandler = function (event) { return zone.run(function () { return handler(event); }); }; return this.manager.getZone().runOutsideAngular(function () { eventsArray.forEach(function (singleEventName) { _this.manager.addGlobalEventListener(target, singleEventName, outsideHandler); }); }); }; MultiEventPlugin = __decorate([ core_1.Injectable(), __metadata('design:paramtypes', []) ], MultiEventPlugin); return MultiEventPlugin; }(event_manager_1.EventManagerPlugin)); exports.MultiEventPlugin = MultiEventPlugin; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfZXZlbnQucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibXVsdGlfZXZlbnQucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLFFBQU8saUJBQWlCLENBQUMsQ0FBQTtBQUN6Qiw4QkFBK0Msd0RBQXdELENBQUMsQ0FBQTtBQUN4RyxxQkFBeUIsZUFBZSxDQUFDLENBQUE7QUFHekM7SUFBc0Msb0NBQWtCO0lBQXhEO1FBQXNDLDhCQUFrQjtJQXlDeEQsQ0FBQztJQXZDQyw2Q0FBa0IsR0FBbEIsVUFBbUIsU0FBaUI7UUFDbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ3hCLE1BQU0sQ0FBQyxVQUFDLElBQUksRUFBRSxLQUFLLElBQWdCLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7SUFFRCxtQ0FBUSxHQUFSLFVBQVMsU0FBaUI7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCwyQ0FBZ0IsR0FBaEIsVUFBaUIsT0FBb0IsRUFBRSxTQUFpQixFQUFFLE9BQWlCO1FBQTNFLGlCQWlCQztRQWhCQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyRCx3REFBd0Q7UUFDeEQsSUFBSSxjQUFjLEdBQUcsVUFBQyxLQUFVO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBTSxPQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBZCxDQUFjLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUM7UUFFRixvRkFBb0Y7UUFDcEYsSUFBSSx5Q0FBeUMsR0FBRztZQUM5QyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQUMsZUFBdUI7Z0JBQzFDLEtBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUMxRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELGlEQUFzQixHQUF0QixVQUF1QixNQUFjLEVBQUUsU0FBaUIsRUFBRSxPQUFpQjtRQUEzRSxpQkFVQztRQVRDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELElBQUksY0FBYyxHQUFHLFVBQUMsS0FBVSxJQUFLLE9BQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFNLE9BQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFkLENBQWMsQ0FBQyxFQUE5QixDQUE4QixDQUFDO1FBRXBFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQzlDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQyxlQUF1QjtnQkFDMUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQy9FLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBekNIO1FBQUMsaUJBQVUsRUFBRTs7d0JBQUE7SUEwQ2IsdUJBQUM7QUFBRCxDQUFDLEFBekNELENBQXNDLGtDQUFrQixHQXlDdkQ7QUF6Q1ksd0JBQWdCLG1CQXlDNUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7RXZlbnRNYW5hZ2VyUGx1Z2luLCBFdmVudE1hbmFnZXJ9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvc3JjL2RvbS9ldmVudHMvZXZlbnRfbWFuYWdlcic7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTXVsdGlFdmVudFBsdWdpbiBleHRlbmRzIEV2ZW50TWFuYWdlclBsdWdpbiB7XG4gIG1hbmFnZXI6IEV2ZW50TWFuYWdlcjtcbiAgZ2V0TXVsdGlFdmVudEFycmF5KGV2ZW50TmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBldmVudE5hbWUuc3BsaXQoXCIsXCIpXG4gICAgICAuZmlsdGVyKChpdGVtLCBpbmRleCk6IGJvb2xlYW4gPT4geyByZXR1cm4gaXRlbSAmJiBpdGVtICE9ICcnIH0pXG4gIH1cblxuICBzdXBwb3J0cyhldmVudE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldE11bHRpRXZlbnRBcnJheShldmVudE5hbWUpLmxlbmd0aCA+IDE7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogRnVuY3Rpb24pOiBGdW5jdGlvbiB7XG4gICAgdmFyIHpvbmUgPSB0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpO1xuICAgIHZhciBldmVudHNBcnJheSA9IHRoaXMuZ2V0TXVsdGlFdmVudEFycmF5KGV2ZW50TmFtZSk7XG5cbiAgICAvLyBFbnRlcmluZyBiYWNrIGludG8gYW5ndWxhciB0byB0cmlnZ2VyIGNoYW5nZURldGVjdGlvblxuICAgIHZhciBvdXRzaWRlSGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgICB6b25lLnJ1bigoKSA9PiBoYW5kbGVyKGV2ZW50KSk7XG4gICAgfTtcblxuICAgIC8vIEV4ZWN1dGVkIG91dHNpZGUgb2YgYW5ndWxhciBzbyB0aGF0IGNoYW5nZSBkZXRlY3Rpb24gaXMgbm90IGNvbnN0YW50bHkgdHJpZ2dlcmVkLlxuICAgIHZhciBhZGRBbmRSZW1vdmVIb3N0TGlzdGVuZXJzRm9yT3V0c2lkZUV2ZW50cyA9ICgpID0+IHtcbiAgICAgIGV2ZW50c0FycmF5LmZvckVhY2goKHNpbmdsZUV2ZW50TmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGVsZW1lbnQsIHNpbmdsZUV2ZW50TmFtZSwgb3V0c2lkZUhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoYWRkQW5kUmVtb3ZlSG9zdExpc3RlbmVyc0Zvck91dHNpZGVFdmVudHMpO1xuICB9XG5cbiAgYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0YXJnZXQ6IHN0cmluZywgZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgIHZhciB6b25lID0gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKTtcbiAgICB2YXIgZXZlbnRzQXJyYXkgPSB0aGlzLmdldE11bHRpRXZlbnRBcnJheShldmVudE5hbWUpO1xuICAgIHZhciBvdXRzaWRlSGFuZGxlciA9IChldmVudDogYW55KSA9PiB6b25lLnJ1bigoKSA9PiBoYW5kbGVyKGV2ZW50KSk7XG5cbiAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBldmVudHNBcnJheS5mb3JFYWNoKChzaW5nbGVFdmVudE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0YXJnZXQsIHNpbmdsZUV2ZW50TmFtZSwgb3V0c2lkZUhhbmRsZXIpO1xuICAgICAgfSlcbiAgICB9KTtcbiAgfVxufVxuXG4iXX0=