ng2-right-click-menu
Version:
Right click context menu for Angular
133 lines • 8.58 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, ElementRef, EventEmitter, Input, Output } from '@angular/core';
import { ShContextMenuService } from './sh-context-menu.service';
import { ShContextMenuComponent } from './sh-context-menu.component';
import { fromEvent, merge } from 'rxjs';
/**
* @record
*/
export function ContextOpenEvent() { }
if (false) {
/** @type {?} */
ContextOpenEvent.prototype.data;
/** @type {?} */
ContextOpenEvent.prototype.preventOpen;
/** @type {?} */
ContextOpenEvent.prototype.mouseEvent;
}
export class ShAttachMenuDirective {
/**
* @param {?} ctxService
* @param {?} elm
*/
constructor(ctxService, elm) {
this.ctxService = ctxService;
this.elm = elm;
this.open = new EventEmitter();
}
/**
* @return {?}
*/
ngOnInit() {
this.setupEvents();
}
/**
* @private
* @return {?}
*/
setupEvents() {
/** @type {?} */
const observables = [];
if (!this.triggers) {
observables.push(fromEvent(this.elm.nativeElement, 'contextmenu'));
}
else {
this.triggers.forEach((/**
* @param {?} t
* @return {?}
*/
t => {
observables.push(fromEvent(this.elm.nativeElement, t));
}));
}
this.sub = merge(...observables).subscribe(this.openMenu.bind(this));
}
/**
* @param {?} event
* @return {?}
*/
openMenu(event) {
event.preventDefault();
event.stopPropagation();
/** @type {?} */
let preventOpen = false;
this.open.emit({
data: this.data,
mouseEvent: event,
preventOpen: (/**
* @return {?}
*/
() => {
preventOpen = true;
})
});
if (preventOpen)
return;
this.ctxService.openMenu({
menu: this.menu,
mouseEvent: event,
targetElement: this.elm,
data: this.data
});
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this.sub) {
this.sub.unsubscribe();
}
}
}
ShAttachMenuDirective.decorators = [
{ type: Directive, args: [{
selector: '[shAttachMenu]'
},] }
];
/** @nocollapse */
ShAttachMenuDirective.ctorParameters = () => [
{ type: ShContextMenuService },
{ type: ElementRef }
];
ShAttachMenuDirective.propDecorators = {
menu: [{ type: Input, args: ['shAttachMenu',] }],
triggers: [{ type: Input, args: ['shMenuTriggers',] }],
data: [{ type: Input, args: ['shMenuData',] }],
open: [{ type: Output }]
};
if (false) {
/** @type {?} */
ShAttachMenuDirective.prototype.menu;
/** @type {?} */
ShAttachMenuDirective.prototype.triggers;
/** @type {?} */
ShAttachMenuDirective.prototype.data;
/** @type {?} */
ShAttachMenuDirective.prototype.open;
/** @type {?} */
ShAttachMenuDirective.prototype.sub;
/**
* @type {?}
* @private
*/
ShAttachMenuDirective.prototype.ctxService;
/**
* @type {?}
* @private
*/
ShAttachMenuDirective.prototype.elm;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2gtYXR0YWNoLW1lbnUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcyLXJpZ2h0LWNsaWNrLW1lbnUvIiwic291cmNlcyI6WyJsaWIvc2gtYXR0YWNoLW1lbnUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7QUFFdEQsc0NBSUM7OztJQUhBLGdDQUFVOztJQUNWLHVDQUF3Qjs7SUFDeEIsc0NBQXVCOztBQU14QixNQUFNLE9BQU8scUJBQXFCOzs7OztJQU9qQyxZQUNTLFVBQWdDLEVBQ2hDLEdBQWU7UUFEZixlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFZO1FBTGQsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO0lBTW5ELENBQUM7Ozs7SUFFSixRQUFRO1FBQ1AsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU8sV0FBVzs7Y0FDWixXQUFXLEdBQUcsRUFBRTtRQUV0QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNuQixXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ25FO2FBQU07WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87Ozs7WUFBQyxDQUFDLENBQUMsRUFBRTtnQkFDekIsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDLEVBQUMsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDOzs7OztJQUVELFFBQVEsQ0FBQyxLQUFpQjtRQUN6QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDOztZQUVwQixXQUFXLEdBQUcsS0FBSztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNkLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFdBQVc7OztZQUFFLEdBQUcsRUFBRTtnQkFDakIsV0FBVyxHQUFHLElBQUksQ0FBQztZQUNwQixDQUFDLENBQUE7U0FDRCxDQUFDLENBQUM7UUFFSCxJQUFJLFdBQVc7WUFBRSxPQUFPO1FBRXhCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRztZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDZixDQUFDLENBQUM7SUFDSixDQUFDOzs7O0lBRUQsV0FBVztRQUNWLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkI7SUFDRixDQUFDOzs7WUE1REQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxnQkFBZ0I7YUFDMUI7Ozs7WUFaUSxvQkFBb0I7WUFQNUIsVUFBVTs7O21CQXFCVCxLQUFLLFNBQUMsY0FBYzt1QkFDcEIsS0FBSyxTQUFDLGdCQUFnQjttQkFDdEIsS0FBSyxTQUFDLFlBQVk7bUJBQ2xCLE1BQU07Ozs7SUFIUCxxQ0FBb0Q7O0lBQ3BELHlDQUE0Qzs7SUFDNUMscUNBQStCOztJQUMvQixxQ0FBc0Q7O0lBQ3RELG9DQUFrQjs7Ozs7SUFHakIsMkNBQXdDOzs7OztJQUN4QyxvQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHREaXJlY3RpdmUsXG5cdEVsZW1lbnRSZWYsXG5cdEV2ZW50RW1pdHRlcixcblx0SW5wdXQsXG5cdE9uRGVzdHJveSxcblx0T25Jbml0LFxuXHRPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaENvbnRleHRNZW51U2VydmljZSB9IGZyb20gJy4vc2gtY29udGV4dC1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hDb250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gJy4vc2gtY29udGV4dC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0T3BlbkV2ZW50IHtcblx0ZGF0YTogYW55O1xuXHRwcmV2ZW50T3BlbjogKCkgPT4gdm9pZDtcblx0bW91c2VFdmVudDogTW91c2VFdmVudDtcbn1cblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW3NoQXR0YWNoTWVudV0nXG59KVxuZXhwb3J0IGNsYXNzIFNoQXR0YWNoTWVudURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcblx0QElucHV0KCdzaEF0dGFjaE1lbnUnKSBtZW51OiBTaENvbnRleHRNZW51Q29tcG9uZW50O1xuXHRASW5wdXQoJ3NoTWVudVRyaWdnZXJzJykgdHJpZ2dlcnM6IHN0cmluZ1tdO1xuXHRASW5wdXQoJ3NoTWVudURhdGEnKSBkYXRhOiBhbnk7XG5cdEBPdXRwdXQoKSBvcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxDb250ZXh0T3BlbkV2ZW50PigpO1xuXHRzdWI6IFN1YnNjcmlwdGlvbjtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGN0eFNlcnZpY2U6IFNoQ29udGV4dE1lbnVTZXJ2aWNlLFxuXHRcdHByaXZhdGUgZWxtOiBFbGVtZW50UmVmXG5cdCkge31cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnNldHVwRXZlbnRzKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldHVwRXZlbnRzKCkge1xuXHRcdGNvbnN0IG9ic2VydmFibGVzID0gW107XG5cblx0XHRpZiAoIXRoaXMudHJpZ2dlcnMpIHtcblx0XHRcdG9ic2VydmFibGVzLnB1c2goZnJvbUV2ZW50KHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsICdjb250ZXh0bWVudScpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50cmlnZ2Vycy5mb3JFYWNoKHQgPT4ge1xuXHRcdFx0XHRvYnNlcnZhYmxlcy5wdXNoKGZyb21FdmVudCh0aGlzLmVsbS5uYXRpdmVFbGVtZW50LCB0KSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLnN1YiA9IG1lcmdlKC4uLm9ic2VydmFibGVzKS5zdWJzY3JpYmUodGhpcy5vcGVuTWVudS5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdG9wZW5NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuXHRcdGxldCBwcmV2ZW50T3BlbiA9IGZhbHNlO1xuXHRcdHRoaXMub3Blbi5lbWl0KHtcblx0XHRcdGRhdGE6IHRoaXMuZGF0YSxcblx0XHRcdG1vdXNlRXZlbnQ6IGV2ZW50LFxuXHRcdFx0cHJldmVudE9wZW46ICgpID0+IHtcblx0XHRcdFx0cHJldmVudE9wZW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKHByZXZlbnRPcGVuKSByZXR1cm47XG5cblx0XHR0aGlzLmN0eFNlcnZpY2Uub3Blbk1lbnUoe1xuXHRcdFx0bWVudTogdGhpcy5tZW51LFxuXHRcdFx0bW91c2VFdmVudDogZXZlbnQsXG5cdFx0XHR0YXJnZXRFbGVtZW50OiB0aGlzLmVsbSxcblx0XHRcdGRhdGE6IHRoaXMuZGF0YVxuXHRcdH0pO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuc3ViKSB7XG5cdFx0XHR0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdH1cblx0fVxufVxuIl19