UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

51 lines 6.03 kB
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=