jw-ng-forward
Version:
Temporary package. The default solution for those that want to write Angular 2.x style code in Angular 1.x
101 lines (100 loc) • 3.9 kB
JavaScript
;
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);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var directive_1 = require("../decorators/directive");
var inject_1 = require("../decorators/inject");
var parse_selector_1 = __importDefault(require("../util/parse-selector"));
var helpers_1 = require("../util/helpers");
var eventList = new Set([
'click',
'dblclick',
'mousedown',
'mouseup',
'mouseover',
'mouseout',
'mousemove',
'mouseenter',
'mouseleave',
'keydown',
'keyup',
'keypress',
'submit',
'focus',
'blur',
'copy',
'cut',
'paste',
'change',
'dragstart',
'drag',
'dragenter',
'dragleave',
'dragover',
'drop',
'dragend',
'error',
'input',
'load',
'wheel',
'scroll'
]);
function resolve() {
var directives = [];
eventList.forEach(function (event) {
var selector = "[(" + helpers_1.dasherize(event) + ")]";
var EventHandler = (function () {
function EventHandler($parse, $element, $attrs, $scope) {
var _this = this;
this.$element = $element;
this.$scope = $scope;
var attrName = parse_selector_1.default(selector).name;
this.expression = $parse($attrs[attrName]);
$element.on(event, function (e) { return _this.eventHandler(e); });
$scope.$on('$destroy', function () { return _this.onDestroy(); });
}
EventHandler.prototype.eventHandler = function ($event) {
if ($event === void 0) { $event = {}; }
if ($event.detail && $event.detail._output !== undefined) {
$event = $event.detail._output;
}
if ($event && $event.originalEvent && $event.originalEvent.detail && $event.originalEvent.detail._output) {
$event = $event.detail._output;
}
if ($event && $event.originalEvent && $event.originalEvent.detail)
$event = $event.originalEvent.detail._output;
this.expression(this.$scope, { $event: $event });
this.$scope.$applyAsync();
};
EventHandler.prototype.onDestroy = function () {
this.$element.off(event);
};
EventHandler = __decorate([
directive_1.Directive({ selector: selector }),
inject_1.Inject('$parse', '$element', '$attrs', '$scope'),
__metadata("design:paramtypes", [Function, Object, Object, Object])
], EventHandler);
return EventHandler;
}());
directives.push(EventHandler);
});
return directives;
}
function add() {
var customEvents = [];
for (var _i = 0; _i < arguments.length; _i++) {
customEvents[_i] = arguments[_i];
}
customEvents.forEach(function (event) { return eventList.add(event); });
}
exports.events = { resolve: resolve, add: add };