ng-devui
Version:
DevUI components based on Angular
97 lines • 9.94 kB
JavaScript
import { Directive, ElementRef, Host, HostBinding, HostListener, Input } from '@angular/core';
import { DropDownDirective } from './dropdown.directive';
import * as i0 from "@angular/core";
import * as i1 from "./dropdown.directive";
export class DropDownToggleDirective {
get tabIndex() {
return this.disabled ? null : 0;
}
get attrDisabled() {
return this.disabled ? 'disabled' : null;
}
get disabled() {
return this.dropdown && this.dropdown.disabled;
}
constructor(dropdown, el) {
this.dropdown = dropdown;
this.el = el;
this.addClass = true;
this.toggleOnFocus = false;
this.autoFocus = false;
this.isMouseEvent = false;
}
ngOnInit() {
this.dropdown.dropDownToggle = this;
}
ngAfterViewInit() {
if (this.autoFocus) {
setTimeout(() => {
this.el.nativeElement.focus();
}, 0);
}
}
toggleDropdown(event) {
if (!this.disabled && this.dropdown.trigger !== 'manually') {
this.dropdown.toggle();
}
return false;
}
// mousedown mouseup解决focus与click冲突问题
setMouseEventTrue(event) {
this.isMouseEvent = true;
}
setMouseEventFalse(event) {
this.isMouseEvent = false;
}
toggleOnFocusFn(event) {
if (this.toggleOnFocus && !this.disabled && !this.dropdown.isOpen && !this.isMouseEvent) {
this.dropdown.toggle();
}
}
toggle(event) {
if (this.disabled || this.dropdown.trigger === 'manually' || event.defaultPrevented) {
return;
}
this.dropdown.toggle();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropDownToggleDirective, deps: [{ token: i1.DropDownDirective, host: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DropDownToggleDirective, selector: "[dDropDownToggle]", inputs: { toggleOnFocus: "toggleOnFocus", autoFocus: "autoFocus" }, host: { listeners: { "click": "toggleDropdown($event)", "mousedown": "setMouseEventTrue($event)", "mouseup": "setMouseEventFalse($event)", "focus": "toggleOnFocusFn($event)", "keydown.enter": "toggle($event)" }, properties: { "attr.tabIndex": "this.tabIndex", "attr.disabled": "this.attrDisabled", "class.devui-dropdown-toggle": "this.addClass" } }, exportAs: ["d-dropdown-toggle"], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropDownToggleDirective, decorators: [{
type: Directive,
args: [{
selector: '[dDropDownToggle]',
exportAs: 'd-dropdown-toggle',
}]
}], ctorParameters: () => [{ type: i1.DropDownDirective, decorators: [{
type: Host
}] }, { type: i0.ElementRef }], propDecorators: { tabIndex: [{
type: HostBinding,
args: ['attr.tabIndex']
}], attrDisabled: [{
type: HostBinding,
args: ['attr.disabled']
}], addClass: [{
type: HostBinding,
args: ['class.devui-dropdown-toggle']
}], toggleOnFocus: [{
type: Input
}], autoFocus: [{
type: Input
}], toggleDropdown: [{
type: HostListener,
args: ['click', ['$event']]
}], setMouseEventTrue: [{
type: HostListener,
args: ['mousedown', ['$event']]
}], setMouseEventFalse: [{
type: HostListener,
args: ['mouseup', ['$event']]
}], toggleOnFocusFn: [{
type: HostListener,
args: ['focus', ['$event']]
}], toggle: [{
type: HostListener,
args: ['keydown.enter', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tdG9nZ2xlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL2Ryb3Bkb3duL2Ryb3Bkb3duLXRvZ2dsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBTXpELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsSUFBa0MsUUFBUTtRQUN4QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUNJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDakQsQ0FBQztJQU1ELFlBQTRCLFFBQTJCLEVBQVUsRUFBYztRQUFuRCxhQUFRLEdBQVIsUUFBUSxDQUFtQjtRQUFVLE9BQUUsR0FBRixFQUFFLENBQVk7UUFMbkMsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNuRCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBRThELENBQUM7SUFFcEYsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztJQUNILENBQUM7SUFHRCxjQUFjLENBQUMsS0FBaUI7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QscUNBQXFDO0lBRXJDLGlCQUFpQixDQUFDLEtBQUs7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQUs7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFpQjtRQUMvQixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLO1FBQ2pCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxVQUFVLElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFBQSxPQUFPO1FBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3pCLENBQUM7K0dBdkRVLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUpuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOzswQkFpQmMsSUFBSTtrRUFmaUIsUUFBUTtzQkFBekMsV0FBVzt1QkFBQyxlQUFlO2dCQUl4QixZQUFZO3NCQURmLFdBQVc7dUJBQUMsZUFBZTtnQkFPZ0IsUUFBUTtzQkFBbkQsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBQ2pDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFpQk4sY0FBYztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTakMsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFLckMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFLbkMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFPMUIsTUFBTTtzQkFEWixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdCwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJvcERvd25EaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Bkb3duLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkRHJvcERvd25Ub2dnbGVdJyxcbiAgZXhwb3J0QXM6ICdkLWRyb3Bkb3duLXRvZ2dsZScsXG59KVxuZXhwb3J0IGNsYXNzIERyb3BEb3duVG9nZ2xlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYkluZGV4JykgZ2V0IHRhYkluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gbnVsbCA6IDA7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRpc2FibGVkJylcbiAgZ2V0IGF0dHJEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBudWxsO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93biAmJiB0aGlzLmRyb3Bkb3duLmRpc2FibGVkO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGV2dWktZHJvcGRvd24tdG9nZ2xlJykgYWRkQ2xhc3MgPSB0cnVlO1xuICBASW5wdXQoKSB0b2dnbGVPbkZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IGZhbHNlO1xuICBpc01vdXNlRXZlbnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihASG9zdCgpIHByaXZhdGUgZHJvcGRvd246IERyb3BEb3duRGlyZWN0aXZlLCBwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRyb3Bkb3duLmRyb3BEb3duVG9nZ2xlID0gdGhpcztcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZURyb3Bkb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMuZHJvcGRvd24udHJpZ2dlciAhPT0gJ21hbnVhbGx5Jykge1xuICAgICAgdGhpcy5kcm9wZG93bi50b2dnbGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIG1vdXNlZG93biBtb3VzZXVw6Kej5YazZm9jdXPkuI5jbGlja+WGsueqgemXrumimFxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBzZXRNb3VzZUV2ZW50VHJ1ZShldmVudCkge1xuICAgIHRoaXMuaXNNb3VzZUV2ZW50ID0gdHJ1ZTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgc2V0TW91c2VFdmVudEZhbHNlKGV2ZW50KSB7XG4gICAgdGhpcy5pc01vdXNlRXZlbnQgPSBmYWxzZTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdmb2N1cycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZU9uRm9jdXNGbihldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICh0aGlzLnRvZ2dsZU9uRm9jdXMgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuZHJvcGRvd24uaXNPcGVuICYmICF0aGlzLmlzTW91c2VFdmVudCkge1xuICAgICAgdGhpcy5kcm9wZG93bi50b2dnbGUoKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyB0b2dnbGUoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmRyb3Bkb3duLnRyaWdnZXIgPT09ICdtYW51YWxseScgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge3JldHVybjsgfVxuICAgIHRoaXMuZHJvcGRvd24udG9nZ2xlKCk7XG4gIH1cbn1cbiJdfQ==