UNPKG

ng2-right-click-menu

Version:
196 lines 16.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ContentChildren, ElementRef, Input, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation } from '@angular/core'; import { ShContextMenuItemDirective } from './sh-context-menu-item.directive'; import { ShContextMenuService } from './sh-context-menu.service'; export class ShContextMenuComponent { /** * @param {?} ctxService */ constructor(ctxService) { this.ctxService = ctxService; this.contentChildrenItems = new QueryList(); this.viewChildrenItems = new QueryList(); } /** * @return {?} */ get menuItems() { // when using the ShContextMenuComponent as menu, the ContentChildren is the source if (this.contentChildrenItems.length) { return this.contentChildrenItems; } // when using a custom component as menu the ViewChildren is the source return this.viewChildrenItems; } /** * @param {?} $event * @param {?} item * @param {?} elm * @return {?} */ onEnter($event, item, elm) { this.ctxService.closeSubMenus(this); this.setNotActive(); if (!item.subMenu) { return; } this.setActive(item); this.ctxService.openSubMenu({ data: item.context.$implicit, targetElement: new ElementRef(elm), menu: item.subMenu, mouseEvent: $event, parentMenu: this }); } /** * @private * @param {?} item * @return {?} */ setActive(item) { item.setActive(); this.subActive = true; } /** * @param {?} event * @param {?} item * @return {?} */ onClick(event, item) { // TODO: move click handling to service if (item.divider) { return; } if (!item.subMenu && item.closeOnClick) { this.ctxService.destroy(); item.click.emit({ data: item.context.$implicit, event }); } } /** * @private * @param {?} fn * @param {?} fallbackContext * @param {?} data * @param {?} event * @return {?} */ callWithContext(fn, fallbackContext, data, event) { return fn.call(this.thisContext ? this.thisContext : fallbackContext, { data, event }); } /** * @return {?} */ close() { this.setNotActive(); this.menuContainer.detach(); if (this.overlayRef) { this.overlayRef.detach(); } } /** * @return {?} */ ngOnDestroy() { this.close(); } /** * @return {?} */ setNotActive() { this.subActive = false; this.menuItems.forEach((/** * @param {?} i * @return {?} */ i => i.setNotActive())); } /** * @param {?} item * @return {?} */ isVisible(item) { if (!item.visible) { return true; } return this.callWithContext(item.visible, this, item.context.$implicit, null); } } ShContextMenuComponent.decorators = [ { type: Component, args: [{ selector: 'sh-context-menu', encapsulation: ViewEncapsulation.None, template: ` <ng-container #menuContainer></ng-container> <ng-template #menuTemplate> <div class="sh-context-menu"> <div *ngFor="let menuItem of menuItems" #itemElement [ngClass]="{ 'sh-sub-anchor': menuItem.subMenu, 'sh-context-menu--item__divider': menuItem.divider, 'sh-context-menu--item__sub-active': subActive && menuItem.active }" class="sh-context-menu--item" (mouseenter)="onEnter($event, menuItem, itemElement)" (click)="onClick($event, menuItem)" > <ng-container *ngIf="!menuItem.divider || !isVisible(menuItem)"> <ng-content *ngTemplateOutlet="menuItem.template; context: menuItem.context" ></ng-content> </ng-container> </div> </div> </ng-template> `, styles: [".sh-backdrop{background-color:transparent}.sh-context-menu{background:#ececec;min-width:150px;border:1px solid rgba(0,0,0,.2);border-radius:3px;box-shadow:0 0 10px 2px rgba(0,0,0,.1);color:#000;padding:5px 0;margin:0}.sh-context-menu--item{padding:5px 10px 5px 15px;-webkit-transition:.15s;transition:.15s}.sh-context-menu--item:hover,.sh-context-menu--item__sub-active{background-color:#4b8bec;color:#fff;cursor:pointer}.sh-context-menu--item.sh-context-menu--item__divider:hover{background-color:#ececec;color:#000;cursor:default}.sh-context-menu--item__divider{height:1px;margin:1px 1px 8px;overflow:hidden;border-bottom:1px solid #d0d0d0}.sh-context-menu--item.sh-sub-anchor{position:relative;min-width:160px}.sh-sub-anchor:after{content:'';top:50%;right:6px;-webkit-transform:translateY(-50%);transform:translateY(-50%);position:absolute;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:8px solid #000}"] }] } ]; /** @nocollapse */ ShContextMenuComponent.ctorParameters = () => [ { type: ShContextMenuService } ]; ShContextMenuComponent.propDecorators = { thisContext: [{ type: Input, args: ['this',] }], contentChildrenItems: [{ type: ContentChildren, args: [ShContextMenuItemDirective, { read: ShContextMenuItemDirective },] }], viewChildrenItems: [{ type: ViewChildren, args: [ShContextMenuItemDirective, { read: ShContextMenuItemDirective },] }], menuTemplate: [{ type: ViewChild, args: ['menuTemplate', { read: TemplateRef, static: true },] }], menuContainer: [{ type: ViewChild, args: ['menuContainer', { read: ViewContainerRef, static: true },] }] }; if (false) { /** @type {?} */ ShContextMenuComponent.prototype.thisContext; /** @type {?} */ ShContextMenuComponent.prototype.contentChildrenItems; /** @type {?} */ ShContextMenuComponent.prototype.viewChildrenItems; /** @type {?} */ ShContextMenuComponent.prototype.menuTemplate; /** @type {?} */ ShContextMenuComponent.prototype.menuContainer; /** @type {?} */ ShContextMenuComponent.prototype.overlayRef; /** @type {?} */ ShContextMenuComponent.prototype.subActive; /** * @type {?} * @private */ ShContextMenuComponent.prototype.ctxService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2gtY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nMi1yaWdodC1jbGljay1tZW51LyIsInNvdXJjZXMiOlsibGliL3NoLWNvbnRleHQtbWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFpQ2pFLE1BQU0sT0FBTyxzQkFBc0I7Ozs7SUFtQmxDLFlBQW9CLFVBQWdDO1FBQWhDLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ25ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLFNBQVMsRUFBOEIsQ0FBQztRQUN4RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxTQUFTLEVBQThCLENBQUM7SUFDdEUsQ0FBQzs7OztJQUVELElBQUksU0FBUztRQUNaLG1GQUFtRjtRQUNuRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7U0FDakM7UUFFRCx1RUFBdUU7UUFDdkUsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDL0IsQ0FBQzs7Ozs7OztJQUVELE9BQU8sQ0FDTixNQUFrQixFQUNsQixJQUFnQyxFQUNoQyxHQUFnQjtRQUVoQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLElBQUksQ0FB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SUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzRCQUM3RCxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Ozs7SUFacEUsNkNBQWdDOztJQUVoQyxzREFHcUI7O0lBQ3JCLG1EQUdrQjs7SUFFbEIsOENBQTZFOztJQUM3RSwrQ0FDYzs7SUFFZCw0Q0FBOEI7O0lBQzlCLDJDQUFtQjs7Ozs7SUFFUCw0Q0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0RWxlbWVudFJlZixcblx0SW5wdXQsXG5cdE9uRGVzdHJveSxcblx0UXVlcnlMaXN0LFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q2hpbGRyZW4sXG5cdFZpZXdDb250YWluZXJSZWYsXG5cdFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2hDb250ZXh0TWVudUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL3NoLWNvbnRleHQtbWVudS1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTaENvbnRleHRNZW51U2VydmljZSB9IGZyb20gJy4vc2gtY29udGV4dC1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnc2gtY29udGV4dC1tZW51Jyxcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcblx0c3R5bGVVcmxzOiBbJ3NoLWNvbnRleHQtbWVudS5jc3MnXSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctY29udGFpbmVyICNtZW51Q29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuXHRcdDxuZy10ZW1wbGF0ZSAjbWVudVRlbXBsYXRlPlxuXHRcdFx0PGRpdiBjbGFzcz1cInNoLWNvbnRleHQtbWVudVwiPlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Km5nRm9yPVwibGV0IG1lbnVJdGVtIG9mIG1lbnVJdGVtc1wiXG5cdFx0XHRcdFx0I2l0ZW1FbGVtZW50XG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHRcdFx0J3NoLXN1Yi1hbmNob3InOiBtZW51SXRlbS5zdWJNZW51LFxuXHRcdFx0XHRcdFx0J3NoLWNvbnRleHQtbWVudS0taXRlbV9fZGl2aWRlcic6IG1lbnVJdGVtLmRpdmlkZXIsXG5cdFx0XHRcdFx0XHQnc2gtY29udGV4dC1tZW51LS1pdGVtX19zdWItYWN0aXZlJzogc3ViQWN0aXZlICYmIG1lbnVJdGVtLmFjdGl2ZVxuXHRcdFx0XHRcdH1cIlxuXHRcdFx0XHRcdGNsYXNzPVwic2gtY29udGV4dC1tZW51LS1pdGVtXCJcblx0XHRcdFx0XHQobW91c2VlbnRlcik9XCJvbkVudGVyKCRldmVudCwgbWVudUl0ZW0sIGl0ZW1FbGVtZW50KVwiXG5cdFx0XHRcdFx0KGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50LCBtZW51SXRlbSlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtZW51SXRlbS5kaXZpZGVyIHx8ICFpc1Zpc2libGUobWVudUl0ZW0pXCI+XG5cdFx0XHRcdFx0XHQ8bmctY29udGVudFxuXHRcdFx0XHRcdFx0XHQqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVJdGVtLnRlbXBsYXRlOyBjb250ZXh0OiBtZW51SXRlbS5jb250ZXh0XCJcblx0XHRcdFx0XHRcdD48L25nLWNvbnRlbnQ+XG5cdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0YFxufSlcbmV4cG9ydCBjbGFzcyBTaENvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0QElucHV0KCd0aGlzJykgdGhpc0NvbnRleHQ6IGFueTtcblxuXHRAQ29udGVudENoaWxkcmVuKFNoQ29udGV4dE1lbnVJdGVtRGlyZWN0aXZlLCB7XG5cdFx0cmVhZDogU2hDb250ZXh0TWVudUl0ZW1EaXJlY3RpdmVcblx0fSlcblx0Y29udGVudENoaWxkcmVuSXRlbXM7XG5cdEBWaWV3Q2hpbGRyZW4oU2hDb250ZXh0TWVudUl0ZW1EaXJlY3RpdmUsIHtcblx0XHRyZWFkOiBTaENvbnRleHRNZW51SXRlbURpcmVjdGl2ZVxuXHR9KVxuXHR2aWV3Q2hpbGRyZW5JdGVtcztcblxuXHRAVmlld0NoaWxkKCdtZW51VGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSkgbWVudVRlbXBsYXRlO1xuXHRAVmlld0NoaWxkKCdtZW51Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcblx0bWVudUNvbnRhaW5lcjtcblxuXHRwdWJsaWMgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcblx0c3ViQWN0aXZlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgY3R4U2VydmljZTogU2hDb250ZXh0TWVudVNlcnZpY2UpIHtcblx0XHR0aGlzLmNvbnRlbnRDaGlsZHJlbkl0ZW1zID0gbmV3IFF1ZXJ5TGlzdDxTaENvbnRleHRNZW51SXRlbURpcmVjdGl2ZT4oKTtcblx0XHR0aGlzLnZpZXdDaGlsZHJlbkl0ZW1zID0gbmV3IFF1ZXJ5TGlzdDxTaENvbnRleHRNZW51SXRlbURpcmVjdGl2ZT4oKTtcblx0fVxuXG5cdGdldCBtZW51SXRlbXMoKTogUXVlcnlMaXN0PFNoQ29udGV4dE1lbnVJdGVtRGlyZWN0aXZlPiB7XG5cdFx0Ly8gd2hlbiB1c2luZyB0aGUgU2hDb250ZXh0TWVudUNvbXBvbmVudCBhcyBtZW51LCB0aGUgQ29udGVudENoaWxkcmVuIGlzIHRoZSBzb3VyY2Vcblx0XHRpZiAodGhpcy5jb250ZW50Q2hpbGRyZW5JdGVtcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnRDaGlsZHJlbkl0ZW1zO1xuXHRcdH1cblxuXHRcdC8vIHdoZW4gdXNpbmcgYSBjdXN0b20gY29tcG9uZW50IGFzIG1lbnUgdGhlIFZpZXdDaGlsZHJlbiBpcyB0aGUgc291cmNlXG5cdFx0cmV0dXJuIHRoaXMudmlld0NoaWxkcmVuSXRlbXM7XG5cdH1cblxuXHRvbkVudGVyKFxuXHRcdCRldmVudDogTW91c2VFdmVudCxcblx0XHRpdGVtOiBTaENvbnRleHRNZW51SXRlbURpcmVjdGl2ZSxcblx0XHRlbG06IEhUTUxFbGVtZW50XG5cdCkge1xuXHRcdHRoaXMuY3R4U2VydmljZS5jbG9zZVN1Yk1lbnVzKHRoaXMpO1xuXHRcdHRoaXMuc2V0Tm90QWN0aXZlKCk7XG5cblx0XHRpZiAoIWl0ZW0uc3ViTWVudSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0QWN0aXZlKGl0ZW0pO1xuXHRcdHRoaXMuY3R4U2VydmljZS5vcGVuU3ViTWVudSh7XG5cdFx0XHRkYXRhOiBpdGVtLmNvbnRleHQuJGltcGxpY2l0LFxuXHRcdFx0dGFyZ2V0RWxlbWVudDogbmV3IEVsZW1lbnRSZWYoZWxtKSxcblx0XHRcdG1lbnU6IGl0ZW0uc3ViTWVudSxcblx0XHRcdG1vdXNlRXZlbnQ6ICRldmVudCxcblx0XHRcdHBhcmVudE1lbnU6IHRoaXNcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0QWN0aXZlKGl0ZW06IFNoQ29udGV4dE1lbnVJdGVtRGlyZWN0aXZlKSB7XG5cdFx0aXRlbS5zZXRBY3RpdmUoKTtcblx0XHR0aGlzLnN1YkFjdGl2ZSA9IHRydWU7XG5cdH1cblxuXHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBTaENvbnRleHRNZW51SXRlbURpcmVjdGl2ZSkge1xuXHRcdC8vIFRPRE86IG1vdmUgY2xpY2sgaGFuZGxpbmcgdG8gc2VydmljZVxuXG5cdFx0aWYgKGl0ZW0uZGl2aWRlcikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghaXRlbS5zdWJNZW51ICYmIGl0ZW0uY2xvc2VPbkNsaWNrKSB7XG5cdFx0XHR0aGlzLmN0eFNlcnZpY2UuZGVzdHJveSgpO1xuXG5cdFx0XHRpdGVtLmNsaWNrLmVtaXQoe1xuXHRcdFx0XHRkYXRhOiBpdGVtLmNvbnRleHQuJGltcGxpY2l0LFxuXHRcdFx0XHRldmVudFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjYWxsV2l0aENvbnRleHQoZm4sIGZhbGxiYWNrQ29udGV4dCwgZGF0YSwgZXZlbnQpIHtcblx0XHRyZXR1cm4gZm4uY2FsbCh0aGlzLnRoaXNDb250ZXh0ID8gdGhpcy50aGlzQ29udGV4dCA6IGZhbGxiYWNrQ29udGV4dCwge1xuXHRcdFx0ZGF0YSxcblx0XHRcdGV2ZW50XG5cdFx0fSk7XG5cdH1cblxuXHRjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLnNldE5vdEFjdGl2ZSgpO1xuXHRcdHRoaXMubWVudUNvbnRhaW5lci5kZXRhY2goKTtcblx0XHRpZiAodGhpcy5vdmVybGF5UmVmKSB7XG5cdFx0XHR0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9XG5cblx0c2V0Tm90QWN0aXZlKCkge1xuXHRcdHRoaXMuc3ViQWN0aXZlID0gZmFsc2U7XG5cdFx0dGhpcy5tZW51SXRlbXMuZm9yRWFjaChpID0+IGkuc2V0Tm90QWN0aXZlKCkpO1xuXHR9XG5cblx0aXNWaXNpYmxlKGl0ZW06IFNoQ29udGV4dE1lbnVJdGVtRGlyZWN0aXZlKSB7XG5cdFx0aWYgKCFpdGVtLnZpc2libGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNhbGxXaXRoQ29udGV4dChcblx0XHRcdGl0ZW0udmlzaWJsZSxcblx0XHRcdHRoaXMsXG5cdFx0XHRpdGVtLmNvbnRleHQuJGltcGxpY2l0LFxuXHRcdFx0bnVsbFxuXHRcdCk7XG5cdH1cbn1cbiJdfQ==