@ctrl/ngx-rightclick
Version:
GitHub Buttons for Angular. Star, Like, Follow and more
76 lines • 9.6 kB
JavaScript
import { Directive, HostListener, Input, Output, EventEmitter, } from '@angular/core';
import { ContextMenuService } from './context-menu.service';
export class ContextSubmenuTriggerDirective {
constructor(contextMenuService) {
this.contextMenuService = contextMenuService;
this.hoverDelay = 500;
this.openDelay = 200;
this.menuAction = new EventEmitter();
this.menuClose = new EventEmitter();
this.visible = false;
this.level = 1;
// get current level
setTimeout(() => (this.level = this.contextMenuService.getCurrentLevel()));
}
handleSubMenuClick($event) {
$event.preventDefault();
$event.stopPropagation();
clearTimeout(this.opentimer);
clearTimeout(this.closetimer);
this.menu = this.contextMenuService.show($event, this.contextSubmenuTrigger, this.menuContext, this.menuClose, this.menuAction, true, this.level);
this.visible = true;
}
handleSubMenuEnter($event) {
if (this.menu) {
this.menu.isTriggerHovered.next(true);
}
clearTimeout(this.closetimer);
this.opentimer = setTimeout(() => {
this.menu = this.contextMenuService.show($event, this.contextSubmenuTrigger, this.menuContext, this.menuClose, this.menuAction, true, this.level);
this.visible = true;
this.opentimer = null;
}, this.openDelay);
}
/**
* submenu hides after cursor has exited for a period of time
*/
handleSubMenuExit() {
clearTimeout(this.opentimer);
if (this.menu) {
this.menu.isTriggerHovered.next(false);
}
this.closetimer = setTimeout(() => {
if (this.menu) {
this.menu.isTriggerHovered.next(false);
this.contextMenuService.closeSubMenu(this.menu.id);
this.menu = undefined;
}
this.visible = false;
}, this.hoverDelay);
}
/**
* if overwritten make sure to clear timeouts
*/
ngOnDestroy() {
clearTimeout(this.opentimer);
clearTimeout(this.closetimer);
}
}
ContextSubmenuTriggerDirective.decorators = [
{ type: Directive, args: [{ selector: '[contextSubmenuTrigger]' },] }
];
ContextSubmenuTriggerDirective.ctorParameters = () => [
{ type: ContextMenuService }
];
ContextSubmenuTriggerDirective.propDecorators = {
hoverDelay: [{ type: Input }],
openDelay: [{ type: Input }],
contextSubmenuTrigger: [{ type: Input }],
menuContext: [{ type: Input }],
menuAction: [{ type: Output }],
menuClose: [{ type: Output }],
handleSubMenuClick: [{ type: HostListener, args: ['click', ['$event'],] }],
handleSubMenuEnter: [{ type: HostListener, args: ['mouseover', ['$event'],] }],
handleSubMenuExit: [{ type: HostListener, args: ['mouseout',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdWJtZW51LXRyaWdnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb250ZXh0LXN1Ym1lbnUtdHJpZ2dlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFxQixrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRy9FLE1BQU0sT0FBTyw4QkFBOEI7SUFhekMsWUFBb0Isa0JBQXNDO1FBQXRDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFaakQsZUFBVSxHQUFHLEdBQUcsQ0FBQztRQUNqQixjQUFTLEdBQUcsR0FBRyxDQUFDO1FBR2YsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFJL0MsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBR1Isb0JBQW9CO1FBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBR0Qsa0JBQWtCLENBQUMsTUFBa0I7UUFDbkMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUN0QyxNQUFNLEVBQ04sSUFBSSxDQUFDLHFCQUFxQixFQUMxQixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxFQUNKLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFHRCxrQkFBa0IsQ0FBQyxNQUFrQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QztRQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDdEMsTUFBTSxFQUNOLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksRUFDSixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUVILGlCQUFpQjtRQUNmLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2FBQ3ZCO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OztZQW5GRixTQUFTLFNBQUMsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUU7OztZQUZ0QixrQkFBa0I7Ozt5QkFJM0MsS0FBSzt3QkFDTCxLQUFLO29DQUNMLEtBQUs7MEJBQ0wsS0FBSzt5QkFDTCxNQUFNO3dCQUNOLE1BQU07aUNBWU4sWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztpQ0FrQmhDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0NBd0JwQyxZQUFZLFNBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFjdGl2ZUNvbnRleHRNZW51LCBDb250ZXh0TWVudVNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQtbWVudS5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2NvbnRleHRTdWJtZW51VHJpZ2dlcl0nIH0pXG5leHBvcnQgY2xhc3MgQ29udGV4dFN1Ym1lbnVUcmlnZ2VyRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgaG92ZXJEZWxheSA9IDUwMDtcbiAgQElucHV0KCkgb3BlbkRlbGF5ID0gMjAwO1xuICBASW5wdXQoKSBjb250ZXh0U3VibWVudVRyaWdnZXI/OiBhbnk7XG4gIEBJbnB1dCgpIG1lbnVDb250ZXh0PzogYW55O1xuICBAT3V0cHV0KCkgbWVudUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbWVudUNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBtZW51PzogQWN0aXZlQ29udGV4dE1lbnU7XG4gIG9wZW50aW1lcjogYW55O1xuICBjbG9zZXRpbWVyOiBhbnk7XG4gIHZpc2libGUgPSBmYWxzZTtcbiAgbGV2ZWwgPSAxO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udGV4dE1lbnVTZXJ2aWNlOiBDb250ZXh0TWVudVNlcnZpY2UpIHtcbiAgICAvLyBnZXQgY3VycmVudCBsZXZlbFxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubGV2ZWwgPSB0aGlzLmNvbnRleHRNZW51U2VydmljZS5nZXRDdXJyZW50TGV2ZWwoKSkpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBoYW5kbGVTdWJNZW51Q2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLm9wZW50aW1lcik7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2V0aW1lcik7XG4gICAgdGhpcy5tZW51ID0gdGhpcy5jb250ZXh0TWVudVNlcnZpY2Uuc2hvdyhcbiAgICAgICRldmVudCxcbiAgICAgIHRoaXMuY29udGV4dFN1Ym1lbnVUcmlnZ2VyLFxuICAgICAgdGhpcy5tZW51Q29udGV4dCxcbiAgICAgIHRoaXMubWVudUNsb3NlLFxuICAgICAgdGhpcy5tZW51QWN0aW9uLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMubGV2ZWwsXG4gICAgKTtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdmVyJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU3ViTWVudUVudGVyKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1lbnUpIHtcbiAgICAgIHRoaXMubWVudS5pc1RyaWdnZXJIb3ZlcmVkLm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NldGltZXIpO1xuICAgIHRoaXMub3BlbnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1lbnUgPSB0aGlzLmNvbnRleHRNZW51U2VydmljZS5zaG93KFxuICAgICAgICAkZXZlbnQsXG4gICAgICAgIHRoaXMuY29udGV4dFN1Ym1lbnVUcmlnZ2VyLFxuICAgICAgICB0aGlzLm1lbnVDb250ZXh0LFxuICAgICAgICB0aGlzLm1lbnVDbG9zZSxcbiAgICAgICAgdGhpcy5tZW51QWN0aW9uLFxuICAgICAgICB0cnVlLFxuICAgICAgICB0aGlzLmxldmVsLFxuICAgICAgKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICB0aGlzLm9wZW50aW1lciA9IG51bGw7XG4gICAgfSwgdGhpcy5vcGVuRGVsYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIHN1Ym1lbnUgaGlkZXMgYWZ0ZXIgY3Vyc29yIGhhcyBleGl0ZWQgZm9yIGEgcGVyaW9kIG9mIHRpbWVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlb3V0JylcbiAgaGFuZGxlU3ViTWVudUV4aXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMub3BlbnRpbWVyKTtcbiAgICBpZiAodGhpcy5tZW51KSB7XG4gICAgICB0aGlzLm1lbnUuaXNUcmlnZ2VySG92ZXJlZC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5jbG9zZXRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tZW51KSB7XG4gICAgICAgIHRoaXMubWVudS5pc1RyaWdnZXJIb3ZlcmVkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51U2VydmljZS5jbG9zZVN1Yk1lbnUodGhpcy5tZW51LmlkKTtcbiAgICAgICAgdGhpcy5tZW51ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgfSwgdGhpcy5ob3ZlckRlbGF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpZiBvdmVyd3JpdHRlbiBtYWtlIHN1cmUgdG8gY2xlYXIgdGltZW91dHNcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLm9wZW50aW1lcik7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2V0aW1lcik7XG4gIH1cbn1cbiJdfQ==