@syncfusion/ej2-schedule 20.1.61 → 20.2.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/ej2-schedule.umd.min.js +2 -2
- package/dist/ej2-schedule.umd.min.js.map +1 -1
- package/dist/es6/ej2-schedule.es2015.js +165 -40
- package/dist/es6/ej2-schedule.es2015.js.map +1 -1
- package/dist/es6/ej2-schedule.es5.js +170 -40
- package/dist/es6/ej2-schedule.es5.js.map +1 -1
- package/dist/global/ej2-schedule.min.js +2 -2
- package/dist/global/ej2-schedule.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/helpers/e2e/index.js +9 -7
- package/helpers/e2e/recurrence-editor.js +41 -25
- package/helpers/e2e/schedule.js +44 -28
- package/package.json +15 -15
- package/src/recurrence-editor/recurrence-editor.js +4 -1
- package/src/schedule/actions/crud.js +9 -7
- package/src/schedule/base/interface.d.ts +6 -0
- package/src/schedule/base/schedule.d.ts +8 -0
- package/src/schedule/base/schedule.js +66 -0
- package/src/schedule/event-renderer/agenda-base.js +6 -6
- package/src/schedule/event-renderer/event-base.js +4 -4
- package/src/schedule/event-renderer/month.js +2 -3
- package/src/schedule/event-renderer/vertical-view.js +3 -3
- package/src/schedule/event-renderer/year.js +2 -2
- package/src/schedule/exports/excel-export.js +8 -4
- package/src/schedule/popups/event-window.js +2 -1
- package/src/schedule/popups/quick-popups.js +3 -3
- package/src/schedule/renderer/agenda.js +2 -2
- package/src/schedule/renderer/timeline-month.d.ts +1 -0
- package/src/schedule/renderer/timeline-month.js +9 -0
- package/src/schedule/renderer/timeline-view.d.ts +1 -0
- package/src/schedule/renderer/timeline-view.js +14 -0
- package/src/schedule/renderer/timeline-year.js +3 -0
- package/src/schedule/renderer/vertical-view.d.ts +1 -0
- package/src/schedule/renderer/vertical-view.js +21 -4
- package/src/schedule/renderer/view-base.d.ts +1 -0
- package/src/schedule/renderer/view-base.js +11 -0
- package/src/schedule/renderer/year.js +2 -1
- package/styles/bootstrap-dark.css +5 -1
- package/styles/bootstrap.css +5 -1
- package/styles/bootstrap4.css +5 -1
- package/styles/bootstrap5-dark.css +5 -1
- package/styles/bootstrap5.css +5 -1
- package/styles/fabric-dark.css +5 -1
- package/styles/fabric.css +5 -1
- package/styles/fluent-dark.css +7 -3
- package/styles/fluent.css +7 -3
- package/styles/highcontrast-light.css +5 -1
- package/styles/highcontrast.css +5 -1
- package/styles/material-dark.css +5 -1
- package/styles/material.css +5 -1
- package/styles/recurrence-editor/_fusionnew-definition.scss +15 -0
- package/styles/recurrence-editor/_material3-definition.scss +15 -0
- package/styles/schedule/_fluent-definition.scss +1 -1
- package/styles/schedule/_fusionnew-definition.scss +224 -0
- package/styles/schedule/_layout.scss +6 -1
- package/styles/schedule/_material3-definition.scss +224 -0
- package/styles/schedule/bootstrap-dark.css +5 -1
- package/styles/schedule/bootstrap.css +5 -1
- package/styles/schedule/bootstrap4.css +5 -1
- package/styles/schedule/bootstrap5-dark.css +5 -1
- package/styles/schedule/bootstrap5.css +5 -1
- package/styles/schedule/fabric-dark.css +5 -1
- package/styles/schedule/fabric.css +5 -1
- package/styles/schedule/fluent-dark.css +7 -3
- package/styles/schedule/fluent.css +7 -3
- package/styles/schedule/highcontrast-light.css +5 -1
- package/styles/schedule/highcontrast.css +5 -1
- package/styles/schedule/icons/_fusionnew.scss +232 -0
- package/styles/schedule/icons/_material3.scss +232 -0
- package/styles/schedule/material-dark.css +5 -1
- package/styles/schedule/material.css +5 -1
- package/styles/schedule/tailwind-dark.css +5 -1
- package/styles/schedule/tailwind.css +5 -1
- package/styles/tailwind-dark.css +5 -1
- package/styles/tailwind.css +5 -1
|
@@ -5600,7 +5600,7 @@ class EventBase {
|
|
|
5600
5600
|
removeSelectedAppointmentClass() {
|
|
5601
5601
|
const selectedAppointments = this.getSelectedAppointments();
|
|
5602
5602
|
for (const appointment of selectedAppointments) {
|
|
5603
|
-
appointment.setAttribute('aria-
|
|
5603
|
+
appointment.setAttribute('aria-pressed', 'false');
|
|
5604
5604
|
}
|
|
5605
5605
|
removeClass(selectedAppointments, APPOINTMENT_BORDER);
|
|
5606
5606
|
if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {
|
|
@@ -5609,7 +5609,7 @@ class EventBase {
|
|
|
5609
5609
|
}
|
|
5610
5610
|
addSelectedAppointments(cells) {
|
|
5611
5611
|
for (const cell of cells) {
|
|
5612
|
-
cell.setAttribute('aria-
|
|
5612
|
+
cell.setAttribute('aria-pressed', 'true');
|
|
5613
5613
|
}
|
|
5614
5614
|
if (this.parent.currentView !== 'MonthAgenda') {
|
|
5615
5615
|
this.parent.removeSelectedClass();
|
|
@@ -5946,7 +5946,7 @@ class EventBase {
|
|
|
5946
5946
|
const exception = event[this.parent.eventFields.recurrenceException];
|
|
5947
5947
|
let maxCount;
|
|
5948
5948
|
if (this.parent.currentView !== 'Agenda' && isMaxCount) {
|
|
5949
|
-
maxCount = getDateCount(
|
|
5949
|
+
maxCount = getDateCount(viewDate, this.parent.activeView.endDate()) + 1;
|
|
5950
5950
|
}
|
|
5951
5951
|
const newTimezone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();
|
|
5952
5952
|
const firstDay = this.parent.activeViewOptions.firstDayOfWeek;
|
|
@@ -6123,7 +6123,7 @@ class EventBase {
|
|
|
6123
6123
|
className: BLOCK_APPOINTMENT_CLASS,
|
|
6124
6124
|
attrs: {
|
|
6125
6125
|
'data-id': 'Appointment_' + record[this.parent.eventFields.id],
|
|
6126
|
-
'aria-
|
|
6126
|
+
'aria-disabled': 'true', 'aria-pressed': 'false'
|
|
6127
6127
|
}
|
|
6128
6128
|
});
|
|
6129
6129
|
let templateElement;
|
|
@@ -6547,8 +6547,8 @@ class VerticalEvent extends EventBase {
|
|
|
6547
6547
|
'data-guid': record.Guid,
|
|
6548
6548
|
'role': 'button',
|
|
6549
6549
|
'tabindex': '0',
|
|
6550
|
-
'aria-
|
|
6551
|
-
'aria-
|
|
6550
|
+
'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),
|
|
6551
|
+
'aria-pressed': 'false',
|
|
6552
6552
|
'aria-grabbed': 'true',
|
|
6553
6553
|
'aria-label': this.parent.getAnnouncementString(record)
|
|
6554
6554
|
}
|
|
@@ -6643,7 +6643,7 @@ class VerticalEvent extends EventBase {
|
|
|
6643
6643
|
});
|
|
6644
6644
|
const moreIndicatorElement = createElement('div', {
|
|
6645
6645
|
className: MORE_INDICATOR_CLASS,
|
|
6646
|
-
attrs: { 'tabindex': '0', '
|
|
6646
|
+
attrs: { 'tabindex': '0', 'data-index': index.toString(), 'data-count': '1' },
|
|
6647
6647
|
innerHTML: '+1 ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))
|
|
6648
6648
|
});
|
|
6649
6649
|
innerCountWrap.appendChild(moreIndicatorElement);
|
|
@@ -7436,7 +7436,7 @@ class MonthEvent extends EventBase {
|
|
|
7436
7436
|
const attrs = {
|
|
7437
7437
|
'data-id': 'Appointment_' + record[this.fields.id],
|
|
7438
7438
|
'role': 'button', 'tabindex': '0',
|
|
7439
|
-
'aria-
|
|
7439
|
+
'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record), 'aria-pressed': 'false', 'aria-grabbed': 'true',
|
|
7440
7440
|
'aria-label': this.parent.getAnnouncementString(newRecord, eventSubject)
|
|
7441
7441
|
};
|
|
7442
7442
|
if (!isCloneElement) {
|
|
@@ -7726,8 +7726,7 @@ class MonthEvent extends EventBase {
|
|
|
7726
7726
|
'tabindex': '0',
|
|
7727
7727
|
'data-count': count.toString(),
|
|
7728
7728
|
'data-start-date': startDate.getTime().toString(),
|
|
7729
|
-
'data-end-date': endDate.getTime().toString()
|
|
7730
|
-
'role': 'list'
|
|
7729
|
+
'data-end-date': endDate.getTime().toString()
|
|
7731
7730
|
}
|
|
7732
7731
|
});
|
|
7733
7732
|
return moreIndicatorElement;
|
|
@@ -8893,8 +8892,8 @@ class QuickPopups {
|
|
|
8893
8892
|
attrs: {
|
|
8894
8893
|
'data-id': '' + eventData[fields.id],
|
|
8895
8894
|
'data-guid': eventData.Guid, 'role': 'button', 'tabindex': '0',
|
|
8896
|
-
'aria-
|
|
8897
|
-
'aria-
|
|
8895
|
+
'aria-disabled': this.parent.eventBase.getReadonlyAttribute(eventData),
|
|
8896
|
+
'aria-pressed': 'false', 'aria-grabbed': 'true', 'aria-label': this.parent.getAnnouncementString(eventData)
|
|
8898
8897
|
}
|
|
8899
8898
|
});
|
|
8900
8899
|
let templateElement;
|
|
@@ -8985,7 +8984,7 @@ class QuickPopups {
|
|
|
8985
8984
|
this.quickPopupHide();
|
|
8986
8985
|
return;
|
|
8987
8986
|
}
|
|
8988
|
-
const targetEle = args.event.target;
|
|
8987
|
+
const targetEle = !isNullOrUndefined(args.event) ? args.event.target : args.element;
|
|
8989
8988
|
if (this.parent.isAdaptive) {
|
|
8990
8989
|
this.quickPopupHide();
|
|
8991
8990
|
let newEventClone = this.parent.element.querySelector('.' + NEW_EVENT_CLASS);
|
|
@@ -10372,7 +10371,7 @@ let RecurrenceEditor = class RecurrenceEditor extends Component {
|
|
|
10372
10371
|
value: VALUEFIELD
|
|
10373
10372
|
},
|
|
10374
10373
|
placeholder: this.localeObj.getConstant(REPEAT),
|
|
10375
|
-
htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT) },
|
|
10374
|
+
htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT), role: 'option' },
|
|
10376
10375
|
change: (args) => {
|
|
10377
10376
|
self.setProperties({ selectedType: this.frequencies.indexOf(args.value) }, false);
|
|
10378
10377
|
self.element.querySelector('.' + REPEATCONTENT).innerHTML =
|
|
@@ -10394,6 +10393,7 @@ let RecurrenceEditor = class RecurrenceEditor extends Component {
|
|
|
10394
10393
|
text: TEXTFIELD,
|
|
10395
10394
|
value: VALUEFIELD
|
|
10396
10395
|
},
|
|
10396
|
+
htmlAttributes: { role: 'option' },
|
|
10397
10397
|
change: (args) => {
|
|
10398
10398
|
self.freshOnEndForm();
|
|
10399
10399
|
self.updateEndOnForm(args.value);
|
|
@@ -10411,6 +10411,7 @@ let RecurrenceEditor = class RecurrenceEditor extends Component {
|
|
|
10411
10411
|
text: TEXTFIELD,
|
|
10412
10412
|
value: VALUEFIELD
|
|
10413
10413
|
},
|
|
10414
|
+
htmlAttributes: { role: 'option' },
|
|
10414
10415
|
index: 1,
|
|
10415
10416
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
10416
10417
|
change: (args) => {
|
|
@@ -10430,6 +10431,7 @@ let RecurrenceEditor = class RecurrenceEditor extends Component {
|
|
|
10430
10431
|
text: TEXTFIELD,
|
|
10431
10432
|
value: VALUEFIELD
|
|
10432
10433
|
},
|
|
10434
|
+
htmlAttributes: { role: 'option' },
|
|
10433
10435
|
enableRtl: this.enableRtl,
|
|
10434
10436
|
index: 7,
|
|
10435
10437
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -11528,6 +11530,7 @@ class EventWindow {
|
|
|
11528
11530
|
resourceData.colorField + '}"></div><div class="e-resource-text">${' + resourceData.textField + '}</div></div>';
|
|
11529
11531
|
if (resourceData.allowMultiple) {
|
|
11530
11532
|
const listObj = new MultiSelect({
|
|
11533
|
+
enableRtl: this.parent.enableRtl,
|
|
11531
11534
|
cssClass: this.parent.cssClass || '',
|
|
11532
11535
|
dataSource: resourceData.dataSource,
|
|
11533
11536
|
change: this.onMultiselectResourceChange.bind(this),
|
|
@@ -11585,7 +11588,7 @@ class EventWindow {
|
|
|
11585
11588
|
query = (e.text !== '') ? query.where('Text', 'contains', e.text, true) : query;
|
|
11586
11589
|
e.updateData(this.parent.timezoneDataSource, query);
|
|
11587
11590
|
},
|
|
11588
|
-
htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName },
|
|
11591
|
+
htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName, role: 'option' },
|
|
11589
11592
|
floatLabelType: 'Always',
|
|
11590
11593
|
placeholder: this.getFieldLabel(value),
|
|
11591
11594
|
popupHeight: '230px'
|
|
@@ -13927,13 +13930,15 @@ class Crud {
|
|
|
13927
13930
|
else {
|
|
13928
13931
|
endDate = new Date(+followEvent[fields.startTime]);
|
|
13929
13932
|
const newRecurrenceRule = followEvent[fields.recurrenceRule];
|
|
13930
|
-
|
|
13931
|
-
|
|
13932
|
-
|
|
13933
|
-
|
|
13934
|
-
|
|
13935
|
-
|
|
13936
|
-
|
|
13933
|
+
if (newRecurrenceRule) {
|
|
13934
|
+
const startDate = parentEvent[fields.startTime];
|
|
13935
|
+
const ruleException = (this.parent.currentAction === 'DeleteFollowingEvents') ? followEvent[fields.recurrenceException] : null;
|
|
13936
|
+
const dateCollection = generate(startDate, newRecurrenceRule, ruleException, this.parent.activeViewOptions.firstDayOfWeek);
|
|
13937
|
+
const untilDate = new Date(dateCollection.slice(-1)[0]);
|
|
13938
|
+
untilDate.setHours(endDate.getHours(), endDate.getMinutes(), endDate.getSeconds());
|
|
13939
|
+
endDate.setHours(startDate.getHours(), startDate.getMinutes(), startDate.getSeconds());
|
|
13940
|
+
followEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(newRecurrenceRule, new Date(+untilDate), false);
|
|
13941
|
+
}
|
|
13937
13942
|
}
|
|
13938
13943
|
parentEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(recurrenceRule, addDays(new Date(endDate.getTime()), -1), true);
|
|
13939
13944
|
}
|
|
@@ -17628,6 +17633,67 @@ let Schedule = class Schedule extends Component {
|
|
|
17628
17633
|
this.eventWindow.dialogClose();
|
|
17629
17634
|
}
|
|
17630
17635
|
}
|
|
17636
|
+
/**
|
|
17637
|
+
* To manually open the quick info popup based on cell or event details.
|
|
17638
|
+
*
|
|
17639
|
+
* @param {object} data Defines the cell or event data. If the data contains valid ID, it will open event quick info popup,
|
|
17640
|
+
* otherwise cell quick info popup displayed.
|
|
17641
|
+
* @returns {void}
|
|
17642
|
+
*/
|
|
17643
|
+
openQuickInfoPopup(data) {
|
|
17644
|
+
if (this.currentView === 'Year' || isNullOrUndefined(data)) {
|
|
17645
|
+
return;
|
|
17646
|
+
}
|
|
17647
|
+
if (isNullOrUndefined(data[this.eventFields.id])) {
|
|
17648
|
+
if (this.currentView === 'Agenda' || this.currentView === 'MonthAgenda' || isNullOrUndefined(this.activeView)) {
|
|
17649
|
+
return;
|
|
17650
|
+
}
|
|
17651
|
+
const cellData = {
|
|
17652
|
+
startTime: this.activeCellsData.startTime = this.getDateTime(data[this.eventFields.startTime]),
|
|
17653
|
+
endTime: this.activeCellsData.endTime = this.getDateTime(data[this.eventFields.endTime]),
|
|
17654
|
+
isAllDay: this.activeCellsData.isAllDay =
|
|
17655
|
+
!isNullOrUndefined(data[this.eventFields.isAllDay]) ? data[this.eventFields.isAllDay] : false
|
|
17656
|
+
};
|
|
17657
|
+
const startTime = this.activeView.getAdjustedDate(new Date(cellData.startTime));
|
|
17658
|
+
if (startTime) {
|
|
17659
|
+
let query = '.' + WORK_CELLS_CLASS + '[data-date="' + startTime.getTime() + '"]';
|
|
17660
|
+
if (this.activeViewOptions.group.resources.length > 0 && !this.uiStateValues.isGroupAdaptive
|
|
17661
|
+
&& this.resourceBase && this.eventBase) {
|
|
17662
|
+
cellData.groupIndex = this.eventBase.getGroupIndexFromEvent(data);
|
|
17663
|
+
query = '.' + WORK_CELLS_CLASS + '[data-date="' + startTime.getTime() + '"][data-group-index="' + cellData.groupIndex + '"]';
|
|
17664
|
+
}
|
|
17665
|
+
const workCell = this.element.querySelector(query);
|
|
17666
|
+
if (workCell) {
|
|
17667
|
+
workCell.focus();
|
|
17668
|
+
cellData.element = workCell;
|
|
17669
|
+
this.notify(cellClick, cellData);
|
|
17670
|
+
}
|
|
17671
|
+
}
|
|
17672
|
+
}
|
|
17673
|
+
else {
|
|
17674
|
+
const app = this.getCurrentViewEvents().filter((item) => data[this.eventFields.id] === item[this.eventFields.id]);
|
|
17675
|
+
if (app.length <= 0) {
|
|
17676
|
+
return;
|
|
17677
|
+
}
|
|
17678
|
+
let selectEvent = app[0];
|
|
17679
|
+
if (data[this.eventFields.recurrenceRule]) {
|
|
17680
|
+
const occurence = app.filter((x) => x[this.eventFields.startTime].getTime() === data[this.eventFields.startTime].getTime());
|
|
17681
|
+
if (occurence.length > 0) {
|
|
17682
|
+
selectEvent = occurence[0];
|
|
17683
|
+
}
|
|
17684
|
+
}
|
|
17685
|
+
const element = this.element.querySelector('div[data-guid="' + selectEvent.Guid + '"]');
|
|
17686
|
+
if (element) {
|
|
17687
|
+
this.eventBase.removeSelectedAppointmentClass();
|
|
17688
|
+
this.eventBase.addSelectedAppointments([element]);
|
|
17689
|
+
this.activeEventData = { event: selectEvent, element: element };
|
|
17690
|
+
if (this.currentView === 'Agenda' || this.currentView === 'MonthAgenda') {
|
|
17691
|
+
addClass([this.activeEventData.element], AGENDA_SELECTED_CELL);
|
|
17692
|
+
}
|
|
17693
|
+
this.notify(eventClick, this.activeEventData);
|
|
17694
|
+
}
|
|
17695
|
+
}
|
|
17696
|
+
}
|
|
17631
17697
|
/**
|
|
17632
17698
|
* To manually close the quick info popup
|
|
17633
17699
|
*
|
|
@@ -19061,7 +19127,7 @@ class YearEvent extends TimelineEvent {
|
|
|
19061
19127
|
}
|
|
19062
19128
|
}
|
|
19063
19129
|
timelineYearViewEvents() {
|
|
19064
|
-
const workCell = this.parent.element.querySelector('.' + WORK_CELLS_CLASS);
|
|
19130
|
+
const workCell = this.parent.element.querySelector('.' + WORK_CELLS_CLASS + ':not(.' + OTHERMONTH_CLASS + ')');
|
|
19065
19131
|
this.cellWidth = workCell.offsetWidth;
|
|
19066
19132
|
this.cellHeader = getOuterHeight(workCell.querySelector('.' + DATE_HEADER_CLASS));
|
|
19067
19133
|
const eventTable = this.parent.element.querySelector('.' + EVENT_TABLE_CLASS);
|
|
@@ -19337,7 +19403,7 @@ class YearEvent extends TimelineEvent {
|
|
|
19337
19403
|
'data-id': 'Appointment_' + record[this.fields.id],
|
|
19338
19404
|
'data-guid': record.Guid,
|
|
19339
19405
|
'role': 'button', 'tabindex': '0',
|
|
19340
|
-
'aria-
|
|
19406
|
+
'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record), 'aria-pressed': 'false', 'aria-grabbed': 'true',
|
|
19341
19407
|
'aria-label': this.parent.getAnnouncementString(record)
|
|
19342
19408
|
}
|
|
19343
19409
|
});
|
|
@@ -21279,6 +21345,17 @@ class ViewBase {
|
|
|
21279
21345
|
}
|
|
21280
21346
|
return endDate;
|
|
21281
21347
|
}
|
|
21348
|
+
getAdjustedDate(startTime) {
|
|
21349
|
+
if (!this.parent.activeViewOptions.timeScale.enable || this.parent.currentView === 'Month' ||
|
|
21350
|
+
(this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.group.resources.length === 0)) {
|
|
21351
|
+
return new Date(startTime.setHours(0, 0, 0, 0));
|
|
21352
|
+
}
|
|
21353
|
+
else if (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.group.resources.length > 0) {
|
|
21354
|
+
startTime.setHours(0, 0, 0, 0);
|
|
21355
|
+
return new Date(startTime.setDate(1));
|
|
21356
|
+
}
|
|
21357
|
+
return null;
|
|
21358
|
+
}
|
|
21282
21359
|
destroy() {
|
|
21283
21360
|
if (this.element && this.element.parentNode) {
|
|
21284
21361
|
remove(this.element);
|
|
@@ -21774,12 +21851,11 @@ class VerticalView extends ViewBase {
|
|
|
21774
21851
|
const wrap = createElement('div', { className: DATE_HEADER_WRAP_CLASS });
|
|
21775
21852
|
container.appendChild(wrap);
|
|
21776
21853
|
const tbl = this.createTableLayout();
|
|
21777
|
-
const trEle = createElement('tr');
|
|
21854
|
+
const trEle = createElement('tr', { className: HEADER_ROW_CLASS });
|
|
21778
21855
|
const rowCount = this.colLevels.length;
|
|
21779
21856
|
const lastLevel = this.colLevels[rowCount - 1];
|
|
21780
21857
|
for (let i = 0; i < rowCount; i++) {
|
|
21781
21858
|
const ntr = trEle.cloneNode();
|
|
21782
|
-
addClass([ntr], HEADER_ROW_CLASS);
|
|
21783
21859
|
const level = this.colLevels[i];
|
|
21784
21860
|
for (let j = 0; j < level.length; j++) {
|
|
21785
21861
|
ntr.appendChild(this.createTd(level[j]));
|
|
@@ -21792,13 +21868,13 @@ class VerticalView extends ViewBase {
|
|
|
21792
21868
|
return container;
|
|
21793
21869
|
}
|
|
21794
21870
|
createAllDayRow(table, tdData) {
|
|
21795
|
-
const ntr = createElement('tr');
|
|
21796
|
-
addClass([ntr], ALLDAY_ROW_CLASS);
|
|
21871
|
+
const ntr = createElement('tr', { className: ALLDAY_ROW_CLASS });
|
|
21797
21872
|
for (let j = 0; j < tdData.length; j++) {
|
|
21798
21873
|
const td = extend({}, tdData[j]);
|
|
21799
21874
|
td.className = [ALLDAY_CELLS_CLASS];
|
|
21800
21875
|
td.type = 'alldayCells';
|
|
21801
21876
|
const ntd = this.createTd(td);
|
|
21877
|
+
ntd.setAttribute('role', 'gridcell');
|
|
21802
21878
|
ntd.setAttribute('data-date', td.date.getTime().toString());
|
|
21803
21879
|
if (!isNullOrUndefined(td.groupIndex)) {
|
|
21804
21880
|
ntd.setAttribute('data-group-index', '' + td.groupIndex);
|
|
@@ -21831,6 +21907,7 @@ class VerticalView extends ViewBase {
|
|
|
21831
21907
|
}
|
|
21832
21908
|
if (td.type === 'dateHeader' && td.className.indexOf(HEADER_CELLS_CLASS) >= 0) {
|
|
21833
21909
|
tdEle.setAttribute('data-date', td.date.getTime().toString());
|
|
21910
|
+
tdEle.setAttribute('role', 'gridcell');
|
|
21834
21911
|
if (!isNullOrUndefined(td.groupIndex)) {
|
|
21835
21912
|
tdEle.setAttribute('data-group-index', '' + td.groupIndex);
|
|
21836
21913
|
}
|
|
@@ -22029,6 +22106,23 @@ class VerticalView extends ViewBase {
|
|
|
22029
22106
|
}
|
|
22030
22107
|
return rows;
|
|
22031
22108
|
}
|
|
22109
|
+
getAdjustedDate(startTime) {
|
|
22110
|
+
if (!this.parent.activeViewOptions.timeScale.enable) {
|
|
22111
|
+
return new Date(startTime.setHours(0, 0, 0, 0));
|
|
22112
|
+
}
|
|
22113
|
+
else {
|
|
22114
|
+
const timeSlots = this.getTimeSlotRows();
|
|
22115
|
+
const startDate = new Date(new Date(timeSlots[0].date.getTime()).
|
|
22116
|
+
setHours(startTime.getHours(), startTime.getMinutes(), startTime.getMilliseconds()));
|
|
22117
|
+
for (let i = 0; i < timeSlots.length; i++) {
|
|
22118
|
+
if (timeSlots[i].date.getTime() > startDate.getTime()) {
|
|
22119
|
+
startTime.setHours(timeSlots[i - 1].date.getHours(), timeSlots[i - 1].date.getMinutes(), timeSlots[i - 1].date.getMilliseconds());
|
|
22120
|
+
return new Date(startTime);
|
|
22121
|
+
}
|
|
22122
|
+
}
|
|
22123
|
+
}
|
|
22124
|
+
return null;
|
|
22125
|
+
}
|
|
22032
22126
|
destroy() {
|
|
22033
22127
|
if (!this.parent || this.parent && this.parent.isDestroyed) {
|
|
22034
22128
|
return;
|
|
@@ -23079,7 +23173,8 @@ class Year extends ViewBase {
|
|
|
23079
23173
|
return this.parent.currentView === 'Year' ? getWeekFirstDate(this.getStartDate(), this.parent.firstDayOfWeek) : this.getStartDate();
|
|
23080
23174
|
}
|
|
23081
23175
|
endDate() {
|
|
23082
|
-
return this.parent.currentView === 'Year' ? addDays(getWeekLastDate(this.getEndDate(), this.parent.firstDayOfWeek), 1) :
|
|
23176
|
+
return this.parent.currentView === 'Year' ? addDays(getWeekLastDate(this.getEndDate(), this.parent.firstDayOfWeek), 1) :
|
|
23177
|
+
addDays(this.getEndDate(), 1);
|
|
23083
23178
|
}
|
|
23084
23179
|
getEndDateFromStartDate(start) {
|
|
23085
23180
|
let date = new Date(start.getTime());
|
|
@@ -23189,8 +23284,8 @@ class AgendaBase extends ViewBase {
|
|
|
23189
23284
|
'data-guid': listData[li].Guid,
|
|
23190
23285
|
'role': 'button',
|
|
23191
23286
|
'tabindex': '0',
|
|
23192
|
-
'aria-
|
|
23193
|
-
'aria-
|
|
23287
|
+
'aria-disabled': this.parent.eventBase.getReadonlyAttribute(listData[li]),
|
|
23288
|
+
'aria-pressed': 'false',
|
|
23194
23289
|
'aria-grabbed': 'true',
|
|
23195
23290
|
'aria-label': this.parent.getAnnouncementString(listData[li])
|
|
23196
23291
|
}
|
|
@@ -23455,8 +23550,8 @@ class AgendaBase extends ViewBase {
|
|
|
23455
23550
|
ntd.appendChild(this.createDateHeaderElement(tempData.date));
|
|
23456
23551
|
addClass([ntd], [AGENDA_CELLS_CLASS, AGENDA_DATE_CLASS, DATE_BORDER_CLASS]);
|
|
23457
23552
|
const daysCount = getDaysCount(this.parent.selectedDate.getTime(), tempData.date.getTime());
|
|
23458
|
-
ntr.setAttribute('
|
|
23459
|
-
if (this.parent.element.querySelector(`.e-agenda-view tr[
|
|
23553
|
+
ntr.setAttribute('data-row-index', daysCount.toString());
|
|
23554
|
+
if (this.parent.element.querySelector(`.e-agenda-view tr[data-row-index="${daysCount}"]`)) {
|
|
23460
23555
|
break;
|
|
23461
23556
|
}
|
|
23462
23557
|
ntr.insertBefore(ntd, ntr.childNodes[0]);
|
|
@@ -23492,13 +23587,13 @@ class AgendaBase extends ViewBase {
|
|
|
23492
23587
|
}
|
|
23493
23588
|
createTableRowElement(date, type) {
|
|
23494
23589
|
const daysCount = getDaysCount(this.parent.selectedDate.getTime(), date.getTime());
|
|
23495
|
-
const tr = createElement('tr', { attrs: { 'role': 'row', '
|
|
23590
|
+
const tr = createElement('tr', { attrs: { 'role': 'row', 'data-row-index': daysCount.toString() } });
|
|
23496
23591
|
const td = createElement('td', {
|
|
23497
23592
|
attrs: {
|
|
23498
23593
|
'class': (type === 'monthHeader') ? MONTH_HEADER_CLASS : AGENDA_CELLS_CLASS,
|
|
23499
23594
|
'role': 'gridcell',
|
|
23500
23595
|
'aria-selected': 'false',
|
|
23501
|
-
'
|
|
23596
|
+
'data-column-index': daysCount.toString(),
|
|
23502
23597
|
'data-date': date.getTime().toString()
|
|
23503
23598
|
}
|
|
23504
23599
|
});
|
|
@@ -23665,7 +23760,7 @@ class Agenda extends AgendaBase {
|
|
|
23665
23760
|
for (let day = 0; day < this.parent.agendaDaysCount; day++) {
|
|
23666
23761
|
const filterData = this.appointmentFiltering(agendaDate);
|
|
23667
23762
|
const nTr = this.createTableRowElement(agendaDate, 'data');
|
|
23668
|
-
if (this.element.querySelector('tr[
|
|
23763
|
+
if (this.element.querySelector('tr[data-row-index="' + parseInt(nTr.getAttribute('data-row-index'), 10) + '"]')) {
|
|
23669
23764
|
agendaDate = addDays(agendaDate, 1);
|
|
23670
23765
|
continue;
|
|
23671
23766
|
}
|
|
@@ -23729,7 +23824,7 @@ class Agenda extends AgendaBase {
|
|
|
23729
23824
|
prepend([].slice.call(emptyTBody.childNodes), tBody);
|
|
23730
23825
|
this.wireEventActions();
|
|
23731
23826
|
for (let s = 0, element = tBody.children; s < element.length; s++) {
|
|
23732
|
-
if (element[s].getAttribute('
|
|
23827
|
+
if (element[s].getAttribute('data-row-index') === topElement.getAttribute('data-column-index')) {
|
|
23733
23828
|
const scrollToValue = element[s].offsetTop -
|
|
23734
23829
|
this.element.querySelector('.e-agenda-item').offsetHeight;
|
|
23735
23830
|
target.scrollTop = scrollToValue;
|
|
@@ -24429,6 +24524,20 @@ class TimelineViews extends VerticalView {
|
|
|
24429
24524
|
this.timelineAppointment.renderAppointments();
|
|
24430
24525
|
this.parent.notify(eventsLoaded, {});
|
|
24431
24526
|
}
|
|
24527
|
+
getAdjustedDate(date) {
|
|
24528
|
+
if (!this.parent.activeViewOptions.timeScale.enable) {
|
|
24529
|
+
return new Date(date.setHours(0, 0, 0, 0));
|
|
24530
|
+
}
|
|
24531
|
+
else {
|
|
24532
|
+
const timeSlots = this.colLevels[this.colLevels.length - 1];
|
|
24533
|
+
for (let i = 0; i < timeSlots.length; i++) {
|
|
24534
|
+
if (timeSlots[i].date.getTime() > date.getTime()) {
|
|
24535
|
+
return timeSlots[i - 1].date;
|
|
24536
|
+
}
|
|
24537
|
+
}
|
|
24538
|
+
}
|
|
24539
|
+
return null;
|
|
24540
|
+
}
|
|
24432
24541
|
destroy() {
|
|
24433
24542
|
if (!this.parent || this.parent && this.parent.isDestroyed) {
|
|
24434
24543
|
return;
|
|
@@ -24569,6 +24678,15 @@ class TimelineMonth extends Month {
|
|
|
24569
24678
|
this.colLevels = colLevels;
|
|
24570
24679
|
return colLevels;
|
|
24571
24680
|
}
|
|
24681
|
+
getAdjustedDate(startTime) {
|
|
24682
|
+
const timeSlots = this.colLevels[this.colLevels.length - 1];
|
|
24683
|
+
for (let i = 0; i < timeSlots.length; i++) {
|
|
24684
|
+
if (timeSlots[i].date.getTime() > startTime.getTime()) {
|
|
24685
|
+
return timeSlots[i - 1].date;
|
|
24686
|
+
}
|
|
24687
|
+
}
|
|
24688
|
+
return null;
|
|
24689
|
+
}
|
|
24572
24690
|
destroy() {
|
|
24573
24691
|
if (!this.parent || this.parent && this.parent.isDestroyed) {
|
|
24574
24692
|
return;
|
|
@@ -24838,6 +24956,9 @@ class TimelineYear extends Year {
|
|
|
24838
24956
|
else {
|
|
24839
24957
|
addClass([td], OTHERMONTH_CLASS);
|
|
24840
24958
|
}
|
|
24959
|
+
if (td.classList.contains(OTHERMONTH_CLASS)) {
|
|
24960
|
+
continue;
|
|
24961
|
+
}
|
|
24841
24962
|
td.appendChild(dateHeader);
|
|
24842
24963
|
if (isDateAvail) {
|
|
24843
24964
|
td.setAttribute('data-date', date.getTime().toString());
|
|
@@ -25342,6 +25463,10 @@ class ExcelExport {
|
|
|
25342
25463
|
const exportName = excelExportOptions.fileName || 'Schedule';
|
|
25343
25464
|
const exportType = excelExportOptions.exportType || 'xlsx';
|
|
25344
25465
|
const isIncludeOccurrences = excelExportOptions.includeOccurrences || false;
|
|
25466
|
+
let separator;
|
|
25467
|
+
if (!isNullOrUndefined(excelExportOptions.separator) && excelExportOptions.separator !== ',') {
|
|
25468
|
+
separator = excelExportOptions.separator;
|
|
25469
|
+
}
|
|
25345
25470
|
let eventCollection;
|
|
25346
25471
|
if (excelExportOptions.customData) {
|
|
25347
25472
|
eventCollection = !isIncludeOccurrences ? excelExportOptions.customData :
|
|
@@ -25350,9 +25475,9 @@ class ExcelExport {
|
|
|
25350
25475
|
else {
|
|
25351
25476
|
eventCollection = !isIncludeOccurrences ? this.parent.eventsData : this.parent.eventsProcessed;
|
|
25352
25477
|
}
|
|
25353
|
-
this.processWorkbook(exportColumns, exportName, exportType, eventCollection);
|
|
25478
|
+
this.processWorkbook(exportColumns, exportName, exportType, eventCollection, separator);
|
|
25354
25479
|
}
|
|
25355
|
-
processWorkbook(fields, name, type, eventCollection) {
|
|
25480
|
+
processWorkbook(fields, name, type, eventCollection, separator) {
|
|
25356
25481
|
const columns = [];
|
|
25357
25482
|
const rows = [];
|
|
25358
25483
|
const columnHeader = [];
|
|
@@ -25373,7 +25498,7 @@ class ExcelExport {
|
|
|
25373
25498
|
rows.push({ index: i + 2, cells: columnData });
|
|
25374
25499
|
});
|
|
25375
25500
|
const workSheet = [{ columns: columns, rows: rows }];
|
|
25376
|
-
const book = new Workbook({ worksheets: workSheet }, type, this.parent.locale);
|
|
25501
|
+
const book = new Workbook({ worksheets: workSheet }, type, this.parent.locale, undefined, separator);
|
|
25377
25502
|
book.save(name + '.' + type);
|
|
25378
25503
|
}
|
|
25379
25504
|
getExportColumns(exportOptions) {
|