@syncfusion/ej2-schedule 21.1.38 → 21.1.41

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 (59) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/ej2-schedule.min.js +2 -2
  3. package/dist/ej2-schedule.umd.min.js +2 -2
  4. package/dist/ej2-schedule.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-schedule.es2015.js +59 -51
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +66 -58
  8. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  9. package/dist/global/ej2-schedule.min.js +2 -2
  10. package/dist/global/ej2-schedule.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +12 -12
  13. package/src/schedule/base/resource.js +1 -1
  14. package/src/schedule/base/schedule.d.ts +5 -3
  15. package/src/schedule/base/schedule.js +11 -7
  16. package/src/schedule/event-renderer/agenda-base.js +2 -2
  17. package/src/schedule/event-renderer/event-base.js +1 -1
  18. package/src/schedule/event-renderer/month.js +2 -2
  19. package/src/schedule/event-renderer/timeline-view.js +4 -11
  20. package/src/schedule/event-renderer/vertical-view.js +5 -11
  21. package/src/schedule/exports/print.js +11 -2
  22. package/src/schedule/popups/event-window.js +11 -3
  23. package/src/schedule/popups/quick-popups.js +5 -5
  24. package/src/schedule/renderer/month.js +2 -2
  25. package/src/schedule/renderer/renderer.js +1 -0
  26. package/src/schedule/renderer/timeline-year.js +4 -6
  27. package/src/schedule/renderer/vertical-view.js +5 -4
  28. package/src/schedule/renderer/view-base.js +2 -2
  29. package/styles/bootstrap-dark.css +6 -2
  30. package/styles/bootstrap.css +6 -2
  31. package/styles/bootstrap4.css +6 -2
  32. package/styles/bootstrap5-dark.css +6 -2
  33. package/styles/bootstrap5.css +6 -2
  34. package/styles/fabric-dark.css +6 -2
  35. package/styles/fabric.css +6 -2
  36. package/styles/fluent-dark.css +6 -2
  37. package/styles/fluent.css +6 -2
  38. package/styles/highcontrast-light.css +6 -2
  39. package/styles/highcontrast.css +6 -2
  40. package/styles/material-dark.css +6 -2
  41. package/styles/material.css +6 -2
  42. package/styles/schedule/_layout.scss +6 -2
  43. package/styles/schedule/bootstrap-dark.css +6 -2
  44. package/styles/schedule/bootstrap.css +6 -2
  45. package/styles/schedule/bootstrap4.css +6 -2
  46. package/styles/schedule/bootstrap5-dark.css +6 -2
  47. package/styles/schedule/bootstrap5.css +6 -2
  48. package/styles/schedule/fabric-dark.css +6 -2
  49. package/styles/schedule/fabric.css +6 -2
  50. package/styles/schedule/fluent-dark.css +6 -2
  51. package/styles/schedule/fluent.css +6 -2
  52. package/styles/schedule/highcontrast-light.css +6 -2
  53. package/styles/schedule/highcontrast.css +6 -2
  54. package/styles/schedule/material-dark.css +6 -2
  55. package/styles/schedule/material.css +6 -2
  56. package/styles/schedule/tailwind-dark.css +6 -2
  57. package/styles/schedule/tailwind.css +6 -2
  58. package/styles/tailwind-dark.css +6 -2
  59. package/styles/tailwind.css +6 -2
@@ -6260,7 +6260,7 @@ class EventBase {
6260
6260
  }
6261
6261
  else {
6262
6262
  const appointmentSubject = createElement('div', { className: SUBJECT_CLASS });
6263
- appointmentSubject.innerText = this.parent.sanitize(eventSubject);
6263
+ this.parent.sanitize(eventSubject, appointmentSubject);
6264
6264
  templateElement = [appointmentSubject];
6265
6265
  }
6266
6266
  append(templateElement, appointmentWrapper);
@@ -6786,7 +6786,7 @@ class VerticalEvent extends EventBase {
6786
6786
  }
6787
6787
  else {
6788
6788
  const appointmentSubject = createElement('div', { className: SUBJECT_CLASS });
6789
- appointmentSubject.innerText = this.parent.sanitize(recordSubject);
6789
+ this.parent.sanitize(recordSubject, appointmentSubject);
6790
6790
  if (isAllDay) {
6791
6791
  if (record[fieldMapping.isAllDay]) {
6792
6792
  templateElement = [appointmentSubject];
@@ -6819,7 +6819,7 @@ class VerticalEvent extends EventBase {
6819
6819
  innerHTML: timeStr
6820
6820
  });
6821
6821
  const appointmentLocation = createElement('div', { className: LOCATION_CLASS });
6822
- appointmentLocation.innerText = this.parent.sanitize((record[fieldMapping.location] || this.parent.eventSettings.fields.location.default || ''));
6822
+ this.parent.sanitize((record[fieldMapping.location] || this.parent.eventSettings.fields.location.default || ''), appointmentLocation);
6823
6823
  templateElement = [appointmentSubject, appointmentTime, appointmentLocation];
6824
6824
  }
6825
6825
  }
@@ -7045,12 +7045,6 @@ class VerticalEvent extends EventBase {
7045
7045
  record.data = eventData;
7046
7046
  this.appendEvent(record, appointmentElement, index, tempData.appLeft);
7047
7047
  this.wireAppointmentEvents(appointmentElement, eventObj);
7048
- if (appHeight < this.cellHeight) {
7049
- const resizeHandlers = [].slice.call(appointmentElement.querySelectorAll('.' + EVENT_RESIZE_CLASS));
7050
- resizeHandlers.forEach((resizeHandler) => {
7051
- resizeHandler.style.height = Math.ceil(appHeight / resizeHandler.offsetHeight) + 'px';
7052
- });
7053
- }
7054
7048
  }
7055
7049
  }
7056
7050
  getEventWidth() {
@@ -7670,7 +7664,7 @@ class MonthEvent extends EventBase {
7670
7664
  else {
7671
7665
  const eventLocation = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '');
7672
7666
  const appointmentSubject = createElement('div', { className: SUBJECT_CLASS });
7673
- appointmentSubject.innerText = this.parent.sanitize((eventSubject + (eventLocation ? '; ' + eventLocation : '')));
7667
+ this.parent.sanitize((eventSubject + (eventLocation ? '; ' + eventLocation : '')), appointmentSubject);
7674
7668
  const appointmentStartTime = createElement('div', {
7675
7669
  className: APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + DISABLE_CLASS : ''),
7676
7670
  innerHTML: this.parent.getTimeString(eventData[this.fields.startTime])
@@ -7714,7 +7708,7 @@ class MonthEvent extends EventBase {
7714
7708
  className: APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + DISABLE_CLASS : ''), innerHTML: timeString
7715
7709
  });
7716
7710
  const appLocation = createElement('div', { className: LOCATION_CLASS });
7717
- appLocation.innerText = this.parent.sanitize(eventLocation);
7711
+ this.parent.sanitize(eventLocation, appLocation);
7718
7712
  innerElement = [appointmentSubject, appTime, appLocation];
7719
7713
  }
7720
7714
  const wrap = createElement('div', { className: 'e-inner-wrap' });
@@ -8141,13 +8135,6 @@ class TimelineEvent extends MonthEvent {
8141
8135
  const firstChild = this.getFirstChild(resIndex);
8142
8136
  this.updateCellHeight(firstChild, height);
8143
8137
  }
8144
- if (this.parent.activeViewOptions.option !== 'TimelineMonth' && this.parent.activeViewOptions.timeScale.enable
8145
- && appWidth < this.cellWidth) {
8146
- const resizeHandlers = [].slice.call(appointmentElement.querySelectorAll('.' + EVENT_RESIZE_CLASS));
8147
- resizeHandlers.forEach((resizeHandler) => {
8148
- resizeHandler.style.width = Math.ceil(appWidth / resizeHandler.getBoundingClientRect().width) + 'px';
8149
- });
8150
- }
8151
8138
  }
8152
8139
  else {
8153
8140
  for (let i = 0; i < diffInDays; i++) {
@@ -9137,7 +9124,7 @@ class QuickPopups {
9137
9124
  }
9138
9125
  else {
9139
9126
  appointmentElement.appendChild(createElement('div', { className: SUBJECT_CLASS }));
9140
- appointmentElement.firstElementChild.innerText = this.parent.sanitize(eventText);
9127
+ this.parent.sanitize(eventText, appointmentElement.firstElementChild);
9141
9128
  }
9142
9129
  if (!isNullOrUndefined(groupIndex)) {
9143
9130
  appointmentElement.setAttribute('data-group-index', groupIndex);
@@ -9392,7 +9379,7 @@ class QuickPopups {
9392
9379
  const templateWrapper = createElement('div', { innerHTML: header });
9393
9380
  if (headerType === 'Event') {
9394
9381
  const subjectText = templateWrapper.querySelector('.' + SUBJECT_CLASS);
9395
- subjectText.innerText = this.parent.sanitize(args.eventSubject);
9382
+ this.parent.sanitize(args.eventSubject, subjectText);
9396
9383
  }
9397
9384
  append([].slice.call(templateWrapper.childNodes), headerTemplate);
9398
9385
  }
@@ -9456,19 +9443,19 @@ class QuickPopups {
9456
9443
  if (data[this.parent.eventFields.location]) {
9457
9444
  const locationDetails = templateWrapper.querySelector('.' + LOCATION_DETAILS_CLASS);
9458
9445
  if (!isNullOrUndefined(locationDetails)) {
9459
- locationDetails.innerText = this.parent.sanitize(data[this.parent.eventFields.location]);
9446
+ this.parent.sanitize(data[this.parent.eventFields.location], locationDetails);
9460
9447
  }
9461
9448
  }
9462
9449
  if (data[this.parent.eventFields.description]) {
9463
9450
  const descriptionDetails = templateWrapper.querySelector('.' + DESCRIPTION_DETAILS_CLASS);
9464
9451
  if (!isNullOrUndefined(descriptionDetails)) {
9465
- descriptionDetails.innerText = this.parent.sanitize(data[this.parent.eventFields.description]);
9452
+ this.parent.sanitize(data[this.parent.eventFields.description], descriptionDetails);
9466
9453
  }
9467
9454
  }
9468
9455
  if (resourceText) {
9469
9456
  const resourceDetails = templateWrapper.querySelector('.' + RESOURCE_DETAILS_CLASS);
9470
9457
  if (!isNullOrUndefined(resourceDetails)) {
9471
- resourceDetails.innerText = this.parent.sanitize(resourceText);
9458
+ this.parent.sanitize(resourceText, resourceDetails);
9472
9459
  }
9473
9460
  }
9474
9461
  append([].slice.call(templateWrapper.childNodes), contentTemplate);
@@ -11700,6 +11687,7 @@ class EventWindow {
11700
11687
  for (const element of formElements) {
11701
11688
  remove(element);
11702
11689
  }
11690
+ this.parent.resetTemplates(['editorTemplate']);
11703
11691
  }
11704
11692
  const templateId = this.parent.element.id + '_editorTemplate';
11705
11693
  const tempEle = [].slice.call(this.parent.getEditorTemplate()(args || {}, this.parent, 'editorTemplate', templateId, false));
@@ -12263,8 +12251,11 @@ class EventWindow {
12263
12251
  }
12264
12252
  }
12265
12253
  applyFormValidation() {
12266
- const getValidationRule = (rules) => (rules && Object.keys(rules).length > 0) ? rules : undefined;
12267
12254
  const form = this.element.querySelector('.' + FORM_CLASS);
12255
+ if (!form) {
12256
+ return;
12257
+ }
12258
+ const getValidationRule = (rules) => (rules && Object.keys(rules).length > 0) ? rules : undefined;
12268
12259
  const rules = {};
12269
12260
  const subjectRule = getValidationRule(this.parent.eventSettings.fields.subject.validation);
12270
12261
  if (!isNullOrUndefined(subjectRule)) {
@@ -13075,7 +13066,8 @@ class EventWindow {
13075
13066
  value = element.checked;
13076
13067
  }
13077
13068
  else {
13078
- value = this.parent.sanitize(element.value);
13069
+ value = this.parent.enableHtmlSanitizer ?
13070
+ SanitizeHtmlHelper.sanitize(element.value) : element.value;
13079
13071
  }
13080
13072
  }
13081
13073
  return value;
@@ -13219,6 +13211,9 @@ class EventWindow {
13219
13211
  else if (element.classList.contains('e-multiselect')) {
13220
13212
  instance = element.ej2_instances;
13221
13213
  }
13214
+ else if (element.classList.contains('e-numerictextbox')) {
13215
+ instance = element.ej2_instances;
13216
+ }
13222
13217
  if (instance && instance[0]) {
13223
13218
  instance[0].destroy();
13224
13219
  }
@@ -13775,6 +13770,7 @@ class Render {
13775
13770
  }
13776
13771
  }
13777
13772
  this.updateHeader();
13773
+ this.parent.currentTimezoneDate = this.parent.getCurrentTime();
13778
13774
  this.parent.activeView.renderLayout(CURRENT_PANEL_CLASS);
13779
13775
  this.parent.renderTemplates();
13780
13776
  if (this.parent.eventTooltip) {
@@ -15360,7 +15356,7 @@ class ResourceBase {
15360
15356
  const resourceLevel = this.resourceCollection[parseInt(i.toString(), 10)];
15361
15357
  const resourceText = resourceLevel.dataSource.filter((resData) => resData[resourceLevel.idField] === resource.groupOrder[parseInt(i.toString(), 10)]);
15362
15358
  const resourceName = createElement('div', { className: RESOURCE_NAME });
15363
- resourceName.innerText = this.parent.sanitize(resourceText[0][resourceLevel.textField]);
15359
+ this.parent.sanitize(resourceText[0][resourceLevel.textField], resourceName);
15364
15360
  headerCollection.push(resourceName);
15365
15361
  const levelIcon = createElement('div', { className: 'e-icons e-icon-next' });
15366
15362
  headerCollection.push(levelIcon);
@@ -16091,17 +16087,20 @@ let Schedule = class Schedule extends Component {
16091
16087
  }
16092
16088
  }
16093
16089
  /**
16094
- * Method to sanitize any suspected untrusted strings and scripts before rendering them.
16090
+ * This method renders untrusted strings and scripts securely by sanitizing them first.
16095
16091
  *
16096
16092
  * @param {string} value - A string value representing the HTML string value to be sanitized.
16097
- * @returns {string} A sanitized Html string.
16093
+ * @param {HTMLElement} element - An HTML element to which the sanitized or unsanitized HTML string will be assigned.
16094
+ * @returns {void}
16098
16095
  * @private
16099
16096
  */
16100
- sanitize(value) {
16097
+ sanitize(value, element) {
16101
16098
  if (this.enableHtmlSanitizer) {
16102
- return SanitizeHtmlHelper.sanitize(value);
16099
+ element.innerText = SanitizeHtmlHelper.sanitize(value);
16100
+ }
16101
+ else {
16102
+ element.innerHTML = value;
16103
16103
  }
16104
- return value;
16105
16104
  }
16106
16105
  initializeResources(isSetModel = false) {
16107
16106
  if (this.resources.length > 0) {
@@ -16613,7 +16612,8 @@ let Schedule = class Schedule extends Component {
16613
16612
  isIgnoreOccurrence: false, groupIndex: 0, action: false, isBlock: false, isCustomMonth: true, isPreventTimezone: false
16614
16613
  };
16615
16614
  }
16616
- this.activeCellsData = { startTime: this.getCurrentTime(), endTime: this.getCurrentTime(), isAllDay: false };
16615
+ this.currentTimezoneDate = this.getCurrentTime();
16616
+ this.activeCellsData = { startTime: new Date(this.currentTimezoneDate), endTime: new Date(this.currentTimezoneDate), isAllDay: false };
16617
16617
  this.activeEventData = { event: undefined, element: undefined };
16618
16618
  this.getDefaultLocale();
16619
16619
  this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);
@@ -17061,7 +17061,7 @@ let Schedule = class Schedule extends Component {
17061
17061
  */
17062
17062
  getStartEndTime(startEndTime) {
17063
17063
  if (!isNullOrUndefined(startEndTime) && startEndTime !== '') {
17064
- const startEndDate = resetTime(this.getCurrentTime());
17064
+ const startEndDate = resetTime(new Date(this.currentTimezoneDate) || this.getCurrentTime());
17065
17065
  const timeString = startEndTime.split(':');
17066
17066
  if (timeString.length === 2) {
17067
17067
  startEndDate.setHours(parseInt(timeString[0], 10), parseInt(timeString[1], 10), 0);
@@ -21922,7 +21922,7 @@ class ViewBase {
21922
21922
  return endHour;
21923
21923
  }
21924
21924
  isCurrentDate(date) {
21925
- return date.setHours(0, 0, 0, 0) === this.parent.getCurrentTime().setHours(0, 0, 0, 0);
21925
+ return date.setHours(0, 0, 0, 0) === new Date(this.parent.currentTimezoneDate).setHours(0, 0, 0, 0);
21926
21926
  }
21927
21927
  isCurrentMonth(date) {
21928
21928
  if (this.parent.activeViewOptions.displayDate || this.parent.activeViewOptions.numberOfWeeks > 0) {
@@ -22128,7 +22128,7 @@ class ViewBase {
22128
22128
  }
22129
22129
  else {
22130
22130
  const resourceText = createElement('div', { className: className });
22131
- resourceText.innerText = this.parent.sanitize(tdData.resourceData[tdData.resource.textField]);
22131
+ this.parent.sanitize(tdData.resourceData[tdData.resource.textField], resourceText);
22132
22132
  tdElement.appendChild(resourceText);
22133
22133
  }
22134
22134
  }
@@ -22506,7 +22506,8 @@ class VerticalView extends ViewBase {
22506
22506
  this.parent.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {
22507
22507
  return;
22508
22508
  }
22509
- if (this.parent.showTimeIndicator && this.isWorkHourRange(this.parent.getCurrentTime())) {
22509
+ const currentDate = this.parent.getCurrentTime();
22510
+ if (this.parent.showTimeIndicator && this.isWorkHourRange(currentDate)) {
22510
22511
  const currentDateIndex = this.getCurrentTimeIndicatorIndex();
22511
22512
  if (currentDateIndex.length > 0) {
22512
22513
  const workCells = [].slice.call(this.element.querySelectorAll('.' + WORK_CELLS_CLASS));
@@ -22514,7 +22515,6 @@ class VerticalView extends ViewBase {
22514
22515
  this.changeCurrentTimePosition();
22515
22516
  }
22516
22517
  if (isNullOrUndefined(this.currentTimeIndicatorTimer)) {
22517
- const currentDate = this.parent.getCurrentTime();
22518
22518
  const interval = MS_PER_MINUTE - ((currentDate.getSeconds() * 1000) + currentDate.getMilliseconds());
22519
22519
  if (interval <= (MS_PER_MINUTE - 1000)) {
22520
22520
  window.setTimeout(() => {
@@ -22541,10 +22541,11 @@ class VerticalView extends ViewBase {
22541
22541
  if (!isNullOrUndefined(this.parent.resourceBase) && (this.parent.activeViewOptions.group.resources.length > 0) &&
22542
22542
  !this.parent.uiStateValues.isGroupAdaptive) {
22543
22543
  let count = 0;
22544
+ const currentDate = resetTime(this.parent.getCurrentTime());
22544
22545
  if (this.parent.virtualScrollModule && this.parent.activeViewOptions.allowVirtualScrolling &&
22545
22546
  this.parent.activeViewOptions.group.byDate) {
22546
22547
  for (const resource of this.parent.resourceBase.expandedResources) {
22547
- if (resetTime(resource.date).getTime() === resetTime(this.parent.getCurrentTime()).getTime()) {
22548
+ if (resetTime(resource.date).getTime() === currentDate.getTime()) {
22548
22549
  currentDateIndex.push(count);
22549
22550
  }
22550
22551
  count += 1;
@@ -22552,7 +22553,7 @@ class VerticalView extends ViewBase {
22552
22553
  }
22553
22554
  else {
22554
22555
  for (const resource of this.parent.resourceBase.renderedResources) {
22555
- const index = this.parent.getIndexOfDate(resource.renderDates, resetTime(this.parent.getCurrentTime()));
22556
+ const index = this.parent.getIndexOfDate(resource.renderDates, currentDate);
22556
22557
  if (index >= 0) {
22557
22558
  const resIndex = this.parent.activeViewOptions.group.byDate ?
22558
22559
  (this.parent.resourceBase.lastResourceLevel.length * index) + count : count + index;
@@ -23328,7 +23329,7 @@ class Month extends ViewBase {
23328
23329
  for (let col = 0; col < count; col++) {
23329
23330
  const classList$$1 = [HEADER_CELLS_CLASS];
23330
23331
  const currentDateIndex = renderDates.slice(0, count).map((date) => date.getDay());
23331
- if (isCurrentMonth && currentDateIndex.indexOf(this.parent.getCurrentTime().getDay()) === col) {
23332
+ if (isCurrentMonth && currentDateIndex.indexOf(this.parent.currentTimezoneDate.getDay()) === col) {
23332
23333
  classList$$1.push(CURRENT_DAY_CLASS);
23333
23334
  }
23334
23335
  dateSlots.push({ date: renderDates[parseInt(col.toString(), 10)], type: 'monthDay', className: classList$$1, colSpan: 1, workDays: workDays });
@@ -23692,7 +23693,7 @@ class Month extends ViewBase {
23692
23693
  addClass([dateHeader], NAVIGATE_CLASS);
23693
23694
  const skeleton = 'full';
23694
23695
  const announcementText = this.parent.globalize.formatDate(data.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() });
23695
- dateHeader.setAttribute('aria-label', announcementText);
23696
+ ntd.setAttribute('aria-label', announcementText);
23696
23697
  }
23697
23698
  }
23698
23699
  getMonthStart(currentDate) {
@@ -24365,11 +24366,11 @@ class AgendaBase extends ViewBase {
24365
24366
  eventSubject += ',';
24366
24367
  }
24367
24368
  const appSubjectText = createElement('div', { className: SUBJECT_CLASS });
24368
- appSubjectText.innerText = this.parent.sanitize(eventSubject);
24369
+ this.parent.sanitize(eventSubject, appSubjectText);
24369
24370
  appSubjectWrap.appendChild(appSubjectText);
24370
24371
  if (!isNullOrUndefined(eventLocation) && eventLocation !== '') {
24371
24372
  const appLocation = createElement('div', { className: LOCATION_CLASS });
24372
- appLocation.innerText = this.parent.sanitize(eventLocation);
24373
+ this.parent.sanitize(eventLocation, appLocation);
24373
24374
  appSubjectWrap.appendChild(appLocation);
24374
24375
  }
24375
24376
  if (!isNullOrUndefined(event[fieldMapping.recurrenceRule])) {
@@ -25987,8 +25988,11 @@ class TimelineYear extends Year {
25987
25988
  else {
25988
25989
  isDateAvail = column >= monthStart.getDay() && date.getTime() < monthEnd.getTime();
25989
25990
  }
25991
+ const announcementText = this.parent.globalize.formatDate(date, {
25992
+ skeleton: 'full', calendar: this.parent.getCalendarMode()
25993
+ });
25990
25994
  const td = createElement('td', {
25991
- className: WORK_CELLS_CLASS, attrs: { 'aria-selected': 'false' }
25995
+ className: WORK_CELLS_CLASS, attrs: { 'aria-selected': 'false', 'aria-label': announcementText }
25992
25996
  });
25993
25997
  contentTr.appendChild(td);
25994
25998
  const dateHeader = createElement('div', {
@@ -25996,11 +26000,6 @@ class TimelineYear extends Year {
25996
26000
  innerHTML: (isDateAvail) ?
25997
26001
  this.parent.globalize.formatDate(date, { skeleton: 'd', calendar: this.parent.getCalendarMode() }) : ''
25998
26002
  });
25999
- const skeleton = 'full';
26000
- const announcementText = this.parent.globalize.formatDate(date, {
26001
- skeleton: skeleton, calendar: this.parent.getCalendarMode()
26002
- });
26003
- dateHeader.setAttribute('aria-label', announcementText);
26004
26003
  if (isDateAvail) {
26005
26004
  const tds = [td];
26006
26005
  const classList$$1 = [];
@@ -26732,18 +26731,23 @@ class Print {
26732
26731
  ];
26733
26732
  const scheduleTemplates = ['cellHeaderTemplate', 'dayHeaderTemplate', 'monthHeaderTemplate', 'cellTemplate',
26734
26733
  'dateHeaderTemplate', 'dateRangeTemplate', 'eventTemplate', 'resourceHeaderTemplate', 'headerIndentTemplate'];
26734
+ const scheduleEvents = ['actionBegin', 'actionComplete', 'actionFailure', 'created', 'dataBinding', 'dataBound',
26735
+ 'destroyed', 'eventRendered', 'moreEventsClick', 'navigating', 'popupOpen', 'popupClose', 'renderCell'];
26735
26736
  let eventSettings;
26736
26737
  let group;
26737
26738
  let timeScale;
26738
26739
  let views;
26739
26740
  for (const key of scheduleProps) {
26740
26741
  switch (key) {
26741
- case 'eventSettings':
26742
+ case 'eventSettings': {
26742
26743
  eventSettings = Object.assign({}, this.parent.eventSettings.properties);
26743
26744
  eventSettings.dataSource = this.parent.eventsData;
26744
- eventSettings.template = typeof (eventSettings.template) === 'function' ? null : eventSettings.template;
26745
+ const eventTemplate = !isNullOrUndefined(printOptions.eventSettings) &&
26746
+ !isNullOrUndefined(printOptions.eventSettings.template) ? printOptions.eventSettings.template : eventSettings.template;
26747
+ eventSettings.template = typeof (eventTemplate) === 'function' ? null : eventTemplate;
26745
26748
  printModel.eventSettings = eventSettings;
26746
26749
  break;
26750
+ }
26747
26751
  case 'group':
26748
26752
  group = isNullOrUndefined(printOptions.group) ? this.parent.group : printOptions.group;
26749
26753
  group.headerTooltipTemplate = null;
@@ -26775,6 +26779,10 @@ class Print {
26775
26779
  (typeof (printOptions[`${key}`]) === 'function' ? null : printOptions[`${key}`]);
26776
26780
  break;
26777
26781
  }
26782
+ if (scheduleEvents.indexOf(key) > -1) {
26783
+ printModel[`${key}`] = printOptions[`${key}`];
26784
+ break;
26785
+ }
26778
26786
  printModel[`${key}`] = isNullOrUndefined(printOptions[`${key}`]) ?
26779
26787
  this.parent[`${key}`] : printOptions[`${key}`];
26780
26788
  break;