ng-devui
Version:
DevUI components based on Angular
54 lines • 7.72 kB
JavaScript
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