PageSourceSearch

https://cccsindia.in/public/css/fullcalendar.min.js

js cccsindia.in collected 2026-10-03 02:49:43 UTC 253,015 bytes, 5,587 lines download raw bytes

1/*!
2 * FullCalendar v3.4.0
3 * Docs & License: https://fullcalendar.io/
4 * (c) 2017 Adam Shaw
5 */
6!(function (t) {
7    "function" == typeof define && define.amd ? define(["jquery", "moment"], t) : "object" == typeof exports ? (module.exports = t(require("jquery"), require("moment"))) : t(jQuery, moment);
8})(function (t, e) {
9    function n(t) {
10        return it(t, Qt);
11    }
12    function i(t, e) {
13        e.left && t.css({ "border-left-width": 1, "margin-left": e.left - 1 }), e.right && t.css({ "border-right-width": 1, "margin-right": e.right - 1 });
14    }
15    function r(t) {
16        t.css({ "margin-left": "", "margin-right": "", "border-left-width": "", "border-right-width": "" });
17    }
18    function s() {
19        t("body").addClass("fc-not-allowed");
20    }
21    function o() {
22        t("body").removeClass("fc-not-allowed");
23    }
24    function a(e, n, i) {
25        var r = Math.floor(n / e.length),
26            s = Math.floor(n - r * (e.length - 1)),
27            o = [],
28            a = [],
29            u = [],
30            h = 0;
31        l(e),
32            e.each(function (n, i) {
33                var l = n === e.length - 1 ? s : r,
34                    c = t(i).outerHeight(!0);
35                c < l ? (o.push(i), a.push(c), u.push(t(i).height())) : (h += c);
36            }),
37            i && ((n -= h), (r = Math.floor(n / o.length)), (s = Math.floor(n - r * (o.length - 1)))),
38            t(o).each(function (e, n) {
39                var i = e === o.length - 1 ? s : r,
40                    l = a[e],
41                    h = u[e],
42                    c = i - (l - h);
43                l < i && t(n).height(c);
44            });
45    }
46    function l(t) {
47        t.height("");
48    }
49    function u(e) {
50        var n = 0;
51        return (
52            e.find("> *").each(function (e, i) {
53                var r = t(i).outerWidth();
54                r > n && (n = r);
55            }),
56            n++,
57            e.width(n),
58            n
59        );
60    }
61    function h(t, e) {
62        var n,
63            i = t.add(e);
64        return i.css({ position: "relative", left: -1 }), (n = t.outerHeight() - e.outerHeight()), i.css({ position: "", left: "" }), n;
65    }
66    function c(e) {
67        var n = e.css("position"),
68            i = e
69                .parents()
70                .filter(function () {
71                    var e = t(this);
72                    return /(auto|scroll)/.test(e.css("overflow") + e.css("overflow-y") + e.css("overflow-x"));
73                })
74                .eq(0);
75        return "fixed" !== n && i.length ? i : t(e[0].ownerDocument || document);
76    }
77    function d(t, e) {
78        var n = t.offset(),
79            i = n.left - (e ? e.left : 0),
80            r = n.top - (e ? e.top : 0);
81        return { left: i, right: i + t.outerWidth(), top: r, bottom: r + t.outerHeight() };
82    }
83    function f(t, e) {
84        var n = t.offset(),
85            i = p(t),
86            r = n.left + w(t, "border-left-width") + i.left - (e ? e.left : 0),
87            s = n.top + w(t, "border-top-width") + i.top - (e ? e.top : 0);
88        return { left: r, right: r + t[0].clientWidth, top: s, bottom: s + t[0].clientHeight };
89    }
90    function g(t, e) {
91        var n = t.offset(),
92            i = n.left + w(t, "border-left-width") + w(t, "padding-left") - (e ? e.left : 0),
93            r = n.top + w(t, "border-top-width") + w(t, "padding-top") - (e ? e.top : 0);
94        return { left: i, right: i + t.width(), top: r, bottom: r + t.height() };
95    }
96    function p(t) {
97        var e,
98            n = t[0].offsetWidth - t[0].clientWidth,
99            i = t[0].offsetHeight - t[0].clientHeight;
100        return (n = v(n)), (i = v(i)), (e = { left: 0, right: 0, top: 0, bottom: i }), m() && "rtl" == t.css("direction") ? (e.left = n) : (e.right = n), e;
101    }
102    function v(t) {
103        return (t = Math.max(0, t)), (t = Math.round(t));
104    }
105    function m() {
106        return null === Xt && (Xt = y()), Xt;
107    }
108    function y() {
109        var e = t("<div><div/></div>").css({ position: "absolute", top: -1e3, left: 0, border: 0, padding: 0, overflow: "scroll", direction: "rtl" }).appendTo("body"),
110            n = e.children(),
111            i = n.offset().left > e.offset().left;
112        return e.remove(), i;
113    }
114    function w(t, e) {
115        return parseFloat(t.css(e)) || 0;
116    }
117    function S(t) {
118        return 1 == t.which && !t.ctrlKey;
119    }
120    function b(t) {
121        var e = t.originalEvent.touches;
122        return e && e.length ? e[0].pageX : t.pageX;
123    }
124    function E(t) {
125        var e = t.originalEvent.touches;
126        return e && e.length ? e[0].pageY : t.pageY;
127    }
128    function D(t) {
129        return /^touch/.test(t.type);
130    }
131    function T(t) {
132        t.addClass("fc-unselectable").on("selectstart", H);
133    }
134    function C(t) {
135        t.removeClass("fc-unselectable").off("selectstart", H);
136    }
137    function H(t) {
138        t.preventDefault();
139    }
140    function R(t, e) {
141        var n = { left: Math.max(t.left, e.left), right: Math.min(t.right, e.right), top: Math.max(t.top, e.top), bottom: Math.min(t.bottom, e.bottom) };
142        return n.left < n.right && n.top < n.bottom && n;
143    }
144    function x(t, e) {
145        return { left: Math.min(Math.max(t.left, e.left), e.right), top: Math.min(Math.max(t.top, e.top), e.bottom) };
146    }
147    function I(t) {
148        return { left: (t.left + t.right) / 2, top: (t.top + t.bottom) / 2 };
149    }
150    function k(t, e) {
151        return { left: t.left - e.left, top: t.top - e.top };
152    }
153    function M(e) {
154        var n,
155            i,
156            r = [],
157            s = [];
158        for ("string" == typeof e ? (s = e.split(/\s*,\s*/)) : "function" == typeof e ? (s = [e]) : t.isArray(e) && (s = e), n = 0; n < s.length; n++)
159            (i = s[n]), "string" == typeof i ? r.push("-" == i.charAt(0) ? { field: i.substring(1), order: -1 } : { field: i, order: 1 }) : "function" == typeof i && r.push({ func: i });
160        return r;
161    }
162    function B(t, e, n) {
163        var i, r;
164        for (i = 0; i < n.length; i++) if ((r = L(t, e, n[i]))) return r;
165        return 0;
166    }
167    function L(t, e, n) {
168        return n.func ? n.func(t, e) : N(t[n.field], e[n.field]) * (n.order || 1);
169    }
170    function N(e, n) {
171        return e || n ? (null == n ? -1 : null == e ? 1 : "string" === t.type(e) || "string" === t.type(n) ? String(e).localeCompare(String(n)) : e - n) : 0;
172    }
173    function z(t, e) {
174        var n,
175            i,
176            r,
177            s,
178            o = t.start,
179            a = t.end,
180            l = e.start,
181            u = e.end;
182        if (a > l && o < u) return o >= l ? ((n = o.clone()), (r = !0)) : ((n = l.clone()), (r = !1)), a <= u ? ((i = a.clone()), (s = !0)) : ((i = u.clone()), (s = !1)), { start: n, end: i, isStart: r, isEnd: s };
183    }
184    function F(t, n) {
185        return e.duration({ days: t.clone().stripTime().diff(n.clone().stripTime(), "days"), ms: t.time() - n.time() });
186    }
187    function A(t, n) {
188        return e.duration({ days: t.clone().stripTime().diff(n.clone().stripTime(), "days") });
189    }
190    function G(t, n, i) {
191        return e.duration(Math.round(t.diff(n, i, !0)), i);
192    }
193    function V(t, e) {
194        var n, i, r;
195        for (n = 0; n < Jt.length && ((i = Jt[n]), !((r = P(i, t, e)) >= 1 && vt(r))); n++);
196        return i;
197    }
198    function O(t, e) {
199        var n = V(t);
200        return "week" === n && "object" == typeof e && e.days && (n = "day"), n;
201    }
202    function P(t, n, i) {
203        return null != i ? i.diff(n, t, !0) : e.isDuration(n) ? n.as(t) : n.end.diff(n.start, t, !0);
204    }
205    function _(t, e, n) {
206        var i;
207        return tt(n) ? (e - t) / n : ((i = n.asMonths()), Math.abs(i) >= 1 && vt(i) ? e.diff(t, "months", !0) / i : e.diff(t, "days", !0) / n.asDays());
208    }
209    function W(t, e) {
210        var n, i;
211        return tt(t) || tt(e) ? t / e : ((n = t.asMonths()), (i = e.asMonths()), Math.abs(n) >= 1 && vt(n) && Math.abs(i) >= 1 && vt(i) ? n / i : t.asDays() / e.asDays());
212    }
213    function Y(t, n) {
214        var i;
215        return tt(t) ? e.duration(t * n) : ((i = t.asMonths()), Math.abs(i) >= 1 && vt(i) ? e.duration({ months: i * n }) : e.duration({ days: t.asDays() * n }));
216    }
217    function q(t) {
218        return { start: t.start.clone(), end: t.end.clone() };
219    }
220    function U(t, e) {
221        return (t = q(t)), e.start && (t.start = j(t.start, e)), e.end && (t.end = K(t.end, e.end)), t;
222    }
223    function j(t, e) {
224        return (t = t.clone()), e.start && (t = J(t, e.start)), e.end && t >= e.end && (t = e.end.clone().subtract(1)), t;
225    }
226    function Z(t, e) {
227        return (!e.start || t >= e.start) && (!e.end || t < e.end);
228    }
229    function $(t, e) {
230        return (!e.start || t.end >= e.start) && (!e.end || t.start < e.end);
231    }
232    function Q(t, e) {
233        return (!e.start || t.start >= e.start) && (!e.end || t.end <= e.end);
234    }
235    function X(t, e) {
236        return ((t.start && e.start && t.start.isSame(e.start)) || (!t.start && !e.start)) && ((t.end && e.end && t.end.isSame(e.end)) || (!t.end && !e.end));
237    }
238    function K(t, e) {
239        return (t.isBefore(e) ? t : e).clone();
240    }
241    function J(t, e) {
242        return (t.isAfter(e) ? t : e).clone();
243    }
244    function tt(t) {
245        return Boolean(t.hours() || t.minutes() || t.seconds() || t.milliseconds());
246    }
247    function et(t) {
248        return "[object Date]" === Object.prototype.toString.call(t) || t instanceof Date;
249    }
250    function nt(t) {
251        return /^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t);
252    }
253    function it(t, e) {
254        var n,
255            i,
256            r,
257            s,
258            o,
259            a,
260            l = {};
261        if (e)
262            for (n = 0; n < e.length; n++) {
263                for (i = e[n], r = [], s = t.length - 1; s >= 0; s--)
264                    if ("object" == typeof (o = t[s][i])) r.unshift(o);
265                    else if (void 0 !== o) {
266                        l[i] = o;
267                        break;
268                    }
269                r.length && (l[i] = it(r));
270            }
271        for (n = t.length - 1; n >= 0; n--) {
272            a = t[n];
273            for (i in a) i in l || (l[i] = a[i]);
274        }
275        return l;
276    }
277    function rt(t) {
278        var e = function () {};
279        return (e.prototype = t), new e();
280    }
281    function st(t, e) {
282        for (var n in t) ot(t, n) && (e[n] = t[n]);
283    }
284    function ot(t, e) {
285        return te.call(t, e);
286    }
287    function at(e) {
288        return /undefined|null|boolean|number|string/.test(t.type(e));
289    }
290    function lt(e, n, i) {
291        if ((t.isFunction(e) && (e = [e]), e)) {
292            var r, s;
293            for (r = 0; r < e.length; r++) s = e[r].apply(n, i) || s;
294            return s;
295        }
296    }
297    function ut() {
298        for (var t = 0; t < arguments.length; t++) if (void 0 !== arguments[t]) return arguments[t];
299    }
300    function ht(t) {
301        return (t + "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&#039;").replace(/"/g, "&quot;").replace(/\n/g, "<br />");
302    }
303    function ct(t) {
304        return t.replace(/&.*?;/g, "");
305    }
306    function dt(e) {
307        var n = [];
308        return (
309            t.each(e, function (t, e) {
310                null != e && n.push(t + ":" + e);
311            }),
312            n.join(";")
313        );
314    }
315    function ft(e) {
316        var n = [];
317        return (
318            t.each(e, function (t, e) {
319                null != e && n.push(t + '="' + ht(e) + '"');
320            }),
321            n.join(" ")
322        );
323    }
324    function gt(t) {
325        return t.charAt(0).toUpperCase() + t.slice(1);
326    }
327    function pt(t, e) {
328        return t - e;
329    }
330    function vt(t) {
331        return t % 1 == 0;
332    }
333    function mt(t, e) {
334        var n = t[e];
335        return function () {
336            return n.apply(t, arguments);
337        };
338    }
339    function yt(t, e, n) {
340        var i,
341            r,
342            s,
343            o,
344            a,
345            l = function () {
346                var u = +new Date() - o;
347                u < e ? (i = setTimeout(l, e - u)) : ((i = null), n || ((a = t.apply(s, r)), (s = r = null)));
348            };
349        return function () {
350            (s = this), (r = arguments), (o = +new Date());
351            var u = n && !i;
352            return i || (i = setTimeout(l, e)), u && ((a = t.apply(s, r)), (s = r = null)), a;
353        };
354    }
355    function wt(n, i, r) {
356        var s,
357            o,
358            a,
359            l,
360            u = n[0],
361            h = 1 == n.length && "string" == typeof u;
362        return (
363            e.isMoment(u) || et(u) || void 0 === u
364                ? (l = e.apply(null, n))
365                : ((s = !1),
366                  (o = !1),
367                  h ? (ee.test(u) ? ((u += "-01"), (n = [u]), (s = !0), (o = !0)) : (a = ne.exec(u)) && ((s = !a[5]), (o = !0))) : t.isArray(u) && (o = !0),
368                  (l = i || s ? e.utc.apply(e, n) : e.apply(null, n)),
369                  s ? ((l._ambigTime = !0), (l._ambigZone = !0)) : r && (o ? (l._ambigZone = !0) : h && l.utcOffset(u))),
370            (l._fullCalendar = !0),
371            l
372        );
373    }
374    function St(t) {
375        return "en" !== t.locale() ? t.clone().locale("en") : t;
376    }
377    function bt() {}
378    function Et(t, e) {
379        var n;
380        return (
381            ot(e, "constructor") && (n = e.constructor),
382            "function" != typeof n &&
383                (n = e.constructor = function () {
384                    t.apply(this, arguments);
385                }),
386            (n.prototype = rt(t.prototype)),
387            st(e, n.prototype),
388            st(t, n),
389            n
390        );
391    }
392    function Dt(t, e) {
393        st(e, t.prototype);
394    }
395    function Tt(t, e) {
396        t.then = function (n) {
397            return "function" == typeof n && n(e), t;
398        };
399    }
400    function Ct(t) {
401        t.then = function (e, n) {
402            return "function" == typeof n && n(), t;
403        };
404    }
405    function Ht(t, e) {
406        return (!t && !e) || (!(!t || !e) && t.component === e.component && Rt(t, e) && Rt(e, t));
407    }
408    function Rt(t, e) {
409        for (var n in t) if (!/^(component|left|right|top|bottom)$/.test(n) && t[n] !== e[n]) return !1;
410        return !0;
411    }
412    function xt(t) {
413        return { start: t.start.clone(), end: t.end ? t.end.clone() : null, allDay: t.allDay };
414    }
415    function It(t) {
416        var e = Mt(t);
417        return "background" === e || "inverse-background" === e;
418    }
419    function kt(t) {
420        return "inverse-background" === Mt(t);
421    }
422    function Mt(t) {
423        return ut((t.source || {}).rendering, t.rendering);
424    }
425    function Bt(t) {
426        var e,
427            n,
428            i = {};
429        for (e = 0; e < t.length; e++) (n = t[e]), (i[n._id] || (i[n._id] = [])).push(n);
430        return i;
431    }
432    function Lt(t, e) {
433        return t.start - e.start;
434    }
435    function Nt(n) {
436        var i,
437            r,
438            s,
439            o,
440            a = Zt.dataAttrPrefix;
441        return (
442            a && (a += "-"),
443            (i = n.data(a + "event") || null),
444            i && ((i = "object" == typeof i ? t.extend({}, i) : {}), (r = i.start), null == r && (r = i.time), (s = i.duration), (o = i.stick), delete i.start, delete i.time, delete i.duration, delete i.stick),
445            null == r && (r = n.data(a + "start")),
446            null == r && (r = n.data(a + "time")),
447            null == s && (s = n.data(a + "duration")),
448            null == o && (o = n.data(a + "stick")),
449            (r = null != r ? e.duration(r) : null),
450            (s = null != s ? e.duration(s) : null),
451            (o = Boolean(o)),
452            { eventProps: i, startTime: r, duration: s, stick: o }
453        );
454    }
455    function zt(t, e) {
456        var n, i;
457        for (n = 0; n < e.length; n++) if (((i = e[n]), i.leftCol <= t.rightCol && i.rightCol >= t.leftCol)) return !0;
458        return !1;
459    }
460    function Ft(t, e) {
461        return t.leftCol - e.leftCol;
462    }
463    function At(t) {
464        var e,
465            n,
466            i,
467            r = [];
468        for (e = 0; e < t.length; e++) {
469            for (n = t[e], i = 0; i < r.length && Ot(n, r[i]).length; i++);
470            (n.level = i), (r[i] || (r[i] = [])).push(n);
471        }
472        return r;
473    }
474    function Gt(t) {
475        var e, n, i, r, s;
476        for (e = 0; e < t.length; e++) for (n = t[e], i = 0; i < n.length; i++) for (r = n[i], r.forwardSegs = [], s = e + 1; s < t.length; s++) Ot(r, t[s], r.forwardSegs);
477    }
478    function Vt(t) {
479        var e,
480            n,
481            i = t.forwardSegs,
482            r = 0;
483        if (void 0 === t.forwardPressure) {
484            for (e = 0; e < i.length; e++) (n = i[e]), Vt(n), (r = Math.max(r, 1 + n.forwardPressure));
485            t.forwardPressure = r;
486        }
487    }
488    function Ot(t, e, n) {
489        n = n || [];
490        for (var i = 0; i < e.length; i++) Pt(t, e[i]) && n.push(e[i]);
491        return n;
492    }
493    function Pt(t, e) {
494        return t.bottom > e.top && t.top < e.bottom;
495    }
496    function _t(t) {
497        this.items = t || [];
498    }
499    function Wt(e, n) {
500        function i(t) {
501            n = t;
502        }
503        function r() {
504            var i = n.layout;
505            (p = e.opt("theme") ? "ui" : "fc"), i ? (g ? g.empty() : (g = this.el = t("<div class='fc-toolbar " + n.extraClasse
505s + "'/>")), g.append(o("left")).append(o("right")).append(o("center")).append('<div class="fc-clear"/>')) : s();
506        }
507        function s() {
508            g && (g.remove(), (g = f.el = null));
509        }
510        function o(i) {
511            var r = t('<div class="fc-' + i + '"/>'),
512                s = n.layout[i],
513                o = e.opt("customButtons") || {},
514                a = e.opt("buttonText") || {};
515            return (
516                s &&
517                    t.each(s.split(" "), function (n) {
518                        var i,
519                            s = t(),
520                            l = !0;
521                        t.each(this.split(","), function (n, i) {
522                            var r, u, h, c, d, f, g, m, y, w;
523                            "title" == i
524                                ? ((s = s.add(t("<h2>&nbsp;</h2>"))), (l = !1))
525                                : ((r = o[i])
526                                      ? ((h = function (t) {
527                                            r.click && r.click.call(w[0], t);
528                                        }),
529                                        (c = ""),
530                                        (d = r.text))
531                                      : (u = e.getViewSpec(i))
532                                      ? ((h = function () {
533                                            e.changeView(i);
534                                        }),
535                                        v.push(i),
536                                        (c = u.buttonTextOverride),
537                                        (d = u.buttonTextDefault))
538                                      : e[i] &&
539                                        ((h = function () {
540                                            e[i]();
541                                        }),
542                                        (c = (e.overrides.buttonText || {})[i]),
543                                        (d = a[i])),
544                                  h &&
545                                      ((f = r ? r.themeIcon : e.opt("themeButtonIcons")[i]),
546                                      (g = r ? r.icon : e.opt("buttonIcons")[i]),
547                                      (m = c ? ht(c) : f && e.opt("theme") ? "<span class='ui-icon ui-icon-" + f + "'></span>" : g && !e.opt("theme") ? "<span class='fc-icon fc-icon-" + g + "'></span>" : ht(d)),
548                                      (y = ["fc-" + i + "-button", p + "-button", p + "-state-default"]),
549                                      (w = t('<button type="button" class="' + y.join(" ") + '">' + m + "</button>")
550                                          .click(function (t) {
551                                              w.hasClass(p + "-state-disabled") || (h(t), (w.hasClass(p + "-state-active") || w.hasClass(p + "-state-disabled")) && w.removeClass(p + "-state-hover"));
552                                          })
553                                          .mousedown(function () {
554                                              w.not("." + p + "-state-active")
555                                                  .not("." + p + "-state-disabled")
556                                                  .addClass(p + "-state-down");
557                                          })
558                                          .mouseup(function () {
559                                              w.removeClass(p + "-state-down");
560                                          })
561                                          .hover(
562                                              function () {
563                                                  w.not("." + p + "-state-active")
564                                                      .not("." + p + "-state-disabled")
565                                                      .addClass(p + "-state-hover");
566                                              },
567                                              function () {
568                                                  w.removeClass(p + "-state-hover").removeClass(p + "-state-down");
569                                              }
570                                          )),
571                                      (s = s.add(w))));
572                        }),
573                            l &&
574                                s
575                                    .first()
576                                    .addClass(p + "-corner-left")
577                                    .end()
578                                    .last()
579                                    .addClass(p + "-corner-right")
580                                    .end(),
581                            s.length >
581 1 ? ((i = t("<div/>")), l && i.addClass("fc-button-group"), i.append(s), r.append(i)) : r.append(s);
582                    }),
583                r
584            );
585        }
586        function a(t) {
587            g && g.find("h2").text(t);
588        }
589        function l(t) {
590            g && g.find(".fc-" + t + "-button").addClass(p + "-state-active");
591        }
592        function u(t) {
593            g && g.find(".fc-" + t + "-button").removeClass(p + "-state-active");
594        }
595        function h(t) {
596            g &&
597                g
598                    .find(".fc-" + t + "-button")
599                    .prop("disabled", !0)
600                    .addClass(p + "-state-disabled");
601        }
602        function c(t) {
603            g &&
604                g
605                    .find(".fc-" + t + "-button")
606                    .prop("disabled", !1)
607                    .removeClass(p + "-state-disabled");
608        }
609        function d() {
610            return v;
611        }
612        var f = this;
613        (f.setToolbarOptions = i), (f.render = r), (f.removeElement = s), (f.updateTitle = a), (f.activateButton = l), (f.deactivateButton = u), (f.disableButton = h), (f.enableButton = c), (f.getViewsWithButtons = d), (f.el = null);
614        var g,
615            p,
616            v = [];
617    }
618    function Yt(e) {
619        t.each(Me, function (t, n) {
620            null == e[t] && (e[t] = n(e));
621        });
622    }
623    function qt(t) {
624        return e.localeData(t) || e.localeData("en");
625    }
626    function Ut() {
627        function n(t, e) {
628            return !q.opt("lazyFetching") || s(t, e) ? o(t, e) : he.resolve(Z);
629        }
630        function i() {
631            (Z = r(K)), q.trigger("eventsReset", Z);
632        }
633        function r(t) {
634            var e,
635                n,
636                i = [];
637            for (e = 0; e < t.length; e++) (n = t[e]), n.start.clone().stripZone() < j && q.getEventEnd(n).stripZone() > U && i.push(n);
638            return i;
639        }
640        function s(t, e) {
641            return !U || t < U || e > j;
642        }
643        function o(t, e) {
644            return (U = t), (j = e), a();
645        }
646        function a() {
647            return u(Q, "reset");
648        }
649        function l(t) {
650            return u(b(t));
651        }
652        function u(t, e) {
653            var n, i;
654            for ("reset" === e ? (K = []) : "add" !== e && (K = C(K, t)), n = 0; n < t.length; n++) (i = t[n]), "pending" !== i._status && X++, (i._fetchId = (i._fetchId || 0) + 1), (i._status = "pending");
655            for (n = 0; n < t.length; n++) (i = t[n]), h(i, i._fetchId);
656            return X
657                ? he.construct(function (t) {
658                      q.one("eventsReceived", t);
659                  })
660                : he.resolve(Z);
661        }
662        function h(e, n) {
663            f(e, function (i) {
664                var r,
665                    s,
666                    o,
667                    a = t.isArray(e.events);
668                if (n === e._fetchId && "rejected" !== e._status) {
669                    if (((e._status = "resolved"), i)) for (r = 0; r < i.length; r++) (s = i[r]), (o = a ? s : z(s, e)) && K.push.apply(K, _(o));
670                    d();
671                }
672            });
673        }
674        function c(t) {
675            var e = "pending" === t._status;
676            (t._status = "rejected"), e && d();
677        }
678        function d() {
679            --X || (i(K), q.trigger("eventsReceived", Z));
680        }
681        function f(e, n) {
682            var i,
683                r,
684                s = Zt.sourceFetchers;
685            for (i = 0; i < s.length; i++) {
686                if (!0 === (r = s[i].call(q, e, U.clone(), j.clone(), q.opt("timezone"), n))) return;
687                if ("object" == typeof r) return void f(r, n);
688            }
689            var o = e.events;
690            if (o)
691                t.isFunction(o)
692                    ? (q.pushLoading(),
693                      o.call(q, U.clone(), j.clone(), q.opt("timezone"), function (t) {
694                          n(t), q.popLoading();
695                      }))
696                    : t.isArray(o)
697                    ? n(o)
698                    : n();
699            else {
700                if (e.url) {
701                    var a,
702                        l = e.success,
703                        u = e.error,
704                        h = e.complete;
705                    a = t.isFunction(e.data) ? e.data() : e.data;
706                    var c = t.extend({}, a || {}),
707                        d = ut(e.startParam, q.opt("startParam")),
708                        g = ut(e.endParam, q.opt("endParam")),
709                        p = ut(e.timezoneParam, q.opt("timezoneParam"));
710                    d && (c[d] = U.format()),
711                        g && (c[g] = j.format()),
712                        q.opt("timezone") && "local" != q.opt("timezone") && (c[p] = q.opt("timezone")),
713                        q.pushLoading(),
714                        t.ajax(
715                            t.extend({}, Be, e, {
716                                data: c,
717                                success: function (e) {
718                                    e = e || [];
719                                    var i = lt(l, this, arguments);
720                                    t.isArray(i) && (e = i), n(e);
721                                },
722                                error: function () {
723                                    lt(u, this, arguments), n();
724                                },
725                                complete: function () {
726                                    lt(h, this, arguments), q.popLoading();
727                                },
728                            })
729                        );
730                } else n();
731            }
732        }
733        function g(t) {
734            var e = p(t);
735            e && (Q.push(e), u([e], "add"));
736        }
737        function p(e) {
738            var n,
739                i,
740                r = Zt.sourceNormalizers;
741            if ((t.isFunction(e) || t.isArray(e) ? (n = { events: e }) : "string" == typeof e ? (n = { url: e }) : "object" == typeof e && (n = t.extend({}, e)), n)) {
742                for (
743                    n.className ? "string" == typeof n.className && (n.className = n.className.split(/\s+/)) : (n.className = []),
744                        t.isArray(n.events) &&
745                            ((n.origArray = n.events),
746                            (n.events = t.map(n.events, function (t) {
747                                return z(t, n);
748                            }))),
749                        i = 0;
750                    i < r.length;
751                    i++
752                )
753                    r[i].call(q, n);
754                return n;
755            }
756        }
757        function v(t) {
758            y(E(t));
759        }
760        function m(t) {
761            null == t ? y(Q, !0) : y(b(t));
762        }
763        function y(e, n) {
764            var r;
765            for (r = 0; r < e.length; r++) c(e[r]);
766            n
767                ? ((Q = []), (K = []))
768                : ((Q = t.grep(Q, function (t) {
769                      for (r = 0; r < e.length; r++) if (t === e[r]) return !1;
770                      return !0;
771                  })),
772                  (K = C(K, e))),
773                i();
774        }
775        function w() {
776            return Q.slice(1);
777        }
778        function S(e) {
779            return t.grep(Q, function (t) {
780                return t.id && t.id === e;
781            })[0];
782        }
783        function b(e) {
784            e ? t.isArray(e) || (e = [e]) : (e = []);
785            var n,
786                i = [];
787            for (n = 0; n < e.length; n++) i.push.apply(i, E(e[n]));
788            return i;
789        }
790        function E(e) {
791            var n, i;
792            for (n = 0; n < Q.length; n++) if ((i = Q[n]) === e) return [i];
793            return (
794                (i = S(e)),
795                i
796                    ? [i]
797                    : t.grep(Q, function (t) {
798                          return D(e, t);
799                      })
800            );
801        }
802        function D(t, e) {
803            return t && e && T(t) == T(e);
804        }
805        function T(t) {
806            return ("object" == typeof t ? t.origArray || t.googleCalendarId || t.url || t.events : null) || t;
807        }
808        function C(e, n) {
809            return t.grep(e, function (t) {
810                for (var e = 0; e < n.length; e++) if (t.source === n[e]) return !1;
811                return !0;
812            });
813        }
814        function H(t) {
815            R([t]);
816        }
817        function R(t) {
818            var e, n;
819            for (e = 0; e < t.length; e++) (n = t[e]), (n.start = q.moment(n.start)), n.end ? (n.end = q.moment(n.end)) : (n.end = null), W(n, x(n));
820            i();
821        }
822        function x(e) {
823            var n = {};
824            return (
825                t.each(e, function (t, e) {
826                    I(t) && void 0 !== e && at(e) && (n[t] = e);
827                }),
828                n
829            );
830        }
831        function I(t) {
832            return !/^_|^(id|allDay|start|end)$/.test(t);
833        }
834        function k(t, e) {
835            return M([t], e);
836        }
837        function M(t, e) {
838            var n,
839                r,
840                s,
841                o,
842                a,
843                l = [];
844            for (s = 0; s < t.length; s++)
845                if ((r = z(t[s]))) {
846                    for (n = _(r), o = 0; o < n.length; o++) (a = n[o]), a.source || (e && ($.events.push(a), (a.source = $)), K.push(a));
847                    l = l.concat(n);
848                }
849            return l.length && i(), l;
850        }
851        function B(e) {
852            var n, r;
853            for (
854                null == e
855                    ? (e = function () {
856                          return !0;
857                      })
858                    : t.isFunction(e) ||
859                      ((n = e + ""),
860                      (e = function (t) {
861                          return t._id == n;
862                      })),
863                    K = t.grep(K, e, !0),
864                    r = 0;
865                r < Q.length;
866                r++
867            )
868                t.isArray(Q[r].events) && (Q[r].events = t.grep(Q[r].events, e, !0));
869            i();
870        }
871        function L(e) {
872            return t.isFunction(e)
873                ? t.grep(K, e)
874                : null != e
875                ? ((e += ""),
876                  t.grep(K, function (t) {
877                      return t._id == e;
878                  }))
879                : K;
880        }
881        function N(t) {
882            (t.start = q.moment(t.start)), t.end && (t.end = q.moment(t.end)), jt(t);
883        }
884        function z(n, i) {
885            var r,
886                s,
887                o,
888                a = q.opt("eventDataTransform"),
889                l = {};
890            if (
891                (a && (n = a(n)),
892                i && i.eventDataTransform && (n = i.eventDataTransform(n)),
893                t.extend(l, n),
894                i && (l.source = i),
895                (l._id = n._id || (void 0 === n.id ? "_fc" + Le++ : n.id + "")),
896                n.className ? ("string" == typeof n.className ? (l.className = n.className.split(/\s+/)) : (l.className = n.className)) : (l.className = []),
897                (r = n.start || n.date),
898                (s = n.end),
899                nt(r) && (r = e.duration(r)),
900                nt(s) && (s = e.duration(s)),
901                n.dow || e.isDuration(r) || e.isDuration(s))
902            )
903                (l.start = r ? e.duration(r) : null), (l.end = s ? e.duration(s) : null), (l._recurring = !0);
904            else {
905                if (r && ((r = q.moment(r)), !r.isValid())) return !1;
906                s && ((s = q.moment(s)), s.isValid() || (s = null)), (o = n.allDay), void 0 === o && (o = ut(i ? i.allDayDefault : void 0, q.opt("allDayDefault"))), V(r, s, o, l);
907            }
908            return q.normalizeEvent(l), l;
909        }
910        function V(t, e, n, i) {
911            (i.start = t), (i.end = e), (i.allDay = n), O(i), jt(i);
912        }
913        function O(t) {
914            P(t), t.end && !t.end.isAfter(t.start) && (t.end = null), t.end || (q.opt("forceEventDuration") ? (t.end = q.getDefaultEventEnd(t.allDay, t.start)) : (t.end = null));
915        }
916        function P(t) {
917            null == t.allDay && (t.allDay = !(t.start.hasTime() || (t.end && t.end.hasTime()))),
918                t.allDay ? (t.start.stripTime(), t.end && t.end.stripTime()) : (t.start.hasTime() || (t.start = q.applyTimezone(t.start.time(0))), t.end && !t.end.hasTime() && (t.end = q.applyTimezone(t.end.time(0))));
919        }
920        function _(e, n, i) {
921            var r,
922                s,
923                o,
924                a,
925                l,
926                u,
927                h,
928                c,
929                d,
930                f = [];
931            if (((n = n || U), (i = i || j), e))
932                if (e._recurring) {
933                    if ((s = e.dow)) for (r = {}, o = 0; o < s.length; o++) r[s[o]] = !0;
934                    for (a = n.clone().stripTime(); a.isBefore(i); )
935                        (r && !r[a.day()]) || ((l = e.start), (u = e.end), (h = a.clone()), (c = null), l && (h = h.time(l)), u && (c = a.clone().time(u)), (d = t.extend({}, e)), V(h, c, !l && !u, d), f.push(d)), a.add(1, "days");
936                } else f.push(e);
937            return f;
938        }
939        function W(e, n, i) {
940            function r(t, e) {
941                return i ? G(t, e, i) : n.allDay ? A(t, e) : F(t, e);
942            }
943            var s,
944                o,
945                a,
946                l,
947                u,
948                h,
949                c = {};
950            return (
951                (n = n || {}),
952                n.start || (n.start = e.start.clone()),
953                void 0 === n.end && (n.end = e.end ? e.end.clone() : null),
954                null == n.allDay && (n.allDay = e.allDay),
955                O(n),
956                (s = { start: e._start.clone(), end: e._end ? e._end.clone() : q.getDefaultEventEnd(e._allDay, e._start), allDay: n.allDay }),
957                O(s),
958                (o = null !== e._end && null === n.end),
959                (a = r(n.start, s.start)),
960                n.end ? ((l = r(n.end, s.end)), (u = l.subtract(a))) : (u = null),
961                t.each(n, function (t, e) {
962                    I(t) && void 0 !== e && (c[t] = e);
963                }),
964                (h = Y(L(e._id), o, n.allDay, a, u, c)),
965                { dateDelta: a, durationDelta: u, undo: h }
966            );
967        }
968        function Y(e, n, i, r, s, o) {
969            var a = q.getIsAmbigTimezone(),
970                l = [];
971            return (
972                r && !r.valueOf() && (r = null),
973                s && !s.valueOf() && (s = null),
974                t.each(e, function (e, u) {
975                    var h, c;
976                    (h = { start: u.start.clone(), end: u.end ? u.end.clone() : null, allDay: u.allDay }),
977                        t.each(o, function (t) {
978                            h[t] = u[t];
979                        }),
980                        (c = { start: u._start, end: u._end, allDay: i }),
981                        O(c),
982                        n ? (c.end = null) : s && !c.end && (c.end = q.getDefaultEventEnd(c.allDay, c.start)),
983                        r && (c.start.add(r), c.end && c.end.add(r)),
984                        s && c.end.add(s),
985                        a && !c.allDay && (r || s) && (c.start.stripZone(), c.end && c.end.stripZone()),
986                        t.extend(u, o, c),
987                        jt(u),
988                        l.push(function () {
989                            t.extend(u, h), jt(u);
990                        });
991                }),
992                function () {
993                    for (var t = 0; t < l.length; t++) l[t]();
994                }
995            );
996        }
997        var q = this;
998        (q.requestEvents = n),
999            (q.reportEventChange = i),
1000            (q.isFetchNeeded = s),
1001            (q.fetchEvents = o),
1002            (q.fetchEventSources = u),
1003            (q.refetchEvents = a),
1004            (q.refetchEventSources = l),
1005            (q.getEventSources = w),
1006            (q.getEventSourceById = S),
1007            (q.addEventSource = g),
1008            (q.removeEventSource = v),
1009            (q.removeEventSources = m),
1010            (q.updateEvent = H),
1011            (q.updateEvents = R),
1012            (q.renderEvent = k),
1013            (q.renderEvents = M),
1014            (q.removeEvents = B),
1015            (q.clientEvents = L),
1016            (q.mutateEvent = W),
1017            (q.normalizeEventDates = O),
1018            (q.normalizeEventTimes = P);
1019        var U,
1020            j,
1021            Z,
1022            $ = { events: [] },
1023            Q = [$],
1024            X = 0,
1025            K = [];
1026        t.each((q.opt("events") ? [q.opt("events")] : []).concat(q.opt("eventSources") || []), function (t, e) {
1027            var n = p(e);
1028            n && Q.push(n);
1029        }),
1030            (q.getEventCache = function () {
1031                return K;
1032            }),
1033            (q.rezoneArrayEventSources = function () {
1034                var e, n, i;
1035                for (e = 0; e < Q.length; e++) if (((n = Q[e].events), t.isArray(n))) for (i = 0; i < n.length; i++) N(n[i]);
1036            }),
1037            (q.buildEventFromInput = z),
1038            (q.expandEvent = _);
1039    }
1040    function jt(t) {
1041        (t._allDay = t.allDay), (t._start = t.start.clone()), (t._end = t.end ? t.end.clone() : null);
1042    }
1043    var Zt = (t.fullCalendar = { version: "3.4.0", internalApiVersion: 9 }),
1044        $t = (Zt.views = {});
1045    t.fn.fullCalendar = function (e) {
1046        var n = Array.prototype.slice.call(arguments, 1),
1047            i = this;
1048        return (
1049            this.each(function (r, s) {
1050                var o,
1051                    a = t(s),
1052                    l = a.data("fullCalendar");
1053                "string" == typeof e ? l && t.isFunction(l[e]) && ((o = l[e].apply(l, n)), r || (i = o), "destroy" === e && a.removeData("fullCalendar")) : l || ((l = new Re(a, e)), a.data("fullCalendar", l), l.render());
1054            }),
1055            i
1056        );
1057    };
1058    var Qt = ["header", "footer", "buttonText", "buttonIcons", "themeButtonIcons"];
1059    (Zt.intersectRanges = z),
1060        (Zt.applyAll = lt),
1061        (Zt.debounce = yt),
1062        (Zt.isInt = vt),
1063        (Zt.htmlEscape = ht),
1064        (Zt.cssToStr = dt),
1065        (Zt.proxy = mt),
1066        (Zt.capitaliseFirstLetter = gt),
1067        (Zt.getOuterRect = d),
1068        (Zt.getClientRect = f),
1069        (Zt.getContentRect = g),
1070        (Zt.getScrollbarWidths = p);
1071    var Xt = null;
1072    (Zt.preventDefault = H),
1073        (Zt.intersectRects = R),
1074        (Zt.parseFieldSpecs = M),
1075        (Zt.compareByFieldSpecs = B),
1076        (Zt.compareByFieldSpec = L),
1077        (Zt.flexibleCompare = N),
1078        (Zt.computeGreatestUnit = V),
1079        (Zt.divideRangeByDuration = _),
1080        (Zt.divideDurationByDuration = W),
1081        (Zt.multiplyDuration = Y),
1082        (Zt.durationHasTime = tt);
1083    var Kt = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"],
1084        Jt = ["year", "month", "week", "day", "hour", "minute", "second", "millisecond"];
1085    (Zt.log = function () {
1086        var t = window.console;
1087        if (t && t.log) return t.log.apply(t, arguments);
1088    }),
1089        (Zt.warn = function () {
1090            var t = window.console;
1091            return t && t.warn ? t.warn.apply(t, arguments) : Zt.log.apply(Zt, arguments);
1092        });
1093    var te = {}.hasOwnProperty;
1094    Zt.createObject = rt;
1095    var ee = /^\s*\d{4}-\d\d$/,
1096        ne = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/,
1097        ie = e.fn,
1098        re = t.extend({}, ie),
1099        se = e.momentProperties;
1100    se.push("_fullCalendar"),
1101        se.push("_ambigTime"),
1102        se.push("_ambigZone"),
1103        (Zt.moment = function () {
1104            return wt(arguments);
1105        }),
1106        (Zt.moment.utc = function () {
1107            var t = wt(arguments, !0);
1108            return t.hasTime() && t.utc(), t;
1109        }),
1110        (Zt.moment.parseZone = function () {
1111            return wt(arguments, !0, !0);
1112        }),
1113        (ie.week = ie.weeks = function (t) {
1114            var e = this._locale._fullCalendar_weekCalc;
1115            return null == t && "function" == typeof e ? e(this) : "ISO" === e ? re.isoWeek.apply(this, arguments) : re.week.apply(this, arguments);
1116        }),
1117        (ie.time = function (t) {
1118            if (!this._fullCalendar) return re.time.apply(this, arguments);
1119            if (null == t) return e.duration({ hours: this.hours(), minutes: this.minutes(), seconds: this.seconds(), milliseconds: this.milliseconds() });
1120            (this._ambigTime = !1), e.isDuration(t) || e.isMoment(t) || (t = e.duration(t));
1121            var n = 0;
1122            return (
1123                e.isDuration(t) && (n = 24 * Math.floor(t.asDays())),
1124                this.hours(n + t.hours())
1125                    .minutes(t.minutes())
1126                    .seconds(t.seconds())
1127                    .milliseconds(t.milliseconds())
1128            );
1129        }),
1130        (ie.stripTime = function () {
1131            return this._ambigTime || (this.utc(!0), this.set({ hours: 0, minutes: 0, seconds: 0, ms: 0 }), (this._ambigTime = !0), (this._ambigZone = !0)), this;
1132        }),
1133        (ie.hasTime = function () {
1134            return !this._ambigTime;
1135        }),
1136        (ie.stripZone = function () {
1137            var t;
1138            return this._ambigZone || ((t = this._ambigTime), this.utc(!0), (this._ambigTime = t || !1), (this._ambigZone = !0)), this;
1139        }),
1140        (ie.hasZone = function () {
1141            return !this._ambigZone;
1142        }),
1143        (ie.local = function (t) {
1144            return re.local.call(this, this._ambigZone || t), (this._ambigTime = !1), (this._ambigZone = !1), this;
1145        }),
1146        (ie.utc = function (t) {
1147            return re.utc.call(this, t), (this._ambigTime = !1), (this._ambigZone = !1), this;
1148        }),
1149        (ie.utcOffset = function (t) {
1150            return null != t && ((this._ambigTime = !1), (this._ambigZone = !1)), re.utcOffset.apply(this, arguments);
1151        }),
1152        (ie.format = function () {
1153            return this._fullCalendar && arguments[0]
1154                ? oe(this, arguments[0])
1155                : this._ambigTime
1156                ? le(St(this), "YYYY-MM-DD")
1157                : this._ambigZone
1158                ? le(St(this), "YYYY-MM-DD[T]HH:mm:ss")
1159                : this._fullCalendar
1160                ? le(St(this))
1161                : re.format.apply(this, arguments);
1162        }),
1163        (ie.toISOString = function () {
1164            return this._ambigTime ? le(St(this), "YYYY-MM-DD") : this._ambigZone ? le(St(this), "YYYY-MM-DD[T]HH:mm:ss") : this._fullCalendar ? re.toISOString.apply(St(this), arguments) : re.toISOString.apply(this, arguments);
1165        }),
1166        (function () {
1167            function t(t, e) {
1168                return h(r(e).fakeFormatString, t);
1169            }
1170            function e(t, e) {
1171                return re.format.call(t, e);
1172            }
1173            function n(t, e, n, s, o) {
1174                var a;
1175                return (t = Zt.moment.parseZone(t)), (e = Zt.moment.parseZone(e)), (a = t.localeData()), (n = a.longDateFormat(n) || n), i(r(n), t, e, s || " - ", o);
1176            }
1177            function i(t, e, n, i, r) {
1178                var s,
1179                    o,
1180                    a,
1181                    l = t.sameUnits,
1182                    u = e.clone().stripZone(),
1183                    h = n.clone().stripZone(),
1184                    f = c(t.fakeFormatString, e),
1185                    g = c(t.fakeFormatString, n),
1186                    p = "",
1187                    v = "",
1188                    m = "",
1189                    y = "",
1190                    w = "";
1191                for (s = 0; s < l.length && (!l[s] || u.isSame(h, l[s])); s++) p += f[s];
1192                for (o = l.length - 1; o > s && (!l[o] || u.isSame(h, l[o])) && (o - 1 !== s || "." !== f[o]); o--) v = f[o] + v;
1193                for (a = s; a <= o; a++) (m += f[a]), (y += g[a]);
1194                return (m || y) && (w = r ? y + i + m : m + i + y), d(p + w + v);
1195            }
1196            function r(t) {
1197                return S[t] || (S[t] = s(t));
1198            }
1199            function s(t) {
1200                var e = o(t);
1201                return { fakeFormatString: l(e), sameUnits: u(e) };
1202            }
1203            function o(t) {
1204                for (var e, n = [], i = /\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g; (e = i.exec(t)); )
1205                    e[1] ? n.push.apply(n, a(e[1])) : e[2] ? n.push({ maybe: o(e[2]) }) : e[3] ? n.push({ token: e[3] }) : e[5] && n.push.apply(n, a(e[5]));
1206                return n;
1207            }
1208            function a(t) {
1209                return ". " === t ? [".", " "] : [t];
1210            }
1211            function l(t) {
1212                var e,
1213                    n,
1214                    i = [];
1215                for (e = 0; e < t.length; e++) (n = t[e]), "string" == typeof n ? i.push("[" + n + "]") : n.token ? (n.token in y ? i.push(p + "[" + n.token + "]") : i.push(n.token)) : n.maybe && i.push(v + l(n.maybe) + v);
1216                return i.join(g);
1217            }
1218            function u(t) {
1219                var e,
1220                    n,
1221                    i,
1222                    r = [];
1223                for (e = 0; e < t.length;
1223 e++) (n = t[e]), n.token ? ((i = w[n.token.charAt(0)]), r.push(i ? i.unit : "second")) : n.maybe ? r.push.apply(r, u(n.maybe)) : r.push(null);
1224                return r;
1225            }
1226            function h(t, e) {
1227                return d(c(t, e).join(""));
1228            }
1229            function c(t, n) {
1230                var i,
1231                    r,
1232                    s = [],
1233                    o = e(n, t),
1234                    a = o.split(g);
1235                for (i = 0; i < a.length; i++) (r = a[i]), r.charAt(0) === p ? s.push(y[r.substring(1)](n)) : s.push(r);
1236                return s;
1237            }
1238            function d(t) {
1239                return t.replace(m, function (t, e) {
1240                    return e.match(/[1-9]/) ? e : "";
1241                });
1242            }
1243            function f(t) {
1244                var e,
1245                    n,
1246                    i,
1247                    r,
1248                    s = o(t);
1249                for (e = 0; e < s.length; e++) (n = s[e]), n.token && (i = w[n.token.charAt(0)]) && (!r || i.value > r.value) && (r = i);
1250                return r ? r.unit : null;
1251            }
1252            (Zt.formatDate = t), (Zt.formatRange = n), (Zt.oldMomentFormat = e), (Zt.queryMostGranularFormatUnit = f);
1253            var g = "\v",
1254                p = "�",
1255                v = "�",
1256                m = new RegExp(v + "([^" + v + "]*)" + v, "g"),
1257                y = {
1258                    t: function (t) {
1259                        return e(t, "a").charAt(0);
1260                    },
1261                    T: function (t) {
1262                        return e(t, "A").charAt(0);
1263                    },
1264                },
1265                w = { Y: { value: 1, unit: "year" }, M: { value: 2, unit: "month" }, W: { value: 3, unit: "week" }, w: { value: 3, unit: "week" }, D: { value: 4, unit: "day" }, d: { value: 4, unit: "day" } },
1266                S = {};
1267        })();
1268    var oe = Zt.formatDate,
1269        ae = Zt.formatRange,
1270        le = Zt.oldMomentFormat;
1271    (Zt.Class = bt),
1272        (bt.extend = function () {
1273            var t,
1274                e,
1275                n = arguments.length;
1276            for (t = 0; t < n; t++) (e = arguments[t]), t < n - 1 && Dt(this, e);
1277            return Et(this, e || {});
1278        }),
1279        (bt.mixin = function (t) {
1280            Dt(this, t);
1281        });
1282    var ue = bt.extend(fe, ge, {
1283        _props: null,
1284        _watchers: null,
1285        _globalWatchArgs: null,
1286        constructor: function () {
1287            (this._watchers = {}), (this._props = {}), this.applyGlobalWatchers();
1288        },
1289        applyGlobalWatchers: function () {
1290            var t,
1291                e = this._globalWatchArgs || [];
1292            for (t = 0; t < e.length; t++) this.watch.apply(this, e[t]);
1293        },
1294        has: function (t) {
1295            return t in this._props;
1296        },
1297        get: function (t) {
1298            return void 0 === t ? this._props : this._props[t];
1299        },
1300        set: function (t, e) {
1301            var n;
1302            "string" == typeof t ? ((n = {}), (n[t] = void 0 === e ? null : e)) : (n = t), this.setProps(n);
1303        },
1304        reset: function (t) {
1305            var e,
1306                n = this._props,
1307                i = {};
1308            for (e in n) i[e] = void 0;
1309            for (e in t) i[e] = t[e];
1310            this.setProps(i);
1311        },
1312        unset: function (t) {
1313            var e,
1314                n,
1315                i = {};
1316            for (e = "string" == typeof t ? [t] : t, n = 0; n < e.length; n++) i[e[n]] = void 0;
1317            this.setProps(i);
1318        },
1319        setProps: function (t) {
1320            var e,
1321                n,
1322                i = {},
1323                r = 0;
1324            for (e in t) ("object" != typeof (n = t[e]) && n === this._props[e]) || ((i[e] = n), r++);
1325            if (r) {
1326                this.trigger("before:batchChange", i);
1327                for (e in i) (n = i[e]), this.trigger("before:change", e, n), this.trigger("before:change:" + e, n);
1328                for (e in i) (n = i[e]), void 0 === n ? delete this._props[e] : (this._props[e] = n), this.trigger("change:" + e, n), this.trigger("change", e, n);
1329                this.trigger("batchChange", i);
1330            }
1331        },
1332        watch: function (t, e, n, i) {
1333            var r = this;
1334            this.unwatch(t),
1335                (this._watchers[t] = this._watchDeps(
1336                    e,
1337                    function (e) {
1338                        var i = n.call(r, e);
1339                        i && i.then
1340                            ? (r.unset(t),
1341                              i.then(function (e) {
1342                                  r.set(t, e);
1343                              }))
1344                            : r.set(t, i);
1345                    },
1346                    function () {
1347                        r.unset(t), i && i.call(r);
1348                    }
1349                ));
1350        },
1351        unwatch: function (t) {
1352            var e = this._watchers[t];
1353            e && (delete this._watchers[t], e.teardown());
1354        },
1355        _watchDeps: function (t, e, n) {
1356            function i(t, e, i) {
1357                1 === ++a && u === l && ((d = !0), n(), (d = !1));
1358            }
1359            function r(t, n, i) {
1360                void 0 === n ? (i || void 0 === h[t] || u--, delete h[t]) : (i || void 0 !== h[t] || u++, (h[t] = n)), --a || (u === l && (d || e(h)));
1361            }
1362            function s(t, e) {
1363                o.on(t, e), c.push([t, e]);
1364            }
1365            var o = this,
1366                a = 0,
1367                l = t.length,
1368                u = 0,
1369                h = {},
1370                c = [],
1371                d = !1;
1372            return (
1373                t.forEach(function (t) {
1374                    var e = !1;
1375                    "?" === t.charAt(0) && ((t = t.substring(1)), (e = !0)),
1376                        s("before:change:" + t, function (n) {
1377                            i(t, n, e);
1378                        }),
1379                        s("change:" + t, function (n) {
1380                            r(t, n, e);
1381                        });
1382                }),
1383                t.forEach(function (t) {
1384                    var e = !1;
1385                    "?" === t.charAt(0) && ((t = t.substring(1)), (e = !0)), o.has(t) ? ((h[t] = o.get(t)), u++) : e && u++;
1386                }),
1387                u === l && e(h),
1388                {
1389                    teardown: function () {
1390                        for (var t = 0; t < c.length; t++) o.off(c[t][0], c[t][1]);
1391                        (c = null), u === l && n();
1392                    },
1393                    flash: function () {
1394                        u === l && (n(), e(h));
1395                    },
1396                }
1397            );
1398        },
1399        flash: function (t) {
1400            var e = this._watchers[t];
1401            e && e.flash();
1402        },
1403    });
1404    (ue.watch = function () {
1405        var t = this.prototype;
1406        t._globalWatchArgs || (t._globalWatchArgs = []), t._globalWatchArgs.push(arguments);
1407    }),
1408        (Zt.Model = ue);
1409    var he = {
1410        construct: function (e) {
1411            var n = t.Deferred(),
1412                i = n.promise();
1413            return (
1414                "function" == typeof e &&
1415                    e(
1416                        function (t) {
1417                            n.resolve(t), Tt(i, t);
1418                        },
1419                        function () {
1420                            n.reject(), Ct(i);
1421                        }
1422                    ),
1423                i
1424            );
1425        },
1426        resolve: function (e) {
1427            var n = t.Deferred().resolve(e),
1428                i = n.promise();
1429            return Tt(i, e), i;
1430        },
1431        reject: function () {
1432            var e = t.Deferred().reject(),
1433                n = e.promise();
1434            return Ct(n), n;
1435        },
1436    };
1437    Zt.Promise = he;
1438    var ce = bt.extend(fe, {
1439        q: null,
1440        isPaused: !1,
1441        isRunning: !1,
1442        constructor: function () {
1443            this.q = [];
1444        },
1445        queue: function () {
1446            this.q.push.apply(this.q, arguments), this.tryStart();
1447        },
1448        pause: function () {
1449            this.isPaused = !0;
1450        },
1451        resume: function () {
1452            (this.isPaused = !1), this.tryStart();
1453        },
1454        tryStart: function () {
1455            !this.isRunning && this.canRunNext() && ((this.isRunning = !0), this.trigger("start"), this.runNext(
1455));
1456        },
1457        canRunNext: function () {
1458            return !this.isPaused && this.q.length;
1459        },
1460        runNext: function () {
1461            this.runTask(this.q.shift());
1462        },
1463        runTask: function (t) {
1464            this.runTaskFunc(t);
1465        },
1466        runTaskFunc: function (t) {
1467            function e() {
1468                n.canRunNext() ? n.runNext() : ((n.isRunning = !1), n.trigger("stop"));
1469            }
1470            var n = this,
1471                i = t();
1472            i && i.then ? i.then(e) : e();
1473        },
1474    });
1475    Zt.TaskQueue = ce;
1476    var de = ce.extend({
1477        waitsByNamespace: null,
1478        waitNamespace: null,
1479        waitId: null,
1480        constructor: function (t) {
1481            ce.call(this), (this.waitsByNamespace = t || {});
1482        },
1483        queue: function (t, e, n) {
1484            var i,
1485                r = { func: t, namespace: e, type: n };
1486            e && (i = this.waitsByNamespace[e]),
1487                this.waitNamespace && (e === this.waitNamespace && null != i ? this.delayWait(i) : (this.clearWait(), this.tryStart())),
1488                this.compoundTask(r) && (this.waitNamespace || null == i ? this.tryStart() : this.startWait(e, i));
1489        },
1490        startWait: function (t, e) {
1491            (this.waitNamespace = t), this.spawnWait(e);
1492        },
1493        delayWait: function (t) {
1494            clearTimeout(this.waitId), this.spawnWait(t);
1495        },
1496        spawnWait: function (t) {
1497            var e = this;
1498            this.waitId = setTimeout(function () {
1499                (e.waitNamespace = null), e.tryStart();
1500            }, t);
1501        },
1502        clearWait: function () {
1503            this.waitNamespace && (clearTimeout(this.waitId), (this.waitId = null), (this.waitNamespace = null));
1504        },
1505        canRunNext: function () {
1506            if (!ce.prototype.canRunNext.apply(this, arguments)) return !1;
1507            if (this.waitNamespace) {
1508                for (var t = this.q, e = 0; e < t.length; e++) if (t[e].namespace !== this.waitNamespace) return !0;
1509                return !1;
1510            }
1511            return !0;
1512        },
1513        runTask: function (t) {
1514            this.runTaskFunc(t.func);
1515        },
1516        compoundTask: function (t) {
1517            var e,
1518                n,
1519                i = this.q,
1520                r = !0;
1521            if (t.namespace && ("destroy" === t.type || "init" === t.type)) {
1522                for (e = i.length - 1; e >= 0; e--) (n = i[e]), n.namespace !== t.namespace || ("add" !== n.type && "remove" !== n.type) || i.splice(e, 1);
1523                "destroy" === t.type
1524                    ? i.length && ((n = i[i.length - 1]), n.namespace === t.namespace && ("init" === n.type ? ((r = !1), i.pop()) : "destroy" === n.type && (r = !1)))
1525                    : "init" === t.type && i.length && ((n = i[i.length - 1]), n.namespace === t.namespace && "init" === n.type && i.pop());
1526            }
1527            return r && i.push(t), r;
1528        },
1529    });
1530    Zt.RenderQueue = de;
1531    var fe = (Zt.EmitterMixin = {
1532            on: function (e, n) {
1533                return t(this).on(e, this._prepareIntercept(n)), this;
1534            },
1535            one: function (e, n) {
1536                return t(this).one(e, this._prepareIntercept(n)), this;
1537            },
1538            _prepareIntercept: function (e) {
1539                var n = function (t, n) {
1540                    return e.apply(n.context || this, n.args || []);
1541                };
1542                return e.guid || (e.guid = t.guid++), (n.guid = e.guid), n;
1543            },
1544            off: function (e, n) {
1545                return t(this).off(e, n), this;
1546            },
1547            trigger: function (e) {
1548                var n = Array.prototype.slice.call(arguments, 1);
1549                return t(this).triggerHandler(e, { args: n }), this;
1550            },
1551            triggerWith: function (e, n, i) {
1552                return t(this).triggerHandler(e, { context: n, args: i }), this;
1553            },
1554        }),
1555        ge = (Zt.ListenerMixin = (function () {
1556            var e = 0;
1557            return {
1558                listenerId: null,
1559                listenTo: function (e, n, i) {
1560                    if ("object" == typeof n) for (var r in n) n.hasOwnProperty(r) && this.listenTo(e, r, n[r]);
1561                    else "string" == typeof n && e.on(n + "." + this.getListenerNamespace(), t.proxy(i, this));
1562                },
1563                stopListeningTo: function (t, e) {
1564                    t.off((e || "") + "." + this.getListenerNamespace());
1565                },
1566                getListenerNamespace: function () {
1567                    return null == this.listenerId && (this.listenerId = e++), "_listener" + this.listenerId;
1568                },
1569            };
1570        })()),
1571        pe = bt.extend(ge, {
1572            isHidden: !0,
1573            options: null,
1574            el: null,
1575            margin: 10,
1576            constructor: function (t) {
1577                this.options = t || {};
1578            },
1579            show: function () {
1580                this.isHidden && (this.el || this.render(), this.el.show(), this.position(), (this.isHidden = !1), this.trigger("show"));
1581            },
1582            hide: function () {
1583                this.isHidden || (this.el.hide(), (this.isHidden = !0), this.trigger("hide"));
1584            },
1585            render: function () {
1586                var e = this,
1587                    n = this.options;
1588                (this.el = t('<div class="fc-popover"/>')
1589                    .addClass(n.className || "")
1590                    .css({ top: 0, left: 0 })
1591                    .append(n.content)
1592                    .appendTo(n.parentEl)),
1593                    this.el.on("click", ".fc-close", function () {
1594                        e.hide();
1595                    }),
1596                    n.autoHide && this.listenTo(t(document), "mousedown", this.documentMousedown);
1597            },
1598            documentMousedown: function (e) {
1599                this.el && !t(e.target).closest(this.el).length && this.hide();
1600            },
1601            removeElement: function () {
1602                this.hide(), this.el && (this.el.remove(), (this.el = null)), this.stopListeningTo(t(document), "mousedown");
1603            },
1604            position: function () {
1605                var e,
1606                    n,
1607                    i,
1608                    r,
1609                    s,
1610                    o = this.options,
1611                    a = this.el.offsetParent().offset(),
1612                    l = this.el.outerWidth(),
1613                    u = this.el.outerHeight(),
1614                    h = t(window),
1615                    d = c(this.el);
1616                (r = o.top || 0),
1617                    (s = void 0 !== o.left ? o.left : void 0 !== o.right ? o.right - l : 0),
1618                    d.is(window) || d.is(document) ? ((d = h), (e = 0), (n = 0)) : ((i = d.offset()), (e = i.top), (n = i.left)),
1619                    (e += h.scrollTop()),
1620                    (n += h.scrollLeft()),
1621                    !1 !== o.viewportConstrain && ((r = Math.min(r, e + d.outerHeight() - u - this.margin)), (r = Math.max(r, e + this.margin)), (s = Math.min(s, n + d.outerWidth() - l - this.margin)), (s = Math.max(s, n + this.margin))),
1622                    this.el.css({ top: r - a.top, left: s - a.left });
1623            },
1624            trigger: function (t) {
1625                this.options[t] && this.options[t].apply(this, Array.prototype.slice.call(arguments, 1));
1626            },
1627        }),
1628        ve = (Zt.CoordCache = bt.extend({
1629            els: null,
1630            forcedOffsetParentEl: null,
1631            origin: null,
1632            boundingRect: null,
1633            isHorizontal: !1,
1634            isVertical: !1,
1635            lefts: null,
1636            rights: null,
1637            tops: null,
1638            bottoms: null,
1639            constructor: function (e) {
1640                (this.els = t(e.els)), (this.isHorizontal = e.isHorizontal), (this.isVertical = e.isVertical), (this.forcedOffsetParentEl = e.offsetParent ? t(e.offsetParent) : null);
1641            },
1642            build: function () {
1643                var t = this.forcedOffsetParentEl;
1644                !t && this.els.length > 0 && (t = this.els.eq(0).offsetParent()),
1645                    (this.origin = t ? t.offset() : null),
1646                    (this.boundingRect = this.queryBoundingRect()),
1647                    this.isHorizontal && this.buildElHorizontals(),
1648                    this.isVertical && this.buildElVerticals();
1649            },
1650            clear: function () {
1651                (this.origin = null), (this.boundingRect = null), (this.lefts = null), (this.rights = null), (this.tops = null), (this.bottoms = null);
1652            },
1653            ensureBuilt: function () {
1654                this.origin || this.build();
1655            },
1656            buildElHorizontals: function () {
1657                var e = [],
1658                    n = [];
1659                this.els.each(function (i, r) {
1660                    var s = t(r),
1661                        o = s.offset().left,
1662                        a = s.outerWidth();
1663                    e.push(o), n.push(o + a);
1664                }),
1665                    (this.lefts = e),
1666                    (this.rights = n);
1667            },
1668            buildElVerticals: function () {
1669                var e = [],
1670                    n = [];
1671                this.els.each(function (i, r) {
1672                    var s = t(r),
1673                        o = s.offset().top,
1674                        a = s.outerHeight();
1675                    e.push(o), n.push(o + a);
1676                }),
1677                    (this.tops = e),
1678                    (this.bottoms = n);
1679            },
1680            getHorizontalIndex: function (t) {
1681                this.ensureBuilt();
1682                var e,
1683                    n = this.lefts,
1684                    i = this.rights,
1685                    r = n.length;
1686                for (e = 0; e < r; e++) if (t >= n[e] && t < i[e]) return e;
1687            },
1688            getVerticalIndex: function (t) {
1689                this.ensureBuilt();
1690                var e,
1691                    n = this.tops,
1692                    i = this.bottoms,
1693                    r = n.length;
1694                for (e = 0; e < r; e++) if (t >= n[e] && t < i[e]) return e;
1695            },
1696            getLeftOffset: function (t) {
1697                return this.ensureBuilt(), this.lefts[t];
1698            },
1699            getLeftPosition: function (t) {
1700                return this.ensureBuilt(), this.lefts[t] - this.origin.left;
1701            },
1702            getRightOffset: function (t) {
1703                return this.ensureBuilt(), this.rights[t];
1704            },
1705            getRightPosition: function (t) {
1706                return this.ensureBuilt(), this.rights[t] - this.origin.left;
1707            },
1708            getWidth: function (t) {
1709                return this.ensureBuilt(), this.rights[t] - this.lefts[t];
1710            },
1711            getTopOffset: function (t) {
1712                return this.ensureBuilt(), this.tops[t];
1713            },
1714            getTopPosition: function (t) {
1715                return this.ensureBuilt(), this.tops[t] - this.origin.top;
1716            },
1717            getBottomOffset: function (t) {
1718                return this.ensureBuilt(), this.bottoms[t];
1719            },
1720            getBottomPosition: function (t) {
1721                return this.ensureBuilt(), this.bottoms[t] - this.origin.top;
1722            },
1723            getHeight: function (t) {
1724                return this.ensureBuilt(), this.bottoms[t] - this.tops[t];
1725            },
1726            queryBoundingRect: function () {
1727                var t;
1728                return this.els.length > 0 && ((t = c(this.els.eq(0))), !t.is(document)) ? f(t) : null;
1729            },
1730            isPointInBounds: function (t, e) {
1731                return this.isLeftInBounds(t) && this.isTopInBounds(e);
1732            },
1733            isLeftInBounds: function (t) {
1734                return !this.boundingRect || (t >= this.boundingRect.left && t < this.boundingRect.right);
1735            },
1736            isTopInBounds: function (t) {
1737                return !this.boundingRect || (t >= this.boundingRect.top && t < this.boundingRect.bottom);
1738            },
1739        })),
1740        me = (Zt.DragListener = bt.extend(ge, {
1741            options: null,
1742            subjectEl: null,
1743            originX: null,
1744            originY: null,
1745            scrollEl: null,
1746            isInteracting: !1,
1747            isDistanceSurpassed: !1,
1748            isDelayEnded: !1,
1749            isDragging: !1,
1750            isTouch: !1,
1751            isGeneric: !1,
1752            delay: null,
1753            delayTimeoutId: null,
1754            minDistance: null,
1755            shouldCancelTouchScroll: !0,
1756            scrollAlwaysKills: !1,
1757            constructor: function (t) {
1758                this.options = t || {};
1759            },
1760            startInteraction: function (e, n) {
1761                if ("mousedown" === e.type) {
1762                    if (we.get().shouldIgnoreMouse()) return;
1763                    if (!S(e)) return;
1764                    e.preventDefault();
1765                }
1766                this.isInteracting ||
1767                    ((n = n || {}),
1768                    (this.delay = ut(n.delay, this.options.delay, 0)),
1769                    (this.minDistance = ut(n.distance, this.options.distance, 0)),
1770                    (this.subjectEl = this.options.subjectEl),
1771                    T(t("body")),
1772                    (this.isInteracting = !0),
1773                    (this.isTouch = D(e)),
1774                    (this.isGeneric = "dragstart" === e.type),
1775                    (this.isDelayEnded = !1),
1776                    (this.isDistanceSurpassed = !1),
1777                    (this.originX = b(e)),
1778                    (this.originY = E(e)),
1779                    (this.scrollEl = c(t(e.target))),
1780                    this.bindHandlers(),
1781                    this.initAutoScroll(),
1782                    this.handleInteractionStart(e),
1783                    this.startDelay(e),
1784                    this.minDistance || this.handleDistanceSurpassed(e));
1785            },
1786            handleInteractionStart: function (t) {
1787                this.trigger("interactionStart", t);
1788            },
1789            endInteraction: function (e, n) {
1790                this.isInteracting &&
1791                    (this.endDrag(e),
1792                    this.delayTimeoutId && (clearTimeout(this.delayTimeoutId), (this.delayTimeoutId = null)),
1793                    this.destroyAutoScroll(),
1794                    this.unbindHandlers(),
1795                    (this.isInteracting = !1),
1796                    this.handleInteractionEnd(e, n),
1797                    C(t("body")));
1798            },
1799            handleInteractionEnd: function (t, e) {
1800                this.trigger("interactionEnd", t, e || !1);
1801            },
1802            bindHandlers: function () {
1803                var e = we.get();
1804                this.isGeneric
1805                    ? this.listenTo(t(document), { drag: this.handleMove, dragstop: this.endInteraction })
1806                    : this.isTouch
1807                    ? this.listenTo(e, { touchmove: this.handleTouchMove, touchend: this.endInteraction, scroll: this.handleTouchScroll })
1808                    : this.listenTo(e, { mousemove: this.handleMouseMove, mouseup: this.endInteraction }),
1809                    this.listenTo(e, { selectstart: H, contextmenu: H });
1810            },
1811            unbindHandlers: function () {
1812                this.stopListeningTo(we.get()), this.stopListeningTo(t(document));
1813            },
1814            startDrag: function (t, e) {
1815                this.startInteraction(t, e), this.isDragging || ((this.isDragging = !0), this.handleDragStart(t));
1816            },
1817            handleDragStart: function (t) {
1818                this.trigger("dragStart", t);
1819            },
1820            handleMove: function (t) {
1821                var e = b(t) - this.originX,
1822                    n = E(t) - this.originY,
1823                    i = this.minDistance;
1824                this.isDistanceSurpassed || (e * e + n * n >= i * i && this.handleDistanceSurpassed(t)), this.isDragging && this.handleDrag(e, n, t);
1825            },
1826            handleDrag: function (t, e, n) {
1827                this.trigger("drag", t, e, n), this.updateAutoScroll(n);
1828            },
1829            endDrag: function (t) {
1830                this.isDragging && ((this.isDragging = !1), this.handleDragEnd(t));
1831            },
1832            handleDragEnd: function (t) {
1833                this.trigger("dragEnd", t);
1834            },
1835            startDelay: function (t) {
1836                var e = this;
1837                this.delay
1838                    ? (this.delayTimeoutId = setTimeout(function () {
1839                          e.handleDelayEnd(t);
1840                      }, this.delay))
1841                    : this.handleDelayEnd(t);
1842            },
1843            handleDelayEnd: function (t) {
1844                (this.isDelayEnded = !0), this.isDistanceSurpassed && this.startDrag(t);
1845            },
1846            handleDistanceSurpassed: function (t) {
1847                (this.isDistanceSurpassed = !0), this.isDelayEnded && this.startDrag(t);
1848            },
1849            handleTouchMove: function (t) {
1850                this.isDragging && this.shouldCancelTouchScroll && t.preventDefault(), this.handleMove(t);
1851            },
1852            handleMouseMove: function (t) {
1853                this.handleMove(t);
1854            },
1855            handleTouchScroll: function (t) {
1856                (this.isDragging && !this.scrollAlwaysKills) || this.endInteraction(t, !0);
1857            },
1858            trigger: function (t) {
1859                this.options[t] && this.options[t].apply(this, Array.prototype.slice.call(arguments, 1)), this["_" + t] && this["_" + t].apply(this, Array.prototype.slice.call(arguments, 1));
1860            },
1861        }));
1862    me.mixin({
1863        isAutoScroll: !1,
1864        scrollBounds: null,
1865        scrollTopVel: null,
1866        scrollLeftVel: null,
1867        scrollIntervalId: null,
1868        scrollSensitivity: 30,
1869        scrollSpeed: 200,
1870        scrollIntervalMs: 50,
1871        initAutoScroll: function () {
1872            var t = this.scrollEl;
1873            (this.isAutoScroll = this.options.scroll && t && !t.is(window) && !t.is(document)), this.isAutoScroll && this.listenTo(t, "scroll", yt(this.handleDebouncedScroll, 100));
1874        },
1875        destroyAutoScroll: function () {
1876            this.endAutoScroll(), this.isAutoScroll && this.stopListeningTo(this.scrollEl, "scroll");
1877        },
1878        computeScrollBounds: function () {
1879            this.isAutoScroll && (this.scrollBounds = d(this.scrollEl));
1880        },
1881        updateAutoScroll: function (t) {
1882            var e,
1883                n,
1884                i,
1885                r,
1886                s = this.scrollSensitivity,
1887                o = this.scrollBounds,
1888                a = 0,
1889                l = 0;
1890            o &&
1891                ((e = (s - (E(t) - o.top)) / s),
1892                (n = (s - (o.bottom - E(t))) / s),
1893                (i = (s - (b(t) - o.left)) / s),
1894                (r = (s - (o.right - b(t))) / s),
1895                e >= 0 && e <= 1 ? (a = e * this.scrollSpeed * -1) : n >= 0 && n <= 1 && (a = n * this.scrollSpeed),
1896                i >= 0 && i <= 1 ? (l = i * this.scrollSpeed * -1) : r >= 0 && r <= 1 && (l = r * this.scrollSpeed)),
1897                this.setScrollVel(a, l);
1898        },
1899        setScrollVel: function (t, e) {
1900            (this.scrollTopVel = t),
1901                (this.scrollLeftVel = e),
1902                this.constrainScrollVel(),
1903                (!this.scrollTopVel && !this.scrollLeftVel) || this.scrollIntervalId || (this.scrollIntervalId = setInterval(mt(this, "scrollIntervalFunc"), this.scrollIntervalMs));
1904        },
1905        constrainScrollVel: function () {
1906            var t = this.scrollEl;
1907            this.scrollTopVel < 0 ? t.scrollTop() <= 0 && (this.scrollTopVel = 0) : this.scrollTopVel > 0 && t.scrollTop() + t[0].clientHeight >= t[0].scrollHeight && (this.scrollTopVel = 0),
1908                this.scrollLeftVel < 0 ? t.scrollLeft() <= 0 && (this.scrollLeftVel = 0) : this.scrollLeftVel > 0 && t.scrollLeft() + t[0].clientWidth >= t[0].scrollWidth && (this.scrollLeftVel = 0);
1909        },
1910        scrollIntervalFunc: function () {
1911            var t = this.scrollEl,
1912                e = this.scrollIntervalMs / 1e3;
1913            this.scrollTopVel && t.scrollTop(t.scrollTop() + this.scrollTopVel * e),
1914                this.scrollLeftVel && t.scrollLeft(t.scrollLeft() + this.scrollLeftVel * e),
1915                this.constrainScrollVel(),
1916                this.scrollTopVel || this.scrollLeftVel || this.endAutoScroll();
1917        },
1918        endAutoScroll: function () {
1919            this.scrollIntervalId && (clearInterval(this.scrollIntervalId), (this.scrollIntervalId = null), this.handleScrollEnd());
1920        },
1921        handleDebouncedScroll: function () {
1922            this.scrollIntervalId || this.handleScrollEnd();
1923        },
1924        handleScrollEnd: function () {},
1925    });
1926    var ye = me.extend({
1927        component: null,
1928        origHit: null,
1929        hit: null,
1930        coordAdjust: null,
1931        constructor: function (t, e) {
1932            me.call(this, e), (this.component = t);
1933        },
1934        handleInteractionStart: function (t) {
1935            var e,
1936                n,
1937                i,
1938                r = this.subjectEl;
1939            this.component.hitsNeeded(),
1940                this.computeScrollBounds(),
1941                t
1942                    ? ((n = { left: b(t), top: E(t) }),
1943                      (i = n),
1944                      r && ((e = d(r)), (i = x(i, e))),
1945                      (this.origHit = this.queryHit(i.left, i.top)),
1946                      r && this.options.subjectCenter && (this.origHit && (e = R(this.origHit, e) || e), (i = I(e))),
1947                      (this.coordAdjust = k(i, n)))
1948                    : ((this.origHit = null), (this.coordAdjust = null)),
1949                me.prototype.handleInteractionStart.apply(this, arguments);
1950        },
1951        handleDragStart: function (t) {
1952            var e;
1953            me.prototype.handleDragStart.apply(this, arguments), (e = this.queryHit(b(t), E(t))) && this.handleHitOver(e);
1954        },
1955        handleDrag: function (t, e, n) {
1956            var i;
1957            me.prototype.handleDrag.apply(this, arguments), (i = this.queryHit(b(n), E(n))), Ht(i, this.hit) || (this.hit && this.handleHitOut(), i && this.handleHitOver(i));
1958        },
1959        handleDragEnd: function () {
1960            this.handleHitDone(), me.prototype.handleDragEnd.apply(this, arguments);
1961        },
1962        handleHitOver: function (t) {
1963            var e = Ht(t, this.origHit);
1964            (this.hit = t), this.trigger("hitOver", this.hit, e, this.origHit);
1965        },
1966        handleHitOut: function () {
1967            this.hit && (this.trigger("hitOut", this.hit), this.handleHitDone(), (this.hit = null));
1968        },
1969        handleHitDone: function () {
1970            this.hit && this.trigger("hitDone", this.hit);
1971        },
1972        handleInteractionEnd: function () {
1973            me.prototype.handleInteractionEnd.apply(this, arguments), (this.origHit = null), (this.hit = null), this.component.hitsNotNeeded();
1974        },
1975        handleScrollEnd: function () {
1976            me.prototype.handleScrollEnd.apply(this, arguments), this.isDragging && (this.component.releaseHits(), this.component.prepareHits());
1977        },
1978        queryHit: function (t, e) {
1979            return this.coordAdjust && ((t += this.coordAdjust.left), (e += this.coordAdjust.top)), this.component.queryHit(t, e);
1980        },
1981    });
1982    Zt.touchMouseIgnoreWait = 500;
1983    var we = bt.extend(ge, fe, {
1984        isTouching: !1,
1985        mouseIgnoreDepth: 0,
1986        handleScrollProxy: null,
1987        bind: function () {
1988            var e = this;
1989            this.listenTo(t(document), {
1990                touchstart: this.handleTouchStart,
1991                touchcancel: this.handleTouchCancel,
1992                touchend: this.handleTouchEnd,
1993                mousedown: this.handleMouseDown,
1994                mousemove: this.handleMouseMove,
1995                mouseup: this.handleMouseUp,
1996                click: this.handleClick,
1997                selectstart: this.handleSelectStart,
1998                contextmenu: this.handleContextMenu,
1999            }),
2000                window.addEventListener(
2001                    "touchmove",
2002                    (this.handleTouchMoveProxy = function (n) {
2003                        e.handleTouchMove(t.Event(n));
2004                    }),
2005                    { passive: !1 }
2006                ),
2007                window.addEventListener(
2008                    "scroll",
2009                    (this.handleScrollProxy = function (n) {
2010                        e.handleScroll(t.Event(n));
2011                    }),
2012                    !0
2013                );
2014        },
2015        unbind: function () {
2016            this.stopListeningTo(t(document)), window.removeEventListener("touchmove", this.handleTouchMoveProxy), window.removeEventListener("scroll", this.handleScrollProxy, !0);
2017        },
2018        handleTouchStart: function (t) {
2019            this.stopTouch(t, !0), (this.isTouching = !0), this.trigger("touchstart", t);
2020        },
2021        handleTouchMove: function (t) {
2022            this.isTouching && this.trigger("touchmove", t);
2023        },
2024        handleTouchCancel: function (t) {
2025            this.isTouching && (this.trigger("touchcancel", t), this.stopTouch(t));
2026        },
2027        handleTouchEnd: function (t) {
2028            this.stopTouch(t);
2029        },
2030        handleMouseDown: function (t) {
2031            this.shouldIgnoreMouse() || this.trigger("mousedown", t);
2032        },
2033        handleMouseMove: function (t) {
2034            this.shouldIgnoreMouse() || this.trigger("mousemove", t);
2035        },
2036        handleMouseUp: function (t) {
2037            this.shouldIgnoreMouse() || this.trigger("mouseup", t);
2038        },
2039        handleClick: function (t) {
2040            this.shouldIgnoreMouse() || this.trigger("click", t);
2041        },
2042        handleSelectStart: function (t) {
2043            this.trigger("selectstart", t);
2044        },
2045        handleContextMenu: function (t) {
2046            this.trigger("contextmenu", t);
2047        },
2048        handleScroll: function (t) {
2049            this.trigger("scroll", t);
2050        },
2051        stopTouch: function (t, e) {
2052            this.isTouching && ((this.isTouching = !1), this.trigger("touchend", t), e || this.startTouchMouseIgnore());
2053        },
2054        startTouchMouseIgnore: function () {
2055            var t = this,
2056                e = Zt.touchMouseIgnoreWait;
2057            e &&
2058                (this.mouseIgnoreDepth++,
2059                setTimeout(function () {
2060                    t.mouseIgnoreDepth--;
2061                }, e));
2062        },
2063        shouldIgnoreMouse: function () {
2064            return this.isTouching || Boolean(this.mouseIgnoreDepth);
2065        },
2066    });
2067    !(function () {
2068        var t = null,
2069            e = 0;
2070        (we.get = function () {
2071            return t || ((t = new we()), t.bind()), t;
2072        }),
2073            (we.needed = function () {
2074                we.get(), e++;
2075            }),
2076            (we.unneeded = function () {
2077                --e || (t.unbind(), (t = null));
2078            });
2079    })();
2080    var Se = bt.extend(ge, {
2081            options: null,
2082            sourceEl: null,
2083            el: null,
2084            parentEl: null,
2085            top0: null,
2086            left0: null,
2087            y0: null,
2088            x0: null,
2089            topDelta: null,
2090            leftDelta: null,
2091            isFollowing: !1,
2092            isHidden: !1,
2093            isAnimating: !1,
2094            constructor: function (e, n) {
2095                (this.options = n = n || {}), (this.sourceEl = e), (this.parentEl = n.parentEl ? t(n.parentEl) : e.parent());
2096            },
2097            start: function (e) {
2098                this.isFollowing ||
2099                    ((this.isFollowing = !0),
2100                    (this.y0 = E(e)),
2101                    (this.x0 = b(e)),
2102                    (this.topDelta = 0),
2103                    (this.leftDelta = 0),
2104                    this.isHidden || this.updatePosition(),
2105                    D(e) ? this.listenTo(t(document), "touchmove", this.handleMove) : this.listenTo(t(document), "mousemove", this.handleMove));
2106            },
2107            stop: function (e, n) {
2108                function i() {
2109                    (r.isAnimating = !1), r.removeElement(), (r.top0 = r.left0 = null), n && n();
2110                }
2111                var r = this,
2112                    s = this.options.revertDuration;
2113                this.isFollowing &&
2114                    !this.isAnimating &&
2115                    ((this.isFollowing = !1), this.stopListeningTo(t(document)), e && s && !this.isHidden ? ((this.isAnimating = !0), this.el.animate({ top: this.top0, left: this.left0 }, { duration: s, complete: i })) : i());
2116            },
2117            getEl: function () {
2118                var t = this.el;
2119                return (
2120                    t ||
2121                        ((t = this.el = this.sourceEl
2122                            .clone()
2123                            .addClass(this.options.additionalClass || "")
2124                            .css({
2125                                position: "absolute",
2126                                visibility: "",
2127                                display: this.isHidden ? "none" : "",
2128                                margin: 0,
2129                                right: "auto",
2130                                bottom: "auto",
2131                                width: this.sourceEl.width(),
2132                                height: this.sourceEl.height(),
2133                                opacity: this.options.opacity || "",
2134                                zIndex: this.options.zIndex,
2135                            })),
2136                        t.addClass("fc-unselectable"),
2137                        t.appendTo(this.parentEl)),
2138                    t
2139                );
2140            },
2141            removeElement: function () {
2142                this.el && (this.el.remove(), (this.el = null));
2143            },
2144            updatePosition: function () {
2145                var t, e;
2146                this.getEl(),
2147                    null === this.top0 && ((t = this.sourceEl.offset()), (e = this.el.offsetParent().offset()), (this.top0 = t.top - e.top), (this.left0 = t.left - e.left)),
2148                    this.el.css({ top: this.top0 + this.topDelta, left: this.left0 + this.leftDelta });
2149            },
2150            handleMove: function (t) {
2151                (this.topDelta = E(t) - this.y0), (this.leftDelta = b(t) - this.x0), this.isHidden || this.updatePosition();
2152            },
2153            hide: function () {
2154                this.isHidden || ((this.isHidden = !0), this.el && this.el.hide());
2155            },
2156            show: function () {
2157                this.isHidden && ((this.isHidden = !1), this.updatePosition(), this.getEl().show());
2158            },
2159        }),
2160        be = (Zt.Grid = bt.extend(ge, {
2161            hasDayInteractions: !0,
2162            view: null,
2163            isRTL: null,
2164            start: null,
2165            end: null,
2166            el: null,
2167            elsByFill: null,
2168            eventTimeFormat: null,
2169            displayEventTime: null,
2170            displayEventEnd: null,
2171            minResizeDuration: null,
2172            largeUnit: null,
2173            dayClickListener: null,
2174            daySelectListener: null,
2175            segDragListener: null,
2176            segResizeListener: null,
2177            externalDragListener: null,
2178            constructor: function (t) {
2179                (this.view = t), (this.isRTL = t.opt("isRTL")), (this.elsByFill = {}
2179), (this.dayClickListener = this.buildDayClickListener()), (this.daySelectListener = this.buildDaySelectListener());
2180            },
2181            computeEventTimeFormat: function () {
2182                return this.view.opt("smallTimeFormat");
2183            },
2184            computeDisplayEventTime: function () {
2185                return !0;
2186            },
2187            computeDisplayEventEnd: function () {
2188                return !0;
2189            },
2190            setRange: function (t) {
2191                (this.start = t.start.clone()), (this.end = t.end.clone()), this.rangeUpdated(), this.processRangeOptions();
2192            },
2193            rangeUpdated: function () {},
2194            processRangeOptions: function () {
2195                var t,
2196                    e,
2197                    n = this.view;
2198                (this.eventTimeFormat = n.opt("eventTimeFormat") || n.opt("timeFormat") || this.computeEventTimeFormat()),
2199                    (t = n.opt("displayEventTime")),
2200                    null == t && (t = this.computeDisplayEventTime()),
2201                    (e = n.opt("displayEventEnd")),
2202                    null == e && (e = this.computeDisplayEventEnd()),
2203                    (this.displayEventTime = t),
2204                    (this.displayEventEnd = e);
2205            },
2206            spanToSegs: function (t) {},
2207            diffDates: function (t, e) {
2208                return this.largeUnit ? G(t, e, this.largeUnit) : F(t, e);
2209            },
2210            hitsNeededDepth: 0,
2211            hitsNeeded: function () {
2212                this.hitsNeededDepth++ || this.prepareHits();
2213            },
2214            hitsNotNeeded: function () {
2215                this.hitsNeededDepth && !--this.hitsNeededDepth && this.releaseHits();
2216            },
2217            prepareHits: function () {},
2218            releaseHits: function () {},
2219            queryHit: function (t, e) {},
2220            getSafeHitSpan: function (t) {
2221                var e = this.getHitSpan(t);
2222                return Q(e, this.view.activeRange) ? e : null;
2223            },
2224            getHitSpan: function (t) {},
2225            getHitEl: function (t) {},
2226            setElement: function (t) {
2227                (this.el = t), this.hasDayInteractions && (T(t), this.bindDayHandler("touchstart", this.dayTouchStart), this.bindDayHandler("mousedown", this.dayMousedown)), this.bindSegHandlers(), this.bindGlobalHandlers();
2228            },
2229            bindDayHandler: function (e, n) {
2230                var i = this;
2231                this.el.on(e, function (e) {
2232                    if (!t(e.target).is(i.segSelector + "," + i.segSelector + " *,.fc-more,a[data-goto]")) return n.call(i, e);
2233                });
2234            },
2235            removeElement: function () {
2236                this.unbindGlobalHandlers(), this.clearDragListeners(), this.el.remove();
2237            },
2238            renderSkeleton: function () {},
2239            renderDates: function () {},
2240            unrenderDates: function () {},
2241            bindGlobalHandlers: function () {
2242                this.listenTo(t(document), { dragstart: this.externalDragStart, sortstart: this.externalDragStart });
2243            },
2244            unbindGlobalHandlers: function () {
2245                this.stopListeningTo(t(document));
2246            },
2247            dayMousedown: function (t) {
2248                var e = this.view;
2249                we.get().shouldIgnoreMouse() || (this.dayClickListener.startInteraction(t), e.opt("selectable") && this.daySelectListener.startInteraction(t, { distance: e.opt("selectMinDistance") }));
2250            },
2251            dayTouchStart: function (t) {
2252                var e,
2253                    n = this.view;
2254                n.isSelected ||
2255                    n.selectedEvent ||
2256                    ((e = n.opt("selectLongPressDelay")), null == e && (e = n.opt("longPressDelay")), this.dayClickListener.startInteraction(t), n.opt("selectable") && this.daySelectListener.startInteraction(t, { delay: e }));
2257            },
2258            buildDayClickListener: function () {
2259                var t,
2260                    e = this,
2261                    n = this.view,
2262                    i = new ye(this, {
2263                        scroll: n.opt("dragScroll"),
2264                        interactionStart: function () {
2265                            t = i.origHit;
2266                        },
2267                        hitOver: function (e, n, i) {
2268                            n || (t = null);
2269                        },
2270                        hitOut: function () {
2271                            t = null;
2272                        },
2273                        interactionEnd: function (i, r) {
2274                            var s;
2275                            !r && t && (s = e.getSafeHitSpan(t)) && n.triggerDayClick(s, e.getHitEl(t), i);
2276                        },
2277                    });
2278                return (i.shouldCancelTouchScroll = !1), (i.scrollAlwaysKills = !0), i;
2279            },
2280            buildDaySelectListener: function () {
2281                var t,
2282                    e = this,
2283                    n = this.view;
2284                return new ye(this, {
2285                    scroll: n.opt("dragScroll"),
2286                    interactionStart: function () {
2287                        t = null;
2288                    },
2289                    dragStart: function () {
2290                        n.unselect();
2291                    },
2292                    hitOver: function (n, i, r) {
2293                        var o, a;
2294                        r && ((o = e.getSafeHitSpan(r)), (a = e.getSafeHitSpan(n)), (t = o && a ? e.computeSelection(o, a) : null), t ? e.render
2294Selection(t) : !1 === t && s());
2295                    },
2296                    hitOut: function () {
2297                        (t = null), e.unrenderSelection();
2298                    },
2299                    hitDone: function () {
2300                        o();
2301                    },
2302                    interactionEnd: function (e, i) {
2303                        !i && t && n.reportSelection(t, e);
2304                    },
2305                });
2306            },
2307            clearDragListeners: function () {
2308                this.dayClickListener.endInteraction(),
2309                    this.daySelectListener.endInteraction(),
2310                    this.segDragListener && this.segDragListener.endInteraction(),
2311                    this.segResizeListener && this.segResizeListener.endInteraction(),
2312                    this.externalDragListener && this.externalDragListener.endInteraction();
2313            },
2314            renderEventLocationHelper: function (t, e) {
2315                var n = this.fabricateHelperEvent(t, e);
2316                return this.renderHelper(n, e);
2317            },
2318            fabricateHelperEvent: function (t, e) {
2319                var n = e ? rt(e.event) : {};
2320                return (n.start = t.start.clone()), (n.end = t.end ? t.end.clone() : null), (n.allDay = null), this.view.calendar.normalizeEventDates(n), (n.className = (n.className || []).concat("fc-helper")), e || (n.editable = !1), n;
2321            },
2322            renderHelper: function (t, e) {},
2323            unrenderHelper: function () {},
2324            renderSelection: function (t) {
2325                this.renderHighlight(t);
2326            },
2327            unrenderSelection: function () {
2328                this.unrenderHighlight();
2329            },
2330            computeSelection: function (t, e) {
2331                var n = this.computeSelectionSpan(t, e);
2332                return !(n && !this.view.calendar.isSelectionSpanAllowed(n)) && n;
2333            },
2334            computeSelectionSpan: function (t, e) {
2335                var n = [t.start, t.end, e.start, e.end];
2336                return n.sort(pt), { start: n[0].clone(), end: n[3].clone() };
2337            },
2338            renderHighlight: function (t) {
2339                this.renderFill("highlight", this.spanToSegs(t));
2340            },
2341            unrenderHighlight: function () {
2342                this.unrenderFill("highlight");
2343            },
2344            highlightSegClasses: function () {
2345                return ["fc-highlight"];
2346            },
2347            renderBusinessHours: function () {},
2348            unrenderBusinessHours: function () {},
2349            getNowIndicatorUnit: function () {},
2350            renderNowIndicator: function (t) {},
2351            unrenderNowIndicator: function () {},
2352            renderFill: function (t, e) {},
2353            unrenderFill: function (t) {
2354                var e = this.elsByFill[t];
2355                e && (e.remove(), delete this.elsByFill[t]);
2356            },
2357            renderFillSegEls: function (e, n) {
2358                var i,
2359                    r = this,
2360                    s = this[e + "SegEl"],
2361                    o = "",
2362                    a = [];
2363                if (n.length) {
2364                    for (i = 0; i < n.length; i++) o += this.fillSegHtml(e, n[i]);
2365                    t(o).each(function (e, i) {
2366                        var o = n[e],
2367                            l = t(i);
2368                        s && (l = s.call(r, o, l)), l && ((l = t(l)), l.is(r.fillSegTag) && ((o.el = l), a.push(o)));
2369                    });
2370                }
2371                return a;
2372            },
2373            fillSegTag: "div",
2374            fillSegHtml: function (t, e) {
2375                var n = this[t + "SegClasses"],
2376                    i = this[t + "SegCss"],
2377                    r = n ? n.call(this, e) : [],
2378                    s = dt(i ? i.call(this, e) : {});
2379                return "<" + this.fillSegTag + (r.length ? ' class="' + r.join(" ") + '"' : "") + (s ? ' style="' + s + '"' : "") + " />";
2380            },
2381            getDayClasses: function (t, e) {
2382                var n,
2383                    i = this.view,
2384                    r = [];
2385                return (
2386                    Z(t, i.activeRange)
2387                        ? (r.push("fc-" + Kt[t.day()]),
2388                          1 == i.currentRangeAs("months") && t.month() != i.currentRange.start.month() && r.push("fc-other-month"),
2389                          (n = i.calendar.getNow()),
2390                          t.isSame(n, "day") ? (r.push("fc-today"), !0 !== e && r.push(i.highlightStateClass)) : t < n ? r.push("fc-past") : r.push("fc-future"))
2391                        : r.push("fc-disabled-day"),
2392                    r
2393                );
2394            },
2395        }));
2396    be.mixin({
2397        segSelector: ".fc-event-container > *",
2398        mousedOverSeg: null,
2399        isDraggingSeg: !1,
2400        isResizingSeg: !1,
2401        isDraggingExternal: !1,
2402        segs: null,
2403        renderEvents: function (t) {
2404            var e,
2405                n = [],
2406                i = [];
2407            for (e = 0; e < t.length; e++) (It(t[e]) ? n : i).push(t[e]);
2408            this.segs = [].concat(this.renderBgEvents(n), this.renderFgEvents(i));
2409        },
2410        renderBgEvents: function (t) {
2411            var e = this.eventsToSegs(t);
2412            return this.renderBgSegs(e) || e;
2413        },
2414        renderFgEvents: function (t) {
2415            var e = this.eventsToSegs(t);
2416            return this.renderFgSegs(e) || e;
2417        },
2418        unrenderEvents: function () {
2419            this.handleSegMouseout(), this.clearDragListeners(), this.unrenderFgSegs(), this.unrenderBgSegs(), (this.segs = null);
2420        },
2421        getEventSegs: function () {
2422            return this.segs || [];
2423        },
2424        renderFgSegs: function (t) {},
2425        unrenderFgSegs: function () {},
2426        renderFgSegEls: function (e, n) {
2427            var i,
2428                r = this.view,
2429                s = "",
2430                o = [];
2431            if (e.length) {
2432                for (i = 0; i < e.length; i++) s += this.fgSegHtml(e[i], n);
2433                t(s).each(function (n, i) {
2434                    var s = e[n],
2435                        a = r.resolveEventEl(s.event, t(i));
2436                    a && (a.data("fc-seg", s), (s.el = a), o.push(s));
2437                });
2438            }
2439            return o;
2440        },
2441        fgSegHtml: function (t, e) {},
2442        renderBgSegs: function (t) {
2443            return this.renderFill("bgEvent", t);
2444        },
2445        unrenderBgSegs: function () {
2446            this.unrenderFill("bgEvent");
2447        },
2448        bgEventSegEl: function (t, e) {
2449            return this.view.resolveEventEl(t.event, e);
2450        },
2451        bgEventSegClasses: function (t) {
2452            var e = t.event,
2453                n = e.source || {};
2454            return ["fc-bgevent"].concat(e.className, n.className || []);
2455        },
2456        bgEventSegCss: function (t) {
2457            return { "background-color": this.getSegSkinCss(t)["background-color"] };
2458        },
2459        businessHoursSegClasses: function (t) {
2460            return ["fc-nonbusiness", "fc-bgevent"];
2461        },
2462        buildBusinessHourSegs: function (t, e) {
2463            return this.eventsToSegs(this.buildBusinessHourEvents(t, e));
2464        },
2465        buildBusinessHourEvents: function (e, n) {
2466            var i,
2467                r = this.view.calendar;
2468            return null == n && (n = r.opt("businessHours")), (i = r.computeBusinessHourEvents(e, n)), !i.length && n && (i = [t.extend({}, Ne, { start: this.view.activeRange.end, end: this.view.activeRange.end, dow: null })]), i;
2469        },
2470        bindSegHandlers: function () {
2471            this.bindSegHandlersToEl(this.el);
2472        },
2473        bindSegHandlersToEl: function (t) {
2474            this.bindSegHandlerToEl(t, "touchstart", this.handleSegTouchStart),
2475                this.bindSegHandlerToEl(t, "mouseenter", this.handleSegMouseover),
2476                this.bindSegHandlerToEl(t, "mouseleave", this.handleSegMouseout),
2477                this.bindSegHandlerToEl(t, "mousedown", this.handleSegMousedown),
2478                this.bindSegHandlerToEl(t, "click", this.handleSegClick);
2479        },
2480        bindSegHandlerToEl: function (e, n, i) {
2481            var r = this;
2482            e.on(n, this.segSelector, function (e) {
2483                var n = t(this).data("fc-seg");
2484                if (n && !r.isDraggingSeg && !r.isResizingSeg) return i.call(r, n, e);
2485            });
2486        },
2487        handleSegClick: function (t, e) {
2488            !1 === this.view.publiclyTrigger("eventClick", t.el[0], t.event, e) && e.preventDefault();
2489        },
2490        handleSegMouseover: function (t, e) {
2491            we.get().shouldIgnoreMouse() || this.mousedOverSeg || ((this.mousedOverSeg = t), this.view.isEventResizable(t.event) && t.el.addClass("fc-allow-mouse-resize"), this.view.publiclyTrigger("eventMouseover", t.el[0], t.event, e));
2492        },
2493        handleSegMouseout: function (t, e) {
2494            (e = e || {}),
2495                this.mousedOverSeg &&
2496                    ((t = t || this.mousedOverSeg), (this.mousedOverSeg = null), this.view.isEventResizable(t.event) && t.el.removeClass("fc-allow-mouse-resize"), this.view.publiclyTrigger("eventMouseout", t.el[0], t.event, e));
2497        },
2498        handleSegMousedown: function (t, e) {
2499            !this.startSegResize(t, e, { distance: 5 }) && this.view.isEventDraggable(t.event) && this.buildSegDragListener(t).startInteraction(e, { distance: 5 });
2500        },
2501        handleSegTouchStart: function (t, e) {
2502            var n,
2503                i,
2504                r = this.view,
2505                s = t.event,
2506                o = r.isEventSelected(s),
2507                a = r.isEventDraggable(s),
2508                l = r.isEventResizable(s),
2509                u = !1;
2510            o && l && (u = this.startSegResize(t, e)),
2511                u || (!a && !l) || ((i = r.opt("eventLongPressDelay")), null == i && (i = r.opt("longPressDelay")), (n = a ? this.buildSegDragListener(t) : this.buildSegSelectListener(t)), n.startInteraction(e, { delay: o ? 0 : i }));
2512        },
2513        startSegResize: function (e, n, i) {
2514            return !!t(n.target).is(".fc-resizer") && (this.buildSegResizeListener(e, t(n.target).is(".fc-start-resizer")).startInteraction(n, i), !0);
2515        },
2516        buildSegDragListener: function (t) {
2517            var e,
2518                n,
2519                i,
2520                r = this,
2521                a = this.view,
2522                l = t.el,
2523                u = t.event;
2524            if (this.segDragListener) return this.segDragListener;
2525            var h = (this.segDragListener = new ye(a, {
2526                scroll: a.opt("dragScroll"),
2527                subjectEl: l,
2528                subjectCenter: !0,
2529                interactionStart: function (i) {
2530                    (t.component = r),
2531                        (e = !1),
2532                        (n = new Se(t.el, { additionalClass: "fc-dragging", parentEl: a.el, opacity: h.isTouch ? null : a.opt("dragOpacity"), revertDuration: a.opt("dragRevertDuration"), zIndex: 2 })),
2533                        n.hide(),
2534                        n.start(i);
2535                },
2536                dragStart: function (n) {
2537                    h.isTouch && !a.isEventSelected(u) && a.selectEvent(u), (e = !0), r.handleSegMouseout(t, n), r.segDragStart(t, n), a.hideEvent(u);
2538                },
2539                hitOver: function (e, o, l) {
2540                    var c,
2541                        d,
2542                        f,
2543                        g = !0;
2544                    t.hit && (l = t.hit),
2545                        (c = l.component.getSafeHitSpan(l)),
2546                        (d = e.component.getSafeHitSpan(e)),
2547                        c && d ? ((i = r.computeEventDrop(c, d, u)), (g = i && r.isEventLocationAllowed(i, u))) : (g = !1),
2548                        g || ((i = null), s()),
2549                        i && (f = a.renderDrag(i, t)) ? (f.addClass("fc-dragging"), h.isTouch || r.applyDragOpacity(f), n.hide()) : n.show(),
2550                        o && (i = null);
2551                },
2552                hitOut: function () {
2553                    a.unrenderDrag(), n.show(), (i = null);
2554                },
2555                hitDone: function () {
2556                    o();
2557                },
2558                interactionEnd: function (s) {
2559                    delete t.component,
2560                        n.stop(!i, function () {
2561                            e && (a.unrenderDrag(), r.segDragStop(t, s)), i ? a.reportSegDrop(t, i, r.largeUnit, l, s) : a.showEvent(u);
2562                        }),
2563                        (r.segDragListener = null);
2564                },
2565            }));
2566            return h;
2567        },
2568        buildSegSelectListener: function (t) {
2569            var e = this,
2570                n = this.view,
2571                i = t.event;
2572            if (this.segDragListener) return this.segDragListener;
2573            var r = (this.segDragListener = new me({
2574                dragStart: function (t) {
2575                    r.isTouch && !n.isEventSelected(i) && n.selectEvent(i);
2576                },
2577                interactionEnd: function (t) {
2578                    e.segDragListener = null;
2579                },
2580            }));
2581            return r;
2582        },
2583        segDragStart: function (t, e) {
2584            (this.isDraggingSeg = !0), this.view.publiclyTrigger("eventDragStart", t.el[0], t.event, e, {});
2585        },
2586        segDragStop: function (t, e) {
2587            (this.isDraggingSeg = !1), this.view.publiclyTrigger("eventDragStop", t.el[0], t.event, e, {});
2588        },
2589        computeEventDrop: function (t, e, n) {
2590            var i,
2591                r,
2592                s = this.view.calendar,
2593                o = t.start,
2594                a = e.start;
2595            return (
2596                o.hasTime() === a.hasTime()
2597                    ? ((i = this.diffDates(a, o)), n.allDay && tt(i) ? ((r = { start: n.start.clone(), end: s.getEventEnd(n), allDay: !1 }), s.normalizeEventTimes(r)) : (r = xt(n)), r.start.add(i), r.end && r.end.add(i))
2598                    : (r = { start: a.clone(), end: null, allDay: !a.hasTime() }),
2599                r
2600            );
2601        },
2602        applyDragOpacity: function (t) {
2603            var e = this.view.opt("dragOpacity");
2604            null != e && t.css("opacity", e);
2605        },
2606        externalDragStart: function (e, n) {
2607            var i,
2608                r,
2609                s = this.view;
2610            s.opt("droppable") && ((i = t((n ? n.item : null) || e.target)), (r = s.opt("dropAccept")), (t.isFunction(r) ? r.call(i[0], i) : i.is(r)) && (this.isDraggingExter
2610nal || this.listenToExternalDrag(i, e, n)));
2611        },
2612        listenToExternalDrag: function (t, e, n) {
2613            var i,
2614                r = this,
2615                a = this.view,
2616                l = Nt(t);
2617            (r.externalDragListener = new ye(this, {
2618                interactionStart: function () {
2619                    r.isDraggingExternal = !0;
2620                },
2621                hitOver: function (t) {
2622                    var e = !0,
2623                        n = t.component.getSafeHitSpan(t);
2624                    n ? ((i = r.computeExternalDrop(n, l)), (e = i && r.isExternalLocationAllowed(i, l.eventProps))) : (e = !1), e || ((i = null), s()), i && r.renderDrag(i);
2625                },
2626                hitOut: function () {
2627                    i = null;
2628                },
2629                hitDone: function () {
2630                    o(), r.unrenderDrag();
2631                },
2632                interactionEnd: function (e) {
2633                    i && a.reportExternalDrop(l, i, t, e, n), (r.isDraggingExter
2633nal = !1), (r.externalDragListener = null);
2634                },
2635            })).startDrag(e);
2636        },
2637        computeExternalDrop: function (t, e) {
2638            var n = this.view.calendar,
2639                i = { start: n.applyTimezone(t.start), end: null };
2640            return e.startTime && !i.start.hasTime() && i.start.time(e.startTime), e.duration && (i.end = i.start.clone().add(e.duration)), i;
2641        },
2642        renderDrag: function (t, e) {},
2643        unrenderDrag: function () {},
2644        buildSegResizeListener: function (t, e) {
2645            var n,
2646                i,
2647                r = this,
2648                a = this.view,
2649                l = a.calendar,
2650                u = t.el,
2651                h = t.event,
2652                c = l.getEventEnd(h);
2653            return (this.segResizeListener = new ye(this, {
2654                scroll: a.opt("dragScroll"),
2655                subjectEl: u,
2656                interactionStart: function () {
2657                    n = !1;
2658                },
2659                dragStart: function (e) {
2660                    (n = !0), r.handleSegMouseout(t, e), r.segResizeStart(t, e);
2661                },
2662                hitOver: function (n, o, l) {
2663                    var u = !0,
2664                        d = r.getSafeHitSpan(l),
2665                        f = r.getSafeHitSpan(n);
2666                    d && f ? ((i = e ? r.computeEventStartResize(d, f, h) : r.computeEventEndResize(d, f, h)), (u = i && r.isEventLocationAllowed(i, h))) : (u = !1),
2667                        u ? i.start.isSame(h.start.clone().stripZone()) && i.end.isSame(c.clone().stripZone()) && (i = null) : ((i = null), s()),
2668                        i && (a.hideEvent(h), r.renderEventResize(i, t));
2669                },
2670                hitOut: function () {
2671                    (i = null), a.showEvent(h);
2672                },
2673                hitDone: function () {
2674                    r.unrenderEventResize(), o();
2675                },
2676                interactionEnd: function (e) {
2677                    n && r.segResizeStop(t, e), i ? a.reportSegResize(t, i, r.largeUnit, u, e) : a.showEvent(h), (r.segResizeListener = null);
2678                },
2679            }));
2680        },
2681        segResizeStart: function (t, e) {
2682            (this.isResizingSeg = !0), this.view.publiclyTrigger("eventResizeStart", t.el[0], t.event, e, {});
2683        },
2684        segResizeStop: function (t, e) {
2685            (this.isResizingSeg = !1), this.view.publiclyTrigger("eventResizeStop", t.el[0], t.event, e, {});
2686        },
2687        computeEventStartResize: function (t, e, n) {
2688            return this.computeEventResize("start", t, e, n);
2689        },
2690        computeEventEndResize: function (t, e, n) {
2691            return this.computeEventResize("end", t, e, n);
2692        },
2693        computeEventResize: function (t, e, n, i) {
2694            var r,
2695                s,
2696                o = this.view.calendar,
2697                a = this.diffDates(n[t], e[t]);
2698            return (
2699                (r = { start: i.start.clone(), end: o.getEventEnd(i), allDay: i.allDay }),
2700                r.allDay && tt(a) && ((r.allDay = !1), o.normalizeEventTimes(r)),
2701                r[t].add(a),
2702                r.start.isBefore(r.end) || ((s = this.minResizeDuration || (i.allDay ? o.defaultAllDayEventDuration : o.defaultTimedEventDuration)), "start" == t ? (r.start = r.end.clone().subtract(s)) : (r.end = r.start.clone().add(s))),
2703                r
2704            );
2705        },
2706        renderEventResize: function (t, e) {},
2707        unrenderEventResize: function () {},
2708        getEventTimeText: function (t, e, n) {
2709            return null == e && (e = this.eventTimeFormat), null == n && (n = this.displayEventEnd), this.displayEventTime && t.start.hasTime() ? (n && t.end ? this.view.formatRange(t, e) : t.start.format(e)) : "";
2710        },
2711        getSegClasses: function (t, e, n) {
2712            var i = this.view,
2713                r = ["fc-event", t.isStart ? "fc-start" : "fc-not-start", t.isEnd ? "fc-end" : "fc-not-end"].concat(this.getSegCustomClasses(t));
2714            return e && r.push("fc-draggable"), n && r.push("fc-resizable"), i.isEventSelected(t.event) && r.push("fc-selected"), r;
2715        },
2716        getSegCustomClasses: function (t) {
2717            var e = t.event;
2718            return [].concat(e.className, e.source ? e.source.className : []);
2719        },
2720        getSegSkinCss: function (t) {
2721            return { "background-color": this.getSegBackgroundColor(t), "border-color": this.getSegBorderColor(t), color: this.getSegTextColor(t) };
2722        },
2723        getSegBackgroundColor: function (t) {
2724            return t.event.backgroundColor || t.event.color || this.getSegDefaultBackgroundColor(t);
2725        },
2726        getSegDefaultBackgroundColor: function (t) {
2727            var e = t.event.source || {};
2728            return e.backgroundColor || e.color || this.view.opt("eventBackgroundColor") || this.view.opt("eventColor");
2729        },
2730        getSegBorderColor: function (t) {
2731            return t.event.borderColor || t.event.color || this.getSegDefaultBorderColor(t);
2732        },
2733        getSegDefaultBorderColor: function (t) {
2734            var e = t.event.source || {};
2735            return e.borderColor || e.color || this.view.opt("eventBorderColor") || this.view.opt("eventColor");
2736        },
2737        getSegTextColor: function (t) {
2738            return t.event.textColor || this.getSegDefaultTextColor(t);
2739        },
2740        getSegDefaultTextColor: function (t) {
2741            return (t.event.source || {}).textColor || this.view.opt("eventTextColor");
2742        },
2743        isEventLocationAllowed: function (t, e) {
2744            if (this.isEventLocationInRange(t)) {
2745                var n,
2746                    i = this.view.calendar,
2747                    r = this.eventToSpans(t);
2748                if (r.length) {
2749                    for (n = 0; n < r.length; n++) if (!i.isEventSpanAllowed(r[n], e)) return !1;
2750                    return !0;
2751                }
2752            }
2753            return !1;
2754        },
2755        isExternalLocationAllowed: function (t, e) {
2756            if (this.isEventLocationInRange(t)) {
2757                var n,
2758                    i = this.view.calendar,
2759                    r = this.eventToSpans(t);
2760                if (r.length) {
2761                    for (n = 0; n < r.length; n++) if (!i.isExternalSpanAllowed(r[n], t, e)) return !1;
2762                    return !0;
2763                }
2764            }
2765            return !1;
2766        },
2767        isEventLocationInRange: function (t) {
2768            return Q(this.eventToRawRange(t), this.view.validRange);
2769        },
2770        eventToSegs: function (t) {
2771            return this.eventsToSegs([t]);
2772        },
2773        eventToSpans: function (t) {
2774            var e = this.eventToRange(t);
2775            return e ? this.eventRangeToSpans(e, t) : [];
2776        },
2777        eventsToSegs: function (e, n) {
2778            var i = this,
2779                r = Bt(e),
2780                s = [];
2781            return (
2782                t.each(r, function (t, e) {
2783                    var r,
2784                        o,
2785                        a = [],
2786                        l = [];
2787                    for (o = 0; o < e.length; o++) (r = i.eventToRange(e[o])) && (l.push(r), a.push(e[o]));
2788                    if (kt(e[0])) for (l = i.invertRanges(l), o = 0; o < l.length; o++) s.push.apply(s, i.eventRangeToSegs(l[o], e[0], n));
2789                    else for (o = 0; o < l.length; o++) s.push.apply(s, i.eventRangeToSegs(l[o], a[o], n));
2790                }),
2791                s
2792            );
2793        },
2794        eventToRange: function (t) {
2795            return this.refineRawEventRange(this.eventToRawRange(t));
2796        },
2797        refineRawEventRange: function (t) {
2798            var e = this.view,
2799                n = e.calendar,
2800                i = z(t, e.activeRange);
2801            if (i) return n.localizeMoment(i.start), n.localizeMoment(i.end), i;
2802        },
2803        eventToRawRange: function (t) {
2804            var e = this.view.calendar;
2805            return { start: t.start.clone().stripZone(), end: (t.end ? t.end.clone() : e.getDefaultEventEnd(null != t.allDay ? t.allDay : !t.start.hasTime(), t.start)).stripZone() };
2806        },
2807        eventRangeToSegs: function (t, e, n) {
2808            var i,
2809                r = this.eventRangeToSpans(t, e),
2810                s = [];
2811            for (i = 0; i < r.length; i++) s.push.apply(s, this.eventSpanToSegs(r[i], e, n));
2812            return s;
2813        },
2814        eventRangeToSpans: function (e, n) {
2815            return [t.extend({}, e)];
2816        },
2817        eventSpanToSegs: function (t, e, n) {
2818            var i,
2819                r,
2820                s = n ? n(t) : this.spanToSegs(t);
2821            for (i = 0; i < s.length; i++) (r = s[i]), t.isStart || (r.isStart = !1), t.isEnd || (r.isEnd = !1), (r.event = e), (r.eventStartMS = +t.start), (r.eventDurationMS = t.end - t.start);
2822            return s;
2823        },
2824        invertRanges: function (t) {
2825            var e,
2826                n,
2827                i = this.view,
2828                r = i.activeRange.start.clone(),
2829                s = i.activeRange.end.clone(),
2830                o = [],
2831                a = r;
2832            for (t.sort(Lt), e = 0; e < t.length; e++) (n = t[e]), n.start > a && o.push({ start: a, end: n.start }), n.end > a && (a = n.end);
2833            return a < s && o.push({ start: a, end: s }), o;
2834        },
2835        sortEventSegs: function (t) {
2836            t.sort(mt(this, "compareEventSegs"));
2837        },
2838        compareEventSegs: function (t, e) {
2839            return t.eventStartMS - e.eventStartMS || e.eventDurationMS - t.eventDurationMS || e.event.allDay - t.event.allDay || B(t.event, e.event, this.view.eventOrderSpecs);
2840        },
2841    }),
2842        (Zt.pluckEventDateProps = xt),
2843        (Zt.isBgEvent = It),
2844        (Zt.dataAttrPrefix = "");
2845    var Ee = (Zt.DayTableMixin = {
2846            breakOnWeeks: !1,
2847            dayDates: null,
2848            dayIndices: null,
2849            daysPerRow: null,
2850            rowCnt: null,
2851            colCnt: null,
2852            colHeadFormat: null,
2853            updateDayTable: function () {
2854                for (var t, e, n, i = this.view, r = this.start.clone(), s = 
2854-1, o = [], a = []; r.isBefore(this.end); ) i.isHiddenDay(r) ? o.push(s + 0.5) : (s++, o.push(s), a.push(r.clone())), r.add(1, "days");
2855                if (this.breakOnWeeks) {
2856                    for (e = a[0].day(), t = 1; t < a.length && a[t].day() != e; t++);
2857                    n = Math.ceil(a.length / t);
2858                } else (n = 1), (t = a.length);
2859                (this.dayDates = a), (this.dayIndices = o), (this.daysPerRow = t), (this.rowCnt = n), this.updateDayTableCols();
2860            },
2861            updateDayTableCols: function () {
2862                (this.colCnt = this.computeColCnt()), (this.colHeadFormat = this.view.opt("columnFormat") || this.computeColHeadFormat());
2863            },
2864            computeColCnt: function () {
2865                return this.daysPerRow;
2866            },
2867            getCellDate: function (t, e) {
2868                return this.dayDates[this.getCellDayIndex(t, e)].clone();
2869            },
2870            getCellRange: function (t, e) {
2871                var n = this.getCellDate(t, e);
2872                return { start: n, end: n.clone().add(1, "days") };
2873            },
2874            getCellDayIndex: function (t, e) {
2875                return t * this.daysPerRow + this.getColDayIndex(e);
2876            },
2877            getColDayIndex: function (t) {
2878                return this.isRTL ? this.colCnt - 1 - t : t;
2879            },
2880            getDateDayIndex: function (t) {
2881                var e = this.dayIndices,
2882                    n = t.diff(this.start, "days");
2883                return n < 0 ? e[0] - 1 : n >= e.length ? e[e.length - 1] + 1 : e[n];
2884            },
2885            computeColHeadFormat: function () {
2886                return this.rowCnt > 1 || this.colCnt > 10 ? "ddd" : this.colCnt > 1 ? this.view.opt("dayOfMonthFormat") : "dddd";
2887            },
2888            sliceRangeByRow: function (t) {
2889                var e,
2890                    n,
2891                    i,
2892                    r,
2893                    s,
2894                    o = this.daysPerRow,
2895                    a = this.view.computeDayRange(t),
2896                    l = this.getDateDayIndex(a.start),
2897                    u = this.getDateDayIndex(a.end.clone().subtract(1, "days")),
2898                    h = [];
2899                for (e = 0; e < this.rowCnt; e++)
2900                    (n = e * o),
2901                        (i = n + o - 1),
2902                        (r = Math.max(l, n)),
2903                        (s = Math.min(u, i)),
2904                        (r = Math.ceil(r)),
2905                        (s = Math.floor(s)),
2906                        r <= s && h.push({ row: e, firstRowDayIndex: r - n, lastRowDayIndex: s - n, isStart: r === l, isEnd: s === u });
2907                return h;
2908            },
2909            sliceRangeByDay: function (t) {
2910                var e,
2911                    n,
2912                    i,
2913                    r,
2914                    s,
2915                    o,
2916                    a = this.daysPerRow,
2917                    l = this.view.computeDayRange(t),
2918                    u = this.getDateDayIndex(l.start),
2919                    h = this.getDateDayIndex(l.end.clone().subtract(1, "days")),
2920                    c = [];
2921                for (e = 0; e < this.rowCnt; e++)
2922                    for (n = e * a, i = n + a - 1, r = n; r <= i; r++)
2923                        (s = Math.max(u, r)), (o = Math.min(h, r)), (s = Math.ceil(s)), (o = Math.floor(o)), s <= o && c.push({ row: e, firstRowDayIndex: s - n, lastRowDayIndex: o - n, isStart: s === u, isEnd: o === h });
2924                return c;
2925            },
2926            renderHeadHtml: function () {
2927                return '<div class="fc-row ' + this.view.widgetHeaderClass + '"><table><thead>' + this.renderHeadTrHtml() + "</thead></table></div>";
2928            },
2929            renderHeadIntroHtml: function () {
2930                return this.renderIntroHtml();
2931            },
2932            renderHeadTrHtml: function () {
2933                return "<tr>" + (this.isRTL ? "" : this.renderHeadIntroHtml()) + this.renderHeadDateCellsHtml() + (this.isRTL ? this.renderHeadIntroHtml() : "") + "</tr>";
2934            },
2935            renderHeadDateCellsHtml: function () {
2936                var t,
2937                    e,
2938                    n = [];
2939                for (t = 0; t < this.colCnt; t++) (e = this.getCellDate(0, t)), n.push(this.renderHeadDateCellHtml(e));
2940                return n.join("");
2941            },
2942            renderHeadDateCellHtml: function (t, e, n) {
2943                var i = this.view,
2944                    r = Z(t, i.activeRange),
2945                    s = ["fc-day-header", i.widgetHeaderClass],
2946                    o = ht(t.format(this.colHeadFormat));
2947                return (
2948                    1 === this.rowCnt ? (s = s.concat(this.getDayClasses(t, !0))) : s.push("fc-" + Kt[t.day()]),
2949                    '<th class="' +
2950                        s.join(" ") +
2951                        '"' +
2952                        (1 === (r && this.rowCnt) ? ' data-date="' + t.format("YYYY-MM-DD") + '"' : "") +
2953                        (e > 1 ? ' colspan="' + e + '"' : "") +
2954                        (n ? " " + n : "") +
2955                        ">" +
2956                        (r ? i.buildGotoAnchorHtml({ date: t, forceOff: this.rowCnt > 1 || 1 === this.colCnt }, o) : o) +
2957                        "</th>"
2958                );
2959            },
2960            renderBgTrHtml: function (t) {
2961                return "<tr>" + (this.isRTL ? "" : this.renderBgIntroHtml(t)) + this.renderBgCellsHtml(t) + (this.isRTL ? this.renderBgIntroHtml(t) : "") + "</tr>";
2962            },
2963            renderBgIntroHtml: function (t) {
2964                return this.renderIntroHtml();
2965            },
2966            renderBgCellsHtml: function (t) {
2967                var e,
2968                    n,
2969                    i = [];
2970                for (e = 0; e < this.colCnt; e++) (n = this.getCellDate(t, e)), i.push(this.renderBgCellHtml(n));
2971                return i.join("");
2972            },
2973            renderBgCellHtml: function (t, e) {
2974                var n = this.view,
2975                    i = Z(t, n.activeRange),
2976                    r = this.getDayClasses(t);
2977                return r.unshift("fc-day", n.widgetContentClass), '<td class="' + r.join(" ") + '"' + (i ? ' data-date="' + t.format("YYYY-MM-DD") + '"' : "") + (e ? " " + e : "") + "></td>";
2978            },
2979            renderIntroHtml: function () {},
2980            bookendCells: function (t) {
2981                var e = this.renderIntroHtml();
2982                e && (this.isRTL ? t.append(e) : t.prepend(e));
2983            },
2984        }),
2985        De = (Zt.DayGrid = be.extend(Ee, {
2986            numbersVisible: !1,
2987            bottomCoordPadding: 0,
2988            rowEls: null,
2989            cellEls: null,
2990            helperEls: null,
2991            rowCoordCache: null,
2992            colCoordCache: null,
2993            renderDates: function (t) {
2994                var e,
2995                    n,
2996                    i = this.view,
2997                    r = this.rowCnt,
2998                    s = this.colCnt,
2999                    o = "";
3000                for (e = 0; e < r; e++) o += this.renderDayRowHtml(e, t);
3001                for (
3002                    this.el.html(o),
3003                        this.rowEls = this.el.find(".fc-row"),
3004                        this.cellEls = this.el.find(".fc-day, .fc-disabled-day"),
3005                        this.rowCoordCache = new ve({ els: this.rowEls, isVertical: !0 }),
3006                        this.colCoordCache = new ve({ els: this.cellEls.slice(0, this.colCnt), isHorizontal: !0 }),
3007                        e = 0;
3008                    e < r;
3009                    e++
3010                )
3011                    for (n = 0; n < s; n++) i.publiclyTrigger("dayRender", null, this.getCellDate(e, n), this.getCellEl(e, n));
3012            },
3013            unrenderDates: function () {
3014                this.removeSegPopover();
3015            },
3016            renderBusinessHours: function () {
3017                var t = this.buildBusinessHourSegs(!0);
3018                this.renderFill("businessHours", t, "bgevent");
3019            },
3020            unrenderBusinessHours: function () {
3021                this.unrenderFill("businessHours");
3022            },
3023            renderDayRowHtml: function (t, e) {
3024                var n = this.view,
3025                    i = ["fc-row", "fc-week", n.widgetContentClass];
3026                return (
3027                    e && i.push("fc-rigid"),
3028                    '<div class="' +
3029                        i.join(" ") +
3030                        '"><div class="fc-bg"><table>' +
3031                        this.renderBgTrHtml(t) +
3032                        '</table></div><div class="fc-content-skeleton"><table>' +
3033                        (this.numbersVisible ? "<thead>" + this.renderNumberTrHtml(t) + "</thead>" : "") +
3034                        "</table></div></div>"
3035                );
3036            },
3037            renderNumberTrHtml: function (t) {
3038                return "<tr>" + (this.isRTL ? "" : this.renderNumberIntroHtml(t)) + this.renderNumberCellsHtml(t) + (this.isRTL ? this.renderNumberIntroHtml(t) : "") + "</tr>";
3039            },
3040            renderNumberIntroHtml: function (t) {
3041                return this.renderIntroHtml();
3042            },
3043            renderNumberCellsHtml: function (t) {
3044                var e,
3045                    n,
3046                    i = [];
3047                for (e = 0; e < this.colCnt; e++) (n = this.getCellDate(t, e)), i.push(this.renderNumberCellHtml(n));
3048                return i.join("");
3049            },
3050            renderNumberCellHtml: function (t) {
3051                var e,
3052                    n,
3053                    i = this.view,
3054                    r = "",
3055                    s = Z(t, i.activeRange),
3056                    o = i.dayNumbersVisible && s;
3057                return o || i.cellWeekNumbersVisible
3058                    ? ((e = this.getDayClasses(t)),
3059                      e.unshift("fc-day-top"),
3060                      i.cellWeekNumbersVisible && (n = "ISO" === t._locale._fullCalendar_weekCalc ? 1 : t._locale.firstDayOfWeek()),
3061                      (r += '<td class="' + e.join(" ") + '"' + (s ? ' data-date="' + t.format() + '"' : "") + ">"),
3062                      i.cellWeekNumbersVisible && t.day() == n && (r += i.buildGotoAnchorHtml({ date: t, type: "week" }, { class: "fc-week-number" }, t.format("w"))),
3063                      o && (r += i.buildGotoAnchorHtml(t, { class: "fc-day-number" }, t.date())),
3064                      (r += "</td>"))
3065                    : "<td/>";
3066            },
3067            computeEventTimeFormat: function () {
3068                return this.view.opt("extraSmallTimeFormat");
3069            },
3070            computeDisplayEventEnd: function () {
3071                return 1 == this.colCnt;
3072            },
3073            rangeUpdated: function () {
3074                this.updateDayTable();
3075            },
3076            spanToSegs: function (t) {
3077                var e,
3078                    n,
3079                    i = this.sliceRangeByRow(t);
3080                for (e = 0; e < i.length; e++)
3081                    (n = i[e]), this.isRTL ? ((n.leftCol = this.daysPerRow - 1 - n.lastRowDayIndex), (n.right
3081Col = this.daysPerRow - 1 - n.firstRowDayIndex)) : ((n.leftCol = n.firstRowDayIndex), (n.rightCol = n.lastRowDayIndex));
3082                return i;
3083            },
3084            prepareHits: function () {
3085                this.colCoordCache.build(), this.rowCoordCache.build(), (this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding);
3086            },
3087            releaseHits: function () {
3088                this.colCoordCache.clear(), this.rowCoordCache.clear();
3089            },
3090            queryHit: function (t, e) {
3091                if (this.colCoordCache.isLeftInBounds(t) && this.rowCoordCache.isTopInBounds(e)) {
3092                    var n = this.colCoordCache.getHorizontalIndex(t),
3093                        i = this.rowCoordCache.getVerticalIndex(e);
3094                    if (null != i && null != n) return this.getCellHit(i, n);
3095                }
3096            },
3097            getHitSpan: function (t) {
3098                return this.getCellRange(t.row, t.col);
3099            },
3100            getHitEl: function (t) {
3101                return this.getCellEl(t.row, t.col);
3102            },
3103            getCellHit: function (t, e) {
3104                return { row: t, col: e, component: this, left: this.colCoordCache.getLeftOffset(e), right: this.colCoordCache.getRightOffset(e), top: this.rowCoordCache.getTopOffset(t), bottom: this.rowCoordCache.getBottomOffset(t) };
3105            },
3106            getCellEl: function (t, e) {
3107                return this.cellEls.eq(t * this.colCnt + e);
3108            },
3109            renderDrag: function (t, e) {
3110                var n,
3111                    i = this.eventToSpans(t);
3112                for (n = 0; n < i.length; n++) this.renderHighlight(i[n]);
3113                if (e && e.component !== this) return this.renderEventLocationHelper(t, e);
3114            },
3115            unrenderDrag: function () {
3116                this.unrenderHighlight(), this.unrenderHelper();
3117            },
3118            renderEventResize: function (t, e) {
3119                var n,
3120                    i = this.eventToSpans(t);
3121                for (n = 0; n < i.length; n++) this.renderHighlight(i[n]);
3122                return this.renderEventLocationHelper(t, e);
3123            },
3124            unrenderEventResize: function () {
3125                this.unrenderHighlight(), this.unrenderHelper();
3126            },
3127            renderHelper: function (e, n) {
3128                var i,
3129                    r = [],
3130                    s = this.eventToSegs(e);
3131                return (
3132                    (s = this.renderFgSegEls(s)),
3133                    (i = this.renderSegRows(s)),
3134                    this.rowEls.each(function (e, s) {
3135                        var o,
3136                            a = t(s),
3137                            l = t('<div class="fc-helper-skeleton"><table/></div>');
3138                        (o = n && n.row === e ? n.el.position().top : a.find(".fc-content-skeleton tbody").position().top), l.css("top", o).find("table").append(i[e].tbodyEl), a.append(l), r.push(l[0]);
3139                    }),
3140                    (this.helperEls = t(r))
3141                );
3142            },
3143            unrenderHelper: function () {
3144                this.helperEls && (this.helperEls.remove(), (this.helperEls = null));
3145            },
3146            fillSegTag: "td",
3147            renderFill: function (e, n, i) {
3148                var r,
3149                    s,
3150                    o,
3151                    a = [];
3152                for (n = this.renderFillSegEls(e, n), r = 0; r < n.length; r++) (s = n[r]), (o = this.renderFillRow(e, s, i)), this.rowEls.eq(s.row).append(o), a.push(o[0]);
3153                return (this.elsByFill[e] = t(a)), n;
3154            },
3155            renderFillRow: function (e, n, i) {
3156                var r,
3157                    s,
3158                    o = this.colCnt,
3159                    a = n.leftCol,
3160                    l = n.rightCol + 1;
3161                return (
3162                    (i = i || e.toLowerCase()),
3163                    (r = t('<div class="fc-' + i + '-skeleton"><table><tr/></table></div>')),
3164                    (s = r.find("tr")),
3165                    a > 0 && s.append('<td colspan="' + a + '"/>'),
3166                    s.append(n.el.attr("colspan", l - a)),
3167                    l < o && s.append('<td colspan="' + (o - l) + '"/>'),
3168                    this.bookendCells(s),
3169                    r
3170                );
3171            },
3172        }));
3173    De.mixin({
3174        rowStructs: null,
3175        unrenderEvents: function () {
3176            this.removeSegPopover(), be.prototype.unrenderEvents.apply(this, arguments);
3177        },
3178        getEventSegs: function () {
3179            return be.prototype.getEventSegs.call(this).concat(this.popoverSegs || []);
3180        },
3181        renderBgSegs: function (e) {
3182            var n = t.grep(e, function (t) {
3183                return t.event.allDay;
3184            });
3185            return be.prototype.renderBgSegs.call(this, n);
3186        },
3187        renderFgSegs: function (e) {
3188            var n;
3189            return (
3190                (e = this.renderFgSegEls(e)),
3191                (n = this.rowStructs = this.renderSegRows(e)),
3192                this.rowEls.each(function (e, i) {
3193                    t(i).find(".fc-content-skeleton > table").append(n[e].tbodyEl);
3194                }),
3195                e
3196            );
3197        },
3198        unrenderFgSegs: function () {
3199            for (var t, e = this.rowStructs || []; (t = e.pop()); ) t.tbodyEl.remove();
3200            this.rowStructs = null;
3201        },
3202        renderSegRows: function (t) {
3203            var e,
3204                n,
3205                i = [];
3206            for (e = this.groupSegRows(t), n = 0; n < e.length; n++) i.push(this.renderSegRow(n, e[n]));
3207            return i;
3208        },
3209        fgSegHtml: function (t, e) {
3210            var n,
3211                i,
3212                r = this.view,
3213                s = t.event,
3214                o = r.isEventDraggable(s),
3215                a = !e && s.allDay && t.isStart && r.isEventResizableFromStart(s),
3216                l = !e && s.allDay && t.isEnd && r.isEventResizableFromEnd(s),
3217                u = this.getSegClasses(t, o, a || l),
3218                h = dt(this.getSegSkinCss(t)),
3219                c = "";
3220            return (
3221                u.unshift("fc-day-grid-event", "fc-h-event"),
3222                t.isStart && (n = this.getEventTimeText(s)) && (c = '<span class="fc-time">' + ht(n) + "</span>"),
3223                (i = '<span class="fc-title">' + (ht(s.title || "") || "&nbsp;") + "</span>"),
3224                '<a class="' +
3225                    u.join(" ") +
3226                    '"' +
3227                    (s.url ? ' href="' + ht(s.url) + '"' : "") +
3228                    (h ? ' style="' + h + '"' : "") +
3229                    '><div class="fc-content">' +
3230                    (this.isRTL ? i + " " + c : c + " " + i) +
3231                    "</div>" +
3232                    (a ? '<div class="fc-resizer fc-start-resizer" />' : "") +
3233                    (l ? '<div class="fc-resizer fc-end-resizer" />' : "") +
3234                    "</a>"
3235            );
3236        },
3237        renderSegRow: function (e, n) {
3238            function i(e) {
3239                for (; o < e; ) (h = (m[r - 1] || [])[o]), h ? h.attr("rowspan", parseInt(h.attr("rowspan") || 1, 10) + 1) : ((h = t("<td/>")), a.append(h)), (v[r][o] = h), (m[r][o] = h), o++;
3240            }
3241            var r,
3242                s,
3243                o,
3244                a,
3245                l,
3246                u,
3247                h,
3248                c = this.colCnt,
3249                d = this.buildSegLevels(n),
3250                f = Math.max(1, d.length),
3251                g = t("<tbody/>"),
3252                p = [],
3253                v = [],
3254                m = [];
3255            for (r = 0; r < f; r++) {
3256                if (((s = d[r]), (o = 0), (a = t("<tr/>")), p.push([]), v.push([]), m.push([]), s))
3257                    for (l = 0; l < s.length; l++) {
3258                        for (u = s[l], i(u.leftCol), h = t('<td class="fc-event-container"/>').append(u.el), u.leftCol != u.rightCol ? h.attr("colspan", u.rightCol - u.leftCol + 1) : (m[r][o] = h); o <= u.rightCol; )
3259                            (v[r][o] = h), (p[r][o] = u), o++;
3260                        a.append(h);
3261                    }
3262                i(c), this.bookendCells(a), g.append(a);
3263            }
3264            return { row: e, tbodyEl: g, cellMatrix: v, segMatrix: p, segLevels: d, segs: n };
3265        },
3266        buildSegLevels: function (t) {
3267            var e,
3268                n,
3269                i,
3270                r = [];
3271            for (this.sortEventSegs(t), e = 0; e < t.length; e++) {
3272                for (n = t[e], i = 0; i < r.length && zt(n, r[i]); i++);
3273                (n.level = i), (r[i] || (r[i] = [])).push(n);
3274            }
3275            for (i = 0; i < r.length; i++) r[i].sort(Ft);
3276            return r;
3277        },
3278        groupSegRows: function (t) {
3279            var e,
3280                n = [];
3281            for (e = 0; e < this.rowCnt; e++) n.push([]);
3282            for (e = 0; e < t.length; e++) n[t[e].row].push(t[e]);
3283            return n;
3284        },
3285    }),
3286        De.mixin({
3287            segPopover: null,
3288            popoverSegs: null,
3289            removeSegPopover: function () {
3290                this.segPopover && this.segPopover.hide();
3291            },
3292            limitRows: function (t) {
3293                var e,
3294                    n,
3295                    i = this.rowStructs || [];
3296                for (e = 0; e < i.length; e++) this.unlimitRow(e), !1 !== (n = !!t && ("number" == typeof t ? t : this.computeRowLevelLimit(e))) && this.limitRow(e, n);
3297            },
3298            computeRowLevelLimit: function (e) {
3299                function n(e, n) {
3300                    s = Math.max(s, t(n).outerHeight());
3301                }
3302                var i,
3303                    r,
3304                    s,
3305                    o = this.rowEls.eq(e),
3306                    a = o.height(),
3307                    l = this.rowStructs[e].tbodyEl.children();
3308                for (i = 0; i < l.length; i++) if (((r = l.eq(i).removeClass("fc-limited")), (s = 0), r.find("> td > :first-child").each(n), r.position().top + s > a)) return i;
3309                return !1;
3310            },
3311            limitRow: function (e, n) {
3312                function i(i) {
3313                    for (; E < i; ) (u = w.getCellSegs(e, E, n)), u.length && ((d = s[n - 1][E]), (y = w.renderMoreLink(e, E, u)), (m = t("<div/>").append(y)), d.append(m), b.push(m[0])), E++;
3314                }
3315                var r,
3316                    s,
3317                    o,
3318                    a,
3319                    l,
3320                    u,
3321                    h,
3322                    c,
3323                    d,
3324                    f,
3325                    g,
3326                    p,
3327                    v,
3328                    m,
3329                    y,
3330                    w = this,
3331                    S = this.rowStructs[e],
3332                    b = [],
3333                    E = 0;
3334                if (n && n < S.segLevels.length) {
3335                    for (r = S.segLevels[n - 1], s = S.cellMatrix, o = S.tbodyEl.children().slice(n).addClass("fc-limited").get(), a = 0; a < r.length; a++) {
3336                        for (l = r[a], i(l.leftCol), c = [], h = 0; E <= l.rightCol; ) (u = this.getCellSegs(e, E, n)), c.push(u), (h += u.length), E++;
3337                        if (h) {
3338                            for (d = s[n - 1][l.leftCol], f = d.attr("rowspan") || 1, g = [], p 
3338= 0; p < c.length; p++)
3339                                (v = t('<td class="fc-more-cell"/>').attr("rowspan", f)), (u = c[p]), (y = this.renderMoreLink(e, l.leftCol + p, [l].concat(u))), (m = t("<div/>").append(y)), v.append(m), g.push(v[0]), b.push(v[0]);
3340                            d.addClass("fc-limited").after(t(g)), o.push(d[0]);
3341                        }
3342                    }
3343                    i(this.colCnt), (S.moreEls = t(b)), (S.limitedEls = t(o));
3344                }
3345            },
3346            unlimitRow: function (t) {
3347                var e = this.rowStructs[t];
3348                e.moreEls && (e.moreEls.remove(), (e.moreEls = null)), e.limitedEls && (e.limitedEls.removeClass("fc-limited"), (e.limitedEls = null));
3349            },
3350            renderMoreLink: function (e, n, i) {
3351                var r = this,
3352                    s = this.view;
3353                return t('<a class="fc-more"/>')
3354                    .text(this.getMoreLinkText(i.length))
3355                    .on("click", function (o) {
3356                        var a = s.opt("eventLimitClick"),
3357                            l = r.getCellDate(e, n),
3358                            u = t(this),
3359                            h = r.getCellEl(e, n),
3360                            c = r.getCellSegs(e, n),
3361                            d = r.resliceDaySegs(c, l),
3362                            f = r.resliceDaySegs(i, l);
3363                        "function" == typeof a && (a = s.publiclyTrigger("eventLimitClick", null, { date: l, dayEl: h, moreEl: u, segs: d, hiddenSegs: f }, o)),
3364                            "popover" === a ? r.showSegPopover(e, n, u, d) : "string" == typeof a && s.calendar.zoomTo(l, a);
3365                    });
3366            },
3367            showSegPopover: function (t, e, n, i) {
3368                var r,
3369                    s,
3370                    o = this,
3371                    a = this.view,
3372                    l = n.parent();
3373                (r = 1 == this.rowCnt ? a.el : this.rowEls.eq(t)),
3374                    (s = {
3375                        className: "fc-more-popover",
3376                        content: this.renderSegPopoverContent(t, e, i),
3377                        parentEl: this.view.el,
3378                        top: r.offset().top,
3379                        autoHide: !0,
3380                        viewportConstrain: a.opt("popoverViewportConstrain"),
3381                        hide: function () {
3382                            if (o.popoverSegs) for (var t, e = 0; e < o.popoverSegs.length; ++e) (t = o.popoverSegs[e]), a.publiclyTrigger("eventDestroy", t.event, t.event, t.el);
3383                            o.segPopover.removeElement(), (o.segPopover = null), (o.popoverSegs = null);
3384                        },
3385                    }),
3386                    this.isRTL ? (s.right = l.offset().left + l.outerWidth() + 1) : (s.left = l.offset().left - 1),
3387                    (this.segPopover = new pe(s)),
3388                    this.segPopover.show(),
3389                    this.bindSegHandlersToEl(this.segPopover.el);
3390            },
3391            renderSegPopoverContent: function (e, n, i) {
3392                var r,
3393                    s = this.view,
3394                    o = s.opt("theme"),
3395                    a = this.getCellDate(e, n).format(s.opt("dayPopoverFormat")),
3396                    l = t(
3397                        '<div class="fc-header ' +
3398                            s.widgetHeaderClass +
3399                            '"><span class="fc-close ' +
3400                            (o ? "ui-icon ui-icon-closethick" : "fc-icon fc-icon-x") +
3401                            '"></span><span class="fc-title">' +
3402                            ht(a) +
3403                            '</span><div class="fc-clear"/></div><div class="fc-body ' +
3404                            s.widgetContentClass +
3405                            '"><div class="fc-event-container"></div></div>'
3406                    ),
3407                    u = l.find(".fc-event-container");
3408                for (i = this.renderFgSegEls(i, !0), this.popoverSegs = i, r = 0; r < i.length; r++) this.hitsNeeded(), (i[r].hit = this.getCellHit(e, n)), this.hitsNotNeeded(), u.append(i[r].el);
3409                return l;
3410            },
3411            resliceDaySegs: function (e, n) {
3412                var i = t.map(e, function (t) {
3413                        return t.event;
3414                    }),
3415                    r = n.clone(),
3416                    s = r.clone().add(1, "days"),
3417                    o = { start: r, end: s };
3418                return (
3419                    (e = this.eventsToSegs(i, function (t) {
3420                        var e = z(t, o);
3421                        return e ? [e] : [];
3422                    })),
3423                    this.sortEventSegs(e),
3424                    e
3425                );
3426            },
3427            getMoreLinkText: function (t) {
3428                var e = this.view.opt("eventLimitText");
3429                return "function" == typeof e ? e(t) : "+" + t + " " + e;
3430            },
3431            getCellSegs: function (t, e, n) {
3432                for (var i, r = this.rowStructs[t].segMatrix, s = n || 0, o = []; s < r.length; ) (i = r[s][e]), i && o.push(i), s++;
3433                return o;
3434            },
3435        });
3436    var Te = (Zt.TimeGrid = be.extend(Ee, {
3437        slotDuration: null,
3438        snapDuration: null,
3439        snapsPerSlot: null,
3440        labelFormat: null,
3441        labelInterval: null,
3442        colEls: null,
3443        slatContainerEl: null,
3444        slatEls: null,
3445        nowIndicatorEls: null,
3446        colCoordCache: null,
3447        slatCoordCache: null,
3448        constructor: function () {
3449            be.apply(this, arguments), this.processOptions();
3450        },
3451        renderDates: function () {
3452            this.el.html(this.renderHtml()),
3453                (this.colEls = this.el.find(".fc-day, .fc-disabled-day")),
3454                (this.slatContainerEl = this.el.find(".fc-slats")),
3455                (this.slatEls = this.slatContainerEl.find("tr")),
3456                (this.colCoordCache = new ve({ els: this.colEls, isHorizontal: !0 })),
3457                (this.slatCoordCache = new ve({ els: this.slatEls, isVertical: !0 })),
3458                this.renderContentSkeleton();
3459        },
3460        renderHtml: function () {
3461            return '<div class="fc-bg"><table>' + this.renderBgTrHtml(0) + '</table></div><div class="fc-slats"><table>' + this.renderSlatRowHtml() + "</table></div>";
3462        },
3463        renderSlatRowHtml: function () {
3464            for (var t, n, i, r = this.view, s = this.isRTL, o = "", a = e.duration(+this.view.minTime); a < this.view.maxTime; )
3465                (t = this.start.clone().time(a)),
3466                    (n = vt(W(a, this.labelInterval))),
3467                    (i = '<td class="fc-axis fc-time ' + r.widgetContentClass + '" ' + r.axisStyleAttr() + ">" + (n ? "<span>" + ht(t.format(this.labelFormat)) + "</span>" : "") + "</td>"),
3468                    (o += '<tr data-time="' + t.format("HH:mm:ss") + '"' + (n ? "" : ' class="fc-minor"') + ">" + (s ? "" : i) + '<td class="' + r.widgetContentClass + '"/>' + (s ? i : "") + "</tr>"),
3469                    a.add(this.slotDuration);
3470            return o;
3471        },
3472        processOptions: function () {
3473            var n,
3474                i = this.view,
3475                r = i.opt("slotDuration"),
3476                s = i.opt("snapDuration");
3477            (r = e.duration(r)),
3478                (s = s ? e.duration(s) : r),
3479                (this.slotDuration = r),
3480                (this.snapDuration = s),
3481                (this.snapsPerSlot = r / s),
3482                (this.minResizeDuration = s),
3483                (n = i.opt("slotLabelFormat")),
3484                t.isArray(n) && (n = n[n.length - 1]),
3485                (this.labelFormat = n || i.opt("smallTimeFormat")),
3486                (n = i.opt("slotLabelInterval")),
3487                (this.labelInterval = n ? e.duration(n) : this.computeLabelInterval(r));
3488        },
3489        computeLabelInterval: function (t) {
3490            var n, i, r;
3491            for (n = _e.length - 1; n >= 0; n--) if (((i = e.duration(_e[n])), (r = W(i, t)), vt(r) && r > 1)) return i;
3492            return e.duration(t);
3493        },
3494        computeEventTimeFormat: function () {
3495            return this.view.opt("noMeridiemTimeFormat");
3496        },
3497        computeDisplayEventEnd: function () {
3498            return !0;
3499        },
3500        prepareHits: function () {
3501            this.colCoordCache.build(), this.slatCoordCache.build();
3502        },
3503        releaseHits: function () {
3504            this.colCoordCache.clear();
3505        },
3506        queryHit: function (t, e) {
3507            var n = this.snapsPerSlot,
3508                i = this.colCoordCache,
3509                r = this.slatCoordCache;
3510            if (i.isLeftInBounds(t) && r.isTopInBounds(e)) {
3511                var s = i.getHorizontalIndex(t),
3512                    o = r.getVerticalIndex(e);
3513                if (null != s && null != o) {
3514                    var a = r.getTopOffset(o),
3515                        l = r.getHeight(o),
3516                        u = (e - a) / l,
3517                        h = Math.floor(u * n),
3518                        c = o * n + h,
3519                        d = a + (h / n) * l,
3520                        f = a + ((h + 1) / n) * l;
3521                    return { col: s, snap: c, component: this, left: i.getLeftOffset(s), right: i.getRightOffset(s), top: d, bottom: f };
3522                }
3523            }
3524        },
3525        getHitSpan: function (t) {
3526            var e,
3527                n = this.getCellDate(0, t.col),
3528                i = this.computeSnapTime(t.snap);
3529            return n.time(i), (e = n.clone().add(this.snapDuration)), { start: n, end: e };
3530        },
3531        getHitEl: function (t) {
3532            return this.colEls.eq(t.col);
3533        },
3534        rangeUpdated: function () {
3535            this.updateDayTable();
3536        },
3537        computeSnapTime: function (t) {
3538            return e.duration(this.view.minTime + this.snapDuration * t);
3539        },
3540        spanToSegs: function (t) {
3541            var e,
3542                n = this.sliceRangeByTimes(t);
3543            for (e = 0; e < n.length; e++) this.isRTL ? (n[e].col = this.daysPerRow - 1 - n[e].dayIndex) : (n[e].col = n[e].dayIndex);
3544            return n;
3545        },
3546        sliceRangeByTimes: function (t) {
3547            var e,
3548                n,
3549                i,
3550                r,
3551                s = [];
3552            for (n = 0; n < this.daysPerRow; n++) (i = this.dayDates[n].clone().time(0)), (r = { start: i.clone().add(this.view.minTime), end: i.clone().add(this.view.maxTime) }), (e = z(t, r)) && ((e.dayIndex = n), s.push(e));
3553            return s;
3554        },
3555        updateSize: function (t) {
3556            this.slatCoordCache.build(), t && this.updateSegVerticals([].concat(this.fgSegs || [], this.bgSegs || [], this.businessSegs || []));
3557        },
3558        getTotalSlatHeight: function () {
3559            return this.slatContainerEl.outerHeight();
3560        },
3561        computeDateTop: function (t, n) {
3562            return this.computeTimeTop(e.duration(t - n.clone().stripTime()));
3563        },
3564        computeTimeTop: function (t) {
3565            var e,
3566                n,
3567                i = this.slatEls.length,
3568                r = (t - this.view.minTime) / this.slotDuration;
3569            return (r = Math.max(0, r)), (r = Math.min(i, r)), (e = Math.floor(r)), (e = Math.min(e, i - 1)), (n = r - e), this.slatCoordCache.getTopPosition(e) + this.slatCoordCache.getHeight(e) * n;
3570        },
3571        renderDrag: function (t, e) {
3572            var n, i;
3573            if (e) return this.renderEventLocationHelper(t, e);
3574            for (n = this.eventToSpans(t), i = 0; i < n.length; i++) this.renderHighlight(n[i]);
3575        },
3576        unrenderDrag: function () {
3577            this.unrenderHelper(), this.unrenderHighlight();
3578        },
3579        renderEventResize: function (t, e) {
3580            return this.renderEventLocationHelper(t, e);
3581        },
3582        unrenderEventResize: function () {
3583            this.unrenderHelper();
3584        },
3585        renderHelper: function (t, e) {
3586            return this.renderHelperSegs(this.eventToSegs(t), e);
3587        },
3588        unrenderHelper: function () {
3589            this.unrenderHelperSegs();
3590        },
3591        renderBusinessHours: function () {
3592            this.renderBusinessSegs(this.buildBusinessHourSegs());
3593        },
3594        unrenderBusinessHours: function () {
3595            this.unrenderBusinessSegs();
3596        },
3597        getNowIndicatorUnit: function () {
3598            return "minute";
3599        },
3600        renderNowIndicator: function (e) {
3601            var n,
3602                i = this.spanToSegs({ start: e, end: e }),
3603                r = this.computeDateTop(e, e),
3604                s = [];
3605            for (n = 0; n < i.length; n++) s.push(t('<div class="fc-now-indicator fc-now-indicator-line"></div>').css("top", r).appendTo(this.colContainerEls.eq(i[n].col))[0]);
3606            i.length > 0 && s.push(t('<div class="fc-now-indicator fc-now-indicator-arrow"></div>').css("top", r).appendTo(this.el.find(".fc-content-skeleton"))[0]), (this.nowIndicatorEls = t(s));
3607        },
3608        unrenderNowIndicator: function () {
3609            this.nowIndicatorEls && (this.nowIndicatorEls.remove(), (this.nowIndicatorEls = null));
3610        },
3611        renderSelection: function (t) {
3612            this.view.opt("selectHelper") ? this.renderEventLocationHelper(t) : this.renderHighlight(t);
3613        },
3614        unrenderSelection: function () {
3615            this.unrenderHelper(), this.unrenderHighlight();
3616        },
3617        renderHighlight: function (t) {
3618            this.renderHighlightSegs(this.spanToSegs(t));
3619        },
3620        unrenderHighlight: function () {
3621            this.unrenderHighlightSegs();
3622        },
3623    }));
3624    Te.mixin({
3625        colContainerEls: null,
3626        fgContainerEls: null,
3627        bgContainerEls: null,
3628        helperContainerEls: null,
3629        highlightContainerEls: null,
3630        businessContainerEls: null,
3631        fgSegs: null,
3632        bgSegs: null,
3633        helperSegs: null,
3634        highlightSegs: null,
3635        businessSegs: null,
3636        renderContentSkeleton: function () {
3637            var e,
3638                n,
3639                i = "";
3640            for (e = 0; e < this.colCnt; e++)
3641                i +=
3642                    '<td><div class="fc-content-col"><div class="fc-event-container fc-helper-container"></div><div class="fc-event-container"></div><div class="fc-highlight-container"></div><div class="fc-bgevent-container"></div><div class="fc-business-container"></div></div></td>';
3643            (n = t('<div class="fc-content-skeleton"><table><tr>' + i + "</tr></table></div>")),
3644                (this.colContainerEls = n.find(".fc-content-col")),
3645                (this.helperContainerEls = n.find(".fc-helper-container")),
3646                (this.fgContainerEls = n.find(".fc-event-container:not(.fc-helper-container)")),
3647                (this.bgContainerEls = n.find(".fc-bgevent-container")),
3648                (this.highlightContainerEls = n.find(".fc-highlight-container")),
3649                (this.businessContainerEls = n.find(".fc-business-container")),
3650                this.bookendCells(n.find("tr")),
3651                this.el.append(n);
3652        },
3653        renderFgSegs: function (t) {
3654            return (t = this.renderFgSegsIntoContainers(t, this.fgContainerEls)), (this.fgSegs = t), t;
3655        },
3656        unrenderFgSegs: function () {
3657            this.unrenderNamedSegs("fgSegs");
3658        },
3659        renderHelperSegs: function (e, n) {
3660            var i,
3661                r,
3662                s,
3663                o = [];
3664            for (e = this.renderFgSegsIntoContainers(e, this.helperContainerEls), i = 0; i < e.length; i++)
3665                (r = e[i]), n && n.col === r.col && ((s = n.el), r.el.css({ left: s.css("left"), right: s.css("right"), "margin-left": s.css("margin-left"), "margin-right": s.css("margin-right") })), o.push(r.el[0]);
3666            return (this.helperSegs = e), t(o);
3667        },
3668        unrenderHelperSegs: function () {
3669            this.unrenderNamedSegs("helperSegs");
3670        },
3671        renderBgSegs: function (t) {
3672            return (t = this.renderFillSegEls("bgEvent", t)), this.updateSegVerticals(t), this.attachSegsByCol(this.groupSegsByCol(t), this.bgContainerEls), (this.bgSegs = t), t;
3673        },
3674        unrenderBgSegs: function () {
3675            this.unrenderNamedSegs("bgSegs");
3676        },
3677        renderHighlightSegs: function (t) {
3678            (t = this.renderFillSegEls("highlight", t)), this.updateSegVerticals(t), this.attachSegsByCol(this.groupSegsByCol(t), this.highlightContainerEls), (this.highlightSegs = t);
3679        },
3680        unrenderHighlightSegs: function () {
3681            this.unrenderNamedSegs("highlightSegs");
3682        },
3683        renderBusinessSegs: function (t) {
3684            (t = this.renderFillSegEls("businessHours", t)), this.updateSegVerticals(t), this.attachSegsByCol(this.groupSegsByCol(t), this.businessContainerEls), (this.businessSegs = t);
3685        },
3686        unrenderBusinessSegs: function () {
3687            this.unrenderNamedSegs("businessSegs");
3688        },
3689        groupSegsByCol: function (t) {
3690            var e,
3691                n = [];
3692            for (e = 0; e < this.colCnt; e++) n.push([]);
3693            for (e = 0; e < t.length; e++) n[t[e].col].push(t[e]);
3694            return n;
3695        },
3696        attachSegsByCol: function (t, e) {
3697            var n, i, r;
3698            for (n = 0; n < this.colCnt; n++) for (i = t[n], r = 0; r < i.length; r++) e.eq(n).append(i[r].el);
3699        },
3700        unrenderNamedSegs: function (t) {
3701            var e,
3702                n = this[t];
3703            if (n) {
3704                for (e = 0; e < n.length; e++) n[e].el.remove();
3705                this[t] = null;
3706            }
3707        },
3708        renderFgSegsIntoContainers: function (t, e) {
3709            var n, i;
3710            for (t = this.renderFgSegEls(t), n = this.groupSegsByCol(t), i = 0; i < this.colCnt; i++) this.updateFgSegCoords(n[i]);
3711            return this.attachSegsByCol(n, e), t;
3712        },
3713        fgSegHtml: function (t, e) {
3714            var n,
3715                i,
3716                r,
3717                s = this.view,
3718                o = t.event,
3719                a = s.isEventDraggable(o),
3720                l = !e && t.isStart && s.isEventResizableFromStart(o),
3721                u = !e && t.isEnd && s.isEventResizableFromEnd(o),
3722                h = this.getSegClasses(t, a, l || u),
3723                c = dt(this.getSegSkinCss(t));
3724            return (
3725                h.unshift("fc-time-grid-event", "fc-v-event"),
3726                s.isMultiDayEvent(o)
3727                    ? (t.isStart || t.isEnd) && ((n = this.getEventTimeText(t)), (i = this.getEventTimeText(t, "LT")), (r = this.getEventTimeText(t, null, !1)))
3728                    : ((n = this.getEventTimeText(o)), (i = this.getEventTimeText(o, "LT")), (r = this.getEventTimeText(o, null, !1))),
3729                '<a class="' +
3730                    h.join(" ") +
3731                    '"' +
3732                    (o.url ? ' href="' + ht(o.url) + '"' : "") +
3733                    (c ? ' style="' + c + '"' : "") +
3734                    '><div class="fc-content">' +
3735                    (n ? '<div class="fc-time" data-start="' + ht(r) + '" data-full="' + ht(i) + '"><span>' + ht(n) + "</span></div>" : "") +
3736                    (o.title ? '<div class="fc-title">' + ht(o.title) + "</div>" : "") +
3737                    '</div><div class="fc-bg"/>' +
3738                    (u ? '<div class="fc-resizer fc-end-resizer" />' : "") +
3739                    "</a>"
3740            );
3741        },
3742        updateSegVerticals: function (t) {
3743            this.computeSegVerticals(t), this.assignSegVerticals(t);
3744        },
3745        computeSegVerticals: function (t) {
3746            var e, n, i;
3747            for (e = 0; e < t.length; e++) (n = t[e]), (i = this.dayDates[n.dayIndex]), (n.top = this.computeDateTop(n.start, i)), (n.bottom = this.computeDateTop(n.end, i));
3748        },
3749        assignSegVerticals: function (t) {
3750            var e, n;
3751            for (e = 0; e < t.length; e++) (n = t[e]), n.el.css(this.generateSegVerticalCss(n));
3752        },
3753        generateSegVerticalCss: function (t) {
3754            return { top: t.top, bottom: -t.bottom };
3755        },
3756        updateFgSegCoords: function (t) {
3757            this.computeSegVerticals(t), this.computeFgSegHorizontals(t), this.assignSegVerticals(t), this.assignFgSegHorizontals(t);
3758        },
3759        computeFgSegHorizontals: function (t) {
3760            var e, n, i;
3761            if ((this.sortEventSegs(t), (e = At(t)), Gt(e), (n = e[0]))) {
3762                for (i = 0; i < n.length; i++) Vt(n[i]);
3763                for (i = 0; i < n.length; i++) this.computeFgSegForwardBack(n[i], 0, 0);
3764            }
3765        },
3766        computeFgSegForwardBack: function (t, e, n) {
3767            var i,
3768                r = t.forwardSegs;
3769            if (void 0 === t.forwardCoord)
3770                for (
3771                    r.length ? (this.sortForwardSegs(r), this.computeFgSegForwardBack(r[0], e + 1, n), (t.forwardCoord = r[0].backwardCoord)) : (t.forwardCoord = 1), t.backwardCoord = t.forwardCoord - (t.forwardCoord - n) / (e + 1), i = 0;
3772                    i < r.length;
3773                    i++
3774                )
3775                    this.computeFgSegForwardBack(r[i], 0, t.forwardCoord);
3776        },
3777        sortForwardSegs: function (t) {
3778            t.sort(mt(this, "compareForwardSegs"));
3779        },
3780        compareForwardSegs: function (t, e) {
3781            return e.forwardPressure - t.forwardPressure || (t.backwardCoord || 0) - (e.backwardCoord || 0) || this.compareEventSegs(t, e);
3782        },
3783        assignFgSegHorizontals: function (t) {
3784            var e, n;
3785            for (e = 0; e < t.length; e++) (n = t[e]), n.el.css(this.generateFgSegHorizontalCss(n)), n.bottom - n.top < 30 && n.el.addClass("fc-short");
3786        },
3787        generateFgSegHorizontalCss: function (t) {
3788            var e,
3789                n,
3790                i = this.view.opt("slotEventOverlap"),
3791                r = t.backwardCoord,
3792                s = t.forwardCoord,
3793                o = this.generateSegVerticalCss(t);
3794            return (
3795                i && (s = Math.min(1, r + 2 * (s - r))),
3796                this.isRTL ? ((e = 1 - s), (n = r)) : ((e = r), (n = 1 - s)),
3797                (o.zIndex = t.level + 1),
3798                (o.left = 100 * e + "%"),
3799                (o.right = 100 * n + "%"),
3800                i && t.forwardPressure && (o[this.isRTL ? "marginLeft" : "marginRight"] = 20),
3801                o
3802            );
3803        },
3804    });
3805    var Ce = (Zt.View = ue.extend({
3806        type: null,
3807        name: null,
3808        title: null,
3809        calendar: null,
3810        viewSpec: null,
3811        options: null,
3812        el: null,
3813        renderQueue: null,
3814        batchRenderDepth: 0,
3815        isDatesRendered: !1,
3816        isEventsRendered: !1,
3817        isBaseRendered: !1,
3818        queuedScroll: null,
3819        isRTL: !1,
3820        isSelected: !1,
3821        selectedEvent: null,
3822        eventOrderSpecs: null,
3823        widgetHeaderClass: null,
3824        widgetContentClass: null,
3825        highlightStateClass: null,
3826        nextDayThreshold: null,
3827        isHiddenDayHash: null,
3828        isNowIndicatorRendered: null,
3829        initialNowDate: null,
3830        initialNowQueriedMs: null,
3831        nowIndicatorTimeoutID: null,
3832        nowIndicatorIntervalID: null,
3833        constructor: function (t, n) {
3834            ue.prototype.constructor.call(this),
3835                (this.calendar = t),
3836                (this.viewSpec = n),
3837                (this.type = n.type),
3838                (this.options = n.options),
3839                (this.name = this.type),
3840                (this.nextDayThreshold = e.duration(this.opt("nextDayThreshold"))),
3841                this.initThemingProps(),
3842                this.initHiddenDays(),
3843                (this.isRTL = this.opt("isRTL")),
3844                (this.eventOrderSpecs = M(this.opt("eventOrder"))),
3845                (this.renderQueue = this.buildRenderQueue()),
3846                this.initAutoBatchRender(),
3847                this.initialize();
3848        },
3849        buildRenderQueue: function () {
3850            var t = this,
3851                e = new de({ event: this.opt("eventRenderWait") });
3852            return (
3853                e.on("start", function () {
3854                    t.freezeHeight(), t.addScroll(t.queryScroll());
3855                }),
3856                e.on("stop", function () {
3857                    t.thawHeight(), t.popScroll();
3858                }),
3859                e
3860            );
3861        },
3862        initAutoBatchRender: function () {
3863            var t = this;
3864            this.on("before:change", function () {
3865                t.startBatchRender();
3866            }),
3867                this.on("change", function () {
3868                    t.stopBatchRender();
3869                });
3870        },
3871        startBatchRender: function () {
3872            this.batchRenderDepth++ || this.renderQueue.pause();
3873        },
3874        stopBatchRender: function () {
3875            --this.batchRenderDepth || this.renderQueue.resume();
3876        },
3877        initialize: function () {},
3878        opt: function (t) {
3879            return this.options[t];
3880        },
3881        publiclyTrigger: function (t, e) {
3882            var n = this.calendar;
3883            return n.publiclyTrigger.apply(n, [t, e || this].concat(Array.prototype.slice.call(arguments, 2), [this]));
3884        },
3885        updateTitle: function () {
3886            (this.title = this.computeTitle()), this.calendar.setToolbarsTitle(this.title);
3887        },
3888        computeTitle: function () {
3889            var t;
3890            return (
3891                (t = /^(year|month)$/.test(this.currentRangeUnit) ? this.currentRange : this.activeRange),
3892                this.formatRange({ start: this.calendar.applyTimezone(t.start), end: this.calendar.applyTimezone(t.end) }, this.opt("titleFormat") || this.computeTitleFormat(), this.opt("titleRangeSeparator"))
3893            );
3894        },
3895        computeTitleFormat: function () {
3896            return "year" == this.currentRangeUnit ? "YYYY" : "month" == this.currentRangeUnit ? this.opt("monthYearFormat") : this.currentRangeAs("days") > 1 ? "ll" : "LL";
3897        },
3898        formatRange: function (t, e, n) {
3899            var i = t.end;
3900            return i.hasTime() || (i = i.clone().subtract(1)), ae(t.start, i, e, n, this.opt("isRTL"));
3901        },
3902        getAllDayHtml: function () {
3903            return this.opt("allDayHtml") || ht(this.opt("allDayText"));
3904        },
3905        buildGotoAnchorHtml: function (e, n, i) {
3906            var r, s, o, a;
3907            return (
3908                t.isPlainObject(e) ? ((r = e.date), (s = e.type), (o = e.forceOff)) : (r = e),
3909                (r = Zt.moment(r)),
3910                (a = { date: r.format("YYYY-MM-DD"), type: s || "day" }),
3911                "string" == typeof n && ((i = n), (n = null)),
3912                (n = n ? " " + ft(n) : ""),
3913                (i = i || ""),
3914                !o && this.opt("navLinks") ? "<a" + n + ' data-goto="' + ht(JSON.stringify(a)) + '">' + i + "</a>" : "<span" + n + ">" + i + "</span>"
3915            );
3916        },
3917        setElement: function (t) {
3918            (this.el = t), this.bindGlobalHandlers(), this.bindBaseRe
3918nderHandlers(), this.renderSkeleton();
3919        },
3920        removeElement: function () {
3921            this.unsetDate(), this.unrenderSkeleton(), this.unbindGlobalHandlers(), this.unbindBaseRenderHandlers(), this.el.remove();
3922        },
3923        renderSkeleton: function () {},
3924        unrenderSkeleton: function () {},
3925        setDate: function (t) {
3926            var e = this.get("dateProfile"),
3927                n = this.buildDateProfile(t, null, !0);
3928            return (e && X(e.activeRange, n.activeRange)) || this.set("dateProfile", n), n.date;
3929        },
3930        unsetDate: function () {
3931            this.unset("dateProfile");
3932        },
3933        requestDateRender: function (t) {
3934            var e = this;
3935            this.renderQueue.queue(
3936                function () {
3937                    e.executeDateRender(t);
3938                },
3939                "date",
3940                "init"
3941            );
3942        },
3943        requestDateUnrender: function () {
3944            var t = this;
3945            this.renderQueue.queue(
3946                function () {
3947                    t.executeDateUnrender();
3948                },
3949                "date",
3950                "destroy"
3951            );
3952        },
3953        fetchInitialEvents: function (t) {
3954            return this.calendar.requestEvents(t.activeRange.start, t.activeRange.end);
3955        },
3956        bindEventChanges: function () {
3957            this.listenTo(this.calendar, "eventsReset", this.resetEvents);
3958        },
3959        unbindEventChanges: function () {
3960            this.stopListeningTo(this.calendar, "eventsReset");
3961        },
3962        setEvents: function (t) {
3963            this.set("currentEvents", t), this.set("hasEvents", !0);
3964        },
3965        unsetEvents: function () {
3966            this.unset("currentEvents"), this.unset("hasEvents");
3967        },
3968        resetEvents: function (t) {
3969            this.startBatchRender(), this.unsetEvents(), this.setEvents(t), this.stopBatchRender();
3970        },
3971        requestEventsRender: function (t) {
3972            var e = this;
3973            this.renderQueue.queue(
3974                function () {
3975                    e.executeEventsRender(t);
3976                },
3977                "event",
3978                "init"
3979            );
3980        },
3981        requestEventsUnrender: function () {
3982            var t = this;
3983            this.renderQueue.queue(
3984                function () {
3985                    t.executeEventsUnrender();
3986                },
3987                "event",
3988                "destroy"
3989            );
3990        },
3991        executeDateRender: function (t, e) {
3992            this.setDateProfileForRendering(t),
3993                this.updateTitle(),
3994                this.calendar.updateToolbarButtons(),
3995                this.render && this.render(),
3996                this.renderDates(),
3997                this.updateSize(),
3998                this.renderBusinessHours(),
3999                this.startNowIndicator(),
4000                e || this.addScroll(this.computeInitialDateScroll()),
4001                (this.isDatesRendered = !0),
4002                this.trigger("datesRendered");
4003        },
4004        executeDateUnrender: function () {
4005            this.unselect(), this.stopNowIndicator(), this.trigger("before:datesUnrendered"), this.unrenderBusinessHours(), this.unrenderDates(), this.destroy && this.destroy(), (this.isDatesRendered = !1);
4006        },
4007        renderDates: function () {},
4008        unrenderDates: function () {},
4009        bindBaseRenderHandlers: function () {
4010            var t = this;
4011            this.on("datesRendered.baseHandler", function () {
4012                t.onBaseRender();
4013            }),
4014                this.on("before:datesUnrendered.baseHandler", function () {
4015                    t.onBeforeBaseUnrender();
4016                });
4017        },
4018        unbindBaseRenderHandlers: function () {
4019            this.off(".baseHandler");
4020        },
4021        onBaseRender: function () {
4022            this.applyScreenState(), this.publiclyTrigger("viewRender", this, this, this.el);
4023        },
4024        onBeforeBaseUnrender: function () {
4025            this.applyScreenState(), this.publiclyTrigger("viewDestroy", this, this, this.el);
4026        },
4027        bindGlobalHandlers: function () {
4028            this.listenTo(we.get(), { touchstart: this.processUnselect, mousedown: this.handleDocumentMousedown });
4029        },
4030        unbindGlobalHandlers: function () {
4031            this.stopListeningTo(we.get());
4032        },
4033        initThemingProps: function () {
4034            var t = this.opt("theme") ? "ui" : "fc";
4035            (this.widgetHeaderClass = t + "-widget-header"), (this.widgetContentClass = t + "-widget-content"), (this.highlightStateClass = t + "-state-highlight");
4036        },
4037        renderBusinessHours: function () {},
4038        unrenderBusinessHours: function () {},
4039        startNowIndicator: function () {
4040            var t,
4041                n,
4042                i,
4043                r = this;
4044            this.opt("nowIndicator") &&
4045                (t = this.getNowIndicatorUnit()) &&
4046                ((n = mt(this, "updateNowIndicator")),
4047                (this.initialNowDate = this.calendar.getNow()),
4048                (this.initialNowQueriedMs = +new Date()),
4049                this.renderNowIndicator(this.initialNowDate),
4050                (this.isNowIndicatorRendered = !0),
4051                (i = this.initialNowDate.clone().startOf(t).add(1, t) - this.initialNowDate),
4052                (this.nowIndicatorTimeoutID = setTimeout(function () {
4053                    (r.nowIndicatorTimeoutID = null), n(), (i = +e.duration(1, t)), (i = Math.max(100, i)), (r.nowIndicatorIntervalID = setInterval(n, i));
4054                }, i)));
4055        },
4056        updateNowIndicator: function () {
4057            this.isNowIndicatorRendered && (this.unrenderNowIndicator(), this.renderNowIndicator(this.initialNowDate.clone().add(new Date() - this.initialNowQueriedMs)));
4058        },
4059        stopNowIndicator: function () {
4060            this.isNowIndicatorRendered &&
4061                (this.nowIndicatorTimeoutID && (clearTimeout(this.nowIndicatorTimeoutID), (this.nowIndicatorTimeoutID = null)),
4062                this.nowIndicatorIntervalID && (clearTimeout(this.nowIndicatorIntervalID), (this.nowIndicatorIntervalID = null)),
4063                this.unrenderNowIndicator(),
4064                (this.isNowIndicatorRendered = !1));
4065        },
4066        getNowIndicatorUnit: function () {},
4067        renderNowIndicator: function (t) {},
4068        unrenderNowIndicator: function () {},
4069        updateSize: function (t) {
4070            var e;
4071            t && (e = this.queryScroll()), this.updateHeight(t), this.updateWidth(t), this.updateNowIndicator(), t && this.applyScroll(e);
4072        },
4073        updateWidth: function (t) {},
4074        updateHeight: function (t) {
4075            var e = this.calendar;
4076            this.setHeight(e.getSuggestedViewHeight(), e.isHeightAuto());
4077        },
4078        setHeight: function (t, e) {},
4079        addForcedScroll: function (e) {
4080            this.addScroll(t.extend(e, { isForced: !0 }));
4081        },
4082        addScroll: function (e) {
4083            var n = this.queuedScroll || (this.queuedScroll = {});
4084            n.isForced || t.extend(n, e);
4085        },
4086        popScroll: function () {
4087            this.applyQueuedScroll(), (this.queuedScroll = null);
4088        },
4089        applyQueuedScroll: function () {
4090            this.queuedScroll && this.applyScroll(this.queuedScroll);
4091        },
4092        queryScroll: function () {
4093            var e = {};
4094            return this.isDatesRendered && t.extend(e, this.queryDateScroll()), e;
4095        },
4096        applyScroll: function (t) {
4097            this.isDatesRendered && this.applyDateScroll(t);
4098        },
4099        computeInitialDateScroll: function () {
4100            return {};
4101        },
4102        queryDateScroll: function () {
4103            return {};
4104        },
4105        applyDateScroll: function (t) {},
4106        freezeHeight: function () {
4107            this.calendar.freezeContentHeight();
4108        },
4109        thawHeight: function () {
4110            this.calendar.thawContentHeight();
4111        },
4112        executeEventsRender: function (t) {
4113            this.renderEvents(t), (this.isEventsRendered = !0), this.onEventsRender();
4114        },
4115        executeEventsUnrender: function () {
4116            this.onBeforeEventsUnrender(), this.destroyEvents && this.destroyEvents(), this.unrenderEvents(), (this.isEventsRendered = !1);
4117        },
4118        onEventsRender: function () {
4119            this.applyScreenState(),
4120                this.renderedEventSegEach(function (t) {
4121                    this.publiclyTrigger("eventAfterRender", t.event, t.event, t.el);
4122                }),
4123                this.publiclyTrigger("eventAfterAllRender");
4124        },
4125        onBeforeEventsUnrender: function () {
4126            this.applyScreenState(),
4127                this.renderedEventSegEach(function (t) {
4128                    this.publiclyTrigger("eventDestroy", t.event, t.event, t.el);
4129                });
4130        },
4131        applyScreenState: function () {
4132            this.thawHeight(), this.freezeHeight(), this.applyQueuedScroll();
4133        },
4134        renderEvents: function (t) {},
4135        unrenderEvents: function () {},
4136        resolveEventEl: function (e, n) {
4137            var i = this.publiclyTrigger("eventRender", e, e, n);
4138            return !1 === i ? (n = null) : i && !0 !== i && (n = t(i)), n;
4139        },
4140        showEvent: function (t) {
4141            this.renderedEventSegEach(function (t) {
4142                t.el.css("visibility", "");
4143            }, t);
4144        },
4145        hideEvent: function (t) {
4146            this.renderedEventSegEach(function (t) {
4147                t.el.css("visibility", "hidden");
4148            }, t);
4149        },
4150        renderedEventSegEach: function (t, e) {
4151            var n,
4152                i = this.getEventSegs();
4153            for (n = 0; n < i.length; n++) (e && i[n].event._id !== e._id) || (i[n].el && t.call(this, i[n]));
4154        },
4155        getEventSegs: function () {
4156            return [];
4157        },
4158        isEventDraggable: function (t) {
4159            return this.isEventStartEditable(t);
4160        },
4161        isEventStartEditable: function (t) {
4162            return ut(t.startEditable, (t.source || {}).startEditable, this.opt("eventStartEditable"), this.isEventGenerallyEditable(t));
4163        },
4164        isEventGenerallyEditable: function (t) {
4165            return ut(t.editable, (t.source || {}).editable, this.opt("editable"));
4166        },
4167        reportSegDrop: function (t, e, n, i, r) {
4168            var s = this.calendar,
4169                o = s.mutateSeg(t, e, n),
4170                a = function () {
4171                    o.undo(), s.reportEventChange();
4172                };
4173            this.triggerEventDrop(t.event, o.dateDelta, a, i, r), s.reportEventChange();
4174        },
4175        triggerEventDrop: function (t, e, n, i, r) {
4176            this.publiclyTrigger("eventDrop", i[0], t, e, n, r, {});
4177        },
4178        reportExternalDrop: function (e, n, i, r, s) {
4179            var o,
4180                a,
4181                l = e.eventProps;
4182            l && ((o = t.extend({}, l, n)), (a = this.calendar.renderEvent(o, e.stick)[0])), this.triggerExternalDrop(a, n, i, r, s);
4183        },
4184        triggerExternalDrop: function (t, e, n, i, r) {
4185            this.publiclyTrigger("drop", n[0], e.start, i, r), t && this.publiclyTrigger("eventReceive", null, t);
4186        },
4187        renderDrag: function (t, e) {},
4188        unrenderDrag: function () {},
4189        isEventResizableFromStart: function (t) {
4190            return this.opt("eventResizableFromStart") && this.isEventResizable(t);
4191        },
4192        isEventResizableFromEnd: function (t) {
4193            return this.isEventResizable(t);
4194        },
4195        isEventResizable: function (t) {
4196            var e = t.source || {};
4197            return ut(t.durationEditable, e.durationEditable, this.opt("eventDurationEditable"), t.editable, e.editable, this.opt("editable"));
4198        },
4199        reportSegResize: function (t, e, n, i, r) {
4200            var s = this.calendar,
4201                o = s.mutateSeg(t, e, n),
4202                a = function () {
4203                    o.undo(), s.reportEventChange();
4204                };
4205            this.triggerEventResize(t.event, o.durationDelta, a, i, r), s.reportEventChange();
4206        },
4207        triggerEventResize: function (t, e, n, i, r) {
4208            this.publiclyTrigger("eventResize", i[0], t, e, n, r, {});
4209        },
4210        select: function (t, e) {
4211            this.unselect(e), this.renderSelection(t), this.reportSelection(t, e);
4212        },
4213        renderSelection: function (t) {},
4214        reportSelection: function (t, e) {
4215            (this.isSelected = !0), this.triggerSelect(t, e);
4216        },
4217        triggerSelect: function (t, e) {
4218            this.publiclyTrigger("select", null, this.calendar.applyTimezone(t.start), this.calendar.applyTimezone(t.end
4218), e);
4219        },
4220        unselect: function (t) {
4221            this.isSelected && ((this.isSelected = !1), this.destroySelection && this.destroySelection(), this.unrenderSelection(), this.publiclyTrigger("unselect", null, t));
4222        },
4223        unrenderSelection: function () {},
4224        selectEvent: function (t) {
4225            (this.selectedEvent && this.selectedEvent === t) ||
4226                (this.unselectEvent(),
4227                this.renderedEventSegEach(function (t) {
4228                    t.el.addClass("fc-selected");
4229                }, t),
4230                (this.selectedEvent = t));
4231        },
4232        unselectEvent: function () {
4233            this.selectedEvent &&
4234                (this.renderedEventSegEach(function (t) {
4235                    t.el.removeClass("fc-selected");
4236                }, this.selectedEvent),
4237                (this.selectedEvent = null));
4238        },
4239        isEventSelected: function (t) {
4240            return this.selectedEvent && this.selectedEvent._id === t._id;
4241        },
4242        handleDocumentMousedown: function (t) {
4243            S(t) && this.processUnselect(t);
4244        },
4245        processUnselect: function (t) {
4246            this.processRangeUnselect(t), this.processEventUnselect(t);
4247        },
4248        processRangeUnselect: function (e) {
4249            var n;
4250            this.isSelected && this.opt("unselectAuto") && (((n = this.opt("unselectCancel")) && t(e.target).closest(n).length) || this.unselect(e));
4251        },
4252        processEventUnselect: function (e) {
4253            this.selectedEvent && (t(e.target).closest(".fc-selected").length || this.unselectEvent());
4254        },
4255        triggerDayClick: function (t, e, n) {
4256            this.publiclyTrigger("dayClick", e, this.calendar.applyTimezone(t.start), n);
4257        },
4258        computeDayRange: function (t) {
4259            var e,
4260                n = t.start.clone().stripTime(),
4261                i = t.end,
4262                r = null;
4263            return i && ((r = i.clone().stripTime()), (e = +i.time()) && e >= this.nextDayThreshold && r.add(1, "days")), (!i || r <= n) && (r = n.clone().add(1, "days")), { start: n, end: r };
4264        },
4265        isMultiDayEvent: function (t) {
4266            var e = this.computeDayRange(t);
4267            return e.end.diff(e.start, "days") > 1;
4268        },
4269    }));
4270    Ce.watch(
4271        "displayingDates",
4272        ["dateProfile"],
4273        function (t) {
4274            this.requestDateRender(t.dateProfile);
4275        },
4276        function () {
4277            this.requestDateUnrender();
4278        }
4279    ),
4280        Ce.watch("initialEvents", ["dateProfile"], function (t) {
4281            return this.fetchInitialEvents(t.dateProfile);
4282        }),
4283        Ce.watch(
4284            "bindingEvents",
4285            ["initialEvents"],
4286            function (t) {
4287                this.setEvents(t.initialEvents), this.bindEventChanges();
4288            },
4289            function () {
4290                this.unbindEventChanges(), this.unsetEvents();
4291            }
4292        ),
4293        Ce.watch(
4294            "displayingEvents",
4295            ["displayingDates", "hasEvents"],
4296            function () {
4297                this.requestEventsRender(this.get("currentEvents"));
4298            },
4299            function () {
4300                this.requestEventsUnrender();
4301            }
4302        ),
4303        Ce.mixin({
4304            currentRange: null,
4305            currentRangeUnit: null,
4306            renderRange: null,
4307            activeRange: null,
4308            validRange: null,
4309            dateIncrement: null,
4310            minTime: null,
4311            maxTime: null,
4312            usesMinMaxTime: !1,
4313            start: null,
4314            end: null,
4315            intervalStart: null,
4316            intervalEnd: null,
4317            setDateProfileForRendering: function (t) {
4318                (this.currentRange = t.currentRange),
4319                    (this.currentRangeUnit = t.currentRangeUnit),
4320                    (this.renderRange = t.renderRange),
4321                    (this.activeRange = t.activeRange),
4322                    (this.validRange = t.validRange),
4323                    (this.dateIncrement = t.dateIncrement),
4324                    (this.minTime = t.minTime),
4325                    (this.maxTime = t.maxTime),
4326                    (this.start = t.activeRange.start),
4327                    (this.end = t.activeRange.end),
4328                    (this.intervalStart = t.currentRange.start),
4329                    (this.intervalEnd = t.currentRange.end);
4330            },
4331            buildPrevDateProfile: function (t) {
4332                var e = t.clone().startOf(this.currentRangeUnit).subtract(this.dateIncrement);
4333                return this.buildDateProfile(e, -1);
4334            },
4335            buildNextDateProfile: function (t) {
4336                var e = t.clone().startOf(this.currentRangeUnit).add(this.dateIncrement);
4337                return this.buildDateProfile(e, 1);
4338            },
4339            buildDateProfile: function (t, n, i) {
4340                var r,
4341                    s,
4342                    o,
4343                    a,
4344                    l = this.buildValidRange(),
4345                    u = null,
4346                    h = null;
4347                return (
4348                    i && (t = j(t, l)),
4349                    (r = this.buildCurrentRangeInfo(t, n)),
4350                    (s = this.buildRenderRange(r.range, r.unit)),
4351                    (o = q(s)),
4352                    this.opt("showNonCurrentDates") || (o = U(o, r.range)),
4353                    (u = e.duration(this.opt("minTime"))),
4354                    (h = e.duration(this.opt("maxTime"))),
4355                    this.adjustActiveRange(o, u, h),
4356                    (o = U(o, l)),
4357                    (t = j(t, o)),
4358                    (a = $(r.range, l)),
4359                    { validRange: l, currentRange: r.range, currentRangeUnit: r.unit, activeRange: o, renderRange: s, minTime: u, maxTime: h, isValid: a, date: t, dateIncrement: this.buildDateIncrement(r.duration) }
4360                );
4361            },
4362            buildValidRange: function () {
4363                return this.getRangeOption("validRange", this.calendar.getNow()) || {};
4364            },
4365            buildCurrentRangeInfo: function (t, e) {
4366                var n,
4367                    i = null,
4368                    r = null,
4369                    s = null;
4370                return (
4371                    this.viewSpec.duration
4372                        ? ((i = this.viewSpec.duration), (r = this.viewSpec.durationUnit), (s = this.buildRangeFromDuration(t, e, i, r)))
4373                        : (n = this.opt("dayCount"))
4374                        ? ((r = "day"), (s = this.buildRangeFromDayCount(t, e, n)))
4375                        : (s = this.buildCustomVisibleRange(t))
4376                        ? (r = V(s.start, s.end))
4377                        : ((i = this.getFallbackDuration()), (r = V(i)), (s = this.buildRangeFromDuration(t, e, i, r))),
4378                    this.normalizeCurrentRange(s, r),
4379                    { duration: i, unit: r, range: s }
4380                );
4381            },
4382            getFallbackDuration: function () {
4383                return e.duration({ days: 1 });
4384            },
4385            normalizeCurrentRange: function (t, e) {
4386                /^(year|month|week|day)$/.test(e) ? (t.start.stripTime(), t.end.stripTime()) : (t.start.hasTime() || t.start.time(0), t.end.hasTime() || t.end.time(0));
4387            },
4388            adjustActiveRange: function (t, e, n) {
4389                var i = !1;
4390                this.usesMinMaxTime && (e < 0 && (t.start.time(0).add(e), (i = !0)), n > 864e5 && (t.end.time(n - 864e5), (i = !0)), i && (t.start.hasTime() || t.start.time(0), t.end.hasTime() || t.end.time(0)));
4391            },
4392            buildRangeFromDuration: function (t, n, i, r) {
4393                var s,
4394                    o,
4395                    a,
4396                    l = this.opt("dateAlignment"),
4397                    u = t.clone();
4398                return (
4399                    i.as("days") <= 1 && this.isHiddenDay(u) && ((u = this.skipHiddenDays(u, n)), u.startOf("day")),
4400                    l || ((o = this.opt("dateIncrement")), o ? ((a = e.duration(o)), (l = a < i ? O(a, o) : r)) : (l = r)),
4401                    u.startOf(l),
4402                    (s = u.clone().add(i)),
4403                    { start: u, end: s }
4404                );
4405            },
4406            buildRangeFromDayCount: function (t, e, n) {
4407                var i,
4408                    r = this.opt("dateAlignment"),
4409                    s = 0,
4410                    o = t.clone();
4411                r && o.startOf(r), o.startOf("day"), (o = this.skipHiddenDays(o, e)), (i = o.clone());
4412                do {
4413                    i.add(1, "day"), this.isHiddenDay(i) || s++;
4414                } while (s < n);
4415                return { start: o, end: i };
4416            },
4417            buildCustomVisibleRange: function (t) {
4418                var e = this.getRangeOption("visibleRange", this.calendar.moment(t));
4419                return !e || (e.start && e.end) ? e : null;
4420            },
4421            buildRenderRange: function (t, e) {
4422                return this.trimHiddenDays(t);
4423            },
4424            buildDateIncrement: function (t) {
4425                var n,
4426                    i = this.opt("dateIncrement");
4427                return i ? e.duration(i) : (n = this.opt("dateAlignment")) ? e.duration(1, n) : t || e.duration({ days: 1 });
4428            },
4429            trimHiddenDays: function (t) {
4430                return { start: this.skipHiddenDays(t.start), end: this.skipHiddenDays(t.end, -1, !0) };
4431            },
4432            currentRangeAs: function (t) {
4433                var e = this.currentRange;
4434                return e.end.diff(e.start, t, !0);
4435            },
4436            getRangeOption: function (t) {
4437                var e = this.opt(t);
4438                if (("function" == typeof e && (e = e.apply(null, Array.prototype.slice.call(arguments, 1))), e)) return this.calendar.parseRange(e);
4439            },
4440            initHiddenDays: function () {
4441                var e,
4442                    n = this.opt("hiddenDays") || [],
4443                    i = [],
4444                    r = 0;
4445                for (!1 === this.opt("weekends") && n.push(0, 6), e = 0; e < 7; e++) (i[e] = -1 !== t.inArray(e, n)) || r++;
4446                if (!r) throw "invalid hiddenDays";
4447                this.isHiddenDayHash = i;
4448            },
4449            isHiddenDay: function (t) {
4450                return e.isMoment(t) && (t = t.day()), this.isHiddenDayHash[t];
4451            },
4452            skipHiddenDays: function (t, e, n) {
4453                var i = t.clone();
4454                for (e = e || 1; this.isHiddenDayHash[(i.day() + (n ? e : 0) + 7) % 7]; ) i.add(e, "days");
4455                return i;
4456            },
4457        });
4458    var He = (Zt.Scroller = bt.extend({
4459        el: null,
4460        scrollEl: null,
4461        overflowX: null,
4462        overflowY: null,
4463        constructor: function (t) {
4464            (t = t || {}), (this.overflowX = t.overflowX || t.overflow || "auto"), (this.overflowY = t.overflowY || t.overflow || "auto");
4465        },
4466        render: function () {
4467            (this.el = this.renderEl()), this.applyOverflow();
4468        },
4469        renderEl: function () {
4470            return (this.scrollEl = t('<div class="fc-scroller"></div>'));
4471        },
4472        clear: function () {
4473            this.setHeight("auto"), this.applyOverflow();
4474        },
4475        destroy: function () {
4476            this.el.remove();
4477        },
4478        applyOverflow: function () {
4479            this.scrollEl.css({ "overflow-x": this.overflowX, "overflow-y": this.overflowY });
4480        },
4481        lockOverflow: function (t) {
4482            var e = this.overflowX,
4483                n = this.overflowY;
4484            (t = t || this.getScrollbarWidths()),
4485                "auto" === e && (e = t.top || t.bottom || this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth ? "scroll" : "hidden"),
4486                "auto" === n && (n = t.left || t.right || this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight ? "scroll" : "hidden"),
4487                this.scrollEl.css({ "overflow-x": e, "overflow-y": n });
4488        },
4489        setHeight: function (t) {
4490            this.scrollEl.height(t);
4491        },
4492        getScrollTop: function () {
4493            return this.scrollEl.scrollTop();
4494        },
4495        setScrollTop: function (t) {
4496            this.scrollEl.scrollTop(t);
4497        },
4498        getClientWidth: function () {
4499            return this.scrollEl[0].clientWidth;
4500        },
4501        getClientHeight: function () {
4502            return this.scrollEl[0].clientHeight;
4503        },
4504        getScrollbarWidths: function () {
4505            return p(this.scrollEl);
4506        },
4507    }));
4508    _t.prototype.proxyCall = function (t) {
4509        var e = Array.prototype.slice.call(arguments, 1),
4510            n = [];
4511        return (
4512            this.items.forEach(function (i) {
4513                n.push(i[t].apply(i, e));
4514            }),
4515            n
4516        );
4517    };
4518    var Re = (Zt.Calendar = bt.extend(fe, {
4519        view: null,
4520        viewsByType: null,
4521        currentDate: null,
4522        loadingLevel: 0,
4523        constructor: function (t, e) {
4524            we.needed(), (this.el = t), (this.viewsByType = {}), (this.viewSpecCache = {}), this.initOptionsInternals(e), this.initMomentInternals(), this.initCurrentDate(), Ut.call(this), this.initialize();
4525        },
4526        initialize: function () {},
4527        getCalendar: function () {
4528            return this;
4529        },
4530        getView: function () {
4531            return this.view;
4532        },
4533        publiclyTrigger: function (t, e) {
4534            var n = Array.prototype.slice.call(arguments, 2),
4535                i = this.opt(t);
4536            if (((e = e || this.el[0]), this.triggerWith(t, e, n), i)) return i.apply(e, n);
4537        },
4538        instantiateView: function (t) {
4539            var e = this.getViewSpec(t);
4540            return new e.class(this, e);
4541        },
4542        isValidViewType: function (t) {
4543            return Boolean(this.getViewSpec(t));
4544        },
4545        changeView: function (t, e) {
4546            e && (e.start && e.end ? this.recordOptionOverrides({ visibleRange: e }) : (this.currentDate = this.moment(e).stripZone())), this.renderView(t);
4547        },
4548        zoomTo: function (t, e) {
4549            var n;
4550            (e = e || "day"), (n = this.getViewSpec(e) || this.getUnitViewSpec(e)), (this.currentDate = t.clone()), this.renderView(n ? n.type : null);
4551        },
4552        initCurrentDate: function () {
4553            var t = this.opt("defaultDate");
4554            this.currentDate = null != t ? this.moment(t).stripZone() : this.getNow();
4555        },
4556        prev: function () {
4557            var t = this.view.buildPrevDateProfile(this.currentDate);
4558            t.isValid && ((this.currentDate = t.date), this.renderView());
4559        },
4560        next: function () {
4561            var t = this.view.buildNextDateProfile(this.currentDate);
4562            t.isValid && ((this.currentDate = t.date), this.renderView());
4563        },
4564        prevYear: function () {
4565            this.currentDate.add(-1, "years"), this.renderView();
4566        },
4567        nextYear: function () {
4568            this.currentDate.add(1, "years"), this.renderView();
4569        },
4570        today: function () {
4571            (this.currentDate = this.getNow()), this.renderView();
4572        },
4573        gotoDate: function (t) {
4574            (this.currentDate = this.moment(t).stripZone()), this.renderView();
4575        },
4576        incrementDate: function (t) {
4577            this.currentDate.add(e.duration(t)), this.renderView();
4578        },
4579        getDate: function () {
4580            return this.applyTimezone(this.currentDate);
4581        },
4582        pushLoading: function () {
4583            this.loadingLevel++ || this.publiclyTrigger("loading", null, !0, this.view);
4584        },
4585        popLoading: function () {
4586            --this.loadingLevel || this.publiclyTrigger("loading", null, !1, this.view);
4587        },
4588        select: function (t, e) {
4589            this.view.select(this.buildSelectSpan.apply(this, arguments));
4590        },
4591        unselect: function () {
4592            this.view && this.view.unselect();
4593        },
4594        buildSelectSpan: function (t, e) {
4595            var n,
4596                i = this.moment(t).stripZone();
4597            return (n = e ? this.moment(e).stripZone() : i.hasTime() ? i.clone().add(this.defaultTimedEventDuration) : i.clone().add(this.defaultAllDayEventDuration)), { start: i, end: n };
4598        },
4599        parseRange: function (t) {
4600            var e = null,
4601                n = null;
4602            return t.start && (e = this.moment(t.start).stripZone()), t.end && (n = this.moment(t.end).stripZone()), e || n ? (e && n && n.isBefore(e) ? null : { start: e, end: n }) : null;
4603        },
4604        rerenderEvents: function () {
4605            this.elementVisible() && this.reportEventChange();
4606        },
4607    }));
4608    Re.mixin({
4609        dirDefaults: null,
4610        localeDefaults: null,
4611        overrides: null,
4612        dynamicOverrides: null,
4613        optionsModel: null,
4614        initOptionsInternals: function (e) {
4615            (this.overrides = t.extend({}, e)), (this.dynamicOverrides = {}), (this.optionsModel = new ue()), this.populateOptionsHash();
4616        },
4617        option: function (t, e) {
4618            var n;
4619            if ("string" == typeof t) {
4620                if (void 0 === e) return this.optionsModel.get(t);
4621                (n = {}), (n[t] = e), this.setOptions(n);
4622            } else "object" == typeof t && this.setOptions(t);
4623        },
4624        opt: function (t) {
4625            return this.optionsModel.get(t);
4626        },
4627        setOptions: function (t) {
4628            var e,
4629                n = 0;
4630            this.recordOptionOverrides(t);
4631            for (e in t) n++;
4632            if (1 === n) {
4633                if ("height" === e || "contentHeight" === e || "aspectRatio" === e) return void this.updateSize(!0);
4634                if ("defaultDate" === e) return;
4635                if ("businessHours" === e) return void (this.view && (this.view.unrenderBusinessHours(), this.view.renderBusinessHours()));
4636                if ("timezone" === e) return this.rezoneArrayEventSources(), void this.refetchEvents();
4637            }
4638            this.renderHeader(), this.renderFooter(), (this.viewsByType = {}), this.reinitView();
4639        },
4640        populateOptionsHash: function () {
4641            var t, e, i, r, s;
4642            (t = ut(this.dynamicOverrides.locale, this.overrides.locale)),
4643                (e = xe[t]),
4644                e || ((t = Re.defaults.locale), (e = xe[t] || {})),
4645                (i = ut(this.dynamicOverrides.isRTL, this.overrides.isRTL, e.isRTL, Re.defaults.isRTL)),
4646                (r = i ? Re.rtlDefaults : {}),
4647                (this.dirDefaults = r),
4648                (this.localeDefaults = e),
4649                (s = n([Re.defaults, r, e, this.overrides, this.dynamicOverrides])),
4650                Yt(s),
4651                this.optionsModel.reset(s);
4652        },
4653        recordOptionOverrides: function (t) {
4654            var e;
4655            for (e in t) this.dynamicOverrides[e] = t[e];
4656            (this.viewSpecCache = {}), this.populateOptionsHash();
4657        },
4658    }),
4659        Re.mixin({
4660            defaultAllDayEventDuration: null,
4661            defaultTimedEventDuration: null,
4662            localeData: null,
4663            initMomentInternals: function () {
4664                var t = this;
4665                (this.defaultAllDayEventDuration = e.duration(this.opt("defaultAllDayEventDuration"))),
4666                    (this.defaultTimedEventDuration = e.duration(this.opt("defaultTimedEventDuration"))),
4667                    this.optionsModel.watch("buildingMomentLocale", ["?locale", "?monthNames", "?monthNamesShort", "?dayNames", "?dayNamesShort", "?firstDay", "?weekNumberCalculation"], function (e) {
4668                        var n,
4669                            i = e.weekNumberCalculation,
4670                            r = e.firstDay;
4671                        "iso" === i && (i = "ISO");
4672                        var s = rt(qt(e.locale));
4673                        e.monthNames && (s._months = e.monthNames),
4674                            e.monthNamesShort && (s._monthsShort = e.monthNamesShort),
4675                            e.dayNames && (s._weekdays = e.dayNames),
4676                            e.dayNamesShort && (s._weekdaysShort = e.dayNamesShort),
4677                            null == r && "ISO" === i && (r = 1),
4678                            null != r && ((n = rt(s._week)), (n.dow = r), (s._week = n)),
4679                            ("ISO" !== i && "local" !== i && "function" != typeof i) || (s._fullCalendar_weekCalc = i),
4680                            (t.localeData = s),
4681                            t.currentDate && t.localizeMoment(t.currentDate);
4682                    });
4683            },
4684            moment: function () {
4685                var t;
4686                return (
4687                    "local" === this.opt("timezone")
4688                        ? ((t = Zt.moment.apply(null, arguments)), t.hasTime() && t.local())
4689                        : (t = "UTC" === this.opt("timezone") ? Zt.moment.utc.apply(null, arguments) : Zt.moment.parseZone.apply(null, arguments)),
4690                    this.localizeMoment(t),
4691                    t
4692                );
4693            },
4694            localizeMoment: function (t) {
4695                t._locale = this.localeData;
4696            },
4697            getIsAmbigTimezone: function () {
4698                return "local" !== this.opt("timezone") && "UTC" !== this.opt("timezone");
4699            },
4700            applyTimezone: function (t) {
4701                if (!t.hasTime()) return t.clone();
4702                var e,
4703                    n = this.moment(t.toArray()),
4704                    i = t.time() - n.time();
4705                return i && ((e = n.clone().add(i)), t.time() - e.time() == 0 && (n = e)), n;
4706            },
4707            getNow: function () {
4708                var t = this.opt("now");
4709                return "function" == typeof t && (t = t()), this.moment(t).stripZone();
4710            },
4711            humanizeDuration: function (t) {
4712                return t.locale(this.opt("locale")).humanize();
4713            },
4714            getEventEnd: function (t) {
4715                return t.end ? t.end.clone() : this.getDefaultEventEnd(t.allDay, t.start);
4716            },
4717            getDefaultEventEnd: function (t, e) {
4718                var n = e.clone();
4719                return t ? n.stripTime().add(this.defaultAllDayEventDuration) : n.add(this.defaultTimedEventDuration), this.getIsAmbigTimezone() && n.stripZone(), n;
4720            },
4721        }),
4722        Re.mixin({
4723            viewSpecCache: null,
4724            getViewSpec: function (t) {
4725                var e = this.viewSpecCache;
4726                return e[t] || (e[t] = this.buildViewSpec(t));
4727            },
4728            getUnitViewSpec: function (e) {
4729                var n, i, r;
4730                if (-1 != t.inArray(e, Jt))
4731                    for (
4732                        n = this.header.getViewsWithButtons(),
4733                            t.each(Zt.views, function (t) {
4734                                n.push(t);
4735                            }),
4736                            i = 0;
4737                        i < n.length;
4738                        i++
4739                    )
4740                        if ((r = this.getViewSpec(n[i])) && r.singleUnit == e) return r;
4741            },
4742            buildViewSpec: function (t) {
4743                for (var i, r, s, o, a, l = this.overrides.views || {}, u = [], h = [], c = [], d = t; d; )
4744                    (i = $t[d]),
4745                        (r = l[d]),
4746                        (d = null),
4747                        "function" == typeof i && (i = { class: i }),
4748                        i && (u.unshift(i), h.unshift(i.defaults || {}), (s = s || i.duration), (d = d || i.type)),
4749                        r && (c.unshift(r), (s = s || r.duration), (d = d || r.type));
4750                return (
4751                    (i = it(u)),
4752                    (i.type = t),
4753                    !!i.class &&
4754                        ((s = s || this.dynamicOverrides.duration || this.overrides.duration),
4755                        s && ((o = e.duration(s)), o.valueOf() && ((a = O(o, s)
4755), (i.duration = o), (i.durationUnit = a), 1 === o.as(a) && ((i.singleUnit = a), c.unshift(l[a] || {})))),
4756                        (i.defaults = n(h)),
4757                        (i.overrides = n(c)),
4758                        this.buildViewSpecOptions(i),
4759                        this.buildViewSpecButtonText(i, t),
4760                        i)
4761                );
4762            },
4763            buildViewSpecOptions: function (t) {
4764                (t.options = n([Re.defaults, t.defaults, this.dirDefaults, this.localeDefaults, this.overrides, t.overrides, this.dynamicOverrides])), Yt(t.options);
4765            },
4766            buildViewSpecButtonText: function (t, e) {
4767                function n(n) {
4768                    var i = n.buttonText || {};
4769                    return i[e] || (t.buttonTextKey ? i[t.buttonTextKey] : null) || (t.singleUnit ? i[t.singleUnit] : null);
4770                }
4771                (t.buttonTextOverride = n(this.dynamicOverrides) || n(this.overrides) || t.overrides.buttonText),
4772                    (t.buttonTextDefault = n(this.localeDefaults) || n(this.dirDefaults) || t.defaults.buttonText || n(Re.defaults) || (t.duration ? this.humanizeDuration(t.duration) : null) || e);
4773            },
4774        }),
4775        Re.mixin({
4776            el: null,
4777            contentEl: null,
4778            suggestedViewHeight: null,
4779            windowResizeProxy: null,
4780            ignoreWindowResize: 0,
4781            render: function () {
4782                this.contentEl ? this.elementVisible() && (this.calcSize(), this.renderView()) : this.initialRender();
4783            },
4784            initialRender: function () {
4785                var e = this,
4786                    n = this.el;
4787                n.addClass("fc"),
4788                    n.on("click.fc", "a[data-goto]", function (n) {
4789                        var i = t(this),
4790                            r = i.data("goto"),
4791                            s = e.moment(r.date),
4792                            o = r.type,
4793                            a = e.view.opt("navLink" + gt(o) + "Click");
4794                        "function" == typeof a ? a(s, n) : ("string" == typeof a && (o = a), e.zoomTo(s, o));
4795                    }),
4796                    this.optionsModel.watch("applyingThemeClasses", ["?theme"], function (t) {
4797                        n.toggleClass("ui-widget", t.theme), n.toggleClass("fc-unthemed", !t.theme);
4798                    }),
4799                    this.optionsModel.watch("applyingDirClasses", ["?isRTL", "?locale"], function (t) {
4800                        n.toggleClass("fc-ltr", !t.isRTL), n.toggleClass("fc-rtl", t.isRTL);
4801                    }),
4802                    (this.contentEl = t("<div class='fc-view-container'/>").prependTo(n)),
4803                    this.initToolbars(),
4804                    this.renderHeader(),
4805                    this.renderFooter(),
4806                    this.renderView(this.opt("defaultView")),
4807                    this.opt("handleWindowResize") && t(window).resize((this.windowResizeProxy = yt(this.windowResize.bind(this), this.opt("windowResizeDelay"))));
4808            },
4809            destroy: function () {
4810                this.view && this.view.removeElement(),
4811                    this.toolbarsManager.proxyCall("removeElement"),
4812                    this.contentEl.remove(),
4813                    this.el.removeClass("fc fc-ltr fc-rtl fc-unthemed ui-widget"),
4814                    this.el.off(".fc"),
4815                    this.windowResizeProxy && (t(window).unbind("resize", this.windowResizeProxy), (this.windowResizeProxy = null)),
4816                    we.unneeded();
4817            },
4818            elementVisible: function () {
4819                return this.el.is(":visible");
4820            },
4821            renderView: function (e, n) {
4822                this.ignoreWindowResize++;
4823                var i = this.view && e && this.view.type !== e;
4824                i && (this.freezeContentHeight(), this.clearView()),
4825                    !this.view &&
4826                        e &&
4827                        ((this.view = this.viewsByType[e] || (this.viewsByType[e] = this.instantiateView(e))),
4828                        this.view.setElement(t("<div class='fc-view fc-" + e + "-view' />").appendTo(this.contentEl)),
4829                        this.toolbarsManager.proxyCall("activateButton", e)),
4830                    this.view && (n && this.view.addForcedScroll(n), this.elementVisible() && (this.currentDate = this.view.setDate(this.currentDate))),
4831                    i && this.thawContentHeight(),
4832                    this.ignoreWindowResize--;
4833            },
4834            clearView: function () {
4835                this.toolbarsManager.proxyCall("deactivateButton", this.view.type), this.view.removeElement(), (this.view = null);
4836            },
4837            reinitView: function () {
4838                this.ignoreWindowResize++, this.freezeContentHeight();
4839                var t = this.view.type,
4840                    e = this.view.queryScroll();
4841                this.clearView(), this.calcSize(), this.renderView(t, e), this.thawContentHeight(), this.ignoreWindowResize--;
4842            },
4843            getSuggestedViewHeight: function () {
4844                return null === this.suggestedViewHeight && this.calcSize(), this.suggestedViewHeight;
4845            },
4846            isHeightAuto: function () {
4847                return "auto" === this.opt("contentHeight") || "auto" === this.opt("height");
4848            },
4849            updateSize: function (t) {
4850                if (this.elementVisible()) return t && this._calcSize(), this.ignoreWindowResize++, this.view.updateSize(!0), this.ignoreWindowResize--, !0;
4851            },
4852            calcSize: function () {
4853                this.elementVisible() && this._calcSize();
4854            },
4855            _calcSize: function () {
4856                var t = this.opt("contentHeight"),
4857                    e = this.opt("height");
4858                this.suggestedViewHeight =
4859                    "number" == typeof t
4860                        ? t
4861                        : "function" == typeof t
4862                        ? t()
4863                        : "number" == typeof e
4864                        ? e - this.queryToolbarsHeight()
4865                        : "function" == typeof e
4866                        ? e() - this.queryToolbarsHeight()
4867                        : "parent" === e
4868                        ? this.el.parent().height() - this.queryToolbarsHeight()
4869                        : Math.round(this.contentEl.width() / Math.max(this.opt("aspectRatio"), 0.5));
4870            },
4871            windowResize: function (t) {
4872                !this.ignoreWindowResize && t.target === window && this.view.renderRange && this.updateSize(!0) && this.view.publiclyTrigger("windowResize", this.el[0]);
4873            },
4874            freezeContentHeight: function () {
4875                this.contentEl.css({ width: "100%", height: this.contentEl.height(), overflow: "hidden" });
4876            },
4877            thawContentHeight: function () {
4878                this.contentEl.css({ width: "", height: "", overflow: "" });
4879            },
4880        }),
4881        Re.mixin({
4882            header: null,
4883            footer: null,
4884            toolbarsManager: null,
4885            initToolbars: function () {
4886                (this.header = new Wt(this, this.computeHeaderOptions())), (this.footer = new Wt(this, this.computeFooterOptions())), (this.toolbarsManager = new _t([this.header, this.footer]));
4887            },
4888            computeHeaderOptions: function () {
4889                return { extraClasses: "fc-header-toolbar", layout: this.opt("header") };
4890            },
4891            computeFooterOptions: function () {
4892                return { extraClasses: "fc-footer-toolbar", layout: this.opt("footer") };
4893            },
4894            renderHeader: function () {
4895                var t = this.header;
4896                t.setToolbarOptions(this.computeHeaderOptions()), t.render(), t.el && this.el.prepend(t.el);
4897            },
4898            renderFooter: function () {
4899                var t = this.footer;
4900                t.setToolbarOptions(this.computeFooterOptions()), t.render(), t.el && this.el.append(t.el);
4901            },
4902            setToolbarsTitle: function (t) {
4903                this.toolbarsManager.proxyCall("updateTitle", t);
4904            },
4905            updateToolbarButtons: function () {
4906                var t = this.getNow(),
4907                    e = this.view,
4908                    n = e.buildDateProfile(t),
4909                    i = e.buildPrevDateProfile(this.currentDate),
4910                    r = e.buildNextDateProfile(this.currentDate);
4911                this.toolbarsManager.proxyCall(n.isValid && !Z(t, e.currentRange) ? "enableButton" : "disableButton", "today"),
4912                    this.toolbarsManager.proxyCall(i.isValid ? "enableButton" : "disableButton", "prev"),
4913                    this.toolbarsManager.proxyCall(r.isValid ? "enableButton" : "disableButton", "next");
4914            },
4915            queryToolbarsHeight: function () {
4916                return this.toolbarsManager.items.reduce(function (t, e) {
4917                    return t + (e.el ? e.el.outerHeight(!0) : 0);
4918                }, 0);
4919            },
4920        }),
4921        (Re.defaults = {
4922            titleRangeSeparator: " – ",
4923            monthYearFormat: "MMMM YYYY",
4924            defaultTimedEventDuration: "02:00:00",
4925            defaultAllDayEventDuration: { days: 1 },
4926            forceEventDuration: !1,
4927            nextDayThreshold: "09:00:00",
4928            defaultView: "month",
4929            aspectRatio: 1.35,
4930            header: { left: "title", center: "", right: "today prev,next" },
4931            weekends: !0,
4932            weekNumbers: !1,
4933            weekNumberTitle: "W",
4934            weekNumberCalculation: "local",
4935            scrollTime: "06:00:00",
4936            minTime: "00:00:00",
4937            maxTime: "24:00:00",
4938            showNonCurrentDates: !0,
4939            lazyFetching: !0,
4940            startParam: "start",
4941            endParam: "end",
4942            timezoneParam: "timezone",
4943            timezone: !1,
4944            isRTL: !1,
4945            buttonText: { prev: "prev", next: "next", prevYear: "prev year", nextYear: "next year", year: "year", today: "today", month: "month", week: "week", day: "day" },
4946            buttonIcons: { prev: "left-single-arrow", next: "right-single-arrow", prevYear: "left-double-arrow", nextYear: "right-double-arrow" },
4947            allDayText: "all-day",
4948            theme: !1,
4949            themeButtonIcons: { prev: "circle-triangle-w", next: "circle-triangle-e", prevYear: "seek-prev", nextYear: "seek-next" },
4950            dragOpacity: 0.75,
4951            dragRevertDuration: 500,
4952            dragScroll: !0,
4953            unselectAuto: !0,
4954            dropAccept: "*",
4955            eventOrder: "title",
4956            eventLimit: !1,
4957            eventLimitText: "more",
4958            eventLimitClick: "popover",
4959            dayPopoverFormat: "LL",
4960            handleWindowResize: !0,
4961            windowResizeDelay: 100,
4962            longPressDelay: 1e3,
4963        }),
4964        (Re.englishDefaults = { dayPopoverFormat: "dddd, MMMM D" }),
4965        (Re.rtlDefaults = {
4966            header: { left: "next,prev today", center: "", right: "title" },
4967            buttonIcons: { prev: "right-single-arrow", next: "left-single-arrow", prevYear: "right-double-arrow", nextYear: "left-double-arrow" },
4968            themeButtonIcons: { prev: "circle-triangle-e", next: "circle-triangle-w", nextYear: "seek-prev", prevYear: "seek-next" },
4969        });
4970    var xe = (Zt.locales = {});
4971    (Zt.datepickerLocale = function (e, n, i) {
4972        var r = xe[e] || (xe[e] = {});
4973        (r.isRTL = i.isRTL),
4974            (r.weekNumberTitle = i.weekHeader),
4975            t.each(Ie, function (t, e) {
4976                r[t] = e(i);
4977            }),
4978            t.datepicker && ((t.datepicker.regional[n] = t.datepicker.regional[e] = i), (t.datepicker.regional.en = t.datepicker.regional[""]), t.datepicker.setDefaults(i));
4979    }),
4980        (Zt.locale = function (e, i) {
4981            var r, s;
4982            (r = xe[e] || (xe[e] = {})),
4983                i && (r = xe[e] = n([r, i])),
4984                (s = qt(e)),
4985                t.each(ke, function (t, e) {
4986                    null == r[t] && (r[t] = e(s, r));
4987                }),
4988                (Re.defaults.locale = e);
4989        });
4990    var Ie = {
4991            buttonText: function (t) {
4992                return { prev: ct(t.prevText), next: ct(t.nextText), today: ct(t.currentText) };
4993            },
4994            monthYearFormat: function (t) {
4995                return t.showMonthAfterYear ? "YYYY[" + t.yearSuffix + "] MMMM" : "MMMM YYYY[" + t.yearSuffix + "]";
4996            },
4997        },
4998        ke = {
4999            dayOfMonthFormat: function (t, e) {
5000                var n = t.longDateFormat("l");
5001                return (n = n.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g, "")), e.isRTL ? (n += " ddd") : (n = "ddd " + n), n;
5002            },
5003            mediumTimeFormat: function (t) {
5004                return t.longDateFormat("LT").replace(/\s*a$/i, "a");
5005            },
5006            smallTimeFormat: function (t) {
5007                return t
5008                    .longDateFormat("LT")
5009                    .replace(":mm", "(:mm)")
5010                    .replace(/(\Wmm)$/, "($1)")
5011                    .replace(/\s*a$/i, "a");
5012            },
5013            extraSmallTimeFormat: function (t) {
5014                return t
5015                    .longDateFormat("LT")
5016                    .replace(":mm", "(:mm)")
5017                    .replace(/(\Wmm)$/, "($1)")
5018                    .replace(/\s*a$/i, "t");
5019            },
5020            hourFormat: function (t) {
5021                return t
5022                    .longDateFormat("LT")
5023                    .replace(":mm", "")
5024                    .replace(/(\Wmm)$/, "")
5025                    .replace(/\s*a$/i, "a");
5026            },
5027            noMeridiemTimeFormat: function (t) {
5028                return t.longDateFormat("LT").replace(/\s*a$/i, "");
5029            },
5030        },
5031        Me = {
5032            smallDayDateFormat: function (t) {
5033                return t.isRTL ? "D dd" : "dd D";
5034            },
5035            weekFormat: function (t) {
5036                return t.isRTL ? "w[ " + t.weekNumberTitle + "]" : "[" + t.weekNumberTitle + " ]w";
5037            },
5038            smallWeekFormat: function (t) {
5039                return t.isRTL ? "w[" + t.weekNumberTitle + "]" : "[" + t.weekNumberTitle + "]w";
5040            },
5041        };
5042    Zt.locale("en", Re.englishDefaults), (Zt.sourceNormalizers = []), (Zt.sourceFetchers = []);
5043    var Be = { dataType: "json", cache: !1 },
5044        Le = 1;
5045    (Re.prototype.mutateSeg = function (t, e) {
5046        return this.mutateEvent(t.event, e);
5047    }),
5048        (Re.prototype.normalizeEvent = function (t) {}),
5049        (Re.prototype.spanContainsSpan = function (t, e) {
5050            var n = t.start.clone().stripZone(),
5051                i = this.getEventEnd(t).stripZone();
5052            return e.start >= n && e.end <= i;
5053        }),
5054        (Re.prototype.getPeerEvents = function (t, e) {
5055            var n,
5056                i,
5057                r = this.getEventCache(),
5058                s = [];
5059            for (n = 0; n < r.length; n++) (i = r[n]), (e && e._id === i._id) || s.push(i);
5060            return s;
5061        }),
5062        (Re.prototype.isEventSpanAllowed = function (t, e) {
5063            var n = e.source || {},
5064                i = this.opt("eventAllow"),
5065                r = ut(e.constraint, n.constraint, this.opt("eventConstraint")),
5066                s = ut(e.overlap, n.overlap, this.opt("eventOverlap"));
5067            return this.isSpanAllowed(t, r, s, e) && (!i || !1 !== i(t, e));
5068        }),
5069        (Re.prototype.isExternalSpanAllowed = function (e, n, i) {
5070            var r, s;
5071            return i && ((r = t.extend({}, i, n)), (s = this.expandEvent(this.buildEventFromInput(r))[0])), s ? this.isEventSpanAllowed(e, s) : this.isSelectionSpanAllowed(e);
5072        }),
5073        (Re.prototype.isSelectionSpanAllowed = function (t) {
5074            var e = this.opt("selectAllow");
5075            return this.isSpanAllowed(t, this.opt("selectConstraint"), this.opt("selectOverlap")) && (!e || !1 !== e(t));
5076        }),
5077        (Re.prototype.isSpanAllowed = function (t, e, n, i) {
5078            var r, s, o, a, l, u;
5079            if (null != e && (r = this.constraintToEvents(e))) {
5080                for (s = !1, a = 0; a < r.length; a++)
5081                    if (this.spanContainsSpan(r[a], t)) {
5082                        s = !0;
5083                        break;
5084                    }
5085                if (!s) return !1;
5086            }
5087            for (o = this.getPeerEvents(t, i), a = 0; a < o.length; a++)
5088                if (((l = o[a]), this.eventIntersectsRange(l, t))) {
5089                    if (!1 === n) return !1;
5090                    if ("function" == typeof n && !n(l, i)) return !1;
5091                    if (i) {
5092                        if (!1 === (u = ut(l.overlap, (l.source || {}).overlap))) return !1;
5093                        if ("function" == typeof u && !u(i, l)) return !1;
5094                    }
5095                }
5096            return !0;
5097        }),
5098        (Re.prototype.constraintToEvents = function (t) {
5099            return "businessHours" === t ? this.getCurrentBusinessHourEvents() : "object" == typeof t ? (null != t.start ? this.expandEvent(this.buildEventFromInput(t)) : null) : this.clientEvents(t);
5100        }),
5101        (Re.prototype.eventIntersectsRange = function (t, e) {
5102            var n = t.start.clone().stripZone(),
5103                i = this.getEventEnd(t).stripZone();
5104            return e.start < i && e.end > n;
5105        });
5106    var Ne = { id: "_fcBusinessHours", start: "09:00", end: "17:00", dow: [1, 2, 3, 4, 5], rendering: "inverse-background" };
5107    (Re.prototype.getCurrentBusinessHourEvents = function (t) {
5108        return this.computeBusinessHourEvents(t, this.opt("businessHours"));
5109    }),
5110        (Re.prototype.computeBusinessHourEvents = function (e, n) {
5111            return !0 === n ? this.expandBusinessHourEvents(e, [{}]) : t.isPlainObject(n) ? this.expandBusinessHourEvents(e, [n]) : t.isArray(n) ? this.expandBusinessHourEvents(e, n, !0) : [];
5112        }),
5113        (Re.prototype.expandBusinessHourEvents = function (e, n, i) {
5114            var r,
5115                s,
5116                o = this.getView(),
5117                a = [];
5118            for (r = 0; r < n.length; r++)
5119                (s = n[r]), (i && !s.dow) || ((s = t.extend({}, Ne, s)), e && ((s.start = null), (s.end = null)), a.push.apply(a, this.expandEvent(this.buildEventFromInput(s), o.activeRange.start, o.activeRange.end)));
5120            return a;
5121        });
5122    var ze = (Zt.BasicView = Ce.extend({
5123            scroller: null,
5124            dayGridClass: De,
5125            dayGrid: null,
5126            dayNumbersVisible: !1,
5127            colWeekNumbersVisible: !1,
5128            cellWeekNumbersVisible: !1,
5129            weekNumberWidth: null,
5130            headContainerEl: null,
5131            headRowEl: null,
5132            initialize: function () {
5133                (this.dayGrid = this.instantiateDayGrid()), (this.scroller = new He({ overflowX: "hidden", overflowY: "auto" }));
5134            },
5135            instantiateDayGrid: function () {
5136                return new (this.dayGridClass.extend(Fe))(this);
5137            },
5138            buildRenderRange: function (t, e) {
5139                var n = Ce.prototype.buildRenderRange.apply(this, arguments);
5140                return /^(year|month)$/.test(e) && (n.start.startOf("week"), n.end.weekday() && n.end.add(1, "week").startOf("week")), this.trimHiddenDays(n);
5141            },
5142            renderDates: function () {
5143                (this.dayGrid.breakOnWeeks = /year|month|week/.test(this.currentRangeUnit)),
5144                    this.dayGrid.setRange(this.renderRange),
5145                    (this.dayNumbersVisible = this.dayGrid.rowCnt > 1),
5146                    this.opt("weekNumbers") && (this.opt("weekNumbersWithinDays") ? ((this.cellWeekNumbersVisible = !0), (this.colWeekNumbersVisible = !1)) : ((this.cellWeekNumbersVisible = !1), (this.colWeekNumbersVisible = !0))),
5147                    (this.dayGrid.numbersVisible = this.dayNumbersVisible || this.cellWeekNumbersVisible || this.colWeekNumbersVisible),
5148                    this.el.addClass("fc-basic-view").html(this.renderSkeletonHtml()),
5149                    this.renderHead(),
5150                    this.scroller.render();
5151                var e = this.scroller.el.addClass("fc-day-grid-container"),
5152                    n = t('<div class="fc-day-grid" />').appendTo(e);
5153                this.el.find(".fc-body > tr > td").append(e), this.dayGrid.setElement(n), this.dayGrid.renderDates(this.hasRigidRows());
5154            },
5155            renderHead: function () {
5156                (this.headContainerEl = this.el.find(".fc-head-container").html(this.dayGrid.renderHeadHtml())), (this.headRowEl = this.headContainerEl.find(".fc-row"));
5157            },
5158            unrenderDates: function () {
5159                this.dayGrid.unrenderDates(), this.dayGrid.removeElement(), this.scroller.destroy();
5160            },
5161            renderBusinessHours: function () {
5162                this.dayGrid.renderBusinessHours();
5163            },
5164            unrenderBusinessHours: function () {
5165                this.dayGrid.unrenderBusinessHours();
5166            },
5167            renderSkeletonHtml: function () {
5168                return '<table><thead class="fc-head"><tr><td class="fc-head-container ' + this.widgetHeaderClass + '"></td></tr></thead><tbody class="fc-body"><tr><td class="' + this.widgetContentClass + '"></td></tr></tbody></table>';
5169            },
5170            weekNumberStyleAttr: function () {
5171                return null !== this.weekNumberWidth ? 'style="width:' + this.weekNumberWidth + 'px"' : "";
5172            },
5173            hasRigidRows: function () {
5174                var t = this.opt("eventLimit");
5175                return t && "number" != typeof t;
5176            },
5177            updateWidth: function () {
5178                this.colWeekNumbersVisible && (this.weekNumberWidth = u(this.el.find(".fc-week-number")));
5179            },
5180            setHeight: function (t, e) {
5181                var n,
5182                    s,
5183                    o = this.opt("eventLimit");
5184                this.scroller.clear(),
5185                    r(this.headRowEl),
5186                    this.dayGrid.removeSegPopover(),
5187                    o && "number" == typeof o && this.dayGrid.limitRows(o),
5188                    (n = this.computeScrollerHeight(t)),
5189                    this.setGridHeight(n, e),
5190                    o && "number" != typeof o && this.dayGrid.limitRows(o),
5191                    e || (this.scroller.setHeight(n), (s = this.scroller.getScrollbarWidths()), (s.left || s.right) && (i(this.headRowEl, s), (n = this.computeScrollerHeight(t)), this.scroller.setHeight(n)), this.scroller.lockOverflow(s));
5192            },
5193            computeScrollerHeight: function (t) {
5194                return t - h(this.el, this.scroller.el);
5195            },
5196            setGridHeight: function (t, e) {
5197                e ? l(this.dayGrid.rowEls) : a(this.dayGrid.rowEls, t, !0);
5198            },
5199            computeInitialDateScroll: function () {
5200                return { top: 0 };
5201            },
5202            queryDateScroll: function () {
5203                return { top: this.scroller.getScrollTop() };
5204            },
5205            applyDateScroll: function (t) {
5206                void 0 !== t.top && this.scroller.setScrollTop(t.top);
5207            },
5208            hitsNeeded: function () {
5209                this.dayGrid.hitsNeeded();
5210            },
5211            hitsNotNeeded: function () {
5212                this.dayGrid.hitsNotNeeded();
5213            },
5214            prepareHits: function () {
5215                this.dayGrid.prepareHits();
5216            },
5217            releaseHits: function () {
5218                this.dayGrid.releaseHits();
5219            },
5220            queryHit: function (t, e) {
5221                return this.dayGrid.queryHit(t, e);
5222            },
5223            getHitSpan: function (t) {
5224                return this.dayGrid.getHitSpan(t);
5225            },
5226            getHitEl: function (t) {
5227                return this.dayGrid.getHitEl(t);
5228            },
5229            renderEvents: function (t) {
5230                this.dayGrid.renderEvents(t), this.updateHeight();
5231            },
5232            getEventSegs: function () {
5233                return this.dayGrid.getEventSegs();
5234            },
5235            unrenderEvents: function () {
5236                this.dayGrid.unrenderEvents();
5237            },
5238            renderDrag: function (t, e) {
5239                return this.dayGrid.renderDrag(t, e);
5240            },
5241            unrenderDrag: function () {
5242                this.dayGrid.unrenderDrag();
5243            },
5244            renderSelection: function (t) {
5245                this.dayGrid.renderSelection(t);
5246            },
5247            unrenderSelection: function () {
5248                this.dayGrid.unrenderSelection();
5249            },
5250        })),
5251        Fe = {
5252            renderHeadIntroHtml: function () {
5253                var t = this.view;
5254                return t.colWeekNumbersVisible ? '<th class="fc-week-number ' + t.widgetHeaderClass + '" ' + t.weekNumberStyleAttr() + "><span>" + ht(t.opt("weekNumberTitle")) + "</span></th>" : "";
5255            },
5256            renderNumberIntroHtml: function (t) {
5257                var e = this.view,
5258                    n = this.getCellDate(t, 0);
5259                return e.colWeekNumbersVisible ? '<td class="fc-week-number" ' + e.weekNumberStyleAttr() + ">" + e.buildGotoAnchorHtml({ date: n, type: "week", forceOff: 1 === this.colCnt }, n.format("w")) + "</td>" : "";
5260            },
5261            renderBgIntroHtml: function () {
5262                var t = this.view;
5263                return t.colWeekNumbersVisible ? '<td class="fc-week-number ' + t.widgetContentClass + '" ' + t.weekNumberStyleAttr() + "></td>" : "";
5264            },
5265            renderIntroHtml: function () {
5266                var t = this.view;
5267                return t.colWeekNumbersVisible ? '<td class="fc-week-number" ' + t.weekNumberStyleAttr() + "></td>" : "";
5268            },
5269        },
5270        Ae = (Zt.MonthView = ze.extend({
5271            buildRenderRange: function () {
5272                var t,
5273                    e = ze.prototype.buildRenderRange.apply(this, arguments);
5274                return this.isFixedWeeks() && ((t = Math.ceil(e.end.diff(e.start, "weeks", !0))), e.end.add(6 - t, "weeks")), e;
5275            },
5276            setGridHeight: function (t, e) {
5277                e && (t *= this.rowCnt / 6), a(this.dayGrid.rowEls, t, !e);
5278            },
5279            isFixedWeeks: function () {
5280                return this.opt("fixedWeekCount");
5281            },
5282        }));
5283    ($t.basic = { class: ze }), ($t.basicDay = { type: "basic", duration: { days: 1 } }), ($t.basicWeek = { type: "basic", duration: { weeks: 1 } }), ($t.month = { class: Ae, duration: { months: 1 }, defaults: { fixedWeekCount: !0 } });
5284    var Ge = (Zt.AgendaView = Ce.extend({
5285            scroller: null,
5286            timeGridClass: Te,
5287            timeGrid: null,
5288            dayGridClass: De,
5289            dayGrid: null,
5290            axisWidth: null,
5291            headContainerEl: null,
5292            noScrollRowEls: null,
5293            bottomRuleEl: null,
5294            usesMinMaxTime: !0,
5295            initialize: function () {
5296                (this.timeGrid = this.instantiateTimeGrid()), this.opt("allDaySlot") && (this.dayGrid = this.instantiateDayGrid()), (this.scroller = new He({ overflowX: "hidden", overflowY: "auto" }));
5297            },
5298            instantiateTimeGrid: function () {
5299                return new (this.timeGridClass.extend(Ve))(this);
5300            },
5301            instantiateDayGrid: function () {
5302                return new (this.dayGridClass.extend(Oe))(this);
5303            },
5304            renderDates: function () {
5305                this.timeGrid.setRange(this.renderRange), this.dayGrid && this.dayGrid.setRange(this.renderRange), this.el.addClass("fc-agenda-view").html(this.renderSkeletonHtml()), this.renderHead(), this.scroller.render();
5306                var e = this.scroller.el.addClass("fc-time-grid-container"),
5307                    n = t('<div class="fc-time-grid" />').appendTo(e);
5308                this.el.find(".fc-body > tr > td").append(e),
5309                    this.timeGrid.setElement(n),
5310                    this.timeGrid.renderDates(),
5311                    (this.bottomRuleEl = t('<hr class="fc-divider ' + this.widgetHeaderClass + '"/>').appendTo(this.timeGrid.el)),
5312                    this.dayGrid && (this.dayGrid.setElement(this.el.find(".fc-day-grid")), this.dayGrid.renderDates(), (this.dayGrid.bottomCoordPadding = this.dayGrid.el.next("hr").outerHeight())),
5313                    (this.noScrollRowEls = this.el.find(".fc-row:not(.fc-scroller *)"));
5314            },
5315            renderHead: function () {
5316                this.headContainerEl = this.el.find(".fc-head-container").html(this.timeGrid.renderHeadHtml());
5317            },
5318            unrenderDates: function () {
5319                this.timeGrid.unrenderDates(), this.timeGrid.removeElement(), this.dayGrid && (this.dayGrid.unrenderDates(), this.dayGrid.removeElement()), this.scroller.destroy();
5320            },
5321            renderSkeletonHtml: function () {
5322                return (
5323                    '<table><thead class="fc-head"><tr><td class="fc-head-container ' +
5324                    this.widgetHeaderClass +
5325                    '"></td></tr></thead><tbody class="fc-body"><tr><td class="' +
5326                    this.widgetContentClass +
5327                    '">' +
5328                    (this.dayGrid ? '<div class="fc-day-grid"/><hr class="fc-divider ' + this.widgetHeaderClass + '"/>' : "") +
5329                    "</td></tr></tbody></table>"
5330                );
5331            },
5332            axisStyleAttr: function () {
5333                return null !== this.axisWidth ? 'style="width:' + this.axisWidth + 'px"' : "";
5334            },
5335            renderBusinessHours: function () {
5336                this.timeGrid.renderBusinessHours(), this.dayGrid && this.dayGrid.renderBusinessHours();
5337            },
5338            unrenderBusinessHours: function () {
5339                this.timeGrid.unrenderBusinessHours(), this.dayGrid && this.dayGrid.unrenderBusinessHours();
5340            },
5341            getNowIndicatorUnit: function () {
5342                return this.timeGrid.getNowIndicatorUnit();
5343            },
5344            renderNowIndicator: function (t) {
5345                this.timeGrid.renderNowIndicator(t);
5346            },
5347            unrenderNowIndicator: function () {
5348                this.timeGrid.unrenderNowIndicator();
5349            },
5350            updateSize: function (t) {
5351                this.timeGrid.updateSize(t), Ce.prototype.updateSize.call(this, t);
5352            },
5353            updateWidth: function () {
5354                this.axisWidth = u(this.el.find(".fc-axis"));
5355            },
5356            setHeight: function (t, e) {
5357                var n, s, o;
5358                this.bottomRuleEl.hide(),
5359                    this.scroller.clear(),
5360                    r(this.noScrollRowEls),
5361                    this.dayGrid && (this.dayGrid.removeSegPopover(), (n = this.opt("eventLimit")), n && "number" != typeof n && (n = Pe), n && this.dayGrid.limitRows(n)),
5362                    e ||
5363                        ((s = this.computeScrollerHeight(t)),
5364                        this.scroller.setHeight(s),
5365                        (o = this.scroller.getScrollbarWidths()),
5366                        (o.left || o.right) && (i(this.noScrollRowEls, o), (s = this.computeScrollerHeight(t)), this.scroller.setHeight(s)),
5367                        this.scroller.lockOverflow(o),
5368                        this.timeGrid.getTotalSlatHeight() < s && this.bottomRuleEl.show());
5369            },
5370            computeScrollerHeight: function (t) {
5371                return t - h(this.el, this.scroller.el);
5372            },
5373            computeInitialDateScroll: function () {
5374                var t = e.duration(this.opt("scrollTime")),
5375                    n = this.timeGrid.computeTimeTop(t);
5376                return (n = Math.ceil(n)), n && n++, { top: n };
5377            },
5378            queryDateScroll: function () {
5379                return { top: this.scroller.getScrollTop() };
5380            },
5381            applyDateScroll: function (t) {
5382                void 0 !== t.top && this.scroller.setScrollTop(t.top);
5383            },
5384            hitsNeeded: function () {
5385                this.timeGrid.hitsNeeded(), this.dayGrid && this.dayGrid.hitsNeeded();
5386            },
5387            hitsNotNeeded: function () {
5388                this.timeGrid.hitsNotNeeded(), this.dayGrid && this.dayGrid.hitsNotNeeded();
5389            },
5390            prepareHits: function () {
5391                this.timeGrid.prepareHits(), this.dayGrid && this.dayGrid.prepareHits();
5392            },
5393            releaseHits: function () {
5394                this.timeGrid.releaseHits(), this.dayGrid && this.dayGrid.releaseHits();
5395            },
5396            queryHit: function (t, e) {
5397                var n = this.timeGrid.queryHit(t, e);
5398                return !n && this.dayGrid && (n = this.dayGrid.queryHit(t, e)), n;
5399            },
5400            getHitSpan: function (t) {
5401                return t.component.getHitSpan(t);
5402            },
5403            getHitEl: function (t) {
5404                return t.component.getHitEl(t);
5405            },
5406            renderEvents: function (t) {
5407                var e,
5408                    n = [],
5409                    i = [];
5410                for (e = 0; e < t.length; e++) t[e].allDay ? n.push(t[e]) : i.push(t[e]);
5411                this.timeGrid.renderEvents(i), this.dayGrid && this.dayGrid.renderEvents(n), this.updateHeight();
5412            },
5413            getEventSegs: function () {
5414                return this.timeGrid.getEventSegs().concat(this.dayGrid ? this.dayGrid.getEventSegs() : []);
5415            },
5416            unrenderEvents: function () {
5417                this.timeGrid.unrenderEvents(), this.dayGrid && this.dayGrid.unrenderEvents();
5418            },
5419            renderDrag: function (t, e) {
5420                return t.start.hasTime() ? this.timeGrid.renderDrag(t, e) : this.dayGrid ? this.dayGrid.renderDrag(t, e) : void 0;
5421            },
5422            unrenderDrag: function () {
5423                this.timeGrid.unrenderDrag(), this.dayGrid && this.dayGrid.unrenderDrag();
5424            },
5425            renderSelection: function (t) {
5426                t.start.hasTime() || t.end.hasTime() ? this.timeGrid.renderSelection(t) : this.dayGrid && this.dayGrid.renderSelection(t);
5427            },
5428            unrenderSelection: function () {
5429                this.timeGrid.unrenderSelection(), this.dayGrid && this.dayGrid.unrenderSelection();
5430            },
5431        })),
5432        Ve = {
5433            renderHeadIntroHtml: function () {
5434                var t,
5435                    e = this.view;
5436                return e.opt("weekNumbers")
5437                    ? ((t = this.start.format(e.opt("smallWeekFormat"))),
5438                      '<th class="fc-axis fc-week-number ' + e.widgetHeaderClass + '" ' + e.axisStyleAttr() + ">" + e.buildGotoAnchorHtml({ date: this.start, type: "week", forceOff: this.colCnt > 1 }, ht(t)) + "</th>")
5439                    : '<th class="fc-axis ' + e.widgetHeaderClass + '" ' + e.axisStyleAttr() + "></th>";
5440            },
5441            renderBgIntroHtml: function () {
5442                var t = this.view;
5443                return '<td class="fc-axis ' + t.widgetContentClass + '" ' + t.axisStyleAttr() + "></td>";
5444            },
5445            renderIntroHtml: function () {
5446                return '<td class="fc-axis" ' + this.view.axisStyleAttr() + "></td>";
5447            },
5448        },
5449        Oe = {
5450            renderBgIntroHtml: function () {
5451                var t = this.view;
5452                return '<td class="fc-axis ' + t.widgetContentClass + '" ' + t.axisStyleAttr() + "><span>" + t.getAllDayHtml() + "</span></td>";
5453            },
5454            renderIntroHtml: function () {
5455                return '<td class="fc-axis" ' + this.view.axisStyleAttr() + "></td>";
5456            },
5457        },
5458        Pe = 5,
5459        _e = [{ hours: 1 }, { minutes: 30 }, { minutes: 15 }, { seconds: 30 }, { seconds: 15 }];
5460    ($t.agenda = { class: Ge, defaults: { allDaySlot: !0, slotDuration: "00:30:00", slotEventOverlap: !0 } }), ($t.agendaDay = { type: "agenda", duration: { days: 1 } }), ($t.agendaWeek = { type: "agenda", duration: { weeks: 1 } });
5461    var We = Ce.extend({
5462            grid: null,
5463            scroller: null,
5464            initialize: function () {
5465                (this.grid = new Ye(this)), (this.scroller = new He({ overflowX: "hidden", overflowY: "auto" }));
5466            },
5467            renderSkeleton: function () {
5468                this.el.addClass("fc-list-view " + this.widgetContentClass), this.scroller.render(), this.scroller.el.appendTo(this.el), this.grid.setElement(this.scroller.scrollEl);
5469            },
5470            unrenderSkeleton: function () {
5471                this.scroller.destroy();
5472            },
5473            setHeight: function (t, e) {
5474                this.scroller.setHeight(this.computeScrollerHeight(t));
5475            },
5476            computeScrollerHeight: function (t) {
5477                return t - h(this.el, this.scroller.el);
5478            },
5479            renderDates: function () {
5480                this.grid.setRange(this.renderRange);
5481            },
5482            renderEvents: function (t) {
5483                this.grid.renderEvents(t);
5484            },
5485            unrenderEvents: function () {
5486                this.grid.unrenderEvents();
5487            },
5488            isEventResizable: function (t) {
5489                return !1;
5490            },
5491            isEventDraggable: function (t) {
5492                return !1;
5493            },
5494        }),
5495        Ye = be.extend({
5496            segSelector: ".fc-list-item",
5497            hasDayInteractions: !1,
5498            spanToSegs: function (t) {
5499                for (var e, n = this.view, i = n.renderRange.start.clone().time(0), r = 0, s = []; i < n.renderRange.end; )
5500                    if (((e = z(t, { start: i, end: i.clone().add(1, "day") })), e && ((e.dayIndex = r), s.push(e)), i.add(1, "day"), r++, e && !e.isEnd && t.end.hasTime() && t.end < i.clone().add(this.view.nextDayThreshold))) {
5501                        (e.end = t.end.clone()), (e.isEnd = !0);
5502                        break;
5503                    }
5504                return s;
5505            },
5506            computeEventTimeFormat: function () {
5507                return this.view.opt("mediumTimeFormat");
5508            },
5509            handleSegClick: function (e, n) {
5510                var i;
5511                be.prototype.handleSegClick.apply(this, arguments), t(n.target).closest("a[href]").length || ((i = e.event.url) && !n.isDefaultPrevented() && (window.location.href = i));
5512            },
5513            renderFgSegs: function (t) {
5514                return (t = this.renderFgSegEls(t)), t.length ? this.renderSegList(t) : this.renderEmptyMessage(), t;
5515            },
5516            renderEmptyMessage: function () {
5517                this.el.html('<div class="fc-list-empty-wrap2"><div class="fc-list-empty-wrap1"><div class="fc-list-empty">' + ht(this.view.opt("noEventsMessage")) + "</div></div></div>");
5518            },
5519            renderSegList: function (e) {
5520                var n,
5521                    i,
5522                    r,
5523                    s = this.groupSegsByDay(e),
5524                    o = t('<table class="fc-list-table"><tbody/></table>'),
5525                    a = o.find("tbody");
5526                for (n = 0; n < s.length; n++) if ((i = s[n])) for (a.append(this.dayHeaderHtml(this.view.renderRange.start.clone().add(n, "days"))), this.sortEventSegs(i), r = 0; r < i.length; r++) a.append(i[r].el);
5527                this.el.empty().append(o);
5528            },
5529            groupSegsByDay: function (t) {
5530                var e,
5531                    n,
5532                    i = [];
5533                for (e = 0; e < t.length; e++) (n = t[e]), (i[n.dayIndex] || (i[n.dayIndex] = [])).push(n);
5534                return i;
5535            },
5536            dayHeaderHtml: function (t) {
5537                var e = this.view,
5538                    n = e.opt("listDayFormat"),
5539                    i = e.opt("listDayAltFormat");
5540                return (
5541                    '<tr class="fc-list-heading" data-date="' +
5542                    t.format("YYYY-MM-DD") +
5543                    '"><td class="' +
5544                    e.widgetHeaderClass +
5545                    '" colspan="3">' +
5546                    (n ? e.buildGotoAnchorHtml(t, { class: "fc-list-heading-main" }, ht(t.format(n))) : "") +
5547                    (i ? e.buildGotoAnchorHtml(t, { class: "fc-list-heading-alt" }, ht(t.format(i))) : "") +
5548                    "</td></tr>"
5549                );
5550            },
5551            fgSegHtml: function (t) {
5552                var e,
5553                    n = this.view,
5554                    i = ["fc-list-item"].concat(this.getSegCustomClasses(t)),
5555                    r = this.getSegBackgroundColor(t),
5556                    s = t.event,
5557                    o = s.url;
5558                return (
5559                    (e = s.allDay ? n.getAllDayHtml() : n.isMultiDayEvent(s) ? (t.isStart || t.isEnd ? ht(this.getEventTimeText(t)) : n.getAllDayHtml()) : ht(this.getEventTimeText(s))),
5560                    o && i.push("fc-has-url"),
5561                    '<tr class="' +
5562                        i.join(" ") +
5563                        '">' +
5564                        (this.displayEventTime ? '<td class="fc-list-item-time ' + n.widgetContentClass + '">' + (e || "") + "</td>" : "") +
5565                        '<td class="fc-list-item-marker ' +
5566                        n.widgetContentClass +
5567                        '"><span class="fc-event-dot"' +
5568                        (r ? ' style="background-color:' + r + '"' : "") +
5569                        '></span></td><td class="fc-list-item-title ' +
5570                        n.widgetContentClass +
5571                        '"><a' +
5572                        (o ? ' href="' + ht(o) + '"' : "") +
5573                        ">" +
5574                        ht(t.event.title || "") +
5575                        "</a></td></tr>"
5576                );
5577            },
5578        });
5579    return (
5580        ($t.list = { class: We, buttonTextKey: "list", defaults: { buttonText: "list", listDayFormat: "LL", noEventsMessage: "No events to display" } }),
5581        ($t.listDay = { type: "list", duration: { days: 1 }, defaults: { listDayFormat: "dddd" } }),
5582        ($t.listWeek = { type: "list", duration: { weeks: 1 }, defaults: { listDayFormat: "dddd", listDayAltFormat: "LL" } }),
5583        ($t.listMonth = { type: "list", duration: { month: 1 }, defaults: { listDayAltFormat: "dddd" } }),
5584        ($t.listYear = { type: "list", duration: { year: 1 }, defaults: { listDayAltFormat: "dddd" } }),
5585        Zt
5586    );
5587});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.