UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

75 lines 8.86 kB
import { Directive, ElementRef, HostListener, Input } from '@angular/core'; import { KeyCode } from '@microsoft/windows-admin-center-sdk/core/data/accessibility-manager'; import { ContextMenuComponent } from './context-menu.component'; import * as i0 from "@angular/core"; /** * Directive that controls the opening and the closing of the context-menu, * once the host element is right-clicked */ export class ContextMenuDirective { constructor(el) { this.el = el; } /** * Listens for the right-click event on the host * Opens custom contextmenu except when text is highlighted or link is clicked */ onClick(event) { const tagElement = event.target; if (tagElement.tagName.toUpperCase() === 'A' || window.getSelection().toString() !== '') { this.el.nativeElement.enableRightClickSelect = false; } else { event.preventDefault(); this.el.nativeElement.enableRightClickSelect = true; this.openContextMenu(event); } } // Closes the context menu when a click event is fired documentClick() { this.smeContextMenu.isOpen = false; } // Prevents tab key event from closing the context menu onKeyup(event) { if (event.keyCode === KeyCode.Tab) { event.preventDefault(); event.stopPropagation(); } } /** * Called once right-click is triggered and toggles the isOpen from the contextMenu * It controls the opening and closing of contextMenu */ openContextMenu($event) { this.smeContextMenu.autoFocus(); if (this.smeContextMenu.isOpen) { this.smeContextMenu.isOpen = false; } setTimeout(() => { this.smeContextMenu.mouseEventData = $event; this.smeContextMenu.isOpen = true; }); } } /** @nocollapse */ ContextMenuDirective.ɵfac = function ContextMenuDirective_Factory(t) { return new (t || ContextMenuDirective)(i0.ɵɵdirectiveInject(i0.ElementRef)); }; /** @nocollapse */ ContextMenuDirective.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: ContextMenuDirective, selectors: [["", "smeContextMenu", ""]], hostBindings: function ContextMenuDirective_HostBindings(rf, ctx) { if (rf & 1) { i0.ɵɵlistener("contextmenu", function ContextMenuDirective_contextmenu_HostBindingHandler($event) { return ctx.onClick($event); })("click", function ContextMenuDirective_click_HostBindingHandler() { return ctx.documentClick(); }, false, i0.ɵɵresolveDocument)("keyup", function ContextMenuDirective_keyup_HostBindingHandler($event) { return ctx.onKeyup($event); }); } }, inputs: { smeContextMenu: "smeContextMenu" } }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextMenuDirective, [{ type: Directive, args: [{ selector: '[smeContextMenu]' }] }], function () { return [{ type: i0.ElementRef }]; }, { smeContextMenu: [{ type: Input }], onClick: [{ type: HostListener, args: ['contextmenu', ['$event']] }], documentClick: [{ type: HostListener, args: ['document:click'] }], onKeyup: [{ type: HostListener, args: ['keyup', ['$event']] }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUVoRTs7O0VBR0U7QUFJRixNQUFNLE9BQU8sb0JBQW9CO0lBSzdCLFlBQTBCLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO0lBQ3hDLENBQUM7SUFFRDs7O01BR0U7SUFDdUMsT0FBTyxDQUFDLEtBQVk7UUFDekQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDL0MsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3JGLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztTQUN4RDthQUFNO1lBQ0gsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztZQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO0lBRUwsQ0FBQztJQUVELHNEQUFzRDtJQUV0RCxhQUFhO1FBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx1REFBdUQ7SUFFaEQsT0FBTyxDQUFDLEtBQW9CO1FBQy9CLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQy9CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQ7OztNQUdFO0lBQ0ssZUFBZSxDQUFDLE1BQU07UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUN0QztRQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7MkdBcERRLG9CQUFvQjtzR0FBcEIsb0JBQW9CO21IQUFwQixtQkFBZSxnRkFBZixtQkFBZSxtSEFBZixtQkFBZTs7dUZBQWYsb0JBQW9CO2NBSGhDLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsa0JBQWtCO2FBQy9COzZEQUlVLGNBQWM7a0JBRHBCLEtBQUs7WUFVbUMsT0FBTztrQkFBL0MsWUFBWTttQkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFjdkMsYUFBYTtrQkFEWixZQUFZO21CQUFDLGdCQUFnQjtZQU92QixPQUFPO2tCQURiLFlBQVk7bUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEtleUNvZGUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvYWNjZXNzaWJpbGl0eS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2NvbnRleHQtbWVudS5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIERpcmVjdGl2ZSB0aGF0IGNvbnRyb2xzIHRoZSBvcGVuaW5nIGFuZCB0aGUgY2xvc2luZyBvZiB0aGUgY29udGV4dC1tZW51LFxyXG4gKiBvbmNlIHRoZSBob3N0IGVsZW1lbnQgaXMgcmlnaHQtY2xpY2tlZFxyXG4qL1xyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW3NtZUNvbnRleHRNZW51XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51RGlyZWN0aXZlIHtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNtZUNvbnRleHRNZW51OiBDb250ZXh0TWVudUNvbXBvbmVudDtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGVsOiBFbGVtZW50UmVmKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0ZW5zIGZvciB0aGUgcmlnaHQtY2xpY2sgZXZlbnQgb24gdGhlIGhvc3RcclxuICAgICAqIE9wZW5zIGN1c3RvbSBjb250ZXh0bWVudSBleGNlcHQgd2hlbiB0ZXh0IGlzIGhpZ2hsaWdodGVkIG9yIGxpbmsgaXMgY2xpY2tlZFxyXG4gICAgKi9cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSkgb25DbGljayhldmVudDogRXZlbnQpIHtcclxuICAgICAgICBjb25zdCB0YWdFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICh0YWdFbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0EnIHx8IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpICE9PSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZW5hYmxlUmlnaHRDbGlja1NlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5lbmFibGVSaWdodENsaWNrU2VsZWN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5vcGVuQ29udGV4dE1lbnUoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2xvc2VzIHRoZSBjb250ZXh0IG1lbnUgd2hlbiBhIGNsaWNrIGV2ZW50IGlzIGZpcmVkXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycpXHJcbiAgICBkb2N1bWVudENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc21lQ29udGV4dE1lbnUuaXNPcGVuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHJldmVudHMgdGFiIGtleSBldmVudCBmcm9tIGNsb3NpbmcgdGhlIGNvbnRleHQgbWVudVxyXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxyXG4gICAgcHVibGljIG9uS2V5dXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZS5UYWIpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIG9uY2UgcmlnaHQtY2xpY2sgaXMgdHJpZ2dlcmVkIGFuZCB0b2dnbGVzIHRoZSBpc09wZW4gZnJvbSB0aGUgY29udGV4dE1lbnVcclxuICAgICAqIEl0IGNvbnRyb2xzIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIG9mIGNvbnRleHRNZW51XHJcbiAgICAqL1xyXG4gICAgcHVibGljIG9wZW5Db250ZXh0TWVudSgkZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNtZUNvbnRleHRNZW51LmF1dG9Gb2N1cygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNtZUNvbnRleHRNZW51LmlzT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLnNtZUNvbnRleHRNZW51LmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zbWVDb250ZXh0TWVudS5tb3VzZUV2ZW50RGF0YSA9ICRldmVudDtcclxuICAgICAgICAgICAgdGhpcy5zbWVDb250ZXh0TWVudS5pc09wZW4gPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=