@ctrl/ngx-rightclick
Version:
GitHub Buttons for Angular. Star, Like, Follow and more
66 lines • 7.73 kB
JavaScript
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==