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, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """).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> </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 || "") || " ") + "</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.