UNPKG

@ctrl/ngx-rightclick

Version:

GitHub Buttons for Angular. Star, Like, Follow and more

76 lines 9.6 kB
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==