/*! * devextreme-angular-test * Version: 17.2.8 * Build date: Mon Feb 05 2018 * * Copyright (c) 2012 - 2018 Developer Express Inc. ALL RIGHTS RESERVED * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file in the root of the project for details. * * https://github.com/DevExpress/devextreme-angular */ import { Component, NgModule, ElementRef, NgZone, Input, Output, OnDestroy, Injector, EventEmitter, OnChanges, DoCheck, SimpleChanges, ContentChildren, QueryList } from '@angular/core'; import DevExpress from 'devextreme/bundles/dx.all'; import DxContextMenu from 'devextreme/ui/context_menu'; import { DxComponent } from '../core/component'; import { DxTemplateHost } from '../core/template-host'; import { DxTemplateModule } from '../core/template'; import { EventsRegistrator } from '../core/events-strategy'; import { NestedOptionHost } from '../core/nested-option'; import { WatcherHelper } from '../core/watcher-helper'; import { IterableDifferHelper } from '../core/iterable-differ-helper'; import { DxoAnimationModule } from './nested/animation'; import { DxoHideModule } from './nested/hide'; import { DxoShowModule } from './nested/show'; import { DxiItemModule } from './nested/item-dxi'; import { DxoPositionModule } from './nested/position'; import { DxoAtModule } from './nested/at'; import { DxoBoundaryOffsetModule } from './nested/boundary-offset'; import { DxoCollisionModule } from './nested/collision'; import { DxoMyModule } from './nested/my'; import { DxoOffsetModule } from './nested/offset'; import { DxoShowEventModule } from './nested/show-event'; import { DxoShowSubmenuModeModule } from './nested/show-submenu-mode'; import { DxoDelayModule } from './nested/delay'; import { DxiItemComponent } from './nested/item-dxi'; /** * The ContextMenu widget displays a single- or multi-level context menu. An end user invokes this menu by a right click or a long press. */ @Component({ selector: 'dx-context-menu', template: '', providers: [ DxTemplateHost, WatcherHelper, NestedOptionHost, IterableDifferHelper ] }) export class DxContextMenuComponent extends DxComponent implements OnDestroy, OnChanges, DoCheck { instance: DxContextMenu; /** * Specifies the shortcut key that sets focus on the widget. */ @Input() get accessKey(): string { return this._getOption('accessKey'); } set accessKey(value: string) { this._setOption('accessKey', value); } /** * A Boolean value specifying whether or not the widget changes its state when interacting with a user. */ @Input() get activeStateEnabled(): boolean { return this._getOption('activeStateEnabled'); } set activeStateEnabled(value: boolean) { this._setOption('activeStateEnabled', value); } /** * Configures widget visibility animations. This object contains two fields: show and hide. */ @Input() get animation(): any { return this._getOption('animation'); } set animation(value: any) { this._setOption('animation', value); } /** * A Boolean value specifying whether or not the widget is closed if a user clicks outside of the context menu. */ @Input() get closeOnOutsideClick(): boolean| Function { return this._getOption('closeOnOutsideClick'); } set closeOnOutsideClick(value: boolean| Function) { this._setOption('closeOnOutsideClick', value); } /** * Specifies the name of the CSS class to be applied to the root menu level and all submenus. */ @Input() get cssClass(): string { return this._getOption('cssClass'); } set cssClass(value: string) { this._setOption('cssClass', value); } /** * A data source used to fetch data to be displayed by the widget. */ @Input() get dataSource(): DevExpress.data.DataSource| DevExpress.data.DataSourceOptions| string| Array { return this._getOption('dataSource'); } set dataSource(value: DevExpress.data.DataSource| DevExpress.data.DataSourceOptions| string| Array) { this._setOption('dataSource', value); } /** * Specifies whether the widget responds to user interaction. */ @Input() get disabled(): boolean { return this._getOption('disabled'); } set disabled(value: boolean) { this._setOption('disabled', value); } /** * Specifies the name of the data source item field whose value defines whether or not the corresponding widget item is disabled. */ @Input() get disabledExpr(): Function| string { return this._getOption('disabledExpr'); } set disabledExpr(value: Function| string) { this._setOption('disabledExpr', value); } /** * Specifies the name of the data source item field whose value is displayed by the widget. */ @Input() get displayExpr(): Function| string { return this._getOption('displayExpr'); } set displayExpr(value: Function| string) { this._setOption('displayExpr', value); } /** * Specifies the attributes to be attached to the widget's root element. */ @Input() get elementAttr(): any { return this._getOption('elementAttr'); } set elementAttr(value: any) { this._setOption('elementAttr', value); } /** * Specifies whether the widget can be focused using keyboard navigation. */ @Input() get focusStateEnabled(): boolean { return this._getOption('focusStateEnabled'); } set focusStateEnabled(value: boolean) { this._setOption('focusStateEnabled', value); } /** * Specifies the widget's height. */ @Input() get height(): number| Function| string { return this._getOption('height'); } set height(value: number| Function| string) { this._setOption('height', value); } /** * Specifies text for a hint that appears when a user pauses on the widget. */ @Input() get hint(): string { return this._getOption('hint'); } set hint(value: string) { this._setOption('hint', value); } /** * Specifies whether the widget changes its state when a user pauses on it. */ @Input() get hoverStateEnabled(): boolean { return this._getOption('hoverStateEnabled'); } set hoverStateEnabled(value: boolean) { this._setOption('hoverStateEnabled', value); } /** * Holds an array of menu items. */ @Input() get items(): any| Array { return this._getOption('items'); } set items(value: any| Array) { this._setOption('items', value); } /** * Specifies which data field contains nested items. */ @Input() get itemsExpr(): Function| string { return this._getOption('itemsExpr'); } set itemsExpr(value: Function| string) { this._setOption('itemsExpr', value); } /** * Specifies a custom template for an item. */ @Input() get itemTemplate(): any { return this._getOption('itemTemplate'); } set itemTemplate(value: any) { this._setOption('itemTemplate', value); } /** * An object defining widget positioning options. */ @Input() get position(): DevExpress.positionConfig { return this._getOption('position'); } set position(value: DevExpress.positionConfig) { this._setOption('position', value); } /** * Switches the widget to a right-to-left representation. */ @Input() get rtlEnabled(): boolean { return this._getOption('rtlEnabled'); } set rtlEnabled(value: boolean) { this._setOption('rtlEnabled', value); } /** * Specifies whether or not an item becomes selected if a user clicks it. */ @Input() get selectByClick(): boolean { return this._getOption('selectByClick'); } set selectByClick(value: boolean) { this._setOption('selectByClick', value); } /** * Specifies the name of the data source item field whose value defines whether or not the corresponding widget items is selected. */ @Input() get selectedExpr(): Function| string { return this._getOption('selectedExpr'); } set selectedExpr(value: Function| string) { this._setOption('selectedExpr', value); } /** * The selected item object. */ @Input() get selectedItem(): any { return this._getOption('selectedItem'); } set selectedItem(value: any) { this._setOption('selectedItem', value); } /** * An array of currently selected item objects. */ @Input() get selectedItems(): Array { return this._getOption('selectedItems'); } set selectedItems(value: Array) { this._setOption('selectedItems', value); } /** * Use the selectByClick option instead. */ @Input() get selectionByClick(): boolean { return this._getOption('selectionByClick'); } set selectionByClick(value: boolean) { this._setOption('selectionByClick', value); } /** * Specifies the selection mode supported by the menu. */ @Input() get selectionMode(): string { return this._getOption('selectionMode'); } set selectionMode(value: string) { this._setOption('selectionMode', value); } /** * Specifies options for displaying the widget. */ @Input() get showEvent(): string| { delay?: number, name?: string } { return this._getOption('showEvent'); } set showEvent(value: string| { delay?: number, name?: string }) { this._setOption('showEvent', value); } /** * Specifies options of submenu showing and hiding. */ @Input() get showSubmenuMode(): string| { delay?: number| { hide?: number, show?: number }, name?: string } { return this._getOption('showSubmenuMode'); } set showSubmenuMode(value: string| { delay?: number| { hide?: number, show?: number }, name?: string }) { this._setOption('showSubmenuMode', value); } /** * Specifies the direction at which submenus are displayed. */ @Input() get submenuDirection(): string { return this._getOption('submenuDirection'); } set submenuDirection(value: string) { this._setOption('submenuDirection', value); } /** * Specifies the number of the element when the Tab key is used for navigating. */ @Input() get tabIndex(): number { return this._getOption('tabIndex'); } set tabIndex(value: number) { this._setOption('tabIndex', value); } /** * The target element associated with the context menu. */ @Input() get target(): Element| JQuery { return this._getOption('target'); } set target(value: Element| JQuery) { this._setOption('target', value); } /** * A Boolean value specifying whether or not the widget is visible. */ @Input() get visible(): boolean { return this._getOption('visible'); } set visible(value: boolean) { this._setOption('visible', value); } /** * Specifies the widget's width. */ @Input() get width(): number| Function| string { return this._getOption('width'); } set width(value: number| Function| string) { this._setOption('width', value); } /** * A handler for the contentReady event. Executed when the widget's content is ready. This handler may be executed multiple times during the widget's lifetime depending on the number of times its content changes. */ @Output() onContentReady: EventEmitter; /** * A handler for the disposing event. Executed when the widget is removed from the DOM using the remove(), empty(), or html() jQuery methods only. */ @Output() onDisposing: EventEmitter; /** * A handler for the hidden event. */ @Output() onHidden: EventEmitter; /** * A handler for the hiding event. */ @Output() onHiding: EventEmitter; /** * A handler for the initialized event. Executed only once, after the widget is initialized. */ @Output() onInitialized: EventEmitter; /** * A handler for the itemClick event. */ @Output() onItemClick: EventEmitter; /** * A handler for the itemContextMenu event. */ @Output() onItemContextMenu: EventEmitter; /** * A handler for the itemRendered event. */ @Output() onItemRendered: EventEmitter; /** * A handler for the optionChanged event. Executed after an option of the widget is changed. */ @Output() onOptionChanged: EventEmitter; /** * A handler for the positioning event. */ @Output() onPositioning: EventEmitter; /** * A handler for the selectionChanged event. Raised after an item is selected or unselected. */ @Output() onSelectionChanged: EventEmitter; /** * A handler for the showing event. */ @Output() onShowing: EventEmitter; /** * A handler for the shown event. */ @Output() onShown: EventEmitter; /** * A handler for the accessKeyChange event. */ @Output() accessKeyChange: EventEmitter; /** * A handler for the activeStateEnabledChange event. */ @Output() activeStateEnabledChange: EventEmitter; /** * A handler for the animationChange event. */ @Output() animationChange: EventEmitter; /** * A handler for the closeOnOutsideClickChange event. */ @Output() closeOnOutsideClickChange: EventEmitter; /** * A handler for the cssClassChange event. */ @Output() cssClassChange: EventEmitter; /** * A handler for the dataSourceChange event. */ @Output() dataSourceChange: EventEmitter>; /** * A handler for the disabledChange event. */ @Output() disabledChange: EventEmitter; /** * A handler for the disabledExprChange event. */ @Output() disabledExprChange: EventEmitter; /** * A handler for the displayExprChange event. */ @Output() displayExprChange: EventEmitter; /** * A handler for the elementAttrChange event. */ @Output() elementAttrChange: EventEmitter; /** * A handler for the focusStateEnabledChange event. */ @Output() focusStateEnabledChange: EventEmitter; /** * A handler for the heightChange event. */ @Output() heightChange: EventEmitter; /** * A handler for the hintChange event. */ @Output() hintChange: EventEmitter; /** * A handler for the hoverStateEnabledChange event. */ @Output() hoverStateEnabledChange: EventEmitter; /** * A handler for the itemsChange event. */ @Output() itemsChange: EventEmitter>; /** * A handler for the itemsExprChange event. */ @Output() itemsExprChange: EventEmitter; /** * A handler for the itemTemplateChange event. */ @Output() itemTemplateChange: EventEmitter; /** * A handler for the positionChange event. */ @Output() positionChange: EventEmitter; /** * A handler for the rtlEnabledChange event. */ @Output() rtlEnabledChange: EventEmitter; /** * A handler for the selectByClickChange event. */ @Output() selectByClickChange: EventEmitter; /** * A handler for the selectedExprChange event. */ @Output() selectedExprChange: EventEmitter; /** * A handler for the selectedItemChange event. */ @Output() selectedItemChange: EventEmitter; /** * A handler for the selectedItemsChange event. */ @Output() selectedItemsChange: EventEmitter>; /** * A handler for the selectionByClickChange event. */ @Output() selectionByClickChange: EventEmitter; /** * A handler for the selectionModeChange event. */ @Output() selectionModeChange: EventEmitter; /** * A handler for the showEventChange event. */ @Output() showEventChange: EventEmitter; /** * A handler for the showSubmenuModeChange event. */ @Output() showSubmenuModeChange: EventEmitter; /** * A handler for the submenuDirectionChange event. */ @Output() submenuDirectionChange: EventEmitter; /** * A handler for the tabIndexChange event. */ @Output() tabIndexChange: EventEmitter; /** * A handler for the targetChange event. */ @Output() targetChange: EventEmitter; /** * A handler for the visibleChange event. */ @Output() visibleChange: EventEmitter; /** * A handler for the widthChange event. */ @Output() widthChange: EventEmitter; @ContentChildren(DxiItemComponent) get itemsChildren(): QueryList { return this._getOption('items'); } set itemsChildren(value) { this.setChildren('items', value); } constructor(elementRef: ElementRef, ngZone: NgZone, templateHost: DxTemplateHost, injector: Injector, private _watcherHelper: WatcherHelper, private _idh: IterableDifferHelper, optionHost: NestedOptionHost) { super(elementRef, ngZone, templateHost, _watcherHelper); injector.get(EventsRegistrator); this._createEventEmitters([ { subscribe: 'contentReady', emit: 'onContentReady' }, { subscribe: 'disposing', emit: 'onDisposing' }, { subscribe: 'hidden', emit: 'onHidden' }, { subscribe: 'hiding', emit: 'onHiding' }, { subscribe: 'initialized', emit: 'onInitialized' }, { subscribe: 'itemClick', emit: 'onItemClick' }, { subscribe: 'itemContextMenu', emit: 'onItemContextMenu' }, { subscribe: 'itemRendered', emit: 'onItemRendered' }, { subscribe: 'optionChanged', emit: 'onOptionChanged' }, { subscribe: 'positioning', emit: 'onPositioning' }, { subscribe: 'selectionChanged', emit: 'onSelectionChanged' }, { subscribe: 'showing', emit: 'onShowing' }, { subscribe: 'shown', emit: 'onShown' }, { emit: 'accessKeyChange' }, { emit: 'activeStateEnabledChange' }, { emit: 'animationChange' }, { emit: 'closeOnOutsideClickChange' }, { emit: 'cssClassChange' }, { emit: 'dataSourceChange' }, { emit: 'disabledChange' }, { emit: 'disabledExprChange' }, { emit: 'displayExprChange' }, { emit: 'elementAttrChange' }, { emit: 'focusStateEnabledChange' }, { emit: 'heightChange' }, { emit: 'hintChange' }, { emit: 'hoverStateEnabledChange' }, { emit: 'itemsChange' }, { emit: 'itemsExprChange' }, { emit: 'itemTemplateChange' }, { emit: 'positionChange' }, { emit: 'rtlEnabledChange' }, { emit: 'selectByClickChange' }, { emit: 'selectedExprChange' }, { emit: 'selectedItemChange' }, { emit: 'selectedItemsChange' }, { emit: 'selectionByClickChange' }, { emit: 'selectionModeChange' }, { emit: 'showEventChange' }, { emit: 'showSubmenuModeChange' }, { emit: 'submenuDirectionChange' }, { emit: 'tabIndexChange' }, { emit: 'targetChange' }, { emit: 'visibleChange' }, { emit: 'widthChange' } ]); this._idh.setHost(this); optionHost.setHost(this); } protected _createInstance(element, options) { return new DxContextMenu(element, options); } ngOnDestroy() { this._destroyWidget(); } ngOnChanges(changes: SimpleChanges) { super.ngOnChanges(changes); this.setupChanges('dataSource', changes); this.setupChanges('items', changes); this.setupChanges('selectedItems', changes); } setupChanges(prop: string, changes: SimpleChanges) { if (!(prop in this._optionsToUpdate)) { this._idh.setup(prop, changes); } } ngDoCheck() { this._idh.doCheck('dataSource'); this._idh.doCheck('items'); this._idh.doCheck('selectedItems'); this._watcherHelper.checkWatchers(); super.ngDoCheck(); } _setOption(name: string, value: any) { let isSetup = this._idh.setupSingle(name, value); let isChanged = this._idh.getChanges(name, value) !== null; if (isSetup || isChanged) { super._setOption(name, value); } } } @NgModule({ imports: [ DxoAnimationModule, DxoHideModule, DxoShowModule, DxiItemModule, DxoPositionModule, DxoAtModule, DxoBoundaryOffsetModule, DxoCollisionModule, DxoMyModule, DxoOffsetModule, DxoShowEventModule, DxoShowSubmenuModeModule, DxoDelayModule, DxTemplateModule ], declarations: [ DxContextMenuComponent ], exports: [ DxContextMenuComponent, DxoAnimationModule, DxoHideModule, DxoShowModule, DxiItemModule, DxoPositionModule, DxoAtModule, DxoBoundaryOffsetModule, DxoCollisionModule, DxoMyModule, DxoOffsetModule, DxoShowEventModule, DxoShowSubmenuModeModule, DxoDelayModule, DxTemplateModule ], providers: [EventsRegistrator] }) export class DxContextMenuModule { }