@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
75 lines • 8.86 kB
JavaScript
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=