@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,766 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { EventHandler, formatUnit, isNullOrUndefined, createElement, addClass, append, prepend, remove, extend } from '@syncfusion/ej2-base';
3
- import { IRenderer, TdData, RenderCellEventArgs, CellTemplateArgs, NotifyEventArgs, CellClickEventArgs, CallbackFunction } from '../base/interface';
4
- import { Schedule } from '../base/schedule';
5
- import { ViewBase } from './view-base';
6
- import { MonthEvent } from '../event-renderer/month';
7
- import * as util from '../base/util';
8
- import * as event from '../base/constant';
9
- import * as cls from '../base/css-constant';
10
- import { NavigationDirection } from '../base/type';
11
-
12
- /**
13
- * month view
14
- */
15
- export class Month extends ViewBase implements IRenderer {
16
- public dayNameFormat: string = 'wide';
17
- public viewClass: string = 'e-month-view';
18
- public isInverseTableSelect: boolean = false;
19
- private monthDates: { [key: string]: Date };
20
- private monthEvent: MonthEvent = null;
21
-
22
- constructor(parent: Schedule) {
23
- super(parent);
24
- this.monthDates = {};
25
- }
26
-
27
- public addEventListener(): void {
28
- this.parent.on(event.scrollUiUpdate, this.onScrollUIUpdate, this);
29
- this.parent.on(event.dataReady, this.onDataReady, this);
30
- this.parent.on(event.cellClick, this.onCellClick, this);
31
- }
32
-
33
- public removeEventListener(): void {
34
- if (this.parent) {
35
- this.parent.off(event.scrollUiUpdate, this.onScrollUIUpdate);
36
- this.parent.off(event.dataReady, this.onDataReady);
37
- this.parent.off(event.cellClick, this.onCellClick);
38
- }
39
- }
40
-
41
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
42
- public onDataReady(args: NotifyEventArgs): void {
43
- this.monthEvent = new MonthEvent(this.parent);
44
- this.monthEvent.renderAppointments();
45
- this.parent.notify(event.eventsLoaded, {});
46
- }
47
-
48
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
49
- public onCellClick(event: CellClickEventArgs): void { /** */ }
50
-
51
- public onContentScroll(e: Event): void {
52
- if (!this.skipPersistenceSave) {
53
- this.parent.removeNewEventElement();
54
- this.parent.notify(event.virtualScroll, e);
55
- this.scrollTopPanel(<HTMLElement>e.target);
56
- this.scrollLeftPanel(<HTMLElement>e.target);
57
- this.parent.uiStateValues.top = (e.target as HTMLElement).scrollTop;
58
- this.parent.uiStateValues.left = (e.target as HTMLElement).scrollLeft;
59
- this.setPersistence();
60
- }
61
- }
62
-
63
- public scrollLeftPanel(target: HTMLElement): void {
64
- const leftPanel: HTMLElement = this.getLeftPanelElement();
65
- if (leftPanel) {
66
- leftPanel.scrollTop = target.scrollTop;
67
- }
68
- }
69
-
70
- public getLeftPanelElement(): HTMLElement {
71
- return this.element.querySelector('.' + cls.WEEK_NUMBER_WRAPPER_CLASS) as HTMLElement;
72
- }
73
-
74
- public onScrollUIUpdate(args: NotifyEventArgs): void {
75
- const headerHeight: number = this.getHeaderBarHeight();
76
- const header: HTMLElement = this.getDatesHeaderElement();
77
- const content: HTMLElement = this.getContentAreaElement();
78
- const height: number = this.parent.element.offsetHeight - headerHeight - header.offsetHeight;
79
- const leftPanel: HTMLElement = this.getLeftPanelElement();
80
- if (this.parent.height !== 'auto') {
81
- this.setContentHeight(content, leftPanel, height);
82
- }
83
- const scrollBarWidth: number = util.getScrollBarWidth();
84
- (header.firstElementChild as HTMLElement).style[<any>args.cssProperties.rtlBorder] = '';
85
- header.style[<any>args.cssProperties.rtlPadding] = '';
86
- if (content.offsetWidth - content.clientWidth > 0) {
87
- (<HTMLElement>header.firstElementChild).style[<any>args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';
88
- header.style[<any>args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';
89
- } else {
90
- (<HTMLElement>header.firstElementChild).style[<any>args.cssProperties.border] = '';
91
- header.style[<any>args.cssProperties.padding] = '';
92
- }
93
- this.setColWidth(content);
94
- if (args.scrollPosition || !args.isPreventScrollUpdate && this.parent.currentView === 'TimelineMonth') {
95
- const top: number = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;
96
- if (leftPanel) {
97
- leftPanel.scrollTop = top;
98
- }
99
- content.scrollTop = top;
100
- if (this.parent.uiStateValues.isInitial) {
101
- this.scrollToSelectedDate();
102
- this.parent.uiStateValues.isInitial = false;
103
- } else {
104
- content.scrollLeft = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.left :
105
- args.scrollPosition.left;
106
- }
107
- }
108
- this.retainScrollPosition();
109
- }
110
-
111
- private scrollToSelectedDate(): void {
112
- const selectedDate: Date = new Date(this.parent.selectedDate);
113
- selectedDate.setHours(0, 0, 0, 0);
114
- const headerCell: HTMLElement = this.element.querySelector('.' + cls.HEADER_CELLS_CLASS + '[data-date="'
115
- + selectedDate.getTime().toString() + '"]');
116
- const content: HTMLElement = this.getContentAreaElement();
117
- if (!isNullOrUndefined(headerCell)) {
118
- content.scrollLeft = !this.parent.enableRtl ?
119
- headerCell.offsetLeft : -(this.parent.getContentTable().offsetWidth - headerCell.offsetLeft - headerCell.offsetWidth);
120
- } else {
121
- content.scrollLeft = 0;
122
- }
123
- if (content.scrollLeft === 0 && this.parent.uiStateValues.isInitial) {
124
- this.parent.uiStateValues.left = 0;
125
- }
126
- }
127
-
128
- public setContentHeight(content: HTMLElement, leftPanelElement: HTMLElement, height: number): void {
129
- content.style.height = 'auto';
130
- if (this.parent.currentView === 'Month') {
131
- content.style.height = formatUnit(height);
132
- }
133
- if (leftPanelElement) {
134
- if (this.parent.currentView === 'MonthAgenda') {
135
- height = (this.parent.activeViewOptions.interval > 1) ?
136
- (<HTMLElement>this.getContentAreaElement().firstElementChild).offsetHeight :
137
- (<HTMLElement>this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS)).offsetHeight;
138
- }
139
- leftPanelElement.style.height = 'auto';
140
- leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(content));
141
- }
142
- }
143
-
144
- public generateColumnLevels(): TdData[][] {
145
- let colLevels: TdData[][] = [];
146
- const level: TdData[] = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);
147
- if (this.parent.activeViewOptions.group.resources.length > 0) {
148
- colLevels = this.parent.resourceBase.generateResourceLevels(level);
149
- if (this.parent.currentView === 'MonthAgenda') {
150
- colLevels = [level];
151
- }
152
- if (this.parent.uiStateValues.isGroupAdaptive && this.parent.resourceBase.lastResourceLevel.length > 0) {
153
- const resourceLevel: TdData = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];
154
- let levels: TdData[] = this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays);
155
- if (this.parent.activeViewOptions.group.byDate && this.parent.activeViewOptions.group.hideNonWorkingDays) {
156
- const index: number = levels.findIndex((x: TdData, index: number) =>
157
- index !== 0 && x.date.getDay() === levels[0].date.getDay());
158
- levels = index > -1 ? levels.slice(0, index) : levels;
159
- }
160
- colLevels = [levels];
161
- }
162
- } else {
163
- colLevels.push(level);
164
- }
165
- this.colLevels = colLevels;
166
- return colLevels;
167
- }
168
-
169
- public getDateSlots(renderDates: Date[], workDays: number[]): TdData[] {
170
- const count: number = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length;
171
- const dateSlots: TdData[] = [];
172
- const isCurrentMonth: boolean = this.isCurrentMonth(this.parent.selectedDate);
173
- for (let col: number = 0; col < count; col++) {
174
- const classList: string[] = [cls.HEADER_CELLS_CLASS];
175
- const currentDateIndex: number[] = renderDates.slice(0, count).map((date: Date) => date.getDay());
176
- if (isCurrentMonth && currentDateIndex.indexOf(this.parent.currentTimezoneDate.getDay()) === col) {
177
- classList.push(cls.CURRENT_DAY_CLASS);
178
- }
179
- dateSlots.push({ date: renderDates[parseInt(col.toString(), 10)], type: 'monthDay', className: classList, colSpan: 1, workDays: workDays });
180
- }
181
- return dateSlots;
182
- }
183
-
184
- public getDayNameFormat(): string {
185
- if (this.parent.isAdaptive || this.parent.activeViewOptions.group.resources.length > 0) {
186
- return 'abbreviated';
187
- }
188
- return 'wide';
189
- }
190
-
191
- public renderLayout(type: string): void {
192
- this.dayNameFormat = this.getDayNameFormat();
193
- this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));
194
- const clsList: string[] = [this.viewClass];
195
- clsList.push(type);
196
- if (this.parent.activeViewOptions.group.byDate) {
197
- clsList.push('e-by-date');
198
- if (this.parent.currentView !== 'Month') {
199
- this.parent.activeViewOptions.group.hideNonWorkingDays = false;
200
- }
201
- }
202
- if (this.parent.activeViewOptions.allowVirtualScrolling && !this.parent.uiStateValues.isGroupAdaptive) {
203
- clsList.push(cls.VIRTUAL_SCROLL_CLASS);
204
- }
205
- if (this.parent.rowAutoHeight && this.parent.eventSettings.ignoreWhitespace) {
206
- clsList.push(cls.IGNORE_WHITESPACE);
207
- }
208
- addClass([this.element], clsList);
209
- this.renderPanel(type);
210
- this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS) as HTMLElement);
211
- this.element.querySelector('table').setAttribute('role', 'presentation');
212
- this.colLevels = this.generateColumnLevels();
213
- this.renderHeader();
214
- this.renderContent();
215
- const target: HTMLElement = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;
216
- if (this.parent.uiStateValues.isGroupAdaptive && !target.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {
217
- this.renderResourceMobileLayout();
218
- }
219
- this.parent.notify(event.contentReady, {});
220
- if (this.parent.uiStateValues.isCustomMonth) {
221
- this.parent.uiStateValues.isCustomMonth = false;
222
- }
223
- }
224
- public refreshHeader(): void {
225
- remove(this.element.querySelector('tbody tr'));
226
- this.renderHeader();
227
- this.parent.notify(event.contentReady, {});
228
- const dateHeader: HTMLElement = (this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS) as HTMLElement);
229
- const contentWrapper: HTMLElement = (this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS) as HTMLElement);
230
- if (dateHeader) {
231
- dateHeader.scrollLeft = this.parent.uiStateValues.left;
232
- }
233
- if (contentWrapper) {
234
- contentWrapper.scrollLeft = this.parent.uiStateValues.left;
235
- }
236
- }
237
-
238
- private wireCellEvents(element: Element): void {
239
- EventHandler.add(element, 'mousedown', this.parent.workCellAction.cellMouseDown, this.parent.workCellAction);
240
- EventHandler.add(element, 'click', this.parent.workCellAction.cellClick, this.parent.workCellAction);
241
- if (!this.parent.isAdaptive) {
242
- EventHandler.add(element, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction);
243
- }
244
- }
245
-
246
- public renderHeader(): void {
247
- const tr: Element = createElement('tr');
248
- this.renderLeftIndent(tr);
249
- const dateTd: Element = createElement('td');
250
- dateTd.appendChild(this.renderDatesHeader());
251
- tr.appendChild(dateTd);
252
- prepend([tr], this.element.querySelector('tbody'));
253
- }
254
-
255
- public renderLeftIndent(tr: Element): void {
256
- if (this.parent.activeViewOptions.showWeekNumber) {
257
- tr.appendChild(createElement('td', { className: 'e-left-indent' }));
258
- }
259
- }
260
-
261
- public renderContent(): void {
262
- if (this.parent.activeViewOptions.group.resources.length > 0) {
263
- this.parent.resourceBase.renderedResources = <TdData[]>extend([], this.parent.resourceBase.lastResourceLevel, null, true);
264
- }
265
- const tr: Element = createElement('tr');
266
- if (this.parent.activeViewOptions.showWeekNumber) {
267
- tr.appendChild(this.renderWeekNumberContent());
268
- }
269
- const workTd: Element = createElement('td');
270
- const levels: TdData[][] = this.colLevels.slice(0);
271
- if (this.parent.virtualScrollModule) {
272
- this.resetColLevels();
273
- }
274
- const wrap: Element = createElement('div', { className: cls.CONTENT_WRAP_CLASS });
275
- const contentArea: Element = this.renderContentArea();
276
- if (this.parent.currentView === 'Month') {
277
- wrap.appendChild(contentArea);
278
- } else {
279
- const monthAgendaWrapper: HTMLElement = createElement('div', { className: cls.TABLE_CONTAINER_CLASS });
280
- monthAgendaWrapper.appendChild(contentArea);
281
- wrap.appendChild(monthAgendaWrapper);
282
- }
283
- EventHandler.add(wrap, 'scroll', this.onContentScroll, this);
284
- workTd.appendChild(wrap);
285
- tr.appendChild(workTd);
286
- if (this.parent.virtualScrollModule) {
287
- this.colLevels = levels;
288
- this.parent.virtualScrollModule.renderVirtualTrack(wrap);
289
- }
290
- this.element.querySelector('tbody').appendChild(tr);
291
- this.renderAppointmentContainer();
292
- }
293
-
294
- private renderWeekNumberContent(): HTMLElement {
295
- const dateCol: Date[] = this.renderDates.map((date: Date) => new Date(+date));
296
- const td: HTMLElement = createElement('td');
297
- const contentWrapper: HTMLElement = createElement('div', { className: cls.WEEK_NUMBER_WRAPPER_CLASS });
298
- td.appendChild(contentWrapper);
299
- const contentWrapTable: HTMLElement = this.createTableLayout() as HTMLElement;
300
- contentWrapper.appendChild(contentWrapTable);
301
- const noOfDays: number = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :
302
- this.parent.activeViewOptions.workDays.length;
303
- for (let i: number = 0, length: number = (this.renderDates.length / noOfDays); i < length; i++) {
304
- const dates: Date[] = dateCol.splice(0, noOfDays);
305
- const weekNumber: string = this.parent.getWeekNumberContent(dates);
306
- contentWrapTable.querySelector('tbody').appendChild(this.createWeekNumberElement(weekNumber));
307
- }
308
- return td;
309
- }
310
-
311
- public renderAppointmentContainer(): void {
312
- //Here needs to render mobile view appointment details on selected date
313
- }
314
-
315
- public renderDatesHeader(): Element {
316
- const container: Element = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });
317
- const wrap: Element = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });
318
- container.appendChild(wrap);
319
- const table: Element = this.createTableLayout();
320
- if (this.parent.currentView === 'Month') {
321
- const thead: Element = createElement('thead');
322
- thead.appendChild(createElement('tr'));
323
- prepend([thead], table);
324
- }
325
- this.createColGroup(table, this.colLevels[this.colLevels.length - 1]);
326
- const trEle: Element = createElement('tr');
327
- for (let i: number = 0; i < this.colLevels.length; i++) {
328
- const level: TdData[] = this.colLevels[parseInt(i.toString(), 10)];
329
- const ntr: Element = trEle.cloneNode() as Element;
330
- for (let j: number = 0; j < level.length; j++) {
331
- const td: TdData = level[parseInt(j.toString(), 10)];
332
- ntr.appendChild(this.createHeaderCell(td));
333
- }
334
- table.querySelector('tbody').appendChild(ntr);
335
- }
336
- wrap.appendChild(table);
337
- return container;
338
- }
339
-
340
- private createHeaderCell(td: TdData): Element {
341
- const tdEle: Element = createElement('td');
342
- this.addAttributes(td, tdEle);
343
- if (td.type === 'monthDay') {
344
- const ele: Element = createElement(
345
- 'span', { innerHTML: util.capitalizeFirstWord(this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()], 'single') });
346
- tdEle.appendChild(ele);
347
- }
348
- if (td.type === 'resourceHeader') {
349
- this.setResourceHeaderContent(tdEle, td);
350
- }
351
- if (td.type === 'dateHeader') {
352
- addClass([tdEle], cls.DATE_HEADER_CLASS);
353
- tdEle.setAttribute('data-date', td.date.getTime().toString());
354
- if (this.parent.activeViewOptions.dateHeaderTemplate) {
355
- const cellArgs: CellTemplateArgs = { date: td.date, type: td.type };
356
- const elementId: string = this.parent.element.id + '_';
357
- const viewName: string = this.parent.activeViewOptions.dateHeaderTemplateName;
358
- const templateId: string = elementId + viewName + 'dateHeaderTemplate';
359
- const dateTemplate: HTMLElement[] = [].slice.call(
360
- this.parent.getDateHeaderTemplate()(cellArgs, this.parent, 'dateHeaderTemplate', templateId,
361
- false, undefined, undefined, this.parent.root));
362
- if (dateTemplate && dateTemplate.length) {
363
- append(dateTemplate, tdEle);
364
- }
365
- } else {
366
- const ele: Element = createElement('span', { className: cls.NAVIGATE_CLASS });
367
- const skeleton: string = 'full';
368
- const title: string =
369
- this.parent.globalize.formatDate(td.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() });
370
- ele.setAttribute('title', util.capitalizeFirstWord(title, 'multiple'));
371
- const innerText: string =
372
- (this.parent.calendarUtil.isMonthStart(td.date) && !this.isCurrentDate(td.date) && !this.parent.isAdaptive) ?
373
- this.parent.globalize.formatDate(td.date, { format: 'MMM d', calendar: this.parent.getCalendarMode() }) :
374
- this.parent.globalize.formatDate(td.date, { skeleton: 'd', calendar: this.parent.getCalendarMode() });
375
- ele.innerHTML = util.capitalizeFirstWord(innerText, 'single');
376
- tdEle.appendChild(ele);
377
- }
378
- this.wireCellEvents(tdEle);
379
- }
380
- const args: RenderCellEventArgs = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };
381
- this.parent.trigger(event.renderCell, args);
382
- return tdEle;
383
- }
384
-
385
- public getContentSlots(): TdData[][] {
386
- if (!(this.colLevels[this.colLevels.length - 1] && this.colLevels[this.colLevels.length - 1][0])) {
387
- return [];
388
- }
389
- const slotDatas: TdData[][] = [];
390
- const prepareSlots: CallbackFunction = (rowIndex: number, renderDate: Date, resData: TdData, classList?: string[]) => {
391
- const data: TdData = {
392
- date: new Date(+renderDate), groupIndex: resData.groupIndex, workDays: resData.workDays,
393
- type: 'monthCells', className: classList || [cls.WORK_CELLS_CLASS]
394
- };
395
- if (!slotDatas[parseInt(rowIndex.toString(), 10)]) {
396
- slotDatas[parseInt(rowIndex.toString(), 10)] = [];
397
- }
398
- slotDatas[parseInt(rowIndex.toString(), 10)].push(data);
399
- };
400
- const includeResource: boolean = this.parent.currentView !== 'MonthAgenda' &&
401
- this.parent.activeViewOptions.group.resources.length > 0;
402
- if (includeResource && !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeViewOptions.group.byDate) {
403
- for (const res of this.colLevels[this.colLevels.length - 2]) {
404
- const dates: Date[] = res.renderDates.map((date: Date) => new Date(+date));
405
- const count: number = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : res.workDays.length;
406
- for (let i: number = 0; i < (res.renderDates.length / count); i++) {
407
- const colDates: Date[] = dates.splice(0, count);
408
- for (const colDate of colDates) {
409
- prepareSlots(i, colDate, res);
410
- }
411
- }
412
- }
413
- } else {
414
- const dates: Date[] = this.renderDates.map((date: Date) => new Date(+date));
415
- const count: number = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :
416
- this.parent.activeViewOptions.workDays.length;
417
- const level: TdData[] = this.colLevels.slice(0, 1)[0];
418
- const startIndex: number = this.renderDates.map(Number).indexOf(+level[0].date);
419
- for (let i: number = 0; i < (this.renderDates.length / count); i++) {
420
- const colDates: Date[] = dates.splice(0, count);
421
- let k: number = startIndex;
422
- for (let j: number = startIndex; j < (this.colLevels[0].length + startIndex) && j < colDates.length; j++) {
423
- const colDate: Date = colDates[parseInt(k.toString(), 10)];
424
- k++;
425
- if (includeResource) {
426
- const lastRow: TdData[] = this.colLevels[(this.colLevels.length - 1)];
427
- const rowCount: number = lastRow.length / count;
428
- let resourcesTd: TdData[] = lastRow.slice(0, rowCount);
429
- if (this.parent.activeViewOptions.group.hideNonWorkingDays) {
430
- resourcesTd = lastRow.filter((x: TdData) => x.date.getDay() === colDate.getDay());
431
- if (resourcesTd.length === 0) {
432
- j = j - 1;
433
- continue;
434
- }
435
- }
436
- for (let resIndex: number = 0; resIndex < resourcesTd.length; resIndex++) {
437
- let clsList: string[];
438
- if (resIndex !== 0) {
439
- clsList = [cls.WORK_CELLS_CLASS, cls.DISABLE_DATE];
440
- }
441
- prepareSlots(i, colDate, resourcesTd[parseInt(resIndex.toString(), 10)], clsList);
442
- }
443
- } else {
444
- prepareSlots(i, colDate, this.colLevels[this.colLevels.length - 1][0]);
445
- }
446
- }
447
- }
448
- }
449
- return slotDatas;
450
- }
451
-
452
- public updateClassList(data: TdData): void {
453
- if (!this.isCustomMonth() && this.isOtherMonth(data.date)) {
454
- data.className.push(cls.OTHERMONTH_CLASS);
455
- }
456
- if (!this.parent.isMinMaxDate(data.date)) {
457
- data.className.push(cls.DISABLE_DATES);
458
- }
459
- this.updateSelectedCellClass(data);
460
- }
461
-
462
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
463
- public updateSelectedCellClass(data: TdData): void {
464
- return;
465
- }
466
-
467
- private isOtherMonth(date: Date): boolean {
468
- return date.getTime() < this.monthDates.start.getTime() || date.getTime() > this.monthDates.end.getTime();
469
- }
470
-
471
- public renderContentArea(): Element {
472
- const tbl: Element = this.createTableLayout(cls.CONTENT_TABLE_CLASS);
473
- this.setAriaAttributes(tbl);
474
- this.addAutoHeightClass(tbl);
475
- if (this.parent.currentView === 'TimelineMonth') {
476
- this.createColGroup(tbl, this.colLevels[this.colLevels.length - 1]);
477
- }
478
- const monthDate: Date = new Date(this.parent.selectedDate.getTime());
479
- this.monthDates = {
480
- start: this.parent.calendarUtil.firstDateOfMonth(monthDate),
481
- end: this.parent.calendarUtil.lastDateOfMonth(util.addMonths(monthDate, this.parent.activeViewOptions.interval - 1))
482
- };
483
- const tBody: Element = tbl.querySelector('tbody');
484
- append(this.getContentRows(), tBody);
485
- this.wireCellEvents(tBody);
486
- return tbl;
487
- }
488
-
489
- public getContentRows(): Element[] {
490
- const trows: Element[] = [];
491
- const tr: Element = createElement('tr');
492
- const td: Element = createElement('td');
493
- const slotDatas: TdData[][] = this.getContentSlots();
494
- const isTimeline: boolean = this.parent.currentView === 'TimelineMonth';
495
- const existingGroupIndices: number[] = isTimeline ? this.getGroupIndices() : [];
496
- for (let row: number = 0; row < slotDatas.length; row++) {
497
- if (existingGroupIndices.length > 0 &&
498
- existingGroupIndices.indexOf(slotDatas[parseInt(row.toString(), 10)][0].groupIndex) > -1) {
499
- continue;
500
- }
501
- const ntr: Element = tr.cloneNode() as Element;
502
- for (let col: number = 0; col < slotDatas[parseInt(row.toString(), 10)].length; col++) {
503
- const ntd: Element = this.createContentTd(slotDatas[parseInt(row.toString(), 10)][parseInt(col.toString(), 10)], td);
504
- ntr.appendChild(ntd);
505
- }
506
- trows.push(ntr);
507
- }
508
- return trows;
509
- }
510
-
511
- public createContentTd(data: TdData, td: Element): Element {
512
- const ntd: Element = td.cloneNode() as Element;
513
- if (data.colSpan) { ntd.setAttribute('colspan', data.colSpan.toString()); }
514
- this.updateClassList(data);
515
- let type: string = data.type;
516
- if (data.className.indexOf(cls.RESOURCE_PARENT_CLASS) !== -1) {
517
- data.className.push(cls.RESOURCE_GROUP_CELLS_CLASS);
518
- type = 'resourceGroupCells';
519
- }
520
- if (this.parent.workHours.highlight && this.isWorkDay(data.date, data.workDays)) {
521
- data.className.push(cls.WORKDAY_CLASS);
522
- }
523
- if (this.isCurrentDate(data.date)) {
524
- data.className.push(cls.CURRENTDATE_CLASS);
525
- }
526
- addClass([ntd], data.className);
527
- ntd.setAttribute('data-date', data.date.getTime().toString());
528
- if (!isNullOrUndefined(data.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {
529
- const groupIndex: number = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :
530
- data.groupIndex;
531
- ntd.setAttribute('data-group-index', '' + groupIndex);
532
- }
533
- this.renderDateHeaderElement(data, ntd);
534
- if (this.parent.activeViewOptions.cellTemplate) {
535
- const args: CellTemplateArgs = { date: data.date, type: type, groupIndex: data.groupIndex };
536
- const scheduleId: string = this.parent.element.id + '_';
537
- const viewName: string = this.parent.activeViewOptions.cellTemplateName;
538
- const templateId: string = scheduleId + viewName + 'cellTemplate';
539
- const cellTemplate: HTMLElement[] = [].slice.call(
540
- this.parent.getCellTemplate()(args, this.parent, 'cellTemplate', templateId,
541
- false, undefined, undefined, this.parent.root));
542
- append(cellTemplate, ntd);
543
- }
544
- const args: RenderCellEventArgs = { elementType: type, element: ntd, date: data.date, groupIndex: data.groupIndex };
545
- this.parent.trigger(event.renderCell, args);
546
- return ntd;
547
- }
548
-
549
- private renderDateHeaderElement(data: TdData, ntd: Element): void {
550
- if (this.parent.currentView === 'TimelineMonth') {
551
- return;
552
- }
553
- const dateHeader: Element = createElement('div', { className: cls.DATE_HEADER_CLASS });
554
- if (this.parent.activeViewOptions.cellHeaderTemplate) {
555
- const args: CellTemplateArgs = { date: data.date, type: data.type, groupIndex: data.groupIndex };
556
- const scheduleId: string = this.parent.element.id + '_';
557
- const viewName: string = this.parent.activeViewOptions.cellHeaderTemplateName;
558
- const templateId: string = scheduleId + viewName + 'cellHeaderTemplate';
559
- const cellHeaderTemplate: HTMLElement[] = [].slice.call(
560
- this.parent.getCellHeaderTemplate()(args, this.parent, 'cellHeaderTemplate', templateId, false,
561
- undefined, undefined, this.parent.root));
562
- append(cellHeaderTemplate, dateHeader);
563
- } else {
564
- const innerText: string =
565
- (this.parent.calendarUtil.isMonthStart(data.date) && !this.isCurrentDate(data.date) && !this.parent.isAdaptive) ?
566
- this.parent.globalize.formatDate(data.date, { format: 'MMM d', calendar: this.parent.getCalendarMode() }) :
567
- this.parent.globalize.formatDate(data.date, { skeleton: 'd', calendar: this.parent.getCalendarMode() });
568
- dateHeader.innerHTML = util.capitalizeFirstWord(innerText, 'single');
569
- }
570
- ntd.appendChild(dateHeader);
571
- if (this.getModuleName() === 'month') {
572
- addClass([dateHeader], cls.NAVIGATE_CLASS);
573
- const skeleton: string = 'full';
574
- const announcementText: string =
575
- this.parent.globalize.formatDate(data.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() });
576
- ntd.setAttribute('aria-label', announcementText);
577
- }
578
- }
579
-
580
- public getMonthStart(currentDate: Date): Date {
581
- const useDisplayDate: boolean = this.parent.currentView === 'Month' && !isNullOrUndefined(
582
- this.parent.activeViewOptions.displayDate) && !(this.parent.uiStateValues.isSwipeScroll) &&
583
- (this.parent.uiStateValues.isCustomMonth || this.isCustomRange());
584
- const date: Date = useDisplayDate ? this.parent.activeViewOptions.displayDate : !(this.parent.uiStateValues.isCustomMonth ||
585
- (!this.parent.uiStateValues.isSwipeScroll && this.isCustomRange())) && this.isCustomMonth() ? currentDate :
586
- this.parent.calendarUtil.firstDateOfMonth(currentDate);
587
- const monthStart: Date = util.getWeekFirstDate(date, this.parent.activeViewOptions.firstDayOfWeek);
588
- return new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());
589
- }
590
-
591
- public getMonthEnd(currentDate: Date): Date {
592
- if (this.isCustomMonth()) {
593
- const start: Date = this.getMonthStart(currentDate);
594
- const numberOfDays: number = util.WEEK_LENGTH * (this.parent.activeViewOptions.numberOfWeeks > 0 ?
595
- this.parent.activeViewOptions.numberOfWeeks : util.DEFAULT_WEEKS);
596
- return util.addDays(start, (numberOfDays - 1));
597
- } else {
598
- const endDate: Date = util.addMonths(currentDate, this.parent.activeViewOptions.interval - 1);
599
- const lastWeekOfMonth: Date =
600
- util.getWeekFirstDate(this.parent.calendarUtil.lastDateOfMonth(endDate), this.parent.activeViewOptions.firstDayOfWeek);
601
- return util.addDays(lastWeekOfMonth, util.WEEK_LENGTH - 1);
602
- }
603
- }
604
-
605
- private isCustomRange(): boolean {
606
- const dates: Date[] = this.parent.getCurrentViewDates();
607
- if (dates && dates.length > 0) {
608
- const selectedTime: number = util.resetTime(this.parent.selectedDate).getTime();
609
- const weekFirstDate: Date = util.getWeekFirstDate(dates[dates.length - 1], this.parent.activeViewOptions.firstDayOfWeek);
610
- return !(selectedTime >= util.getWeekFirstDate(dates[0], this.parent.activeViewOptions.firstDayOfWeek).getTime() &&
611
- selectedTime <= util.addDays(weekFirstDate, 6).getTime());
612
- }
613
- return false;
614
- }
615
-
616
- public getRenderDates(workDays?: number[], selectedDate: Date = this.parent.selectedDate): Date[] {
617
- const renderDates: Date[] = [];
618
- const currentDate: Date = util.resetTime(selectedDate);
619
- let start: Date = this.getMonthStart(currentDate);
620
- const monthEnd: Date = this.getMonthEnd(currentDate);
621
- do {
622
- if (this.parent.activeViewOptions.showWeekend) {
623
- renderDates.push(start);
624
- } else {
625
- if (this.isWorkDay(start, workDays)) {
626
- renderDates.push(start);
627
- }
628
- }
629
- start = util.addDays(start, 1);
630
- if (start.getHours() > 0) {
631
- start = util.resetTime(start);
632
- }
633
- } while (start.getTime() <= monthEnd.getTime());
634
- if (!workDays) {
635
- this.renderDates = renderDates;
636
- }
637
- if (this.parent.headerModule) {
638
- this.parent.headerModule.previousNextIconHandler();
639
- }
640
- return renderDates;
641
- }
642
-
643
- public getNextPreviousDate(type: NavigationDirection): Date {
644
- if (this.isCustomMonth()) {
645
- const dates: Date[] = this.parent.getCurrentViewDates();
646
- const date: Date = util.getWeekFirstDate(type === 'Next' ? dates[dates.length - 1]
647
- : dates[0], this.parent.activeViewOptions.firstDayOfWeek);
648
- return util.addDays(date, type === 'Next' ? util.WEEK_LENGTH : -(this.parent.activeViewOptions.numberOfWeeks > 0 ?
649
- this.parent.activeViewOptions.numberOfWeeks : util.DEFAULT_WEEKS) * util.WEEK_LENGTH);
650
- } else {
651
- return util.addMonths(this.parent.selectedDate, ((type === 'Next' ? 1 : -1) * this.parent.activeViewOptions.interval));
652
- }
653
- }
654
-
655
- public getStartDate(): Date {
656
- return this.getMonthStart(this.parent.selectedDate);
657
- }
658
-
659
- public getEndDate(): Date {
660
- return this.getMonthEnd(this.parent.selectedDate);
661
- }
662
-
663
- public getEndDateFromStartDate(start: Date): Date {
664
- return util.addDays(new Date(start.getTime()), 1);
665
- }
666
-
667
- public getDateRangeText(startDate: Date = this.parent.selectedDate, dateCollection: Date[] = null): string {
668
- if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {
669
- const maxNumberOfDaysPerWeek: number = 7;
670
- startDate = !isNullOrUndefined(dateCollection) && dateCollection.length > maxNumberOfDaysPerWeek - 1
671
- ? dateCollection[maxNumberOfDaysPerWeek - 1] : startDate;
672
- let endDate: Date;
673
- let updateCustomRange: boolean = false;
674
-
675
- if (this.isCustomMonth()) {
676
- const dates: Date[] = !isNullOrUndefined(dateCollection) && dateCollection.length > 0 ? dateCollection :
677
- this.parent.getCurrentViewDates();
678
- updateCustomRange = dates[0].getMonth() !== dates[dates.length - 1].getMonth() ||
679
- dates[0].getFullYear() !== dates[dates.length - 1].getFullYear();
680
- if (updateCustomRange) {
681
- startDate = dates[0];
682
- endDate = dates[dates.length - 1];
683
- }
684
- }
685
-
686
- const isUpdateDateRange: boolean = (this.parent.currentView !== 'Month' || !this.isCustomMonth());
687
- if (this.parent.activeViewOptions.interval > 1 && isUpdateDateRange || updateCustomRange) {
688
- endDate = endDate ? endDate : util.addMonths(util.lastDateOfMonth(startDate), this.parent.activeViewOptions.interval - 1);
689
- if (startDate.getFullYear() === endDate.getFullYear()) {
690
- const monthNames: string = (this.parent.globalize.formatDate(
691
- startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' - ' +
692
- (this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() })) +
693
- this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() });
694
- return util.capitalizeFirstWord(monthNames, 'single');
695
- }
696
- const text: string = (this.parent.globalize.formatDate(
697
- startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' ' +
698
- startDate.getFullYear() + ' - ' +
699
- this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() }) +
700
- this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() });
701
- return util.capitalizeFirstWord(text, 'single');
702
- }
703
- const format: string = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';
704
- return util.capitalizeFirstWord(
705
- this.parent.globalize.formatDate(startDate, { format: format, calendar: this.parent.getCalendarMode() }), 'single');
706
- }
707
- return this.formatDateRange(!isNullOrUndefined(dateCollection) && dateCollection.length > 0 ? dateCollection[0] :
708
- this.parent.selectedDate);
709
- }
710
-
711
- public getLabelText(view: string): string {
712
- const viewStr: string = view.charAt(0).toLowerCase() + view.substring(1);
713
- return this.formatViewLabel(viewStr, this.getStartDate(), this.getEndDate());
714
- }
715
-
716
- private createWeekNumberElement(text?: string): HTMLElement {
717
- const tr: HTMLElement = createElement('tr');
718
- const td: HTMLElement = createElement('td', {
719
- className: cls.WEEK_NUMBER_CLASS,
720
- attrs: { 'title': (text ? this.parent.localeObj.getConstant('week') + ' ' + text : '') },
721
- innerHTML: (text || '')
722
- });
723
- tr.appendChild(td);
724
- const args: RenderCellEventArgs = { elementType: 'weekNumberCell', element: td };
725
- this.parent.trigger(event.renderCell, args);
726
- return tr;
727
- }
728
-
729
- public unWireEvents(): void {
730
- const contentScrollableEle: Element = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
731
- if (contentScrollableEle) {
732
- EventHandler.remove(contentScrollableEle, 'scroll', this.onContentScroll);
733
- }
734
- }
735
-
736
- private isCustomMonth(): boolean {
737
- return this.parent.currentView === 'Month' &&
738
- (!isNullOrUndefined(this.parent.activeViewOptions.displayDate) || this.parent.activeViewOptions.numberOfWeeks > 0);
739
- }
740
-
741
- protected getModuleName(): string {
742
- return 'month';
743
- }
744
-
745
- public destroy(): void {
746
- if (!this.parent || this.parent && this.parent.isDestroyed) {
747
- this.parent = null;
748
- return;
749
- }
750
- if (this.element) {
751
- if (this.monthEvent) {
752
- this.monthEvent.destroy();
753
- this.monthEvent = null;
754
- }
755
- this.unWireEvents();
756
- if (this.parent.resourceBase) {
757
- this.parent.resourceBase.destroy();
758
- }
759
- if (this.parent.scheduleTouchModule) {
760
- this.parent.scheduleTouchModule.resetValues();
761
- }
762
- super.destroy();
763
- }
764
- }
765
-
766
- }