@fullcalendar/core 4.0.2 → 4.3.1
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/README.md +1 -1
- package/locales/da.js +1 -1
- package/locales-all.js +3 -8
- package/locales-all.min.js +1 -6
- package/main.css +333 -181
- package/main.d.ts +2314 -2412
- package/main.esm.js +8558 -0
- package/main.js +240 -314
- package/main.min.css +1 -5
- package/main.min.js +2 -5
- package/package.json +3 -3
package/main.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
FullCalendar Core Package v4.
|
|
2
|
+
FullCalendar Core Package v4.3.1
|
|
3
3
|
Docs & License: https://fullcalendar.io/
|
|
4
4
|
(c) 2019 Adam Shaw
|
|
5
5
|
*/
|
|
6
|
+
|
|
6
7
|
(function (global, factory) {
|
|
7
8
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
8
9
|
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
@@ -276,6 +277,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
276
277
|
var borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;
|
|
277
278
|
var borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;
|
|
278
279
|
var borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;
|
|
280
|
+
// must use offset(Width|Height) because compatible with client(Width|Height)
|
|
279
281
|
var scrollbarLeftRight = sanitizeScrollbarWidth(el.offsetWidth - el.clientWidth - borderLeft - borderRight);
|
|
280
282
|
var scrollbarBottom = sanitizeScrollbarWidth(el.offsetHeight - el.clientHeight - borderTop - borderBottom);
|
|
281
283
|
var res = {
|
|
@@ -337,9 +339,11 @@ Docs & License: https://fullcalendar.io/
|
|
|
337
339
|
};
|
|
338
340
|
}
|
|
339
341
|
function computeHeightAndMargins(el) {
|
|
342
|
+
return el.getBoundingClientRect().height + computeVMargins(el);
|
|
343
|
+
}
|
|
344
|
+
function computeVMargins(el) {
|
|
340
345
|
var computed = window.getComputedStyle(el);
|
|
341
|
-
return
|
|
342
|
-
parseInt(computed.marginTop, 10) +
|
|
346
|
+
return parseInt(computed.marginTop, 10) +
|
|
343
347
|
parseInt(computed.marginBottom, 10);
|
|
344
348
|
}
|
|
345
349
|
// does not return window
|
|
@@ -800,11 +804,12 @@ Docs & License: https://fullcalendar.io/
|
|
|
800
804
|
// important to query for heights in a single first pass (to avoid reflow oscillation).
|
|
801
805
|
els.forEach(function (el, i) {
|
|
802
806
|
var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;
|
|
803
|
-
var
|
|
807
|
+
var naturalHeight = el.getBoundingClientRect().height;
|
|
808
|
+
var naturalOffset = naturalHeight + computeVMargins(el);
|
|
804
809
|
if (naturalOffset < minOffset) {
|
|
805
810
|
flexEls.push(el);
|
|
806
811
|
flexOffsets.push(naturalOffset);
|
|
807
|
-
flexHeights.push(
|
|
812
|
+
flexHeights.push(naturalHeight);
|
|
808
813
|
}
|
|
809
814
|
else {
|
|
810
815
|
// this element stretches past recommended height (non-expandable). mark the space as occupied.
|
|
@@ -842,7 +847,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
842
847
|
els.forEach(function (el) {
|
|
843
848
|
var innerEl = el.firstChild; // hopefully an element
|
|
844
849
|
if (innerEl instanceof HTMLElement) {
|
|
845
|
-
var innerWidth_1 = innerEl.
|
|
850
|
+
var innerWidth_1 = innerEl.getBoundingClientRect().width;
|
|
846
851
|
if (innerWidth_1 > maxInnerWidth) {
|
|
847
852
|
maxInnerWidth = innerWidth_1;
|
|
848
853
|
}
|
|
@@ -864,7 +869,9 @@ Docs & License: https://fullcalendar.io/
|
|
|
864
869
|
};
|
|
865
870
|
applyStyle(outerEl, reflowStyleProps);
|
|
866
871
|
applyStyle(innerEl, reflowStyleProps);
|
|
867
|
-
var diff =
|
|
872
|
+
var diff = // grab the dimensions
|
|
873
|
+
outerEl.getBoundingClientRect().height -
|
|
874
|
+
innerEl.getBoundingClientRect().height;
|
|
868
875
|
// undo hack
|
|
869
876
|
var resetStyleProps = { position: '', left: '' };
|
|
870
877
|
applyStyle(outerEl, resetStyleProps);
|
|
@@ -1071,16 +1078,6 @@ Docs & License: https://fullcalendar.io/
|
|
|
1071
1078
|
}
|
|
1072
1079
|
return refined;
|
|
1073
1080
|
}
|
|
1074
|
-
/*
|
|
1075
|
-
Get a snapshot of an object, so we can compare it to later revisions.
|
|
1076
|
-
Intentionally only works with arrays, jaja
|
|
1077
|
-
*/
|
|
1078
|
-
function freezeRaw(raw) {
|
|
1079
|
-
if (Array.isArray(raw)) {
|
|
1080
|
-
return Array.prototype.slice.call(raw);
|
|
1081
|
-
}
|
|
1082
|
-
return raw;
|
|
1083
|
-
}
|
|
1084
1081
|
/* Date stuff that doesn't belong in datelib core
|
|
1085
1082
|
----------------------------------------------------------------------------------------------------------------------*/
|
|
1086
1083
|
// given a timed range, computes an all-day range that has the same exact duration,
|
|
@@ -1203,9 +1200,12 @@ Docs & License: https://fullcalendar.io/
|
|
|
1203
1200
|
/*
|
|
1204
1201
|
Event MUST have a recurringDef
|
|
1205
1202
|
*/
|
|
1206
|
-
function expandRecurringRanges(eventDef, framingRange, dateEnv, recurringTypes) {
|
|
1203
|
+
function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {
|
|
1207
1204
|
var typeDef = recurringTypes[eventDef.recurringDef.typeId];
|
|
1208
|
-
var markers = typeDef.expand(eventDef.recurringDef.typeData,
|
|
1205
|
+
var markers = typeDef.expand(eventDef.recurringDef.typeData, {
|
|
1206
|
+
start: dateEnv.subtract(framingRange.start, duration),
|
|
1207
|
+
end: framingRange.end
|
|
1208
|
+
}, dateEnv);
|
|
1209
1209
|
// the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to
|
|
1210
1210
|
if (eventDef.allDay) {
|
|
1211
1211
|
markers = markers.map(startOfDay);
|
|
@@ -1213,6 +1213,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
1213
1213
|
return markers;
|
|
1214
1214
|
}
|
|
1215
1215
|
|
|
1216
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
1216
1217
|
// Merges an array of objects into a single object.
|
|
1217
1218
|
// The second argument allows for an array of property names who's object values will be merged together.
|
|
1218
1219
|
function mergeProps(propObjs, complexProps) {
|
|
@@ -1286,6 +1287,23 @@ Docs & License: https://fullcalendar.io/
|
|
|
1286
1287
|
}
|
|
1287
1288
|
return a;
|
|
1288
1289
|
}
|
|
1290
|
+
function isPropsEqual(obj0, obj1) {
|
|
1291
|
+
for (var key in obj0) {
|
|
1292
|
+
if (hasOwnProperty.call(obj0, key)) {
|
|
1293
|
+
if (!(key in obj1)) {
|
|
1294
|
+
return false;
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
for (var key in obj1) {
|
|
1299
|
+
if (hasOwnProperty.call(obj1, key)) {
|
|
1300
|
+
if (obj0[key] !== obj1[key]) {
|
|
1301
|
+
return false;
|
|
1302
|
+
}
|
|
1303
|
+
}
|
|
1304
|
+
}
|
|
1305
|
+
return true;
|
|
1306
|
+
}
|
|
1289
1307
|
|
|
1290
1308
|
function parseEvents(rawEvents, sourceId, calendar, allowOpenRange) {
|
|
1291
1309
|
var eventStore = createEmptyEventStore();
|
|
@@ -1316,13 +1334,13 @@ Docs & License: https://fullcalendar.io/
|
|
|
1316
1334
|
for (var defId in defs) {
|
|
1317
1335
|
var def = defs[defId];
|
|
1318
1336
|
if (def.recurringDef) {
|
|
1319
|
-
var starts = expandRecurringRanges(def, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes);
|
|
1320
1337
|
var duration = def.recurringDef.duration;
|
|
1321
1338
|
if (!duration) {
|
|
1322
1339
|
duration = def.allDay ?
|
|
1323
1340
|
calendar.defaultAllDayEventDuration :
|
|
1324
1341
|
calendar.defaultTimedEventDuration;
|
|
1325
1342
|
}
|
|
1343
|
+
var starts = expandRecurringRanges(def, duration, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes);
|
|
1326
1344
|
for (var _i = 0, starts_1 = starts; _i < starts_1.length; _i++) {
|
|
1327
1345
|
var start = starts_1[_i];
|
|
1328
1346
|
var instance = createEventInstance(defId, {
|
|
@@ -2035,13 +2053,12 @@ Docs & License: https://fullcalendar.io/
|
|
|
2035
2053
|
if (start && this._instance) { // TODO: warning if parsed bad
|
|
2036
2054
|
var instanceRange = this._instance.range;
|
|
2037
2055
|
var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?
|
|
2038
|
-
var endDelta = null;
|
|
2039
2056
|
if (options.maintainDuration) {
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2057
|
+
this.mutate({ datesDelta: startDelta });
|
|
2058
|
+
}
|
|
2059
|
+
else {
|
|
2060
|
+
this.mutate({ startDelta: startDelta });
|
|
2043
2061
|
}
|
|
2044
|
-
this.mutate({ startDelta: startDelta, endDelta: endDelta });
|
|
2045
2062
|
}
|
|
2046
2063
|
};
|
|
2047
2064
|
EventApi.prototype.setEnd = function (endInput, options) {
|
|
@@ -2089,11 +2106,16 @@ Docs & License: https://fullcalendar.io/
|
|
|
2089
2106
|
var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);
|
|
2090
2107
|
if (end) {
|
|
2091
2108
|
var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);
|
|
2092
|
-
|
|
2109
|
+
if (durationsEqual(startDelta, endDelta)) {
|
|
2110
|
+
this.mutate({ datesDelta: startDelta, standardProps: standardProps });
|
|
2111
|
+
}
|
|
2112
|
+
else {
|
|
2113
|
+
this.mutate({ startDelta: startDelta, endDelta: endDelta, standardProps: standardProps });
|
|
2114
|
+
}
|
|
2093
2115
|
}
|
|
2094
|
-
else {
|
|
2116
|
+
else { // means "clear the end"
|
|
2095
2117
|
standardProps.hasEnd = false;
|
|
2096
|
-
this.mutate({
|
|
2118
|
+
this.mutate({ datesDelta: startDelta, standardProps: standardProps });
|
|
2097
2119
|
}
|
|
2098
2120
|
}
|
|
2099
2121
|
};
|
|
@@ -2112,7 +2134,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
2112
2134
|
EventApi.prototype.moveDates = function (deltaInput) {
|
|
2113
2135
|
var delta = createDuration(deltaInput);
|
|
2114
2136
|
if (delta) { // TODO: warning if parsed bad
|
|
2115
|
-
this.mutate({
|
|
2137
|
+
this.mutate({ datesDelta: delta });
|
|
2116
2138
|
}
|
|
2117
2139
|
};
|
|
2118
2140
|
EventApi.prototype.setAllDay = function (allDay, options) {
|
|
@@ -2445,7 +2467,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
2445
2467
|
// and thus, we need to mark the event as having a real end
|
|
2446
2468
|
if (standardProps.hasEnd == null &&
|
|
2447
2469
|
eventConfig.durationEditable &&
|
|
2448
|
-
|
|
2470
|
+
(mutation.startDelta || mutation.endDelta)) {
|
|
2449
2471
|
standardProps.hasEnd = true; // TODO: is this mutation okay?
|
|
2450
2472
|
}
|
|
2451
2473
|
var copy = __assign({}, eventDef, standardProps, { ui: __assign({}, eventDef.ui, standardProps.ui) });
|
|
@@ -2461,21 +2483,6 @@ Docs & License: https://fullcalendar.io/
|
|
|
2461
2483
|
}
|
|
2462
2484
|
return copy;
|
|
2463
2485
|
}
|
|
2464
|
-
function willDeltasAffectDuration(startDelta, endDelta) {
|
|
2465
|
-
if (startDelta && !asRoughMs(startDelta)) {
|
|
2466
|
-
startDelta = null;
|
|
2467
|
-
}
|
|
2468
|
-
if (endDelta && !asRoughMs(endDelta)) {
|
|
2469
|
-
endDelta = null;
|
|
2470
|
-
}
|
|
2471
|
-
if (!startDelta && !endDelta) {
|
|
2472
|
-
return false;
|
|
2473
|
-
}
|
|
2474
|
-
if (Boolean(startDelta) !== Boolean(endDelta)) {
|
|
2475
|
-
return true;
|
|
2476
|
-
}
|
|
2477
|
-
return !durationsEqual(startDelta, endDelta);
|
|
2478
|
-
}
|
|
2479
2486
|
function applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef
|
|
2480
2487
|
eventConfig, mutation, calendar) {
|
|
2481
2488
|
var dateEnv = calendar.dateEnv;
|
|
@@ -2485,25 +2492,28 @@ Docs & License: https://fullcalendar.io/
|
|
|
2485
2492
|
if (forceAllDay) {
|
|
2486
2493
|
copy.range = computeAlignedDayRange(copy.range);
|
|
2487
2494
|
}
|
|
2488
|
-
if (mutation.
|
|
2495
|
+
if (mutation.datesDelta && eventConfig.startEditable) {
|
|
2496
|
+
copy.range = {
|
|
2497
|
+
start: dateEnv.add(copy.range.start, mutation.datesDelta),
|
|
2498
|
+
end: dateEnv.add(copy.range.end, mutation.datesDelta)
|
|
2499
|
+
};
|
|
2500
|
+
}
|
|
2501
|
+
if (mutation.startDelta && eventConfig.durationEditable) {
|
|
2489
2502
|
copy.range = {
|
|
2490
2503
|
start: dateEnv.add(copy.range.start, mutation.startDelta),
|
|
2491
2504
|
end: copy.range.end
|
|
2492
2505
|
};
|
|
2493
2506
|
}
|
|
2494
|
-
if (
|
|
2507
|
+
if (mutation.endDelta && eventConfig.durationEditable) {
|
|
2495
2508
|
copy.range = {
|
|
2496
2509
|
start: copy.range.start,
|
|
2497
|
-
end:
|
|
2510
|
+
end: dateEnv.add(copy.range.end, mutation.endDelta)
|
|
2498
2511
|
};
|
|
2499
2512
|
}
|
|
2500
|
-
|
|
2501
|
-
(eventConfig.durationEditable ||
|
|
2502
|
-
!willDeltasAffectDuration(// TODO: nonDRY logic above
|
|
2503
|
-
eventConfig.startEditable ? mutation.startDelta : null, mutation.endDelta))) {
|
|
2513
|
+
if (clearEnd) {
|
|
2504
2514
|
copy.range = {
|
|
2505
2515
|
start: copy.range.start,
|
|
2506
|
-
end:
|
|
2516
|
+
end: calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start)
|
|
2507
2517
|
};
|
|
2508
2518
|
}
|
|
2509
2519
|
// in case event was all-day but the supplied deltas were not
|
|
@@ -2709,11 +2719,12 @@ Docs & License: https://fullcalendar.io/
|
|
|
2709
2719
|
}
|
|
2710
2720
|
}
|
|
2711
2721
|
// allow (a function)
|
|
2722
|
+
var calendarEventStore = calendar.state.eventStore; // need global-to-calendar, not local to component (splittable)state
|
|
2712
2723
|
for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {
|
|
2713
2724
|
var subjectAllow = _a[_i];
|
|
2714
2725
|
var subjectDateSpan = __assign({}, dateSpanMeta, { range: subjectInstance.range, allDay: subjectDef.allDay });
|
|
2715
|
-
var origDef =
|
|
2716
|
-
var origInstance =
|
|
2726
|
+
var origDef = calendarEventStore.defs[subjectDef.defId];
|
|
2727
|
+
var origInstance = calendarEventStore.instances[subjectInstanceId];
|
|
2717
2728
|
var eventApi = void 0;
|
|
2718
2729
|
if (origDef) { // was previously in the calendar
|
|
2719
2730
|
eventApi = new EventApi(calendar, origDef, origInstance);
|
|
@@ -3187,90 +3198,6 @@ Docs & License: https://fullcalendar.io/
|
|
|
3187
3198
|
return res;
|
|
3188
3199
|
}
|
|
3189
3200
|
|
|
3190
|
-
function isValuesSimilar(val0, val1, depth) {
|
|
3191
|
-
if (depth === void 0) { depth = 1; }
|
|
3192
|
-
if (val0 === val1) {
|
|
3193
|
-
return true;
|
|
3194
|
-
}
|
|
3195
|
-
else if (Array.isArray(val0) && Array.isArray(val1)) {
|
|
3196
|
-
return isArraysSimilar(val0, val1, depth);
|
|
3197
|
-
}
|
|
3198
|
-
else if (typeof val0 === 'object' && val0 && typeof val1 === 'object' && val1) { // non-null objects
|
|
3199
|
-
return isObjectsSimilar(val0, val1, depth);
|
|
3200
|
-
}
|
|
3201
|
-
else {
|
|
3202
|
-
return false;
|
|
3203
|
-
}
|
|
3204
|
-
}
|
|
3205
|
-
function isArraysSimilar(a0, a1, depth) {
|
|
3206
|
-
if (depth === void 0) { depth = 1; }
|
|
3207
|
-
if (a0 === a1) {
|
|
3208
|
-
return true;
|
|
3209
|
-
}
|
|
3210
|
-
else if (depth > 0) {
|
|
3211
|
-
if (a0.length !== a1.length) {
|
|
3212
|
-
return false;
|
|
3213
|
-
}
|
|
3214
|
-
else {
|
|
3215
|
-
for (var i = 0; i < a0.length; i++) {
|
|
3216
|
-
if (!isValuesSimilar(a0[i], a1[i], depth - 1)) {
|
|
3217
|
-
return false;
|
|
3218
|
-
}
|
|
3219
|
-
}
|
|
3220
|
-
return true;
|
|
3221
|
-
}
|
|
3222
|
-
}
|
|
3223
|
-
else {
|
|
3224
|
-
return false;
|
|
3225
|
-
}
|
|
3226
|
-
}
|
|
3227
|
-
function isObjectsSimilar(obj0, obj1, depth) {
|
|
3228
|
-
if (depth === void 0) { depth = 1; }
|
|
3229
|
-
if (obj0 === obj1) {
|
|
3230
|
-
return true;
|
|
3231
|
-
}
|
|
3232
|
-
else if (depth > 0) {
|
|
3233
|
-
for (var prop in obj0) {
|
|
3234
|
-
if (!(prop in obj1)) {
|
|
3235
|
-
return false;
|
|
3236
|
-
}
|
|
3237
|
-
}
|
|
3238
|
-
for (var prop in obj1) {
|
|
3239
|
-
if (!(prop in obj0)) {
|
|
3240
|
-
return false;
|
|
3241
|
-
}
|
|
3242
|
-
else {
|
|
3243
|
-
if (!isValuesSimilar(obj0[prop], obj1[prop], depth - 1)) {
|
|
3244
|
-
return false;
|
|
3245
|
-
}
|
|
3246
|
-
}
|
|
3247
|
-
}
|
|
3248
|
-
return true;
|
|
3249
|
-
}
|
|
3250
|
-
else {
|
|
3251
|
-
return false;
|
|
3252
|
-
}
|
|
3253
|
-
}
|
|
3254
|
-
function computeChangedProps(obj0, obj1, depth) {
|
|
3255
|
-
if (depth === void 0) { depth = 1; }
|
|
3256
|
-
var res = {};
|
|
3257
|
-
for (var prop in obj1) {
|
|
3258
|
-
if (!(prop in obj0) ||
|
|
3259
|
-
!isValuesSimilar(obj0[prop], obj1[prop], depth - 1)) {
|
|
3260
|
-
res[prop] = obj1[prop];
|
|
3261
|
-
}
|
|
3262
|
-
}
|
|
3263
|
-
return res;
|
|
3264
|
-
}
|
|
3265
|
-
function anyKeysRemoved(obj0, obj1) {
|
|
3266
|
-
for (var prop in obj0) {
|
|
3267
|
-
if (!(prop in obj1)) {
|
|
3268
|
-
return true;
|
|
3269
|
-
}
|
|
3270
|
-
}
|
|
3271
|
-
return false;
|
|
3272
|
-
}
|
|
3273
|
-
|
|
3274
3201
|
var EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere
|
|
3275
3202
|
var Splitter = /** @class */ (function () {
|
|
3276
3203
|
function Splitter() {
|
|
@@ -4045,6 +3972,8 @@ Docs & License: https://fullcalendar.io/
|
|
|
4045
3972
|
*/
|
|
4046
3973
|
// Hit System
|
|
4047
3974
|
// -----------------------------------------------------------------------------------------------------------------
|
|
3975
|
+
DateComponent.prototype.buildPositionCaches = function () {
|
|
3976
|
+
};
|
|
4048
3977
|
DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
|
|
4049
3978
|
return null; // this should be abstract
|
|
4050
3979
|
};
|
|
@@ -4098,7 +4027,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
4098
4027
|
isStart: seg.isStart,
|
|
4099
4028
|
isEnd: seg.isEnd,
|
|
4100
4029
|
el: seg.el,
|
|
4101
|
-
view: this //
|
|
4030
|
+
view: this // safe to cast because this method is only called on context.view
|
|
4102
4031
|
}
|
|
4103
4032
|
]);
|
|
4104
4033
|
}
|
|
@@ -4121,7 +4050,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
4121
4050
|
event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
|
|
4122
4051
|
isMirror: isMirrors,
|
|
4123
4052
|
el: seg.el,
|
|
4124
|
-
view: this //
|
|
4053
|
+
view: this // safe to cast because this method is only called on context.view
|
|
4125
4054
|
}
|
|
4126
4055
|
]);
|
|
4127
4056
|
}
|
|
@@ -4162,6 +4091,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
4162
4091
|
deps: input.deps || [],
|
|
4163
4092
|
reducers: input.reducers || [],
|
|
4164
4093
|
eventDefParsers: input.eventDefParsers || [],
|
|
4094
|
+
isDraggableTransformers: input.isDraggableTransformers || [],
|
|
4165
4095
|
eventDragMutationMassagers: input.eventDragMutationMassagers || [],
|
|
4166
4096
|
eventDefMutationAppliers: input.eventDefMutationAppliers || [],
|
|
4167
4097
|
dateSelectionTransformers: input.dateSelectionTransformers || [],
|
|
@@ -4191,6 +4121,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
4191
4121
|
this.hooks = {
|
|
4192
4122
|
reducers: [],
|
|
4193
4123
|
eventDefParsers: [],
|
|
4124
|
+
isDraggableTransformers: [],
|
|
4194
4125
|
eventDragMutationMassagers: [],
|
|
4195
4126
|
eventDefMutationAppliers: [],
|
|
4196
4127
|
dateSelectionTransformers: [],
|
|
@@ -4232,6 +4163,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
4232
4163
|
return {
|
|
4233
4164
|
reducers: hooks0.reducers.concat(hooks1.reducers),
|
|
4234
4165
|
eventDefParsers: hooks0.eventDefParsers.concat(hooks1.eventDefParsers),
|
|
4166
|
+
isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
|
|
4235
4167
|
eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
|
|
4236
4168
|
eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
|
|
4237
4169
|
dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
|
|
@@ -4439,11 +4371,17 @@ Docs & License: https://fullcalendar.io/
|
|
|
4439
4371
|
}
|
|
4440
4372
|
}
|
|
4441
4373
|
if (anyValid) {
|
|
4374
|
+
var duration = null;
|
|
4375
|
+
if ('duration' in leftoverProps) {
|
|
4376
|
+
duration = createDuration(leftoverProps.duration);
|
|
4377
|
+
delete leftoverProps.duration;
|
|
4378
|
+
}
|
|
4379
|
+
if (!duration && props.startTime && props.endTime) {
|
|
4380
|
+
duration = subtractDurations(props.endTime, props.startTime);
|
|
4381
|
+
}
|
|
4442
4382
|
return {
|
|
4443
4383
|
allDayGuess: Boolean(!props.startTime && !props.endTime),
|
|
4444
|
-
duration:
|
|
4445
|
-
subtractDurations(props.endTime, props.startTime) :
|
|
4446
|
-
null,
|
|
4384
|
+
duration: duration,
|
|
4447
4385
|
typeData: props // doesn't need endTime anymore but oh well
|
|
4448
4386
|
};
|
|
4449
4387
|
}
|
|
@@ -4488,21 +4426,21 @@ Docs & License: https://fullcalendar.io/
|
|
|
4488
4426
|
|
|
4489
4427
|
var DefaultOptionChangeHandlers = createPlugin({
|
|
4490
4428
|
optionChangeHandlers: {
|
|
4491
|
-
events: function (events, calendar) {
|
|
4492
|
-
handleEventSources([events], calendar);
|
|
4429
|
+
events: function (events, calendar, deepEqual) {
|
|
4430
|
+
handleEventSources([events], calendar, deepEqual);
|
|
4493
4431
|
},
|
|
4494
4432
|
eventSources: handleEventSources,
|
|
4495
4433
|
plugins: handlePlugins
|
|
4496
4434
|
}
|
|
4497
4435
|
});
|
|
4498
|
-
function handleEventSources(inputs, calendar) {
|
|
4436
|
+
function handleEventSources(inputs, calendar, deepEqual) {
|
|
4499
4437
|
var unfoundSources = hashValuesToArray(calendar.state.eventSources);
|
|
4500
4438
|
var newInputs = [];
|
|
4501
4439
|
for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
|
|
4502
4440
|
var input = inputs_1[_i];
|
|
4503
4441
|
var inputFound = false;
|
|
4504
4442
|
for (var i = 0; i < unfoundSources.length; i++) {
|
|
4505
|
-
if (
|
|
4443
|
+
if (deepEqual(unfoundSources[i]._raw, input)) {
|
|
4506
4444
|
unfoundSources.splice(i, 1); // delete
|
|
4507
4445
|
inputFound = true;
|
|
4508
4446
|
break;
|
|
@@ -4730,16 +4668,13 @@ Docs & License: https://fullcalendar.io/
|
|
|
4730
4668
|
this.dynamicOverrides = {};
|
|
4731
4669
|
this.compute();
|
|
4732
4670
|
}
|
|
4733
|
-
OptionsManager.prototype.
|
|
4734
|
-
|
|
4735
|
-
|
|
4736
|
-
|
|
4737
|
-
|
|
4738
|
-
|
|
4739
|
-
|
|
4740
|
-
};
|
|
4741
|
-
OptionsManager.prototype.reset = function (props) {
|
|
4742
|
-
this.overrides = props;
|
|
4671
|
+
OptionsManager.prototype.mutate = function (updates, removals, isDynamic) {
|
|
4672
|
+
var overrideHash = isDynamic ? this.dynamicOverrides : this.overrides;
|
|
4673
|
+
__assign(overrideHash, updates);
|
|
4674
|
+
for (var _i = 0, removals_1 = removals; _i < removals_1.length; _i++) {
|
|
4675
|
+
var propName = removals_1[_i];
|
|
4676
|
+
delete overrideHash[propName];
|
|
4677
|
+
}
|
|
4743
4678
|
this.compute();
|
|
4744
4679
|
};
|
|
4745
4680
|
// Computes the flattened options hash for the calendar and assigns to `this.options`.
|
|
@@ -4797,39 +4732,25 @@ Docs & License: https://fullcalendar.io/
|
|
|
4797
4732
|
}());
|
|
4798
4733
|
registerCalendarSystem('gregory', GregorianCalendarSystem);
|
|
4799
4734
|
|
|
4800
|
-
var
|
|
4801
|
-
var ISO_TZO_RE = /(?:(Z)|([-+])(\d\d)(?::(\d\d))?)$/;
|
|
4735
|
+
var ISO_RE = /^\s*(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;
|
|
4802
4736
|
function parse(str) {
|
|
4803
|
-
var
|
|
4804
|
-
var isTimeUnspecified = false;
|
|
4805
|
-
var m = ISO_START.exec(str);
|
|
4737
|
+
var m = ISO_RE.exec(str);
|
|
4806
4738
|
if (m) {
|
|
4807
|
-
|
|
4808
|
-
if (
|
|
4809
|
-
|
|
4810
|
-
|
|
4811
|
-
|
|
4812
|
-
|
|
4813
|
-
|
|
4814
|
-
|
|
4815
|
-
|
|
4816
|
-
|
|
4817
|
-
|
|
4818
|
-
|
|
4819
|
-
}
|
|
4820
|
-
return '';
|
|
4821
|
-
}) + 'Z'; // otherwise will parse in local
|
|
4739
|
+
var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number('0.' + m[12]) * 1000 : 0));
|
|
4740
|
+
if (isValidDate(marker)) {
|
|
4741
|
+
var timeZoneOffset = null;
|
|
4742
|
+
if (m[13]) {
|
|
4743
|
+
timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +
|
|
4744
|
+
Number(m[18] || 0));
|
|
4745
|
+
}
|
|
4746
|
+
return {
|
|
4747
|
+
marker: marker,
|
|
4748
|
+
isTimeUnspecified: !m[6],
|
|
4749
|
+
timeZoneOffset: timeZoneOffset
|
|
4750
|
+
};
|
|
4822
4751
|
}
|
|
4823
4752
|
}
|
|
4824
|
-
|
|
4825
|
-
if (!isValidDate(marker)) {
|
|
4826
|
-
return null;
|
|
4827
|
-
}
|
|
4828
|
-
return {
|
|
4829
|
-
marker: marker,
|
|
4830
|
-
isTimeUnspecified: isTimeUnspecified,
|
|
4831
|
-
timeZoneOffset: timeZoneOffset
|
|
4832
|
-
};
|
|
4753
|
+
return null;
|
|
4833
4754
|
}
|
|
4834
4755
|
|
|
4835
4756
|
var DateEnv = /** @class */ (function () {
|
|
@@ -4848,7 +4769,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
4848
4769
|
this.weekDow = 1;
|
|
4849
4770
|
this.weekDoy = 4;
|
|
4850
4771
|
}
|
|
4851
|
-
|
|
4772
|
+
if (typeof settings.firstDay === 'number') {
|
|
4852
4773
|
this.weekDow = settings.firstDay;
|
|
4853
4774
|
}
|
|
4854
4775
|
if (typeof settings.weekNumberCalculation === 'function') {
|
|
@@ -5176,7 +5097,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
5176
5097
|
var meta = def.parseMeta(raw);
|
|
5177
5098
|
if (meta) {
|
|
5178
5099
|
var res = parseEventSourceProps(typeof raw === 'object' ? raw : {}, meta, i, calendar);
|
|
5179
|
-
res._raw =
|
|
5100
|
+
res._raw = raw;
|
|
5180
5101
|
return res;
|
|
5181
5102
|
}
|
|
5182
5103
|
}
|
|
@@ -5662,10 +5583,19 @@ Docs & License: https://fullcalendar.io/
|
|
|
5662
5583
|
}());
|
|
5663
5584
|
// TODO: find a way to avoid comparing DateProfiles. it's tedious
|
|
5664
5585
|
function isDateProfilesEqual(p0, p1) {
|
|
5665
|
-
return rangesEqual(p0.
|
|
5666
|
-
rangesEqual(p0.
|
|
5586
|
+
return rangesEqual(p0.validRange, p1.validRange) &&
|
|
5587
|
+
rangesEqual(p0.activeRange, p1.activeRange) &&
|
|
5588
|
+
rangesEqual(p0.renderRange, p1.renderRange) &&
|
|
5667
5589
|
durationsEqual(p0.minTime, p1.minTime) &&
|
|
5668
5590
|
durationsEqual(p0.maxTime, p1.maxTime);
|
|
5591
|
+
/*
|
|
5592
|
+
TODO: compare more?
|
|
5593
|
+
currentRange: DateRange
|
|
5594
|
+
currentRangeUnit: string
|
|
5595
|
+
isRangeAllDay: boolean
|
|
5596
|
+
isValid: boolean
|
|
5597
|
+
dateIncrement: Duration
|
|
5598
|
+
*/
|
|
5669
5599
|
}
|
|
5670
5600
|
|
|
5671
5601
|
function reduce (state, action, calendar) {
|
|
@@ -5941,7 +5871,13 @@ Docs & License: https://fullcalendar.io/
|
|
|
5941
5871
|
findViewNameBySubclass(theClass, overrideConfigs) ||
|
|
5942
5872
|
findViewNameBySubclass(theClass, defaultConfigs);
|
|
5943
5873
|
}
|
|
5944
|
-
var superDef =
|
|
5874
|
+
var superDef = null;
|
|
5875
|
+
if (superType) {
|
|
5876
|
+
if (superType === viewType) {
|
|
5877
|
+
throw new Error('Can\'t have a custom view type that references itself');
|
|
5878
|
+
}
|
|
5879
|
+
superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);
|
|
5880
|
+
}
|
|
5945
5881
|
if (!theClass && superDef) {
|
|
5946
5882
|
theClass = superDef.class;
|
|
5947
5883
|
}
|
|
@@ -6373,10 +6309,11 @@ Docs & License: https://fullcalendar.io/
|
|
|
6373
6309
|
this.viewHeight = heightInput() - this.queryToolbarsHeight();
|
|
6374
6310
|
}
|
|
6375
6311
|
else if (heightInput === 'parent') { // set to height of parent element
|
|
6376
|
-
|
|
6312
|
+
var parentEl = this.el.parentNode;
|
|
6313
|
+
this.viewHeight = parentEl.getBoundingClientRect().height - this.queryToolbarsHeight();
|
|
6377
6314
|
}
|
|
6378
6315
|
else {
|
|
6379
|
-
this.viewHeight = Math.round(this.contentEl.
|
|
6316
|
+
this.viewHeight = Math.round(this.contentEl.getBoundingClientRect().width /
|
|
6380
6317
|
Math.max(calendar.opt('aspectRatio'), .5));
|
|
6381
6318
|
}
|
|
6382
6319
|
};
|
|
@@ -6394,7 +6331,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
6394
6331
|
// -----------------------------------------------------------------------------------------------------------------
|
|
6395
6332
|
CalendarComponent.prototype.freezeHeight = function () {
|
|
6396
6333
|
applyStyle(this.el, {
|
|
6397
|
-
height: this.el.
|
|
6334
|
+
height: this.el.getBoundingClientRect().height,
|
|
6398
6335
|
overflow: 'hidden'
|
|
6399
6336
|
});
|
|
6400
6337
|
};
|
|
@@ -6607,7 +6544,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
6607
6544
|
this.buildTheme = memoize(buildTheme);
|
|
6608
6545
|
this.buildEventUiSingleBase = memoize(this._buildEventUiSingleBase);
|
|
6609
6546
|
this.buildSelectionConfig = memoize(this._buildSelectionConfig);
|
|
6610
|
-
this.buildEventUiBySource = memoizeOutput(buildEventUiBySource,
|
|
6547
|
+
this.buildEventUiBySource = memoizeOutput(buildEventUiBySource, isPropsEqual);
|
|
6611
6548
|
this.buildEventUiBases = memoize(buildEventUiBases);
|
|
6612
6549
|
this.interactionsStore = {};
|
|
6613
6550
|
this.actionQueue = [];
|
|
@@ -6873,6 +6810,9 @@ Docs & License: https://fullcalendar.io/
|
|
|
6873
6810
|
theme: this.theme,
|
|
6874
6811
|
options: this.optionsManager.computed
|
|
6875
6812
|
}, this.el);
|
|
6813
|
+
this.isViewUpdated = true;
|
|
6814
|
+
this.isDatesUpdated = true;
|
|
6815
|
+
this.isEventsUpdated = true;
|
|
6876
6816
|
}
|
|
6877
6817
|
component.receiveProps(__assign({}, state, { viewSpec: viewSpec, dateProfile: state.dateProfile, dateProfileGenerator: this.dateProfileGenerators[viewType], eventStore: renderableEventStore, eventUiBases: eventUiBases, dateSelection: state.dateSelection, eventSelection: state.eventSelection, eventDrag: state.eventDrag, eventResize: state.eventResize }));
|
|
6878
6818
|
if (savedScroll) {
|
|
@@ -6903,98 +6843,61 @@ Docs & License: https://fullcalendar.io/
|
|
|
6903
6843
|
};
|
|
6904
6844
|
// Options
|
|
6905
6845
|
// -----------------------------------------------------------------------------------------------------------------
|
|
6906
|
-
|
|
6907
|
-
|
|
6908
|
-
|
|
6909
|
-
|
|
6910
|
-
|
|
6911
|
-
|
|
6912
|
-
|
|
6913
|
-
|
|
6914
|
-
|
|
6915
|
-
|
|
6916
|
-
|
|
6917
|
-
|
|
6918
|
-
|
|
6919
|
-
|
|
6920
|
-
|
|
6921
|
-
for (var name_2 in options) {
|
|
6922
|
-
if (changeHandlers[name_2]) {
|
|
6923
|
-
specialOptions[name_2] = options[name_2];
|
|
6924
|
-
}
|
|
6925
|
-
else {
|
|
6926
|
-
normalOptions[name_2] = options[name_2];
|
|
6927
|
-
}
|
|
6928
|
-
}
|
|
6929
|
-
this.batchRendering(function () {
|
|
6930
|
-
if (anyKeysRemoved(oldNormalOptions, normalOptions)) {
|
|
6931
|
-
_this.processOptions(options, 'reset');
|
|
6932
|
-
}
|
|
6933
|
-
else {
|
|
6934
|
-
_this.processOptions(computeChangedProps(oldNormalOptions, normalOptions));
|
|
6935
|
-
}
|
|
6936
|
-
// handle special options last
|
|
6937
|
-
for (var name_3 in specialOptions) {
|
|
6938
|
-
changeHandlers[name_3](specialOptions[name_3], _this);
|
|
6939
|
-
}
|
|
6940
|
-
});
|
|
6846
|
+
Calendar.prototype.setOption = function (name, val) {
|
|
6847
|
+
var _a;
|
|
6848
|
+
this.mutateOptions((_a = {}, _a[name] = val, _a), [], true);
|
|
6849
|
+
};
|
|
6850
|
+
Calendar.prototype.getOption = function (name) {
|
|
6851
|
+
return this.optionsManager.computed[name];
|
|
6852
|
+
};
|
|
6853
|
+
Calendar.prototype.opt = function (name) {
|
|
6854
|
+
return this.optionsManager.computed[name];
|
|
6855
|
+
};
|
|
6856
|
+
Calendar.prototype.viewOpt = function (name) {
|
|
6857
|
+
return this.viewOpts()[name];
|
|
6858
|
+
};
|
|
6859
|
+
Calendar.prototype.viewOpts = function () {
|
|
6860
|
+
return this.viewSpecs[this.state.viewType].options;
|
|
6941
6861
|
};
|
|
6942
6862
|
/*
|
|
6943
|
-
|
|
6863
|
+
handles option changes (like a diff)
|
|
6944
6864
|
*/
|
|
6945
|
-
Calendar.prototype.
|
|
6865
|
+
Calendar.prototype.mutateOptions = function (updates, removals, isDynamic, deepEqual) {
|
|
6946
6866
|
var _this = this;
|
|
6947
6867
|
var changeHandlers = this.pluginSystem.hooks.optionChangeHandlers;
|
|
6948
|
-
var
|
|
6949
|
-
var
|
|
6950
|
-
|
|
6951
|
-
|
|
6952
|
-
|
|
6868
|
+
var normalUpdates = {};
|
|
6869
|
+
var specialUpdates = {};
|
|
6870
|
+
var oldDateEnv = this.dateEnv; // do this before handleOptions
|
|
6871
|
+
var isTimeZoneDirty = false;
|
|
6872
|
+
var isSizeDirty = false;
|
|
6873
|
+
var anyDifficultOptions = Boolean(removals.length);
|
|
6874
|
+
for (var name_1 in updates) {
|
|
6875
|
+
if (changeHandlers[name_1]) {
|
|
6876
|
+
specialUpdates[name_1] = updates[name_1];
|
|
6953
6877
|
}
|
|
6954
6878
|
else {
|
|
6955
|
-
|
|
6879
|
+
normalUpdates[name_1] = updates[name_1];
|
|
6956
6880
|
}
|
|
6957
6881
|
}
|
|
6958
|
-
|
|
6959
|
-
|
|
6960
|
-
// handle special options last
|
|
6961
|
-
for (var name_5 in specialOptions) {
|
|
6962
|
-
changeHandlers[name_5](specialOptions[name_5], _this);
|
|
6963
|
-
}
|
|
6964
|
-
});
|
|
6965
|
-
};
|
|
6966
|
-
Calendar.prototype.processOptions = function (options, mode) {
|
|
6967
|
-
var _this = this;
|
|
6968
|
-
var oldDateEnv = this.dateEnv; // do this before handleOptions
|
|
6969
|
-
var isTimeZoneDirty = false;
|
|
6970
|
-
var isSizeDirty = false;
|
|
6971
|
-
var anyDifficultOptions = false;
|
|
6972
|
-
for (var name_6 in options) {
|
|
6973
|
-
if (/^(height|contentHeight|aspectRatio)$/.test(name_6)) {
|
|
6882
|
+
for (var name_2 in normalUpdates) {
|
|
6883
|
+
if (/^(height|contentHeight|aspectRatio)$/.test(name_2)) {
|
|
6974
6884
|
isSizeDirty = true;
|
|
6975
6885
|
}
|
|
6976
|
-
else if (/^(defaultDate|defaultView)$/.test(
|
|
6886
|
+
else if (/^(defaultDate|defaultView)$/.test(name_2)) ;
|
|
6977
6887
|
else {
|
|
6978
6888
|
anyDifficultOptions = true;
|
|
6979
|
-
if (
|
|
6889
|
+
if (name_2 === 'timeZone') {
|
|
6980
6890
|
isTimeZoneDirty = true;
|
|
6981
6891
|
}
|
|
6982
6892
|
}
|
|
6983
6893
|
}
|
|
6984
|
-
|
|
6985
|
-
anyDifficultOptions = true;
|
|
6986
|
-
this.optionsManager.reset(options);
|
|
6987
|
-
}
|
|
6988
|
-
else if (mode === 'dynamic') {
|
|
6989
|
-
this.optionsManager.addDynamic(options); // takes higher precedence
|
|
6990
|
-
}
|
|
6991
|
-
else {
|
|
6992
|
-
this.optionsManager.add(options);
|
|
6993
|
-
}
|
|
6894
|
+
this.optionsManager.mutate(normalUpdates, removals, isDynamic);
|
|
6994
6895
|
if (anyDifficultOptions) {
|
|
6995
|
-
this.handleOptions(this.optionsManager.computed);
|
|
6896
|
+
this.handleOptions(this.optionsManager.computed);
|
|
6996
6897
|
this.needsFullRerender = true;
|
|
6997
|
-
|
|
6898
|
+
}
|
|
6899
|
+
this.batchRendering(function () {
|
|
6900
|
+
if (anyDifficultOptions) {
|
|
6998
6901
|
if (isTimeZoneDirty) {
|
|
6999
6902
|
_this.dispatch({
|
|
7000
6903
|
type: 'CHANGE_TIMEZONE',
|
|
@@ -7009,27 +6912,17 @@ Docs & License: https://fullcalendar.io/
|
|
|
7009
6912
|
type: 'SET_VIEW_TYPE',
|
|
7010
6913
|
viewType: _this.state.viewType
|
|
7011
6914
|
});
|
|
7012
|
-
}
|
|
7013
|
-
|
|
7014
|
-
|
|
7015
|
-
|
|
7016
|
-
|
|
7017
|
-
|
|
7018
|
-
|
|
7019
|
-
|
|
7020
|
-
|
|
7021
|
-
|
|
7022
|
-
|
|
7023
|
-
return this.optionsManager.computed[name];
|
|
7024
|
-
};
|
|
7025
|
-
Calendar.prototype.opt = function (name) {
|
|
7026
|
-
return this.optionsManager.computed[name];
|
|
7027
|
-
};
|
|
7028
|
-
Calendar.prototype.viewOpt = function (name) {
|
|
7029
|
-
return this.viewOpts()[name];
|
|
7030
|
-
};
|
|
7031
|
-
Calendar.prototype.viewOpts = function () {
|
|
7032
|
-
return this.viewSpecs[this.state.viewType].options;
|
|
6915
|
+
}
|
|
6916
|
+
else if (isSizeDirty) {
|
|
6917
|
+
_this.updateSize();
|
|
6918
|
+
}
|
|
6919
|
+
// special updates
|
|
6920
|
+
if (deepEqual) {
|
|
6921
|
+
for (var name_3 in specialUpdates) {
|
|
6922
|
+
changeHandlers[name_3](specialUpdates[name_3], _this, deepEqual);
|
|
6923
|
+
}
|
|
6924
|
+
}
|
|
6925
|
+
});
|
|
7033
6926
|
};
|
|
7034
6927
|
/*
|
|
7035
6928
|
rebuilds things based off of a complete set of refined options
|
|
@@ -7084,10 +6977,10 @@ Docs & License: https://fullcalendar.io/
|
|
|
7084
6977
|
};
|
|
7085
6978
|
Calendar.prototype.releaseAfterSizingTriggers = function () {
|
|
7086
6979
|
var afterSizingTriggers = this.afterSizingTriggers;
|
|
7087
|
-
for (var
|
|
7088
|
-
for (var _i = 0, _a = afterSizingTriggers[
|
|
6980
|
+
for (var name_4 in afterSizingTriggers) {
|
|
6981
|
+
for (var _i = 0, _a = afterSizingTriggers[name_4]; _i < _a.length; _i++) {
|
|
7089
6982
|
var args = _a[_i];
|
|
7090
|
-
this.publiclyTrigger(
|
|
6983
|
+
this.publiclyTrigger(name_4, args);
|
|
7091
6984
|
}
|
|
7092
6985
|
}
|
|
7093
6986
|
this.afterSizingTriggers = {};
|
|
@@ -7102,7 +6995,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
7102
6995
|
var dateMarker = null;
|
|
7103
6996
|
if (dateOrRange) {
|
|
7104
6997
|
if (dateOrRange.start && dateOrRange.end) { // a range
|
|
7105
|
-
this.optionsManager.
|
|
6998
|
+
this.optionsManager.mutate({ visibleRange: dateOrRange }, []); // will not rerender
|
|
7106
6999
|
this.handleOptions(this.optionsManager.computed); // ...but yuck
|
|
7107
7000
|
}
|
|
7108
7001
|
else { // a date
|
|
@@ -7142,11 +7035,17 @@ Docs & License: https://fullcalendar.io/
|
|
|
7142
7035
|
// Given a duration singular unit, like "week" or "day", finds a matching view spec.
|
|
7143
7036
|
// Preference is given to views that have corresponding buttons.
|
|
7144
7037
|
Calendar.prototype.getUnitViewSpec = function (unit) {
|
|
7145
|
-
var
|
|
7038
|
+
var component = this.component;
|
|
7039
|
+
var viewTypes = [];
|
|
7146
7040
|
var i;
|
|
7147
7041
|
var spec;
|
|
7148
|
-
// put views that have buttons first. there will be duplicates, but oh
|
|
7149
|
-
|
|
7042
|
+
// put views that have buttons first. there will be duplicates, but oh
|
|
7043
|
+
if (component.header) {
|
|
7044
|
+
viewTypes.push.apply(viewTypes, component.header.viewsWithButtons);
|
|
7045
|
+
}
|
|
7046
|
+
if (component.footer) {
|
|
7047
|
+
viewTypes.push.apply(viewTypes, component.footer.viewsWithButtons);
|
|
7048
|
+
}
|
|
7150
7049
|
for (var viewType in this.viewSpecs) {
|
|
7151
7050
|
viewTypes.push(viewType);
|
|
7152
7051
|
}
|
|
@@ -7315,9 +7214,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
7315
7214
|
}
|
|
7316
7215
|
};
|
|
7317
7216
|
Calendar.prototype.triggerDateSelect = function (selection, pev) {
|
|
7318
|
-
var arg = this.buildDateSpanApi(selection);
|
|
7319
|
-
arg.jsEvent = pev ? pev.origEvent : null;
|
|
7320
|
-
arg.view = this.view;
|
|
7217
|
+
var arg = __assign({}, this.buildDateSpanApi(selection), { jsEvent: pev ? pev.origEvent : null, view: this.view });
|
|
7321
7218
|
this.publiclyTrigger('select', [arg]);
|
|
7322
7219
|
};
|
|
7323
7220
|
Calendar.prototype.triggerDateUnselect = function (pev) {
|
|
@@ -7330,10 +7227,8 @@ Docs & License: https://fullcalendar.io/
|
|
|
7330
7227
|
};
|
|
7331
7228
|
// TODO: receive pev?
|
|
7332
7229
|
Calendar.prototype.triggerDateClick = function (dateSpan, dayEl, view, ev) {
|
|
7333
|
-
var arg = this.buildDatePointApi(dateSpan)
|
|
7334
|
-
|
|
7335
|
-
arg.jsEvent = ev;
|
|
7336
|
-
arg.view = view;
|
|
7230
|
+
var arg = __assign({}, this.buildDatePointApi(dateSpan), { dayEl: dayEl, jsEvent: ev, // Is this always a mouse event? See #4655
|
|
7231
|
+
view: view });
|
|
7337
7232
|
this.publiclyTrigger('dateClick', [arg]);
|
|
7338
7233
|
};
|
|
7339
7234
|
Calendar.prototype.buildDatePointApi = function (dateSpan) {
|
|
@@ -7503,6 +7398,14 @@ Docs & License: https://fullcalendar.io/
|
|
|
7503
7398
|
Calendar.prototype.refetchEvents = function () {
|
|
7504
7399
|
this.dispatch({ type: 'FETCH_EVENT_SOURCES' });
|
|
7505
7400
|
};
|
|
7401
|
+
// Scroll
|
|
7402
|
+
// -----------------------------------------------------------------------------------------------------------------
|
|
7403
|
+
Calendar.prototype.scrollToTime = function (timeInput) {
|
|
7404
|
+
var duration = createDuration(timeInput);
|
|
7405
|
+
if (duration) {
|
|
7406
|
+
this.component.view.scrollToDuration(duration);
|
|
7407
|
+
}
|
|
7408
|
+
};
|
|
7506
7409
|
return Calendar;
|
|
7507
7410
|
}());
|
|
7508
7411
|
EmitterMixin.mixInto(Calendar);
|
|
@@ -7619,7 +7522,10 @@ Docs & License: https://fullcalendar.io/
|
|
|
7619
7522
|
// -----------------------------------------------------------------------------------------------------------------
|
|
7620
7523
|
View.prototype.updateSize = function (isResize, viewHeight, isAuto) {
|
|
7621
7524
|
var calendar = this.calendar;
|
|
7622
|
-
if (isResize ||
|
|
7525
|
+
if (isResize || // HACKS...
|
|
7526
|
+
calendar.isViewUpdated ||
|
|
7527
|
+
calendar.isDatesUpdated ||
|
|
7528
|
+
calendar.isEventsUpdated) {
|
|
7623
7529
|
// sort of the catch-all sizing
|
|
7624
7530
|
// anything that might cause dimension changes
|
|
7625
7531
|
this.updateBaseSize(isResize, viewHeight, isAuto);
|
|
@@ -7631,7 +7537,9 @@ Docs & License: https://fullcalendar.io/
|
|
|
7631
7537
|
// -----------------------------------------------------------------------------------------------------------------
|
|
7632
7538
|
View.prototype.renderDatesWrap = function (dateProfile) {
|
|
7633
7539
|
this.renderDates(dateProfile);
|
|
7634
|
-
this.addScroll({
|
|
7540
|
+
this.addScroll({
|
|
7541
|
+
duration: createDuration(this.opt('scrollTime'))
|
|
7542
|
+
});
|
|
7635
7543
|
this.startNowIndicator(dateProfile); // shouldn't render yet because updateSize will be called soon
|
|
7636
7544
|
};
|
|
7637
7545
|
View.prototype.unrenderDatesWrap = function () {
|
|
@@ -7667,6 +7575,21 @@ Docs & License: https://fullcalendar.io/
|
|
|
7667
7575
|
var props = this.props;
|
|
7668
7576
|
return sliceEventStore(eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? this.nextDayThreshold : null).fg;
|
|
7669
7577
|
};
|
|
7578
|
+
View.prototype.computeEventDraggable = function (eventDef, eventUi) {
|
|
7579
|
+
var transformers = this.calendar.pluginSystem.hooks.isDraggableTransformers;
|
|
7580
|
+
var val = eventUi.startEditable;
|
|
7581
|
+
for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
|
|
7582
|
+
var transformer = transformers_1[_i];
|
|
7583
|
+
val = transformer(val, eventDef, eventUi, this);
|
|
7584
|
+
}
|
|
7585
|
+
return val;
|
|
7586
|
+
};
|
|
7587
|
+
View.prototype.computeEventStartResizable = function (eventDef, eventUi) {
|
|
7588
|
+
return eventUi.durationEditable && this.opt('eventResizableFromStart');
|
|
7589
|
+
};
|
|
7590
|
+
View.prototype.computeEventEndResizable = function (eventDef, eventUi) {
|
|
7591
|
+
return eventUi.durationEditable;
|
|
7592
|
+
};
|
|
7670
7593
|
// Event Selection
|
|
7671
7594
|
// -----------------------------------------------------------------------------------------------------------------
|
|
7672
7595
|
View.prototype.renderEventSelectionWrap = function (instanceId) {
|
|
@@ -7803,17 +7726,18 @@ Docs & License: https://fullcalendar.io/
|
|
|
7803
7726
|
return scroll;
|
|
7804
7727
|
};
|
|
7805
7728
|
View.prototype.applyScroll = function (scroll, isResize) {
|
|
7806
|
-
|
|
7807
|
-
|
|
7729
|
+
var duration = scroll.duration;
|
|
7730
|
+
if (duration != null) {
|
|
7731
|
+
delete scroll.duration;
|
|
7808
7732
|
if (this.props.dateProfile) { // dates rendered yet?
|
|
7809
|
-
__assign(scroll, this.
|
|
7733
|
+
__assign(scroll, this.computeDateScroll(duration));
|
|
7810
7734
|
}
|
|
7811
7735
|
}
|
|
7812
7736
|
if (this.props.dateProfile) { // dates rendered yet?
|
|
7813
7737
|
this.applyDateScroll(scroll);
|
|
7814
7738
|
}
|
|
7815
7739
|
};
|
|
7816
|
-
View.prototype.
|
|
7740
|
+
View.prototype.computeDateScroll = function (duration) {
|
|
7817
7741
|
return {}; // subclasses must implement
|
|
7818
7742
|
};
|
|
7819
7743
|
View.prototype.queryDateScroll = function () {
|
|
@@ -7822,6 +7746,10 @@ Docs & License: https://fullcalendar.io/
|
|
|
7822
7746
|
View.prototype.applyDateScroll = function (scroll) {
|
|
7823
7747
|
// subclasses must implement
|
|
7824
7748
|
};
|
|
7749
|
+
// for API
|
|
7750
|
+
View.prototype.scrollToDuration = function (duration) {
|
|
7751
|
+
this.applyScroll({ duration: duration }, false);
|
|
7752
|
+
};
|
|
7825
7753
|
return View;
|
|
7826
7754
|
}(DateComponent));
|
|
7827
7755
|
EmitterMixin.mixInto(View);
|
|
@@ -8631,7 +8559,7 @@ Docs & License: https://fullcalendar.io/
|
|
|
8631
8559
|
|
|
8632
8560
|
// exports
|
|
8633
8561
|
// --------------------------------------------------------------------------------------------------
|
|
8634
|
-
var version = '4.
|
|
8562
|
+
var version = '4.3.1';
|
|
8635
8563
|
|
|
8636
8564
|
exports.Calendar = Calendar;
|
|
8637
8565
|
exports.Component = Component;
|
|
@@ -8719,7 +8647,6 @@ Docs & License: https://fullcalendar.io/
|
|
|
8719
8647
|
exports.formatDate = formatDate;
|
|
8720
8648
|
exports.formatIsoTimeString = formatIsoTimeString;
|
|
8721
8649
|
exports.formatRange = formatRange;
|
|
8722
|
-
exports.freezeRaw = freezeRaw;
|
|
8723
8650
|
exports.getAllDayHtml = getAllDayHtml;
|
|
8724
8651
|
exports.getClippingParents = getClippingParents;
|
|
8725
8652
|
exports.getDayClasses = getDayClasses;
|
|
@@ -8741,11 +8668,10 @@ Docs & License: https://fullcalendar.io/
|
|
|
8741
8668
|
exports.isInt = isInt;
|
|
8742
8669
|
exports.isInteractionValid = isInteractionValid;
|
|
8743
8670
|
exports.isMultiDayRange = isMultiDayRange;
|
|
8744
|
-
exports.
|
|
8671
|
+
exports.isPropsEqual = isPropsEqual;
|
|
8745
8672
|
exports.isPropsValid = isPropsValid;
|
|
8746
8673
|
exports.isSingleDay = isSingleDay;
|
|
8747
8674
|
exports.isValidDate = isValidDate;
|
|
8748
|
-
exports.isValuesSimilar = isValuesSimilar;
|
|
8749
8675
|
exports.listenBySelector = listenBySelector;
|
|
8750
8676
|
exports.mapHash = mapHash;
|
|
8751
8677
|
exports.matchCellWidths = matchCellWidths;
|