@syncfusion/ej2-schedule 31.1.17 → 31.1.20

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.
Files changed (167) hide show
  1. package/dist/ej2-schedule.min.js +2 -2
  2. package/dist/ej2-schedule.umd.min.js +2 -2
  3. package/dist/ej2-schedule.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-schedule.es2015.js +1 -1
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +1 -1
  7. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  8. package/dist/global/ej2-schedule.min.js +2 -2
  9. package/dist/global/ej2-schedule.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +17 -52
  12. package/src/schedule/event-renderer/event-base.js +1 -1
  13. package/styles/bootstrap4-lite.css +8 -0
  14. package/styles/bootstrap4.css +8 -0
  15. package/styles/recurrence-editor/bootstrap4.css +8 -0
  16. package/styles/schedule/bootstrap4.css +8 -0
  17. package/dist/ts/common/calendar-util.d.ts +0 -92
  18. package/dist/ts/common/calendar-util.ts +0 -261
  19. package/dist/ts/common/index.d.ts +0 -4
  20. package/dist/ts/common/index.ts +0 -4
  21. package/dist/ts/components.d.ts +0 -5
  22. package/dist/ts/components.ts +0 -5
  23. package/dist/ts/index.d.ts +0 -6
  24. package/dist/ts/index.ts +0 -7
  25. package/dist/ts/recurrence-editor/date-generator.d.ts +0 -76
  26. package/dist/ts/recurrence-editor/date-generator.ts +0 -1699
  27. package/dist/ts/recurrence-editor/index.d.ts +0 -6
  28. package/dist/ts/recurrence-editor/index.ts +0 -6
  29. package/dist/ts/recurrence-editor/recurrence-editor-model.d.ts +0 -112
  30. package/dist/ts/recurrence-editor/recurrence-editor.d.ts +0 -245
  31. package/dist/ts/recurrence-editor/recurrence-editor.ts +0 -1257
  32. package/dist/ts/schedule/actions/action-base.d.ts +0 -44
  33. package/dist/ts/schedule/actions/action-base.ts +0 -493
  34. package/dist/ts/schedule/actions/crud.d.ts +0 -41
  35. package/dist/ts/schedule/actions/crud.ts +0 -784
  36. package/dist/ts/schedule/actions/data.d.ts +0 -63
  37. package/dist/ts/schedule/actions/data.ts +0 -128
  38. package/dist/ts/schedule/actions/drag.d.ts +0 -75
  39. package/dist/ts/schedule/actions/drag.ts +0 -1401
  40. package/dist/ts/schedule/actions/keyboard.d.ts +0 -100
  41. package/dist/ts/schedule/actions/keyboard.ts +0 -1435
  42. package/dist/ts/schedule/actions/resize.d.ts +0 -27
  43. package/dist/ts/schedule/actions/resize.ts +0 -602
  44. package/dist/ts/schedule/actions/scroll.d.ts +0 -69
  45. package/dist/ts/schedule/actions/scroll.ts +0 -105
  46. package/dist/ts/schedule/actions/touch.d.ts +0 -32
  47. package/dist/ts/schedule/actions/touch.ts +0 -314
  48. package/dist/ts/schedule/actions/virtual-scroll.d.ts +0 -55
  49. package/dist/ts/schedule/actions/virtual-scroll.ts +0 -596
  50. package/dist/ts/schedule/actions/work-cells.d.ts +0 -14
  51. package/dist/ts/schedule/actions/work-cells.ts +0 -151
  52. package/dist/ts/schedule/base/constant.d.ts +0 -102
  53. package/dist/ts/schedule/base/constant.ts +0 -103
  54. package/dist/ts/schedule/base/css-constant.d.ts +0 -475
  55. package/dist/ts/schedule/base/css-constant.ts +0 -475
  56. package/dist/ts/schedule/base/interface.d.ts +0 -673
  57. package/dist/ts/schedule/base/interface.ts +0 -738
  58. package/dist/ts/schedule/base/resource.d.ts +0 -59
  59. package/dist/ts/schedule/base/resource.ts +0 -1091
  60. package/dist/ts/schedule/base/schedule-model.d.ts +0 -930
  61. package/dist/ts/schedule/base/schedule.d.ts +0 -1967
  62. package/dist/ts/schedule/base/schedule.ts +0 -4221
  63. package/dist/ts/schedule/base/type.d.ts +0 -134
  64. package/dist/ts/schedule/base/type.ts +0 -142
  65. package/dist/ts/schedule/base/util.d.ts +0 -266
  66. package/dist/ts/schedule/base/util.ts +0 -492
  67. package/dist/ts/schedule/event-renderer/agenda-base.d.ts +0 -15
  68. package/dist/ts/schedule/event-renderer/agenda-base.ts +0 -423
  69. package/dist/ts/schedule/event-renderer/event-base.d.ts +0 -101
  70. package/dist/ts/schedule/event-renderer/event-base.ts +0 -1501
  71. package/dist/ts/schedule/event-renderer/inline-edit.d.ts +0 -23
  72. package/dist/ts/schedule/event-renderer/inline-edit.ts +0 -287
  73. package/dist/ts/schedule/event-renderer/month.d.ts +0 -60
  74. package/dist/ts/schedule/event-renderer/month.ts +0 -760
  75. package/dist/ts/schedule/event-renderer/timeline-view.d.ts +0 -51
  76. package/dist/ts/schedule/event-renderer/timeline-view.ts +0 -606
  77. package/dist/ts/schedule/event-renderer/vertical-view.d.ts +0 -57
  78. package/dist/ts/schedule/event-renderer/vertical-view.ts +0 -898
  79. package/dist/ts/schedule/event-renderer/year.d.ts +0 -27
  80. package/dist/ts/schedule/event-renderer/year.ts +0 -623
  81. package/dist/ts/schedule/exports/calendar-export.d.ts +0 -16
  82. package/dist/ts/schedule/exports/calendar-export.ts +0 -160
  83. package/dist/ts/schedule/exports/calendar-import.d.ts +0 -18
  84. package/dist/ts/schedule/exports/calendar-import.ts +0 -277
  85. package/dist/ts/schedule/exports/excel-export.d.ts +0 -14
  86. package/dist/ts/schedule/exports/excel-export.ts +0 -89
  87. package/dist/ts/schedule/exports/index.d.ts +0 -7
  88. package/dist/ts/schedule/exports/index.ts +0 -7
  89. package/dist/ts/schedule/exports/print.d.ts +0 -20
  90. package/dist/ts/schedule/exports/print.ts +0 -233
  91. package/dist/ts/schedule/index.d.ts +0 -26
  92. package/dist/ts/schedule/index.ts +0 -26
  93. package/dist/ts/schedule/models/event-settings-model.d.ts +0 -165
  94. package/dist/ts/schedule/models/event-settings.d.ts +0 -149
  95. package/dist/ts/schedule/models/event-settings.ts +0 -187
  96. package/dist/ts/schedule/models/field-options-model.d.ts +0 -37
  97. package/dist/ts/schedule/models/field-options.d.ts +0 -31
  98. package/dist/ts/schedule/models/field-options.ts +0 -41
  99. package/dist/ts/schedule/models/fields-model.d.ts +0 -129
  100. package/dist/ts/schedule/models/fields.d.ts +0 -117
  101. package/dist/ts/schedule/models/fields.ts +0 -149
  102. package/dist/ts/schedule/models/group-model.d.ts +0 -69
  103. package/dist/ts/schedule/models/group.d.ts +0 -60
  104. package/dist/ts/schedule/models/group.ts +0 -75
  105. package/dist/ts/schedule/models/header-rows-model.d.ts +0 -33
  106. package/dist/ts/schedule/models/header-rows.d.ts +0 -30
  107. package/dist/ts/schedule/models/header-rows.ts +0 -35
  108. package/dist/ts/schedule/models/models.d.ts +0 -14
  109. package/dist/ts/schedule/models/models.ts +0 -15
  110. package/dist/ts/schedule/models/quick-info-templates-model.d.ts +0 -52
  111. package/dist/ts/schedule/models/quick-info-templates.d.ts +0 -47
  112. package/dist/ts/schedule/models/quick-info-templates.ts +0 -56
  113. package/dist/ts/schedule/models/resources-model.d.ts +0 -122
  114. package/dist/ts/schedule/models/resources.d.ts +0 -106
  115. package/dist/ts/schedule/models/resources.ts +0 -138
  116. package/dist/ts/schedule/models/time-scale-model.d.ts +0 -57
  117. package/dist/ts/schedule/models/time-scale.d.ts +0 -50
  118. package/dist/ts/schedule/models/time-scale.ts +0 -61
  119. package/dist/ts/schedule/models/toolbar-model.d.ts +0 -196
  120. package/dist/ts/schedule/models/toolbar.d.ts +0 -176
  121. package/dist/ts/schedule/models/toolbar.ts +0 -196
  122. package/dist/ts/schedule/models/views-model.d.ts +0 -370
  123. package/dist/ts/schedule/models/views.d.ts +0 -335
  124. package/dist/ts/schedule/models/views.ts +0 -408
  125. package/dist/ts/schedule/models/work-hours-model.d.ts +0 -29
  126. package/dist/ts/schedule/models/work-hours.d.ts +0 -24
  127. package/dist/ts/schedule/models/work-hours.ts +0 -31
  128. package/dist/ts/schedule/popups/event-tooltip.d.ts +0 -16
  129. package/dist/ts/schedule/popups/event-tooltip.ts +0 -203
  130. package/dist/ts/schedule/popups/event-window.d.ts +0 -118
  131. package/dist/ts/schedule/popups/event-window.ts +0 -2055
  132. package/dist/ts/schedule/popups/form-validator.d.ts +0 -16
  133. package/dist/ts/schedule/popups/form-validator.ts +0 -110
  134. package/dist/ts/schedule/popups/quick-popups.d.ts +0 -78
  135. package/dist/ts/schedule/popups/quick-popups.ts +0 -1470
  136. package/dist/ts/schedule/renderer/agenda.d.ts +0 -45
  137. package/dist/ts/schedule/renderer/agenda.ts +0 -497
  138. package/dist/ts/schedule/renderer/day.d.ts +0 -20
  139. package/dist/ts/schedule/renderer/day.ts +0 -28
  140. package/dist/ts/schedule/renderer/header-renderer.d.ts +0 -48
  141. package/dist/ts/schedule/renderer/header-renderer.ts +0 -736
  142. package/dist/ts/schedule/renderer/month-agenda.d.ts +0 -29
  143. package/dist/ts/schedule/renderer/month-agenda.ts +0 -184
  144. package/dist/ts/schedule/renderer/month.d.ts +0 -61
  145. package/dist/ts/schedule/renderer/month.ts +0 -766
  146. package/dist/ts/schedule/renderer/renderer.d.ts +0 -13
  147. package/dist/ts/schedule/renderer/renderer.ts +0 -165
  148. package/dist/ts/schedule/renderer/timeline-header-row.d.ts +0 -15
  149. package/dist/ts/schedule/renderer/timeline-header-row.ts +0 -132
  150. package/dist/ts/schedule/renderer/timeline-month.d.ts +0 -29
  151. package/dist/ts/schedule/renderer/timeline-month.ts +0 -184
  152. package/dist/ts/schedule/renderer/timeline-view.d.ts +0 -31
  153. package/dist/ts/schedule/renderer/timeline-view.ts +0 -308
  154. package/dist/ts/schedule/renderer/timeline-year.d.ts +0 -22
  155. package/dist/ts/schedule/renderer/timeline-year.ts +0 -450
  156. package/dist/ts/schedule/renderer/vertical-view.d.ts +0 -63
  157. package/dist/ts/schedule/renderer/vertical-view.ts +0 -911
  158. package/dist/ts/schedule/renderer/view-base.d.ts +0 -83
  159. package/dist/ts/schedule/renderer/view-base.ts +0 -709
  160. package/dist/ts/schedule/renderer/week.d.ts +0 -22
  161. package/dist/ts/schedule/renderer/week.ts +0 -35
  162. package/dist/ts/schedule/renderer/work-week.d.ts +0 -22
  163. package/dist/ts/schedule/renderer/work-week.ts +0 -36
  164. package/dist/ts/schedule/renderer/year.d.ts +0 -46
  165. package/dist/ts/schedule/renderer/year.ts +0 -470
  166. package/dist/ts/schedule/timezone/timezone.d.ts +0 -16
  167. package/dist/ts/schedule/timezone/timezone.ts +0 -313
@@ -1,736 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { L10n, isNullOrUndefined, createElement, remove, closest, addClass, removeClass, extend, append } from '@syncfusion/ej2-base';
3
- import { Toolbar, ItemModel, ClickEventArgs } from '@syncfusion/ej2-navigations';
4
- import { Calendar, CalendarView, ChangedEventArgs, NavigatedEventArgs } from '@syncfusion/ej2-calendars';
5
- import { Popup } from '@syncfusion/ej2-popups';
6
- import { Schedule } from '../base/schedule';
7
- import { EJ2Instance, ActionEventArgs, CellClickEventArgs, DateRangeTemplateArgs } from '../base/interface';
8
- import { View } from '../base/type';
9
- import { ToolbarItemModel, ViewsModel } from '../models/models';
10
- import * as events from '../base/constant';
11
- import * as util from '../base/util';
12
- import * as cls from '../base/css-constant';
13
-
14
- /**
15
- * Header module
16
- */
17
- export class HeaderRenderer {
18
- public element: HTMLElement;
19
- private parent: Schedule;
20
- private l10n: L10n;
21
- private toolbarObj: Toolbar;
22
- private headerPopup: Popup;
23
- private headerCalendar: Calendar;
24
-
25
- constructor(parent: Schedule) {
26
- this.parent = parent;
27
- this.l10n = this.parent.localeObj;
28
- this.renderHeader();
29
- this.addEventListener();
30
- }
31
-
32
- public addEventListener(): void {
33
- this.parent.on(events.documentClick, this.closeHeaderPopup, this);
34
- }
35
-
36
- public removeEventListener(): void {
37
- this.parent.off(events.documentClick, this.closeHeaderPopup);
38
- }
39
-
40
- private closeHeaderPopup(e: { event: Event }): void {
41
- const closestEle: Element = closest(e.event.target as HTMLElement, '.e-date-range,.e-header-popup,.e-day,.e-selected');
42
- const closestPop: Element = closest(e.event.target as HTMLElement, '.e-hor-nav,.e-toolbar-pop');
43
- const contentWrap: HTMLElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
44
- const toolbarPop: HTMLElement = this.parent.element.querySelector('.e-toolbar-pop');
45
- if (this.parent.isAdaptive) {
46
- if (!isNullOrUndefined(closestPop) && (closestPop.classList.contains('e-toolbar-pop') ||
47
- closestPop.classList.contains('e-hor-nav')) && !(closestPop.classList.contains('e-hor-nav') &&
48
- toolbarPop && toolbarPop.classList.contains(cls.POPUP_OPEN))) {
49
- addClass([contentWrap], cls.SCROLL_HIDDEN);
50
- } else {
51
- removeClass([contentWrap], cls.SCROLL_HIDDEN);
52
- const popupEle: HTMLElement = this.element.querySelector('.e-toolbar-pop') as HTMLElement;
53
- if (!isNullOrUndefined(popupEle)) {
54
- const popupObj: Popup = (popupEle as EJ2Instance).ej2_instances[0] as Popup;
55
- if (popupObj && !(!isNullOrUndefined(closestPop) && closestPop.classList.contains('e-hor-nav') &&
56
- popupEle.classList.contains(cls.POPUP_OPEN))) {
57
- popupObj.hide();
58
- }
59
- }
60
- }
61
- }
62
- if (!isNullOrUndefined(closestEle)) {
63
- return;
64
- }
65
- this.hideHeaderPopup();
66
- }
67
-
68
- public hideHeaderPopup(): void {
69
- if (this.headerPopup) {
70
- this.headerPopup.hide();
71
- }
72
- }
73
-
74
- public renderHeader(): void {
75
- this.element = createElement('div', { className: cls.TOOLBAR_CONTAINER });
76
- const toolbarEle: Element = createElement('div', { className: cls.HEADER_TOOLBAR });
77
- this.element.appendChild(toolbarEle);
78
- this.parent.element.insertBefore(this.element, this.parent.element.firstElementChild);
79
- this.renderToolbar();
80
- }
81
-
82
- private renderToolbar(): void {
83
- const items: ItemModel[] = (this.parent.toolbarItems && this.parent.toolbarItems.length > 0) ?
84
- this.getToolbarItems() : this.getItems();
85
- this.parent.trigger(events.actionBegin, { requestType: 'toolbarItemRendering', items: items }, (args: ActionEventArgs) => {
86
- this.toolbarObj = new Toolbar({
87
- items: args.items,
88
- overflowMode: 'Popup',
89
- clicked: this.toolbarClickHandler.bind(this),
90
- created: this.toolbarCreateHandler.bind(this),
91
- enableRtl: this.parent.enableRtl,
92
- enableHtmlSanitizer: this.parent.enableHtmlSanitizer,
93
- locale: this.parent.locale
94
- });
95
- this.toolbarObj.isStringTemplate = true;
96
- this.toolbarObj.root = this.parent.root ? this.parent.root : this.parent;
97
- this.toolbarObj.appendTo(this.parent.element.querySelector('.' + cls.HEADER_TOOLBAR) as HTMLElement);
98
- this.toolbarObj.element.setAttribute('aria-label', 'Scheduler');
99
- const prevNavEle: HTMLElement = this.toolbarObj.element.querySelector('.e-prev') as HTMLElement;
100
- if (prevNavEle) {
101
- (prevNavEle.firstElementChild as Element).setAttribute('title', this.l10n.getConstant('previous'));
102
- }
103
- const nextNavEle: HTMLElement = this.toolbarObj.element.querySelector('.e-next') as HTMLElement;
104
- if (nextNavEle) {
105
- (nextNavEle.firstElementChild as Element).setAttribute('title', this.l10n.getConstant('next'));
106
- }
107
- this.updateAddIcon();
108
- this.updateActiveView();
109
- this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: this.toolbarObj.items });
110
- });
111
- }
112
-
113
- public updateItems(): void {
114
- if (this.toolbarObj) {
115
- const items: ItemModel[] = this.getItems();
116
- this.parent.trigger(events.actionBegin, { requestType: 'toolbarItemRendering', items: items }, (args: ActionEventArgs) => {
117
- this.toolbarObj.items = args.items;
118
- this.toolbarObj.dataBind();
119
- this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: this.toolbarObj.items });
120
- });
121
- }
122
- }
123
-
124
- public getPopUpRelativeElement(): HTMLElement {
125
- if (this.parent.isAdaptive) {
126
- return this.toolbarObj.element;
127
- }
128
- return this.element.querySelector('.e-date-range') as HTMLElement;
129
- }
130
-
131
- public setDayOfWeek(index: number): void {
132
- if (this.headerCalendar) {
133
- this.headerCalendar.firstDayOfWeek = index;
134
- this.headerCalendar.dataBind();
135
- }
136
- }
137
-
138
- public setCalendarDate(date: Date): void {
139
- if (this.headerCalendar) {
140
- this.headerCalendar.value = date;
141
- this.headerCalendar.dataBind();
142
- }
143
- }
144
-
145
- public setCalendarMinMaxDate(): void {
146
- if (this.headerCalendar) {
147
- this.headerCalendar.min = this.parent.minDate;
148
- this.headerCalendar.max = this.parent.maxDate;
149
- this.headerCalendar.dataBind();
150
- }
151
- }
152
-
153
- public getCalendarView(): CalendarView {
154
- if (['Month', 'MonthAgenda', 'TimelineMonth'].indexOf(this.parent.currentView) > -1) {
155
- return 'Year';
156
- } else if (['Year', 'TimelineYear'].indexOf(this.parent.currentView) > -1) {
157
- return 'Decade';
158
- } else {
159
- return 'Month';
160
- }
161
- }
162
-
163
- public setCalendarView(): void {
164
- if (this.headerCalendar) {
165
- const calendarView: CalendarView = this.getCalendarView();
166
- this.headerCalendar.depth = calendarView;
167
- this.headerCalendar.start = calendarView;
168
- this.headerCalendar.refresh();
169
- }
170
- }
171
-
172
- public updateActiveView(): void {
173
- const selEle: HTMLElement[] = [].slice.call(this.toolbarObj.element.querySelectorAll('.e-views'));
174
- removeClass(selEle, ['e-active-view']);
175
- if (selEle.length > 0 && selEle[this.parent.viewIndex]) {
176
- addClass(<Element[]>[selEle[this.parent.viewIndex]], ['e-active-view']);
177
- }
178
- }
179
-
180
- public updateDateRange(date?: Date): void {
181
- const selEle: Element = this.toolbarObj.element.querySelector('.e-date-range');
182
- if (!selEle) {
183
- return;
184
- }
185
- selEle.firstElementChild.setAttribute('aria-haspopup', 'true');
186
- const textEle: Element = selEle.querySelector('.e-tbar-btn-text');
187
- if (this.parent.activeViewOptions.dateRangeTemplate) {
188
- textEle.textContent = '';
189
- const args: DateRangeTemplateArgs = {
190
- startDate: this.parent.activeView.getStartDate(),
191
- endDate: this.parent.activeView.getEndDate(), currentView: this.parent.currentView
192
- };
193
- const viewName: string = this.parent.activeViewOptions.dateRangeTemplateName;
194
- const templateId: string = this.parent.element.id + '_' + viewName + 'dateRangeTemplate';
195
- const dateTemplate: Element[] = [].slice.call(
196
- this.parent.getDateRangeTemplate()(args, this.parent, 'dateRangeTemplate', templateId,
197
- false, undefined, undefined, this.parent.root));
198
- append(dateTemplate, textEle);
199
- }
200
- else {
201
- const text: string = this.parent.activeView.getDateRangeText(date);
202
- selEle.firstElementChild.setAttribute('aria-label', text);
203
- textEle.textContent = text;
204
- }
205
- this.refresh();
206
- }
207
-
208
- public refresh(): void {
209
- if (this.toolbarObj) {
210
- this.toolbarObj.refreshOverflow();
211
- }
212
- }
213
-
214
- public updateAddIcon(): void {
215
- const addEle: HTMLElement = this.toolbarObj.element.querySelector('.e-add') as HTMLElement;
216
- if (addEle) {
217
- if (!this.parent.eventSettings.allowAdding) {
218
- addClass([addEle], cls.HIDDEN_CLASS);
219
- } else {
220
- removeClass([addEle], cls.HIDDEN_CLASS);
221
- }
222
- }
223
- }
224
-
225
- private getDateRangeText(): string {
226
- const dateString: string = this.parent.globalize.formatDate(this.parent.selectedDate, {
227
- format: 'MMMM y', calendar: this.parent.getCalendarMode()
228
- });
229
- return util.capitalizeFirstWord(dateString, 'single');
230
- }
231
-
232
- private getItemModel(propItem: ToolbarItemModel): ToolbarItemModel {
233
- const item: ToolbarItemModel = {};
234
- if (propItem.id) {
235
- item.id = propItem.id;
236
- }
237
- if (propItem.text) {
238
- item.text = propItem.text;
239
- }
240
- if (propItem.tooltipText) {
241
- item.tooltipText = propItem.tooltipText;
242
- }
243
- if (propItem.prefixIcon) {
244
- item.prefixIcon = propItem.prefixIcon;
245
- }
246
- if (propItem.cssClass) {
247
- item.cssClass = propItem.cssClass;
248
- }
249
- if (propItem.showTextOn !== 'Both') {
250
- item.showTextOn = propItem.showTextOn;
251
- }
252
- if (propItem.template) {
253
- item.template = propItem.template;
254
- }
255
- if (propItem.disabled) {
256
- item.disabled = propItem.disabled;
257
- }
258
- if (propItem.width !== 'auto') {
259
- item.width = propItem.width;
260
- }
261
- if (propItem.suffixIcon) {
262
- item.suffixIcon = propItem.suffixIcon;
263
- }
264
- if (propItem.align !== 'Left') {
265
- item.align = propItem.align;
266
- }
267
- if (propItem.overflow !== 'None') {
268
- item.overflow = propItem.overflow;
269
- }
270
- if (propItem.htmlAttributes) {
271
- item.htmlAttributes = propItem.htmlAttributes;
272
- }
273
- if (propItem.type !== 'Button') {
274
- item.type = propItem.type;
275
- }
276
- if (propItem.visible !== true) {
277
- item.visible = propItem.visible;
278
- }
279
- if (propItem.showAlwaysInPopup) {
280
- item.showAlwaysInPopup = propItem.showAlwaysInPopup;
281
- }
282
- if (propItem.tabIndex !== -1) {
283
- item.tabIndex = propItem.tabIndex;
284
- }
285
- return item;
286
- }
287
-
288
- private getToolbarItems(): ItemModel[] {
289
- const items: ItemModel[] = [];
290
- let propItem: ToolbarItemModel;
291
- for (const item of this.parent.toolbarItems) {
292
- propItem = this.getItemModel(item);
293
- let tbItem: ItemModel;
294
- if (item.name) {
295
- switch (item.name) {
296
- case 'Today':
297
- tbItem = {
298
- showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-today',
299
- text: this.l10n.getConstant('today'), cssClass: 'e-today', overflow: 'Show'
300
- };
301
- tbItem.align = propItem.align ? propItem.align : item.align;
302
- items.push({...tbItem, ...propItem});
303
- break;
304
- case 'Previous':
305
- tbItem = {
306
- prefixIcon: 'e-icon-prev', tooltipText: 'Previous', overflow: 'Show',
307
- cssClass: 'e-prev', htmlAttributes: { 'role': 'navigation' }
308
- };
309
- tbItem.align = propItem.align ? propItem.align : item.align;
310
- items.push({...tbItem, ...propItem});
311
- break;
312
- case 'Next':
313
- tbItem = {
314
- prefixIcon: 'e-icon-next', tooltipText: 'Next', overflow: 'Show',
315
- cssClass: 'e-next', htmlAttributes: { 'role': 'navigation' }
316
- };
317
- tbItem.align = propItem.align ? propItem.align : item.align;
318
- items.push({...tbItem, ...propItem});
319
- break;
320
- case 'DateRangeText':
321
- tbItem = {
322
- text: this.getDateRangeText(), suffixIcon: 'e-icon-down-arrow', cssClass: 'e-date-range',
323
- overflow: 'Show',
324
- htmlAttributes: { 'aria-atomic': 'true', 'aria-live': 'assertive', 'role': 'navigation' }
325
- };
326
- tbItem.align = propItem.align ? propItem.align : item.align;
327
- items.push({...tbItem, ...propItem});
328
- break;
329
- case 'NewEvent':
330
- tbItem = {
331
- showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-add',
332
- text: this.l10n.getConstant('newEvent'), cssClass: 'e-add', overflow: 'Show'
333
- };
334
- tbItem.align = propItem.align ? propItem.align : item.align;
335
- items.push({...tbItem, ...propItem});
336
- break;
337
- case 'Views':
338
- if (!isNullOrUndefined(this.parent.views) && this.parent.views.length > 1) {
339
- for (const view of this.parent.views) {
340
- tbItem = this.getItemObject(view);
341
- tbItem.align = propItem.align ? propItem.align : item.align;
342
- items.push({...tbItem, ...propItem});
343
- }
344
- }
345
- break;
346
- case 'Custom':
347
- items.push(item);
348
- break;
349
- }
350
- } else {
351
- items.push(item);
352
- }
353
- }
354
- return items;
355
- }
356
-
357
- private getItems(): ItemModel[] {
358
- const items: ItemModel[] = [];
359
- items.push({
360
- align: 'Left', prefixIcon: 'e-icon-prev', tooltipText: 'Previous', overflow: 'Show',
361
- cssClass: 'e-prev'
362
- });
363
- items.push({
364
- align: 'Left', prefixIcon: 'e-icon-next', tooltipText: 'Next', overflow: 'Show',
365
- cssClass: 'e-next'
366
- });
367
- items.push({
368
- align: 'Left', text: this.getDateRangeText(), suffixIcon: 'e-icon-down-arrow', cssClass: 'e-date-range',
369
- overflow: 'Show',
370
- htmlAttributes: { 'aria-atomic': 'true', 'aria-live': 'assertive' }
371
- });
372
- if (this.parent.isAdaptive || this.parent.enableAdaptiveUI) {
373
- items.push({
374
- align: 'Right', showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-add',
375
- text: this.l10n.getConstant('newEvent'), cssClass: 'e-add', overflow: 'Show'
376
- });
377
- items.push({
378
- align: 'Right', showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-today',
379
- text: this.l10n.getConstant('today'), cssClass: 'e-today', overflow: 'Show'
380
- });
381
- } else {
382
- items.push({
383
- align: 'Right', showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-today',
384
- text: this.l10n.getConstant('today'), cssClass: 'e-today', overflow: 'Show'
385
- });
386
- if (!isNullOrUndefined(this.parent.views) && this.parent.views.length > 1) {
387
- items.push({ align: 'Right', type: 'Separator', cssClass: 'e-schedule-seperator' });
388
- }
389
- }
390
- if (!isNullOrUndefined(this.parent.views) && this.parent.views.length > 1) {
391
- for (const item of this.parent.views) {
392
- items.push(this.getItemObject(item));
393
- }
394
- }
395
- return items;
396
- }
397
-
398
- private getItemObject(item: View | ViewsModel): ItemModel {
399
- let viewName: string;
400
- let displayName: string;
401
- if (typeof (item) === 'string') {
402
- viewName = item.toLowerCase();
403
- displayName = null;
404
- } else {
405
- viewName = item.option.toLowerCase();
406
- displayName = item.displayName;
407
- }
408
- let view: ItemModel;
409
- let orientationClass: string;
410
- const isItemInsidePopup: boolean = this.parent.isAdaptive || this.parent.enableAdaptiveUI;
411
- switch (viewName) {
412
- case 'day':
413
- view = {
414
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-day',
415
- text: displayName || this.l10n.getConstant('day'), cssClass: 'e-views e-day'
416
- };
417
- break;
418
- case 'week':
419
- view = {
420
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-week',
421
- text: displayName || this.l10n.getConstant('week'), cssClass: 'e-views e-week'
422
- };
423
- break;
424
- case 'workweek':
425
- view = {
426
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-workweek',
427
- text: displayName || this.l10n.getConstant('workWeek'), cssClass: 'e-views e-work-week'
428
- };
429
- break;
430
- case 'month':
431
- view = {
432
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-month',
433
- text: displayName || this.l10n.getConstant('month'), cssClass: 'e-views e-month'
434
- };
435
- break;
436
- case 'year':
437
- view = {
438
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-year',
439
- text: displayName || this.l10n.getConstant('year'), cssClass: 'e-views e-year'
440
- };
441
- break;
442
- case 'agenda':
443
- view = {
444
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-agenda',
445
- text: displayName || this.l10n.getConstant('agenda'), cssClass: 'e-views e-agenda'
446
- };
447
- break;
448
- case 'monthagenda':
449
- view = {
450
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-month-agenda',
451
- text: displayName || this.l10n.getConstant('monthAgenda'), cssClass: 'e-views e-month-agenda'
452
- };
453
- break;
454
- case 'timelineday':
455
- view = {
456
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-day',
457
- text: displayName || this.l10n.getConstant('timelineDay'), cssClass: 'e-views e-timeline-day'
458
- };
459
- break;
460
- case 'timelineweek':
461
- view = {
462
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-week',
463
- text: displayName || this.l10n.getConstant('timelineWeek'), cssClass: 'e-views e-timeline-week'
464
- };
465
- break;
466
- case 'timelineworkweek':
467
- view = {
468
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-workweek',
469
- text: displayName || this.l10n.getConstant('timelineWorkWeek'), cssClass: 'e-views e-timeline-work-week'
470
- };
471
- break;
472
- case 'timelinemonth':
473
- view = {
474
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-month',
475
- text: displayName || this.l10n.getConstant('timelineMonth'), cssClass: 'e-views e-timeline-month'
476
- };
477
- break;
478
- case 'timelineyear':
479
- orientationClass = ((item as ViewsModel).orientation === 'Vertical') ? 'vertical' : 'horizontal';
480
- view = {
481
- align: 'Right', showAlwaysInPopup: isItemInsidePopup, prefixIcon: 'e-icon-timeline-year-' + orientationClass,
482
- text: displayName || this.l10n.getConstant('timelineYear'), cssClass: 'e-views e-timeline-year'
483
- };
484
- break;
485
- }
486
- return view;
487
- }
488
-
489
- private renderHeaderPopup(): void {
490
- const headerPopupEle: HTMLElement = createElement('div', { className: cls.HEADER_POPUP_CLASS });
491
- const headerCalendarEle: HTMLElement = createElement('div', { className: cls.HEADER_CALENDAR_CLASS });
492
- headerPopupEle.appendChild(headerCalendarEle);
493
- this.element.appendChild(headerPopupEle);
494
- this.headerPopup = new Popup(headerPopupEle, {
495
- actionOnScroll: 'hide',
496
- targetType: 'relative',
497
- relateTo: this.getPopUpRelativeElement(),
498
- position: { X: 'left', Y: 'bottom' },
499
- collision: {X: 'fit'},
500
- viewPortElement: this.element,
501
- enableRtl: this.parent.enableRtl
502
- });
503
- const calendarView: CalendarView = this.getCalendarView();
504
- const isDisplayDate: boolean = this.parent.currentView === 'Month' &&
505
- !isNullOrUndefined(this.parent.activeViewOptions.displayDate) && !this.hasSelectedDate();
506
- this.headerCalendar = new Calendar({
507
- value: isDisplayDate ? this.parent.activeViewOptions.displayDate : this.parent.selectedDate,
508
- min: this.parent.minDate,
509
- max: this.parent.maxDate,
510
- firstDayOfWeek: this.parent.activeViewOptions.firstDayOfWeek,
511
- weekNumber: this.parent.activeViewOptions.showWeekNumber,
512
- enableRtl: this.parent.enableRtl,
513
- locale: this.parent.locale,
514
- depth: calendarView,
515
- start: calendarView,
516
- calendarMode: this.parent.calendarMode,
517
- change: this.calendarChange.bind(this)
518
- });
519
- this.setCalendarTimezone();
520
- this.headerCalendar.appendTo(headerCalendarEle);
521
- this.headerPopup.hide();
522
- }
523
-
524
- private calendarChange(args: ChangedEventArgs & NavigatedEventArgs): void {
525
- if (args.value.getTime() !== this.parent.selectedDate.getTime()) {
526
- const calendarDate: Date = util.resetTime(new Date(args.value));
527
- this.parent.changeDate(calendarDate);
528
- }
529
- this.headerPopup.hide();
530
- }
531
-
532
- public setCalendarTimezone(): void {
533
- if (this.headerCalendar) {
534
- (this.headerCalendar as any).timezone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();
535
- }
536
- }
537
-
538
- private calculateViewIndex(args: ClickEventArgs): number {
539
- const target: Element = closest(args.originalEvent.target as HTMLElement, '.e-views');
540
- const views: Element[] = [].slice.call(this.element.querySelectorAll('.e-views'));
541
- return views.indexOf(target);
542
- }
543
-
544
- private toolbarCreateHandler(): void {
545
- if (this.parent && this.parent.portals && this.toolbarObj && this.toolbarObj.portals) {
546
- this.parent.portals = this.parent.portals.concat(this.toolbarObj.portals);
547
- this.parent['renderReactTemplates']();
548
- }
549
- }
550
-
551
- private toolbarClickHandler(args: ClickEventArgs): void {
552
- if (!args.item) {
553
- return;
554
- }
555
- const strClass: string = args.item.cssClass.replace('e-views ', '');
556
- let data: CellClickEventArgs;
557
- let isSameTime: boolean;
558
- let currentTime: Date;
559
- switch (strClass) {
560
- case 'e-date-range':
561
- if (!this.headerPopup) {
562
- this.renderHeaderPopup();
563
- }
564
- if (this.headerPopup.element.classList.contains(cls.POPUP_OPEN)) {
565
- this.headerPopup.hide();
566
- } else {
567
- this.headerPopup.show();
568
- }
569
- break;
570
- case 'e-day':
571
- this.parent.changeView('Day', args.originalEvent, undefined, this.calculateViewIndex(args));
572
- break;
573
- case 'e-week':
574
- this.parent.changeView('Week', args.originalEvent, undefined, this.calculateViewIndex(args));
575
- break;
576
- case 'e-work-week':
577
- this.parent.changeView('WorkWeek', args.originalEvent, undefined, this.calculateViewIndex(args));
578
- break;
579
- case 'e-month':
580
- this.parent.changeView('Month', args.originalEvent, undefined, this.calculateViewIndex(args));
581
- break;
582
- case 'e-year':
583
- this.parent.changeView('Year', args.originalEvent, undefined, this.calculateViewIndex(args));
584
- break;
585
- case 'e-agenda':
586
- this.parent.changeView('Agenda', args.originalEvent, undefined, this.calculateViewIndex(args));
587
- break;
588
- case 'e-month-agenda':
589
- this.parent.changeView('MonthAgenda', args.originalEvent, undefined, this.calculateViewIndex(args));
590
- break;
591
- case 'e-timeline-day':
592
- this.parent.changeView('TimelineDay', args.originalEvent, undefined, this.calculateViewIndex(args));
593
- break;
594
- case 'e-timeline-week':
595
- this.parent.changeView('TimelineWeek', args.originalEvent, undefined, this.calculateViewIndex(args));
596
- break;
597
- case 'e-timeline-work-week':
598
- this.parent.changeView('TimelineWorkWeek', args.originalEvent, undefined, this.calculateViewIndex(args));
599
- break;
600
- case 'e-timeline-month':
601
- this.parent.changeView('TimelineMonth', args.originalEvent, undefined, this.calculateViewIndex(args));
602
- break;
603
- case 'e-timeline-year':
604
- this.parent.changeView('TimelineYear', args.originalEvent, undefined, this.calculateViewIndex(args));
605
- break;
606
- case 'e-today':
607
- currentTime = util.resetTime(this.parent.getCurrentTime());
608
- if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda' || !this.parent.isSelectedDate(currentTime) ||
609
- this.parent.currentView === 'Month' && this.parent.activeViewOptions.displayDate && !this.hasSelectedDate() &&
610
- util.resetTime(this.parent.activeViewOptions.displayDate) !== currentTime || this.parent.currentView === 'Month' &&
611
- this.parent.activeViewOptions.numberOfWeeks > 0 && !this.hasSelectedDate()
612
- && util.resetTime(util.firstDateOfMonth(this.parent.selectedDate)) !== currentTime) {
613
- this.parent.changeDate(currentTime, args.originalEvent);
614
- }
615
- break;
616
- case 'e-prev':
617
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Previous'), args.originalEvent);
618
- break;
619
- case 'e-next':
620
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Next'), args.originalEvent);
621
- break;
622
- case 'e-add':
623
- isSameTime = this.parent.activeCellsData.startTime.getTime() === this.parent.activeCellsData.endTime.getTime();
624
- if (this.parent.activeCellsData && !isSameTime) {
625
- data = this.parent.activeCellsData;
626
- } else {
627
- const interval: number = this.parent.activeViewOptions.timeScale.interval;
628
- const slotCount: number = this.parent.activeViewOptions.timeScale.slotCount;
629
- const msInterval: number = (interval * util.MS_PER_MINUTE) / slotCount;
630
- const startTime: Date = new Date(this.parent.selectedDate.getTime());
631
- const currentTime: Date = this.parent.getCurrentTime();
632
- startTime.setHours(currentTime.getHours(), (Math.round(startTime.getMinutes() / msInterval) * msInterval), 0);
633
- const endTime: Date = new Date(new Date(startTime.getTime()).setMilliseconds(startTime.getMilliseconds() + msInterval));
634
- data = { startTime: startTime, endTime: endTime, isAllDay: false };
635
- }
636
- this.parent.eventWindow.openEditor(<Record<string, any>>extend(data, { cancel: false, event: args.originalEvent }), 'Add');
637
- break;
638
- }
639
- if (isNullOrUndefined(this.toolbarObj)) {
640
- return;
641
- }
642
- const toolbarPopUp: HTMLElement = <HTMLElement>this.toolbarObj.element.querySelector('.e-toolbar-pop');
643
- if (toolbarPopUp && args.item.type !== 'Input') {
644
- ((toolbarPopUp as EJ2Instance).ej2_instances[0] as Popup).hide({ name: 'SlideUp', duration: 100 });
645
- }
646
- }
647
-
648
- private hasSelectedDate(): boolean {
649
- const selectedTime: number = util.resetTime(this.parent.selectedDate).getTime();
650
- return selectedTime >= this.parent.activeView.getStartDate().getTime() &&
651
- selectedTime <= this.parent.activeView.getEndDate().getTime();
652
- }
653
-
654
- public getHeaderElement(): HTMLElement {
655
- return this.toolbarObj.element;
656
- }
657
-
658
- public updateHeaderItems(classType: string): void {
659
- const prevNavEle: HTMLElement = this.toolbarObj.element.querySelector('.e-prev') as HTMLElement;
660
- const nextNavEle: HTMLElement = this.toolbarObj.element.querySelector('.e-next') as HTMLElement;
661
- const dateRangeEle: HTMLElement = this.toolbarObj.element.querySelector('.e-date-range') as HTMLElement;
662
- if (prevNavEle) {
663
- if (classType === 'add') {
664
- addClass([prevNavEle], cls.HIDDEN_CLASS);
665
- } else {
666
- removeClass([prevNavEle], cls.HIDDEN_CLASS);
667
- }
668
- }
669
- if (nextNavEle) {
670
- if (classType === 'add') {
671
- addClass([nextNavEle], cls.HIDDEN_CLASS);
672
- } else {
673
- removeClass([nextNavEle], cls.HIDDEN_CLASS);
674
- }
675
- }
676
- if (dateRangeEle) {
677
- if (classType === 'add') {
678
- addClass([dateRangeEle], cls.TEXT_ELLIPSIS);
679
- } else {
680
- removeClass([dateRangeEle], cls.TEXT_ELLIPSIS);
681
- }
682
- }
683
- }
684
-
685
- public previousNextIconHandler(): void {
686
- const dates: Date[] = (this.parent.currentView === 'Agenda' ?
687
- [this.parent.getCurrentViewDates()[0]] : this.parent.getCurrentViewDates()) as Date[];
688
- const prevNavEle: HTMLElement = this.toolbarObj.element.querySelector('.' + cls.PREVIOUS_DATE_CLASS);
689
- const nextNavEle: HTMLElement = this.toolbarObj.element.querySelector('.' + cls.NEXT_DATE_CLASS);
690
- let firstDate: Date = new Date(dates[0].getTime());
691
- let lastDate: Date = new Date(dates[dates.length - 1].getTime());
692
- if (this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'TimelineWorkWeek') {
693
- firstDate = util.getWeekFirstDate(util.resetTime(this.parent.selectedDate), this.parent.activeViewOptions.firstDayOfWeek);
694
- lastDate = util.addDays(firstDate, 7 * this.parent.activeViewOptions.interval);
695
- }
696
- else if (this.parent.currentView === 'Month') {
697
- const isCustomMonth: boolean = !isNullOrUndefined(this.parent.activeViewOptions.displayDate) ||
698
- this.parent.activeViewOptions.numberOfWeeks > 0;
699
- firstDate = isCustomMonth ? this.parent.activeView.getStartDate() : util.firstDateOfMonth(this.parent.selectedDate);
700
- lastDate = isCustomMonth ? this.parent.activeView.getEndDate() :
701
- util.lastDateOfMonth(util.addMonths(firstDate, this.parent.activeViewOptions.interval - 1));
702
- }
703
- if (!isNullOrUndefined(prevNavEle)) {
704
- this.toolbarObj.enableItems(prevNavEle, firstDate > util.resetTime(this.parent.minDate));
705
- }
706
- if (!isNullOrUndefined(nextNavEle)) {
707
- this.toolbarObj.enableItems(nextNavEle, lastDate < util.resetTime(this.parent.maxDate));
708
- }
709
- this.setCalendarMinMaxDate();
710
- }
711
-
712
- protected getModuleName(): string {
713
- return 'headerbar';
714
- }
715
-
716
- public destroy(): void {
717
- if (this.headerPopup && !this.headerPopup.isDestroyed) {
718
- this.headerPopup.destroy();
719
- this.headerPopup = null;
720
- }
721
- if (this.headerCalendar && !this.headerCalendar.isDestroyed) {
722
- this.headerCalendar.destroy();
723
- this.headerCalendar = null;
724
- }
725
- if (this.toolbarObj && !this.toolbarObj.isDestroyed) {
726
- this.toolbarObj.destroy();
727
- this.removeEventListener();
728
- remove(this.element);
729
- this.toolbarObj = null;
730
- }
731
- this.element = null;
732
- this.parent = null;
733
- this.l10n = null;
734
- }
735
-
736
- }