@syncfusion/ej2-schedule 26.1.35 → 26.1.38

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 (36) 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 +106 -45
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +105 -44
  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 +11 -11
  12. package/src/schedule/actions/crud.js +3 -1
  13. package/src/schedule/actions/resize.js +5 -0
  14. package/src/schedule/base/schedule.js +6 -3
  15. package/src/schedule/event-renderer/agenda-base.js +2 -2
  16. package/src/schedule/event-renderer/event-base.js +1 -1
  17. package/src/schedule/event-renderer/month.js +2 -1
  18. package/src/schedule/event-renderer/timeline-view.js +6 -1
  19. package/src/schedule/event-renderer/vertical-view.js +4 -4
  20. package/src/schedule/event-renderer/year.js +1 -1
  21. package/src/schedule/exports/print.js +10 -7
  22. package/src/schedule/popups/quick-popups.js +1 -1
  23. package/src/schedule/renderer/header-renderer.js +1 -1
  24. package/src/schedule/renderer/month.js +5 -4
  25. package/src/schedule/renderer/renderer.js +8 -2
  26. package/src/schedule/renderer/timeline-year.js +3 -3
  27. package/src/schedule/renderer/vertical-view.d.ts +1 -0
  28. package/src/schedule/renderer/vertical-view.js +21 -9
  29. package/src/schedule/renderer/view-base.d.ts +1 -0
  30. package/src/schedule/renderer/view-base.js +25 -2
  31. package/src/schedule/renderer/year.js +1 -1
  32. package/styles/fluent2.css +64 -49
  33. package/styles/recurrence-editor/fluent2.css +30 -30
  34. package/styles/schedule/_fluent2-definition.scss +3 -3
  35. package/styles/schedule/_theme.scss +4 -0
  36. package/styles/schedule/fluent2.css +64 -49
@@ -1175,7 +1175,7 @@ class HeaderRenderer {
1175
1175
  };
1176
1176
  const viewName = this.parent.activeViewOptions.dateRangeTemplateName;
1177
1177
  const templateId = this.parent.element.id + '_' + viewName + 'dateRangeTemplate';
1178
- const dateTemplate = [].slice.call(this.parent.getDateRangeTemplate()(args, this.parent, 'dateRangeTemplate', templateId, false));
1178
+ const dateTemplate = [].slice.call(this.parent.getDateRangeTemplate()(args, this.parent, 'dateRangeTemplate', templateId, false, undefined, undefined, this.parent.root));
1179
1179
  append(dateTemplate, textEle);
1180
1180
  }
1181
1181
  else {
@@ -6507,7 +6507,7 @@ class EventBase {
6507
6507
  const templateId = scheduleId + viewName + 'eventTemplate';
6508
6508
  const templateName = isResourceEventTemplate && this.parent.currentView.indexOf('Year') === -1 ?
6509
6509
  this.parent.getEventTemplateName(resIndex) : 'eventTemplate';
6510
- templateElement = this.parent.getAppointmentTemplate()(record, this.parent, templateName, templateId, false);
6510
+ templateElement = this.parent.getAppointmentTemplate()(record, this.parent, templateName, templateId, false, undefined, undefined, this.parent.root);
6511
6511
  }
6512
6512
  else {
6513
6513
  const appointmentSubject = createElement('div', { className: SUBJECT_CLASS });
@@ -7074,7 +7074,7 @@ class VerticalEvent extends EventBase {
7074
7074
  const templateId = elementId + viewName + 'eventTemplate';
7075
7075
  const resIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex : resource;
7076
7076
  const templateName = this.isResourceEventTemplate ? this.parent.getEventTemplateName(resIndex) : 'eventTemplate';
7077
- templateElement = this.parent.getAppointmentTemplate()(record, this.parent, templateName, templateId, false);
7077
+ templateElement = this.parent.getAppointmentTemplate()(record, this.parent, templateName, templateId, false, undefined, undefined, this.parent.root);
7078
7078
  }
7079
7079
  else {
7080
7080
  const appointmentSubject = createElement('div', { className: SUBJECT_CLASS });
@@ -7284,7 +7284,7 @@ class VerticalEvent extends EventBase {
7284
7284
  }
7285
7285
  if (eStart <= eEnd && isValidEvent && this.isWorkDayAvailable(resource, eStart)) {
7286
7286
  const appHeight = this.getHeight(eStart, eEnd);
7287
- if (eStart.getTime() > schedule.startHour.getTime()) {
7287
+ if (eStart.getTime() >= schedule.startHour.getTime()) {
7288
7288
  topValue = this.getTopValue(eStart, dayIndex, resource);
7289
7289
  }
7290
7290
  const appIndex = this.getOverlapIndex(record, dayIndex, false, resource);
@@ -7539,12 +7539,12 @@ class VerticalEvent extends EventBase {
7539
7539
  let rowHeight;
7540
7540
  if (this.parent.uiStateValues.expand) {
7541
7541
  target.setAttribute('title', this.parent.localeObj.getConstant('collapseAllDaySection'));
7542
- target.setAttribute('aria-label', 'Collapse section');
7542
+ target.setAttribute('aria-label', this.parent.localeObj.getConstant('collapseAllDaySection'));
7543
7543
  rowHeight = ((this.allDayLevel + 1) * this.getEventHeight()) + 4;
7544
7544
  }
7545
7545
  else {
7546
7546
  target.setAttribute('title', this.parent.localeObj.getConstant('expandAllDaySection'));
7547
- target.setAttribute('aria-label', 'Expand section');
7547
+ target.setAttribute('aria-label', this.parent.localeObj.getConstant('expandAllDaySection'));
7548
7548
  rowHeight = (3 * this.getEventHeight()) + 4;
7549
7549
  this.parent.element.querySelector('.' + DATE_HEADER_WRAP_CLASS).scrollTop = 0;
7550
7550
  }
@@ -7953,7 +7953,7 @@ class MonthEvent extends EventBase {
7953
7953
  const viewName = this.parent.activeViewOptions.eventTemplateName;
7954
7954
  const templateId = scheduleId + viewName + 'eventTemplate';
7955
7955
  const eventTemplate = this.isResourceEventTemplate ? this.parent.getEventTemplateName(resIndex) : 'eventTemplate';
7956
- templateElement = this.parent.getAppointmentTemplate()(eventObj, this.parent, eventTemplate, templateId, false);
7956
+ templateElement = this.parent.getAppointmentTemplate()(eventObj, this.parent, eventTemplate, templateId, false, undefined, undefined, this.parent.root);
7957
7957
  }
7958
7958
  else {
7959
7959
  const eventLocation = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '');
@@ -8082,6 +8082,7 @@ class MonthEvent extends EventBase {
8082
8082
  if (indicator) {
8083
8083
  const count = parseInt(indicator.getAttribute('data-count'), 10) + 1;
8084
8084
  indicator.setAttribute('data-count', count.toString());
8085
+ indicator.setAttribute('aria-label', count + ' ' + this.parent.localeObj.getConstant('moreEvents'));
8085
8086
  indicator.innerHTML = this.getMoreIndicatorText(count);
8086
8087
  }
8087
8088
  else {
@@ -8686,8 +8687,13 @@ class TimelineEvent extends MonthEvent {
8686
8687
  }
8687
8688
  }
8688
8689
  getSameDayEventsWidth(startDate, endDate) {
8690
+ let intervalMins = this.interval;
8691
+ if (this.slotsPerDay === 1) {
8692
+ const hoursRange = getStartEndHours(resetTime(new Date(startDate.getTime())), this.startHour, this.endHour);
8693
+ intervalMins = (hoursRange.endHour.getTime() - hoursRange.startHour.getTime()) / MS_PER_MINUTE;
8694
+ }
8689
8695
  return ((getUniversalTime(endDate) - getUniversalTime(startDate)) /
8690
- MS_PER_MINUTE * (this.cellWidth * this.slotCount) / this.interval);
8696
+ MS_PER_MINUTE * (this.cellWidth * this.slotCount) / intervalMins);
8691
8697
  }
8692
8698
  getSpannedEventsWidth(startDate, endDate, diffInDays) {
8693
8699
  const width = (diffInDays * this.slotsPerDay) * this.cellWidth;
@@ -9478,7 +9484,7 @@ class QuickPopups {
9478
9484
  let templateElement;
9479
9485
  if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {
9480
9486
  const tempId = this.parent.element.id + '_' + this.parent.activeViewOptions.eventTemplateName + 'eventTemplate';
9481
- templateElement = this.parent.getAppointmentTemplate()(eventData, this.parent, 'eventTemplate', tempId, false);
9487
+ templateElement = this.parent.getAppointmentTemplate()(eventData, this.parent, 'eventTemplate', tempId, false, undefined, undefined, this.parent.root);
9482
9488
  append(templateElement, appointmentElement);
9483
9489
  }
9484
9490
  else {
@@ -14363,9 +14369,15 @@ class Render {
14363
14369
  }
14364
14370
  }
14365
14371
  updateLabelText(view) {
14366
- const content = this.parent.activeView.getLabelText(view);
14367
14372
  this.parent.element.setAttribute('role', 'application');
14368
- this.parent.element.setAttribute('aria-label', content);
14373
+ this.parent.element.removeAttribute('aria-labelledby');
14374
+ this.parent.element.removeAttribute('aria-label');
14375
+ if (view === 'Year') {
14376
+ this.parent.element.setAttribute('aria-label', this.parent.activeView.getLabelText(view));
14377
+ }
14378
+ else {
14379
+ this.parent.element.setAttribute('aria-labelledby', this.parent.element.id + '_table');
14380
+ }
14369
14381
  }
14370
14382
  }
14371
14383
 
@@ -14513,7 +14525,9 @@ class Crud {
14513
14525
  this.parent.trigger(dataBound, null, () => {
14514
14526
  this.parent.hideSpinner();
14515
14527
  if (this.parent.isPrinting) {
14516
- this.parent.notify(print, {});
14528
+ setTimeout(() => {
14529
+ this.parent.notify(print, {});
14530
+ }, 100);
14517
14531
  }
14518
14532
  });
14519
14533
  });
@@ -17361,6 +17375,7 @@ let Schedule = class Schedule extends Component {
17361
17375
  subject: 'Subject',
17362
17376
  addTitle: 'Add title',
17363
17377
  moreDetails: 'More Details',
17378
+ moreEvents: 'More Events',
17364
17379
  save: 'Save',
17365
17380
  editContent: 'How would you like to change the appointment in the series?',
17366
17381
  deleteContent: 'Are you sure you want to delete this event?',
@@ -17395,6 +17410,7 @@ let Schedule = class Schedule extends Component {
17395
17410
  ok: 'Ok',
17396
17411
  yes: 'Yes',
17397
17412
  no: 'No',
17413
+ of: 'of',
17398
17414
  occurrence: 'Occurrence',
17399
17415
  series: 'Series',
17400
17416
  previous: 'Previous',
@@ -17964,7 +17980,7 @@ let Schedule = class Schedule extends Component {
17964
17980
  const scheduleId = this.element.id + '_';
17965
17981
  const viewName = this.activeViewOptions.headerIndentTemplateName;
17966
17982
  const templateId = scheduleId + viewName + 'headerIndentTemplate';
17967
- const indentTemplate = [].slice.call(this.getHeaderIndentTemplate()(data, this, 'headerIndentTemplate', templateId, false));
17983
+ const indentTemplate = [].slice.call(this.getHeaderIndentTemplate()(data, this, 'headerIndentTemplate', templateId, false, undefined, undefined, this.root));
17968
17984
  append(indentTemplate, td);
17969
17985
  }
17970
17986
  }
@@ -18492,8 +18508,9 @@ let Schedule = class Schedule extends Component {
18492
18508
  }
18493
18509
  const msMajorInterval = this.activeViewOptions.timeScale.interval * MS_PER_MINUTE;
18494
18510
  const msInterval = msMajorInterval / this.activeViewOptions.timeScale.slotCount;
18495
- let startIndex = Math.round((startHour.getTime() - viewStartHour.getTime()) / msInterval);
18496
- let endIndex = Math.ceil((endHour.getTime() - viewStartHour.getTime()) / msInterval);
18511
+ const offsetDiff = ((viewStartHour.getTimezoneOffset() - startHour.getTimezoneOffset()) * MS_PER_MINUTE);
18512
+ let startIndex = Math.round((startHour.getTime() - viewStartHour.getTime() + offsetDiff) / msInterval);
18513
+ let endIndex = Math.ceil((endHour.getTime() - viewStartHour.getTime() + offsetDiff) / msInterval);
18497
18514
  const tempStartIndex = startIndex;
18498
18515
  const tempEndIndex = endIndex;
18499
18516
  const cells = [];
@@ -20190,6 +20207,11 @@ class Resize extends ActionBase {
20190
20207
  }
20191
20208
  const viewElement = this.parent.element.querySelector('.' + CONTENT_WRAP_CLASS);
20192
20209
  this.scrollArgs = { element: viewElement, width: viewElement.scrollWidth, height: viewElement.scrollHeight };
20210
+ // 883565 - To fix the resizing not working issue at the last column of the timeline view
20211
+ if (['Month', 'TimelineYear'].indexOf(this.parent.currentView) < 0) {
20212
+ const scrollWidth = Math.round(this.scrollArgs.width / this.actionObj.cellWidth) * this.actionObj.cellWidth;
20213
+ this.scrollArgs.width = this.scrollArgs.width < scrollWidth ? scrollWidth : this.scrollArgs.width;
20214
+ }
20193
20215
  EventHandler.add(document, Browser.touchMoveEvent, this.resizing, this);
20194
20216
  EventHandler.add(document, Browser.touchEndEvent, this.resizeStop, this);
20195
20217
  });
@@ -21118,7 +21140,7 @@ class YearEvent extends TimelineEvent {
21118
21140
  const eventObj = extend({}, record, null, true);
21119
21141
  if (this.parent.activeViewOptions.eventTemplate) {
21120
21142
  const templateId = this.parent.element.id + '_' + this.parent.activeViewOptions.eventTemplateName + 'eventTemplate';
21121
- templateElement = this.parent.getAppointmentTemplate()(eventObj, this.parent, 'eventTemplate', templateId, false);
21143
+ templateElement = this.parent.getAppointmentTemplate()(eventObj, this.parent, 'eventTemplate', templateId, false, undefined, undefined, this.parent.root);
21122
21144
  }
21123
21145
  else {
21124
21146
  const locationEle = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '');
@@ -22674,6 +22696,9 @@ class ViewBase {
22674
22696
  }
22675
22697
  setAriaAttributes(table) {
22676
22698
  table.setAttribute('role', 'grid');
22699
+ if (this.parent.currentView !== 'Year') {
22700
+ table.setAttribute('id', this.parent.element.id + '_table');
22701
+ }
22677
22702
  table.setAttribute('aria-label', this.getLabelText(this.parent.currentView));
22678
22703
  }
22679
22704
  createColGroup(table, lastRow) {
@@ -22917,9 +22942,29 @@ class ViewBase {
22917
22942
  const weekLength = type === 'next' ? WEEK_LENGTH : -WEEK_LENGTH;
22918
22943
  return addDays(this.parent.selectedDate, weekLength * this.parent.activeViewOptions.interval);
22919
22944
  }
22945
+ formatViewLabel(view, startDate, endDate) {
22946
+ const formatOptions = { type: 'date', skeleton: 'full', calendar: this.parent.getCalendarMode() };
22947
+ return this.parent.localeObj.getConstant(view) + ' ' + this.parent.localeObj.getConstant('start') + ' ' + this.parent.globalize.formatDate(startDate, formatOptions) + ' '
22948
+ + this.parent.localeObj.getConstant('endAt') + ' ' + this.parent.globalize.formatDate(endDate, formatOptions);
22949
+ }
22920
22950
  getLabelText(view) {
22921
22951
  const viewStr = view.charAt(0).toLowerCase() + view.substring(1);
22922
- return this.parent.localeObj.getConstant(viewStr) + ' of ' + capitalizeFirstWord(this.parent.globalize.formatDate(this.parent.selectedDate, { skeleton: 'long', calendar: this.parent.getCalendarMode() }), 'single');
22952
+ if (view === 'Year' || view === 'TimelineYear') {
22953
+ return this.formatViewLabel(viewStr, this.parent.activeView.getStartDate(), this.parent.activeView.getEndDate());
22954
+ }
22955
+ else {
22956
+ if (this.renderDates.length > 0) {
22957
+ if (this.parent.currentView === 'Day' || this.parent.currentView === 'TimelineDay') {
22958
+ return this.parent.localeObj.getConstant(viewStr) + ' of ' + capitalizeFirstWord(this.parent.globalize.formatDate(this.parent.selectedDate, { type: 'date', skeleton: 'full', calendar: this.parent.getCalendarMode() }), 'single');
22959
+ }
22960
+ else {
22961
+ return this.formatViewLabel(viewStr, this.renderDates[0], this.renderDates[this.renderDates.length - 1]);
22962
+ }
22963
+ }
22964
+ else {
22965
+ return '';
22966
+ }
22967
+ }
22923
22968
  }
22924
22969
  getDateRangeText() {
22925
22970
  if (this.parent.isAdaptive) {
@@ -23009,7 +23054,7 @@ class ViewBase {
23009
23054
  const scheduleId = this.parent.element.id + '_';
23010
23055
  const viewName = this.parent.activeViewOptions.resourceHeaderTemplateName;
23011
23056
  const templateId = scheduleId + viewName + 'resourceHeaderTemplate';
23012
- const quickTemplate = [].slice.call(this.parent.getResourceHeaderTemplate()(data, this.parent, 'resourceHeaderTemplate', templateId, false));
23057
+ const quickTemplate = [].slice.call(this.parent.getResourceHeaderTemplate()(data, this.parent, 'resourceHeaderTemplate', templateId, false, undefined, undefined, this.parent.root));
23013
23058
  append(quickTemplate, tdElement);
23014
23059
  }
23015
23060
  else {
@@ -23535,7 +23580,7 @@ class VerticalView extends ViewBase {
23535
23580
  templateName = 'dateHeaderTemplate';
23536
23581
  const args = { date: date, type: type };
23537
23582
  const viewName = this.parent.activeViewOptions.dateHeaderTemplateName;
23538
- cntEle = [].slice.call(this.parent.getDateHeaderTemplate()(args, this.parent, templateName, templateId + viewName + templateName, false));
23583
+ cntEle = [].slice.call(this.parent.getDateHeaderTemplate()(args, this.parent, templateName, templateId + viewName + templateName, false, undefined, undefined, this.parent.root));
23539
23584
  }
23540
23585
  else {
23541
23586
  wrapper.innerHTML = this.parent.activeView.isTimelineView() ?
@@ -23549,7 +23594,7 @@ class VerticalView extends ViewBase {
23549
23594
  if (this.parent.activeViewOptions.timeScale.majorSlotTemplate) {
23550
23595
  templateName = 'majorSlotTemplate';
23551
23596
  const args = { date: date, type: type };
23552
- cntEle = [].slice.call(this.parent.getMajorSlotTemplate()(args, this.parent, templateName, templateId + templateName, false));
23597
+ cntEle = [].slice.call(this.parent.getMajorSlotTemplate()(args, this.parent, templateName, templateId + templateName, false, undefined, undefined, this.parent.root));
23553
23598
  }
23554
23599
  else {
23555
23600
  wrapper.innerHTML = `<span>${this.getTime(date)}</span>`;
@@ -23560,7 +23605,7 @@ class VerticalView extends ViewBase {
23560
23605
  if (this.parent.activeViewOptions.timeScale.minorSlotTemplate) {
23561
23606
  templateName = 'minorSlotTemplate';
23562
23607
  const args = { date: date, type: type };
23563
- cntEle = [].slice.call(this.parent.getMinorSlotTemplate()(args, this.parent, templateName, templateId + templateName, false));
23608
+ cntEle = [].slice.call(this.parent.getMinorSlotTemplate()(args, this.parent, templateName, templateId + templateName, false, undefined, undefined, this.parent.root));
23564
23609
  }
23565
23610
  else {
23566
23611
  cntEle = [].slice.call(wrapper.childNodes);
@@ -23571,7 +23616,7 @@ class VerticalView extends ViewBase {
23571
23616
  const viewName = this.parent.activeViewOptions.cellTemplateName;
23572
23617
  templateName = 'cellTemplate';
23573
23618
  const args = { date: date, type: type, groupIndex: groupIndex };
23574
- cntEle = [].slice.call(this.parent.getCellTemplate()(args, this.parent, templateName, templateId + viewName + templateName, false));
23619
+ cntEle = [].slice.call(this.parent.getCellTemplate()(args, this.parent, templateName, templateId + viewName + templateName, false, undefined, undefined, this.parent.root));
23575
23620
  }
23576
23621
  break;
23577
23622
  }
@@ -23690,7 +23735,8 @@ class VerticalView extends ViewBase {
23690
23735
  const appointmentExpandCollapse = createElement('div', {
23691
23736
  attrs: {
23692
23737
  'tabindex': '0', 'role': 'list',
23693
- title: this.parent.localeObj.getConstant('expandAllDaySection'), 'aria-disabled': 'false', 'aria-label': 'Expand section'
23738
+ title: this.parent.localeObj.getConstant('expandAllDaySection'), 'aria-disabled': 'false',
23739
+ 'aria-label': this.parent.localeObj.getConstant('expandAllDaySection')
23694
23740
  },
23695
23741
  className: ALLDAY_APPOINTMENT_SECTION_CLASS + ' ' + APPOINTMENT_ROW_EXPAND_CLASS + ' ' +
23696
23742
  ICON + ' ' + DISABLE_CLASS
@@ -23840,11 +23886,11 @@ class VerticalView extends ViewBase {
23840
23886
  ntd.setAttribute('colspan', tdData.colSpan.toString());
23841
23887
  }
23842
23888
  const clsName = this.getContentTdClass(r);
23843
- const cellDate = resetTime(tdData.date);
23889
+ let cellDate = resetTime(tdData.date);
23844
23890
  if (!this.parent.isMinMaxDate(cellDate)) {
23845
23891
  clsName.push(DISABLE_DATES);
23846
23892
  }
23847
- setTime(cellDate, getDateInMs(r.date));
23893
+ cellDate = new Date(cellDate.setHours(r.date.getHours(), r.date.getMinutes(), r.date.getSeconds(), r.date.getMilliseconds()));
23848
23894
  let type = 'workCells';
23849
23895
  if (tdData.className.indexOf(RESOURCE_PARENT_CLASS) !== -1) {
23850
23896
  clsName.push(RESOURCE_GROUP_CELLS_CLASS);
@@ -23861,7 +23907,7 @@ class VerticalView extends ViewBase {
23861
23907
  const scheduleId = this.parent.element.id + '_';
23862
23908
  const viewName = this.parent.activeViewOptions.cellTemplateName;
23863
23909
  const templateId = scheduleId + viewName + 'cellTemplate';
23864
- const tooltipTemplate = [].slice.call(this.parent.getCellTemplate()(args, this.parent, 'cellTemplate', templateId, false));
23910
+ const tooltipTemplate = [].slice.call(this.parent.getCellTemplate()(args, this.parent, 'cellTemplate', templateId, false, undefined, undefined, this.parent.root));
23865
23911
  append(tooltipTemplate, ntd);
23866
23912
  }
23867
23913
  ntd.setAttribute('data-date', cellDate.getTime().toString());
@@ -23917,10 +23963,21 @@ class VerticalView extends ViewBase {
23917
23963
  end.setMilliseconds(end.getMilliseconds() + msInterval);
23918
23964
  return end;
23919
23965
  }
23966
+ getStartEndHours(startEndTime) {
23967
+ if (!isNullOrUndefined(startEndTime) && startEndTime !== '') {
23968
+ const startEndDate = new Date(2000, 0, 0, 0);
23969
+ const timeString = startEndTime.split(':');
23970
+ if (timeString.length === 2) {
23971
+ startEndDate.setHours(parseInt(timeString[0], 10), parseInt(timeString[1], 10), 0);
23972
+ }
23973
+ return startEndDate;
23974
+ }
23975
+ return new Date(2000, 0, 0, 0);
23976
+ }
23920
23977
  getTimeSlotRows(handler) {
23921
23978
  const rows = [];
23922
- const startHour = this.getStartHour();
23923
- const endHour = this.getEndHour();
23979
+ const startHour = this.getStartEndHours(this.parent.activeViewOptions.startHour);
23980
+ const endHour = this.getStartEndHours(this.parent.activeViewOptions.endHour);
23924
23981
  const msMajorInterval = this.parent.activeViewOptions.timeScale.interval * MS_PER_MINUTE;
23925
23982
  const msInterval = msMajorInterval / this.parent.activeViewOptions.timeScale.slotCount;
23926
23983
  let length = Math.round(MS_PER_DAY / msInterval);
@@ -24409,7 +24466,7 @@ class Month extends ViewBase {
24409
24466
  const elementId = this.parent.element.id + '_';
24410
24467
  const viewName = this.parent.activeViewOptions.dateHeaderTemplateName;
24411
24468
  const templateId = elementId + viewName + 'dateHeaderTemplate';
24412
- const dateTemplate = [].slice.call(this.parent.getDateHeaderTemplate()(cellArgs, this.parent, 'dateHeaderTemplate', templateId, false));
24469
+ const dateTemplate = [].slice.call(this.parent.getDateHeaderTemplate()(cellArgs, this.parent, 'dateHeaderTemplate', templateId, false, undefined, undefined, this.parent.root));
24413
24470
  if (dateTemplate && dateTemplate.length) {
24414
24471
  append(dateTemplate, tdEle);
24415
24472
  }
@@ -24577,7 +24634,7 @@ class Month extends ViewBase {
24577
24634
  const scheduleId = this.parent.element.id + '_';
24578
24635
  const viewName = this.parent.activeViewOptions.cellTemplateName;
24579
24636
  const templateId = scheduleId + viewName + 'cellTemplate';
24580
- const cellTemplate = [].slice.call(this.parent.getCellTemplate()(args, this.parent, 'cellTemplate', templateId, false));
24637
+ const cellTemplate = [].slice.call(this.parent.getCellTemplate()(args, this.parent, 'cellTemplate', templateId, false, undefined, undefined, this.parent.root));
24581
24638
  append(cellTemplate, ntd);
24582
24639
  }
24583
24640
  const args = { elementType: type, element: ntd, date: data.date, groupIndex: data.groupIndex };
@@ -24594,7 +24651,7 @@ class Month extends ViewBase {
24594
24651
  const scheduleId = this.parent.element.id + '_';
24595
24652
  const viewName = this.parent.activeViewOptions.cellHeaderTemplateName;
24596
24653
  const templateId = scheduleId + viewName + 'cellHeaderTemplate';
24597
- const cellHeaderTemplate = [].slice.call(this.parent.getCellHeaderTemplate()(args, this.parent, 'cellHeaderTemplate', templateId, false));
24654
+ const cellHeaderTemplate = [].slice.call(this.parent.getCellHeaderTemplate()(args, this.parent, 'cellHeaderTemplate', templateId, false, undefined, undefined, this.parent.root));
24598
24655
  append(cellHeaderTemplate, dateHeader);
24599
24656
  }
24600
24657
  else {
@@ -24724,7 +24781,8 @@ class Month extends ViewBase {
24724
24781
  return this.formatDateRange(this.parent.selectedDate);
24725
24782
  }
24726
24783
  getLabelText(view) {
24727
- return this.parent.localeObj.getConstant(view) + ' of ' + capitalizeFirstWord(this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y', calendar: this.parent.getCalendarMode() }), 'single');
24784
+ const viewStr = view.charAt(0).toLowerCase() + view.substring(1);
24785
+ return this.formatViewLabel(viewStr, this.getStartDate(), this.getEndDate());
24728
24786
  }
24729
24787
  createWeekNumberElement(text) {
24730
24788
  const tr = createElement('tr');
@@ -25025,7 +25083,7 @@ class Year extends ViewBase {
25025
25083
  }
25026
25084
  renderTemplates(fn, args, tName, vName, ele) {
25027
25085
  const templateId = this.parent.element.id + '_' + vName + tName;
25028
- const template = [].slice.call(fn(args, this.parent, tName, templateId, false));
25086
+ const template = [].slice.call(fn(args, this.parent, tName, templateId, false, undefined, undefined, this.parent.root));
25029
25087
  append(template, ele);
25030
25088
  }
25031
25089
  onCellClick(e) {
@@ -25242,7 +25300,7 @@ class AgendaBase extends ViewBase {
25242
25300
  const scheduleId = this.parent.element.id + '_';
25243
25301
  const viewName = this.parent.activeViewOptions.eventTemplateName;
25244
25302
  const templateId = scheduleId + viewName + 'eventTemplate';
25245
- templateEle = this.parent.getAppointmentTemplate()(listData[parseInt(li.toString(), 10)], this.parent, 'eventTemplate', templateId, false);
25303
+ templateEle = this.parent.getAppointmentTemplate()(listData[parseInt(li.toString(), 10)], this.parent, 'eventTemplate', templateId, false, undefined, undefined, this.parent.root);
25246
25304
  if (!isNullOrUndefined(listData[parseInt(li.toString(), 10)][fieldMapping.recurrenceRule])) {
25247
25305
  const iconClass = (listData[parseInt(li.toString(), 10)][fieldMapping.id] ===
25248
25306
  listData[parseInt(li.toString(), 10)][fieldMapping.recurrenceID]) ?
@@ -25542,7 +25600,7 @@ class AgendaBase extends ViewBase {
25542
25600
  const scheduleId = this.parent.element.id + '_';
25543
25601
  const viewName = this.parent.activeViewOptions.dateHeaderTemplateName;
25544
25602
  const templateId = scheduleId + viewName + 'dateHeaderTemplate';
25545
- const dateTemplate = [].slice.call(this.parent.getDateHeaderTemplate()(args, this.parent, 'dateHeaderTemplate', templateId, false));
25603
+ const dateTemplate = [].slice.call(this.parent.getDateHeaderTemplate()(args, this.parent, 'dateHeaderTemplate', templateId, false, undefined, undefined, this.parent.root));
25546
25604
  append(dateTemplate, dateHeader);
25547
25605
  }
25548
25606
  else {
@@ -27141,10 +27199,10 @@ class TimelineYear extends Year {
27141
27199
  const monthId = `schedule_${this.parent.activeViewOptions.dayHeaderTemplateName}monthHeaderTemplate`;
27142
27200
  if (type === 'dayHeaderTemplate') {
27143
27201
  args.day = this.parent.getDayNames('wide')[column % 7];
27144
- return [].slice.call(this.parent.getDayHeaderTemplate()(args, this.parent, 'dayHeaderTemplate', dayId, false));
27202
+ return [].slice.call(this.parent.getDayHeaderTemplate()(args, this.parent, 'dayHeaderTemplate', dayId, false, undefined, undefined, this.parent.root));
27145
27203
  }
27146
27204
  else {
27147
- return [].slice.call(this.parent.getMonthHeaderTemplate()(args, this.parent, 'monthHeaderTemplate', monthId, false));
27205
+ return [].slice.call(this.parent.getMonthHeaderTemplate()(args, this.parent, 'monthHeaderTemplate', monthId, false, undefined, undefined, this.parent.root));
27148
27206
  }
27149
27207
  }
27150
27208
  renderCellTemplate(data, td) {
@@ -27158,7 +27216,7 @@ class TimelineYear extends Year {
27158
27216
  const scheduleId = this.parent.element.id + '_';
27159
27217
  const viewName = this.parent.activeViewOptions.cellTemplateName;
27160
27218
  const templateId = scheduleId + viewName + 'cellTemplate';
27161
- const cellTemplate = [].slice.call(this.parent.getCellTemplate()(args, this.parent, 'cellTemplate', templateId, false));
27219
+ const cellTemplate = [].slice.call(this.parent.getCellTemplate()(args, this.parent, 'cellTemplate', templateId, false, undefined, undefined, this.parent.root));
27162
27220
  append(cellTemplate, td);
27163
27221
  }
27164
27222
  scrollToDate(scrollDate) {
@@ -27740,6 +27798,7 @@ class Print {
27740
27798
  Schedule.Inject(Day, Week, WorkWeek, Month, Agenda, MonthAgenda, TimelineViews, TimelineMonth, Year, TimelineYear);
27741
27799
  this.printInstance = new Schedule(this.getPrintScheduleModel(printOptions));
27742
27800
  this.printInstance.isPrinting = true;
27801
+ this.printInstance.root = this.parent.root ? this.parent.root : this.parent;
27743
27802
  this.printInstance.appendTo(element);
27744
27803
  this.printInstance.on(print, this.contentReady, this);
27745
27804
  this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');
@@ -27772,7 +27831,7 @@ class Print {
27772
27831
  eventSettings.dataSource = this.parent.eventsData;
27773
27832
  const eventTemplate = !isNullOrUndefined(printOptions.eventSettings) &&
27774
27833
  !isNullOrUndefined(printOptions.eventSettings.template) ? printOptions.eventSettings.template : eventSettings.template;
27775
- eventSettings.template = typeof (eventTemplate) === 'function' ? null : eventTemplate;
27834
+ eventSettings.template = !this.parent.isAngular && typeof (eventTemplate) === 'function' ? null : eventTemplate;
27776
27835
  printModel.eventSettings = eventSettings;
27777
27836
  break;
27778
27837
  }
@@ -27783,13 +27842,15 @@ class Print {
27783
27842
  break;
27784
27843
  case 'timeScale':
27785
27844
  timeScale = isNullOrUndefined(printOptions.timeScale) ? this.parent.timeScale : printOptions.timeScale;
27786
- timeScale.majorSlotTemplate = typeof (timeScale.majorSlotTemplate) === 'function' ? null : timeScale.majorSlotTemplate;
27787
- timeScale.minorSlotTemplate = typeof (timeScale.minorSlotTemplate) === 'function' ? null : timeScale.minorSlotTemplate;
27788
- printOptions.timeScale = timeScale;
27845
+ if (!this.parent.isAngular) {
27846
+ timeScale.majorSlotTemplate = typeof (timeScale.majorSlotTemplate) === 'function' ? null : timeScale.majorSlotTemplate;
27847
+ timeScale.minorSlotTemplate = typeof (timeScale.minorSlotTemplate) === 'function' ? null : timeScale.minorSlotTemplate;
27848
+ }
27849
+ printModel.timeScale = timeScale;
27789
27850
  break;
27790
27851
  case 'views':
27791
27852
  views = isNullOrUndefined(printOptions.views) ? this.parent.views : printOptions.views;
27792
- if (views && views.length > 0 && typeof (views[0]) === 'object') {
27853
+ if (!this.parent.isAngular && views && views.length > 0 && typeof (views[0]) === 'object') {
27793
27854
  for (const view of views) {
27794
27855
  scheduleTemplates.forEach((x) => {
27795
27856
  if (!isNullOrUndefined(view[`${x}`])) {
@@ -27803,8 +27864,8 @@ class Print {
27803
27864
  default:
27804
27865
  if (scheduleTemplates.indexOf(key) > -1) {
27805
27866
  printModel[`${key}`] = isNullOrUndefined(printOptions[`${key}`]) ?
27806
- (typeof (this.parent[`${key}`]) === 'function' ? null : this.parent[`${key}`]) :
27807
- (typeof (printOptions[`${key}`]) === 'function' ? null : printOptions[`${key}`]);
27867
+ (!this.parent.isAngular && typeof (this.parent[`${key}`]) === 'function' ? null : this.parent[`${key}`]) :
27868
+ (!this.parent.isAngular && typeof (printOptions[`${key}`]) === 'function' ? null : printOptions[`${key}`]);
27808
27869
  break;
27809
27870
  }
27810
27871
  if (scheduleEvents.indexOf(key) > -1) {