@fullcalendar/core 4.3.1 → 4.4.0
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/locales/az.js +32 -0
- package/locales/el.js +1 -1
- package/locales/fr.js +1 -1
- package/locales/pt-br.js +1 -1
- package/locales/th.js +10 -2
- package/locales/ug.js +20 -0
- package/locales/uz.js +24 -0
- package/locales-all.js +118 -61
- package/locales-all.min.js +1 -1
- package/main.css +1 -1
- package/main.d.ts +69 -65
- package/main.esm.js +350 -331
- package/main.js +353 -330
- package/main.js.map +1 -0
- package/main.min.js +2 -2
- package/package.json +1 -1
package/main.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
FullCalendar Core Package v4.
|
|
2
|
+
FullCalendar Core Package v4.4.0
|
|
3
3
|
Docs & License: https://fullcalendar.io/
|
|
4
4
|
(c) 2019 Adam Shaw
|
|
5
5
|
*/
|
|
@@ -2386,12 +2386,13 @@ function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshol
|
|
|
2386
2386
|
function hasBgRendering(def) {
|
|
2387
2387
|
return def.rendering === 'background' || def.rendering === 'inverse-background';
|
|
2388
2388
|
}
|
|
2389
|
-
function filterSegsViaEls(
|
|
2390
|
-
|
|
2389
|
+
function filterSegsViaEls(context, segs, isMirror) {
|
|
2390
|
+
var calendar = context.calendar, view = context.view;
|
|
2391
|
+
if (calendar.hasPublicHandlers('eventRender')) {
|
|
2391
2392
|
segs = segs.filter(function (seg) {
|
|
2392
|
-
var custom =
|
|
2393
|
+
var custom = calendar.publiclyTrigger('eventRender', [
|
|
2393
2394
|
{
|
|
2394
|
-
event: new EventApi(
|
|
2395
|
+
event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
|
|
2395
2396
|
isMirror: isMirror,
|
|
2396
2397
|
isStart: seg.isStart,
|
|
2397
2398
|
isEnd: seg.isEnd,
|
|
@@ -2438,6 +2439,65 @@ function compileEventUi(eventDef, eventUiBases) {
|
|
|
2438
2439
|
uis.push(eventDef.ui);
|
|
2439
2440
|
return combineEventUis(uis);
|
|
2440
2441
|
}
|
|
2442
|
+
// triggers
|
|
2443
|
+
function triggerRenderedSegs(context, segs, isMirrors) {
|
|
2444
|
+
var calendar = context.calendar, view = context.view;
|
|
2445
|
+
if (calendar.hasPublicHandlers('eventPositioned')) {
|
|
2446
|
+
for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
|
|
2447
|
+
var seg = segs_2[_i];
|
|
2448
|
+
calendar.publiclyTriggerAfterSizing('eventPositioned', [
|
|
2449
|
+
{
|
|
2450
|
+
event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
|
|
2451
|
+
isMirror: isMirrors,
|
|
2452
|
+
isStart: seg.isStart,
|
|
2453
|
+
isEnd: seg.isEnd,
|
|
2454
|
+
el: seg.el,
|
|
2455
|
+
view: view
|
|
2456
|
+
}
|
|
2457
|
+
]);
|
|
2458
|
+
}
|
|
2459
|
+
}
|
|
2460
|
+
if (!calendar.state.loadingLevel) { // avoid initial empty state while pending
|
|
2461
|
+
calendar.afterSizingTriggers._eventsPositioned = [null]; // fire once
|
|
2462
|
+
}
|
|
2463
|
+
}
|
|
2464
|
+
function triggerWillRemoveSegs(context, segs, isMirrors) {
|
|
2465
|
+
var calendar = context.calendar, view = context.view;
|
|
2466
|
+
for (var _i = 0, segs_3 = segs; _i < segs_3.length; _i++) {
|
|
2467
|
+
var seg = segs_3[_i];
|
|
2468
|
+
calendar.trigger('eventElRemove', seg.el);
|
|
2469
|
+
}
|
|
2470
|
+
if (calendar.hasPublicHandlers('eventDestroy')) {
|
|
2471
|
+
for (var _a = 0, segs_4 = segs; _a < segs_4.length; _a++) {
|
|
2472
|
+
var seg = segs_4[_a];
|
|
2473
|
+
calendar.publiclyTrigger('eventDestroy', [
|
|
2474
|
+
{
|
|
2475
|
+
event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
|
|
2476
|
+
isMirror: isMirrors,
|
|
2477
|
+
el: seg.el,
|
|
2478
|
+
view: view
|
|
2479
|
+
}
|
|
2480
|
+
]);
|
|
2481
|
+
}
|
|
2482
|
+
}
|
|
2483
|
+
}
|
|
2484
|
+
// is-interactable
|
|
2485
|
+
function computeEventDraggable(context, eventDef, eventUi) {
|
|
2486
|
+
var calendar = context.calendar, view = context.view;
|
|
2487
|
+
var transformers = calendar.pluginSystem.hooks.isDraggableTransformers;
|
|
2488
|
+
var val = eventUi.startEditable;
|
|
2489
|
+
for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
|
|
2490
|
+
var transformer = transformers_1[_i];
|
|
2491
|
+
val = transformer(val, eventDef, eventUi, view);
|
|
2492
|
+
}
|
|
2493
|
+
return val;
|
|
2494
|
+
}
|
|
2495
|
+
function computeEventStartResizable(context, eventDef, eventUi) {
|
|
2496
|
+
return eventUi.durationEditable && context.options.eventResizableFromStart;
|
|
2497
|
+
}
|
|
2498
|
+
function computeEventEndResizable(context, eventDef, eventUi) {
|
|
2499
|
+
return eventUi.durationEditable;
|
|
2500
|
+
}
|
|
2441
2501
|
|
|
2442
2502
|
// applies the mutation to ALL defs/instances within the event store
|
|
2443
2503
|
function applyMutationToEventStore(eventStore, eventConfigBase, mutation, calendar) {
|
|
@@ -3339,8 +3399,7 @@ function buildEventUiForKey(allUi, eventUiForKey, individualUi) {
|
|
|
3339
3399
|
// { date, type, forceOff }
|
|
3340
3400
|
// `type` is a view-type like "day" or "week". default value is "day".
|
|
3341
3401
|
// `attrs` and `innerHtml` are use to generate the rest of the HTML tag.
|
|
3342
|
-
function buildGotoAnchorHtml(
|
|
3343
|
-
var dateEnv = component.dateEnv;
|
|
3402
|
+
function buildGotoAnchorHtml(allOptions, dateEnv, gotoOptions, attrs, innerHtml) {
|
|
3344
3403
|
var date;
|
|
3345
3404
|
var type;
|
|
3346
3405
|
var forceOff;
|
|
@@ -3363,7 +3422,7 @@ function buildGotoAnchorHtml(component, gotoOptions, attrs, innerHtml) {
|
|
|
3363
3422
|
}
|
|
3364
3423
|
attrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space
|
|
3365
3424
|
innerHtml = innerHtml || '';
|
|
3366
|
-
if (!forceOff &&
|
|
3425
|
+
if (!forceOff && allOptions.navLinks) {
|
|
3367
3426
|
return '<a' + attrs +
|
|
3368
3427
|
' data-goto="' + htmlEscape(JSON.stringify(finalOptions)) + '">' +
|
|
3369
3428
|
innerHtml +
|
|
@@ -3375,12 +3434,12 @@ function buildGotoAnchorHtml(component, gotoOptions, attrs, innerHtml) {
|
|
|
3375
3434
|
'</span>';
|
|
3376
3435
|
}
|
|
3377
3436
|
}
|
|
3378
|
-
function getAllDayHtml(
|
|
3379
|
-
return
|
|
3437
|
+
function getAllDayHtml(allOptions) {
|
|
3438
|
+
return allOptions.allDayHtml || htmlEscape(allOptions.allDayText);
|
|
3380
3439
|
}
|
|
3381
3440
|
// Computes HTML classNames for a single-day element
|
|
3382
3441
|
function getDayClasses(date, dateProfile, context, noThemeHighlight) {
|
|
3383
|
-
var calendar = context.calendar,
|
|
3442
|
+
var calendar = context.calendar, options = context.options, theme = context.theme, dateEnv = context.dateEnv;
|
|
3384
3443
|
var classes = [];
|
|
3385
3444
|
var todayStart;
|
|
3386
3445
|
var todayEnd;
|
|
@@ -3389,7 +3448,7 @@ function getDayClasses(date, dateProfile, context, noThemeHighlight) {
|
|
|
3389
3448
|
}
|
|
3390
3449
|
else {
|
|
3391
3450
|
classes.push('fc-' + DAY_IDS[date.getUTCDay()]);
|
|
3392
|
-
if (
|
|
3451
|
+
if (options.monthMode &&
|
|
3393
3452
|
dateEnv.getMonth(date) !== dateEnv.getMonth(dateProfile.currentRange.start)) {
|
|
3394
3453
|
classes.push('fc-other-month');
|
|
3395
3454
|
}
|
|
@@ -3854,34 +3913,54 @@ Theme.prototype.baseIconClass = '';
|
|
|
3854
3913
|
Theme.prototype.iconOverridePrefix = '';
|
|
3855
3914
|
|
|
3856
3915
|
var guid = 0;
|
|
3916
|
+
var ComponentContext = /** @class */ (function () {
|
|
3917
|
+
function ComponentContext(calendar, theme, dateEnv, options, view) {
|
|
3918
|
+
this.calendar = calendar;
|
|
3919
|
+
this.theme = theme;
|
|
3920
|
+
this.dateEnv = dateEnv;
|
|
3921
|
+
this.options = options;
|
|
3922
|
+
this.view = view;
|
|
3923
|
+
this.isRtl = options.dir === 'rtl';
|
|
3924
|
+
this.eventOrderSpecs = parseFieldSpecs(options.eventOrder);
|
|
3925
|
+
this.nextDayThreshold = createDuration(options.nextDayThreshold);
|
|
3926
|
+
}
|
|
3927
|
+
ComponentContext.prototype.extend = function (options, view) {
|
|
3928
|
+
return new ComponentContext(this.calendar, this.theme, this.dateEnv, options || this.options, view || this.view);
|
|
3929
|
+
};
|
|
3930
|
+
return ComponentContext;
|
|
3931
|
+
}());
|
|
3857
3932
|
var Component = /** @class */ (function () {
|
|
3858
|
-
function Component(
|
|
3859
|
-
// HACK to populate view at top of component instantiation call chain
|
|
3860
|
-
if (isView) {
|
|
3861
|
-
context.view = this;
|
|
3862
|
-
}
|
|
3933
|
+
function Component() {
|
|
3863
3934
|
this.uid = String(guid++);
|
|
3864
|
-
this.context = context;
|
|
3865
|
-
this.dateEnv = context.dateEnv;
|
|
3866
|
-
this.theme = context.theme;
|
|
3867
|
-
this.view = context.view;
|
|
3868
|
-
this.calendar = context.calendar;
|
|
3869
|
-
this.isRtl = this.opt('dir') === 'rtl';
|
|
3870
3935
|
}
|
|
3871
3936
|
Component.addEqualityFuncs = function (newFuncs) {
|
|
3872
3937
|
this.prototype.equalityFuncs = __assign({}, this.prototype.equalityFuncs, newFuncs);
|
|
3873
3938
|
};
|
|
3874
|
-
Component.prototype.
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3939
|
+
Component.prototype.receiveProps = function (props, context) {
|
|
3940
|
+
var oldContext = this.context;
|
|
3941
|
+
this.context = context;
|
|
3942
|
+
if (!oldContext) {
|
|
3943
|
+
this.firstContext(context);
|
|
3944
|
+
}
|
|
3878
3945
|
var _a = recycleProps(this.props || {}, props, this.equalityFuncs), anyChanges = _a.anyChanges, comboProps = _a.comboProps;
|
|
3879
3946
|
this.props = comboProps;
|
|
3880
3947
|
if (anyChanges) {
|
|
3881
|
-
|
|
3948
|
+
if (oldContext) {
|
|
3949
|
+
this.beforeUpdate();
|
|
3950
|
+
}
|
|
3951
|
+
this.render(comboProps, context);
|
|
3952
|
+
if (oldContext) {
|
|
3953
|
+
this.afterUpdate();
|
|
3954
|
+
}
|
|
3882
3955
|
}
|
|
3883
3956
|
};
|
|
3884
|
-
Component.prototype.render = function (props) {
|
|
3957
|
+
Component.prototype.render = function (props, context) {
|
|
3958
|
+
};
|
|
3959
|
+
Component.prototype.firstContext = function (context) {
|
|
3960
|
+
};
|
|
3961
|
+
Component.prototype.beforeUpdate = function () {
|
|
3962
|
+
};
|
|
3963
|
+
Component.prototype.afterUpdate = function () {
|
|
3885
3964
|
};
|
|
3886
3965
|
// after destroy is called, this component won't ever be used again
|
|
3887
3966
|
Component.prototype.destroy = function () {
|
|
@@ -3923,8 +4002,8 @@ PURPOSES:
|
|
|
3923
4002
|
*/
|
|
3924
4003
|
var DateComponent = /** @class */ (function (_super) {
|
|
3925
4004
|
__extends(DateComponent, _super);
|
|
3926
|
-
function DateComponent(
|
|
3927
|
-
var _this = _super.call(this
|
|
4005
|
+
function DateComponent(el) {
|
|
4006
|
+
var _this = _super.call(this) || this;
|
|
3928
4007
|
_this.el = el;
|
|
3929
4008
|
return _this;
|
|
3930
4009
|
}
|
|
@@ -3932,38 +4011,6 @@ var DateComponent = /** @class */ (function (_super) {
|
|
|
3932
4011
|
_super.prototype.destroy.call(this);
|
|
3933
4012
|
removeElement(this.el);
|
|
3934
4013
|
};
|
|
3935
|
-
// TODO: WHAT ABOUT (sourceSeg && sourceSeg.component.doesDragMirror)
|
|
3936
|
-
//
|
|
3937
|
-
// Event Drag-n-Drop Rendering (for both events and external elements)
|
|
3938
|
-
// ---------------------------------------------------------------------------------------------------------------
|
|
3939
|
-
/*
|
|
3940
|
-
renderEventDragSegs(state: EventSegUiInteractionState) {
|
|
3941
|
-
if (state) {
|
|
3942
|
-
let { isEvent, segs, sourceSeg } = state
|
|
3943
|
-
|
|
3944
|
-
if (this.eventRenderer) {
|
|
3945
|
-
this.eventRenderer.hideByHash(state.affectedInstances)
|
|
3946
|
-
}
|
|
3947
|
-
|
|
3948
|
-
// if the user is dragging something that is considered an event with real event data,
|
|
3949
|
-
// and this component likes to do drag mirrors OR the component where the seg came from
|
|
3950
|
-
// likes to do drag mirrors, then render a drag mirror.
|
|
3951
|
-
if (isEvent && (this.doesDragMirror || sourceSeg && sourceSeg.component.doesDragMirror)) {
|
|
3952
|
-
if (this.mirrorRenderer) {
|
|
3953
|
-
this.mirrorRenderer.renderSegs(segs, { isDragging: true, sourceSeg })
|
|
3954
|
-
}
|
|
3955
|
-
}
|
|
3956
|
-
|
|
3957
|
-
// if it would be impossible to render a drag mirror OR this component likes to render
|
|
3958
|
-
// highlights, then render a highlight.
|
|
3959
|
-
if (!isEvent || this.doesDragHighlight) {
|
|
3960
|
-
if (this.fillRenderer) {
|
|
3961
|
-
this.fillRenderer.renderSegs('highlight', segs)
|
|
3962
|
-
}
|
|
3963
|
-
}
|
|
3964
|
-
}
|
|
3965
|
-
}
|
|
3966
|
-
*/
|
|
3967
4014
|
// Hit System
|
|
3968
4015
|
// -----------------------------------------------------------------------------------------------------------------
|
|
3969
4016
|
DateComponent.prototype.buildPositionCaches = function () {
|
|
@@ -3974,7 +4021,7 @@ var DateComponent = /** @class */ (function (_super) {
|
|
|
3974
4021
|
// Validation
|
|
3975
4022
|
// -----------------------------------------------------------------------------------------------------------------
|
|
3976
4023
|
DateComponent.prototype.isInteractionValid = function (interaction) {
|
|
3977
|
-
var calendar = this.calendar;
|
|
4024
|
+
var calendar = this.context.calendar;
|
|
3978
4025
|
var dateProfile = this.props.dateProfile; // HACK
|
|
3979
4026
|
var instances = interaction.mutatedEvents.instances;
|
|
3980
4027
|
if (dateProfile) { // HACK for DayTile
|
|
@@ -3987,68 +4034,13 @@ var DateComponent = /** @class */ (function (_super) {
|
|
|
3987
4034
|
return isInteractionValid(interaction, calendar);
|
|
3988
4035
|
};
|
|
3989
4036
|
DateComponent.prototype.isDateSelectionValid = function (selection) {
|
|
4037
|
+
var calendar = this.context.calendar;
|
|
3990
4038
|
var dateProfile = this.props.dateProfile; // HACK
|
|
3991
4039
|
if (dateProfile && // HACK for DayTile
|
|
3992
4040
|
!rangeContainsRange(dateProfile.validRange, selection.range)) {
|
|
3993
4041
|
return false;
|
|
3994
4042
|
}
|
|
3995
|
-
return isDateSelectionValid(selection,
|
|
3996
|
-
};
|
|
3997
|
-
// Triggering
|
|
3998
|
-
// -----------------------------------------------------------------------------------------------------------------
|
|
3999
|
-
// TODO: move to Calendar
|
|
4000
|
-
DateComponent.prototype.publiclyTrigger = function (name, args) {
|
|
4001
|
-
var calendar = this.calendar;
|
|
4002
|
-
return calendar.publiclyTrigger(name, args);
|
|
4003
|
-
};
|
|
4004
|
-
DateComponent.prototype.publiclyTriggerAfterSizing = function (name, args) {
|
|
4005
|
-
var calendar = this.calendar;
|
|
4006
|
-
return calendar.publiclyTriggerAfterSizing(name, args);
|
|
4007
|
-
};
|
|
4008
|
-
DateComponent.prototype.hasPublicHandlers = function (name) {
|
|
4009
|
-
var calendar = this.calendar;
|
|
4010
|
-
return calendar.hasPublicHandlers(name);
|
|
4011
|
-
};
|
|
4012
|
-
DateComponent.prototype.triggerRenderedSegs = function (segs, isMirrors) {
|
|
4013
|
-
var calendar = this.calendar;
|
|
4014
|
-
if (this.hasPublicHandlers('eventPositioned')) {
|
|
4015
|
-
for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
|
|
4016
|
-
var seg = segs_1[_i];
|
|
4017
|
-
this.publiclyTriggerAfterSizing('eventPositioned', [
|
|
4018
|
-
{
|
|
4019
|
-
event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
|
|
4020
|
-
isMirror: isMirrors,
|
|
4021
|
-
isStart: seg.isStart,
|
|
4022
|
-
isEnd: seg.isEnd,
|
|
4023
|
-
el: seg.el,
|
|
4024
|
-
view: this // safe to cast because this method is only called on context.view
|
|
4025
|
-
}
|
|
4026
|
-
]);
|
|
4027
|
-
}
|
|
4028
|
-
}
|
|
4029
|
-
if (!calendar.state.loadingLevel) { // avoid initial empty state while pending
|
|
4030
|
-
calendar.afterSizingTriggers._eventsPositioned = [null]; // fire once
|
|
4031
|
-
}
|
|
4032
|
-
};
|
|
4033
|
-
DateComponent.prototype.triggerWillRemoveSegs = function (segs, isMirrors) {
|
|
4034
|
-
var calendar = this.calendar;
|
|
4035
|
-
for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
|
|
4036
|
-
var seg = segs_2[_i];
|
|
4037
|
-
calendar.trigger('eventElRemove', seg.el);
|
|
4038
|
-
}
|
|
4039
|
-
if (this.hasPublicHandlers('eventDestroy')) {
|
|
4040
|
-
for (var _a = 0, segs_3 = segs; _a < segs_3.length; _a++) {
|
|
4041
|
-
var seg = segs_3[_a];
|
|
4042
|
-
this.publiclyTrigger('eventDestroy', [
|
|
4043
|
-
{
|
|
4044
|
-
event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
|
|
4045
|
-
isMirror: isMirrors,
|
|
4046
|
-
el: seg.el,
|
|
4047
|
-
view: this // safe to cast because this method is only called on context.view
|
|
4048
|
-
}
|
|
4049
|
-
]);
|
|
4050
|
-
}
|
|
4051
|
-
}
|
|
4043
|
+
return isDateSelectionValid(selection, calendar);
|
|
4052
4044
|
};
|
|
4053
4045
|
// Pointer Interaction Utils
|
|
4054
4046
|
// -----------------------------------------------------------------------------------------------------------------
|
|
@@ -4663,6 +4655,9 @@ var OptionsManager = /** @class */ (function () {
|
|
|
4663
4655
|
this.compute();
|
|
4664
4656
|
}
|
|
4665
4657
|
OptionsManager.prototype.mutate = function (updates, removals, isDynamic) {
|
|
4658
|
+
if (!Object.keys(updates).length && !removals.length) {
|
|
4659
|
+
return;
|
|
4660
|
+
}
|
|
4666
4661
|
var overrideHash = isDynamic ? this.dynamicOverrides : this.overrides;
|
|
4667
4662
|
__assign(overrideHash, updates);
|
|
4668
4663
|
for (var _i = 0, removals_1 = removals; _i < removals_1.length; _i++) {
|
|
@@ -5173,6 +5168,7 @@ function isSourceDirty(eventSource, fetchRange, calendar) {
|
|
|
5173
5168
|
else {
|
|
5174
5169
|
return !calendar.opt('lazyFetching') ||
|
|
5175
5170
|
!eventSource.fetchRange ||
|
|
5171
|
+
eventSource.isFetching || // always cancel outdated in-progress fetches
|
|
5176
5172
|
fetchRange.start < eventSource.fetchRange.start ||
|
|
5177
5173
|
fetchRange.end > eventSource.fetchRange.end;
|
|
5178
5174
|
}
|
|
@@ -5240,7 +5236,8 @@ function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
|
|
|
5240
5236
|
var eventSource = sourceHash[sourceId];
|
|
5241
5237
|
if (eventSource && // not already removed
|
|
5242
5238
|
fetchId === eventSource.latestFetchId) {
|
|
5243
|
-
return __assign({}, sourceHash, (_a = {}, _a[sourceId] = __assign({}, eventSource, { isFetching: false, fetchRange: fetchRange
|
|
5239
|
+
return __assign({}, sourceHash, (_a = {}, _a[sourceId] = __assign({}, eventSource, { isFetching: false, fetchRange: fetchRange // also serves as a marker that at least one fetch has completed
|
|
5240
|
+
}), _a));
|
|
5244
5241
|
}
|
|
5245
5242
|
return sourceHash;
|
|
5246
5243
|
}
|
|
@@ -5978,8 +5975,8 @@ function buildViewSpec(viewDef, overrideConfigs, optionsManager) {
|
|
|
5978
5975
|
|
|
5979
5976
|
var Toolbar = /** @class */ (function (_super) {
|
|
5980
5977
|
__extends(Toolbar, _super);
|
|
5981
|
-
function Toolbar(
|
|
5982
|
-
var _this = _super.call(this
|
|
5978
|
+
function Toolbar(extraClassName) {
|
|
5979
|
+
var _this = _super.call(this) || this;
|
|
5983
5980
|
_this._renderLayout = memoizeRendering(_this.renderLayout, _this.unrenderLayout);
|
|
5984
5981
|
_this._updateTitle = memoizeRendering(_this.updateTitle, null, [_this._renderLayout]);
|
|
5985
5982
|
_this._updateActiveButton = memoizeRendering(_this.updateActiveButton, null, [_this._renderLayout]);
|
|
@@ -6014,7 +6011,7 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
6014
6011
|
};
|
|
6015
6012
|
Toolbar.prototype.renderSection = function (position, buttonStr) {
|
|
6016
6013
|
var _this = this;
|
|
6017
|
-
var _a = this, theme = _a.theme, calendar = _a.calendar;
|
|
6014
|
+
var _a = this.context, theme = _a.theme, calendar = _a.calendar;
|
|
6018
6015
|
var optionsManager = calendar.optionsManager;
|
|
6019
6016
|
var viewSpecs = calendar.viewSpecs;
|
|
6020
6017
|
var sectionEl = createElement('div', { className: 'fc-' + position });
|
|
@@ -6122,7 +6119,8 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
6122
6119
|
});
|
|
6123
6120
|
};
|
|
6124
6121
|
Toolbar.prototype.updateActiveButton = function (buttonName) {
|
|
6125
|
-
var
|
|
6122
|
+
var theme = this.context.theme;
|
|
6123
|
+
var className = theme.getClass('buttonActive');
|
|
6126
6124
|
findElements(this.el, 'button').forEach(function (buttonEl) {
|
|
6127
6125
|
if (buttonName && buttonEl.classList.contains('fc-' + buttonName + '-button')) {
|
|
6128
6126
|
buttonEl.classList.add(className);
|
|
@@ -6142,24 +6140,29 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
6142
6140
|
|
|
6143
6141
|
var CalendarComponent = /** @class */ (function (_super) {
|
|
6144
6142
|
__extends(CalendarComponent, _super);
|
|
6145
|
-
function CalendarComponent(
|
|
6146
|
-
var _this = _super.call(this
|
|
6147
|
-
_this.
|
|
6143
|
+
function CalendarComponent(el) {
|
|
6144
|
+
var _this = _super.call(this) || this;
|
|
6145
|
+
_this.elClassNames = [];
|
|
6146
|
+
_this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
|
|
6147
|
+
_this.renderToolbars = memoizeRendering(_this._renderToolbars, _this._unrenderToolbars, [_this.renderSkeleton]);
|
|
6148
|
+
_this.buildComponentContext = memoize(buildComponentContext);
|
|
6148
6149
|
_this.buildViewPropTransformers = memoize(buildViewPropTransformers);
|
|
6149
6150
|
_this.el = el;
|
|
6150
|
-
prependToElement(el, _this.contentEl = createElement('div', { className: 'fc-view-container' }));
|
|
6151
|
-
var calendar = _this.calendar;
|
|
6152
|
-
for (var _i = 0, _a = calendar.pluginSystem.hooks.viewContainerModifiers; _i < _a.length; _i++) {
|
|
6153
|
-
var modifyViewContainer = _a[_i];
|
|
6154
|
-
modifyViewContainer(_this.contentEl, calendar);
|
|
6155
|
-
}
|
|
6156
|
-
_this.toggleElClassNames(true);
|
|
6157
6151
|
_this.computeTitle = memoize(computeTitle);
|
|
6158
6152
|
_this.parseBusinessHours = memoize(function (input) {
|
|
6159
|
-
return parseBusinessHours(input, _this.calendar);
|
|
6153
|
+
return parseBusinessHours(input, _this.context.calendar);
|
|
6160
6154
|
});
|
|
6161
6155
|
return _this;
|
|
6162
6156
|
}
|
|
6157
|
+
CalendarComponent.prototype.render = function (props, context) {
|
|
6158
|
+
this.freezeHeight();
|
|
6159
|
+
var title = this.computeTitle(props.dateProfile, props.viewSpec.options);
|
|
6160
|
+
this.renderSkeleton(context);
|
|
6161
|
+
this.renderToolbars(props.viewSpec, props.dateProfile, props.currentDate, title);
|
|
6162
|
+
this.renderView(props, title);
|
|
6163
|
+
this.updateSize();
|
|
6164
|
+
this.thawHeight();
|
|
6165
|
+
};
|
|
6163
6166
|
CalendarComponent.prototype.destroy = function () {
|
|
6164
6167
|
if (this.header) {
|
|
6165
6168
|
this.header.destroy();
|
|
@@ -6167,40 +6170,57 @@ var CalendarComponent = /** @class */ (function (_super) {
|
|
|
6167
6170
|
if (this.footer) {
|
|
6168
6171
|
this.footer.destroy();
|
|
6169
6172
|
}
|
|
6173
|
+
this.renderSkeleton.unrender(); // will call destroyView
|
|
6174
|
+
_super.prototype.destroy.call(this);
|
|
6175
|
+
};
|
|
6176
|
+
CalendarComponent.prototype._renderSkeleton = function (context) {
|
|
6177
|
+
this.updateElClassNames(context);
|
|
6178
|
+
prependToElement(this.el, this.contentEl = createElement('div', { className: 'fc-view-container' }));
|
|
6179
|
+
var calendar = context.calendar;
|
|
6180
|
+
for (var _i = 0, _a = calendar.pluginSystem.hooks.viewContainerModifiers; _i < _a.length; _i++) {
|
|
6181
|
+
var modifyViewContainer = _a[_i];
|
|
6182
|
+
modifyViewContainer(this.contentEl, calendar);
|
|
6183
|
+
}
|
|
6184
|
+
};
|
|
6185
|
+
CalendarComponent.prototype._unrenderSkeleton = function () {
|
|
6186
|
+
// weird to have this here
|
|
6170
6187
|
if (this.view) {
|
|
6188
|
+
this.savedScroll = this.view.queryScroll();
|
|
6171
6189
|
this.view.destroy();
|
|
6190
|
+
this.view = null;
|
|
6172
6191
|
}
|
|
6173
6192
|
removeElement(this.contentEl);
|
|
6174
|
-
this.
|
|
6175
|
-
_super.prototype.destroy.call(this);
|
|
6193
|
+
this.removeElClassNames();
|
|
6176
6194
|
};
|
|
6177
|
-
CalendarComponent.prototype.
|
|
6195
|
+
CalendarComponent.prototype.removeElClassNames = function () {
|
|
6178
6196
|
var classList = this.el.classList;
|
|
6179
|
-
var
|
|
6180
|
-
|
|
6181
|
-
|
|
6182
|
-
|
|
6183
|
-
|
|
6184
|
-
|
|
6185
|
-
|
|
6186
|
-
|
|
6187
|
-
|
|
6188
|
-
|
|
6189
|
-
|
|
6190
|
-
|
|
6191
|
-
|
|
6192
|
-
|
|
6193
|
-
this.
|
|
6194
|
-
var
|
|
6195
|
-
|
|
6196
|
-
|
|
6197
|
-
|
|
6198
|
-
|
|
6199
|
-
|
|
6200
|
-
|
|
6201
|
-
var
|
|
6202
|
-
var
|
|
6203
|
-
var
|
|
6197
|
+
for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) {
|
|
6198
|
+
var className = _a[_i];
|
|
6199
|
+
classList.remove(className);
|
|
6200
|
+
}
|
|
6201
|
+
this.elClassNames = [];
|
|
6202
|
+
};
|
|
6203
|
+
CalendarComponent.prototype.updateElClassNames = function (context) {
|
|
6204
|
+
this.removeElClassNames();
|
|
6205
|
+
var theme = context.theme, options = context.options;
|
|
6206
|
+
this.elClassNames = [
|
|
6207
|
+
'fc',
|
|
6208
|
+
'fc-' + options.dir,
|
|
6209
|
+
theme.getClass('widget')
|
|
6210
|
+
];
|
|
6211
|
+
var classList = this.el.classList;
|
|
6212
|
+
for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) {
|
|
6213
|
+
var className = _a[_i];
|
|
6214
|
+
classList.add(className);
|
|
6215
|
+
}
|
|
6216
|
+
};
|
|
6217
|
+
CalendarComponent.prototype._renderToolbars = function (viewSpec, dateProfile, currentDate, title) {
|
|
6218
|
+
var _a = this, context = _a.context, header = _a.header, footer = _a.footer;
|
|
6219
|
+
var options = context.options, calendar = context.calendar;
|
|
6220
|
+
var headerLayout = options.header;
|
|
6221
|
+
var footerLayout = options.footer;
|
|
6222
|
+
var dateProfileGenerator = this.props.dateProfileGenerator;
|
|
6223
|
+
var now = calendar.getNow();
|
|
6204
6224
|
var todayInfo = dateProfileGenerator.build(now);
|
|
6205
6225
|
var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate);
|
|
6206
6226
|
var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate);
|
|
@@ -6212,48 +6232,55 @@ var CalendarComponent = /** @class */ (function (_super) {
|
|
|
6212
6232
|
isNextEnabled: nextInfo.isValid
|
|
6213
6233
|
};
|
|
6214
6234
|
if (headerLayout) {
|
|
6215
|
-
if (!
|
|
6216
|
-
this.header = new Toolbar(
|
|
6217
|
-
prependToElement(this.el,
|
|
6235
|
+
if (!header) {
|
|
6236
|
+
header = this.header = new Toolbar('fc-header-toolbar');
|
|
6237
|
+
prependToElement(this.el, header.el);
|
|
6218
6238
|
}
|
|
6219
|
-
|
|
6239
|
+
header.receiveProps(__assign({ layout: headerLayout }, toolbarProps), context);
|
|
6220
6240
|
}
|
|
6221
|
-
else if (
|
|
6222
|
-
|
|
6223
|
-
this.header = null;
|
|
6241
|
+
else if (header) {
|
|
6242
|
+
header.destroy();
|
|
6243
|
+
header = this.header = null;
|
|
6224
6244
|
}
|
|
6225
6245
|
if (footerLayout) {
|
|
6226
|
-
if (!
|
|
6227
|
-
this.footer = new Toolbar(
|
|
6228
|
-
appendToElement(this.el,
|
|
6246
|
+
if (!footer) {
|
|
6247
|
+
footer = this.footer = new Toolbar('fc-footer-toolbar');
|
|
6248
|
+
appendToElement(this.el, footer.el);
|
|
6229
6249
|
}
|
|
6230
|
-
|
|
6250
|
+
footer.receiveProps(__assign({ layout: footerLayout }, toolbarProps), context);
|
|
6251
|
+
}
|
|
6252
|
+
else if (footer) {
|
|
6253
|
+
footer.destroy();
|
|
6254
|
+
footer = this.footer = null;
|
|
6255
|
+
}
|
|
6256
|
+
};
|
|
6257
|
+
CalendarComponent.prototype._unrenderToolbars = function () {
|
|
6258
|
+
if (this.header) {
|
|
6259
|
+
this.header.destroy();
|
|
6260
|
+
this.header = null;
|
|
6231
6261
|
}
|
|
6232
|
-
|
|
6262
|
+
if (this.footer) {
|
|
6233
6263
|
this.footer.destroy();
|
|
6234
6264
|
this.footer = null;
|
|
6235
6265
|
}
|
|
6236
6266
|
};
|
|
6237
6267
|
CalendarComponent.prototype.renderView = function (props, title) {
|
|
6238
6268
|
var view = this.view;
|
|
6269
|
+
var _a = this.context, calendar = _a.calendar, options = _a.options;
|
|
6239
6270
|
var viewSpec = props.viewSpec, dateProfileGenerator = props.dateProfileGenerator;
|
|
6240
6271
|
if (!view || view.viewSpec !== viewSpec) {
|
|
6241
6272
|
if (view) {
|
|
6242
6273
|
view.destroy();
|
|
6243
6274
|
}
|
|
6244
|
-
view = this.view = new viewSpec['class'](
|
|
6245
|
-
|
|
6246
|
-
view
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
options: viewSpec.options
|
|
6250
|
-
}, viewSpec, dateProfileGenerator, this.contentEl);
|
|
6251
|
-
}
|
|
6252
|
-
else {
|
|
6253
|
-
view.addScroll(view.queryScroll());
|
|
6275
|
+
view = this.view = new viewSpec['class'](viewSpec, this.contentEl);
|
|
6276
|
+
if (this.savedScroll) {
|
|
6277
|
+
view.addScroll(this.savedScroll, true);
|
|
6278
|
+
this.savedScroll = null;
|
|
6279
|
+
}
|
|
6254
6280
|
}
|
|
6255
6281
|
view.title = title; // for the API
|
|
6256
6282
|
var viewProps = {
|
|
6283
|
+
dateProfileGenerator: dateProfileGenerator,
|
|
6257
6284
|
dateProfile: props.dateProfile,
|
|
6258
6285
|
businessHours: this.parseBusinessHours(viewSpec.options.businessHours),
|
|
6259
6286
|
eventStore: props.eventStore,
|
|
@@ -6263,20 +6290,20 @@ var CalendarComponent = /** @class */ (function (_super) {
|
|
|
6263
6290
|
eventDrag: props.eventDrag,
|
|
6264
6291
|
eventResize: props.eventResize
|
|
6265
6292
|
};
|
|
6266
|
-
var transformers = this.buildViewPropTransformers(
|
|
6293
|
+
var transformers = this.buildViewPropTransformers(calendar.pluginSystem.hooks.viewPropsTransformers);
|
|
6267
6294
|
for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
|
|
6268
6295
|
var transformer = transformers_1[_i];
|
|
6269
|
-
__assign(viewProps, transformer.transform(viewProps, viewSpec, props,
|
|
6296
|
+
__assign(viewProps, transformer.transform(viewProps, viewSpec, props, options));
|
|
6270
6297
|
}
|
|
6271
|
-
view.receiveProps(viewProps);
|
|
6298
|
+
view.receiveProps(viewProps, this.buildComponentContext(this.context, viewSpec, view));
|
|
6272
6299
|
};
|
|
6273
6300
|
// Sizing
|
|
6274
6301
|
// -----------------------------------------------------------------------------------------------------------------
|
|
6275
6302
|
CalendarComponent.prototype.updateSize = function (isResize) {
|
|
6276
6303
|
if (isResize === void 0) { isResize = false; }
|
|
6277
6304
|
var view = this.view;
|
|
6278
|
-
if (
|
|
6279
|
-
|
|
6305
|
+
if (!view) {
|
|
6306
|
+
return; // why?
|
|
6280
6307
|
}
|
|
6281
6308
|
if (isResize || this.isHeightAuto == null) {
|
|
6282
6309
|
this.computeHeightVars();
|
|
@@ -6286,7 +6313,7 @@ var CalendarComponent = /** @class */ (function (_super) {
|
|
|
6286
6313
|
view.popScroll(isResize);
|
|
6287
6314
|
};
|
|
6288
6315
|
CalendarComponent.prototype.computeHeightVars = function () {
|
|
6289
|
-
var calendar = this.calendar; // yuck. need to handle dynamic options
|
|
6316
|
+
var calendar = this.context.calendar; // yuck. need to handle dynamic options
|
|
6290
6317
|
var heightInput = calendar.opt('height');
|
|
6291
6318
|
var contentHeightInput = calendar.opt('contentHeight');
|
|
6292
6319
|
this.isHeightAuto = heightInput === 'auto' || contentHeightInput === 'auto';
|
|
@@ -6349,7 +6376,7 @@ function computeTitle(dateProfile, viewOptions) {
|
|
|
6349
6376
|
else { // for day units or smaller, use the actual day range
|
|
6350
6377
|
range = dateProfile.activeRange;
|
|
6351
6378
|
}
|
|
6352
|
-
return this.dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || computeTitleFormat(dateProfile), viewOptions.titleRangeSeparator), { isEndExclusive: dateProfile.isRangeAllDay });
|
|
6379
|
+
return this.context.dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || computeTitleFormat(dateProfile), viewOptions.titleRangeSeparator), { isEndExclusive: dateProfile.isRangeAllDay });
|
|
6353
6380
|
}
|
|
6354
6381
|
// Generates the format string that should be used to generate the title for the current date range.
|
|
6355
6382
|
// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.
|
|
@@ -6373,6 +6400,10 @@ function computeTitleFormat(dateProfile) {
|
|
|
6373
6400
|
}
|
|
6374
6401
|
}
|
|
6375
6402
|
}
|
|
6403
|
+
// build a context scoped to the view
|
|
6404
|
+
function buildComponentContext(context, viewSpec, view) {
|
|
6405
|
+
return context.extend(viewSpec.options, view);
|
|
6406
|
+
}
|
|
6376
6407
|
// Plugin
|
|
6377
6408
|
// -----------------------------------------------------------------------------------------------------------------
|
|
6378
6409
|
function buildViewPropTransformers(theClasses) {
|
|
@@ -6414,6 +6445,7 @@ var EventClicking = /** @class */ (function (_super) {
|
|
|
6414
6445
|
var _this = _super.call(this, settings) || this;
|
|
6415
6446
|
_this.handleSegClick = function (ev, segEl) {
|
|
6416
6447
|
var component = _this.component;
|
|
6448
|
+
var _a = component.context, calendar = _a.calendar, view = _a.view;
|
|
6417
6449
|
var seg = getElSeg(segEl);
|
|
6418
6450
|
if (seg && // might be the <div> surrounding the more link
|
|
6419
6451
|
component.isValidSegDownEl(ev.target)) {
|
|
@@ -6421,12 +6453,12 @@ var EventClicking = /** @class */ (function (_super) {
|
|
|
6421
6453
|
// grab before trigger fired in case trigger trashes DOM thru rerendering
|
|
6422
6454
|
var hasUrlContainer = elementClosest(ev.target, '.fc-has-url');
|
|
6423
6455
|
var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
|
|
6424
|
-
|
|
6456
|
+
calendar.publiclyTrigger('eventClick', [
|
|
6425
6457
|
{
|
|
6426
6458
|
el: segEl,
|
|
6427
|
-
event: new EventApi(component.calendar, seg.eventRange.def, seg.eventRange.instance),
|
|
6459
|
+
event: new EventApi(component.context.calendar, seg.eventRange.def, seg.eventRange.instance),
|
|
6428
6460
|
jsEvent: ev,
|
|
6429
|
-
view:
|
|
6461
|
+
view: view
|
|
6430
6462
|
}
|
|
6431
6463
|
]);
|
|
6432
6464
|
if (url && !ev.defaultPrevented) {
|
|
@@ -6471,23 +6503,25 @@ var EventHovering = /** @class */ (function (_super) {
|
|
|
6471
6503
|
};
|
|
6472
6504
|
var component = settings.component;
|
|
6473
6505
|
_this.removeHoverListeners = listenToHoverBySelector(component.el, component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegEnter, _this.handleSegLeave);
|
|
6474
|
-
component
|
|
6506
|
+
// how to make sure component already has context?
|
|
6507
|
+
component.context.calendar.on('eventElRemove', _this.handleEventElRemove);
|
|
6475
6508
|
return _this;
|
|
6476
6509
|
}
|
|
6477
6510
|
EventHovering.prototype.destroy = function () {
|
|
6478
6511
|
this.removeHoverListeners();
|
|
6479
|
-
this.component.calendar.off('eventElRemove', this.handleEventElRemove);
|
|
6512
|
+
this.component.context.calendar.off('eventElRemove', this.handleEventElRemove);
|
|
6480
6513
|
};
|
|
6481
6514
|
EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) {
|
|
6482
6515
|
var component = this.component;
|
|
6516
|
+
var _a = component.context, calendar = _a.calendar, view = _a.view;
|
|
6483
6517
|
var seg = getElSeg(segEl);
|
|
6484
6518
|
if (!ev || component.isValidSegDownEl(ev.target)) {
|
|
6485
|
-
|
|
6519
|
+
calendar.publiclyTrigger(publicEvName, [
|
|
6486
6520
|
{
|
|
6487
6521
|
el: segEl,
|
|
6488
|
-
event: new EventApi(
|
|
6522
|
+
event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
|
|
6489
6523
|
jsEvent: ev,
|
|
6490
|
-
view:
|
|
6524
|
+
view: view
|
|
6491
6525
|
}
|
|
6492
6526
|
]);
|
|
6493
6527
|
}
|
|
@@ -6532,6 +6566,7 @@ StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';
|
|
|
6532
6566
|
var Calendar = /** @class */ (function () {
|
|
6533
6567
|
function Calendar(el, overrides) {
|
|
6534
6568
|
var _this = this;
|
|
6569
|
+
this.buildComponentContext = memoize(buildComponentContext$1);
|
|
6535
6570
|
this.parseRawLocales = memoize(parseRawLocales);
|
|
6536
6571
|
this.buildLocale = memoize(buildLocale);
|
|
6537
6572
|
this.buildDateEnv = memoize(buildDateEnv);
|
|
@@ -6545,7 +6580,6 @@ var Calendar = /** @class */ (function () {
|
|
|
6545
6580
|
this.isReducing = false;
|
|
6546
6581
|
// isDisplaying: boolean = false // installed in DOM? accepting renders?
|
|
6547
6582
|
this.needsRerender = false; // needs a render?
|
|
6548
|
-
this.needsFullRerender = false;
|
|
6549
6583
|
this.isRendering = false; // currently in the executeRender function?
|
|
6550
6584
|
this.renderingPauseDepth = 0;
|
|
6551
6585
|
this.buildDelayedRerender = memoize(buildDelayedRerender);
|
|
@@ -6585,12 +6619,13 @@ var Calendar = /** @class */ (function () {
|
|
|
6585
6619
|
// -----------------------------------------------------------------------------------------------------------------
|
|
6586
6620
|
Calendar.prototype.render = function () {
|
|
6587
6621
|
if (!this.component) {
|
|
6622
|
+
this.component = new CalendarComponent(this.el);
|
|
6588
6623
|
this.renderableEventStore = createEmptyEventStore();
|
|
6589
6624
|
this.bindHandlers();
|
|
6590
6625
|
this.executeRender();
|
|
6591
6626
|
}
|
|
6592
6627
|
else {
|
|
6593
|
-
this.requestRerender(
|
|
6628
|
+
this.requestRerender();
|
|
6594
6629
|
}
|
|
6595
6630
|
};
|
|
6596
6631
|
Calendar.prototype.destroy = function () {
|
|
@@ -6699,12 +6734,12 @@ var Calendar = /** @class */ (function () {
|
|
|
6699
6734
|
this.publiclyTrigger('loading', [false]);
|
|
6700
6735
|
}
|
|
6701
6736
|
var view = this.component && this.component.view;
|
|
6702
|
-
if (oldState.eventStore !== newState.eventStore
|
|
6737
|
+
if (oldState.eventStore !== newState.eventStore) {
|
|
6703
6738
|
if (oldState.eventStore) {
|
|
6704
6739
|
this.isEventsUpdated = true;
|
|
6705
6740
|
}
|
|
6706
6741
|
}
|
|
6707
|
-
if (oldState.dateProfile !== newState.dateProfile
|
|
6742
|
+
if (oldState.dateProfile !== newState.dateProfile) {
|
|
6708
6743
|
if (oldState.dateProfile && view) { // why would view be null!?
|
|
6709
6744
|
this.publiclyTrigger('datesDestroy', [
|
|
6710
6745
|
{
|
|
@@ -6715,7 +6750,7 @@ var Calendar = /** @class */ (function () {
|
|
|
6715
6750
|
}
|
|
6716
6751
|
this.isDatesUpdated = true;
|
|
6717
6752
|
}
|
|
6718
|
-
if (oldState.viewType !== newState.viewType
|
|
6753
|
+
if (oldState.viewType !== newState.viewType) {
|
|
6719
6754
|
if (oldState.viewType && view) { // why would view be null!?
|
|
6720
6755
|
this.publiclyTrigger('viewSkeletonDestroy', [
|
|
6721
6756
|
{
|
|
@@ -6734,10 +6769,8 @@ var Calendar = /** @class */ (function () {
|
|
|
6734
6769
|
};
|
|
6735
6770
|
// Render Queue
|
|
6736
6771
|
// -----------------------------------------------------------------------------------------------------------------
|
|
6737
|
-
Calendar.prototype.requestRerender = function (
|
|
6738
|
-
if (needsFull === void 0) { needsFull = false; }
|
|
6772
|
+
Calendar.prototype.requestRerender = function () {
|
|
6739
6773
|
this.needsRerender = true;
|
|
6740
|
-
this.needsFullRerender = this.needsFullRerender || needsFull;
|
|
6741
6774
|
this.delayedRerender(); // will call a debounced-version of tryRerender
|
|
6742
6775
|
};
|
|
6743
6776
|
Calendar.prototype.tryRerender = function () {
|
|
@@ -6760,12 +6793,10 @@ var Calendar = /** @class */ (function () {
|
|
|
6760
6793
|
// Rendering
|
|
6761
6794
|
// -----------------------------------------------------------------------------------------------------------------
|
|
6762
6795
|
Calendar.prototype.executeRender = function () {
|
|
6763
|
-
var needsFullRerender = this.needsFullRerender; // save before clearing
|
|
6764
6796
|
// clear these BEFORE the render so that new values will accumulate during render
|
|
6765
6797
|
this.needsRerender = false;
|
|
6766
|
-
this.needsFullRerender = false;
|
|
6767
6798
|
this.isRendering = true;
|
|
6768
|
-
this.renderComponent(
|
|
6799
|
+
this.renderComponent();
|
|
6769
6800
|
this.isRendering = false;
|
|
6770
6801
|
// received a rerender request while rendering
|
|
6771
6802
|
if (this.needsRerender) {
|
|
@@ -6775,11 +6806,10 @@ var Calendar = /** @class */ (function () {
|
|
|
6775
6806
|
/*
|
|
6776
6807
|
don't call this directly. use executeRender instead
|
|
6777
6808
|
*/
|
|
6778
|
-
Calendar.prototype.renderComponent = function (
|
|
6809
|
+
Calendar.prototype.renderComponent = function () {
|
|
6779
6810
|
var _a = this, state = _a.state, component = _a.component;
|
|
6780
6811
|
var viewType = state.viewType;
|
|
6781
6812
|
var viewSpec = this.viewSpecs[viewType];
|
|
6782
|
-
var savedScroll = (needsFull && component) ? component.view.queryScroll() : null;
|
|
6783
6813
|
if (!viewSpec) {
|
|
6784
6814
|
throw new Error("View type \"" + viewType + "\" is not valid");
|
|
6785
6815
|
}
|
|
@@ -6792,26 +6822,7 @@ var Calendar = /** @class */ (function () {
|
|
|
6792
6822
|
var eventUiSingleBase = this.buildEventUiSingleBase(viewSpec.options);
|
|
6793
6823
|
var eventUiBySource = this.buildEventUiBySource(state.eventSources);
|
|
6794
6824
|
var eventUiBases = this.eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
|
|
6795
|
-
|
|
6796
|
-
if (component) {
|
|
6797
|
-
component.freezeHeight(); // next component will unfreeze it
|
|
6798
|
-
component.destroy();
|
|
6799
|
-
}
|
|
6800
|
-
component = this.component = new CalendarComponent({
|
|
6801
|
-
calendar: this,
|
|
6802
|
-
view: null,
|
|
6803
|
-
dateEnv: this.dateEnv,
|
|
6804
|
-
theme: this.theme,
|
|
6805
|
-
options: this.optionsManager.computed
|
|
6806
|
-
}, this.el);
|
|
6807
|
-
this.isViewUpdated = true;
|
|
6808
|
-
this.isDatesUpdated = true;
|
|
6809
|
-
this.isEventsUpdated = true;
|
|
6810
|
-
}
|
|
6811
|
-
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 }));
|
|
6812
|
-
if (savedScroll) {
|
|
6813
|
-
component.view.applyScroll(savedScroll, false);
|
|
6814
|
-
}
|
|
6825
|
+
component.receiveProps(__assign({}, state, { viewSpec: viewSpec, dateProfileGenerator: this.dateProfileGenerators[viewType], dateProfile: state.dateProfile, eventStore: renderableEventStore, eventUiBases: eventUiBases, dateSelection: state.dateSelection, eventSelection: state.eventSelection, eventDrag: state.eventDrag, eventResize: state.eventResize }), this.buildComponentContext(this.theme, this.dateEnv, this.optionsManager.computed));
|
|
6815
6826
|
if (this.isViewUpdated) {
|
|
6816
6827
|
this.isViewUpdated = false;
|
|
6817
6828
|
this.publiclyTrigger('viewSkeletonRender', [
|
|
@@ -6888,7 +6899,6 @@ var Calendar = /** @class */ (function () {
|
|
|
6888
6899
|
this.optionsManager.mutate(normalUpdates, removals, isDynamic);
|
|
6889
6900
|
if (anyDifficultOptions) {
|
|
6890
6901
|
this.handleOptions(this.optionsManager.computed);
|
|
6891
|
-
this.needsFullRerender = true;
|
|
6892
6902
|
}
|
|
6893
6903
|
this.batchRendering(function () {
|
|
6894
6904
|
if (anyDifficultOptions) {
|
|
@@ -6899,7 +6909,7 @@ var Calendar = /** @class */ (function () {
|
|
|
6899
6909
|
});
|
|
6900
6910
|
}
|
|
6901
6911
|
/* HACK
|
|
6902
|
-
has the same effect as calling this.requestRerender(
|
|
6912
|
+
has the same effect as calling this.requestRerender()
|
|
6903
6913
|
but recomputes the state's dateProfile
|
|
6904
6914
|
*/
|
|
6905
6915
|
_this.dispatch({
|
|
@@ -7405,6 +7415,9 @@ var Calendar = /** @class */ (function () {
|
|
|
7405
7415
|
EmitterMixin.mixInto(Calendar);
|
|
7406
7416
|
// for memoizers
|
|
7407
7417
|
// -----------------------------------------------------------------------------------------------------------------
|
|
7418
|
+
function buildComponentContext$1(theme, dateEnv, options) {
|
|
7419
|
+
return new ComponentContext(this, theme, dateEnv, options, null);
|
|
7420
|
+
}
|
|
7408
7421
|
function buildDateEnv(locale, timeZone, namedTimeZoneImpl, firstDay, weekNumberCalculation, weekLabel, cmdFormatter) {
|
|
7409
7422
|
return new DateEnv({
|
|
7410
7423
|
calendarSystem: 'gregory',
|
|
@@ -7446,9 +7459,8 @@ function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
|
|
|
7446
7459
|
|
|
7447
7460
|
var View = /** @class */ (function (_super) {
|
|
7448
7461
|
__extends(View, _super);
|
|
7449
|
-
function View(
|
|
7450
|
-
var _this = _super.call(this,
|
|
7451
|
-
) || this;
|
|
7462
|
+
function View(viewSpec, parentEl) {
|
|
7463
|
+
var _this = _super.call(this, createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' })) || this;
|
|
7452
7464
|
_this.renderDatesMem = memoizeRendering(_this.renderDatesWrap, _this.unrenderDatesWrap);
|
|
7453
7465
|
_this.renderBusinessHoursMem = memoizeRendering(_this.renderBusinessHours, _this.unrenderBusinessHours, [_this.renderDatesMem]);
|
|
7454
7466
|
_this.renderDateSelectionMem = memoizeRendering(_this.renderDateSelectionWrap, _this.unrenderDateSelectionWrap, [_this.renderDatesMem]);
|
|
@@ -7457,10 +7469,7 @@ var View = /** @class */ (function (_super) {
|
|
|
7457
7469
|
_this.renderEventDragMem = memoizeRendering(_this.renderEventDragWrap, _this.unrenderEventDragWrap, [_this.renderDatesMem]);
|
|
7458
7470
|
_this.renderEventResizeMem = memoizeRendering(_this.renderEventResizeWrap, _this.unrenderEventResizeWrap, [_this.renderDatesMem]);
|
|
7459
7471
|
_this.viewSpec = viewSpec;
|
|
7460
|
-
_this.dateProfileGenerator = dateProfileGenerator;
|
|
7461
7472
|
_this.type = viewSpec.type;
|
|
7462
|
-
_this.eventOrderSpecs = parseFieldSpecs(_this.opt('eventOrder'));
|
|
7463
|
-
_this.nextDayThreshold = createDuration(_this.opt('nextDayThreshold'));
|
|
7464
7473
|
parentEl.appendChild(_this.el);
|
|
7465
7474
|
_this.initialize();
|
|
7466
7475
|
return _this;
|
|
@@ -7471,35 +7480,35 @@ var View = /** @class */ (function (_super) {
|
|
|
7471
7480
|
// Date Setting/Unsetting
|
|
7472
7481
|
// -----------------------------------------------------------------------------------------------------------------
|
|
7473
7482
|
get: function () {
|
|
7474
|
-
return this.dateEnv.toDate(this.props.dateProfile.activeRange.start);
|
|
7483
|
+
return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.start);
|
|
7475
7484
|
},
|
|
7476
7485
|
enumerable: true,
|
|
7477
7486
|
configurable: true
|
|
7478
7487
|
});
|
|
7479
7488
|
Object.defineProperty(View.prototype, "activeEnd", {
|
|
7480
7489
|
get: function () {
|
|
7481
|
-
return this.dateEnv.toDate(this.props.dateProfile.activeRange.end);
|
|
7490
|
+
return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.end);
|
|
7482
7491
|
},
|
|
7483
7492
|
enumerable: true,
|
|
7484
7493
|
configurable: true
|
|
7485
7494
|
});
|
|
7486
7495
|
Object.defineProperty(View.prototype, "currentStart", {
|
|
7487
7496
|
get: function () {
|
|
7488
|
-
return this.dateEnv.toDate(this.props.dateProfile.currentRange.start);
|
|
7497
|
+
return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.start);
|
|
7489
7498
|
},
|
|
7490
7499
|
enumerable: true,
|
|
7491
7500
|
configurable: true
|
|
7492
7501
|
});
|
|
7493
7502
|
Object.defineProperty(View.prototype, "currentEnd", {
|
|
7494
7503
|
get: function () {
|
|
7495
|
-
return this.dateEnv.toDate(this.props.dateProfile.currentRange.end);
|
|
7504
|
+
return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.end);
|
|
7496
7505
|
},
|
|
7497
7506
|
enumerable: true,
|
|
7498
7507
|
configurable: true
|
|
7499
7508
|
});
|
|
7500
7509
|
// General Rendering
|
|
7501
7510
|
// -----------------------------------------------------------------------------------------------------------------
|
|
7502
|
-
View.prototype.render = function (props) {
|
|
7511
|
+
View.prototype.render = function (props, context) {
|
|
7503
7512
|
this.renderDatesMem(props.dateProfile);
|
|
7504
7513
|
this.renderBusinessHoursMem(props.businessHours);
|
|
7505
7514
|
this.renderDateSelectionMem(props.dateSelection);
|
|
@@ -7508,6 +7517,9 @@ var View = /** @class */ (function (_super) {
|
|
|
7508
7517
|
this.renderEventDragMem(props.eventDrag);
|
|
7509
7518
|
this.renderEventResizeMem(props.eventResize);
|
|
7510
7519
|
};
|
|
7520
|
+
View.prototype.beforeUpdate = function () {
|
|
7521
|
+
this.addScroll(this.queryScroll());
|
|
7522
|
+
};
|
|
7511
7523
|
View.prototype.destroy = function () {
|
|
7512
7524
|
_super.prototype.destroy.call(this);
|
|
7513
7525
|
this.renderDatesMem.unrender(); // should unrender everything else
|
|
@@ -7515,7 +7527,10 @@ var View = /** @class */ (function (_super) {
|
|
|
7515
7527
|
// Sizing
|
|
7516
7528
|
// -----------------------------------------------------------------------------------------------------------------
|
|
7517
7529
|
View.prototype.updateSize = function (isResize, viewHeight, isAuto) {
|
|
7518
|
-
var calendar = this.calendar;
|
|
7530
|
+
var calendar = this.context.calendar;
|
|
7531
|
+
if (isResize) {
|
|
7532
|
+
this.addScroll(this.queryScroll()); // NOTE: same code as in beforeUpdate
|
|
7533
|
+
}
|
|
7519
7534
|
if (isResize || // HACKS...
|
|
7520
7535
|
calendar.isViewUpdated ||
|
|
7521
7536
|
calendar.isDatesUpdated ||
|
|
@@ -7524,6 +7539,7 @@ var View = /** @class */ (function (_super) {
|
|
|
7524
7539
|
// anything that might cause dimension changes
|
|
7525
7540
|
this.updateBaseSize(isResize, viewHeight, isAuto);
|
|
7526
7541
|
}
|
|
7542
|
+
// NOTE: popScroll is called by CalendarComponent
|
|
7527
7543
|
};
|
|
7528
7544
|
View.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
|
|
7529
7545
|
};
|
|
@@ -7532,9 +7548,8 @@ var View = /** @class */ (function (_super) {
|
|
|
7532
7548
|
View.prototype.renderDatesWrap = function (dateProfile) {
|
|
7533
7549
|
this.renderDates(dateProfile);
|
|
7534
7550
|
this.addScroll({
|
|
7535
|
-
duration: createDuration(this.
|
|
7551
|
+
duration: createDuration(this.context.options.scrollTime)
|
|
7536
7552
|
});
|
|
7537
|
-
this.startNowIndicator(dateProfile); // shouldn't render yet because updateSize will be called soon
|
|
7538
7553
|
};
|
|
7539
7554
|
View.prototype.unrenderDatesWrap = function () {
|
|
7540
7555
|
this.stopNowIndicator();
|
|
@@ -7567,22 +7582,7 @@ var View = /** @class */ (function (_super) {
|
|
|
7567
7582
|
// util for subclasses
|
|
7568
7583
|
View.prototype.sliceEvents = function (eventStore, allDay) {
|
|
7569
7584
|
var props = this.props;
|
|
7570
|
-
return sliceEventStore(eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? this.nextDayThreshold : null).fg;
|
|
7571
|
-
};
|
|
7572
|
-
View.prototype.computeEventDraggable = function (eventDef, eventUi) {
|
|
7573
|
-
var transformers = this.calendar.pluginSystem.hooks.isDraggableTransformers;
|
|
7574
|
-
var val = eventUi.startEditable;
|
|
7575
|
-
for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
|
|
7576
|
-
var transformer = transformers_1[_i];
|
|
7577
|
-
val = transformer(val, eventDef, eventUi, this);
|
|
7578
|
-
}
|
|
7579
|
-
return val;
|
|
7580
|
-
};
|
|
7581
|
-
View.prototype.computeEventStartResizable = function (eventDef, eventUi) {
|
|
7582
|
-
return eventUi.durationEditable && this.opt('eventResizableFromStart');
|
|
7583
|
-
};
|
|
7584
|
-
View.prototype.computeEventEndResizable = function (eventDef, eventUi) {
|
|
7585
|
-
return eventUi.durationEditable;
|
|
7585
|
+
return sliceEventStore(eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? this.context.nextDayThreshold : null).fg;
|
|
7586
7586
|
};
|
|
7587
7587
|
// Event Selection
|
|
7588
7588
|
// -----------------------------------------------------------------------------------------------------------------
|
|
@@ -7631,17 +7631,18 @@ var View = /** @class */ (function (_super) {
|
|
|
7631
7631
|
// Immediately render the current time indicator and begins re-rendering it at an interval,
|
|
7632
7632
|
// which is defined by this.getNowIndicatorUnit().
|
|
7633
7633
|
// TODO: somehow do this for the current whole day's background too
|
|
7634
|
-
|
|
7634
|
+
// USAGE: must be called manually from subclasses' render methods! don't need to call stopNowIndicator tho
|
|
7635
|
+
View.prototype.startNowIndicator = function (dateProfile, dateProfileGenerator) {
|
|
7635
7636
|
var _this = this;
|
|
7636
|
-
var
|
|
7637
|
+
var _a = this.context, calendar = _a.calendar, dateEnv = _a.dateEnv, options = _a.options;
|
|
7637
7638
|
var unit;
|
|
7638
7639
|
var update;
|
|
7639
7640
|
var delay; // ms wait value
|
|
7640
|
-
if (this.
|
|
7641
|
-
unit = this.getNowIndicatorUnit(dateProfile);
|
|
7641
|
+
if (options.nowIndicator && !this.initialNowDate) {
|
|
7642
|
+
unit = this.getNowIndicatorUnit(dateProfile, dateProfileGenerator);
|
|
7642
7643
|
if (unit) {
|
|
7643
7644
|
update = this.updateNowIndicator.bind(this);
|
|
7644
|
-
this.initialNowDate =
|
|
7645
|
+
this.initialNowDate = calendar.getNow();
|
|
7645
7646
|
this.initialNowQueriedMs = new Date().valueOf();
|
|
7646
7647
|
// wait until the beginning of the next interval
|
|
7647
7648
|
delay = dateEnv.add(dateEnv.startOf(this.initialNowDate, unit), createDuration(1, unit)).valueOf() - this.initialNowDate.valueOf();
|
|
@@ -7675,20 +7676,20 @@ var View = /** @class */ (function (_super) {
|
|
|
7675
7676
|
// Immediately unrenders the view's current time indicator and stops any re-rendering timers.
|
|
7676
7677
|
// Won't cause side effects if indicator isn't rendered.
|
|
7677
7678
|
View.prototype.stopNowIndicator = function () {
|
|
7679
|
+
if (this.nowIndicatorTimeoutID) {
|
|
7680
|
+
clearTimeout(this.nowIndicatorTimeoutID);
|
|
7681
|
+
this.nowIndicatorTimeoutID = null;
|
|
7682
|
+
}
|
|
7683
|
+
if (this.nowIndicatorIntervalID) {
|
|
7684
|
+
clearInterval(this.nowIndicatorIntervalID);
|
|
7685
|
+
this.nowIndicatorIntervalID = null;
|
|
7686
|
+
}
|
|
7678
7687
|
if (this.isNowIndicatorRendered) {
|
|
7679
|
-
if (this.nowIndicatorTimeoutID) {
|
|
7680
|
-
clearTimeout(this.nowIndicatorTimeoutID);
|
|
7681
|
-
this.nowIndicatorTimeoutID = null;
|
|
7682
|
-
}
|
|
7683
|
-
if (this.nowIndicatorIntervalID) {
|
|
7684
|
-
clearInterval(this.nowIndicatorIntervalID);
|
|
7685
|
-
this.nowIndicatorIntervalID = null;
|
|
7686
|
-
}
|
|
7687
7688
|
this.unrenderNowIndicator();
|
|
7688
7689
|
this.isNowIndicatorRendered = false;
|
|
7689
7690
|
}
|
|
7690
7691
|
};
|
|
7691
|
-
View.prototype.getNowIndicatorUnit = function (dateProfile) {
|
|
7692
|
+
View.prototype.getNowIndicatorUnit = function (dateProfile, dateProfileGenerator) {
|
|
7692
7693
|
// subclasses should implement
|
|
7693
7694
|
};
|
|
7694
7695
|
// Renders a current time indicator at the given datetime
|
|
@@ -7701,16 +7702,20 @@ var View = /** @class */ (function (_super) {
|
|
|
7701
7702
|
};
|
|
7702
7703
|
/* Scroller
|
|
7703
7704
|
------------------------------------------------------------------------------------------------------------------*/
|
|
7704
|
-
View.prototype.addScroll = function (scroll) {
|
|
7705
|
-
|
|
7706
|
-
|
|
7705
|
+
View.prototype.addScroll = function (scroll, isForced) {
|
|
7706
|
+
if (isForced) {
|
|
7707
|
+
scroll.isForced = isForced;
|
|
7708
|
+
}
|
|
7709
|
+
__assign(this.queuedScroll || (this.queuedScroll = {}), scroll);
|
|
7707
7710
|
};
|
|
7708
7711
|
View.prototype.popScroll = function (isResize) {
|
|
7709
7712
|
this.applyQueuedScroll(isResize);
|
|
7710
7713
|
this.queuedScroll = null;
|
|
7711
7714
|
};
|
|
7712
7715
|
View.prototype.applyQueuedScroll = function (isResize) {
|
|
7713
|
-
|
|
7716
|
+
if (this.queuedScroll) {
|
|
7717
|
+
this.applyScroll(this.queuedScroll, isResize);
|
|
7718
|
+
}
|
|
7714
7719
|
};
|
|
7715
7720
|
View.prototype.queryScroll = function () {
|
|
7716
7721
|
var scroll = {};
|
|
@@ -7720,8 +7725,8 @@ var View = /** @class */ (function (_super) {
|
|
|
7720
7725
|
return scroll;
|
|
7721
7726
|
};
|
|
7722
7727
|
View.prototype.applyScroll = function (scroll, isResize) {
|
|
7723
|
-
var duration = scroll.duration;
|
|
7724
|
-
if (duration != null) {
|
|
7728
|
+
var duration = scroll.duration, isForced = scroll.isForced;
|
|
7729
|
+
if (duration != null && !isForced) {
|
|
7725
7730
|
delete scroll.duration;
|
|
7726
7731
|
if (this.props.dateProfile) { // dates rendered yet?
|
|
7727
7732
|
__assign(scroll, this.computeDateScroll(duration));
|
|
@@ -7751,12 +7756,12 @@ View.prototype.usesMinMaxTime = false;
|
|
|
7751
7756
|
View.prototype.dateProfileGeneratorClass = DateProfileGenerator;
|
|
7752
7757
|
|
|
7753
7758
|
var FgEventRenderer = /** @class */ (function () {
|
|
7754
|
-
function FgEventRenderer(
|
|
7759
|
+
function FgEventRenderer() {
|
|
7755
7760
|
this.segs = [];
|
|
7756
7761
|
this.isSizeDirty = false;
|
|
7757
|
-
this.context = context;
|
|
7758
7762
|
}
|
|
7759
|
-
FgEventRenderer.prototype.renderSegs = function (segs, mirrorInfo) {
|
|
7763
|
+
FgEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) {
|
|
7764
|
+
this.context = context;
|
|
7760
7765
|
this.rangeUpdated(); // called too frequently :(
|
|
7761
7766
|
// render an `.el` on each seg
|
|
7762
7767
|
// returns a subset of the segs. segs that were actually rendered
|
|
@@ -7764,10 +7769,10 @@ var FgEventRenderer = /** @class */ (function () {
|
|
|
7764
7769
|
this.segs = segs;
|
|
7765
7770
|
this.attachSegs(segs, mirrorInfo);
|
|
7766
7771
|
this.isSizeDirty = true;
|
|
7767
|
-
this.context
|
|
7772
|
+
triggerRenderedSegs(this.context, this.segs, Boolean(mirrorInfo));
|
|
7768
7773
|
};
|
|
7769
|
-
FgEventRenderer.prototype.unrender = function (_segs, mirrorInfo) {
|
|
7770
|
-
this.context
|
|
7774
|
+
FgEventRenderer.prototype.unrender = function (context, _segs, mirrorInfo) {
|
|
7775
|
+
triggerWillRemoveSegs(this.context, this.segs, Boolean(mirrorInfo));
|
|
7771
7776
|
this.detachSegs(this.segs);
|
|
7772
7777
|
this.segs = [];
|
|
7773
7778
|
};
|
|
@@ -7806,7 +7811,7 @@ var FgEventRenderer = /** @class */ (function () {
|
|
|
7806
7811
|
seg.el = el;
|
|
7807
7812
|
}
|
|
7808
7813
|
});
|
|
7809
|
-
segs = filterSegsViaEls(this.context
|
|
7814
|
+
segs = filterSegsViaEls(this.context, segs, Boolean(mirrorInfo));
|
|
7810
7815
|
}
|
|
7811
7816
|
return segs;
|
|
7812
7817
|
};
|
|
@@ -7888,7 +7893,7 @@ var FgEventRenderer = /** @class */ (function () {
|
|
|
7888
7893
|
};
|
|
7889
7894
|
};
|
|
7890
7895
|
FgEventRenderer.prototype.sortEventSegs = function (segs) {
|
|
7891
|
-
var specs = this.context.
|
|
7896
|
+
var specs = this.context.eventOrderSpecs;
|
|
7892
7897
|
var objs = segs.map(buildSegCompareObj);
|
|
7893
7898
|
objs.sort(function (obj0, obj1) {
|
|
7894
7899
|
return compareByFieldSpecs(obj0, obj1, specs);
|
|
@@ -7969,19 +7974,22 @@ function buildSegCompareObj(seg) {
|
|
|
7969
7974
|
});
|
|
7970
7975
|
}
|
|
7971
7976
|
|
|
7977
|
+
/*
|
|
7978
|
+
TODO: when refactoring this class, make a new FillRenderer instance for each `type`
|
|
7979
|
+
*/
|
|
7972
7980
|
var FillRenderer = /** @class */ (function () {
|
|
7973
|
-
function FillRenderer(
|
|
7981
|
+
function FillRenderer() {
|
|
7974
7982
|
this.fillSegTag = 'div';
|
|
7975
7983
|
this.dirtySizeFlags = {};
|
|
7976
|
-
this.context = context;
|
|
7977
7984
|
this.containerElsByType = {};
|
|
7978
7985
|
this.segsByType = {};
|
|
7979
7986
|
}
|
|
7980
7987
|
FillRenderer.prototype.getSegsByType = function (type) {
|
|
7981
7988
|
return this.segsByType[type] || [];
|
|
7982
7989
|
};
|
|
7983
|
-
FillRenderer.prototype.renderSegs = function (type, segs) {
|
|
7990
|
+
FillRenderer.prototype.renderSegs = function (type, context, segs) {
|
|
7984
7991
|
var _a;
|
|
7992
|
+
this.context = context;
|
|
7985
7993
|
var renderedSegs = this.renderSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs
|
|
7986
7994
|
var containerEls = this.attachSegs(type, renderedSegs);
|
|
7987
7995
|
if (containerEls) {
|
|
@@ -7989,16 +7997,16 @@ var FillRenderer = /** @class */ (function () {
|
|
|
7989
7997
|
}
|
|
7990
7998
|
this.segsByType[type] = renderedSegs;
|
|
7991
7999
|
if (type === 'bgEvent') {
|
|
7992
|
-
|
|
8000
|
+
triggerRenderedSegs(context, renderedSegs, false); // isMirror=false
|
|
7993
8001
|
}
|
|
7994
8002
|
this.dirtySizeFlags[type] = true;
|
|
7995
8003
|
};
|
|
7996
8004
|
// Unrenders a specific type of fill that is currently rendered on the grid
|
|
7997
|
-
FillRenderer.prototype.unrender = function (type) {
|
|
8005
|
+
FillRenderer.prototype.unrender = function (type, context) {
|
|
7998
8006
|
var segs = this.segsByType[type];
|
|
7999
8007
|
if (segs) {
|
|
8000
8008
|
if (type === 'bgEvent') {
|
|
8001
|
-
|
|
8009
|
+
triggerWillRemoveSegs(context, segs, false); // isMirror=false
|
|
8002
8010
|
}
|
|
8003
8011
|
this.detachSegs(type, segs);
|
|
8004
8012
|
}
|
|
@@ -8023,7 +8031,7 @@ var FillRenderer = /** @class */ (function () {
|
|
|
8023
8031
|
}
|
|
8024
8032
|
});
|
|
8025
8033
|
if (type === 'bgEvent') {
|
|
8026
|
-
segs = filterSegsViaEls(this.context
|
|
8034
|
+
segs = filterSegsViaEls(this.context, segs, false // isMirror. background events can never be mirror elements
|
|
8027
8035
|
);
|
|
8028
8036
|
}
|
|
8029
8037
|
// correct element type? (would be bad if a non-TD were inserted into a table for example)
|
|
@@ -8189,7 +8197,7 @@ function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
|
|
|
8189
8197
|
}
|
|
8190
8198
|
}
|
|
8191
8199
|
function renderDateCell(dateMarker, dateProfile, datesRepDistinctDays, colCnt, colHeadFormat, context, colspan, otherAttrs) {
|
|
8192
|
-
var
|
|
8200
|
+
var dateEnv = context.dateEnv, theme = context.theme, options = context.options;
|
|
8193
8201
|
var isDateValid = rangeContainsMarker(dateProfile.activeRange, dateMarker); // TODO: called too frequently. cache somehow.
|
|
8194
8202
|
var classNames = [
|
|
8195
8203
|
'fc-day-header',
|
|
@@ -8229,7 +8237,7 @@ function renderDateCell(dateMarker, dateProfile, datesRepDistinctDays, colCnt, c
|
|
|
8229
8237
|
'>' +
|
|
8230
8238
|
(isDateValid ?
|
|
8231
8239
|
// don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)
|
|
8232
|
-
buildGotoAnchorHtml(
|
|
8240
|
+
buildGotoAnchorHtml(options, dateEnv, { date: dateMarker, forceOff: !datesRepDistinctDays || colCnt === 1 }, innerHtml) :
|
|
8233
8241
|
// if not valid, display text, but no link
|
|
8234
8242
|
innerHtml) +
|
|
8235
8243
|
'</th>';
|
|
@@ -8237,37 +8245,48 @@ function renderDateCell(dateMarker, dateProfile, datesRepDistinctDays, colCnt, c
|
|
|
8237
8245
|
|
|
8238
8246
|
var DayHeader = /** @class */ (function (_super) {
|
|
8239
8247
|
__extends(DayHeader, _super);
|
|
8240
|
-
function DayHeader(
|
|
8241
|
-
var _this = _super.call(this
|
|
8242
|
-
|
|
8243
|
-
|
|
8244
|
-
'<table class="' + _this.theme.getClass('tableGrid') + '">' +
|
|
8245
|
-
'<thead></thead>' +
|
|
8246
|
-
'</table>' +
|
|
8247
|
-
'</div>'));
|
|
8248
|
-
_this.thead = _this.el.querySelector('thead');
|
|
8248
|
+
function DayHeader(parentEl) {
|
|
8249
|
+
var _this = _super.call(this) || this;
|
|
8250
|
+
_this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
|
|
8251
|
+
_this.parentEl = parentEl;
|
|
8249
8252
|
return _this;
|
|
8250
8253
|
}
|
|
8251
|
-
DayHeader.prototype.
|
|
8252
|
-
removeElement(this.el);
|
|
8253
|
-
};
|
|
8254
|
-
DayHeader.prototype.render = function (props) {
|
|
8254
|
+
DayHeader.prototype.render = function (props, context) {
|
|
8255
8255
|
var dates = props.dates, datesRepDistinctDays = props.datesRepDistinctDays;
|
|
8256
8256
|
var parts = [];
|
|
8257
|
+
this.renderSkeleton(context);
|
|
8257
8258
|
if (props.renderIntroHtml) {
|
|
8258
8259
|
parts.push(props.renderIntroHtml());
|
|
8259
8260
|
}
|
|
8260
|
-
var colHeadFormat = createFormatter(
|
|
8261
|
+
var colHeadFormat = createFormatter(context.options.columnHeaderFormat ||
|
|
8261
8262
|
computeFallbackHeaderFormat(datesRepDistinctDays, dates.length));
|
|
8262
8263
|
for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {
|
|
8263
8264
|
var date = dates_1[_i];
|
|
8264
|
-
parts.push(renderDateCell(date, props.dateProfile, datesRepDistinctDays, dates.length, colHeadFormat,
|
|
8265
|
+
parts.push(renderDateCell(date, props.dateProfile, datesRepDistinctDays, dates.length, colHeadFormat, context));
|
|
8265
8266
|
}
|
|
8266
|
-
if (
|
|
8267
|
+
if (context.isRtl) {
|
|
8267
8268
|
parts.reverse();
|
|
8268
8269
|
}
|
|
8269
8270
|
this.thead.innerHTML = '<tr>' + parts.join('') + '</tr>';
|
|
8270
8271
|
};
|
|
8272
|
+
DayHeader.prototype.destroy = function () {
|
|
8273
|
+
_super.prototype.destroy.call(this);
|
|
8274
|
+
this.renderSkeleton.unrender();
|
|
8275
|
+
};
|
|
8276
|
+
DayHeader.prototype._renderSkeleton = function (context) {
|
|
8277
|
+
var theme = context.theme;
|
|
8278
|
+
var parentEl = this.parentEl;
|
|
8279
|
+
parentEl.innerHTML = ''; // because might be nbsp
|
|
8280
|
+
parentEl.appendChild(this.el = htmlToElement('<div class="fc-row ' + theme.getClass('headerRow') + '">' +
|
|
8281
|
+
'<table class="' + theme.getClass('tableGrid') + '">' +
|
|
8282
|
+
'<thead></thead>' +
|
|
8283
|
+
'</table>' +
|
|
8284
|
+
'</div>'));
|
|
8285
|
+
this.thead = this.el.querySelector('thead');
|
|
8286
|
+
};
|
|
8287
|
+
DayHeader.prototype._unrenderSkeleton = function () {
|
|
8288
|
+
removeElement(this.el);
|
|
8289
|
+
};
|
|
8271
8290
|
return DayHeader;
|
|
8272
8291
|
}(Component));
|
|
8273
8292
|
|
|
@@ -8416,16 +8435,16 @@ var Slicer = /** @class */ (function () {
|
|
|
8416
8435
|
this.sliceEventDrag = memoize(this._sliceInteraction);
|
|
8417
8436
|
this.sliceEventResize = memoize(this._sliceInteraction);
|
|
8418
8437
|
}
|
|
8419
|
-
Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, component) {
|
|
8438
|
+
Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, calendar, component) {
|
|
8420
8439
|
var extraArgs = [];
|
|
8421
|
-
for (var _i =
|
|
8422
|
-
extraArgs[_i -
|
|
8440
|
+
for (var _i = 5; _i < arguments.length; _i++) {
|
|
8441
|
+
extraArgs[_i - 5] = arguments[_i];
|
|
8423
8442
|
}
|
|
8424
8443
|
var eventUiBases = props.eventUiBases;
|
|
8425
8444
|
var eventSegs = this.sliceEventStore.apply(this, [props.eventStore, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs));
|
|
8426
8445
|
return {
|
|
8427
8446
|
dateSelectionSegs: this.sliceDateSelection.apply(this, [props.dateSelection, eventUiBases, component].concat(extraArgs)),
|
|
8428
|
-
businessHourSegs: this.sliceBusinessHours.apply(this, [props.businessHours, dateProfile, nextDayThreshold, component].concat(extraArgs)),
|
|
8447
|
+
businessHourSegs: this.sliceBusinessHours.apply(this, [props.businessHours, dateProfile, nextDayThreshold, calendar, component].concat(extraArgs)),
|
|
8429
8448
|
fgEventSegs: eventSegs.fg,
|
|
8430
8449
|
bgEventSegs: eventSegs.bg,
|
|
8431
8450
|
eventDrag: this.sliceEventDrag.apply(this, [props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)),
|
|
@@ -8443,15 +8462,15 @@ var Slicer = /** @class */ (function () {
|
|
|
8443
8462
|
{},
|
|
8444
8463
|
component].concat(extraArgs));
|
|
8445
8464
|
};
|
|
8446
|
-
Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, component) {
|
|
8465
|
+
Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, calendar, component) {
|
|
8447
8466
|
var extraArgs = [];
|
|
8448
|
-
for (var _i =
|
|
8449
|
-
extraArgs[_i -
|
|
8467
|
+
for (var _i = 5; _i < arguments.length; _i++) {
|
|
8468
|
+
extraArgs[_i - 5] = arguments[_i];
|
|
8450
8469
|
}
|
|
8451
8470
|
if (!businessHours) {
|
|
8452
8471
|
return [];
|
|
8453
8472
|
}
|
|
8454
|
-
return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)),
|
|
8473
|
+
return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), calendar),
|
|
8455
8474
|
{},
|
|
8456
8475
|
dateProfile,
|
|
8457
8476
|
nextDayThreshold,
|
|
@@ -8497,7 +8516,7 @@ var Slicer = /** @class */ (function () {
|
|
|
8497
8516
|
if (!dateSpan) {
|
|
8498
8517
|
return [];
|
|
8499
8518
|
}
|
|
8500
|
-
var eventRange = fabricateEventRange(dateSpan, eventUiBases, component.calendar);
|
|
8519
|
+
var eventRange = fabricateEventRange(dateSpan, eventUiBases, component.context.calendar);
|
|
8501
8520
|
var segs = this.sliceRange.apply(this, [dateSpan.range].concat(extraArgs));
|
|
8502
8521
|
for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {
|
|
8503
8522
|
var seg = segs_1[_a];
|
|
@@ -8553,6 +8572,6 @@ function computeActiveRange(dateProfile, isComponentAllDay) {
|
|
|
8553
8572
|
|
|
8554
8573
|
// exports
|
|
8555
8574
|
// --------------------------------------------------------------------------------------------------
|
|
8556
|
-
var version = '4.
|
|
8575
|
+
var version = '4.4.0';
|
|
8557
8576
|
|
|
8558
|
-
export { Calendar, Component, DateComponent, DateEnv, DateProfileGenerator, DayHeader, DaySeries, DayTable, ElementDragging, ElementScrollController, EmitterMixin, EventApi, FgEventRenderer, FillRenderer, Interaction, Mixin, NamedTimeZoneImpl, PositionCache, ScrollComponent, ScrollController, Slicer, Splitter, Theme, View, WindowScrollController, addDays, addDurations, addMs, addWeeks, allowContextMenu, allowSelection, appendToElement, applyAll, applyMutationToEventStore, applyStyle, applyStyleProp, asRoughMinutes, asRoughMs, asRoughSeconds, buildGotoAnchorHtml, buildSegCompareObj, capitaliseFirstLetter, combineEventUis, compareByFieldSpec, compareByFieldSpecs, compareNumbers, compensateScroll, computeClippingRect, computeEdges, computeFallbackHeaderFormat, computeHeightAndMargins, computeInnerRect, computeRect, computeVisibleDayRange, config, constrainPoint, createDuration, createElement, createEmptyEventStore, createEventInstance, createFormatter, createPlugin, cssToStr, debounce, diffDates, diffDayAndTime, diffDays, diffPoints, diffWeeks, diffWholeDays, diffWholeWeeks, disableCursor, distributeHeight, elementClosest, elementMatches, enableCursor, eventTupleToStore, filterEventStoreDefs, filterHash, findChildren, findElements, flexibleCompare, forceClassName, formatDate, formatIsoTimeString, formatRange, getAllDayHtml, getClippingParents, getDayClasses, getElSeg, getRectCenter, getRelevantEvents, globalDefaults, greatestDurationDenominator, hasBgRendering, htmlEscape, htmlToElement, insertAfterElement, interactionSettingsStore, interactionSettingsToStore, intersectRanges, intersectRects, isArraysEqual, isDateSpansEqual, isInt, isInteractionValid, isMultiDayRange, isPropsEqual, isPropsValid, isSingleDay, isValidDate, listenBySelector, mapHash, matchCellWidths, memoize, memoizeOutput, memoizeRendering, mergeEventStores, multiplyDuration, padStart, parseBusinessHours, parseDragMeta, parseEventDef, parseFieldSpecs, parse as parseMarker, pointInsideRect, prependToElement, preventContextMenu, preventDefault, preventSelection, processScopedUiProps, rangeContainsMarker, rangeContainsRange, rangesEqual, rangesIntersect, refineProps, removeElement, removeExact, renderDateCell, requestJson, sliceEventStore, startOfDay, subtractInnerElHeight, translateRect, uncompensateScroll, undistributeHeight, unpromisify, version, whenTransitionDone, wholeDivideDurations };
|
|
8577
|
+
export { Calendar, Component, ComponentContext, DateComponent, DateEnv, DateProfileGenerator, DayHeader, DaySeries, DayTable, ElementDragging, ElementScrollController, EmitterMixin, EventApi, FgEventRenderer, FillRenderer, Interaction, Mixin, NamedTimeZoneImpl, PositionCache, ScrollComponent, ScrollController, Slicer, Splitter, Theme, View, WindowScrollController, addDays, addDurations, addMs, addWeeks, allowContextMenu, allowSelection, appendToElement, applyAll, applyMutationToEventStore, applyStyle, applyStyleProp, asRoughMinutes, asRoughMs, asRoughSeconds, buildGotoAnchorHtml, buildSegCompareObj, capitaliseFirstLetter, combineEventUis, compareByFieldSpec, compareByFieldSpecs, compareNumbers, compensateScroll, computeClippingRect, computeEdges, computeEventDraggable, computeEventEndResizable, computeEventStartResizable, computeFallbackHeaderFormat, computeHeightAndMargins, computeInnerRect, computeRect, computeVisibleDayRange, config, constrainPoint, createDuration, createElement, createEmptyEventStore, createEventInstance, createFormatter, createPlugin, cssToStr, debounce, diffDates, diffDayAndTime, diffDays, diffPoints, diffWeeks, diffWholeDays, diffWholeWeeks, disableCursor, distributeHeight, elementClosest, elementMatches, enableCursor, eventTupleToStore, filterEventStoreDefs, filterHash, findChildren, findElements, flexibleCompare, forceClassName, formatDate, formatIsoTimeString, formatRange, getAllDayHtml, getClippingParents, getDayClasses, getElSeg, getRectCenter, getRelevantEvents, globalDefaults, greatestDurationDenominator, hasBgRendering, htmlEscape, htmlToElement, insertAfterElement, interactionSettingsStore, interactionSettingsToStore, intersectRanges, intersectRects, isArraysEqual, isDateSpansEqual, isInt, isInteractionValid, isMultiDayRange, isPropsEqual, isPropsValid, isSingleDay, isValidDate, listenBySelector, mapHash, matchCellWidths, memoize, memoizeOutput, memoizeRendering, mergeEventStores, multiplyDuration, padStart, parseBusinessHours, parseDragMeta, parseEventDef, parseFieldSpecs, parse as parseMarker, pointInsideRect, prependToElement, preventContextMenu, preventDefault, preventSelection, processScopedUiProps, rangeContainsMarker, rangeContainsRange, rangesEqual, rangesIntersect, refineProps, removeElement, removeExact, renderDateCell, requestJson, sliceEventStore, startOfDay, subtractInnerElHeight, translateRect, uncompensateScroll, undistributeHeight, unpromisify, version, whenTransitionDone, wholeDivideDurations };
|