UNPKG

ng-devui

Version:

DevUI components based on Angular

54 lines 7.72 kB
import { DOCUMENT } from '@angular/common'; import { Inject, Injectable } from '@angular/core'; import * as i0 from "@angular/core"; export class DropDownService { constructor(doc) { this.doc = doc; this.documentClickTimeOut = null; this.closeDropdownBind = this.closeDropdown.bind(this); this.document = this.doc; } open(dropdownScope) { if (!this.openScope) { // 延时绑定document事件,防止事件冒泡导致立即触发 this.documentClickTimeOut = setTimeout(() => { this.document.addEventListener('click', this.closeDropdownBind); }); } this.openScope = dropdownScope; } close(dropdownScope) { if (this.openScope !== dropdownScope) { return; } this.openScope = null; clearTimeout(this.documentClickTimeOut); this.document.removeEventListener('click', this.closeDropdownBind); } closeDropdown(event) { if (event && this.openScope?.menuEl) { const menuEl = this.openScope.menuEl.nativeElement; const target = event.target; const className = target && typeof target.className === 'string' ? target.className : ''; const rules = [ className.indexOf('disabled') > -1, /input|textarea/i.test(target.tagName) && menuEl.contains(target), this.openScope.closeScope === 'none', menuEl.contains(target) && this.openScope.closeScope === 'blank', this.openScope.dropdownChildren.some((children) => children.toggleEl.nativeElement.contains(target)), ]; if (!rules.includes(true)) { this.openScope.isOpen = false; } } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropDownService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropDownService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropDownService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL2Ryb3Bkb3duL2Ryb3Bkb3duLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUluRCxNQUFNLE9BQU8sZUFBZTtJQUsxQixZQUFzQyxHQUFRO1FBQVIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUh0Qyx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsc0JBQWlCLEdBQWtCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBR3ZFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBRU0sSUFBSSxDQUFDLGFBQWdDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztJQUNqQyxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWdDO1FBQzNDLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWlCO1FBQ3JDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ25ELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFpQixDQUFDO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekYsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxLQUFLLE1BQU07Z0JBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssT0FBTztnQkFDaEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyRyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0E1Q1UsZUFBZSxrQkFLTixRQUFRO21IQUxqQixlQUFlOzs0RkFBZixlQUFlO2tCQUQzQixVQUFVOzswQkFNSSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEcm9wRG93bkRpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcGRvd24uZGlyZWN0aXZlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERyb3BEb3duU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBvcGVuU2NvcGU6IERyb3BEb3duRGlyZWN0aXZlO1xyXG4gIHByaXZhdGUgZG9jdW1lbnRDbGlja1RpbWVPdXQgPSBudWxsO1xyXG4gIHByaXZhdGUgY2xvc2VEcm9wZG93bkJpbmQ6IEV2ZW50TGlzdGVuZXIgPSB0aGlzLmNsb3NlRHJvcGRvd24uYmluZCh0aGlzKTtcclxuICBkb2N1bWVudDogRG9jdW1lbnQ7XHJcbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2M6IGFueSkge1xyXG4gICAgdGhpcy5kb2N1bWVudCA9IHRoaXMuZG9jO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW4oZHJvcGRvd25TY29wZTogRHJvcERvd25EaXJlY3RpdmUpIHtcclxuICAgIGlmICghdGhpcy5vcGVuU2NvcGUpIHtcclxuICAgICAgLy8g5bu25pe257uR5a6aZG9jdW1lbnTkuovku7bvvIzpmLLmraLkuovku7blhpLms6Hlr7zoh7Tnq4vljbPop6blj5FcclxuICAgICAgdGhpcy5kb2N1bWVudENsaWNrVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsb3NlRHJvcGRvd25CaW5kKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wZW5TY29wZSA9IGRyb3Bkb3duU2NvcGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UoZHJvcGRvd25TY29wZTogRHJvcERvd25EaXJlY3RpdmUpIHtcclxuICAgIGlmICh0aGlzLm9wZW5TY29wZSAhPT0gZHJvcGRvd25TY29wZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wZW5TY29wZSA9IG51bGw7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kb2N1bWVudENsaWNrVGltZU91dCk7XHJcbiAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbG9zZURyb3Bkb3duQmluZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlRHJvcGRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmIChldmVudCAmJiB0aGlzLm9wZW5TY29wZT8ubWVudUVsKSB7XHJcbiAgICAgIGNvbnN0IG1lbnVFbCA9IHRoaXMub3BlblNjb3BlLm1lbnVFbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgRWxlbWVudDtcclxuICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQuY2xhc3NOYW1lID09PSAnc3RyaW5nJyA/IHRhcmdldC5jbGFzc05hbWUgOiAnJztcclxuICAgICAgY29uc3QgcnVsZXMgPSBbXHJcbiAgICAgICAgY2xhc3NOYW1lLmluZGV4T2YoJ2Rpc2FibGVkJykgPiAtMSxcclxuICAgICAgICAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KHRhcmdldC50YWdOYW1lKSAmJiBtZW51RWwuY29udGFpbnModGFyZ2V0KSxcclxuICAgICAgICB0aGlzLm9wZW5TY29wZS5jbG9zZVNjb3BlID09PSAnbm9uZScsXHJcbiAgICAgICAgbWVudUVsLmNvbnRhaW5zKHRhcmdldCkgJiYgdGhpcy5vcGVuU2NvcGUuY2xvc2VTY29wZSA9PT0gJ2JsYW5rJyxcclxuICAgICAgICB0aGlzLm9wZW5TY29wZS5kcm9wZG93bkNoaWxkcmVuLnNvbWUoKGNoaWxkcmVuKSA9PiBjaGlsZHJlbi50b2dnbGVFbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpLFxyXG4gICAgICBdO1xyXG4gICAgICBpZiAoIXJ1bGVzLmluY2x1ZGVzKHRydWUpKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuU2NvcGUuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19