@syncfusion/ej2-schedule 20.4.53 → 21.1.37
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 +18 -0
- package/dist/ej2-schedule.min.js +2 -2
- 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 +339 -144
- package/dist/es6/ej2-schedule.es2015.js.map +1 -1
- package/dist/es6/ej2-schedule.es5.js +374 -165
- 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/package.json +16 -16
- package/src/common/calendar-util.d.ts +7 -0
- package/src/recurrence-editor/recurrence-editor.d.ts +10 -0
- package/src/schedule/actions/action-base.js +5 -0
- package/src/schedule/actions/crud.js +1 -0
- package/src/schedule/actions/data.d.ts +14 -2
- package/src/schedule/actions/data.js +26 -2
- package/src/schedule/actions/keyboard.js +15 -14
- package/src/schedule/base/interface.d.ts +23 -23
- package/src/schedule/base/resource.js +5 -6
- package/src/schedule/base/schedule-model.d.ts +34 -27
- package/src/schedule/base/schedule.d.ts +50 -27
- package/src/schedule/base/schedule.js +44 -8
- package/src/schedule/base/type.d.ts +66 -1
- package/src/schedule/event-renderer/agenda-base.js +6 -2
- package/src/schedule/event-renderer/event-base.d.ts +2 -1
- package/src/schedule/event-renderer/event-base.js +34 -13
- package/src/schedule/event-renderer/month.js +4 -5
- package/src/schedule/event-renderer/vertical-view.d.ts +0 -1
- package/src/schedule/event-renderer/vertical-view.js +6 -30
- package/src/schedule/event-renderer/year.d.ts +1 -0
- package/src/schedule/event-renderer/year.js +135 -54
- package/src/schedule/models/event-settings-model.d.ts +11 -2
- package/src/schedule/models/event-settings.d.ts +10 -2
- package/src/schedule/models/event-settings.js +3 -0
- package/src/schedule/models/fields-model.d.ts +4 -2
- package/src/schedule/models/fields.d.ts +6 -4
- package/src/schedule/models/fields.js +2 -2
- package/src/schedule/models/header-rows-model.d.ts +5 -5
- package/src/schedule/models/header-rows.d.ts +5 -5
- package/src/schedule/models/quick-info-templates-model.d.ts +3 -3
- package/src/schedule/models/quick-info-templates.d.ts +3 -3
- package/src/schedule/models/views-model.d.ts +16 -15
- package/src/schedule/models/views.d.ts +16 -15
- package/src/schedule/popups/event-tooltip.js +2 -1
- package/src/schedule/popups/event-window.js +26 -5
- package/src/schedule/popups/quick-popups.js +32 -10
- package/src/schedule/renderer/header-renderer.js +1 -0
- package/src/schedule/renderer/month-agenda.d.ts +3 -2
- package/src/schedule/renderer/month-agenda.js +5 -0
- package/src/schedule/renderer/month.d.ts +1 -0
- package/src/schedule/renderer/month.js +5 -3
- package/src/schedule/renderer/timeline-year.js +12 -8
- package/src/schedule/renderer/vertical-view.js +1 -1
- package/src/schedule/renderer/view-base.js +3 -4
- package/src/schedule/renderer/year.js +5 -1
- package/styles/bootstrap-dark.css +99 -89
- package/styles/bootstrap.css +99 -89
- package/styles/bootstrap4.css +99 -89
- package/styles/bootstrap5-dark.css +110 -100
- package/styles/bootstrap5.css +110 -100
- package/styles/fabric-dark.css +98 -88
- package/styles/fabric.css +98 -88
- package/styles/fluent-dark.css +109 -99
- package/styles/fluent.css +109 -99
- package/styles/highcontrast-light.css +98 -88
- package/styles/highcontrast.css +98 -88
- package/styles/material-dark.css +98 -88
- package/styles/material.css +98 -88
- package/styles/recurrence-editor/_bootstrap5-definition.scss +1 -1
- package/styles/recurrence-editor/_fluent-definition.scss +1 -1
- package/styles/recurrence-editor/_tailwind-definition.scss +1 -1
- package/styles/schedule/_bootstrap-dark-definition.scss +8 -1
- package/styles/schedule/_bootstrap-definition.scss +8 -1
- package/styles/schedule/_bootstrap4-definition.scss +7 -0
- package/styles/schedule/_bootstrap5-definition.scss +17 -10
- package/styles/schedule/_fabric-dark-definition.scss +7 -0
- package/styles/schedule/_fabric-definition.scss +7 -0
- package/styles/schedule/_fluent-definition.scss +15 -8
- package/styles/schedule/_fusionnew-definition.scss +7 -0
- package/styles/schedule/_highcontrast-definition.scss +7 -0
- package/styles/schedule/_highcontrast-light-definition.scss +7 -0
- package/styles/schedule/_layout.scss +63 -48
- package/styles/schedule/_material-dark-definition.scss +7 -0
- package/styles/schedule/_material-definition.scss +7 -0
- package/styles/schedule/_tailwind-definition.scss +17 -10
- package/styles/schedule/_theme.scss +40 -41
- package/styles/schedule/bootstrap-dark.css +99 -89
- package/styles/schedule/bootstrap.css +99 -89
- package/styles/schedule/bootstrap4.css +99 -89
- package/styles/schedule/bootstrap5-dark.css +110 -100
- package/styles/schedule/bootstrap5.css +110 -100
- package/styles/schedule/fabric-dark.css +98 -88
- package/styles/schedule/fabric.css +98 -88
- package/styles/schedule/fluent-dark.css +109 -99
- package/styles/schedule/fluent.css +109 -99
- package/styles/schedule/highcontrast-light.css +98 -88
- package/styles/schedule/highcontrast.css +98 -88
- package/styles/schedule/material-dark.css +98 -88
- package/styles/schedule/material.css +98 -88
- package/styles/schedule/tailwind-dark.css +106 -96
- package/styles/schedule/tailwind.css +106 -96
- package/styles/tailwind-dark.css +106 -96
- package/styles/tailwind.css +106 -96
- package/styles/recurrence-editor/_material3-definition.scss +0 -13
- package/styles/schedule/_material3-definition.scss +0 -283
package/dist/global/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* filename: index.d.ts
|
|
3
|
-
* version :
|
|
3
|
+
* version : 21.1.37
|
|
4
4
|
* Copyright Syncfusion Inc. 2001 - 2020. All rights reserved.
|
|
5
5
|
* Use of this code is subject to the terms of our license.
|
|
6
6
|
* A copy of the current license can be obtained at any time by e-mailing
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_from": "@syncfusion/ej2-schedule@*",
|
|
3
|
-
"_id": "@syncfusion/ej2-schedule@
|
|
3
|
+
"_id": "@syncfusion/ej2-schedule@21.1.35",
|
|
4
4
|
"_inBundle": false,
|
|
5
|
-
"_integrity": "sha512-
|
|
5
|
+
"_integrity": "sha512-cu0+Yb4W4QdCR1k/uA6LvJ08ZEVMa7dywB0Xi5RTFvLNZ/1p7r07a6adKCitcKvBxFfdajEa11c8OM0z3/KGhQ==",
|
|
6
6
|
"_location": "/@syncfusion/ej2-schedule",
|
|
7
7
|
"_phantomChildren": {},
|
|
8
8
|
"_requested": {
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"/@syncfusion/ej2-react-schedule",
|
|
24
24
|
"/@syncfusion/ej2-vue-schedule"
|
|
25
25
|
],
|
|
26
|
-
"_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-
|
|
27
|
-
"_shasum": "
|
|
26
|
+
"_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-21.1.35.tgz",
|
|
27
|
+
"_shasum": "a23988578cbeeca76962a0b80a03e90bbd878c77",
|
|
28
28
|
"_spec": "@syncfusion/ej2-schedule@*",
|
|
29
|
-
"_where": "/jenkins/workspace/
|
|
29
|
+
"_where": "/jenkins/workspace/elease-automation_release_21.1.1/packages/included",
|
|
30
30
|
"author": {
|
|
31
31
|
"name": "Syncfusion Inc."
|
|
32
32
|
},
|
|
@@ -35,16 +35,16 @@
|
|
|
35
35
|
},
|
|
36
36
|
"bundleDependencies": false,
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@syncfusion/ej2-base": "~
|
|
39
|
-
"@syncfusion/ej2-buttons": "~
|
|
40
|
-
"@syncfusion/ej2-calendars": "~
|
|
41
|
-
"@syncfusion/ej2-data": "~
|
|
42
|
-
"@syncfusion/ej2-dropdowns": "~
|
|
43
|
-
"@syncfusion/ej2-excel-export": "~
|
|
44
|
-
"@syncfusion/ej2-inputs": "~
|
|
45
|
-
"@syncfusion/ej2-lists": "~
|
|
46
|
-
"@syncfusion/ej2-navigations": "~
|
|
47
|
-
"@syncfusion/ej2-popups": "~
|
|
38
|
+
"@syncfusion/ej2-base": "~21.1.37",
|
|
39
|
+
"@syncfusion/ej2-buttons": "~21.1.37",
|
|
40
|
+
"@syncfusion/ej2-calendars": "~21.1.37",
|
|
41
|
+
"@syncfusion/ej2-data": "~21.1.37",
|
|
42
|
+
"@syncfusion/ej2-dropdowns": "~21.1.37",
|
|
43
|
+
"@syncfusion/ej2-excel-export": "~21.1.37",
|
|
44
|
+
"@syncfusion/ej2-inputs": "~21.1.37",
|
|
45
|
+
"@syncfusion/ej2-lists": "~21.1.37",
|
|
46
|
+
"@syncfusion/ej2-navigations": "~21.1.37",
|
|
47
|
+
"@syncfusion/ej2-popups": "~21.1.37"
|
|
48
48
|
},
|
|
49
49
|
"deprecated": false,
|
|
50
50
|
"description": "Flexible scheduling library with more built-in features and enhanced customization options similar to outlook and google calendar, allowing the users to plan and manage their appointments with efficient data-binding support.",
|
|
@@ -73,6 +73,6 @@
|
|
|
73
73
|
"url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
|
|
74
74
|
},
|
|
75
75
|
"typings": "index.d.ts",
|
|
76
|
-
"version": "
|
|
76
|
+
"version": "21.1.37",
|
|
77
77
|
"sideEffects": false
|
|
78
78
|
}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Calendar functionalities
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* Defines the calendar type of the scheduler.
|
|
6
|
+
* ```props
|
|
7
|
+
* Islamic :- Denotes the Islamic calendar.
|
|
8
|
+
* Gregorian :- Denotes the Gregorian calendar.
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
4
11
|
export declare type CalendarType = 'Islamic' | 'Gregorian';
|
|
5
12
|
/** @private */
|
|
6
13
|
export interface CalendarUtil {
|
|
@@ -203,4 +203,14 @@ export interface RecurrenceEditorChangeEventArgs {
|
|
|
203
203
|
/** Returns the current recurrence rule. */
|
|
204
204
|
value: string;
|
|
205
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Defines the repeat type of the recurrence editor.
|
|
208
|
+
* ```props
|
|
209
|
+
* none :- Denotes no repetition.
|
|
210
|
+
* daily :- Denotes repetition every day.
|
|
211
|
+
* weekly :- Denotes repetition every week.
|
|
212
|
+
* monthly :- Denotes repetition every month.
|
|
213
|
+
* yearly :- Denotes repetition every year.
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
206
216
|
export declare type RepeatType = 'none' | 'daily' | 'weekly' | 'monthly' | 'yearly';
|
|
@@ -63,6 +63,7 @@ var ActionBase = /** @class */ (function () {
|
|
|
63
63
|
parseInt(this.actionObj.element.getAttribute('data-group-index'), 10) === this.actionObj.groupIndex : true;
|
|
64
64
|
if (+eventObj[this.parent.eventFields.startTime] === +this.actionObj.event[this.parent.eventFields.startTime] &&
|
|
65
65
|
+eventObj[this.parent.eventFields.endTime] === +this.actionObj.event[this.parent.eventFields.endTime] && isSameResource) {
|
|
66
|
+
this.parent.crudModule.crudObj.isCrudAction = false;
|
|
66
67
|
return;
|
|
67
68
|
}
|
|
68
69
|
if (eventObj[this.parent.eventFields.recurrenceRule]) {
|
|
@@ -344,6 +345,10 @@ var ActionBase = /** @class */ (function () {
|
|
|
344
345
|
}
|
|
345
346
|
appWidth = eventObj.isSpanned.count * this.actionObj.cellWidth;
|
|
346
347
|
}
|
|
348
|
+
if (!isResize && this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length !== 0) {
|
|
349
|
+
var eventObj = this.yearEvent.isSpannedEvent(event, event[this.parent.eventFields.startTime]);
|
|
350
|
+
appWidth = eventObj.isSpanned.count * this.actionObj.cellWidth;
|
|
351
|
+
}
|
|
347
352
|
var appointmentElement = this.createAppointmentElement(this.actionObj.groupIndex, event[this.parent.eventFields.subject]);
|
|
348
353
|
appointmentElement.setAttribute('drag', 'true');
|
|
349
354
|
addClass([appointmentElement], cls.CLONE_ELEMENT_CLASS);
|
|
@@ -204,6 +204,7 @@ var Crud = /** @class */ (function () {
|
|
|
204
204
|
if (this.parent.currentAction !== 'EditFollowingEvents' && !this.isBlockEvent(eventData)
|
|
205
205
|
&& this.parent.eventBase.isBlockRange(eventData)) {
|
|
206
206
|
this.parent.quickPopup.openValidationError('blockAlert', eventData);
|
|
207
|
+
this.parent.crudModule.crudObj.isCrudAction = false;
|
|
207
208
|
return;
|
|
208
209
|
}
|
|
209
210
|
var updateEvents = (eventData instanceof Array) ? eventData : [eventData];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Query, DataManager } from '@syncfusion/ej2-data';
|
|
1
|
+
import { Query, DataManager, Predicate } from '@syncfusion/ej2-data';
|
|
2
|
+
import { Schedule } from '../base/schedule';
|
|
2
3
|
/**
|
|
3
4
|
* data module is used to generate query and data source.
|
|
4
5
|
*
|
|
@@ -7,14 +8,16 @@ import { Query, DataManager } from '@syncfusion/ej2-data';
|
|
|
7
8
|
export declare class Data {
|
|
8
9
|
dataManager: DataManager;
|
|
9
10
|
private query;
|
|
11
|
+
private parent;
|
|
10
12
|
/**
|
|
11
13
|
* Constructor for data module
|
|
12
14
|
*
|
|
15
|
+
* @param {Schedule} parent Accepts the schedule element instance
|
|
13
16
|
* @param {Object | DataManager} dataSource Accepts the datasource as JSON objects or DataManager
|
|
14
17
|
* @param {Query} query Accepts the query to process the data
|
|
15
18
|
* @private
|
|
16
19
|
*/
|
|
17
|
-
constructor(dataSource?: Record<string, any>[] | DataManager, query?: Query);
|
|
20
|
+
constructor(parent: Schedule, dataSource?: Record<string, any>[] | DataManager, query?: Query);
|
|
18
21
|
/**
|
|
19
22
|
* The function used to initialize dataManager and query
|
|
20
23
|
*
|
|
@@ -33,6 +36,15 @@ export declare class Data {
|
|
|
33
36
|
* @private
|
|
34
37
|
*/
|
|
35
38
|
generateQuery(startDate?: Date, endDate?: Date): Query;
|
|
39
|
+
/**
|
|
40
|
+
* The function used to generate updated Query from schedule model
|
|
41
|
+
*
|
|
42
|
+
* @param {Date} startDate Accepts the start date
|
|
43
|
+
* @param {Date} endDate Accepts the end date
|
|
44
|
+
* @returns {void}
|
|
45
|
+
* @private
|
|
46
|
+
*/
|
|
47
|
+
getStartEndQuery(startDate?: Date, endDate?: Date): Predicate;
|
|
36
48
|
/**
|
|
37
49
|
* The function used to get dataSource by executing given Query
|
|
38
50
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { Query, DataManager } from '@syncfusion/ej2-data';
|
|
2
|
+
import { Query, DataManager, Predicate } from '@syncfusion/ej2-data';
|
|
3
3
|
/**
|
|
4
4
|
* data module is used to generate query and data source.
|
|
5
5
|
*
|
|
@@ -9,11 +9,13 @@ var Data = /** @class */ (function () {
|
|
|
9
9
|
/**
|
|
10
10
|
* Constructor for data module
|
|
11
11
|
*
|
|
12
|
+
* @param {Schedule} parent Accepts the schedule element instance
|
|
12
13
|
* @param {Object | DataManager} dataSource Accepts the datasource as JSON objects or DataManager
|
|
13
14
|
* @param {Query} query Accepts the query to process the data
|
|
14
15
|
* @private
|
|
15
16
|
*/
|
|
16
|
-
function Data(dataSource, query) {
|
|
17
|
+
function Data(parent, dataSource, query) {
|
|
18
|
+
this.parent = parent;
|
|
17
19
|
this.initDataManager(dataSource, query);
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
@@ -38,6 +40,11 @@ var Data = /** @class */ (function () {
|
|
|
38
40
|
*/
|
|
39
41
|
Data.prototype.generateQuery = function (startDate, endDate) {
|
|
40
42
|
var query = this.query.clone();
|
|
43
|
+
if (this.parent && this.parent.eventSettings.includeFiltersInQuery && startDate && endDate) {
|
|
44
|
+
var dateQuery = this.getStartEndQuery(startDate, endDate);
|
|
45
|
+
var recurrenceQuery = new Predicate(this.parent.eventFields.recurrenceRule, 'notequal', null).and(new Predicate(this.parent.eventFields.recurrenceRule, 'notequal', ''));
|
|
46
|
+
return query.where(dateQuery.or(recurrenceQuery));
|
|
47
|
+
}
|
|
41
48
|
if (startDate) {
|
|
42
49
|
query.addParams('StartDate', startDate.toISOString());
|
|
43
50
|
}
|
|
@@ -46,6 +53,23 @@ var Data = /** @class */ (function () {
|
|
|
46
53
|
}
|
|
47
54
|
return query;
|
|
48
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* The function used to generate updated Query from schedule model
|
|
58
|
+
*
|
|
59
|
+
* @param {Date} startDate Accepts the start date
|
|
60
|
+
* @param {Date} endDate Accepts the end date
|
|
61
|
+
* @returns {void}
|
|
62
|
+
* @private
|
|
63
|
+
*/
|
|
64
|
+
Data.prototype.getStartEndQuery = function (startDate, endDate) {
|
|
65
|
+
var fieldMapping = this.parent.eventFields;
|
|
66
|
+
var dateQuery = new Predicate(fieldMapping.startTime, 'greaterthanorequal', startDate)
|
|
67
|
+
.and(new Predicate(fieldMapping.endTime, 'greaterthanorequal', startDate))
|
|
68
|
+
.and(new Predicate(fieldMapping.startTime, 'lessthan', endDate))
|
|
69
|
+
.or(new Predicate(fieldMapping.startTime, 'lessthanorequal', startDate)
|
|
70
|
+
.and(new Predicate(fieldMapping.endTime, 'greaterthan', startDate)));
|
|
71
|
+
return dateQuery;
|
|
72
|
+
};
|
|
49
73
|
/**
|
|
50
74
|
* The function used to get dataSource by executing given Query
|
|
51
75
|
*
|
|
@@ -446,15 +446,16 @@ var KeyboardInteraction = /** @class */ (function () {
|
|
|
446
446
|
var args = {
|
|
447
447
|
element: target, requestType: cellSelect
|
|
448
448
|
};
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
449
|
+
// activeCellsData is not reset on schedule property changed(group properties)
|
|
450
|
+
// const cellData: Record<string, any> = {};
|
|
451
|
+
// const cellDetails: CellClickEventArgs = this.parent.getCellDetails(target);
|
|
452
|
+
// if (this.parent.eventWindow && cellDetails) {
|
|
453
|
+
// if (this.parent.activeCellsData.element !== cellDetails.element) {
|
|
454
|
+
// this.parent.activeCellsData = cellDetails;
|
|
455
|
+
// }
|
|
456
|
+
// this.parent.eventWindow.convertToEventData(this.parent.activeCellsData as unknown as Record<string, any>, cellData);
|
|
457
|
+
// args.data = cellData;
|
|
458
|
+
// }
|
|
458
459
|
this.parent.trigger(event.select, args, function () {
|
|
459
460
|
_this.initialTarget = target;
|
|
460
461
|
_this.selectedCells = [target];
|
|
@@ -477,7 +478,7 @@ var KeyboardInteraction = /** @class */ (function () {
|
|
|
477
478
|
nextAppEle = isReverse ? appointments[appointments.length - 1] : appointments[0];
|
|
478
479
|
}
|
|
479
480
|
if (nextAppEle) {
|
|
480
|
-
this.parent.eventBase.addSelectedAppointments([nextAppEle]);
|
|
481
|
+
this.parent.eventBase.addSelectedAppointments([nextAppEle], true);
|
|
481
482
|
nextAppEle.focus();
|
|
482
483
|
addClass([nextAppEle], cls.AGENDA_SELECTED_CELL);
|
|
483
484
|
}
|
|
@@ -504,7 +505,7 @@ var KeyboardInteraction = /** @class */ (function () {
|
|
|
504
505
|
if (filteredElements_1.length > 0) {
|
|
505
506
|
var selectedElement = isReverse ? filteredElements_1[filteredElements_1.length - 1] : filteredElements_1[0];
|
|
506
507
|
var focusElements = this.getAppointmentElementsByGuid(selectedElement.getAttribute('data-guid'));
|
|
507
|
-
this.parent.eventBase.addSelectedAppointments(focusElements);
|
|
508
|
+
this.parent.eventBase.addSelectedAppointments(focusElements, true);
|
|
508
509
|
(focusElements[focusElements.length - 1]).focus();
|
|
509
510
|
}
|
|
510
511
|
}
|
|
@@ -963,7 +964,7 @@ var KeyboardInteraction = /** @class */ (function () {
|
|
|
963
964
|
if (appElements.length > 0) {
|
|
964
965
|
this.parent.eventBase.removeSelectedAppointmentClass();
|
|
965
966
|
var focusAppointment = isReverse ? appElements.slice(-1)[0] : appElements[0];
|
|
966
|
-
this.parent.eventBase.addSelectedAppointments([focusAppointment]);
|
|
967
|
+
this.parent.eventBase.addSelectedAppointments([focusAppointment], true);
|
|
967
968
|
focusAppointment.focus();
|
|
968
969
|
e.preventDefault();
|
|
969
970
|
}
|
|
@@ -1065,7 +1066,7 @@ var KeyboardInteraction = /** @class */ (function () {
|
|
|
1065
1066
|
var nextAppEle = eventEle[0];
|
|
1066
1067
|
if (nextAppEle) {
|
|
1067
1068
|
this.parent.eventBase.removeSelectedAppointmentClass();
|
|
1068
|
-
this.parent.eventBase.addSelectedAppointments([nextAppEle]);
|
|
1069
|
+
this.parent.eventBase.addSelectedAppointments([nextAppEle], true);
|
|
1069
1070
|
nextAppEle.focus();
|
|
1070
1071
|
}
|
|
1071
1072
|
}
|
|
@@ -1077,7 +1078,7 @@ var KeyboardInteraction = /** @class */ (function () {
|
|
|
1077
1078
|
if (appElements.length > 0) {
|
|
1078
1079
|
this.parent.eventBase.removeSelectedAppointmentClass();
|
|
1079
1080
|
var focusAppointment = appElements[0];
|
|
1080
|
-
this.parent.eventBase.addSelectedAppointments([focusAppointment]);
|
|
1081
|
+
this.parent.eventBase.addSelectedAppointments([focusAppointment], true);
|
|
1081
1082
|
focusAppointment.focus();
|
|
1082
1083
|
e.preventDefault();
|
|
1083
1084
|
}
|
|
@@ -118,15 +118,15 @@ export interface PopupOpenEventArgs extends BaseEventArgs {
|
|
|
118
118
|
/**
|
|
119
119
|
* Returns the type of the popup which is currently being opted to open.
|
|
120
120
|
* The available type values are as follows,
|
|
121
|
-
* * DeleteAlert
|
|
122
|
-
* * EditEventInfo
|
|
123
|
-
* * Editor
|
|
124
|
-
* * EventContainer
|
|
125
|
-
* * QuickInfo
|
|
126
|
-
* * RecurrenceAlert
|
|
127
|
-
* * RecurrenceValidationAlert
|
|
128
|
-
* * ValidationAlert
|
|
129
|
-
* * ViewEventInfo
|
|
121
|
+
* * `DeleteAlert`: Denotes the popup showing delete confirmation message.
|
|
122
|
+
* * `EditEventInfo`: Denotes the quick popup on the events in responsive mode.
|
|
123
|
+
* * `Editor`: Denotes the detailed editor window.
|
|
124
|
+
* * `EventContainer`: Denotes the more indicator popup.
|
|
125
|
+
* * `QuickInfo`: Denotes the quick popup.
|
|
126
|
+
* * `RecurrenceAlert`: Denotes the popup showing recurrence alerts.
|
|
127
|
+
* * `RecurrenceValidationAlert`: Denotes the popup showing recurrence validation alerts.
|
|
128
|
+
* * `ValidationAlert`: Denotes the popup showing validation alerts.
|
|
129
|
+
* * `ViewEventInfo`: Denotes the quick popup on the cells in responsive mode.
|
|
130
130
|
*/
|
|
131
131
|
type: PopupType;
|
|
132
132
|
/** Returns the cell or event data. */
|
|
@@ -150,15 +150,15 @@ export interface PopupCloseEventArgs extends BaseEventArgs {
|
|
|
150
150
|
/**
|
|
151
151
|
* Returns the type of the popup which is currently being opted to open.
|
|
152
152
|
* The available type values are as follows,
|
|
153
|
-
* * DeleteAlert
|
|
154
|
-
* * EditEventInfo
|
|
155
|
-
* * Editor
|
|
156
|
-
* * EventContainer
|
|
157
|
-
* * QuickInfo
|
|
158
|
-
* * RecurrenceAlert
|
|
159
|
-
* * RecurrenceValidationAlert
|
|
160
|
-
* * ValidationAlert
|
|
161
|
-
* * ViewEventInfo
|
|
153
|
+
* * `DeleteAlert`: Denotes the popup showing delete confirmation message.
|
|
154
|
+
* * `EditEventInfo`: Denotes the quick popup on the events in responsive mode.
|
|
155
|
+
* * `Editor`: Denotes the detailed editor window.
|
|
156
|
+
* * `EventContainer`: Denotes the more indicator popup.
|
|
157
|
+
* * `QuickInfo`: Denotes the quick popup.
|
|
158
|
+
* * `RecurrenceAlert`: Denotes the popup showing recurrence alerts.
|
|
159
|
+
* * `RecurrenceValidationAlert`: Denotes the popup showing recurrence validation alerts.
|
|
160
|
+
* * `ValidationAlert`: Denotes the popup showing validation alerts.
|
|
161
|
+
* * `ViewEventInfo`: Denotes the quick popup on the cells in responsive mode.
|
|
162
162
|
*/
|
|
163
163
|
type: PopupType;
|
|
164
164
|
/** Returns the cell or event data. */
|
|
@@ -313,7 +313,7 @@ export interface ResourceDetails {
|
|
|
313
313
|
export interface TimezoneFields {
|
|
314
314
|
/** Assigns the timezone display text. */
|
|
315
315
|
Text: string;
|
|
316
|
-
/** Assigns the IANA timezone value. */
|
|
316
|
+
/** Assigns the [`IANA`](https://docs.actian.com/ingres/11.0/index.html#page/Ing_Install/IANA_World_Regions_and_Time_Zone_Names.htm) timezone value. */
|
|
317
317
|
Value: string;
|
|
318
318
|
}
|
|
319
319
|
/** An interface that holds options of events once it bound to scheduler. */
|
|
@@ -328,6 +328,10 @@ export interface DataBindingEventArgs extends BaseEventArgs {
|
|
|
328
328
|
count?: number;
|
|
329
329
|
aggregates?: Record<string, any>;
|
|
330
330
|
}
|
|
331
|
+
/** An interface that holds the custom sort comparer function. */
|
|
332
|
+
export interface SortComparerFunction {
|
|
333
|
+
(param: Record<string, any>[]): Record<string, any>[];
|
|
334
|
+
}
|
|
331
335
|
/** @private */
|
|
332
336
|
export interface InlineClickArgs extends BaseEventArgs {
|
|
333
337
|
data?: Record<string, any>;
|
|
@@ -581,7 +585,3 @@ export interface CrudAction {
|
|
|
581
585
|
export interface CallbackFunction extends Function {
|
|
582
586
|
bind<T, A0, A1, A2, A3, A extends any[], R>(this: (this: T, args0: A0, args1: A1, args2: A2, args3: A3, ...args: A[]) => R, thisArgs: T, args0: A0, args1: A1, args2: A2, args3: A3): (...args: A[]) => R;
|
|
583
587
|
}
|
|
584
|
-
/** @private */
|
|
585
|
-
export interface SortComparerFunction {
|
|
586
|
-
(param: Record<string, any>[]): Record<string, any>[];
|
|
587
|
-
}
|
|
@@ -196,7 +196,7 @@ var ResourceBase = /** @class */ (function () {
|
|
|
196
196
|
classList(target, [cls.RESOURCE_COLLAPSE_CLASS], [cls.RESOURCE_EXPAND_CLASS]);
|
|
197
197
|
hide = false;
|
|
198
198
|
}
|
|
199
|
-
var eventElements = [].slice.call(_this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));
|
|
199
|
+
var eventElements = [].slice.call(_this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS + ',.' + cls.MORE_INDICATOR_CLASS));
|
|
200
200
|
for (var _i = 0, eventElements_1 = eventElements; _i < eventElements_1.length; _i++) {
|
|
201
201
|
var element = eventElements_1[_i];
|
|
202
202
|
remove(element);
|
|
@@ -326,6 +326,7 @@ var ResourceBase = /** @class */ (function () {
|
|
|
326
326
|
this.treeViewObj = new TreeView({
|
|
327
327
|
cssClass: this.parent.cssClass,
|
|
328
328
|
enableRtl: this.parent.enableRtl,
|
|
329
|
+
enableHtmlSanitizer: this.parent.enableHtmlSanitizer,
|
|
329
330
|
fields: {
|
|
330
331
|
dataSource: [].slice.call(this.generateTreeData()),
|
|
331
332
|
id: 'resourceId',
|
|
@@ -430,10 +431,8 @@ var ResourceBase = /** @class */ (function () {
|
|
|
430
431
|
var resourceText = resourceLevel.dataSource.filter(function (resData) {
|
|
431
432
|
return resData[resourceLevel.idField] === resource.groupOrder[parseInt(i.toString(), 10)];
|
|
432
433
|
});
|
|
433
|
-
var resourceName = createElement('div', {
|
|
434
|
-
|
|
435
|
-
innerHTML: resourceText[0][resourceLevel.textField]
|
|
436
|
-
});
|
|
434
|
+
var resourceName = createElement('div', { className: cls.RESOURCE_NAME });
|
|
435
|
+
resourceName.innerText = this_2.parent.sanitize(resourceText[0][resourceLevel.textField]);
|
|
437
436
|
headerCollection.push(resourceName);
|
|
438
437
|
var levelIcon = createElement('div', { className: 'e-icons e-icon-next' });
|
|
439
438
|
headerCollection.push(levelIcon);
|
|
@@ -513,7 +512,7 @@ var ResourceBase = /** @class */ (function () {
|
|
|
513
512
|
var promises = [];
|
|
514
513
|
for (var _i = 0, _a = this.parent.resources; _i < _a.length; _i++) {
|
|
515
514
|
var resource = _a[_i];
|
|
516
|
-
var dataModule = new Data(resource.dataSource, resource.query);
|
|
515
|
+
var dataModule = new Data(this.parent, resource.dataSource, resource.query);
|
|
517
516
|
promises.push(dataModule.getData(dataModule.generateQuery()));
|
|
518
517
|
}
|
|
519
518
|
Promise.all(promises).then(function (e) { return _this.dataManagerSuccess(e, isSetModel); })
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, ModuleDeclaration, Property, Event, Animation, Collection, append } from '@syncfusion/ej2-base';import { EventHandler, EmitType, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';import { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, INotifyPropertyChanged, Complex } from '@syncfusion/ej2-base';import { getElement, removeClass, addClass, classList, remove } from '@syncfusion/ej2-base';import { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';import { HeaderRenderer } from '../renderer/header-renderer';import { Scroll } from '../actions/scroll';import { ScheduleTouch } from '../actions/touch';import { KeyboardInteraction } from '../actions/keyboard';import { Data } from '../actions/data';import { View, CurrentAction, ReturnType, WeekRule } from '../base/type';import { EventBase } from '../event-renderer/event-base';import { InlineEdit } from '../event-renderer/inline-edit';import { QuickPopups } from '../popups/quick-popups';import { EventTooltip } from '../popups/event-tooltip';import { EventWindow } from '../popups/event-window';import { Render } from '../renderer/renderer';import { Day } from '../renderer/day';import { Week } from '../renderer/week';import { WorkWeek } from '../renderer/work-week';import { Month } from '../renderer/month';import { Year } from '../renderer/year';import { Agenda } from '../renderer/agenda';import { MonthAgenda } from '../renderer/month-agenda';import { TimelineViews } from '../renderer/timeline-view';import { TimelineMonth } from '../renderer/timeline-month';import { TimelineYear } from '../renderer/timeline-year';import { WorkHours } from '../models/work-hours';import { TimeScale } from '../models/time-scale';import { QuickInfoTemplates } from '../models/quick-info-templates';import { HeaderRows } from '../models/header-rows';import { Crud } from '../actions/crud';import { Resize } from '../actions/resize';import { DragAndDrop } from '../actions/drag';import { VirtualScroll } from '../actions/virtual-scroll';import { WorkCellInteraction } from '../actions/work-cells';import { WorkHoursModel, ViewsModel, EventSettingsModel, GroupModel, ResourcesModel, TimeScaleModel } from '../models/models';import { QuickInfoTemplatesModel, HeaderRowsModel } from '../models/models';import { EventSettings } from '../models/event-settings';import { Group } from '../models/group';import { Resources } from '../models/resources';import { ICalendarExport } from '../exports/calendar-export';import { ICalendarImport } from '../exports/calendar-import';import { ExcelExport } from '../exports/excel-export';import { Print } from '../exports/print';import { IRenderer, ActionEventArgs, NavigatingEventArgs, CellClickEventArgs, RenderCellEventArgs, ScrollCss, TimezoneFields } from '../base/interface';import { EventClickArgs, EventRenderedArgs, PopupOpenEventArgs, UIStateArgs, DragEventArgs, ResizeEventArgs } from '../base/interface';import { EventFieldsMapping, TdData, ResourceDetails, ResizeEdges, StateArgs, ExportOptions, SelectEventArgs } from '../base/interface';import { ViewsData, PopupCloseEventArgs, HoverEventArgs, MoreEventsClickArgs, CallbackFunction } from '../base/interface';import { CalendarUtil, Gregorian, Islamic, CalendarType } from '../../common/calendar-util';import { ResourceBase } from '../base/resource';import { Timezone, timezoneData } from '../timezone/timezone';import { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';import * as events from '../base/constant';import * as cls from '../base/css-constant';import * as util from '../base/util';
|
|
1
|
+
import { Component, ModuleDeclaration, Property, Event, Animation, Collection, append } from '@syncfusion/ej2-base';import { EventHandler, EmitType, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';import { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, INotifyPropertyChanged, Complex } from '@syncfusion/ej2-base';import { getElement, removeClass, addClass, classList, remove, SanitizeHtmlHelper } from '@syncfusion/ej2-base';import { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';import { HeaderRenderer } from '../renderer/header-renderer';import { Scroll } from '../actions/scroll';import { ScheduleTouch } from '../actions/touch';import { KeyboardInteraction } from '../actions/keyboard';import { Data } from '../actions/data';import { View, CurrentAction, ReturnType, WeekRule } from '../base/type';import { EventBase } from '../event-renderer/event-base';import { InlineEdit } from '../event-renderer/inline-edit';import { QuickPopups } from '../popups/quick-popups';import { EventTooltip } from '../popups/event-tooltip';import { EventWindow } from '../popups/event-window';import { Render } from '../renderer/renderer';import { Day } from '../renderer/day';import { Week } from '../renderer/week';import { WorkWeek } from '../renderer/work-week';import { Month } from '../renderer/month';import { Year } from '../renderer/year';import { Agenda } from '../renderer/agenda';import { MonthAgenda } from '../renderer/month-agenda';import { TimelineViews } from '../renderer/timeline-view';import { TimelineMonth } from '../renderer/timeline-month';import { TimelineYear } from '../renderer/timeline-year';import { WorkHours } from '../models/work-hours';import { TimeScale } from '../models/time-scale';import { QuickInfoTemplates } from '../models/quick-info-templates';import { HeaderRows } from '../models/header-rows';import { Crud } from '../actions/crud';import { Resize } from '../actions/resize';import { DragAndDrop } from '../actions/drag';import { VirtualScroll } from '../actions/virtual-scroll';import { WorkCellInteraction } from '../actions/work-cells';import { WorkHoursModel, ViewsModel, EventSettingsModel, GroupModel, ResourcesModel, TimeScaleModel } from '../models/models';import { QuickInfoTemplatesModel, HeaderRowsModel } from '../models/models';import { EventSettings } from '../models/event-settings';import { Group } from '../models/group';import { Resources } from '../models/resources';import { ICalendarExport } from '../exports/calendar-export';import { ICalendarImport } from '../exports/calendar-import';import { ExcelExport } from '../exports/excel-export';import { Print } from '../exports/print';import { IRenderer, ActionEventArgs, NavigatingEventArgs, CellClickEventArgs, RenderCellEventArgs, ScrollCss, TimezoneFields } from '../base/interface';import { EventClickArgs, EventRenderedArgs, PopupOpenEventArgs, UIStateArgs, DragEventArgs, ResizeEventArgs } from '../base/interface';import { EventFieldsMapping, TdData, ResourceDetails, ResizeEdges, StateArgs, ExportOptions, SelectEventArgs } from '../base/interface';import { ViewsData, PopupCloseEventArgs, HoverEventArgs, MoreEventsClickArgs, CallbackFunction } from '../base/interface';import { CalendarUtil, Gregorian, Islamic, CalendarType } from '../../common/calendar-util';import { ResourceBase } from '../base/resource';import { Timezone, timezoneData } from '../timezone/timezone';import { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';import * as events from '../base/constant';import * as cls from '../base/css-constant';import * as util from '../base/util';
|
|
2
2
|
import {ComponentModel} from '@syncfusion/ej2-base';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -61,18 +61,18 @@ export interface ScheduleModel extends ComponentModel{
|
|
|
61
61
|
/**
|
|
62
62
|
* To set the active view on scheduler, the `currentView` property can be used and it usually accepts either of the following available
|
|
63
63
|
* view options. The view option specified in this property will be initially loaded on the schedule.
|
|
64
|
-
* * Day
|
|
65
|
-
* * Week
|
|
66
|
-
* * WorkWeek
|
|
67
|
-
* * Month
|
|
68
|
-
* * Year
|
|
69
|
-
* * Agenda
|
|
70
|
-
* * MonthAgenda
|
|
71
|
-
* * TimelineDay
|
|
72
|
-
* * TimelineWeek
|
|
73
|
-
* * TimelineWorkWeek
|
|
74
|
-
* * TimelineMonth
|
|
75
|
-
* * TimelineYear
|
|
64
|
+
* * `Day`: Denotes Day view of the scheduler.
|
|
65
|
+
* * `Week`: Denotes Week view of the scheduler.
|
|
66
|
+
* * `WorkWeek`: Denotes Work Week view of the scheduler.
|
|
67
|
+
* * `Month`: Denotes Month view of the scheduler.
|
|
68
|
+
* * `Year`: Denotes Year view of the scheduler.
|
|
69
|
+
* * `Agenda`: Denotes Agenda view of the scheduler.
|
|
70
|
+
* * `MonthAgenda`: Denotes Month Agenda view of the scheduler.
|
|
71
|
+
* * `TimelineDay`: Denotes Timeline Day view of the scheduler.
|
|
72
|
+
* * `TimelineWeek`: Denotes Timeline Week view of the scheduler.
|
|
73
|
+
* * `TimelineWorkWeek`: Denotes Timeline Work Week view of the scheduler.
|
|
74
|
+
* * `TimelineMonth`: Denotes Timeline Month view of the scheduler.
|
|
75
|
+
* * `TimelineYear`: Denotes Timeline Year view of the scheduler.
|
|
76
76
|
*
|
|
77
77
|
* {% codeBlock src='schedule/currentView/index.md' %}{% endcodeBlock %}
|
|
78
78
|
*
|
|
@@ -86,13 +86,12 @@ export interface ScheduleModel extends ComponentModel{
|
|
|
86
86
|
* Schedule displays all the views namely `Day`, `Week`, `Work Week`, `Month` and `Agenda`.
|
|
87
87
|
*
|
|
88
88
|
* Example for array of views:
|
|
89
|
-
* {% codeBlock src="schedule/
|
|
89
|
+
* {% codeBlock src="schedule/views/index.md" %}{% endcodeBlock %}
|
|
90
90
|
*
|
|
91
91
|
* Example for array of view objects:
|
|
92
|
-
* {% codeBlock src=
|
|
93
|
-
* {% codeBlock src='schedule/views/index.md' %}{% endcodeBlock %}
|
|
92
|
+
* {% codeBlock src='schedule/viewOption/index.md' %}{% endcodeBlock %}
|
|
94
93
|
*
|
|
95
|
-
* @default '[
|
|
94
|
+
* @default '["Day", "Week", "WorkWeek", "Month", "Agenda"]'
|
|
96
95
|
*/
|
|
97
96
|
views?: View[] | ViewsModel[];
|
|
98
97
|
|
|
@@ -182,9 +181,9 @@ export interface ScheduleModel extends ComponentModel{
|
|
|
182
181
|
/**
|
|
183
182
|
* It allows the Scheduler to display week numbers based on following available week options. The week
|
|
184
183
|
* option specified in this property will be initially loaded on the schedule.
|
|
185
|
-
* * FirstDay
|
|
186
|
-
* * FirstFourDayWeek
|
|
187
|
-
* * FirstFullWeek
|
|
184
|
+
* * `FirstDay`: Denotes that the first week of the year starts on the first day of the year and ends before the following designated first day of the week.
|
|
185
|
+
* * `FirstFourDayWeek`:Denotes that the first week of the year is the first week with four or more days before the designated first day of the week.
|
|
186
|
+
* * `FirstFullWeek`: Denotes that the first week of the year begins on the first occurrence of the designated first day of the week on or after the first day of the year.
|
|
188
187
|
*
|
|
189
188
|
* {% codeBlock src='schedule/weekRule/index.md' %}{% endcodeBlock %}
|
|
190
189
|
*
|
|
@@ -242,6 +241,14 @@ export interface ScheduleModel extends ComponentModel{
|
|
|
242
241
|
*/
|
|
243
242
|
timeFormat?: string;
|
|
244
243
|
|
|
244
|
+
/**
|
|
245
|
+
* Specifies whether to enable the rendering of untrusted HTML values in the Schedule component.
|
|
246
|
+
* When this property is enabled, the component will sanitize any suspected untrusted strings and scripts before rendering them.
|
|
247
|
+
*
|
|
248
|
+
* @default true
|
|
249
|
+
*/
|
|
250
|
+
enableHtmlSanitizer?: boolean;
|
|
251
|
+
|
|
245
252
|
/**
|
|
246
253
|
* When set to `true`, If valid, the scroll on the all day row is activated when the all day row
|
|
247
254
|
* height reaches the max height when the all day row is expanded.
|
|
@@ -362,9 +369,9 @@ export interface ScheduleModel extends ComponentModel{
|
|
|
362
369
|
* The template option which is used to render the customized work cells on the Schedule. Here, the template accepts either
|
|
363
370
|
* the string or HTMLElement as template design and then the parsed design is displayed onto the work cells.
|
|
364
371
|
* The fields accessible via template are as follows.
|
|
365
|
-
* * date
|
|
366
|
-
* * groupIndex
|
|
367
|
-
* * type
|
|
372
|
+
* * `date`: Returns the date of the cell.
|
|
373
|
+
* * `groupIndex`: Returns the group index of the cell.
|
|
374
|
+
* * `type`: Returns the type of the work cell.
|
|
368
375
|
*
|
|
369
376
|
* Refer to the below code snippet.
|
|
370
377
|
*
|
|
@@ -551,8 +558,8 @@ export interface ScheduleModel extends ComponentModel{
|
|
|
551
558
|
* Template option to customize the resource header bar. Here, the template accepts either
|
|
552
559
|
* the string or HTMLElement as template design and then the parsed design is displayed onto the resource header cells.
|
|
553
560
|
* The following can be accessible via template.
|
|
554
|
-
* * resource - All the resource fields.
|
|
555
|
-
* * resourceData -
|
|
561
|
+
* * `resource` - All the resource fields.
|
|
562
|
+
* * `resourceData` - Object collection of current resource.
|
|
556
563
|
*
|
|
557
564
|
* Refer to the below code snippet.
|
|
558
565
|
*
|
|
@@ -586,7 +593,7 @@ export interface ScheduleModel extends ComponentModel{
|
|
|
586
593
|
|
|
587
594
|
/**
|
|
588
595
|
* Allows defining the collection of resources to be displayed on the Schedule. The resource collection needs to be defined
|
|
589
|
-
*
|
|
596
|
+
* with unique resource names to identify it along with the respective dataSource and field mapping options.
|
|
590
597
|
*
|
|
591
598
|
* {% codeBlock src='schedule/resources/index.md' %}{% endcodeBlock %}
|
|
592
599
|
*
|
|
@@ -596,7 +603,7 @@ export interface ScheduleModel extends ComponentModel{
|
|
|
596
603
|
|
|
597
604
|
/**
|
|
598
605
|
* Allows defining the collection of custom header rows to display the year, month, week, date and hour label as an individual row
|
|
599
|
-
*
|
|
606
|
+
* on the timeline view of the scheduler.
|
|
600
607
|
*
|
|
601
608
|
* {% codeBlock src='schedule/headerRows/index.md' %}{% endcodeBlock %}
|
|
602
609
|
*
|