@alauda-fe/common
Version:
Alauda frontend team common codes.
51 lines • 6.03 kB
JavaScript
import { Directive, ElementRef, EventEmitter, HostListener, Input, isDevMode, Output, } from '@angular/core';
import * as i0 from "@angular/core";
export class ClickOutsideDirective {
onBodyClick(event) {
const targetEl = event.target;
if (!this.el.nativeElement.contains(targetEl)) {
if (this.className) {
// @ts-ignore
for (const contain of document.querySelectorAll(`.${this.className}`)) {
if (contain.contains(targetEl)) {
return;
}
}
}
this.clickOutside.emit(event);
}
}
constructor(el) {
this.el = el;
this.clickOutside = new EventEmitter();
}
ngOnInit() {
if (isDevMode() &&
this.className &&
!this.className.startsWith('click-outside')) {
// 因为松耦合的设计,所以增加一个范式要求
console.error('aclClickOutside 必须是空或以 click-outside 开头');
}
}
static { this.ɵfac = function ClickOutsideDirective_Factory(t) { return new (t || ClickOutsideDirective)(i0.ɵɵdirectiveInject(i0.ElementRef)); }; }
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: ClickOutsideDirective, selectors: [["", "aclClickOutside", ""]], hostBindings: function ClickOutsideDirective_HostBindings(rf, ctx) { if (rf & 1) {
i0.ɵɵlistener("click", function ClickOutsideDirective_click_HostBindingHandler($event) { return ctx.onBodyClick($event); }, false, i0.ɵɵresolveDocument);
} }, inputs: { className: [0, "aclClickOutside", "className"] }, outputs: { clickOutside: "clickOutside" }, exportAs: ["aclClickOutside"], standalone: true }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClickOutsideDirective, [{
type: Directive,
args: [{
selector: '[aclClickOutside]',
exportAs: 'aclClickOutside',
standalone: true,
}]
}], () => [{ type: i0.ElementRef }], { className: [{
type: Input,
args: ['aclClickOutside']
}], clickOutside: [{
type: Output
}], onBodyClick: [{
type: HostListener,
args: ['document:click', ['$event']]
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvY29yZS9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFFVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7O0FBT3ZCLE1BQU0sT0FBTyxxQkFBcUI7SUFTaEMsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFjLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixhQUFhO2dCQUNiLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDdEUsSUFBSyxPQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO3dCQUN6QyxPQUFPO29CQUNULENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQTZCLEVBQTJCO1FBQTNCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBbEJ4RCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7SUFrQmtCLENBQUM7SUFFNUQsUUFBUTtRQUNOLElBQ0UsU0FBUyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFNBQVM7WUFDZCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUMzQyxDQUFDO1lBQ0Qsc0JBQXNCO1lBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztzRkFuQ1UscUJBQXFCO29FQUFyQixxQkFBcUI7WUFBckIsZ0dBQUEsdUJBQW1CLGlDQUFFOzs7aUZBQXJCLHFCQUFxQjtjQUxqQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsVUFBVSxFQUFFLElBQUk7YUFDakI7MkNBSUMsU0FBUztrQkFEUixLQUFLO21CQUFDLGlCQUFpQjtZQUl4QixZQUFZO2tCQURYLE1BQU07WUFJUCxXQUFXO2tCQURWLFlBQVk7bUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgaXNEZXZNb2RlLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thY2xDbGlja091dHNpZGVdJyxcbiAgZXhwb3J0QXM6ICdhY2xDbGlja091dHNpZGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDbGlja091dHNpZGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyDkuLrkuoblupTlr7nkvovlpoJkaWFsb2fnrYnmhJ/mgKfkuIrlsZ7kuo7or6XlrZDlhYPntKDnmoTngrnlh7ssIOaUr+aMgeS8oOWFpWNsYXNzTmFtZeeUqOS7peWIpOaWreaYr+WQpuaYr291dHNpZGVcbiAgQElucHV0KCdhY2xDbGlja091dHNpZGUnKVxuICBjbGFzc05hbWU6IHN0cmluZztcblxuICBAT3V0cHV0KClcbiAgY2xpY2tPdXRzaWRlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQm9keUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0RWwgPSBldmVudC50YXJnZXQgYXMgTm9kZTtcbiAgICBpZiAoIXRoaXMuZWwubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXRFbCkpIHtcbiAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGZvciAoY29uc3QgY29udGFpbiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt0aGlzLmNsYXNzTmFtZX1gKSkge1xuICAgICAgICAgIGlmICgoY29udGFpbiBhcyBOb2RlKS5jb250YWlucyh0YXJnZXRFbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2xpY2tPdXRzaWRlLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmIChcbiAgICAgIGlzRGV2TW9kZSgpICYmXG4gICAgICB0aGlzLmNsYXNzTmFtZSAmJlxuICAgICAgIXRoaXMuY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ2NsaWNrLW91dHNpZGUnKVxuICAgICkge1xuICAgICAgLy8g5Zug5Li65p2+6ICm5ZCI55qE6K6+6K6h77yM5omA5Lul5aKe5Yqg5LiA5Liq6IyD5byP6KaB5rGCXG4gICAgICBjb25zb2xlLmVycm9yKCdhY2xDbGlja091dHNpZGUg5b+F6aG75piv56m65oiW5LulIGNsaWNrLW91dHNpZGUg5byA5aS0Jyk7XG4gICAgfVxuICB9XG59XG4iXX0=