@syncfusion/ej2-navigations 17.2.55-1205479 → 17.3.14-96615
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +244 -0
- package/CHANGELOG.md +898 -786
- package/README.md +163 -163
- package/dist/ej2-navigations.umd.min.js +1 -10
- package/dist/ej2-navigations.umd.min.js.map +1 -1
- package/dist/es6/ej2-navigations.es2015.js +512 -255
- package/dist/es6/ej2-navigations.es2015.js.map +1 -1
- package/dist/es6/ej2-navigations.es5.js +642 -385
- package/dist/es6/ej2-navigations.es5.js.map +1 -1
- package/dist/global/ej2-navigations.min.js +1 -10
- package/dist/global/ej2-navigations.min.js.map +1 -1
- package/dist/global/index.d.ts +0 -9
- package/dist/ts/accordion/accordion.ts +1312 -0
- package/dist/ts/common/h-scroll.ts +459 -0
- package/dist/ts/common/menu-base.ts +2131 -0
- package/dist/ts/common/v-scroll.ts +430 -0
- package/dist/ts/context-menu/context-menu.ts +119 -0
- package/dist/ts/menu/menu.ts +270 -0
- package/dist/ts/sidebar/sidebar.ts +817 -0
- package/dist/ts/tab/tab.ts +1761 -0
- package/dist/ts/toolbar/toolbar.ts +2076 -0
- package/dist/ts/treeview/treeview.ts +5050 -0
- package/helpers/e2e/index.js +3 -3
- package/license +10 -10
- package/package.json +135 -145
- package/src/accordion/accordion-model.d.ts +162 -143
- package/src/accordion/accordion.d.ts +35 -6
- package/src/accordion/accordion.js +193 -71
- package/src/common/h-scroll-model.d.ts +5 -5
- package/src/common/h-scroll.js +19 -20
- package/src/common/index.d.ts +1 -0
- package/src/common/index.js +1 -0
- package/src/common/menu-base-model.d.ts +157 -157
- package/src/common/menu-base.d.ts +19 -0
- package/src/common/menu-base.js +97 -24
- package/src/common/v-scroll-model.d.ts +5 -5
- package/src/common/v-scroll.js +19 -19
- package/src/context-menu/context-menu-model.d.ts +15 -15
- package/src/context-menu/context-menu.js +19 -19
- package/src/menu/menu-model.d.ts +30 -30
- package/src/menu/menu.js +19 -19
- package/src/sidebar/sidebar-model.d.ts +136 -136
- package/src/sidebar/sidebar.js +19 -19
- package/src/tab/tab-model.d.ts +215 -215
- package/src/tab/tab.d.ts +3 -0
- package/src/tab/tab.js +120 -83
- package/src/toolbar/toolbar-model.d.ts +175 -175
- package/src/toolbar/toolbar.d.ts +2 -1
- package/src/toolbar/toolbar.js +30 -24
- package/src/treeview/treeview-model.d.ts +323 -323
- package/src/treeview/treeview.d.ts +3 -1
- package/src/treeview/treeview.js +107 -87
- package/styles/accordion/_all.scss +2 -2
- package/styles/accordion/_bootstrap-dark-definition.scss +69 -69
- package/styles/accordion/_bootstrap-definition.scss +76 -76
- package/styles/accordion/_bootstrap4-definition.scss +82 -82
- package/styles/accordion/_fabric-dark-definition.scss +74 -74
- package/styles/accordion/_fabric-definition.scss +78 -78
- package/styles/accordion/_highcontrast-definition.scss +106 -106
- package/styles/accordion/_highcontrast-light-definition.scss +104 -104
- package/styles/accordion/_layout.scss +447 -447
- package/styles/accordion/_material-dark-definition.scss +75 -75
- package/styles/accordion/_material-definition.scss +72 -72
- package/styles/accordion/_theme.scss +479 -479
- package/styles/accordion/icons/_bootstrap-dark.scss +17 -17
- package/styles/accordion/icons/_bootstrap.scss +17 -17
- package/styles/accordion/icons/_bootstrap4.scss +17 -17
- package/styles/accordion/icons/_fabric-dark.scss +17 -17
- package/styles/accordion/icons/_fabric.scss +17 -17
- package/styles/accordion/icons/_highcontrast-light.scss +17 -17
- package/styles/accordion/icons/_highcontrast.scss +17 -17
- package/styles/accordion/icons/_material-dark.scss +17 -17
- package/styles/accordion/icons/_material.scss +17 -17
- package/styles/accordion/material-dark.css +2 -2
- package/styles/bootstrap-dark.css +10 -9
- package/styles/bootstrap.css +10 -9
- package/styles/bootstrap4.css +10 -9
- package/styles/bootstrap5-dark.css +0 -0
- package/styles/bootstrap5-dark.scss +0 -0
- package/styles/bootstrap5.css +0 -0
- package/styles/bootstrap5.scss +0 -0
- package/styles/context-menu/_all.scss +2 -2
- package/styles/context-menu/_bootstrap-dark-definition.scss +54 -54
- package/styles/context-menu/_bootstrap-definition.scss +52 -52
- package/styles/context-menu/_bootstrap4-definition.scss +52 -52
- package/styles/context-menu/_fabric-dark-definition.scss +54 -54
- package/styles/context-menu/_fabric-definition.scss +52 -52
- package/styles/context-menu/_highcontrast-definition.scss +52 -52
- package/styles/context-menu/_highcontrast-light-definition.scss +54 -54
- package/styles/context-menu/_layout-mixin.scss +175 -174
- package/styles/context-menu/_layout.scss +70 -70
- package/styles/context-menu/_material-dark-definition.scss +54 -54
- package/styles/context-menu/_material-definition.scss +52 -52
- package/styles/context-menu/_theme-mixin.scss +59 -59
- package/styles/context-menu/_theme.scss +36 -36
- package/styles/context-menu/bootstrap-dark.css +1 -1
- package/styles/context-menu/bootstrap.css +1 -1
- package/styles/context-menu/bootstrap4.css +1 -1
- package/styles/context-menu/fabric-dark.css +1 -1
- package/styles/context-menu/fabric.css +1 -1
- package/styles/context-menu/highcontrast-light.css +1 -1
- package/styles/context-menu/highcontrast.css +1 -1
- package/styles/context-menu/icons/_bootstrap-dark.scss +30 -30
- package/styles/context-menu/icons/_bootstrap.scss +30 -30
- package/styles/context-menu/icons/_bootstrap4.scss +30 -30
- package/styles/context-menu/icons/_fabric-dark.scss +30 -30
- package/styles/context-menu/icons/_fabric.scss +30 -30
- package/styles/context-menu/icons/_highcontrast-light.scss +30 -30
- package/styles/context-menu/icons/_highcontrast.scss +30 -30
- package/styles/context-menu/icons/_material-dark.scss +30 -30
- package/styles/context-menu/icons/_material.scss +30 -30
- package/styles/context-menu/material-dark.css +1 -1
- package/styles/context-menu/material.css +4 -4
- package/styles/fabric-dark.css +10 -9
- package/styles/fabric.css +10 -9
- package/styles/h-scroll/_all.scss +2 -2
- package/styles/h-scroll/_bootstrap-dark-definition.scss +49 -49
- package/styles/h-scroll/_bootstrap-definition.scss +50 -50
- package/styles/h-scroll/_bootstrap4-definition.scss +49 -49
- package/styles/h-scroll/_fabric-dark-definition.scss +50 -50
- package/styles/h-scroll/_fabric-definition.scss +48 -48
- package/styles/h-scroll/_highcontrast-definition.scss +52 -52
- package/styles/h-scroll/_highcontrast-light-definition.scss +54 -54
- package/styles/h-scroll/_layout.scss +198 -198
- package/styles/h-scroll/_material-dark-definition.scss +77 -77
- package/styles/h-scroll/_material-definition.scss +77 -77
- package/styles/h-scroll/_theme.scss +157 -157
- package/styles/h-scroll/icons/_bootstrap-dark.scss +49 -49
- package/styles/h-scroll/icons/_bootstrap.scss +49 -49
- package/styles/h-scroll/icons/_bootstrap4.scss +49 -49
- package/styles/h-scroll/icons/_fabric-dark.scss +49 -49
- package/styles/h-scroll/icons/_fabric.scss +49 -49
- package/styles/h-scroll/icons/_highcontrast-light.scss +49 -49
- package/styles/h-scroll/icons/_highcontrast.scss +49 -49
- package/styles/h-scroll/icons/_material-dark.scss +49 -49
- package/styles/h-scroll/icons/_material.scss +49 -49
- package/styles/highcontrast-light.css +10 -9
- package/styles/highcontrast.css +10 -9
- package/styles/material-dark.css +12 -11
- package/styles/material.css +24 -14
- package/styles/menu/_all.scss +2 -2
- package/styles/menu/_bootstrap-dark-definition.scss +63 -63
- package/styles/menu/_bootstrap-definition.scss +65 -65
- package/styles/menu/_bootstrap4-definition.scss +64 -64
- package/styles/menu/_fabric-dark-definition.scss +63 -63
- package/styles/menu/_fabric-definition.scss +64 -64
- package/styles/menu/_highcontrast-definition.scss +65 -65
- package/styles/menu/_highcontrast-light-definition.scss +61 -61
- package/styles/menu/_layout.scss +638 -637
- package/styles/menu/_material-dark-definition.scss +63 -63
- package/styles/menu/_material-definition.scss +64 -64
- package/styles/menu/_theme.scss +243 -243
- package/styles/menu/bootstrap-dark.css +2 -1
- package/styles/menu/bootstrap.css +2 -1
- package/styles/menu/bootstrap.scss +1 -0
- package/styles/menu/bootstrap4.css +2 -1
- package/styles/menu/fabric-dark.css +2 -1
- package/styles/menu/fabric.css +2 -1
- package/styles/menu/fabric.scss +1 -0
- package/styles/menu/highcontrast-light.css +2 -1
- package/styles/menu/highcontrast.css +2 -1
- package/styles/menu/highcontrast.scss +1 -0
- package/styles/menu/icons/_bootstrap-dark.scss +127 -127
- package/styles/menu/icons/_bootstrap.scss +127 -127
- package/styles/menu/icons/_bootstrap4.scss +127 -127
- package/styles/menu/icons/_fabric-dark.scss +127 -127
- package/styles/menu/icons/_fabric.scss +127 -127
- package/styles/menu/icons/_highcontrast-light.scss +127 -127
- package/styles/menu/icons/_highcontrast.scss +127 -127
- package/styles/menu/icons/_material-dark.scss +127 -127
- package/styles/menu/icons/_material.scss +127 -127
- package/styles/menu/material-dark.css +2 -1
- package/styles/menu/material.css +4 -3
- package/styles/menu/material.scss +1 -0
- package/styles/sidebar/_all.scss +3 -3
- package/styles/sidebar/_bootstrap-dark-definition.scss +4 -4
- package/styles/sidebar/_bootstrap-definition.scss +4 -4
- package/styles/sidebar/_bootstrap4-definition.scss +4 -4
- package/styles/sidebar/_fabric-dark-definition.scss +4 -4
- package/styles/sidebar/_fabric-definition.scss +6 -6
- package/styles/sidebar/_highcontrast-definition.scss +4 -4
- package/styles/sidebar/_highcontrast-light-definition.scss +4 -4
- package/styles/sidebar/_icons.scss +1 -1
- package/styles/sidebar/_material-dark-definition.scss +4 -4
- package/styles/sidebar/_material-definition.scss +6 -6
- package/styles/sidebar/_theme.scss +168 -168
- package/styles/sidebar/bootstrap-dark.css +0 -1
- package/styles/sidebar/bootstrap.css +0 -1
- package/styles/sidebar/bootstrap4.css +0 -1
- package/styles/sidebar/fabric-dark.css +0 -1
- package/styles/sidebar/fabric.css +0 -1
- package/styles/sidebar/highcontrast-light.css +0 -1
- package/styles/sidebar/highcontrast.css +0 -1
- package/styles/sidebar/material-dark.css +0 -1
- package/styles/sidebar/material.css +0 -1
- package/styles/tab/_all.scss +2 -2
- package/styles/tab/_bootstrap-dark-definition.scss +386 -386
- package/styles/tab/_bootstrap-definition.scss +396 -396
- package/styles/tab/_bootstrap4-definition.scss +401 -401
- package/styles/tab/_fabric-dark-definition.scss +394 -394
- package/styles/tab/_fabric-definition.scss +410 -410
- package/styles/tab/_highcontrast-definition.scss +434 -434
- package/styles/tab/_highcontrast-light-definition.scss +423 -423
- package/styles/tab/_icons.scss +43 -43
- package/styles/tab/_layout.scss +3528 -3521
- package/styles/tab/_material-dark-definition.scss +407 -407
- package/styles/tab/_material-definition.scss +416 -416
- package/styles/tab/_theme.scss +1751 -1751
- package/styles/tab/bootstrap-dark.css +7 -2
- package/styles/tab/bootstrap.css +7 -2
- package/styles/tab/bootstrap4.css +7 -2
- package/styles/tab/fabric-dark.css +7 -2
- package/styles/tab/fabric.css +7 -2
- package/styles/tab/highcontrast-light.css +7 -2
- package/styles/tab/highcontrast.css +7 -2
- package/styles/tab/icons/_bootstrap-dark.scss +132 -132
- package/styles/tab/icons/_bootstrap.scss +132 -132
- package/styles/tab/icons/_bootstrap4.scss +132 -132
- package/styles/tab/icons/_fabric-dark.scss +132 -132
- package/styles/tab/icons/_fabric.scss +132 -132
- package/styles/tab/icons/_highcontrast-light.scss +132 -132
- package/styles/tab/icons/_highcontrast.scss +132 -132
- package/styles/tab/icons/_material-dark.scss +132 -132
- package/styles/tab/icons/_material.scss +132 -132
- package/styles/tab/material-dark.css +7 -2
- package/styles/tab/material.css +7 -2
- package/styles/tailwind-dark.css +0 -0
- package/styles/tailwind-dark.scss +0 -0
- package/styles/tailwind.css +0 -0
- package/styles/tailwind.scss +0 -0
- package/styles/toolbar/_all.scss +2 -2
- package/styles/toolbar/_bootstrap-dark-definition.scss +135 -135
- package/styles/toolbar/_bootstrap-definition.scss +134 -134
- package/styles/toolbar/_bootstrap4-definition.scss +139 -139
- package/styles/toolbar/_fabric-dark-definition.scss +155 -155
- package/styles/toolbar/_fabric-definition.scss +139 -139
- package/styles/toolbar/_highcontrast-definition.scss +149 -149
- package/styles/toolbar/_highcontrast-light-definition.scss +164 -164
- package/styles/toolbar/_layout.scss +1460 -1460
- package/styles/toolbar/_material-dark-definition.scss +180 -180
- package/styles/toolbar/_material-definition.scss +164 -164
- package/styles/toolbar/_theme.scss +451 -451
- package/styles/toolbar/bootstrap-dark.css +0 -1
- package/styles/toolbar/bootstrap.css +0 -1
- package/styles/toolbar/bootstrap.scss +1 -0
- package/styles/toolbar/bootstrap4.css +0 -1
- package/styles/toolbar/fabric-dark.css +0 -1
- package/styles/toolbar/fabric.css +0 -1
- package/styles/toolbar/fabric.scss +1 -0
- package/styles/toolbar/highcontrast-light.css +0 -1
- package/styles/toolbar/highcontrast.css +0 -1
- package/styles/toolbar/highcontrast.scss +1 -0
- package/styles/toolbar/icons/_bootstrap-dark.scss +16 -16
- package/styles/toolbar/icons/_bootstrap.scss +16 -16
- package/styles/toolbar/icons/_bootstrap4.scss +16 -16
- package/styles/toolbar/icons/_fabric-dark.scss +16 -16
- package/styles/toolbar/icons/_fabric.scss +16 -16
- package/styles/toolbar/icons/_highcontrast-light.scss +16 -16
- package/styles/toolbar/icons/_highcontrast.scss +16 -16
- package/styles/toolbar/icons/_material-dark.scss +16 -16
- package/styles/toolbar/icons/_material.scss +16 -16
- package/styles/toolbar/material-dark.css +0 -1
- package/styles/toolbar/material.css +0 -1
- package/styles/toolbar/material.scss +1 -0
- package/styles/treeview/_all.scss +2 -2
- package/styles/treeview/_bootstrap-dark-definition.scss +131 -131
- package/styles/treeview/_bootstrap-definition.scss +127 -127
- package/styles/treeview/_bootstrap4-definition.scss +153 -153
- package/styles/treeview/_fabric-dark-definition.scss +130 -130
- package/styles/treeview/_fabric-definition.scss +126 -126
- package/styles/treeview/_highcontrast-definition.scss +132 -132
- package/styles/treeview/_highcontrast-light-definition.scss +137 -137
- package/styles/treeview/_layout.scss +551 -551
- package/styles/treeview/_material-dark-definition.scss +126 -126
- package/styles/treeview/_material-definition.scss +126 -126
- package/styles/treeview/_theme.scss +331 -331
- package/styles/treeview/bootstrap-dark.css +0 -3
- package/styles/treeview/bootstrap.css +0 -3
- package/styles/treeview/bootstrap4.css +0 -3
- package/styles/treeview/fabric-dark.css +0 -3
- package/styles/treeview/fabric.css +0 -3
- package/styles/treeview/highcontrast-light.css +0 -3
- package/styles/treeview/highcontrast.css +0 -3
- package/styles/treeview/icons/_bootstrap-dark.scss +39 -39
- package/styles/treeview/icons/_bootstrap.scss +39 -39
- package/styles/treeview/icons/_bootstrap4.scss +39 -39
- package/styles/treeview/icons/_fabric-dark.scss +43 -43
- package/styles/treeview/icons/_fabric.scss +43 -43
- package/styles/treeview/icons/_highcontrast-light.scss +43 -43
- package/styles/treeview/icons/_highcontrast.scss +43 -43
- package/styles/treeview/icons/_material-dark.scss +43 -43
- package/styles/treeview/icons/_material.scss +43 -43
- package/styles/treeview/material-dark.css +0 -3
- package/styles/treeview/material.css +9 -3
- package/styles/v-scroll/_all.scss +2 -2
- package/styles/v-scroll/_bootstrap-dark-definition.scss +50 -50
- package/styles/v-scroll/_bootstrap-definition.scss +49 -49
- package/styles/v-scroll/_bootstrap4-definition.scss +49 -49
- package/styles/v-scroll/_fabric-dark-definition.scss +51 -51
- package/styles/v-scroll/_fabric-definition.scss +50 -50
- package/styles/v-scroll/_highcontrast-definition.scss +51 -51
- package/styles/v-scroll/_highcontrast-light-definition.scss +52 -52
- package/styles/v-scroll/_layout.scss +162 -162
- package/styles/v-scroll/_material-dark-definition.scss +78 -78
- package/styles/v-scroll/_material-definition.scss +77 -77
- package/styles/v-scroll/_theme.scss +133 -133
- package/styles/v-scroll/icons/_bootstrap-dark.scss +26 -26
- package/styles/v-scroll/icons/_bootstrap.scss +26 -26
- package/styles/v-scroll/icons/_bootstrap4.scss +26 -26
- package/styles/v-scroll/icons/_fabric-dark.scss +26 -26
- package/styles/v-scroll/icons/_fabric.scss +26 -26
- package/styles/v-scroll/icons/_highcontrast-light.scss +26 -26
- package/styles/v-scroll/icons/_highcontrast.scss +26 -26
- package/styles/v-scroll/icons/_material-dark.scss +26 -26
- package/styles/v-scroll/icons/_material.scss +26 -26
- package/tslint.json +111 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
import { Touch, ScrollEventArgs, TouchEventArgs, Component, EventHandler, selectAll, getUniqueID, removeClass } from '@syncfusion/ej2-base';
|
|
2
|
+
import { NotifyPropertyChanges, INotifyPropertyChanged, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';
|
|
3
|
+
import { classList, SwipeEventArgs, isNullOrUndefined } from '@syncfusion/ej2-base';
|
|
4
|
+
import { VScrollModel } from './v-scroll-model';
|
|
5
|
+
|
|
6
|
+
type HTEle = HTMLElement;
|
|
7
|
+
type Str = string;
|
|
8
|
+
|
|
9
|
+
const CLS_ROOT: Str = 'e-vscroll';
|
|
10
|
+
const CLS_RTL: Str = 'e-rtl';
|
|
11
|
+
const CLS_DISABLE: Str = 'e-overlay';
|
|
12
|
+
const CLS_VSCROLLBAR: Str = 'e-vscroll-bar';
|
|
13
|
+
const CLS_VSCROLLCON: Str = 'e-vscroll-content';
|
|
14
|
+
const CLS_NAVARROW: Str = 'e-nav-arrow';
|
|
15
|
+
const CLS_NAVUPARROW: Str = 'e-nav-up-arrow';
|
|
16
|
+
const CLS_NAVDOWNARROW: Str = 'e-nav-down-arrow';
|
|
17
|
+
const CLS_VSCROLLNAV: Str = 'e-scroll-nav';
|
|
18
|
+
const CLS_VSCROLLNAVUP: Str = 'e-scroll-up-nav';
|
|
19
|
+
const CLS_VSCROLLNAVDOWN: Str = 'e-scroll-down-nav';
|
|
20
|
+
const CLS_DEVICE: Str = 'e-scroll-device';
|
|
21
|
+
const CLS_OVERLAY: Str = 'e-scroll-overlay';
|
|
22
|
+
const CLS_UPOVERLAY: Str = 'e-scroll-up-overlay';
|
|
23
|
+
const CLS_DOWNOVERLAY: Str = 'e-scroll-down-overlay';
|
|
24
|
+
const OVERLAY_MAXWID: number = 40;
|
|
25
|
+
|
|
26
|
+
interface TapEventArgs {
|
|
27
|
+
name: string;
|
|
28
|
+
originalEvent: TouchEventArgs | TouchEvent | KeyboardEvent;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* VScroll module is introduces vertical scroller when content exceeds the current viewing area.
|
|
32
|
+
* It can be useful for the components like Toolbar, Tab which needs vertical scrolling alone.
|
|
33
|
+
* Hidden content can be view by touch moving or icon click.
|
|
34
|
+
* ```html
|
|
35
|
+
* <div id="scroll"/>
|
|
36
|
+
* <script>
|
|
37
|
+
* var scrollObj = new VScroll();
|
|
38
|
+
* scrollObj.appendTo("#scroll");
|
|
39
|
+
* </script>
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
@NotifyPropertyChanges
|
|
43
|
+
export class VScroll extends Component<HTMLElement> implements INotifyPropertyChanged {
|
|
44
|
+
private touchModule: Touch;
|
|
45
|
+
private scrollEle: HTEle;
|
|
46
|
+
private scrollItems: HTEle;
|
|
47
|
+
private uniqueId: Boolean;
|
|
48
|
+
private timeout: number;
|
|
49
|
+
private keyTimeout: Boolean;
|
|
50
|
+
private keyTimer: number;
|
|
51
|
+
private browser: String;
|
|
52
|
+
private browserCheck: Boolean;
|
|
53
|
+
private ieCheck: Boolean;
|
|
54
|
+
private isDevice: Boolean;
|
|
55
|
+
private customStep: Boolean;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Specifies the up or down scrolling distance of the vertical scrollbar moving.
|
|
59
|
+
* @default null
|
|
60
|
+
*/
|
|
61
|
+
@Property(null)
|
|
62
|
+
public scrollStep: number;
|
|
63
|
+
/**
|
|
64
|
+
* Initialize the event handler
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
protected preRender(): void {
|
|
68
|
+
this.browser = Browser.info.name;
|
|
69
|
+
this.browserCheck = this.browser === 'mozilla';
|
|
70
|
+
this.isDevice = Browser.isDevice;
|
|
71
|
+
this.customStep = true;
|
|
72
|
+
let ele: HTEle = this.element;
|
|
73
|
+
this.ieCheck = this.browser === 'edge' || this.browser === 'msie';
|
|
74
|
+
this.initialize();
|
|
75
|
+
if (ele.id === '') {
|
|
76
|
+
ele.id = getUniqueID('vscroll');
|
|
77
|
+
this.uniqueId = true;
|
|
78
|
+
}
|
|
79
|
+
ele.style.display = 'block';
|
|
80
|
+
if (this.enableRtl) {
|
|
81
|
+
ele.classList.add(CLS_RTL);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* To Initialize the vertical scroll rendering
|
|
86
|
+
* @private
|
|
87
|
+
*/
|
|
88
|
+
protected render(): void {
|
|
89
|
+
this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });
|
|
90
|
+
EventHandler.add(this.scrollEle, 'scroll', this.scrollEventHandler, this);
|
|
91
|
+
if (!this.isDevice) {
|
|
92
|
+
this.createNavIcon(this.element);
|
|
93
|
+
} else {
|
|
94
|
+
this.element.classList.add(CLS_DEVICE);
|
|
95
|
+
this.createOverlayElement(this.element);
|
|
96
|
+
}
|
|
97
|
+
this.setScrollState();
|
|
98
|
+
EventHandler.add(this.element, 'wheel', this.wheelEventHandler, this);
|
|
99
|
+
}
|
|
100
|
+
private setScrollState(): void {
|
|
101
|
+
if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {
|
|
102
|
+
this.scrollStep = this.scrollEle.offsetHeight;
|
|
103
|
+
this.customStep = false;
|
|
104
|
+
} else {
|
|
105
|
+
this.customStep = true;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Initializes a new instance of the VScroll class.
|
|
110
|
+
* @param options - Specifies VScroll model properties as options.
|
|
111
|
+
* @param element - Specifies the element for which vertical scrolling applies.
|
|
112
|
+
*/
|
|
113
|
+
constructor(options?: VScrollModel, element?: string | HTMLElement) {
|
|
114
|
+
super(options, <HTEle | string>element);
|
|
115
|
+
}
|
|
116
|
+
private initialize(): void {
|
|
117
|
+
let scrollCnt: HTEle = buildTag('div', { className: CLS_VSCROLLCON });
|
|
118
|
+
let scrollBar: HTEle = buildTag('div', { className: CLS_VSCROLLBAR });
|
|
119
|
+
scrollBar.setAttribute('tabindex', '-1');
|
|
120
|
+
let ele: HTEle = this.element;
|
|
121
|
+
let innerEle: HTEle[] = [].slice.call(ele.children);
|
|
122
|
+
for (let ele of innerEle) {
|
|
123
|
+
scrollCnt.appendChild(ele);
|
|
124
|
+
}
|
|
125
|
+
scrollBar.appendChild(scrollCnt);
|
|
126
|
+
ele.appendChild(scrollBar);
|
|
127
|
+
scrollBar.style.overflowY = 'hidden';
|
|
128
|
+
this.scrollEle = scrollBar;
|
|
129
|
+
this.scrollItems = scrollCnt;
|
|
130
|
+
}
|
|
131
|
+
protected getPersistData(): string {
|
|
132
|
+
let keyEntity: string[] = ['scrollStep'];
|
|
133
|
+
return this.addOnPersist(keyEntity);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Returns the current module name.
|
|
137
|
+
* @returns string
|
|
138
|
+
* @private
|
|
139
|
+
*/
|
|
140
|
+
protected getModuleName(): string {
|
|
141
|
+
return 'vScroll';
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Removes the control from the DOM and also removes all its related events.
|
|
145
|
+
* @returns void
|
|
146
|
+
*/
|
|
147
|
+
public destroy(): void {
|
|
148
|
+
let el: HTEle = this.element;
|
|
149
|
+
el.style.display = '';
|
|
150
|
+
removeClass([this.element], [CLS_ROOT, CLS_DEVICE]);
|
|
151
|
+
let navs: HTEle[] = selectAll('.e-' + el.id + '_nav.' + CLS_VSCROLLNAV, el);
|
|
152
|
+
let overlays: HTEle[] = selectAll('.' + CLS_OVERLAY, el);
|
|
153
|
+
[].slice.call(overlays).forEach((ele: HTMLElement) => {
|
|
154
|
+
detach(ele);
|
|
155
|
+
});
|
|
156
|
+
for (let elem of [].slice.call(this.scrollItems.children)) {
|
|
157
|
+
el.appendChild(elem);
|
|
158
|
+
}
|
|
159
|
+
if (this.uniqueId) {
|
|
160
|
+
this.element.removeAttribute('id');
|
|
161
|
+
}
|
|
162
|
+
detach(this.scrollEle);
|
|
163
|
+
if (navs.length > 0) {
|
|
164
|
+
detach(navs[0]);
|
|
165
|
+
if (!isNullOrUndefined(navs[1])) { detach(navs[1]); }
|
|
166
|
+
}
|
|
167
|
+
EventHandler.remove(this.scrollEle, 'scroll', this.scrollEventHandler);
|
|
168
|
+
this.touchModule.destroy();
|
|
169
|
+
this.touchModule = null;
|
|
170
|
+
super.destroy();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Specifies the value to disable/enable the VScroll component.
|
|
174
|
+
* When set to `true` , the component will be disabled.
|
|
175
|
+
* @param {boolean} value - Based on this Boolean value, VScroll will be enabled (false) or disabled (true).
|
|
176
|
+
* @returns void.
|
|
177
|
+
*/
|
|
178
|
+
public disable(value: boolean): void {
|
|
179
|
+
let navEle: HTMLElement[] = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);
|
|
180
|
+
value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);
|
|
181
|
+
[].slice.call(navEle).forEach((el: HTMLElement) => {
|
|
182
|
+
el.setAttribute('tabindex', !value ? '0' : '-1');
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
private createOverlayElement(element: HTEle): void {
|
|
186
|
+
let id: string = element.id.concat('_nav');
|
|
187
|
+
let downOverlayEle: HTEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_DOWNOVERLAY });
|
|
188
|
+
let clsDown: string = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);
|
|
189
|
+
let downEle: HTEle = buildTag('div', { id: id.concat('down'), className: clsDown });
|
|
190
|
+
let navItem: HTEle = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });
|
|
191
|
+
downEle.appendChild(navItem);
|
|
192
|
+
let upEle: HTEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_UPOVERLAY });
|
|
193
|
+
if (this.ieCheck) {
|
|
194
|
+
downEle.classList.add('e-ie-align');
|
|
195
|
+
}
|
|
196
|
+
element.appendChild(downOverlayEle);
|
|
197
|
+
element.appendChild(downEle);
|
|
198
|
+
element.insertBefore(upEle, element.firstChild);
|
|
199
|
+
this.eventBinding([downEle]);
|
|
200
|
+
}
|
|
201
|
+
private createNavIcon(element: HTEle): void {
|
|
202
|
+
let id: string = element.id.concat('_nav');
|
|
203
|
+
let clsDown: string = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);
|
|
204
|
+
let nav: HTEle = buildTag('div', { id: id.concat('_down'), className: clsDown });
|
|
205
|
+
nav.setAttribute('aria-disabled', 'false');
|
|
206
|
+
let navItem: HTEle = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });
|
|
207
|
+
let clsUp: string = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVUP);
|
|
208
|
+
let navElement: HTEle = buildTag('div', { id: id.concat('_up'), className: clsUp + ' ' + CLS_DISABLE });
|
|
209
|
+
navElement.setAttribute('aria-disabled', 'true');
|
|
210
|
+
let navUpItem: HTEle = buildTag('div', { className: CLS_NAVUPARROW + ' ' + CLS_NAVARROW + ' e-icons' });
|
|
211
|
+
navElement.appendChild(navUpItem);
|
|
212
|
+
nav.appendChild(navItem);
|
|
213
|
+
nav.setAttribute('tabindex', '0');
|
|
214
|
+
element.appendChild(nav);
|
|
215
|
+
element.insertBefore(navElement, element.firstChild);
|
|
216
|
+
if (this.ieCheck) {
|
|
217
|
+
nav.classList.add('e-ie-align');
|
|
218
|
+
navElement.classList.add('e-ie-align');
|
|
219
|
+
}
|
|
220
|
+
this.eventBinding([nav, navElement]);
|
|
221
|
+
}
|
|
222
|
+
private onKeyPress(ev: KeyboardEvent): void {
|
|
223
|
+
if (ev.key === 'Enter') {
|
|
224
|
+
let timeoutFun: Function = () => {
|
|
225
|
+
this.keyTimeout = true;
|
|
226
|
+
this.eleScrolling(10, <HTEle>ev.target, true);
|
|
227
|
+
};
|
|
228
|
+
this.keyTimer = window.setTimeout(() => { timeoutFun(); }, 100);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
private onKeyUp(ev: KeyboardEvent): void {
|
|
232
|
+
if (ev.key !== 'Enter') { return; }
|
|
233
|
+
if (this.keyTimeout) {
|
|
234
|
+
this.keyTimeout = false;
|
|
235
|
+
} else {
|
|
236
|
+
(<HTEle>ev.target).click();
|
|
237
|
+
}
|
|
238
|
+
clearTimeout(this.keyTimer);
|
|
239
|
+
}
|
|
240
|
+
private eventBinding(element: HTEle[]): void {
|
|
241
|
+
[].slice.call(element).forEach((ele: HTEle) => {
|
|
242
|
+
new Touch(ele, { tapHold: this.tabHoldHandler.bind(this), tapHoldThreshold: 500 });
|
|
243
|
+
ele.addEventListener('keydown', this.onKeyPress.bind(this));
|
|
244
|
+
ele.addEventListener('keyup', this.onKeyUp.bind(this));
|
|
245
|
+
ele.addEventListener('mouseup', this.repeatScroll.bind(this));
|
|
246
|
+
ele.addEventListener('touchend', this.repeatScroll.bind(this));
|
|
247
|
+
ele.addEventListener('contextmenu', (e: Event) => {
|
|
248
|
+
e.preventDefault();
|
|
249
|
+
});
|
|
250
|
+
EventHandler.add(ele, 'click', this.clickEventHandler, this);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
private repeatScroll(): void {
|
|
254
|
+
clearInterval(this.timeout);
|
|
255
|
+
}
|
|
256
|
+
private tabHoldHandler(ev: TapEventArgs): void {
|
|
257
|
+
let trgt: HTEle = ev.originalEvent.target as HTEle;
|
|
258
|
+
trgt = this.contains(trgt, CLS_VSCROLLNAV) ? <HTEle>trgt.firstElementChild : trgt;
|
|
259
|
+
let scrollDistance: number = 10;
|
|
260
|
+
let timeoutFun: Function = () => {
|
|
261
|
+
this.eleScrolling(scrollDistance, trgt, true);
|
|
262
|
+
};
|
|
263
|
+
this.timeout = window.setInterval(() => { timeoutFun(); }, 50);
|
|
264
|
+
}
|
|
265
|
+
private contains(element: HTEle, className: string): boolean {
|
|
266
|
+
return element.classList.contains(className);
|
|
267
|
+
}
|
|
268
|
+
private eleScrolling(scrollDis: number, trgt: HTEle, isContinuous: boolean): void {
|
|
269
|
+
let rootElement: HTEle = this.element;
|
|
270
|
+
let classList: DOMTokenList = trgt.classList;
|
|
271
|
+
if (classList.contains(CLS_VSCROLLNAV)) {
|
|
272
|
+
classList = trgt.querySelector('.' + CLS_NAVARROW).classList;
|
|
273
|
+
}
|
|
274
|
+
if (classList.contains(CLS_NAVDOWNARROW)) {
|
|
275
|
+
this.frameScrollRequest(scrollDis, 'add', isContinuous);
|
|
276
|
+
} else if (classList.contains(CLS_NAVUPARROW)) {
|
|
277
|
+
this.frameScrollRequest(scrollDis, '', isContinuous);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
private clickEventHandler(event: Event): void {
|
|
281
|
+
this.eleScrolling(this.scrollStep, <HTEle>event.target, false);
|
|
282
|
+
}
|
|
283
|
+
private wheelEventHandler(e: WheelEvent): void {
|
|
284
|
+
e.preventDefault();
|
|
285
|
+
this.frameScrollRequest(this.scrollStep, (e.deltaY > 0 ? 'add' : ''), false);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
private swipeHandler(e: SwipeEventArgs): void {
|
|
289
|
+
let swipeElement: HTEle = this.scrollEle;
|
|
290
|
+
let distance: number;
|
|
291
|
+
if (e.velocity <= 1) {
|
|
292
|
+
distance = e.distanceY / (e.velocity * 10);
|
|
293
|
+
} else {
|
|
294
|
+
distance = e.distanceY / e.velocity;
|
|
295
|
+
}
|
|
296
|
+
let start: number = 0.5;
|
|
297
|
+
let animate: Function = () => {
|
|
298
|
+
let step: number = Math.sin(start);
|
|
299
|
+
if (step <= 0) {
|
|
300
|
+
window.cancelAnimationFrame(step);
|
|
301
|
+
} else {
|
|
302
|
+
if (e.swipeDirection === 'Up') {
|
|
303
|
+
swipeElement.scrollTop += distance * step;
|
|
304
|
+
} else if (e.swipeDirection === 'Down') {
|
|
305
|
+
swipeElement.scrollTop -= distance * step;
|
|
306
|
+
}
|
|
307
|
+
start -= 0.02;
|
|
308
|
+
window.requestAnimationFrame(animate as FrameRequestCallback);
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
animate();
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
private scrollUpdating(scrollVal: number, action: string): void {
|
|
315
|
+
if (action === 'add') {
|
|
316
|
+
this.scrollEle.scrollTop += scrollVal;
|
|
317
|
+
} else {
|
|
318
|
+
this.scrollEle.scrollTop -= scrollVal;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
private frameScrollRequest(scrollValue: number, action: string, isContinuous: boolean): void {
|
|
323
|
+
let step: number = 10;
|
|
324
|
+
if (isContinuous) {
|
|
325
|
+
this.scrollUpdating(scrollValue, action);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
if (!this.customStep) {
|
|
329
|
+
[].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach((el: HTMLElement) => {
|
|
330
|
+
scrollValue -= el.offsetHeight;
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
let animate: Function = () => {
|
|
334
|
+
if (scrollValue < step) {
|
|
335
|
+
window.cancelAnimationFrame(step);
|
|
336
|
+
} else {
|
|
337
|
+
this.scrollUpdating(step, action);
|
|
338
|
+
scrollValue -= step;
|
|
339
|
+
window.requestAnimationFrame(animate as FrameRequestCallback);
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
animate();
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
private touchHandler(e: ScrollEventArgs): void {
|
|
346
|
+
let el: HTEle = this.scrollEle;
|
|
347
|
+
let distance: number;
|
|
348
|
+
distance = e.distanceY;
|
|
349
|
+
if (e.scrollDirection === 'Up') {
|
|
350
|
+
el.scrollTop = el.scrollTop + distance;
|
|
351
|
+
} else if (e.scrollDirection === 'Down') {
|
|
352
|
+
el.scrollTop = el.scrollTop - distance;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
private arrowDisabling(addDisableCls: HTEle, removeDisableCls: HTEle): void {
|
|
356
|
+
if (this.isDevice) {
|
|
357
|
+
let arrowEle: HTMLElement = isNullOrUndefined(addDisableCls) ? removeDisableCls : addDisableCls;
|
|
358
|
+
let arrowIcon: HTMLElement = arrowEle.querySelector('.' + CLS_NAVARROW) as HTMLElement;
|
|
359
|
+
if (isNullOrUndefined(addDisableCls)) {
|
|
360
|
+
classList(arrowIcon, [CLS_NAVDOWNARROW], [CLS_NAVUPARROW]);
|
|
361
|
+
} else {
|
|
362
|
+
classList(arrowIcon, [CLS_NAVUPARROW], [CLS_NAVDOWNARROW]);
|
|
363
|
+
}
|
|
364
|
+
} else {
|
|
365
|
+
addDisableCls.classList.add(CLS_DISABLE);
|
|
366
|
+
addDisableCls.setAttribute('aria-disabled', 'true');
|
|
367
|
+
addDisableCls.removeAttribute('tabindex');
|
|
368
|
+
removeDisableCls.classList.remove(CLS_DISABLE);
|
|
369
|
+
removeDisableCls.setAttribute('aria-disabled', 'false');
|
|
370
|
+
removeDisableCls.setAttribute('tabindex', '0');
|
|
371
|
+
}
|
|
372
|
+
this.repeatScroll();
|
|
373
|
+
}
|
|
374
|
+
private scrollEventHandler(e: Event): void {
|
|
375
|
+
let target: HTEle = <HTEle>e.target;
|
|
376
|
+
let height: number = target.offsetHeight;
|
|
377
|
+
let rootEle: HTEle = this.element;
|
|
378
|
+
let navUpEle: HTEle = (<HTEle>this.element.querySelector('.' + CLS_VSCROLLNAVUP));
|
|
379
|
+
let navDownEle: HTEle = (<HTEle>this.element.querySelector('.' + CLS_VSCROLLNAVDOWN));
|
|
380
|
+
let upOverlay: HTEle = (<HTEle>this.element.querySelector('.' + CLS_UPOVERLAY));
|
|
381
|
+
let downOverlay: HTEle = (<HTEle>this.element.querySelector('.' + CLS_DOWNOVERLAY));
|
|
382
|
+
let scrollTop: number = target.scrollTop;
|
|
383
|
+
if (scrollTop <= 0) {
|
|
384
|
+
scrollTop = -scrollTop;
|
|
385
|
+
}
|
|
386
|
+
if (this.isDevice) {
|
|
387
|
+
if (scrollTop < OVERLAY_MAXWID) {
|
|
388
|
+
upOverlay.style.height = scrollTop + 'px';
|
|
389
|
+
} else {
|
|
390
|
+
upOverlay.style.height = '40px';
|
|
391
|
+
}
|
|
392
|
+
if ((target.scrollHeight - Math.ceil(height + scrollTop)) < OVERLAY_MAXWID) {
|
|
393
|
+
downOverlay.style.height = (target.scrollHeight - Math.ceil(height + scrollTop)) + 'px';
|
|
394
|
+
} else {
|
|
395
|
+
downOverlay.style.height = '40px';
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
if (scrollTop === 0) {
|
|
399
|
+
this.arrowDisabling(navUpEle, navDownEle);
|
|
400
|
+
} else if (Math.ceil(height + scrollTop + .1) >= target.scrollHeight) {
|
|
401
|
+
this.arrowDisabling(navDownEle, navUpEle);
|
|
402
|
+
} else {
|
|
403
|
+
let disEle: HTEle = <HTEle>this.element.querySelector('.' + CLS_VSCROLLNAV + '.' + CLS_DISABLE);
|
|
404
|
+
if (disEle) {
|
|
405
|
+
disEle.classList.remove(CLS_DISABLE);
|
|
406
|
+
disEle.setAttribute('aria-disabled', 'false');
|
|
407
|
+
disEle.setAttribute('tabindex', '0');
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Gets called when the model property changes.The data that describes the old and new values of property that changed.
|
|
413
|
+
* @param {VScrollModel} newProp
|
|
414
|
+
* @param {VScrollModel} oldProp
|
|
415
|
+
* @returns void
|
|
416
|
+
* @private
|
|
417
|
+
*/
|
|
418
|
+
public onPropertyChanged(newProp: VScrollModel, oldProp: VScrollModel): void {
|
|
419
|
+
for (let prop of Object.keys(newProp)) {
|
|
420
|
+
switch (prop) {
|
|
421
|
+
case 'scrollStep':
|
|
422
|
+
this.setScrollState();
|
|
423
|
+
break;
|
|
424
|
+
case 'enableRtl':
|
|
425
|
+
newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);
|
|
426
|
+
break;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/// <reference path='../common/menu-base-model.d.ts'/>
|
|
2
|
+
import { attributes, getUniqueID, Collection, NotifyPropertyChanges, INotifyPropertyChanged, Property } from '@syncfusion/ej2-base';
|
|
3
|
+
import { getZindexPartial } from '@syncfusion/ej2-popups';
|
|
4
|
+
import { ContextMenuModel } from './context-menu-model';
|
|
5
|
+
import { MenuBase, MenuItem } from '../common/menu-base';
|
|
6
|
+
import { MenuItemModel } from './../common/menu-base-model';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.
|
|
10
|
+
* ```html
|
|
11
|
+
* <div id = 'target'></div>
|
|
12
|
+
* <ul id = 'contextmenu'></ul>
|
|
13
|
+
* ```
|
|
14
|
+
* ```typescript
|
|
15
|
+
* <script>
|
|
16
|
+
* var contextMenuObj = new ContextMenu({items: [{ text: 'Cut' }, { text: 'Copy' },{ text: 'Paste' }], target: '#target'});
|
|
17
|
+
* </script>
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
@NotifyPropertyChanges
|
|
21
|
+
export class ContextMenu extends MenuBase implements INotifyPropertyChanged {
|
|
22
|
+
/**
|
|
23
|
+
* Constructor for creating the widget.
|
|
24
|
+
* @private
|
|
25
|
+
*/
|
|
26
|
+
constructor(options?: ContextMenuModel, element?: string | HTMLUListElement) {
|
|
27
|
+
super(options, <HTMLUListElement | string>element);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Specifies target element selector in which the ContextMenu should be opened.
|
|
32
|
+
* @default ''
|
|
33
|
+
*/
|
|
34
|
+
@Property('')
|
|
35
|
+
public target: string;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Specifies the filter selector for elements inside the target in that the context menu will be opened.
|
|
39
|
+
* @default ''
|
|
40
|
+
*/
|
|
41
|
+
@Property('')
|
|
42
|
+
public filter: string;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Specifies menu items with its properties which will be rendered as ContextMenu.
|
|
46
|
+
* @default []
|
|
47
|
+
* @aspType object
|
|
48
|
+
* @blazorType object
|
|
49
|
+
*/
|
|
50
|
+
@Collection<MenuItemModel>([], MenuItem)
|
|
51
|
+
public items: MenuItemModel[];
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* For internal use only - prerender processing.
|
|
55
|
+
* @private
|
|
56
|
+
*/
|
|
57
|
+
protected preRender(): void {
|
|
58
|
+
this.isMenu = false;
|
|
59
|
+
this.element.id = this.element.id || getUniqueID('ej2-contextmenu');
|
|
60
|
+
super.preRender();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
protected initialize(): void {
|
|
64
|
+
super.initialize();
|
|
65
|
+
attributes(this.element, <{ [key: string]: string }>{ 'role': 'menu', 'tabindex': '0' });
|
|
66
|
+
this.element.style.zIndex = getZindexPartial(this.element).toString();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* This method is used to open the ContextMenu in specified position.
|
|
71
|
+
* @param top - To specify ContextMenu vertical positioning.
|
|
72
|
+
* @param left - To specify ContextMenu horizontal positioning.
|
|
73
|
+
* @param target - To calculate z-index for ContextMenu based upon the specified target.
|
|
74
|
+
* @method open
|
|
75
|
+
* @returns void
|
|
76
|
+
*/
|
|
77
|
+
public open(top: number, left: number, target?: HTMLElement): void {
|
|
78
|
+
super.openMenu(null, null, top, left, null, target);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Closes the ContextMenu if it is opened.
|
|
83
|
+
*/
|
|
84
|
+
public close(): void {
|
|
85
|
+
super.closeMenu();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Called internally if any of the property value changed
|
|
90
|
+
* @private
|
|
91
|
+
* @param {ContextMenuModel} newProp
|
|
92
|
+
* @param {ContextMenuModel} oldProp
|
|
93
|
+
* @returns void
|
|
94
|
+
*/
|
|
95
|
+
public onPropertyChanged(newProp: ContextMenuModel, oldProp: ContextMenuModel): void {
|
|
96
|
+
super.onPropertyChanged(newProp, oldProp);
|
|
97
|
+
for (let prop of Object.keys(newProp)) {
|
|
98
|
+
switch (prop) {
|
|
99
|
+
case 'filter':
|
|
100
|
+
this.close();
|
|
101
|
+
this.filter = newProp.filter;
|
|
102
|
+
break;
|
|
103
|
+
case 'target':
|
|
104
|
+
this.unWireEvents(oldProp.target);
|
|
105
|
+
this.wireEvents();
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get module name.
|
|
113
|
+
* @returns string
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
protected getModuleName(): string {
|
|
117
|
+
return 'contextmenu';
|
|
118
|
+
}
|
|
119
|
+
}
|