UNPKG

@ctrl/ngx-rightclick

Version:

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

66 lines 7.73 kB
import { Directive, HostListener, Input, Output, EventEmitter, } from '@angular/core'; import { ContextMenuService } from './context-menu.service'; export class ContextMenuTriggerDirective { constructor(contextMenuService) { this.contextMenuService = contextMenuService; this.holdToDisplay = 1000; this.menuAction = new EventEmitter(); this.menuClose = new EventEmitter(); this.beforeOpen = new EventEmitter(); this.visible = false; } handleMenu($event) { let preventOpen = false; this.beforeOpen.emit({ menuContext: this.menuContext, event: $event, preventOpen: () => { preventOpen = true; }, }); if (preventOpen) { return; } $event.preventDefault(); this.menu = this.contextMenuService.show($event, this.contextMenuTrigger, this.menuContext, this.menuClose, this.menuAction); this.visible = true; } handleMouseDown($event) { if (this.holdToDisplay >= 0) { $event.stopPropagation(); $event.clientY = $event.touches[0].clientY; $event.clientX = $event.touches[0].clientX; this.mouseDownTimeoutId = setTimeout(() => this.handleMenu($event), this.holdToDisplay); } } handleMouseUp() { clearTimeout(this.mouseDownTimeoutId); } ngOnInit() { this.sub = this.menuClose.subscribe(() => (this.visible = false)); } ngOnDestroy() { this.sub.unsubscribe(); } } ContextMenuTriggerDirective.decorators = [ { type: Directive, args: [{ selector: '[contextMenuTrigger]', exportAs: 'contextMenuTrigger', },] } ]; ContextMenuTriggerDirective.ctorParameters = () => [ { type: ContextMenuService } ]; ContextMenuTriggerDirective.propDecorators = { contextMenuTrigger: [{ type: Input }], menuContext: [{ type: Input }], holdToDisplay: [{ type: Input }], menuAction: [{ type: Output }], menuClose: [{ type: Output }], beforeOpen: [{ type: Output }], handleMenu: [{ type: HostListener, args: ['contextmenu', ['$event'],] }], handleMouseDown: [{ type: HostListener, args: ['touchstart', ['$event'],] }], handleMouseUp: [{ type: HostListener, args: ['touchend',] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LXRyaWdnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb250ZXh0LW1lbnUtdHJpZ2dlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBR2IsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBTS9FLE1BQU0sT0FBTywyQkFBMkI7SUEwRHRDLFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBdkRqRCxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNwQixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNyQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUcvQyxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBaUQ2QyxDQUFDO0lBNUM5RCxVQUFVLENBQUMsTUFBa0I7UUFDM0IsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixLQUFLLEVBQUUsTUFBTTtZQUNiLFdBQVcsRUFBRSxHQUFHLEVBQUU7Z0JBQ2hCLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDckIsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksV0FBVyxFQUFFO1lBQ2YsT0FBTztTQUNSO1FBRUQsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDdEMsTUFBTSxFQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUdELGVBQWUsQ0FBQyxNQUFXO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUU7WUFDM0IsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDM0MsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUUzQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUNsQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUM3QixJQUFJLENBQUMsYUFBYSxDQUNuQixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBR0QsYUFBYTtRQUNYLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBSUQsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7OztZQXRFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsUUFBUSxFQUFFLG9CQUFvQjthQUMvQjs7O1lBTFEsa0JBQWtCOzs7aUNBT3hCLEtBQUs7MEJBQ0wsS0FBSzs0QkFDTCxLQUFLO3lCQUNMLE1BQU07d0JBQ04sTUFBTTt5QkFDTixNQUFNO3lCQU9OLFlBQVksU0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7OEJBMEJ0QyxZQUFZLFNBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDOzRCQWNyQyxZQUFZLFNBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb250ZXh0TWVudVNlcnZpY2UsIEFjdGl2ZUNvbnRleHRNZW51IH0gZnJvbSAnLi9jb250ZXh0LW1lbnUuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjb250ZXh0TWVudVRyaWdnZXJdJyxcbiAgZXhwb3J0QXM6ICdjb250ZXh0TWVudVRyaWdnZXInLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudVRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51VHJpZ2dlcjogYW55O1xuICBASW5wdXQoKSBtZW51Q29udGV4dDogYW55O1xuICBASW5wdXQoKSBob2xkVG9EaXNwbGF5ID0gMTAwMDtcbiAgQE91dHB1dCgpIG1lbnVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1lbnVDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGJlZm9yZU9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBtZW51PzogQWN0aXZlQ29udGV4dE1lbnU7XG4gIHZpc2libGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtb3VzZURvd25UaW1lb3V0SWQ6IGFueTtcbiAgcHJpdmF0ZSBzdWIhOiBTdWJzY3JpcHRpb247XG5cbiAgQEhvc3RMaXN0ZW5lcignY29udGV4dG1lbnUnLCBbJyRldmVudCddKVxuICBoYW5kbGVNZW51KCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGxldCBwcmV2ZW50T3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuYmVmb3JlT3Blbi5lbWl0KHtcbiAgICAgIG1lbnVDb250ZXh0OiB0aGlzLm1lbnVDb250ZXh0LFxuICAgICAgZXZlbnQ6ICRldmVudCxcbiAgICAgIHByZXZlbnRPcGVuOiAoKSA9PiB7XG4gICAgICAgIHByZXZlbnRPcGVuID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAocHJldmVudE9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm1lbnUgPSB0aGlzLmNvbnRleHRNZW51U2VydmljZS5zaG93KFxuICAgICAgJGV2ZW50LFxuICAgICAgdGhpcy5jb250ZXh0TWVudVRyaWdnZXIsXG4gICAgICB0aGlzLm1lbnVDb250ZXh0LFxuICAgICAgdGhpcy5tZW51Q2xvc2UsXG4gICAgICB0aGlzLm1lbnVBY3Rpb24sXG4gICAgKTtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hzdGFydCcsIFsnJGV2ZW50J10pXG4gIGhhbmRsZU1vdXNlRG93bigkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmhvbGRUb0Rpc3BsYXkgPj0gMCkge1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJGV2ZW50LmNsaWVudFkgPSAkZXZlbnQudG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgJGV2ZW50LmNsaWVudFggPSAkZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuXG4gICAgICB0aGlzLm1vdXNlRG93blRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHRoaXMuaGFuZGxlTWVudSgkZXZlbnQpLFxuICAgICAgICB0aGlzLmhvbGRUb0Rpc3BsYXksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoZW5kJylcbiAgaGFuZGxlTW91c2VVcCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZURvd25UaW1lb3V0SWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YiA9IHRoaXMubWVudUNsb3NlLnN1YnNjcmliZSgoKSA9PiAodGhpcy52aXNpYmxlID0gZmFsc2UpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==