fabric8-planner
Version:
A planner front-end for Fabric8.
46 lines • 1.76 kB
JavaScript
import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';
var ClickOutDirective = /** @class */ (function () {
function ClickOutDirective(element) {
this.element = element;
this.clickOut = new EventEmitter();
this.isExcluded = false;
}
ClickOutDirective.prototype.onClick = function (event, target) {
if (!target) {
return;
}
var clickedInside = this.element.nativeElement.contains(target);
if (this.exclude) {
this.isExcluded = this.excludeCheck(target);
}
if (!clickedInside && !this.isExcluded) {
this.clickOut.emit(event);
}
};
ClickOutDirective.prototype.excludeCheck = function (target) {
var excludeElements = Array.from(document.querySelectorAll(this.exclude));
for (var _i = 0, excludeElements_1 = excludeElements; _i < excludeElements_1.length; _i++) {
var element = excludeElements_1[_i];
if (element.contains(target)) {
return true;
}
}
};
ClickOutDirective.decorators = [
{ type: Directive, args: [{
selector: '[clickOut]'
},] },
];
/** @nocollapse */
ClickOutDirective.ctorParameters = function () { return [
{ type: ElementRef, },
]; };
ClickOutDirective.propDecorators = {
'exclude': [{ type: Input, args: ['exclude',] },],
'clickOut': [{ type: Output, args: ['clickOut',] },],
'onClick': [{ type: HostListener, args: ['document:click', ['$event', '$event.target'],] },],
};
return ClickOutDirective;
}());
export { ClickOutDirective };
//# sourceMappingURL=clickout.directive.js.map