/
/
home
/
u523034047
/
domains
/
rakeshfilms.in
/
public_html
/
skw
/
js
Server: in-mum-web1112.main-hosting.eu (62.72.28.111)
You: 216.73.216.130
PHP 8.3.16
Dir:
/home/u523034047/domains/rakeshfilms.in/public_html/skw/js
Edit:
/home/u523034047/domains/rakeshfilms.in/public_html/skw/js/fullcalendar.min.js
/*! * FullCalendar v3.0.1 * Docs & License: http://fullcalendar.io/ * (c) 2016 Adam Shaw */ ! function(t) { "function" == typeof define && define.amd ? define(["jquery", "moment"], t) : "object" == typeof exports ? module.exports = t(require("jquery"), require("moment")) : t(jQuery, moment) }(function(t, e) { function n(t) { return q(t, qt) } function i(t, e) { 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 }) } function r(t) { t.css({ "margin-left": "", "margin-right": "", "border-left-width": "", "border-right-width": "" }) } function s() { t("body").addClass("fc-not-allowed") } function o() { t("body").removeClass("fc-not-allowed") } function l(e, n, i) { var r = Math.floor(n / e.length), s = Math.floor(n - r * (e.length - 1)), o = [], l = [], u = [], d = 0; a(e), e.each(function(n, i) { var a = n === e.length - 1 ? s : r, c = t(i).outerHeight(!0); c < a ? (o.push(i), l.push(c), u.push(t(i).height())) : d += c }), i && (n -= d, r = Math.floor(n / o.length), s = Math.floor(n - r * (o.length - 1))), t(o).each(function(e, n) { var i = e === o.length - 1 ? s : r, a = l[e], d = u[e], c = i - (a - d); a < i && t(n).height(c) }) } function a(t) { t.height("") } function u(e) { var n = 0; return e.find("> *").each(function(e, i) { var r = t(i).outerWidth(); r > n && (n = r) }), n++, e.width(n), n } function d(t, e) { var n, i = t.add(e); return i.css({ position: "relative", left: -1 }), n = t.outerHeight() - e.outerHeight(), i.css({ position: "", left: "" }), n } function c(e) { var n = e.css("position"), i = e.parents().filter(function() { var e = t(this); return /(auto|scroll)/.test(e.css("overflow") + e.css("overflow-y") + e.css("overflow-x")) }).eq(0); return "fixed" !== n && i.length ? i : t(e[0].ownerDocument || document) } function h(t, e) { var n = t.offset(), i = n.left - (e ? e.left : 0), r = n.top - (e ? e.top : 0); return { left: i, right: i + t.outerWidth(), top: r, bottom: r + t.outerHeight() } } function f(t, e) { var n = t.offset(), i = p(t), r = n.left + y(t, "border-left-width") + i.left - (e ? e.left : 0), s = n.top + y(t, "border-top-width") + i.top - (e ? e.top : 0); return { left: r, right: r + t[0].clientWidth, top: s, bottom: s + t[0].clientHeight } } function g(t, e) { var n = t.offset(), i = n.left + y(t, "border-left-width") + y(t, "padding-left") - (e ? e.left : 0), r = n.top + y(t, "border-top-width") + y(t, "padding-top") - (e ? e.top : 0); return { left: i, right: i + t.width(), top: r, bottom: r + t.height() } } function p(t) { var e = t.innerWidth() - t[0].clientWidth, n = { left: 0, right: 0, top: 0, bottom: t.innerHeight() - t[0].clientHeight }; return v() && "rtl" == t.css("direction") ? n.left = e : n.right = e, n } function v() { return null === Zt && (Zt = m()), Zt } function m() { var e = t("<div><div/></div>").css({ position: "absolute", top: -1e3, left: 0, border: 0, padding: 0, overflow: "scroll", direction: "rtl" }).appendTo("body"), n = e.children(), i = n.offset().left > e.offset().left; return e.remove(), i } function y(t, e) { return parseFloat(t.css(e)) || 0 } function S(t) { return 1 == t.which && !t.ctrlKey } function w(t) { if (void 0 !== t.pageX) return t.pageX; var e = t.originalEvent.touches; return e ? e[0].pageX : void 0 } function E(t) { if (void 0 !== t.pageY) return t.pageY; var e = t.originalEvent.touches; return e ? e[0].pageY : void 0 } function D(t) { return /^touch/.test(t.type) } function b(t) { t.addClass("fc-unselectable").on("selectstart", C) } function C(t) { t.preventDefault() } function H(t) { return !!window.addEventListener && (window.addEventListener("scroll", t, !0), !0) } function T(t) { return !!window.removeEventListener && (window.removeEventListener("scroll", t, !0), !0) } function x(t, e) { 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) }; return n.left < n.right && n.top < n.bottom && n } function R(t, e) { return { left: Math.min(Math.max(t.left, e.left), e.right), top: Math.min(Math.max(t.top, e.top), e.bottom) } } function I(t) { return { left: (t.left + t.right) / 2, top: (t.top + t.bottom) / 2 } } function k(t, e) { return { left: t.left - e.left, top: t.top - e.top } } function M(e) { var n, i, r = [], s = []; 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++) 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 }); return r } function L(t, e, n) { var i, r; for (i = 0; i < n.length; i++) if (r = B(t, e, n[i])) return r; return 0 } function B(t, e, n) { return n.func ? n.func(t, e) : z(t[n.field], e[n.field]) * (n.order || 1) } function z(e, n) { 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 } function F(t, e) { var n, i, r, s, o = t.start, l = t.end, a = e.start, u = e.end; if (l > a && o < u) return o >= a ? (n = o.clone(), r = !0) : (n = a.clone(), r = !1), l <= u ? (i = l.clone(), s = !0) : (i = u.clone(), s = !1), { start: n, end: i, isStart: r, isEnd: s } } function N(t, n) { return e.duration({ days: t.clone().stripTime().diff(n.clone().stripTime(), "days"), ms: t.time() - n.time() }) } function G(t, n) { return e.duration({ days: t.clone().stripTime().diff(n.clone().stripTime(), "days") }) } function A(t, n, i) { return e.duration(Math.round(t.diff(n, i, !0)), i) } function O(t, e) { var n, i, r; for (n = 0; n < Xt.length && (i = Xt[n], r = V(i, t, e), !(r >= 1 && ot(r))); n++); return i } function V(t, n, i) { return null != i ? i.diff(n, t, !0) : e.isDuration(n) ? n.as(t) : n.end.diff(n.start, t, !0) } function P(t, e, n) { var i; return W(n) ? (e - t) / n : (i = n.asMonths(), Math.abs(i) >= 1 && ot(i) ? e.diff(t, "months", !0) / i : e.diff(t, "days", !0) / n.asDays()) } function _(t, e) { var n, i; return W(t) || W(e) ? t / e : (n = t.asMonths(), i = e.asMonths(), Math.abs(n) >= 1 && ot(n) && Math.abs(i) >= 1 && ot(i) ? n / i : t.asDays() / e.asDays()) } function Y(t, n) { var i; return W(t) ? e.duration(t * n) : (i = t.asMonths(), Math.abs(i) >= 1 && ot(i) ? e.duration({ months: i * n }) : e.duration({ days: t.asDays() * n })) } function W(t) { return Boolean(t.hours() || t.minutes() || t.seconds() || t.milliseconds()) } function j(t) { return "[object Date]" === Object.prototype.toString.call(t) || t instanceof Date } function U(t) { return /^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t) } function q(t, e) { var n, i, r, s, o, l, a = {}; if (e) for (n = 0; n < e.length; n++) { for (i = e[n], r = [], s = t.length - 1; s >= 0; s--) if (o = t[s][i], "object" == typeof o) r.unshift(o); else if (void 0 !== o) { a[i] = o; break } r.length && (a[i] = q(r)) } for (n = t.length - 1; n >= 0; n--) { l = t[n]; for (i in l) i in a || (a[i] = l[i]) } return a } function Z(t) { var e = function() {}; return e.prototype = t, new e } function $(t, e) { for (var n in t) X(t, n) && (e[n] = t[n]) } function X(t, e) { return Kt.call(t, e) } function K(e) { return /undefined|null|boolean|number|string/.test(t.type(e)) } function Q(e, n, i) { if (t.isFunction(e) && (e = [e]), e) { var r, s; for (r = 0; r < e.length; r++) s = e[r].apply(n, i) || s; return s } } function J() { for (var t = 0; t < arguments.length; t++) if (void 0 !== arguments[t]) return arguments[t] } function tt(t) { return (t + "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """).replace(/\n/g, "<br />") } function et(t) { return t.replace(/&.*?;/g, "") } function nt(e) { var n = []; return t.each(e, function(t, e) { null != e && n.push(t + ":" + e) }), n.join(";") } function it(e) { var n = []; return t.each(e, function(t, e) { null != e && n.push(t + '="' + tt(e) + '"') }), n.join(" ") } function rt(t) { return t.charAt(0).toUpperCase() + t.slice(1) } function st(t, e) { return t - e } function ot(t) { return t % 1 === 0 } function lt(t, e) { var n = t[e]; return function() { return n.apply(t, arguments) } } function at(t, e, n) { var i, r, s, o, l, a = function() { var u = +new Date - o; u < e ? i = setTimeout(a, e - u) : (i = null, n || (l = t.apply(s, r), s = r = null)) }; return function() { s = this, r = arguments, o = +new Date; var u = n && !i; return i || (i = setTimeout(a, e)), u && (l = t.apply(s, r), s = r = null), l } } function ut(e, n) { return e && e.then && "resolved" !== e.state() ? n ? e.then(n) : void 0 : t.when(n()) } function dt(n, i, r) { var s, o, l, a, u = n[0], d = 1 == n.length && "string" == typeof u; return e.isMoment(u) || j(u) || void 0 === u ? a = e.apply(null, n) : (s = !1, o = !1, d ? Qt.test(u) ? (u += "-01", n = [u], s = !0, o = !0) : (l = Jt.exec(u)) && (s = !l[5], o = !0) : t.isArray(u) && (o = !0), a = i || s ? e.utc.apply(e, n) : e.apply(null, n), s ? (a._ambigTime = !0, a._ambigZone = !0) : r && (o ? a._ambigZone = !0 : d && a.utcOffset(u))), a._fullCalendar = !0, a } function ct(t, e) { return ee.format.call(t, e) } function ht(t, e) { return ft(t, yt(e)) } function ft(t, e) { var n, i = ""; for (n = 0; n < e.length; n++) i += gt(t, e[n]); return i } function gt(t, e) { var n, i; return "string" == typeof e ? e : (n = e.token) ? ie[n] ? ie[n](t) : ct(t, n) : e.maybe && (i = ft(t, e.maybe), i.match(/[1-9]/)) ? i : "" } function pt(t, e, n, i, r) { var s; return t = jt.moment.parseZone(t), e = jt.moment.parseZone(e), s = t.localeData(), n = s.longDateFormat(n) || n, i = i || " - ", vt(t, e, yt(n), i, r) } function vt(t, e, n, i, r) { var s, o, l, a, u = t.clone().stripZone(), d = e.clone().stripZone(), c = "", h = "", f = "", g = "", p = ""; for (o = 0; o < n.length && (s = mt(t, e, u, d, n[o]), s !== !1); o++) c += s; for (l = n.length - 1; l > o && (s = mt(t, e, u, d, n[l]), s !== !1); l--) h = s + h; for (a = o; a <= l; a++) f += gt(t, n[a]), g += gt(e, n[a]); return (f || g) && (p = r ? g + i + f : f + i + g), c + p + h } function mt(t, e, n, i, r) { var s, o; return "string" == typeof r ? r : !!((s = r.token) && (o = re[s.charAt(0)], o && n.isSame(i, o))) && ct(t, s) } function yt(t) { return t in se ? se[t] : se[t] = St(t) } function St(t) { for (var e, n = [], i = /\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g; e = i.exec(t);) e[1] ? n.push(e[1]) : e[2] ? n.push({ maybe: St(e[2]) }) : e[3] ? n.push({ token: e[3] }) : e[5] && n.push(e[5]); return n } function wt() {} function Et(t, e) { var n; return X(e, "constructor") && (n = e.constructor), "function" != typeof n && (n = e.constructor = function() { t.apply(this, arguments) }), n.prototype = Z(t.prototype), $(e, n.prototype), $(t, n), n } function Dt(t, e) { $(e, t.prototype) } function bt(t, e) { return !t && !e || !(!t || !e) && (t.component === e.component && Ct(t, e) && Ct(e, t)) } function Ct(t, e) { for (var n in t) if (!/^(component|left|right|top|bottom)$/.test(n) && t[n] !== e[n]) return !1; return !0 } function Ht(t) { return { start: t.start.clone(), end: t.end ? t.end.clone() : null, allDay: t.allDay } } function Tt(t) { var e = Rt(t); return "background" === e || "inverse-background" === e } function xt(t) { return "inverse-background" === Rt(t) } function Rt(t) { return J((t.source || {}).rendering, t.rendering) } function It(t) { var e, n, i = {}; for (e = 0; e < t.length; e++) n = t[e], (i[n._id] || (i[n._id] = [])).push(n); return i } function kt(t, e) { return t.start - e.start } function Mt(n) { var i, r, s, o, l = jt.dataAttrPrefix; return l && (l += "-"), i = n.data(l + "event") || null, 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), null == r && (r = n.data(l + "start")), null == r && (r = n.data(l + "time")), null == s && (s = n.data(l + "duration")), null == o && (o = n.data(l + "stick")), r = null != r ? e.duration(r) : null, s = null != s ? e.duration(s) : null, o = Boolean(o), { eventProps: i, startTime: r, duration: s, stick: o } } function Lt(t, e) { var n, i; for (n = 0; n < e.length; n++) if (i = e[n], i.leftCol <= t.rightCol && i.rightCol >= t.leftCol) return !0; return !1 } function Bt(t, e) { return t.leftCol - e.leftCol } function zt(t) { var e, n, i, r = []; for (e = 0; e < t.length; e++) { for (n = t[e], i = 0; i < r.length && Gt(n, r[i]).length; i++); n.level = i, (r[i] || (r[i] = [])).push(n) } return r } function Ft(t) { var e, n, i, r, s; 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++) Gt(r, t[s], r.forwardSegs) } function Nt(t) { var e, n, i = t.forwardSegs, r = 0; if (void 0 === t.forwardPressure) { for (e = 0; e < i.length; e++) n = i[e], Nt(n), r = Math.max(r, 1 + n.forwardPressure); t.forwardPressure = r } } function Gt(t, e, n) { n = n || []; for (var i = 0; i < e.length; i++) At(t, e[i]) && n.push(e[i]); return n } function At(t, e) { return t.bottom > e.top && t.top < e.bottom } function Ot(n, i) { function r(t) { t._locale = U } function s() { $ ? u() && (g(), d()) : o() } function o() { n.addClass("fc"), n.on("click.fc", "a[data-goto]", function(e) { var n = t(this), i = n.data("goto"), r = j.moment(i.date), s = i.type, o = K.opt("navLink" + rt(s) + "Click"); "function" == typeof o ? o(r, e) : ("string" == typeof o && (s = o), N(r, s)) }), j.bindOption("theme", function(t) { X = t ? "ui" : "fc", n.toggleClass("ui-widget", t), n.toggleClass("fc-unthemed", !t) }), j.bindOptions(["isRTL", "locale"], function(t) { n.toggleClass("fc-ltr", !t), n.toggleClass("fc-rtl", t) }), $ = t("<div class='fc-view-container'/>").prependTo(n), q = j.header = new _t(j), l(), d(j.options.defaultView), j.options.handleWindowResize && (J = at(m, j.options.windowResizeDelay), t(window).resize(J)) } function l() { q.render(), q.el && n.prepend(q.el) } function a() { K && K.removeElement(), q.removeElement(), $.remove(), n.removeClass("fc fc-ltr fc-rtl fc-unthemed ui-widget"), n.off(".fc"), J && t(window).unbind("resize", J) } function u() { return n.is(":visible") } function d(e, n) { lt++, K && e && K.type !== e && (A(), c()), !K && e && (K = j.view = ot[e] || (ot[e] = j.instantiateView(e)), K.setElement(t("<div class='fc-view fc-" + e + "-view' />").appendTo($)), q.activateButton(e)), K && (tt = K.massageCurrentDate(tt), K.displaying && tt >= K.intervalStart && tt < K.intervalEnd || u() && (K.display(tt, n), O(), H(), T(), E())), O(), lt-- } function c() { q.deactivateButton(K.type), K.removeElement(), K = j.view = null } function h() { lt++, A(); var t = K.type, e = K.queryScroll(); c(), d(t, e), O(), lt-- } function f(t) { if (u()) return t && p(), lt++, K.updateSize(!0), lt--, !0 } function g() { u() && p() } function p() { var t = j.options.contentHeight, e = j.options.height; Q = "number" == typeof t ? t : "function" == typeof t ? t() : "number" == typeof e ? e - v() : "function" == typeof e ? e() - v() : "parent" === e ? n.parent().height() - v() : Math.round($.width() / Math.max(j.options.aspectRatio, .5)) } function v() { return q.el ? q.el.outerHeight(!0) : 0 } function m(t) { !lt && t.target === window && K.start && f(!0) && K.trigger("windowResize", st) } function y() { D() } function S(t) { it(j.getEventSourcesByMatchArray(t)) } function w() { u() && (A(), K.displayEvents(ut), O()) } function E() { !j.options.lazyFetching || et(K.start, K.end) ? D() : w() } function D() { nt(K.start, K.end) } function b(t) { ut = t, w() } function C() { w() } function H() { q.updateTitle(K.title) } function T() { var t = j.getNow(); t >= K.intervalStart && t < K.intervalEnd ? q.disableButton("today") : q.enableButton("today") } function x(t, e) { K.select(j.buildSelectSpan.apply(j, arguments)) } function R() { K && K.unselect() } function I() { tt = K.computePrevDate(tt), d() } function k() { tt = K.computeNextDate(tt), d() } function M() { tt.add(-1, "years"), d() } function L() { tt.add(1, "years"), d() } function B() { tt = j.getNow(), d() } function z(t) { tt = j.moment(t).stripZone(), d() } function F(t) { tt.add(e.duration(t)), d() } function N(t, e) { var n; e = e || "day", n = j.getViewSpec(e) || j.getUnitViewSpec(e), tt = t.clone(), d(n ? n.type : null) } function G() { return j.applyTimezone(tt) } function A() { $.css({ width: "100%", height: $.height(), overflow: "hidden" }) } function O() { $.css({ width: "", height: "", overflow: "" }) } function V() { return j } function P() { return K } function _(t, e) { var n; if ("string" == typeof t) { if (void 0 === e) return j.options[t]; n = {}, n[t] = e, Y(n) } else "object" == typeof t && Y(t) } function Y(t) { var e, n = 0; for (e in t) j.dynamicOverrides[e] = t[e]; j.viewSpecCache = {}, j.populateOptionsHash(); for (e in t) j.triggerOptionHandlers(e), n++; if (1 === n) { if ("height" === e || "contentHeight" === e || "aspectRatio" === e) return void f(!0); if ("defaultDate" === e) return; if ("businessHours" === e) return void(K && (K.unrenderBusinessHours(), K.renderBusinessHours())); if ("timezone" === e) return j.rezoneArrayEventSources(), void y() } l(), ot = {}, h() } function W(t, e) { var n = Array.prototype.slice.call(arguments, 2); if (e = e || st, this.triggerWith(t, e, n), j.options[t]) return j.options[t].apply(e, n) } var j = this; j.render = s, j.destroy = a, j.refetchEvents = y, j.refetchEventSources = S, j.reportEvents = b, j.reportEventChange = C, j.rerenderEvents = w, j.changeView = d, j.select = x, j.unselect = R, j.prev = I, j.next = k, j.prevYear = M, j.nextYear = L, j.today = B, j.gotoDate = z, j.incrementDate = F, j.zoomTo = N, j.getDate = G, j.getCalendar = V, j.getView = P, j.option = _, j.trigger = W, j.dynamicOverrides = {}, j.viewSpecCache = {}, j.optionHandlers = {}, j.overrides = t.extend({}, i), j.populateOptionsHash(); var U; j.bindOptions(["locale", "monthNames", "monthNamesShort", "dayNames", "dayNamesShort", "firstDay", "weekNumberCalculation"], function(t, e, n, i, s, o, l) { if ("iso" === l && (l = "ISO"), U = Z(Pt(t)), e && (U._months = e), n && (U._monthsShort = n), i && (U._weekdays = i), s && (U._weekdaysShort = s), null == o && "ISO" === l && (o = 1), null != o) { var a = Z(U._week); a.dow = o, U._week = a } "ISO" !== l && "local" !== l && "function" != typeof l || (U._fullCalendar_weekCalc = l), tt && r(tt) }), j.defaultAllDayEventDuration = e.duration(j.options.defaultAllDayEventDuration), j.defaultTimedEventDuration = e.duration(j.options.defaultTimedEventDuration), j.moment = function() { var t; return "local" === j.options.timezone ? (t = jt.moment.apply(null, arguments), t.hasTime() && t.local()) : t = "UTC" === j.options.timezone ? jt.moment.utc.apply(null, arguments) : jt.moment.parseZone.apply(null, arguments), r(t), t }, j.localizeMoment = r, j.getIsAmbigTimezone = function() { return "local" !== j.options.timezone && "UTC" !== j.options.timezone }, j.applyTimezone = function(t) { if (!t.hasTime()) return t.clone(); var e, n = j.moment(t.toArray()), i = t.time() - n.time(); return i && (e = n.clone().add(i), t.time() - e.time() === 0 && (n = e)), n }, j.getNow = function() { var t = j.options.now; return "function" == typeof t && (t = t()), j.moment(t).stripZone() }, j.getEventEnd = function(t) { return t.end ? t.end.clone() : j.getDefaultEventEnd(t.allDay, t.start) }, j.getDefaultEventEnd = function(t, e) { var n = e.clone(); return t ? n.stripTime().add(j.defaultAllDayEventDuration) : n.add(j.defaultTimedEventDuration), j.getIsAmbigTimezone() && n.stripZone(), n }, j.humanizeDuration = function(t) { return t.locale(j.options.locale).humanize() }, Yt.call(j); var q, $, X, K, Q, J, tt, et = j.isFetchNeeded, nt = j.fetchEvents, it = j.fetchEventSources, st = n[0], ot = {}, lt = 0, ut = []; tt = null != j.options.defaultDate ? j.moment(j.options.defaultDate).stripZone() : j.getNow(), j.getSuggestedViewHeight = function() { return void 0 === Q && g(), Q }, j.isHeightAuto = function() { return "auto" === j.options.contentHeight || "auto" === j.options.height }, j.freezeContentHeight = A, j.unfreezeContentHeight = O, j.initialize() } function Vt(e) { t.each(He, function(t, n) { null == e[t] && (e[t] = n(e)) }) } function Pt(t) { return e.localeData(t) || e.localeData("en") } function _t(e) { function n() { var n = e.options, s = n.header; f = n.theme ? "ui" : "fc", s ? (h ? h.empty() : h = this.el = t("<div class='fc-toolbar'/>"), h.append(r("left")).append(r("right")).append(r("center")).append('<div class="fc-clear"/>')) : i() } function i() { h && (h.remove(), h = c.el = null) } function r(n) { var i = t('<div class="fc-' + n + '"/>'), r = e.options, s = r.header[n]; return s && t.each(s.split(" "), function(n) { var s, o = t(), l = !0; t.each(this.split(","), function(n, i) { var s, a, u, d, c, h, p, v, m, y; "title" == i ? (o = o.add(t("<h2> </h2>")), l = !1) : ((s = (r.customButtons || {})[i]) ? (u = function(t) { s.click && s.click.call(y[0], t) }, d = "", c = s.text) : (a = e.getViewSpec(i)) ? (u = function() { e.changeView(i) }, g.push(i), d = a.buttonTextOverride, c = a.buttonTextDefault) : e[i] && (u = function() { e[i]() }, d = (e.overrides.buttonText || {})[i], c = r.buttonText[i]), u && (h = s ? s.themeIcon : r.themeButtonIcons[i], p = s ? s.icon : r.buttonIcons[i], v = d ? tt(d) : h && r.theme ? "<span class='ui-icon ui-icon-" + h + "'></span>" : p && !r.theme ? "<span class='fc-icon fc-icon-" + p + "'></span>" : tt(c), m = ["fc-" + i + "-button", f + "-button", f + "-state-default"], y = t('<button type="button" class="' + m.join(" ") + '">' + v + "</button>").click(function(t) { y.hasClass(f + "-state-disabled") || (u(t), (y.hasClass(f + "-state-active") || y.hasClass(f + "-state-disabled")) && y.removeClass(f + "-state-hover")) }).mousedown(function() { y.not("." + f + "-state-active").not("." + f + "-state-disabled").addClass(f + "-state-down") }).mouseup(function() { y.removeClass(f + "-state-down") }).hover(function() { y.not("." + f + "-state-active").not("." + f + "-state-disabled").addClass(f + "-state-hover") }, function() { y.removeClass(f + "-state-hover").removeClass(f + "-state-down") }), o = o.add(y))) }), l && o.first().addClass(f + "-corner-left").end().last().addClass(f + "-corner-right").end(), o.length > 1 ? (s = t("<div/>"), l && s.addClass("fc-button-group"), s.append(o), i.append(s)) : i.append(o) }), i } function s(t) { h && h.find("h2").text(t) } function o(t) { h && h.find(".fc-" + t + "-button").addClass(f + "-state-active") } function l(t) { h && h.find(".fc-" + t + "-button").removeClass(f + "-state-active") } function a(t) { h && h.find(".fc-" + t + "-button").prop("disabled", !0).addClass(f + "-state-disabled") } function u(t) { h && h.find(".fc-" + t + "-button").prop("disabled", !1).removeClass(f + "-state-disabled") } function d() { return g } var c = this; c.render = n, c.removeElement = i, c.updateTitle = s, c.activateButton = o, c.deactivateButton = l, c.disableButton = a, c.enableButton = u, c.getViewsWithButtons = d, c.el = null; var h, f, g = [] } function Yt() { function n(t, e) { return !O || t < O || e > V } function i(t, e) { O = t, V = e, r(Y, "reset") } function r(t, e) { var n, i; for ("reset" === e ? j = [] : "add" !== e && (j = w(j, t)), n = 0; n < t.length; n++) i = t[n], "pending" !== i._status && W++, i._fetchId = (i._fetchId || 0) + 1, i._status = "pending"; for (n = 0; n < t.length; n++) i = t[n], s(i, i._fetchId) } function s(e, n) { a(e, function(i) { var r, s, o, a = t.isArray(e.events); if (n === e._fetchId && "rejected" !== e._status) { if (e._status = "resolved", i) for (r = 0; r < i.length; r++) s = i[r], o = a ? s : R(s, e), o && j.push.apply(j, L(o)); l() } }) } function o(t) { var e = "pending" === t._status; t._status = "rejected", e && l() } function l() { W--, W || P(j) } function a(e, n) { var i, r, s = jt.sourceFetchers; for (i = 0; i < s.length; i++) { if (r = s[i].call(F, e, O.clone(), V.clone(), F.options.timezone, n), r === !0) return; if ("object" == typeof r) return void a(r, n) } var o = e.events; if (o) t.isFunction(o) ? (F.pushLoading(), o.call(F, O.clone(), V.clone(), F.options.timezone, function(t) { n(t), F.popLoading() })) : t.isArray(o) ? n(o) : n(); else { var l = e.url; if (l) { var u, d = e.success, c = e.error, h = e.complete; u = t.isFunction(e.data) ? e.data() : e.data; var f = t.extend({}, u || {}), g = J(e.startParam, F.options.startParam), p = J(e.endParam, F.options.endParam), v = J(e.timezoneParam, F.options.timezoneParam); g && (f[g] = O.format()), p && (f[p] = V.format()), F.options.timezone && "local" != F.options.timezone && (f[v] = F.options.timezone), F.pushLoading(), t.ajax(t.extend({}, Te, e, { data: f, success: function(e) { e = e || []; var i = Q(d, this, arguments); t.isArray(i) && (e = i), n(e) }, error: function() { Q(c, this, arguments), n() }, complete: function() { Q(h, this, arguments), F.popLoading() } })) } else n() } } function u(t) { var e = d(t); e && (Y.push(e), r([e], "add")) } function d(e) { var n, i, r = jt.sourceNormalizers; if (t.isFunction(e) || t.isArray(e) ? n = { events: e } : "string" == typeof e ? n = { url: e } : "object" == typeof e && (n = t.extend({}, e)), n) { for (n.className ? "string" == typeof n.className && (n.className = n.className.split(/\s+/)) : n.className = [], t.isArray(n.events) && (n.origArray = n.events, n.events = t.map(n.events, function(t) { return R(t, n) })), i = 0; i < r.length; i++) r[i].call(F, n); return n } } function c(t) { f(m(t)) } function h(t) { null == t ? f(Y, !0) : f(v(t)) } function f(e, n) { var i; for (i = 0; i < e.length; i++) o(e[i]); n ? (Y = [], j = []) : (Y = t.grep(Y, function(t) { for (i = 0; i < e.length; i++) if (t === e[i]) return !1; return !0 }), j = w(j, e)), P(j) } function g() { return Y.slice(1) } function p(e) { return t.grep(Y, function(t) { return t.id && t.id === e })[0] } function v(e) { e ? t.isArray(e) || (e = [e]) : e = []; var n, i = []; for (n = 0; n < e.length; n++) i.push.apply(i, m(e[n])); return i } function m(e) { var n, i; for (n = 0; n < Y.length; n++) if (i = Y[n], i === e) return [i]; return i = p(e), i ? [i] : t.grep(Y, function(t) { return y(e, t) }) } function y(t, e) { return t && e && S(t) == S(e) } function S(t) { return ("object" == typeof t ? t.origArray || t.googleCalendarId || t.url || t.events : null) || t } function w(e, n) { return t.grep(e, function(t) { for (var e = 0; e < n.length; e++) if (t.source === n[e]) return !1; return !0 }) } function E(t) { t.start = F.moment(t.start), t.end ? t.end = F.moment(t.end) : t.end = null, B(t, D(t)), P(j) } function D(e) { var n = {}; return t.each(e, function(t, e) { b(t) && void 0 !== e && K(e) && (n[t] = e) }), n } function b(t) { return !/^_|^(id|allDay|start|end)$/.test(t) } function C(t, e) { var n, i, r, s = R(t); if (s) { for (n = L(s), i = 0; i < n.length; i++) r = n[i], r.source || (e && (_.events.push(r), r.source = _), j.push(r)); return P(j), n } return [] } function H(e) { var n, i; for (null == e ? e = function() { return !0 } : t.isFunction(e) || (n = e + "", e = function(t) { return t._id == n }), j = t.grep(j, e, !0), i = 0; i < Y.length; i++) t.isArray(Y[i].events) && (Y[i].events = t.grep(Y[i].events, e, !0)); P(j) } function T(e) { return t.isFunction(e) ? t.grep(j, e) : null != e ? (e += "", t.grep(j, function(t) { return t._id == e })) : j } function x(t) { t.start = F.moment(t.start), t.end && (t.end = F.moment(t.end)), Wt(t) } function R(n, i) { var r, s, o, l = {}; if (F.options.eventDataTransform && (n = F.options.eventDataTransform(n)), i && i.eventDataTransform && (n = i.eventDataTransform(n)), t.extend(l, n), i && (l.source = i), l._id = n._id || (void 0 === n.id ? "_fc" + xe++ : n.id + ""), n.className ? "string" == typeof n.className ? l.className = n.className.split(/\s+/) : l.className = n.className : l.className = [], r = n.start || n.date, s = n.end, U(r) && (r = e.duration(r)), U(s) && (s = e.duration(s)), n.dow || e.isDuration(r) || e.isDuration(s)) l.start = r ? e.duration(r) : null, l.end = s ? e.duration(s) : null, l._recurring = !0; else { if (r && (r = F.moment(r), !r.isValid())) return !1; s && (s = F.moment(s), s.isValid() || (s = null)), o = n.allDay, void 0 === o && (o = J(i ? i.allDayDefault : void 0, F.options.allDayDefault)), I(r, s, o, l) } return F.normalizeEvent(l), l } function I(t, e, n, i) { i.start = t, i.end = e, i.allDay = n, k(i), Wt(i) } function k(t) { M(t), t.end && !t.end.isAfter(t.start) && (t.end = null), t.end || (F.options.forceEventDuration ? t.end = F.getDefaultEventEnd(t.allDay, t.start) : t.end = null) } function M(t) { null == t.allDay && (t.allDay = !(t.start.hasTime() || t.end && t.end.hasTime())), t.allDay ? (t.start.stripTime(), t.end && t.end.stripTime()) : (t.start.hasTime() || (t.start = F.applyTimezone(t.start.time(0))), t.end && !t.end.hasTime() && (t.end = F.applyTimezone(t.end.time(0)))) } function L(e, n, i) { var r, s, o, l, a, u, d, c, h, f = []; if (n = n || O, i = i || V, e) if (e._recurring) { if (s = e.dow) for (r = {}, o = 0; o < s.length; o++) r[s[o]] = !0; for (l = n.clone().stripTime(); l.isBefore(i);) r && !r[l.day()] || (a = e.start, u = e.end, d = l.clone(), c = null, a && (d = d.time(a)), u && (c = l.clone().time(u)), h = t.extend({}, e), I(d, c, !a && !u, h), f.push(h)), l.add(1, "days") } else f.push(e); return f } function B(e, n, i) { function r(t, e) { return i ? A(t, e, i) : n.allDay ? G(t, e) : N(t, e) } var s, o, l, a, u, d, c = {}; return n = n || {}, n.start || (n.start = e.start.clone()), void 0 === n.end && (n.end = e.end ? e.end.clone() : null), null == n.allDay && (n.allDay = e.allDay), k(n), s = { start: e._start.clone(), end: e._end ? e._end.clone() : F.getDefaultEventEnd(e._allDay, e._start), allDay: n.allDay }, k(s), o = null !== e._end && null === n.end, l = r(n.start, s.start), n.end ? (a = r(n.end, s.end), u = a.subtract(l)) : u = null, t.each(n, function(t, e) { b(t) && void 0 !== e && (c[t] = e) }), d = z(T(e._id), o, n.allDay, l, u, c), { dateDelta: l, durationDelta: u, undo: d } } function z(e, n, i, r, s, o) { var l = F.getIsAmbigTimezone(), a = []; return r && !r.valueOf() && (r = null), s && !s.valueOf() && (s = null), t.each(e, function(e, u) { var d, c; d = { start: u.start.clone(), end: u.end ? u.end.clone() : null, allDay: u.allDay }, t.each(o, function(t) { d[t] = u[t] }), c = { start: u._start, end: u._end, allDay: i }, k(c), n ? c.end = null : s && !c.end && (c.end = F.getDefaultEventEnd(c.allDay, c.start)), r && (c.start.add(r), c.end && c.end.add(r)), s && c.end.add(s), l && !c.allDay && (r || s) && (c.start.stripZone(), c.end && c.end.stripZone()), t.extend(u, o, c), Wt(u), a.push(function() { t.extend(u, d), Wt(u) }) }), function() { for (var t = 0; t < a.length; t++) a[t]() } } var F = this; F.isFetchNeeded = n, F.fetchEvents = i, F.fetchEventSources = r, F.getEventSources = g, F.getEventSourceById = p, F.getEventSourcesByMatchArray = v, F.getEventSourcesByMatch = m, F.addEventSource = u, F.removeEventSource = c, F.removeEventSources = h, F.updateEvent = E, F.renderEvent = C, F.removeEvents = H, F.clientEvents = T, F.mutateEvent = B, F.normalizeEventDates = k, F.normalizeEventTimes = M; var O, V, P = F.reportEvents, _ = { events: [] }, Y = [_], W = 0, j = []; t.each((F.options.events ? [F.options.events] : []).concat(F.options.eventSources || []), function(t, e) { var n = d(e); n && Y.push(n) }), F.rezoneArrayEventSources = function() { var e, n, i; for (e = 0; e < Y.length; e++) if (n = Y[e].events, t.isArray(n)) for (i = 0; i < n.length; i++) x(n[i]) }, F.buildEventFromInput = R, F.expandEvent = L, F.getEventCache = function() { return j } } function Wt(t) { t._allDay = t.allDay, t._start = t.start.clone(), t._end = t.end ? t.end.clone() : null } var jt = t.fullCalendar = { version: "3.0.1", internalApiVersion: 6 }, Ut = jt.views = {}; t.fn.fullCalendar = function(e) { var n = Array.prototype.slice.call(arguments, 1), i = this; return this.each(function(r, s) { var o, l = t(s), a = l.data("fullCalendar"); "string" == typeof e ? a && t.isFunction(a[e]) && (o = a[e].apply(a, n), r || (i = o), "destroy" === e && l.removeData("fullCalendar")) : a || (a = new Ee(l, e), l.data("fullCalendar", a), a.render()) }), i }; var qt = ["header", "buttonText", "buttonIcons", "themeButtonIcons"]; jt.intersectRanges = F, jt.applyAll = Q, jt.debounce = at, jt.isInt = ot, jt.htmlEscape = tt, jt.cssToStr = nt, jt.proxy = lt, jt.capitaliseFirstLetter = rt, jt.getOuterRect = h, jt.getClientRect = f, jt.getContentRect = g, jt.getScrollbarWidths = p; var Zt = null; jt.preventDefault = C, jt.intersectRects = x, jt.parseFieldSpecs = M, jt.compareByFieldSpecs = L, jt.compareByFieldSpec = B, jt.flexibleCompare = z, jt.computeIntervalUnit = O, jt.divideRangeByDuration = P, jt.divideDurationByDuration = _, jt.multiplyDuration = Y, jt.durationHasTime = W; var $t = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"], Xt = ["year", "month", "week", "day", "hour", "minute", "second", "millisecond"]; jt.log = function() { var t = window.console; if (t && t.log) return t.log.apply(t, arguments) }, jt.warn = function() { var t = window.console; return t && t.warn ? t.warn.apply(t, arguments) : jt.log.apply(jt, arguments) }; var Kt = {}.hasOwnProperty, Qt = /^\s*\d{4}-\d\d$/, Jt = /^\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+)?)?)?)?)?$/, te = e.fn, ee = t.extend({}, te), ne = e.momentProperties; ne.push("_fullCalendar"), ne.push("_ambigTime"), ne.push("_ambigZone"), jt.moment = function() { return dt(arguments) }, jt.moment.utc = function() { var t = dt(arguments, !0); return t.hasTime() && t.utc(), t }, jt.moment.parseZone = function() { return dt(arguments, !0, !0) }, te.week = te.weeks = function(t) { var e = this._locale._fullCalendar_weekCalc; return null == t && "function" == typeof e ? e(this) : "ISO" === e ? ee.isoWeek.apply(this, arguments) : ee.week.apply(this, arguments) }, te.time = function(t) { if (!this._fullCalendar) return ee.time.apply(this, arguments); if (null == t) return e.duration({ hours: this.hours(), minutes: this.minutes(), seconds: this.seconds(), milliseconds: this.milliseconds() }); this._ambigTime = !1, e.isDuration(t) || e.isMoment(t) || (t = e.duration(t)); var n = 0; return e.isDuration(t) && (n = 24 * Math.floor(t.asDays())), this.hours(n + t.hours()).minutes(t.minutes()).seconds(t.seconds()).milliseconds(t.milliseconds()) }, te.stripTime = function() { return this._ambigTime || (this.utc(!0), this.set({ hours: 0, minutes: 0, seconds: 0, ms: 0 }), this._ambigTime = !0, this._ambigZone = !0), this }, te.hasTime = function() { return !this._ambigTime }, te.stripZone = function() { var t; return this._ambigZone || (t = this._ambigTime, this.utc(!0), this._ambigTime = t || !1, this._ambigZone = !0), this }, te.hasZone = function() { return !this._ambigZone }, te.local = function(t) { return ee.local.call(this, this._ambigZone || t), this._ambigTime = !1, this._ambigZone = !1, this }, te.utc = function(t) { return ee.utc.call(this, t), this._ambigTime = !1, this._ambigZone = !1, this }, te.utcOffset = function(t) { return null != t && (this._ambigTime = !1, this._ambigZone = !1), ee.utcOffset.apply(this, arguments) }, te.format = function() { return this._fullCalendar && arguments[0] ? ht(this, arguments[0]) : this._ambigTime ? ct(this, "YYYY-MM-DD") : this._ambigZone ? ct(this, "YYYY-MM-DD[T]HH:mm:ss") : ee.format.apply(this, arguments) }, te.toISOString = function() { return this._ambigTime ? ct(this, "YYYY-MM-DD") : this._ambigZone ? ct(this, "YYYY-MM-DD[T]HH:mm:ss") : ee.toISOString.apply(this, arguments) }; var ie = { t: function(t) { return ct(t, "a").charAt(0) }, T: function(t) { return ct(t, "A").charAt(0) } }; jt.formatRange = pt; var re = { Y: "year", M: "month", D: "day", d: "day", A: "second", a: "second", T: "second", t: "second", H: "second", h: "second", m: "second", s: "second" }, se = {}, oe = { 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" } }; jt.queryMostGranularFormatUnit = function(t) { var e, n, i, r, s = yt(t); for (e = 0; e < s.length; e++) n = s[e], n.token && (i = oe[n.token.charAt(0)], i && (!r || i.value > r.value) && (r = i)); return r ? r.unit : null }, jt.Class = wt, wt.extend = function() { var t, e, n = arguments.length; for (t = 0; t < n; t++) e = arguments[t], t < n - 1 && Dt(this, e); return Et(this, e || {}) }, wt.mixin = function(t) { Dt(this, t) }; var le = jt.EmitterMixin = { on: function(e, n) { var i = function(t, e) { return n.apply(e.context || this, e.args || []) }; return n.guid || (n.guid = t.guid++), i.guid = n.guid, t(this).on(e, i), this }, off: function(e, n) { return t(this).off(e, n), this }, trigger: function(e) { var n = Array.prototype.slice.call(arguments, 1); return t(this).triggerHandler(e, { args: n }), this }, triggerWith: function(e, n, i) { return t(this).triggerHandler(e, { context: n, args: i }), this } }, ae = jt.ListenerMixin = function() { var e = 0, n = { listenerId: null, listenTo: function(e, n, i) { if ("object" == typeof n) for (var r in n) n.hasOwnProperty(r) && this.listenTo(e, r, n[r]); else "string" == typeof n && e.on(n + "." + this.getListenerNamespace(), t.proxy(i, this)) }, stopListeningTo: function(t, e) { t.off((e || "") + "." + this.getListenerNamespace()) }, getListenerNamespace: function() { return null == this.listenerId && (this.listenerId = e++), "_listener" + this.listenerId } }; return n }(), ue = { isIgnoringMouse: !1, delayUnignoreMouse: null, initMouseIgnoring: function(t) { this.delayUnignoreMouse = at(lt(this, "unignoreMouse"), t || 1e3) }, tempIgnoreMouse: function() { this.isIgnoringMouse = !0, this.delayUnignoreMouse() }, unignoreMouse: function() { this.isIgnoringMouse = !1 } }, de = wt.extend(ae, { isHidden: !0, options: null, el: null, margin: 10, constructor: function(t) { this.options = t || {} }, show: function() { this.isHidden && (this.el || this.render(), this.el.show(), this.position(), this.isHidden = !1, this.trigger("show")) }, hide: function() { this.isHidden || (this.el.hide(), this.isHidden = !0, this.trigger("hide")) }, render: function() { var e = this, n = this.options; this.el = t('<div class="fc-popover"/>').addClass(n.className || "").css({ top: 0, left: 0 }).append(n.content).appendTo(n.parentEl), this.el.on("click", ".fc-close", function() { e.hide() }), n.autoHide && this.listenTo(t(document), "mousedown", this.documentMousedown) }, documentMousedown: function(e) { this.el && !t(e.target).closest(this.el).length && this.hide() }, removeElement: function() { this.hide(), this.el && (this.el.remove(), this.el = null), this.stopListeningTo(t(document), "mousedown") }, position: function() { var e, n, i, r, s, o = this.options, l = this.el.offsetParent().offset(), a = this.el.outerWidth(), u = this.el.outerHeight(), d = t(window), h = c(this.el); r = o.top || 0, s = void 0 !== o.left ? o.left : void 0 !== o.right ? o.right - a : 0, h.is(window) || h.is(document) ? (h = d, e = 0, n = 0) : (i = h.offset(), e = i.top, n = i.left), e += d.scrollTop(), n += d.scrollLeft(), o.viewportConstrain !== !1 && (r = Math.min(r, e + h.outerHeight() - u - this.margin), r = Math.max(r, e + this.margin), s = Math.min(s, n + h.outerWidth() - a - this.margin), s = Math.max(s, n + this.margin)), this.el.css({ top: r - l.top, left: s - l.left }) }, trigger: function(t) { this.options[t] && this.options[t].apply(this, Array.prototype.slice.call(arguments, 1)) } }), ce = jt.CoordCache = wt.extend({ els: null, forcedOffsetParentEl: null, origin: null, boundingRect: null, isHorizontal: !1, isVertical: !1, lefts: null, rights: null, tops: null, bottoms: null, constructor: function(e) { this.els = t(e.els), this.isHorizontal = e.isHorizontal, this.isVertical = e.isVertical, this.forcedOffsetParentEl = e.offsetParent ? t(e.offsetParent) : null }, build: function() { var t = this.forcedOffsetParentEl || this.els.eq(0).offsetParent(); this.origin = t.offset(), this.boundingRect = this.queryBoundingRect(), this.isHorizontal && this.buildElHorizontals(), this.isVertical && this.buildElVerticals() }, clear: function() { this.origin = null, this.boundingRect = null, this.lefts = null, this.rights = null, this.tops = null, this.bottoms = null }, ensureBuilt: function() { this.origin || this.build() }, buildElHorizontals: function() { var e = [], n = []; this.els.each(function(i, r) { var s = t(r), o = s.offset().left, l = s.outerWidth(); e.push(o), n.push(o + l) }), this.lefts = e, this.rights = n }, buildElVerticals: function() { var e = [], n = []; this.els.each(function(i, r) { var s = t(r), o = s.offset().top, l = s.outerHeight(); e.push(o), n.push(o + l) }), this.tops = e, this.bottoms = n }, getHorizontalIndex: function(t) { this.ensureBuilt(); var e, n = this.lefts, i = this.rights, r = n.length; for (e = 0; e < r; e++) if (t >= n[e] && t < i[e]) return e }, getVerticalIndex: function(t) { this.ensureBuilt(); var e, n = this.tops, i = this.bottoms, r = n.length; for (e = 0; e < r; e++) if (t >= n[e] && t < i[e]) return e }, getLeftOffset: function(t) { return this.ensureBuilt(), this.lefts[t] }, getLeftPosition: function(t) { return this.ensureBuilt(), this.lefts[t] - this.origin.left }, getRightOffset: function(t) { return this.ensureBuilt(), this.rights[t] }, getRightPosition: function(t) { return this.ensureBuilt(), this.rights[t] - this.origin.left }, getWidth: function(t) { return this.ensureBuilt(), this.rights[t] - this.lefts[t] }, getTopOffset: function(t) { return this.ensureBuilt(), this.tops[t] }, getTopPosition: function(t) { return this.ensureBuilt(), this.tops[t] - this.origin.top }, getBottomOffset: function(t) { return this.ensureBuilt(), this.bottoms[t] }, getBottomPosition: function(t) { return this.ensureBuilt(), this.bottoms[t] - this.origin.top }, getHeight: function(t) { return this.ensureBuilt(), this.bottoms[t] - this.tops[t] }, queryBoundingRect: function() { var t = c(this.els.eq(0)); if (!t.is(document)) return f(t) }, isPointInBounds: function(t, e) { return this.isLeftInBounds(t) && this.isTopInBounds(e) }, isLeftInBounds: function(t) { return !this.boundingRect || t >= this.boundingRect.left && t < this.boundingRect.right }, isTopInBounds: function(t) { return !this.boundingRect || t >= this.boundingRect.top && t < this.boundingRect.bottom } }), he = jt.DragListener = wt.extend(ae, ue, { options: null, subjectEl: null, originX: null, originY: null, scrollEl: null, isInteracting: !1, isDistanceSurpassed: !1, isDelayEnded: !1, isDragging: !1, isTouch: !1, delay: null, delayTimeoutId: null, minDistance: null, handleTouchScrollProxy: null, constructor: function(t) { this.options = t || {}, this.handleTouchScrollProxy = lt(this, "handleTouchScroll"), this.initMouseIgnoring(500) }, startInteraction: function(e, n) { var i = D(e); if ("mousedown" === e.type) { if (this.isIgnoringMouse) return; if (!S(e)) return; e.preventDefault() } this.isInteracting || (n = n || {}, this.delay = J(n.delay, this.options.delay, 0), this.minDistance = J(n.distance, this.options.distance, 0), this.subjectEl = this.options.subjectEl, this.isInteracting = !0, this.isTouch = i, this.isDelayEnded = !1, this.isDistanceSurpassed = !1, this.originX = w(e), this.originY = E(e), this.scrollEl = c(t(e.target)), this.bindHandlers(), this.initAutoScroll(), this.handleInteractionStart(e), this.startDelay(e), this.minDistance || this.handleDistanceSurpassed(e)) }, handleInteractionStart: function(t) { this.trigger("interactionStart", t) }, endInteraction: function(t, e) { this.isInteracting && (this.endDrag(t), this.delayTimeoutId && (clearTimeout(this.delayTimeoutId), this.delayTimeoutId = null), this.destroyAutoScroll(), this.unbindHandlers(), this.isInteracting = !1, this.handleInteractionEnd(t, e), this.isTouch && this.tempIgnoreMouse()) }, handleInteractionEnd: function(t, e) { this.trigger("interactionEnd", t, e || !1) }, bindHandlers: function() { var e = this, n = 1; this.isTouch ? (this.listenTo(t(document), { touchmove: this.handleTouchMove, touchend: this.endInteraction, touchcancel: this.endInteraction, touchstart: function(t) { n ? n-- : e.endInteraction(t, !0) } }), !H(this.handleTouchScrollProxy) && this.scrollEl && this.listenTo(this.scrollEl, "scroll", this.handleTouchScroll)) : this.listenTo(t(document), { mousemove: this.handleMouseMove, mouseup: this.endInteraction }), this.listenTo(t(document), { selectstart: C, contextmenu: C }) }, unbindHandlers: function() { this.stopListeningTo(t(document)), T(this.handleTouchScrollProxy), this.scrollEl && this.stopListeningTo(this.scrollEl, "scroll") }, startDrag: function(t, e) { this.startInteraction(t, e), this.isDragging || (this.isDragging = !0, this.handleDragStart(t)) }, handleDragStart: function(t) { this.trigger("dragStart", t) }, handleMove: function(t) { var e, n = w(t) - this.originX, i = E(t) - this.originY, r = this.minDistance; this.isDistanceSurpassed || (e = n * n + i * i, e >= r * r && this.handleDistanceSurpassed(t)), this.isDragging && this.handleDrag(n, i, t) }, handleDrag: function(t, e, n) { this.trigger("drag", t, e, n), this.updateAutoScroll(n) }, endDrag: function(t) { this.isDragging && (this.isDragging = !1, this.handleDragEnd(t)) }, handleDragEnd: function(t) { this.trigger("dragEnd", t) }, startDelay: function(t) { var e = this; this.delay ? this.delayTimeoutId = setTimeout(function() { e.handleDelayEnd(t) }, this.delay) : this.handleDelayEnd(t) }, handleDelayEnd: function(t) { this.isDelayEnded = !0, this.isDistanceSurpassed && this.startDrag(t) }, handleDistanceSurpassed: function(t) { this.isDistanceSurpassed = !0, this.isDelayEnded && this.startDrag(t) }, handleTouchMove: function(t) { this.isDragging && t.preventDefault(), this.handleMove(t) }, handleMouseMove: function(t) { this.handleMove(t) }, handleTouchScroll: function(t) { this.isDragging || this.endInteraction(t, !0) }, trigger: function(t) { 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)) } }); he.mixin({ isAutoScroll: !1, scrollBounds: null, scrollTopVel: null, scrollLeftVel: null, scrollIntervalId: null, scrollSensitivity: 30, scrollSpeed: 200, scrollIntervalMs: 50, initAutoScroll: function() { var t = this.scrollEl; this.isAutoScroll = this.options.scroll && t && !t.is(window) && !t.is(document), this.isAutoScroll && this.listenTo(t, "scroll", at(this.handleDebouncedScroll, 100)) }, destroyAutoScroll: function() { this.endAutoScroll(), this.isAutoScroll && this.stopListeningTo(this.scrollEl, "scroll") }, computeScrollBounds: function() { this.isAutoScroll && (this.scrollBounds = h(this.scrollEl)) }, updateAutoScroll: function(t) { var e, n, i, r, s = this.scrollSensitivity, o = this.scrollBounds, l = 0, a = 0; o && (e = (s - (E(t) - o.top)) / s, n = (s - (o.bottom - E(t))) / s, i = (s - (w(t) - o.left)) / s, r = (s - (o.right - w(t))) / s, e >= 0 && e <= 1 ? l = e * this.scrollSpeed * -1 : n >= 0 && n <= 1 && (l = n * this.scrollSpeed), i >= 0 && i <= 1 ? a = i * this.scrollSpeed * -1 : r >= 0 && r <= 1 && (a = r * this.scrollSpeed)), this.setScrollVel(l, a) }, setScrollVel: function(t, e) { this.scrollTopVel = t, this.scrollLeftVel = e, this.constrainScrollVel(), !this.scrollTopVel && !this.scrollLeftVel || this.scrollIntervalId || (this.scrollIntervalId = setInterval(lt(this, "scrollIntervalFunc"), this.scrollIntervalMs)) }, constrainScrollVel: function() { var t = this.scrollEl; this.scrollTopVel < 0 ? t.scrollTop() <= 0 && (this.scrollTopVel = 0) : this.scrollTopVel > 0 && t.scrollTop() + t[0].clientHeight >= t[0].scrollHeight && (this.scrollTopVel = 0), this.scrollLeftVel < 0 ? t.scrollLeft() <= 0 && (this.scrollLeftVel = 0) : this.scrollLeftVel > 0 && t.scrollLeft() + t[0].clientWidth >= t[0].scrollWidth && (this.scrollLeftVel = 0) }, scrollIntervalFunc: function() { var t = this.scrollEl, e = this.scrollIntervalMs / 1e3; this.scrollTopVel && t.scrollTop(t.scrollTop() + this.scrollTopVel * e), this.scrollLeftVel && t.scrollLeft(t.scrollLeft() + this.scrollLeftVel * e), this.constrainScrollVel(), this.scrollTopVel || this.scrollLeftVel || this.endAutoScroll() }, endAutoScroll: function() { this.scrollIntervalId && (clearInterval(this.scrollIntervalId), this.scrollIntervalId = null, this.handleScrollEnd()) }, handleDebouncedScroll: function() { this.scrollIntervalId || this.handleScrollEnd() }, handleScrollEnd: function() {} }); var fe = he.extend({ component: null, origHit: null, hit: null, coordAdjust: null, constructor: function(t, e) { he.call(this, e), this.component = t }, handleInteractionStart: function(t) { var e, n, i, r = this.subjectEl; this.computeCoords(), t ? (n = { left: w(t), top: E(t) }, i = n, r && (e = h(r), i = R(i, e)), this.origHit = this.queryHit(i.left, i.top), r && this.options.subjectCenter && (this.origHit && (e = x(this.origHit, e) || e), i = I(e)), this.coordAdjust = k(i, n)) : (this.origHit = null, this.coordAdjust = null), he.prototype.handleInteractionStart.apply(this, arguments) }, computeCoords: function() { this.component.prepareHits(), this.computeScrollBounds() }, handleDragStart: function(t) { var e; he.prototype.handleDragStart.apply(this, arguments), e = this.queryHit(w(t), E(t)), e && this.handleHitOver(e) }, handleDrag: function(t, e, n) { var i; he.prototype.handleDrag.apply(this, arguments), i = this.queryHit(w(n), E(n)), bt(i, this.hit) || (this.hit && this.handleHitOut(), i && this.handleHitOver(i)) }, handleDragEnd: function() { this.handleHitDone(), he.prototype.handleDragEnd.apply(this, arguments) }, handleHitOver: function(t) { var e = bt(t, this.origHit); this.hit = t, this.trigger("hitOver", this.hit, e, this.origHit) }, handleHitOut: function() { this.hit && (this.trigger("hitOut", this.hit), this.handleHitDone(), this.hit = null) }, handleHitDone: function() { this.hit && this.trigger("hitDone", this.hit) }, handleInteractionEnd: function() { he.prototype.handleInteractionEnd.apply(this, arguments), this.origHit = null, this.hit = null, this.component.releaseHits() }, handleScrollEnd: function() { he.prototype.handleScrollEnd.apply(this, arguments), this.computeCoords() }, queryHit: function(t, e) { return this.coordAdjust && (t += this.coordAdjust.left, e += this.coordAdjust.top), this.component.queryHit(t, e) } }), ge = wt.extend(ae, { options: null, sourceEl: null, el: null, parentEl: null, top0: null, left0: null, y0: null, x0: null, topDelta: null, leftDelta: null, isFollowing: !1, isHidden: !1, isAnimating: !1, constructor: function(e, n) { this.options = n = n || {}, this.sourceEl = e, this.parentEl = n.parentEl ? t(n.parentEl) : e.parent() }, start: function(e) { this.isFollowing || (this.isFollowing = !0, this.y0 = E(e), this.x0 = w(e), this.topDelta = 0, this.leftDelta = 0, this.isHidden || this.updatePosition(), D(e) ? this.listenTo(t(document), "touchmove", this.handleMove) : this.listenTo(t(document), "mousemove", this.handleMove)) }, stop: function(e, n) { function i() { r.isAnimating = !1, r.removeElement(), r.top0 = r.left0 = null, n && n() } var r = this, s = this.options.revertDuration; this.isFollowing && !this.isAnimating && (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()) }, getEl: function() { var t = this.el; return t || (t = this.el = this.sourceEl.clone().addClass(this.options.additionalClass || "").css({ position: "absolute", visibility: "", display: this.isHidden ? "none" : "", margin: 0, right: "auto", bottom: "auto", width: this.sourceEl.width(), height: this.sourceEl.height(), opacity: this.options.opacity || "", zIndex: this.options.zIndex }), t.addClass("fc-unselectable"), t.appendTo(this.parentEl)), t }, removeElement: function() { this.el && (this.el.remove(), this.el = null) }, updatePosition: function() { var t, e; this.getEl(), null === this.top0 && (t = this.sourceEl.offset(), e = this.el.offsetParent().offset(), this.top0 = t.top - e.top, this.left0 = t.left - e.left), this.el.css({ top: this.top0 + this.topDelta, left: this.left0 + this.leftDelta }) }, handleMove: function(t) { this.topDelta = E(t) - this.y0, this.leftDelta = w(t) - this.x0, this.isHidden || this.updatePosition() }, hide: function() { this.isHidden || (this.isHidden = !0, this.el && this.el.hide()) }, show: function() { this.isHidden && (this.isHidden = !1, this.updatePosition(), this.getEl().show()) } }), pe = jt.Grid = wt.extend(ae, ue, { hasDayInteractions: !0, view: null, isRTL: null, start: null, end: null, el: null, elsByFill: null, eventTimeFormat: null, displayEventTime: null, displayEventEnd: null, minResizeDuration: null, largeUnit: null, dayDragListener: null, segDragListener: null, segResizeListener: null, externalDragListener: null, constructor: function(t) { this.view = t, this.isRTL = t.opt("isRTL"), this.elsByFill = {}, this.dayDragListener = this.buildDayDragListener(), this.initMouseIgnoring() }, computeEventTimeFormat: function() { return this.view.opt("smallTimeFormat") }, computeDisplayEventTime: function() { return !0 }, computeDisplayEventEnd: function() { return !0 }, setRange: function(t) { this.start = t.start.clone(), this.end = t.end.clone(), this.rangeUpdated(), this.processRangeOptions() }, rangeUpdated: function() {}, processRangeOptions: function() { var t, e, n = this.view; this.eventTimeFormat = n.opt("eventTimeFormat") || n.opt("timeFormat") || this.computeEventTimeFormat(), t = n.opt("displayEventTime"), null == t && (t = this.computeDisplayEventTime()), e = n.opt("displayEventEnd"), null == e && (e = this.computeDisplayEventEnd()), this.displayEventTime = t, this.displayEventEnd = e }, spanToSegs: function(t) {}, diffDates: function(t, e) { return this.largeUnit ? A(t, e, this.largeUnit) : N(t, e) }, prepareHits: function() {}, releaseHits: function() {}, queryHit: function(t, e) {}, getHitSpan: function(t) {}, getHitEl: function(t) {}, setElement: function(t) { this.el = t, this.hasDayInteractions && (b(t), this.bindDayHandler("touchstart", this.dayTouchStart), this.bindDayHandler("mousedown", this.dayMousedown)), this.bindSegHandlers(), this.bindGlobalHandlers() }, bindDayHandler: function(e, n) { var i = this; this.el.on(e, function(e) { if (!t(e.target).is(i.segSelector + "," + i.segSelector + " *,.fc-more,a[data-goto]")) return n.call(i, e) }) }, removeElement: function() { this.unbindGlobalHandlers(), this.clearDragListeners(), this.el.remove() }, renderSkeleton: function() {}, renderDates: function() {}, unrenderDates: function() {}, bindGlobalHandlers: function() { this.listenTo(t(document), { dragstart: this.externalDragStart, sortstart: this.externalDragStart }) }, unbindGlobalHandlers: function() { this.stopListeningTo(t(document)) }, dayMousedown: function(t) { this.isIgnoringMouse || this.dayDragListener.startInteraction(t, {}) }, dayTouchStart: function(t) { var e = this.view; (e.isSelected || e.selectedEvent) && this.tempIgnoreMouse(), this.dayDragListener.startInteraction(t, { delay: this.view.opt("longPressDelay") }) }, buildDayDragListener: function() { var t, e, n = this, i = this.view, r = i.opt("selectable"), l = new fe(this, { scroll: i.opt("dragScroll"), interactionStart: function() { t = l.origHit, e = null }, dragStart: function() { i.unselect() }, hitOver: function(i, o, l) { l && (o || (t = null), r && (e = n.computeSelection(n.getHitSpan(l), n.getHitSpan(i)), e ? n.renderSelection(e) : e === !1 && s())) }, hitOut: function() { t = null, e = null, n.unrenderSelection() }, hitDone: function() { o() }, interactionEnd: function(r, s) { s || (t && !n.isIgnoringMouse && i.triggerDayClick(n.getHitSpan(t), n.getHitEl(t), r), e && i.reportSelection(e, r)) } }); return l }, clearDragListeners: function() { this.dayDragListener.endInteraction(), this.segDragListener && this.segDragListener.endInteraction(), this.segResizeListener && this.segResizeListener.endInteraction(), this.externalDragListener && this.externalDragListener.endInteraction() }, renderEventLocationHelper: function(t, e) { var n = this.fabricateHelperEvent(t, e); return this.renderHelper(n, e) }, fabricateHelperEvent: function(t, e) { var n = e ? Z(e.event) : {}; 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 }, renderHelper: function(t, e) {}, unrenderHelper: function() {}, renderSelection: function(t) { this.renderHighlight(t) }, unrenderSelection: function() { this.unrenderHighlight() }, computeSelection: function(t, e) { var n = this.computeSelectionSpan(t, e); return !(n && !this.view.calendar.isSelectionSpanAllowed(n)) && n }, computeSelectionSpan: function(t, e) { var n = [t.start, t.end, e.start, e.end]; return n.sort(st), { start: n[0].clone(), end: n[3].clone() } }, renderHighlight: function(t) { this.renderFill("highlight", this.spanToSegs(t)) }, unrenderHighlight: function() { this.unrenderFill("highlight") }, highlightSegClasses: function() { return ["fc-highlight"] }, renderBusinessHours: function() {}, unrenderBusinessHours: function() {}, getNowIndicatorUnit: function() {}, renderNowIndicator: function(t) {}, unrenderNowIndicator: function() {}, renderFill: function(t, e) {}, unrenderFill: function(t) { var e = this.elsByFill[t]; e && (e.remove(), delete this.elsByFill[t]) }, renderFillSegEls: function(e, n) { var i, r = this, s = this[e + "SegEl"], o = "", l = []; if (n.length) { for (i = 0; i < n.length; i++) o += this.fillSegHtml(e, n[i]); t(o).each(function(e, i) { var o = n[e], a = t(i); s && (a = s.call(r, o, a)), a && (a = t(a), a.is(r.fillSegTag) && (o.el = a, l.push(o))) }) } return l }, fillSegTag: "div", fillSegHtml: function(t, e) { var n = this[t + "SegClasses"], i = this[t + "SegCss"], r = n ? n.call(this, e) : [], s = nt(i ? i.call(this, e) : {}); return "<" + this.fillSegTag + (r.length ? ' class="' + r.join(" ") + '"' : "") + (s ? ' style="' + s + '"' : "") + " />" }, getDayClasses: function(t) { var e = this.view, n = e.calendar.getNow(), i = ["fc-" + $t[t.day()]]; return 1 == e.intervalDuration.as("months") && t.month() != e.intervalStart.month() && i.push("fc-other-month"), t.isSame(n, "day") ? i.push("fc-today", e.highlightStateClass) : t < n ? i.push("fc-past") : i.push("fc-future"), i } }); pe.mixin({ segSelector: ".fc-event-container > *", mousedOverSeg: null, isDraggingSeg: !1, isResizingSeg: !1, isDraggingExternal: !1, segs: null, renderEvents: function(t) { var e, n = [], i = []; for (e = 0; e < t.length; e++)(Tt(t[e]) ? n : i).push(t[e]); this.segs = [].concat(this.renderBgEvents(n), this.renderFgEvents(i)) }, renderBgEvents: function(t) { var e = this.eventsToSegs(t); return this.renderBgSegs(e) || e }, renderFgEvents: function(t) { var e = this.eventsToSegs(t); return this.renderFgSegs(e) || e }, unrenderEvents: function() { this.handleSegMouseout(), this.clearDragListeners(), this.unrenderFgSegs(), this.unrenderBgSegs(), this.segs = null }, getEventSegs: function() { return this.segs || [] }, renderFgSegs: function(t) {}, unrenderFgSegs: function() {}, renderFgSegEls: function(e, n) { var i, r = this.view, s = "", o = []; if (e.length) { for (i = 0; i < e.length; i++) s += this.fgSegHtml(e[i], n); t(s).each(function(n, i) { var s = e[n], l = r.resolveEventEl(s.event, t(i)); l && (l.data("fc-seg", s), s.el = l, o.push(s)) }) } return o }, fgSegHtml: function(t, e) {}, renderBgSegs: function(t) { return this.renderFill("bgEvent", t) }, unrenderBgSegs: function() { this.unrenderFill("bgEvent") }, bgEventSegEl: function(t, e) { return this.view.resolveEventEl(t.event, e) }, bgEventSegClasses: function(t) { var e = t.event, n = e.source || {}; return ["fc-bgevent"].concat(e.className, n.className || []) }, bgEventSegCss: function(t) { return { "background-color": this.getSegSkinCss(t)["background-color"] } }, businessHoursSegClasses: function(t) { return ["fc-nonbusiness", "fc-bgevent"] }, buildBusinessHourSegs: function(e) { var n = this.view.calendar.getCurrentBusinessHourEvents(e); return !n.length && this.view.calendar.options.businessHours && (n = [t.extend({}, Re, { start: this.view.end, end: this.view.end, dow: null })]), this.eventsToSegs(n) }, bindSegHandlers: function() { this.bindSegHandlersToEl(this.el) }, bindSegHandlersToEl: function(t) { this.bindSegHandlerToEl(t, "touchstart", this.handleSegTouchStart), this.bindSegHandlerToEl(t, "touchend", this.handleSegTouchEnd), this.bindSegHandlerToEl(t, "mouseenter", this.handleSegMouseover), this.bindSegHandlerToEl(t, "mouseleave", this.handleSegMouseout), this.bindSegHandlerToEl(t, "mousedown", this.handleSegMousedown), this.bindSegHandlerToEl(t, "click", this.handleSegClick) }, bindSegHandlerToEl: function(e, n, i) { var r = this; e.on(n, this.segSelector, function(e) { var n = t(this).data("fc-seg"); if (n && !r.isDraggingSeg && !r.isResizingSeg) return i.call(r, n, e) }) }, handleSegClick: function(t, e) { var n = this.view.trigger("eventClick", t.el[0], t.event, e); n === !1 && e.preventDefault() }, handleSegMouseover: function(t, e) { this.isIgnoringMouse || this.mousedOverSeg || (this.mousedOverSeg = t, this.view.isEventResizable(t.event) && t.el.addClass("fc-allow-mouse-resize"), this.view.trigger("eventMouseover", t.el[0], t.event, e)) }, handleSegMouseout: function(t, e) { e = e || {}, this.mousedOverSeg && (t = t || this.mousedOverSeg, this.mousedOverSeg = null, this.view.isEventResizable(t.event) && t.el.removeClass("fc-allow-mouse-resize"), this.view.trigger("eventMouseout", t.el[0], t.event, e)) }, handleSegMousedown: function(t, e) { var n = this.startSegResize(t, e, { distance: 5 }); !n && this.view.isEventDraggable(t.event) && this.buildSegDragListener(t).startInteraction(e, { distance: 5 }) }, handleSegTouchStart: function(t, e) { var n, i = this.view, r = t.event, s = i.isEventSelected(r), o = i.isEventDraggable(r), l = i.isEventResizable(r), a = !1; s && l && (a = this.startSegResize(t, e)), a || !o && !l || (n = o ? this.buildSegDragListener(t) : this.buildSegSelectListener(t), n.startInteraction(e, { delay: s ? 0 : this.view.opt("longPressDelay") })), this.tempIgnoreMouse() }, handleSegTouchEnd: function(t, e) { this.tempIgnoreMouse() }, startSegResize: function(e, n, i) { return !!t(n.target).is(".fc-resizer") && (this.buildSegResizeListener(e, t(n.target).is(".fc-start-resizer")).startInteraction(n, i), !0) }, buildSegDragListener: function(t) { var e, n, i, r = this, l = this.view, a = l.calendar, u = t.el, d = t.event; if (this.segDragListener) return this.segDragListener; var c = this.segDragListener = new fe(l, { scroll: l.opt("dragScroll"), subjectEl: u, subjectCenter: !0, interactionStart: function(i) { t.component = r, e = !1, n = new ge(t.el, { additionalClass: "fc-dragging", parentEl: l.el, opacity: c.isTouch ? null : l.opt("dragOpacity"), revertDuration: l.opt("dragRevertDuration"), zIndex: 2 }), n.hide(), n.start(i) }, dragStart: function(n) { c.isTouch && !l.isEventSelected(d) && l.selectEvent(d), e = !0, r.handleSegMouseout(t, n), r.segDragStart(t, n), l.hideEvent(d) }, hitOver: function(e, o, u) { var h; t.hit && (u = t.hit), i = r.computeEventDrop(u.component.getHitSpan(u), e.component.getHitSpan(e), d), i && !a.isEventSpanAllowed(r.eventToSpan(i), d) && (s(), i = null), i && (h = l.renderDrag(i, t)) ? (h.addClass("fc-dragging"), c.isTouch || r.applyDragOpacity(h), n.hide()) : n.show(), o && (i = null) }, hitOut: function() { l.unrenderDrag(), n.show(), i = null }, hitDone: function() { o() }, interactionEnd: function(s) { delete t.component, n.stop(!i, function() { e && (l.unrenderDrag(), l.showEvent(d), r.segDragStop(t, s)), i && l.reportEventDrop(d, i, this.largeUnit, u, s) }), r.segDragListener = null } }); return c }, buildSegSelectListener: function(t) { var e = this, n = this.view, i = t.event; if (this.segDragListener) return this.segDragListener; var r = this.segDragListener = new he({ dragStart: function(t) { r.isTouch && !n.isEventSelected(i) && n.selectEvent(i) }, interactionEnd: function(t) { e.segDragListener = null } }); return r }, segDragStart: function(t, e) { this.isDraggingSeg = !0, this.view.trigger("eventDragStart", t.el[0], t.event, e, {}) }, segDragStop: function(t, e) { this.isDraggingSeg = !1, this.view.trigger("eventDragStop", t.el[0], t.event, e, {}) }, computeEventDrop: function(t, e, n) { var i, r, s = this.view.calendar, o = t.start, l = e.start; return o.hasTime() === l.hasTime() ? (i = this.diffDates(l, o), n.allDay && W(i) ? (r = { start: n.start.clone(), end: s.getEventEnd(n), allDay: !1 }, s.normalizeEventTimes(r)) : r = Ht(n), r.start.add(i), r.end && r.end.add(i)) : r = { start: l.clone(), end: null, allDay: !l.hasTime() }, r }, applyDragOpacity: function(t) { var e = this.view.opt("dragOpacity"); null != e && t.css("opacity", e) }, externalDragStart: function(e, n) { var i, r, s = this.view; 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.isDraggingExternal || this.listenToExternalDrag(i, e, n))) }, listenToExternalDrag: function(t, e, n) { var i, r = this, l = this.view.calendar, a = Mt(t), u = r.externalDragListener = new fe(this, { interactionStart: function() { r.isDraggingExternal = !0 }, hitOver: function(t) { i = r.computeExternalDrop(t.component.getHitSpan(t), a), i && !l.isExternalSpanAllowed(r.eventToSpan(i), i, a.eventProps) && (s(), i = null), i && r.renderDrag(i) }, hitOut: function() { i = null }, hitDone: function() { o(), r.unrenderDrag() }, interactionEnd: function(e) { i && r.view.reportExternalDrop(a, i, t, e, n), r.isDraggingExternal = !1, r.externalDragListener = null } }); u.startDrag(e) }, computeExternalDrop: function(t, e) { var n = this.view.calendar, i = { start: n.applyTimezone(t.start), end: null }; return e.startTime && !i.start.hasTime() && i.start.time(e.startTime), e.duration && (i.end = i.start.clone().add(e.duration)), i }, renderDrag: function(t, e) {}, unrenderDrag: function() {}, buildSegResizeListener: function(t, e) { var n, i, r = this, l = this.view, a = l.calendar, u = t.el, d = t.event, c = a.getEventEnd(d), h = this.segResizeListener = new fe(this, { scroll: l.opt("dragScroll"), subjectEl: u, interactionStart: function() { n = !1 }, dragStart: function(e) { n = !0, r.handleSegMouseout(t, e), r.segResizeStart(t, e) }, hitOver: function(n, o, u) { var h = r.getHitSpan(u), f = r.getHitSpan(n); i = e ? r.computeEventStartResize(h, f, d) : r.computeEventEndResize(h, f, d), i && (a.isEventSpanAllowed(r.eventToSpan(i), d) ? i.start.isSame(d.start.clone().stripZone()) && i.end.isSame(c.clone().stripZone()) && (i = null) : (s(), i = null)), i && (l.hideEvent(d), r.renderEventResize(i, t)) }, hitOut: function() { i = null }, hitDone: function() { r.unrenderEventResize(), l.showEvent(d), o() }, interactionEnd: function(e) { n && r.segResizeStop(t, e), i && l.reportEventResize(d, i, this.largeUnit, u, e), r.segResizeListener = null } }); return h }, segResizeStart: function(t, e) { this.isResizingSeg = !0, this.view.trigger("eventResizeStart", t.el[0], t.event, e, {}) }, segResizeStop: function(t, e) { this.isResizingSeg = !1, this.view.trigger("eventResizeStop", t.el[0], t.event, e, {}) }, computeEventStartResize: function(t, e, n) { return this.computeEventResize("start", t, e, n) }, computeEventEndResize: function(t, e, n) { return this.computeEventResize("end", t, e, n) }, computeEventResize: function(t, e, n, i) { var r, s, o = this.view.calendar, l = this.diffDates(n[t], e[t]); return r = { start: i.start.clone(), end: o.getEventEnd(i), allDay: i.allDay }, r.allDay && W(l) && (r.allDay = !1, o.normalizeEventTimes(r)), r[t].add(l), 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)), r }, renderEventResize: function(t, e) {}, unrenderEventResize: function() {}, getEventTimeText: function(t, e, n) { 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) : "" }, getSegClasses: function(t, e, n) { var i = this.view, r = ["fc-event", t.isStart ? "fc-start" : "fc-not-start", t.isEnd ? "fc-end" : "fc-not-end"].concat(this.getSegCustomClasses(t)); return e && r.push("fc-draggable"), n && r.push("fc-resizable"), i.isEventSelected(t.event) && r.push("fc-selected"), r }, getSegCustomClasses: function(t) { var e = t.event; return [].concat(e.className, e.source ? e.source.className : []) }, getSegSkinCss: function(t) { return { "background-color": this.getSegBackgroundColor(t), "border-color": this.getSegBorderColor(t), color: this.getSegTextColor(t) } }, getSegBackgroundColor: function(t) { return t.event.backgroundColor || t.event.color || this.getSegDefaultBackgroundColor(t) }, getSegDefaultBackgroundColor: function(t) { var e = t.event.source || {}; return e.backgroundColor || e.color || this.view.opt("eventBackgroundColor") || this.view.opt("eventColor") }, getSegBorderColor: function(t) { return t.event.borderColor || t.event.color || this.getSegDefaultBorderColor(t) }, getSegDefaultBorderColor: function(t) { var e = t.event.source || {}; return e.borderColor || e.color || this.view.opt("eventBorderColor") || this.view.opt("eventColor") }, getSegTextColor: function(t) { return t.event.textColor || this.getSegDefaultTextColor(t) }, getSegDefaultTextColor: function(t) { var e = t.event.source || {}; return e.textColor || this.view.opt("eventTextColor") }, eventToSegs: function(t) { return this.eventsToSegs([t]) }, eventToSpan: function(t) { return this.eventToSpans(t)[0] }, eventToSpans: function(t) { var e = this.eventToRange(t); return this.eventRangeToSpans(e, t) }, eventsToSegs: function(e, n) { var i = this, r = It(e), s = []; return t.each(r, function(t, e) { var r, o = []; for (r = 0; r < e.length; r++) o.push(i.eventToRange(e[r])); if (xt(e[0])) for (o = i.invertRanges(o), r = 0; r < o.length; r++) s.push.apply(s, i.eventRangeToSegs(o[r], e[0], n)); else for (r = 0; r < o.length; r++) s.push.apply(s, i.eventRangeToSegs(o[r], e[r], n)) }), s }, eventToRange: function(t) { var e = this.view.calendar, n = t.start.clone().stripZone(), i = (t.end ? t.end.clone() : e.getDefaultEventEnd(null != t.allDay ? t.allDay : !t.start.hasTime(), t.start)).stripZone(); return e.localizeMoment(n), e.localizeMoment(i), { start: n, end: i } }, eventRangeToSegs: function(t, e, n) { var i, r = this.eventRangeToSpans(t, e), s = []; for (i = 0; i < r.length; i++) s.push.apply(s, this.eventSpanToSegs(r[i], e, n)); return s }, eventRangeToSpans: function(e, n) { return [t.extend({}, e)] }, eventSpanToSegs: function(t, e, n) { var i, r, s = n ? n(t) : this.spanToSegs(t); for (i = 0; i < s.length; i++) r = s[i], r.event = e, r.eventStartMS = +t.start, r.eventDurationMS = t.end - t.start; return s }, invertRanges: function(t) { var e, n, i = this.view, r = i.start.clone(), s = i.end.clone(), o = [], l = r; for (t.sort(kt), e = 0; e < t.length; e++) n = t[e], n.start > l && o.push({ start: l, end: n.start }), l = n.end; return l < s && o.push({ start: l, end: s }), o }, sortEventSegs: function(t) { t.sort(lt(this, "compareEventSegs")) }, compareEventSegs: function(t, e) { return t.eventStartMS - e.eventStartMS || e.eventDurationMS - t.eventDurationMS || e.event.allDay - t.event.allDay || L(t.event, e.event, this.view.eventOrderSpecs) } }), jt.pluckEventDateProps = Ht, jt.isBgEvent = Tt, jt.dataAttrPrefix = ""; var ve = jt.DayTableMixin = { breakOnWeeks: !1, dayDates: null, dayIndices: null, daysPerRow: null, rowCnt: null, colCnt: null, colHeadFormat: null, updateDayTable: function() { for (var t, e, n, i = this.view, r = this.start.clone(), s = -1, o = [], l = []; r.isBefore(this.end);) i.isHiddenDay(r) ? o.push(s + .5) : (s++, o.push(s), l.push(r.clone())), r.add(1, "days"); if (this.breakOnWeeks) { for (e = l[0].day(), t = 1; t < l.length && l[t].day() != e; t++); n = Math.ceil(l.length / t) } else n = 1, t = l.length; this.dayDates = l, this.dayIndices = o, this.daysPerRow = t, this.rowCnt = n, this.updateDayTableCols() }, updateDayTableCols: function() { this.colCnt = this.computeColCnt(), this.colHeadFormat = this.view.opt("columnFormat") || this.computeColHeadFormat() }, computeColCnt: function() { return this.daysPerRow }, getCellDate: function(t, e) { return this.dayDates[this.getCellDayIndex(t, e)].clone() }, getCellRange: function(t, e) { var n = this.getCellDate(t, e), i = n.clone().add(1, "days"); return { start: n, end: i } }, getCellDayIndex: function(t, e) { return t * this.daysPerRow + this.getColDayIndex(e) }, getColDayIndex: function(t) { return this.isRTL ? this.colCnt - 1 - t : t }, getDateDayIndex: function(t) { var e = this.dayIndices, n = t.diff(this.start, "days"); return n < 0 ? e[0] - 1 : n >= e.length ? e[e.length - 1] + 1 : e[n] }, computeColHeadFormat: function() { return this.rowCnt > 1 || this.colCnt > 10 ? "ddd" : this.colCnt > 1 ? this.view.opt("dayOfMonthFormat") : "dddd" }, sliceRangeByRow: function(t) { var e, n, i, r, s, o = this.daysPerRow, l = this.view.computeDayRange(t), a = this.getDateDayIndex(l.start), u = this.getDateDayIndex(l.end.clone().subtract(1, "days")), d = []; for (e = 0; e < this.rowCnt; e++) n = e * o, i = n + o - 1, r = Math.max(a, n), s = Math.min(u, i), r = Math.ceil(r), s = Math.floor(s), r <= s && d.push({ row: e, firstRowDayIndex: r - n, lastRowDayIndex: s - n, isStart: r === a, isEnd: s === u }); return d }, sliceRangeByDay: function(t) { var e, n, i, r, s, o, l = this.daysPerRow, a = this.view.computeDayRange(t), u = this.getDateDayIndex(a.start), d = this.getDateDayIndex(a.end.clone().subtract(1, "days")), c = []; for (e = 0; e < this.rowCnt; e++) for (n = e * l, i = n + l - 1, r = n; r <= i; r++) s = Math.max(u, r), o = Math.min(d, 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 === d }); return c; }, renderHeadHtml: function() { var t = this.view; return '<div class="fc-row ' + t.widgetHeaderClass + '"><table><thead>' + this.renderHeadTrHtml() + "</thead></table></div>" }, renderHeadIntroHtml: function() { return this.renderIntroHtml() }, renderHeadTrHtml: function() { return "<tr>" + (this.isRTL ? "" : this.renderHeadIntroHtml()) + this.renderHeadDateCellsHtml() + (this.isRTL ? this.renderHeadIntroHtml() : "") + "</tr>" }, renderHeadDateCellsHtml: function() { var t, e, n = []; for (t = 0; t < this.colCnt; t++) e = this.getCellDate(0, t), n.push(this.renderHeadDateCellHtml(e)); return n.join("") }, renderHeadDateCellHtml: function(t, e, n) { var i = this.view; return '<th class="fc-day-header ' + i.widgetHeaderClass + " fc-" + $t[t.day()] + '"' + (1 === this.rowCnt ? ' data-date="' + t.format("YYYY-MM-DD") + '"' : "") + (e > 1 ? ' colspan="' + e + '"' : "") + (n ? " " + n : "") + ">" + i.buildGotoAnchorHtml({ date: t, forceOff: this.rowCnt > 1 || 1 === this.colCnt }, tt(t.format(this.colHeadFormat))) + "</th>" }, renderBgTrHtml: function(t) { return "<tr>" + (this.isRTL ? "" : this.renderBgIntroHtml(t)) + this.renderBgCellsHtml(t) + (this.isRTL ? this.renderBgIntroHtml(t) : "") + "</tr>" }, renderBgIntroHtml: function(t) { return this.renderIntroHtml() }, renderBgCellsHtml: function(t) { var e, n, i = []; for (e = 0; e < this.colCnt; e++) n = this.getCellDate(t, e), i.push(this.renderBgCellHtml(n)); return i.join("") }, renderBgCellHtml: function(t, e) { var n = this.view, i = this.getDayClasses(t); return i.unshift("fc-day", n.widgetContentClass), '<td class="' + i.join(" ") + '" data-date="' + t.format("YYYY-MM-DD") + '"' + (e ? " " + e : "") + "></td>" }, renderIntroHtml: function() {}, bookendCells: function(t) { var e = this.renderIntroHtml(); e && (this.isRTL ? t.append(e) : t.prepend(e)) } }, me = jt.DayGrid = pe.extend(ve, { numbersVisible: !1, bottomCoordPadding: 0, rowEls: null, cellEls: null, helperEls: null, rowCoordCache: null, colCoordCache: null, renderDates: function(t) { var e, n, i = this.view, r = this.rowCnt, s = this.colCnt, o = ""; for (e = 0; e < r; e++) o += this.renderDayRowHtml(e, t); for (this.el.html(o), this.rowEls = this.el.find(".fc-row"), this.cellEls = this.el.find(".fc-day"), this.rowCoordCache = new ce({ els: this.rowEls, isVertical: !0 }), this.colCoordCache = new ce({ els: this.cellEls.slice(0, this.colCnt), isHorizontal: !0 }), e = 0; e < r; e++) for (n = 0; n < s; n++) i.trigger("dayRender", null, this.getCellDate(e, n), this.getCellEl(e, n)) }, unrenderDates: function() { this.removeSegPopover() }, renderBusinessHours: function() { var t = this.buildBusinessHourSegs(!0); this.renderFill("businessHours", t, "bgevent") }, unrenderBusinessHours: function() { this.unrenderFill("businessHours") }, renderDayRowHtml: function(t, e) { var n = this.view, i = ["fc-row", "fc-week", n.widgetContentClass]; return e && i.push("fc-rigid"), '<div class="' + i.join(" ") + '"><div class="fc-bg"><table>' + this.renderBgTrHtml(t) + '</table></div><div class="fc-content-skeleton"><table>' + (this.numbersVisible ? "<thead>" + this.renderNumberTrHtml(t) + "</thead>" : "") + "</table></div></div>" }, renderNumberTrHtml: function(t) { return "<tr>" + (this.isRTL ? "" : this.renderNumberIntroHtml(t)) + this.renderNumberCellsHtml(t) + (this.isRTL ? this.renderNumberIntroHtml(t) : "") + "</tr>" }, renderNumberIntroHtml: function(t) { return this.renderIntroHtml() }, renderNumberCellsHtml: function(t) { var e, n, i = []; for (e = 0; e < this.colCnt; e++) n = this.getCellDate(t, e), i.push(this.renderNumberCellHtml(n)); return i.join("") }, renderNumberCellHtml: function(t) { var e, n, i = ""; return this.view.dayNumbersVisible || this.view.cellWeekNumbersVisible ? (e = this.getDayClasses(t), e.unshift("fc-day-top"), this.view.cellWeekNumbersVisible && (n = "ISO" === t._locale._fullCalendar_weekCalc ? 1 : t._locale.firstDayOfWeek()), i += '<td class="' + e.join(" ") + '" data-date="' + t.format() + '">', this.view.cellWeekNumbersVisible && t.day() == n && (i += this.view.buildGotoAnchorHtml({ date: t, type: "week" }, { class: "fc-week-number" }, t.format("w"))), this.view.dayNumbersVisible && (i += this.view.buildGotoAnchorHtml(t, { class: "fc-day-number" }, t.date())), i += "</td>") : "<td/>" }, computeEventTimeFormat: function() { return this.view.opt("extraSmallTimeFormat") }, computeDisplayEventEnd: function() { return 1 == this.colCnt }, rangeUpdated: function() { this.updateDayTable() }, spanToSegs: function(t) { var e, n, i = this.sliceRangeByRow(t); for (e = 0; e < i.length; e++) n = i[e], this.isRTL ? (n.leftCol = this.daysPerRow - 1 - n.lastRowDayIndex, n.rightCol = this.daysPerRow - 1 - n.firstRowDayIndex) : (n.leftCol = n.firstRowDayIndex, n.rightCol = n.lastRowDayIndex); return i }, prepareHits: function() { this.colCoordCache.build(), this.rowCoordCache.build(), this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding }, releaseHits: function() { this.colCoordCache.clear(), this.rowCoordCache.clear() }, queryHit: function(t, e) { if (this.colCoordCache.isLeftInBounds(t) && this.rowCoordCache.isTopInBounds(e)) { var n = this.colCoordCache.getHorizontalIndex(t), i = this.rowCoordCache.getVerticalIndex(e); if (null != i && null != n) return this.getCellHit(i, n) } }, getHitSpan: function(t) { return this.getCellRange(t.row, t.col) }, getHitEl: function(t) { return this.getCellEl(t.row, t.col) }, getCellHit: function(t, e) { 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) } }, getCellEl: function(t, e) { return this.cellEls.eq(t * this.colCnt + e) }, renderDrag: function(t, e) { if (this.renderHighlight(this.eventToSpan(t)), e && e.component !== this) return this.renderEventLocationHelper(t, e) }, unrenderDrag: function() { this.unrenderHighlight(), this.unrenderHelper() }, renderEventResize: function(t, e) { return this.renderHighlight(this.eventToSpan(t)), this.renderEventLocationHelper(t, e) }, unrenderEventResize: function() { this.unrenderHighlight(), this.unrenderHelper() }, renderHelper: function(e, n) { var i, r = [], s = this.eventToSegs(e); return s = this.renderFgSegEls(s), i = this.renderSegRows(s), this.rowEls.each(function(e, s) { var o, l = t(s), a = t('<div class="fc-helper-skeleton"><table/></div>'); o = n && n.row === e ? n.el.position().top : l.find(".fc-content-skeleton tbody").position().top, a.css("top", o).find("table").append(i[e].tbodyEl), l.append(a), r.push(a[0]) }), this.helperEls = t(r) }, unrenderHelper: function() { this.helperEls && (this.helperEls.remove(), this.helperEls = null) }, fillSegTag: "td", renderFill: function(e, n, i) { var r, s, o, l = []; 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), l.push(o[0]); return this.elsByFill[e] = t(l), n }, renderFillRow: function(e, n, i) { var r, s, o = this.colCnt, l = n.leftCol, a = n.rightCol + 1; return i = i || e.toLowerCase(), r = t('<div class="fc-' + i + '-skeleton"><table><tr/></table></div>'), s = r.find("tr"), l > 0 && s.append('<td colspan="' + l + '"/>'), s.append(n.el.attr("colspan", a - l)), a < o && s.append('<td colspan="' + (o - a) + '"/>'), this.bookendCells(s), r } }); me.mixin({ rowStructs: null, unrenderEvents: function() { this.removeSegPopover(), pe.prototype.unrenderEvents.apply(this, arguments) }, getEventSegs: function() { return pe.prototype.getEventSegs.call(this).concat(this.popoverSegs || []) }, renderBgSegs: function(e) { var n = t.grep(e, function(t) { return t.event.allDay }); return pe.prototype.renderBgSegs.call(this, n) }, renderFgSegs: function(e) { var n; return e = this.renderFgSegEls(e), n = this.rowStructs = this.renderSegRows(e), this.rowEls.each(function(e, i) { t(i).find(".fc-content-skeleton > table").append(n[e].tbodyEl) }), e }, unrenderFgSegs: function() { for (var t, e = this.rowStructs || []; t = e.pop();) t.tbodyEl.remove(); this.rowStructs = null }, renderSegRows: function(t) { var e, n, i = []; for (e = this.groupSegRows(t), n = 0; n < e.length; n++) i.push(this.renderSegRow(n, e[n])); return i }, fgSegHtml: function(t, e) { var n, i, r = this.view, s = t.event, o = r.isEventDraggable(s), l = !e && s.allDay && t.isStart && r.isEventResizableFromStart(s), a = !e && s.allDay && t.isEnd && r.isEventResizableFromEnd(s), u = this.getSegClasses(t, o, l || a), d = nt(this.getSegSkinCss(t)), c = ""; return u.unshift("fc-day-grid-event", "fc-h-event"), t.isStart && (n = this.getEventTimeText(s), n && (c = '<span class="fc-time">' + tt(n) + "</span>")), i = '<span class="fc-title">' + (tt(s.title || "") || " ") + "</span>", '<a class="' + u.join(" ") + '"' + (s.url ? ' href="' + tt(s.url) + '"' : "") + (d ? ' style="' + d + '"' : "") + '><div class="fc-content">' + (this.isRTL ? i + " " + c : c + " " + i) + "</div>" + (l ? '<div class="fc-resizer fc-start-resizer" />' : "") + (a ? '<div class="fc-resizer fc-end-resizer" />' : "") + "</a>" }, renderSegRow: function(e, n) { function i(e) { for (; o < e;) d = (m[r - 1] || [])[o], d ? d.attr("rowspan", parseInt(d.attr("rowspan") || 1, 10) + 1) : (d = t("<td/>"), l.append(d)), v[r][o] = d, m[r][o] = d, o++ } var r, s, o, l, a, u, d, c = this.colCnt, h = this.buildSegLevels(n), f = Math.max(1, h.length), g = t("<tbody/>"), p = [], v = [], m = []; for (r = 0; r < f; r++) { if (s = h[r], o = 0, l = t("<tr/>"), p.push([]), v.push([]), m.push([]), s) for (a = 0; a < s.length; a++) { for (u = s[a], i(u.leftCol), d = t('<td class="fc-event-container"/>').append(u.el), u.leftCol != u.rightCol ? d.attr("colspan", u.rightCol - u.leftCol + 1) : m[r][o] = d; o <= u.rightCol;) v[r][o] = d, p[r][o] = u, o++; l.append(d) } i(c), this.bookendCells(l), g.append(l) } return { row: e, tbodyEl: g, cellMatrix: v, segMatrix: p, segLevels: h, segs: n } }, buildSegLevels: function(t) { var e, n, i, r = []; for (this.sortEventSegs(t), e = 0; e < t.length; e++) { for (n = t[e], i = 0; i < r.length && Lt(n, r[i]); i++); n.level = i, (r[i] || (r[i] = [])).push(n) } for (i = 0; i < r.length; i++) r[i].sort(Bt); return r }, groupSegRows: function(t) { var e, n = []; for (e = 0; e < this.rowCnt; e++) n.push([]); for (e = 0; e < t.length; e++) n[t[e].row].push(t[e]); return n } }), me.mixin({ segPopover: null, popoverSegs: null, removeSegPopover: function() { this.segPopover && this.segPopover.hide() }, limitRows: function(t) { var e, n, i = this.rowStructs || []; for (e = 0; e < i.length; e++) this.unlimitRow(e), n = !!t && ("number" == typeof t ? t : this.computeRowLevelLimit(e)), n !== !1 && this.limitRow(e, n) }, computeRowLevelLimit: function(e) { function n(e, n) { s = Math.max(s, t(n).outerHeight()) } var i, r, s, o = this.rowEls.eq(e), l = o.height(), a = this.rowStructs[e].tbodyEl.children(); for (i = 0; i < a.length; i++) if (r = a.eq(i).removeClass("fc-limited"), s = 0, r.find("> td > :first-child").each(n), r.position().top + s > l) return i; return !1 }, limitRow: function(e, n) { function i(i) { for (; D < i;) u = S.getCellSegs(e, D, n), u.length && (h = s[n - 1][D], y = S.renderMoreLink(e, D, u), m = t("<div/>").append(y), h.append(m), E.push(m[0])), D++ } var r, s, o, l, a, u, d, c, h, f, g, p, v, m, y, S = this, w = this.rowStructs[e], E = [], D = 0; if (n && n < w.segLevels.length) { for (r = w.segLevels[n - 1], s = w.cellMatrix, o = w.tbodyEl.children().slice(n).addClass("fc-limited").get(), l = 0; l < r.length; l++) { for (a = r[l], i(a.leftCol), c = [], d = 0; D <= a.rightCol;) u = this.getCellSegs(e, D, n), c.push(u), d += u.length, D++; if (d) { for (h = s[n - 1][a.leftCol], f = h.attr("rowspan") || 1, g = [], p = 0; p < c.length; p++) v = t('<td class="fc-more-cell"/>').attr("rowspan", f), u = c[p], y = this.renderMoreLink(e, a.leftCol + p, [a].concat(u)), m = t("<div/>").append(y), v.append(m), g.push(v[0]), E.push(v[0]); h.addClass("fc-limited").after(t(g)), o.push(h[0]) } } i(this.colCnt), w.moreEls = t(E), w.limitedEls = t(o) } }, unlimitRow: function(t) { var e = this.rowStructs[t]; e.moreEls && (e.moreEls.remove(), e.moreEls = null), e.limitedEls && (e.limitedEls.removeClass("fc-limited"), e.limitedEls = null) }, renderMoreLink: function(e, n, i) { var r = this, s = this.view; return t('<a class="fc-more"/>').text(this.getMoreLinkText(i.length)).on("click", function(o) { var l = s.opt("eventLimitClick"), a = r.getCellDate(e, n), u = t(this), d = r.getCellEl(e, n), c = r.getCellSegs(e, n), h = r.resliceDaySegs(c, a), f = r.resliceDaySegs(i, a); "function" == typeof l && (l = s.trigger("eventLimitClick", null, { date: a, dayEl: d, moreEl: u, segs: h, hiddenSegs: f }, o)), "popover" === l ? r.showSegPopover(e, n, u, h) : "string" == typeof l && s.calendar.zoomTo(a, l) }) }, showSegPopover: function(t, e, n, i) { var r, s, o = this, l = this.view, a = n.parent(); r = 1 == this.rowCnt ? l.el : this.rowEls.eq(t), s = { className: "fc-more-popover", content: this.renderSegPopoverContent(t, e, i), parentEl: this.view.el, top: r.offset().top, autoHide: !0, viewportConstrain: l.opt("popoverViewportConstrain"), hide: function() { o.segPopover.removeElement(), o.segPopover = null, o.popoverSegs = null } }, this.isRTL ? s.right = a.offset().left + a.outerWidth() + 1 : s.left = a.offset().left - 1, this.segPopover = new de(s), this.segPopover.show(), this.bindSegHandlersToEl(this.segPopover.el) }, renderSegPopoverContent: function(e, n, i) { var r, s = this.view, o = s.opt("theme"), l = this.getCellDate(e, n).format(s.opt("dayPopoverFormat")), a = t('<div class="fc-header ' + s.widgetHeaderClass + '"><span class="fc-close ' + (o ? "ui-icon ui-icon-closethick" : "fc-icon fc-icon-x") + '"></span><span class="fc-title">' + tt(l) + '</span><div class="fc-clear"/></div><div class="fc-body ' + s.widgetContentClass + '"><div class="fc-event-container"></div></div>'), u = a.find(".fc-event-container"); for (i = this.renderFgSegEls(i, !0), this.popoverSegs = i, r = 0; r < i.length; r++) this.prepareHits(), i[r].hit = this.getCellHit(e, n), this.releaseHits(), u.append(i[r].el); return a }, resliceDaySegs: function(e, n) { var i = t.map(e, function(t) { return t.event }), r = n.clone(), s = r.clone().add(1, "days"), o = { start: r, end: s }; return e = this.eventsToSegs(i, function(t) { var e = F(t, o); return e ? [e] : [] }), this.sortEventSegs(e), e }, getMoreLinkText: function(t) { var e = this.view.opt("eventLimitText"); return "function" == typeof e ? e(t) : "+" + t + " " + e }, getCellSegs: function(t, e, n) { for (var i, r = this.rowStructs[t].segMatrix, s = n || 0, o = []; s < r.length;) i = r[s][e], i && o.push(i), s++; return o } }); var ye = jt.TimeGrid = pe.extend(ve, { slotDuration: null, snapDuration: null, snapsPerSlot: null, minTime: null, maxTime: null, labelFormat: null, labelInterval: null, colEls: null, slatContainerEl: null, slatEls: null, nowIndicatorEls: null, colCoordCache: null, slatCoordCache: null, constructor: function() { pe.apply(this, arguments), this.processOptions() }, renderDates: function() { this.el.html(this.renderHtml()), this.colEls = this.el.find(".fc-day"), this.slatContainerEl = this.el.find(".fc-slats"), this.slatEls = this.slatContainerEl.find("tr"), this.colCoordCache = new ce({ els: this.colEls, isHorizontal: !0 }), this.slatCoordCache = new ce({ els: this.slatEls, isVertical: !0 }), this.renderContentSkeleton() }, renderHtml: function() { return '<div class="fc-bg"><table>' + this.renderBgTrHtml(0) + '</table></div><div class="fc-slats"><table>' + this.renderSlatRowHtml() + "</table></div>" }, renderSlatRowHtml: function() { for (var t, n, i, r = this.view, s = this.isRTL, o = "", l = e.duration(+this.minTime); l < this.maxTime;) t = this.start.clone().time(l), n = ot(_(l, this.labelInterval)), i = '<td class="fc-axis fc-time ' + r.widgetContentClass + '" ' + r.axisStyleAttr() + ">" + (n ? "<span>" + tt(t.format(this.labelFormat)) + "</span>" : "") + "</td>", o += '<tr data-time="' + t.format("HH:mm:ss") + '"' + (n ? "" : ' class="fc-minor"') + ">" + (s ? "" : i) + '<td class="' + r.widgetContentClass + '"/>' + (s ? i : "") + "</tr>", l.add(this.slotDuration); return o }, processOptions: function() { var n, i = this.view, r = i.opt("slotDuration"), s = i.opt("snapDuration"); r = e.duration(r), s = s ? e.duration(s) : r, this.slotDuration = r, this.snapDuration = s, this.snapsPerSlot = r / s, this.minResizeDuration = s, this.minTime = e.duration(i.opt("minTime")), this.maxTime = e.duration(i.opt("maxTime")), n = i.opt("slotLabelFormat"), t.isArray(n) && (n = n[n.length - 1]), this.labelFormat = n || i.opt("smallTimeFormat"), n = i.opt("slotLabelInterval"), this.labelInterval = n ? e.duration(n) : this.computeLabelInterval(r) }, computeLabelInterval: function(t) { var n, i, r; for (n = Ne.length - 1; n >= 0; n--) if (i = e.duration(Ne[n]), r = _(i, t), ot(r) && r > 1) return i; return e.duration(t) }, computeEventTimeFormat: function() { return this.view.opt("noMeridiemTimeFormat") }, computeDisplayEventEnd: function() { return !0 }, prepareHits: function() { this.colCoordCache.build(), this.slatCoordCache.build() }, releaseHits: function() { this.colCoordCache.clear() }, queryHit: function(t, e) { var n = this.snapsPerSlot, i = this.colCoordCache, r = this.slatCoordCache; if (i.isLeftInBounds(t) && r.isTopInBounds(e)) { var s = i.getHorizontalIndex(t), o = r.getVerticalIndex(e); if (null != s && null != o) { var l = r.getTopOffset(o), a = r.getHeight(o), u = (e - l) / a, d = Math.floor(u * n), c = o * n + d, h = l + d / n * a, f = l + (d + 1) / n * a; return { col: s, snap: c, component: this, left: i.getLeftOffset(s), right: i.getRightOffset(s), top: h, bottom: f } } } }, getHitSpan: function(t) { var e, n = this.getCellDate(0, t.col), i = this.computeSnapTime(t.snap); return n.time(i), e = n.clone().add(this.snapDuration), { start: n, end: e } }, getHitEl: function(t) { return this.colEls.eq(t.col) }, rangeUpdated: function() { this.updateDayTable() }, computeSnapTime: function(t) { return e.duration(this.minTime + this.snapDuration * t) }, spanToSegs: function(t) { var e, n = this.sliceRangeByTimes(t); for (e = 0; e < n.length; e++) this.isRTL ? n[e].col = this.daysPerRow - 1 - n[e].dayIndex : n[e].col = n[e].dayIndex; return n }, sliceRangeByTimes: function(t) { var e, n, i, r, s = []; for (n = 0; n < this.daysPerRow; n++) i = this.dayDates[n].clone(), r = { start: i.clone().time(this.minTime), end: i.clone().time(this.maxTime) }, e = F(t, r), e && (e.dayIndex = n, s.push(e)); return s }, updateSize: function(t) { this.slatCoordCache.build(), t && this.updateSegVerticals([].concat(this.fgSegs || [], this.bgSegs || [], this.businessSegs || [])) }, getTotalSlatHeight: function() { return this.slatContainerEl.outerHeight() }, computeDateTop: function(t, n) { return this.computeTimeTop(e.duration(t - n.clone().stripTime())) }, computeTimeTop: function(t) { var e, n, i = this.slatEls.length, r = (t - this.minTime) / this.slotDuration; 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 }, renderDrag: function(t, e) { return e ? this.renderEventLocationHelper(t, e) : void this.renderHighlight(this.eventToSpan(t)) }, unrenderDrag: function() { this.unrenderHelper(), this.unrenderHighlight() }, renderEventResize: function(t, e) { return this.renderEventLocationHelper(t, e) }, unrenderEventResize: function() { this.unrenderHelper() }, renderHelper: function(t, e) { return this.renderHelperSegs(this.eventToSegs(t), e) }, unrenderHelper: function() { this.unrenderHelperSegs() }, renderBusinessHours: function() { this.renderBusinessSegs(this.buildBusinessHourSegs()) }, unrenderBusinessHours: function() { this.unrenderBusinessSegs() }, getNowIndicatorUnit: function() { return "minute" }, renderNowIndicator: function(e) { var n, i = this.spanToSegs({ start: e, end: e }), r = this.computeDateTop(e, e), s = []; 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]); 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) }, unrenderNowIndicator: function() { this.nowIndicatorEls && (this.nowIndicatorEls.remove(), this.nowIndicatorEls = null) }, renderSelection: function(t) { this.view.opt("selectHelper") ? this.renderEventLocationHelper(t) : this.renderHighlight(t) }, unrenderSelection: function() { this.unrenderHelper(), this.unrenderHighlight() }, renderHighlight: function(t) { this.renderHighlightSegs(this.spanToSegs(t)) }, unrenderHighlight: function() { this.unrenderHighlightSegs() } }); ye.mixin({ colContainerEls: null, fgContainerEls: null, bgContainerEls: null, helperContainerEls: null, highlightContainerEls: null, businessContainerEls: null, fgSegs: null, bgSegs: null, helperSegs: null, highlightSegs: null, businessSegs: null, renderContentSkeleton: function() { var e, n, i = ""; for (e = 0; e < this.colCnt; e++) i += '<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>'; n = t('<div class="fc-content-skeleton"><table><tr>' + i + "</tr></table></div>"), this.colContainerEls = n.find(".fc-content-col"), this.helperContainerEls = n.find(".fc-helper-container"), this.fgContainerEls = n.find(".fc-event-container:not(.fc-helper-container)"), this.bgContainerEls = n.find(".fc-bgevent-container"), this.highlightContainerEls = n.find(".fc-highlight-container"), this.businessContainerEls = n.find(".fc-business-container"), this.bookendCells(n.find("tr")), this.el.append(n) }, renderFgSegs: function(t) { return t = this.renderFgSegsIntoContainers(t, this.fgContainerEls), this.fgSegs = t, t }, unrenderFgSegs: function() { this.unrenderNamedSegs("fgSegs") }, renderHelperSegs: function(e, n) { var i, r, s, o = []; for (e = this.renderFgSegsIntoContainers(e, this.helperContainerEls), i = 0; i < e.length; i++) 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]); return this.helperSegs = e, t(o) }, unrenderHelperSegs: function() { this.unrenderNamedSegs("helperSegs") }, renderBgSegs: function(t) { return t = this.renderFillSegEls("bgEvent", t), this.updateSegVerticals(t), this.attachSegsByCol(this.groupSegsByCol(t), this.bgContainerEls), this.bgSegs = t, t }, unrenderBgSegs: function() { this.unrenderNamedSegs("bgSegs") }, renderHighlightSegs: function(t) { t = this.renderFillSegEls("highlight", t), this.updateSegVerticals(t), this.attachSegsByCol(this.groupSegsByCol(t), this.highlightContainerEls), this.highlightSegs = t }, unrenderHighlightSegs: function() { this.unrenderNamedSegs("highlightSegs") }, renderBusinessSegs: function(t) { t = this.renderFillSegEls("businessHours", t), this.updateSegVerticals(t), this.attachSegsByCol(this.groupSegsByCol(t), this.businessContainerEls), this.businessSegs = t }, unrenderBusinessSegs: function() { this.unrenderNamedSegs("businessSegs") }, groupSegsByCol: function(t) { var e, n = []; for (e = 0; e < this.colCnt; e++) n.push([]); for (e = 0; e < t.length; e++) n[t[e].col].push(t[e]); return n }, attachSegsByCol: function(t, e) { var n, i, r; for (n = 0; n < this.colCnt; n++) for (i = t[n], r = 0; r < i.length; r++) e.eq(n).append(i[r].el) }, unrenderNamedSegs: function(t) { var e, n = this[t]; if (n) { for (e = 0; e < n.length; e++) n[e].el.remove(); this[t] = null } }, renderFgSegsIntoContainers: function(t, e) { var n, i; for (t = this.renderFgSegEls(t), n = this.groupSegsByCol(t), i = 0; i < this.colCnt; i++) this.updateFgSegCoords(n[i]); return this.attachSegsByCol(n, e), t }, fgSegHtml: function(t, e) { var n, i, r, s = this.view, o = t.event, l = s.isEventDraggable(o), a = !e && t.isStart && s.isEventResizableFromStart(o), u = !e && t.isEnd && s.isEventResizableFromEnd(o), d = this.getSegClasses(t, l, a || u), c = nt(this.getSegSkinCss(t)); return d.unshift("fc-time-grid-event", "fc-v-event"), s.isMultiDayEvent(o) ? (t.isStart || t.isEnd) && (n = this.getEventTimeText(t), i = this.getEventTimeText(t, "LT"), r = this.getEventTimeText(t, null, !1)) : (n = this.getEventTimeText(o), i = this.getEventTimeText(o, "LT"), r = this.getEventTimeText(o, null, !1)), '<a class="' + d.join(" ") + '"' + (o.url ? ' href="' + tt(o.url) + '"' : "") + (c ? ' style="' + c + '"' : "") + '><div class="fc-content">' + (n ? '<div class="fc-time" data-start="' + tt(r) + '" data-full="' + tt(i) + '"><span>' + tt(n) + "</span></div>" : "") + (o.title ? '<div class="fc-title">' + tt(o.title) + "</div>" : "") + '</div><div class="fc-bg"/>' + (u ? '<div class="fc-resizer fc-end-resizer" />' : "") + "</a>" }, updateSegVerticals: function(t) { this.computeSegVerticals(t), this.assignSegVerticals(t) }, computeSegVerticals: function(t) { var e, n; for (e = 0; e < t.length; e++) n = t[e], n.top = this.computeDateTop(n.start, n.start), n.bottom = this.computeDateTop(n.end, n.start) }, assignSegVerticals: function(t) { var e, n; for (e = 0; e < t.length; e++) n = t[e], n.el.css(this.generateSegVerticalCss(n)) }, generateSegVerticalCss: function(t) { return { top: t.top, bottom: -t.bottom } }, updateFgSegCoords: function(t) { this.computeSegVerticals(t), this.computeFgSegHorizontals(t), this.assignSegVerticals(t), this.assignFgSegHorizontals(t) }, computeFgSegHorizontals: function(t) { var e, n, i; if (this.sortEventSegs(t), e = zt(t), Ft(e), n = e[0]) { for (i = 0; i < n.length; i++) Nt(n[i]); for (i = 0; i < n.length; i++) this.computeFgSegForwardBack(n[i], 0, 0) } }, computeFgSegForwardBack: function(t, e, n) { var i, r = t.forwardSegs; if (void 0 === t.forwardCoord) for (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; i < r.length; i++) this.computeFgSegForwardBack(r[i], 0, t.forwardCoord) }, sortForwardSegs: function(t) { t.sort(lt(this, "compareForwardSegs")) }, compareForwardSegs: function(t, e) { return e.forwardPressure - t.forwardPressure || (t.backwardCoord || 0) - (e.backwardCoord || 0) || this.compareEventSegs(t, e) }, assignFgSegHorizontals: function(t) { var e, n; 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") }, generateFgSegHorizontalCss: function(t) { var e, n, i = this.view.opt("slotEventOverlap"), r = t.backwardCoord, s = t.forwardCoord, o = this.generateSegVerticalCss(t); return i && (s = Math.min(1, r + 2 * (s - r))), this.isRTL ? (e = 1 - s, n = r) : (e = r, n = 1 - s), o.zIndex = t.level + 1, o.left = 100 * e + "%", o.right = 100 * n + "%", i && t.forwardPressure && (o[this.isRTL ? "marginLeft" : "marginRight"] = 20), o } }); var Se = jt.View = wt.extend(le, ae, { type: null, name: null, title: null, calendar: null, options: null, el: null, displaying: null, isSkeletonRendered: !1, isEventsRendered: !1, start: null, end: null, intervalStart: null, intervalEnd: null, intervalDuration: null, intervalUnit: null, isRTL: !1, isSelected: !1, selectedEvent: null, eventOrderSpecs: null, widgetHeaderClass: null, widgetContentClass: null, highlightStateClass: null, nextDayThreshold: null, isHiddenDayHash: null, isNowIndicatorRendered: null, initialNowDate: null, initialNowQueriedMs: null, nowIndicatorTimeoutID: null, nowIndicatorIntervalID: null, constructor: function(t, n, i, r) { this.calendar = t, this.type = this.name = n, this.options = i, this.intervalDuration = r || e.duration(1, "day"), this.nextDayThreshold = e.duration(this.opt("nextDayThreshold")), this.initThemingProps(), this.initHiddenDays(), this.isRTL = this.opt("isRTL"), this.eventOrderSpecs = M(this.opt("eventOrder")), this.initialize() }, initialize: function() {}, opt: function(t) { return this.options[t] }, trigger: function(t, e) { var n = this.calendar; return n.trigger.apply(n, [t, e || this].concat(Array.prototype.slice.call(arguments, 2), [this])) }, setDate: function(t) { this.setRange(this.computeRange(t)) }, setRange: function(e) { t.extend(this, e), this.updateTitle() }, computeRange: function(t) { var e, n, i = O(this.intervalDuration), r = t.clone().startOf(i), s = r.clone().add(this.intervalDuration); return /year|month|week|day/.test(i) ? (r.stripTime(), s.stripTime()) : (r.hasTime() || (r = this.calendar.time(0)), s.hasTime() || (s = this.calendar.time(0))), e = r.clone(), e = this.skipHiddenDays(e), n = s.clone(), n = this.skipHiddenDays(n, -1, !0), { intervalUnit: i, intervalStart: r, intervalEnd: s, start: e, end: n } }, computePrevDate: function(t) { return this.massageCurrentDate(t.clone().startOf(this.intervalUnit).subtract(this.intervalDuration), -1) }, computeNextDate: function(t) { return this.massageCurrentDate(t.clone().startOf(this.intervalUnit).add(this.intervalDuration)) }, massageCurrentDate: function(t, e) { return this.intervalDuration.as("days") <= 1 && this.isHiddenDay(t) && (t = this.skipHiddenDays(t, e), t.startOf("day")), t }, updateTitle: function() { this.title = this.computeTitle() }, computeTitle: function() { return this.formatRange({ start: this.calendar.applyTimezone(this.intervalStart), end: this.calendar.applyTimezone(this.intervalEnd) }, this.opt("titleFormat") || this.computeTitleFormat(), this.opt("titleRangeSeparator")) }, computeTitleFormat: function() { return "year" == this.intervalUnit ? "YYYY" : "month" == this.intervalUnit ? this.opt("monthYearFormat") : this.intervalDuration.as("days") > 1 ? "ll" : "LL" }, formatRange: function(t, e, n) { var i = t.end; return i.hasTime() || (i = i.clone().subtract(1)), pt(t.start, i, e, n, this.opt("isRTL")) }, getAllDayHtml: function() { return this.opt("allDayHtml") || tt(this.opt("allDayText")) }, buildGotoAnchorHtml: function(e, n, i) { var r, s, o, l; return t.isPlainObject(e) ? (r = e.date, s = e.type, o = e.forceOff) : r = e, r = jt.moment(r), l = { date: r.format("YYYY-MM-DD"), type: s || "day" }, "string" == typeof n && (i = n, n = null), n = n ? " " + it(n) : "", i = i || "", !o && this.opt("navLinks") ? "<a" + n + ' data-goto="' + tt(JSON.stringify(l)) + '">' + i + "</a>" : "<span" + n + ">" + i + "</span>" }, setElement: function(t) { this.el = t, this.bindGlobalHandlers() }, removeElement: function() { this.clear(), this.isSkeletonRendered && (this.unrenderSkeleton(), this.isSkeletonRendered = !1), this.unbindGlobalHandlers(), this.el.remove() }, display: function(t, e) { var n = this, i = null; return null != e && this.displaying && (i = this.queryScroll()), this.calendar.freezeContentHeight(), ut(this.clear(), function() { return n.displaying = ut(n.displayView(t), function() { null != e ? n.setScroll(e) : n.forceScroll(n.computeInitialScroll(i)), n.calendar.unfreezeContentHeight(), n.triggerRender() }) }) }, clear: function() { var e = this, n = this.displaying; return n ? ut(n, function() { return e.displaying = null, e.clearEvents(), e.clearView() }) : t.when() }, displayView: function(t) { this.isSkeletonRendered || (this.renderSkeleton(), this.isSkeletonRendered = !0), t && this.setDate(t), this.render && this.render(), this.renderDates(), this.updateSize(), this.renderBusinessHours(), this.startNowIndicator() }, clearView: function() { this.unselect(), this.stopNowIndicator(), this.triggerUnrender(), this.unrenderBusinessHours(), this.unrenderDates(), this.destroy && this.destroy() }, renderSkeleton: function() {}, unrenderSkeleton: function() {}, renderDates: function() {}, unrenderDates: function() {}, triggerRender: function() { this.trigger("viewRender", this, this, this.el) }, triggerUnrender: function() { this.trigger("viewDestroy", this, this, this.el) }, bindGlobalHandlers: function() { this.listenTo(t(document), "mousedown", this.handleDocumentMousedown), this.listenTo(t(document), "touchstart", this.processUnselect) }, unbindGlobalHandlers: function() { this.stopListeningTo(t(document)) }, initThemingProps: function() { var t = this.opt("theme") ? "ui" : "fc"; this.widgetHeaderClass = t + "-widget-header", this.widgetContentClass = t + "-widget-content", this.highlightStateClass = t + "-state-highlight" }, renderBusinessHours: function() {}, unrenderBusinessHours: function() {}, startNowIndicator: function() { var t, n, i, r = this; this.opt("nowIndicator") && (t = this.getNowIndicatorUnit(), t && (n = lt(this, "updateNowIndicator"), this.initialNowDate = this.calendar.getNow(), this.initialNowQueriedMs = +new Date, this.renderNowIndicator(this.initialNowDate), this.isNowIndicatorRendered = !0, i = this.initialNowDate.clone().startOf(t).add(1, t) - this.initialNowDate, this.nowIndicatorTimeoutID = setTimeout(function() { r.nowIndicatorTimeoutID = null, n(), i = +e.duration(1, t), i = Math.max(100, i), r.nowIndicatorIntervalID = setInterval(n, i) }, i))) }, updateNowIndicator: function() { this.isNowIndicatorRendered && (this.unrenderNowIndicator(), this.renderNowIndicator(this.initialNowDate.clone().add(new Date - this.initialNowQueriedMs))) }, stopNowIndicator: function() { this.isNowIndicatorRendered && (this.nowIndicatorTimeoutID && (clearTimeout(this.nowIndicatorTimeoutID), this.nowIndicatorTimeoutID = null), this.nowIndicatorIntervalID && (clearTimeout(this.nowIndicatorIntervalID), this.nowIndicatorIntervalID = null), this.unrenderNowIndicator(), this.isNowIndicatorRendered = !1) }, getNowIndicatorUnit: function() {}, renderNowIndicator: function(t) {}, unrenderNowIndicator: function() {}, updateSize: function(t) { var e; t && (e = this.queryScroll()), this.updateHeight(t), this.updateWidth(t), this.updateNowIndicator(), t && this.setScroll(e) }, updateWidth: function(t) {}, updateHeight: function(t) { var e = this.calendar; this.setHeight(e.getSuggestedViewHeight(), e.isHeightAuto()) }, setHeight: function(t, e) {}, computeInitialScroll: function(t) { return 0 }, queryScroll: function() {}, setScroll: function(t) {}, forceScroll: function(t) { var e = this; this.setScroll(t), setTimeout(function() { e.setScroll(t) }, 0) }, displayEvents: function(t) { var e = this.queryScroll(); this.clearEvents(), this.renderEvents(t), this.isEventsRendered = !0, this.setScroll(e), this.triggerEventRender() }, clearEvents: function() { var t; this.isEventsRendered && (t = this.queryScroll(), this.triggerEventUnrender(), this.destroyEvents && this.destroyEvents(), this.unrenderEvents(), this.setScroll(t), this.isEventsRendered = !1) }, renderEvents: function(t) {}, unrenderEvents: function() {}, triggerEventRender: function() { this.renderedEventSegEach(function(t) { this.trigger("eventAfterRender", t.event, t.event, t.el) }), this.trigger("eventAfterAllRender") }, triggerEventUnrender: function() { this.renderedEventSegEach(function(t) { this.trigger("eventDestroy", t.event, t.event, t.el) }) }, resolveEventEl: function(e, n) { var i = this.trigger("eventRender", e, e, n); return i === !1 ? n = null : i && i !== !0 && (n = t(i)), n }, showEvent: function(t) { this.renderedEventSegEach(function(t) { t.el.css("visibility", "") }, t) }, hideEvent: function(t) { this.renderedEventSegEach(function(t) { t.el.css("visibility", "hidden") }, t) }, renderedEventSegEach: function(t, e) { var n, i = this.getEventSegs(); for (n = 0; n < i.length; n++) e && i[n].event._id !== e._id || i[n].el && t.call(this, i[n]) }, getEventSegs: function() { return [] }, isEventDraggable: function(t) { return this.isEventStartEditable(t) }, isEventStartEditable: function(t) { return J(t.startEditable, (t.source || {}).startEditable, this.opt("eventStartEditable"), this.isEventGenerallyEditable(t)) }, isEventGenerallyEditable: function(t) { return J(t.editable, (t.source || {}).editable, this.opt("editable")) }, reportEventDrop: function(t, e, n, i, r) { var s = this.calendar, o = s.mutateEvent(t, e, n), l = function() { o.undo(), s.reportEventChange() }; this.triggerEventDrop(t, o.dateDelta, l, i, r), s.reportEventChange() }, triggerEventDrop: function(t, e, n, i, r) { this.trigger("eventDrop", i[0], t, e, n, r, {}) }, reportExternalDrop: function(e, n, i, r, s) { var o, l, a = e.eventProps; a && (o = t.extend({}, a, n), l = this.calendar.renderEvent(o, e.stick)[0]), this.triggerExternalDrop(l, n, i, r, s) }, triggerExternalDrop: function(t, e, n, i, r) { this.trigger("drop", n[0], e.start, i, r), t && this.trigger("eventReceive", null, t) }, renderDrag: function(t, e) {}, unrenderDrag: function() {}, isEventResizableFromStart: function(t) { return this.opt("eventResizableFromStart") && this.isEventResizable(t) }, isEventResizableFromEnd: function(t) { return this.isEventResizable(t) }, isEventResizable: function(t) { var e = t.source || {}; return J(t.durationEditable, e.durationEditable, this.opt("eventDurationEditable"), t.editable, e.editable, this.opt("editable")) }, reportEventResize: function(t, e, n, i, r) { var s = this.calendar, o = s.mutateEvent(t, e, n), l = function() { o.undo(), s.reportEventChange() }; this.triggerEventResize(t, o.durationDelta, l, i, r), s.reportEventChange() }, triggerEventResize: function(t, e, n, i, r) { this.trigger("eventResize", i[0], t, e, n, r, {}) }, select: function(t, e) { this.unselect(e), this.renderSelection(t), this.reportSelection(t, e) }, renderSelection: function(t) {}, reportSelection: function(t, e) { this.isSelected = !0, this.triggerSelect(t, e) }, triggerSelect: function(t, e) { this.trigger("select", null, this.calendar.applyTimezone(t.start), this.calendar.applyTimezone(t.end), e) }, unselect: function(t) { this.isSelected && (this.isSelected = !1, this.destroySelection && this.destroySelection(), this.unrenderSelection(), this.trigger("unselect", null, t)) }, unrenderSelection: function() {}, selectEvent: function(t) { this.selectedEvent && this.selectedEvent === t || (this.unselectEvent(), this.renderedEventSegEach(function(t) { t.el.addClass("fc-selected") }, t), this.selectedEvent = t) }, unselectEvent: function() { this.selectedEvent && (this.renderedEventSegEach(function(t) { t.el.removeClass("fc-selected") }, this.selectedEvent), this.selectedEvent = null) }, isEventSelected: function(t) { return this.selectedEvent && this.selectedEvent._id === t._id }, handleDocumentMousedown: function(t) { S(t) && this.processUnselect(t) }, processUnselect: function(t) { this.processRangeUnselect(t), this.processEventUnselect(t) }, processRangeUnselect: function(e) { var n; this.isSelected && this.opt("unselectAuto") && (n = this.opt("unselectCancel"), n && t(e.target).closest(n).length || this.unselect(e)) }, processEventUnselect: function(e) { this.selectedEvent && (t(e.target).closest(".fc-selected").length || this.unselectEvent()) }, triggerDayClick: function(t, e, n) { this.trigger("dayClick", e, this.calendar.applyTimezone(t.start), n) }, initHiddenDays: function() { var e, n = this.opt("hiddenDays") || [], i = [], r = 0; for (this.opt("weekends") === !1 && n.push(0, 6), e = 0; e < 7; e++)(i[e] = t.inArray(e, n) !== -1) || r++; if (!r) throw "invalid hiddenDays"; this.isHiddenDayHash = i }, isHiddenDay: function(t) { return e.isMoment(t) && (t = t.day()), this.isHiddenDayHash[t] }, skipHiddenDays: function(t, e, n) { var i = t.clone(); for (e = e || 1; this.isHiddenDayHash[(i.day() + (n ? e : 0) + 7) % 7];) i.add(e, "days"); return i }, computeDayRange: function(t) { var e, n = t.start.clone().stripTime(), i = t.end, r = null; return i && (r = i.clone().stripTime(), e = +i.time(), e && e >= this.nextDayThreshold && r.add(1, "days")), (!i || r <= n) && (r = n.clone().add(1, "days")), { start: n, end: r } }, isMultiDayEvent: function(t) { var e = this.computeDayRange(t); return e.end.diff(e.start, "days") > 1 } }), we = jt.Scroller = wt.extend({ el: null, scrollEl: null, overflowX: null, overflowY: null, constructor: function(t) { t = t || {}, this.overflowX = t.overflowX || t.overflow || "auto", this.overflowY = t.overflowY || t.overflow || "auto" }, render: function() { this.el = this.renderEl(), this.applyOverflow() }, renderEl: function() { return this.scrollEl = t('<div class="fc-scroller"></div>') }, clear: function() { this.setHeight("auto"), this.applyOverflow() }, destroy: function() { this.el.remove() }, applyOverflow: function() { this.scrollEl.css({ "overflow-x": this.overflowX, "overflow-y": this.overflowY }) }, lockOverflow: function(t) { var e = this.overflowX, n = this.overflowY; t = t || this.getScrollbarWidths(), "auto" === e && (e = t.top || t.bottom || this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth ? "scroll" : "hidden"), "auto" === n && (n = t.left || t.right || this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight ? "scroll" : "hidden"), this.scrollEl.css({ "overflow-x": e, "overflow-y": n }) }, setHeight: function(t) { this.scrollEl.height(t) }, getScrollTop: function() { return this.scrollEl.scrollTop() }, setScrollTop: function(t) { this.scrollEl.scrollTop(t) }, getClientWidth: function() { return this.scrollEl[0].clientWidth }, getClientHeight: function() { return this.scrollEl[0].clientHeight }, getScrollbarWidths: function() { return p(this.scrollEl) } }), Ee = jt.Calendar = wt.extend({ dirDefaults: null, localeDefaults: null, overrides: null, dynamicOverrides: null, options: null, viewSpecCache: null, view: null, header: null, loadingLevel: 0, constructor: Ot, initialize: function() {}, populateOptionsHash: function() { var t, e, i, r; t = J(this.dynamicOverrides.locale, this.overrides.locale), e = De[t], e || (t = Ee.defaults.locale, e = De[t] || {}), i = J(this.dynamicOverrides.isRTL, this.overrides.isRTL, e.isRTL, Ee.defaults.isRTL), r = i ? Ee.rtlDefaults : {}, this.dirDefaults = r, this.localeDefaults = e, this.options = n([Ee.defaults, r, e, this.overrides, this.dynamicOverrides]), Vt(this.options) }, getViewSpec: function(t) { var e = this.viewSpecCache; return e[t] || (e[t] = this.buildViewSpec(t)) }, getUnitViewSpec: function(e) { var n, i, r; if (t.inArray(e, Xt) != -1) for (n = this.header.getViewsWithButtons(), t.each(jt.views, function(t) { n.push(t) }), i = 0; i < n.length; i++) if (r = this.getViewSpec(n[i]), r && r.singleUnit == e) return r }, buildViewSpec: function(t) { for (var i, r, s, o, l = this.overrides.views || {}, a = [], u = [], d = [], c = t; c;) i = Ut[c], r = l[c], c = null, "function" == typeof i && (i = { class: i }), i && (a.unshift(i), u.unshift(i.defaults || {}), s = s || i.duration, c = c || i.type), r && (d.unshift(r), s = s || r.duration, c = c || r.type); return i = q(a), i.type = t, !!i.class && (s && (s = e.duration(s), s.valueOf() && (i.duration = s, o = O(s), 1 === s.as(o) && (i.singleUnit = o, d.unshift(l[o] || {})))), i.defaults = n(u), i.overrides = n(d), this.buildViewSpecOptions(i), this.buildViewSpecButtonText(i, t), i) }, buildViewSpecOptions: function(t) { t.options = n([Ee.defaults, t.defaults, this.dirDefaults, this.localeDefaults, this.overrides, t.overrides, this.dynamicOverrides]), Vt(t.options) }, buildViewSpecButtonText: function(t, e) { function n(n) { var i = n.buttonText || {}; return i[e] || (t.buttonTextKey ? i[t.buttonTextKey] : null) || (t.singleUnit ? i[t.singleUnit] : null) } t.buttonTextOverride = n(this.dynamicOverrides) || n(this.overrides) || t.overrides.buttonText, t.buttonTextDefault = n(this.localeDefaults) || n(this.dirDefaults) || t.defaults.buttonText || n(Ee.defaults) || (t.duration ? this.humanizeDuration(t.duration) : null) || e }, instantiateView: function(t) { var e = this.getViewSpec(t); return new e.class(this, t, e.options, e.duration) }, isValidViewType: function(t) { return Boolean(this.getViewSpec(t)) }, pushLoading: function() { this.loadingLevel++ || this.trigger("loading", null, !0, this.view) }, popLoading: function() { --this.loadingLevel || this.trigger("loading", null, !1, this.view) }, buildSelectSpan: function(t, e) { var n, i = this.moment(t).stripZone(); return n = e ? this.moment(e).stripZone() : i.hasTime() ? i.clone().add(this.defaultTimedEventDuration) : i.clone().add(this.defaultAllDayEventDuration), { start: i, end: n } } }); Ee.mixin(le), Ee.mixin({ optionHandlers: null, bindOption: function(t, e) { this.bindOptions([t], e) }, bindOptions: function(t, e) { var n, i = { func: e, names: t }; for (n = 0; n < t.length; n++) this.registerOptionHandlerObj(t[n], i); this.triggerOptionHandlerObj(i) }, registerOptionHandlerObj: function(t, e) { (this.optionHandlers[t] || (this.optionHandlers[t] = [])).push(e) }, triggerOptionHandlers: function(t) { var e, n = this.optionHandlers[t] || []; for (e = 0; e < n.length; e++) this.triggerOptionHandlerObj(n[e]) }, triggerOptionHandlerObj: function(t) { var e, n = t.names, i = []; for (e = 0; e < n.length; e++) i.push(this.options[n[e]]); t.func.apply(this, i) } }), Ee.defaults = { titleRangeSeparator: " – ", monthYearFormat: "MMMM YYYY", defaultTimedEventDuration: "02:00:00", defaultAllDayEventDuration: { days: 1 }, forceEventDuration: !1, nextDayThreshold: "09:00:00", defaultView: "month", aspectRatio: 1.35, header: { left: "title", center: "", right: "today prev,next" }, weekends: !0, weekNumbers: !1, weekNumberTitle: "W", weekNumberCalculation: "local", scrollTime: "06:00:00", lazyFetching: !0, startParam: "start", endParam: "end", timezoneParam: "timezone", timezone: !1, isRTL: !1, buttonText: { prev: "prev", next: "next", prevYear: "prev year", nextYear: "next year", year: "year", today: "today", month: "month", week: "week", day: "day" }, buttonIcons: { prev: "left-single-arrow", next: "right-single-arrow", prevYear: "left-double-arrow", nextYear: "right-double-arrow" }, allDayText: "all-day", theme: !1, themeButtonIcons: { prev: "circle-triangle-w", next: "circle-triangle-e", prevYear: "seek-prev", nextYear: "seek-next" }, dragOpacity: .75, dragRevertDuration: 500, dragScroll: !0, unselectAuto: !0, dropAccept: "*", eventOrder: "title", eventLimit: !1, eventLimitText: "more", eventLimitClick: "popover", dayPopoverFormat: "LL", handleWindowResize: !0, windowResizeDelay: 100, longPressDelay: 1e3 }, Ee.englishDefaults = { dayPopoverFormat: "dddd, MMMM D" }, Ee.rtlDefaults = { header: { left: "next,prev today", center: "", right: "title" }, buttonIcons: { prev: "right-single-arrow", next: "left-single-arrow", prevYear: "right-double-arrow", nextYear: "left-double-arrow" }, themeButtonIcons: { prev: "circle-triangle-e", next: "circle-triangle-w", nextYear: "seek-prev", prevYear: "seek-next" } }; var De = jt.locales = {}; jt.datepickerLocale = function(e, n, i) { var r = De[e] || (De[e] = {}); r.isRTL = i.isRTL, r.weekNumberTitle = i.weekHeader, t.each(be, function(t, e) { r[t] = e(i) }), t.datepicker && (t.datepicker.regional[n] = t.datepicker.regional[e] = i, t.datepicker.regional.en = t.datepicker.regional[""], t.datepicker.setDefaults(i)) }, jt.locale = function(e, i) { var r, s; r = De[e] || (De[e] = {}), i && (r = De[e] = n([r, i])), s = Pt(e), t.each(Ce, function(t, e) { null == r[t] && (r[t] = e(s, r)) }), Ee.defaults.locale = e }; var be = { buttonText: function(t) { return { prev: et(t.prevText), next: et(t.nextText), today: et(t.currentText) } }, monthYearFormat: function(t) { return t.showMonthAfterYear ? "YYYY[" + t.yearSuffix + "] MMMM" : "MMMM YYYY[" + t.yearSuffix + "]" } }, Ce = { dayOfMonthFormat: function(t, e) { var n = t.longDateFormat("l"); return n = n.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g, ""), e.isRTL ? n += " ddd" : n = "ddd " + n, n }, mediumTimeFormat: function(t) { return t.longDateFormat("LT").replace(/\s*a$/i, "a") }, smallTimeFormat: function(t) { return t.longDateFormat("LT").replace(":mm", "(:mm)").replace(/(\Wmm)$/, "($1)").replace(/\s*a$/i, "a") }, extraSmallTimeFormat: function(t) { return t.longDateFormat("LT").replace(":mm", "(:mm)").replace(/(\Wmm)$/, "($1)").replace(/\s*a$/i, "t") }, hourFormat: function(t) { return t.longDateFormat("LT").replace(":mm", "").replace(/(\Wmm)$/, "").replace(/\s*a$/i, "a") }, noMeridiemTimeFormat: function(t) { return t.longDateFormat("LT").replace(/\s*a$/i, "") } }, He = { smallDayDateFormat: function(t) { return t.isRTL ? "D dd" : "dd D" }, weekFormat: function(t) { return t.isRTL ? "w[ " + t.weekNumberTitle + "]" : "[" + t.weekNumberTitle + " ]w" }, smallWeekFormat: function(t) { return t.isRTL ? "w[" + t.weekNumberTitle + "]" : "[" + t.weekNumberTitle + "]w" } }; jt.locale("en", Ee.englishDefaults), jt.sourceNormalizers = [], jt.sourceFetchers = []; var Te = { dataType: "json", cache: !1 }, xe = 1; Ee.prototype.normalizeEvent = function(t) {}, Ee.prototype.spanContainsSpan = function(t, e) { var n = t.start.clone().stripZone(), i = this.getEventEnd(t).stripZone(); return e.start >= n && e.end <= i }, Ee.prototype.getPeerEvents = function(t, e) { var n, i, r = this.getEventCache(), s = []; for (n = 0; n < r.length; n++) i = r[n], e && e._id === i._id || s.push(i); return s }, Ee.prototype.isEventSpanAllowed = function(t, e) { var n = e.source || {}, i = J(e.constraint, n.constraint, this.options.eventConstraint), r = J(e.overlap, n.overlap, this.options.eventOverlap); return this.isSpanAllowed(t, i, r, e) && (!this.options.eventAllow || this.options.eventAllow(t, e) !== !1) }, Ee.prototype.isExternalSpanAllowed = function(e, n, i) { var r, s; return i && (r = t.extend({}, i, n), s = this.expandEvent(this.buildEventFromInput(r))[0]), s ? this.isEventSpanAllowed(e, s) : this.isSelectionSpanAllowed(e) }, Ee.prototype.isSelectionSpanAllowed = function(t) { return this.isSpanAllowed(t, this.options.selectConstraint, this.options.selectOverlap) && (!this.options.selectAllow || this.options.selectAllow(t) !== !1) }, Ee.prototype.isSpanAllowed = function(t, e, n, i) { var r, s, o, l, a, u; if (null != e && (r = this.constraintToEvents(e))) { for (s = !1, l = 0; l < r.length; l++) if (this.spanContainsSpan(r[l], t)) { s = !0; break } if (!s) return !1 } for (o = this.getPeerEvents(t, i), l = 0; l < o.length; l++) if (a = o[l], this.eventIntersectsRange(a, t)) { if (n === !1) return !1; if ("function" == typeof n && !n(a, i)) return !1; if (i) { if (u = J(a.overlap, (a.source || {}).overlap), u === !1) return !1; if ("function" == typeof u && !u(i, a)) return !1 } } return !0 }, Ee.prototype.constraintToEvents = function(t) { return "businessHours" === t ? this.getCurrentBusinessHourEvents() : "object" == typeof t ? null != t.start ? this.expandEvent(this.buildEventFromInput(t)) : null : this.clientEvents(t) }, Ee.prototype.eventIntersectsRange = function(t, e) { var n = t.start.clone().stripZone(), i = this.getEventEnd(t).stripZone(); return e.start < i && e.end > n }; var Re = { id: "_fcBusinessHours", start: "09:00", end: "17:00", dow: [1, 2, 3, 4, 5], rendering: "inverse-background" }; Ee.prototype.getCurrentBusinessHourEvents = function(t) { return this.computeBusinessHourEvents(t, this.options.businessHours) }, Ee.prototype.computeBusinessHourEvents = function(e, n) { return n === !0 ? this.expandBusinessHourEvents(e, [{}]) : t.isPlainObject(n) ? this.expandBusinessHourEvents(e, [n]) : t.isArray(n) ? this.expandBusinessHourEvents(e, n, !0) : [] }, Ee.prototype.expandBusinessHourEvents = function(e, n, i) { var r, s, o = this.getView(), l = []; for (r = 0; r < n.length; r++) s = n[r], i && !s.dow || (s = t.extend({}, Re, s), e && (s.start = null, s.end = null), l.push.apply(l, this.expandEvent(this.buildEventFromInput(s), o.start, o.end))); return l }; var Ie = jt.BasicView = Se.extend({ scroller: null, dayGridClass: me, dayGrid: null, dayNumbersVisible: !1, colWeekNumbersVisible: !1, cellWeekNumbersVisible: !1, weekNumberWidth: null, headContainerEl: null, headRowEl: null, initialize: function() { this.dayGrid = this.instantiateDayGrid(), this.scroller = new we({ overflowX: "hidden", overflowY: "auto" }) }, instantiateDayGrid: function() { var t = this.dayGridClass.extend(ke); return new t(this) }, setRange: function(t) { Se.prototype.setRange.call(this, t), this.dayGrid.breakOnWeeks = /year|month|week/.test(this.intervalUnit), this.dayGrid.setRange(t) }, computeRange: function(t) { var e = Se.prototype.computeRange.call(this, t); return /year|month/.test(e.intervalUnit) && (e.start.startOf("week"), e.start = this.skipHiddenDays(e.start), e.end.weekday() && (e.end.add(1, "week").startOf("week"), e.end = this.skipHiddenDays(e.end, -1, !0))), e }, renderDates: function() { this.dayNumbersVisible = this.dayGrid.rowCnt > 1, this.opt("weekNumbers") && (this.opt("weekNumbersWithinDays") ? (this.cellWeekNumbersVisible = !0, this.colWeekNumbersVisible = !1) : (this.cellWeekNumbersVisible = !1, this.colWeekNumbersVisible = !0)), this.dayGrid.numbersVisible = this.dayNumbersVisible || this.cellWeekNumbersVisible || this.colWeekNumbersVisible, this.el.addClass("fc-basic-view").html(this.renderSkeletonHtml()), this.renderHead(), this.scroller.render(); var e = this.scroller.el.addClass("fc-day-grid-container"), n = t('<div class="fc-day-grid" />').appendTo(e); this.el.find(".fc-body > tr > td").append(e), this.dayGrid.setElement(n), this.dayGrid.renderDates(this.hasRigidRows()) }, renderHead: function() { this.headContainerEl = this.el.find(".fc-head-container").html(this.dayGrid.renderHeadHtml()), this.headRowEl = this.headContainerEl.find(".fc-row") }, unrenderDates: function() { this.dayGrid.unrenderDates(), this.dayGrid.removeElement(), this.scroller.destroy() }, renderBusinessHours: function() { this.dayGrid.renderBusinessHours() }, unrenderBusinessHours: function() { this.dayGrid.unrenderBusinessHours() }, renderSkeletonHtml: function() { 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>' }, weekNumberStyleAttr: function() { return null !== this.weekNumberWidth ? 'style="width:' + this.weekNumberWidth + 'px"' : "" }, hasRigidRows: function() { var t = this.opt("eventLimit"); return t && "number" != typeof t }, updateWidth: function() { this.colWeekNumbersVisible && (this.weekNumberWidth = u(this.el.find(".fc-week-number"))) }, setHeight: function(t, e) { var n, s, o = this.opt("eventLimit"); this.scroller.clear(), r(this.headRowEl), this.dayGrid.removeSegPopover(), o && "number" == typeof o && this.dayGrid.limitRows(o), n = this.computeScrollerHeight(t), this.setGridHeight(n, e), o && "number" != typeof o && this.dayGrid.limitRows(o), 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)) }, computeScrollerHeight: function(t) { return t - d(this.el, this.scroller.el) }, setGridHeight: function(t, e) { e ? a(this.dayGrid.rowEls) : l(this.dayGrid.rowEls, t, !0) }, queryScroll: function() { return this.scroller.getScrollTop() }, setScroll: function(t) { this.scroller.setScrollTop(t) }, prepareHits: function() { this.dayGrid.prepareHits() }, releaseHits: function() { this.dayGrid.releaseHits() }, queryHit: function(t, e) { return this.dayGrid.queryHit(t, e) }, getHitSpan: function(t) { return this.dayGrid.getHitSpan(t) }, getHitEl: function(t) { return this.dayGrid.getHitEl(t) }, renderEvents: function(t) { this.dayGrid.renderEvents(t), this.updateHeight() }, getEventSegs: function() { return this.dayGrid.getEventSegs() }, unrenderEvents: function() { this.dayGrid.unrenderEvents() }, renderDrag: function(t, e) { return this.dayGrid.renderDrag(t, e) }, unrenderDrag: function() { this.dayGrid.unrenderDrag() }, renderSelection: function(t) { this.dayGrid.renderSelection(t) }, unrenderSelection: function() { this.dayGrid.unrenderSelection() } }), ke = { renderHeadIntroHtml: function() { var t = this.view; return t.colWeekNumbersVisible ? '<th class="fc-week-number ' + t.widgetHeaderClass + '" ' + t.weekNumberStyleAttr() + "><span>" + tt(t.opt("weekNumberTitle")) + "</span></th>" : "" }, renderNumberIntroHtml: function(t) { var e = this.view, n = this.getCellDate(t, 0); return e.colWeekNumbersVisible ? '<td class="fc-week-number" ' + e.weekNumberStyleAttr() + ">" + e.buildGotoAnchorHtml({ date: n, type: "week", forceOff: 1 === this.colCnt }, n.format("w")) + "</td>" : "" }, renderBgIntroHtml: function() { var t = this.view; return t.colWeekNumbersVisible ? '<td class="fc-week-number ' + t.widgetContentClass + '" ' + t.weekNumberStyleAttr() + "></td>" : "" }, renderIntroHtml: function() { var t = this.view; return t.colWeekNumbersVisible ? '<td class="fc-week-number" ' + t.weekNumberStyleAttr() + "></td>" : "" } }, Me = jt.MonthView = Ie.extend({ computeRange: function(t) { var e, n = Ie.prototype.computeRange.call(this, t); return this.isFixedWeeks() && (e = Math.ceil(n.end.diff(n.start, "weeks", !0)), n.end.add(6 - e, "weeks")), n }, setGridHeight: function(t, e) { e && (t *= this.rowCnt / 6), l(this.dayGrid.rowEls, t, !e) }, isFixedWeeks: function() { return this.opt("fixedWeekCount") } }); Ut.basic = { class: Ie }, Ut.basicDay = { type: "basic", duration: { days: 1 } }, Ut.basicWeek = { type: "basic", duration: { weeks: 1 } }, Ut.month = { class: Me, duration: { months: 1 }, defaults: { fixedWeekCount: !0 } }; var Le = jt.AgendaView = Se.extend({ scroller: null, timeGridClass: ye, timeGrid: null, dayGridClass: me, dayGrid: null, axisWidth: null, headContainerEl: null, noScrollRowEls: null, bottomRuleEl: null, initialize: function() { this.timeGrid = this.instantiateTimeGrid(), this.opt("allDaySlot") && (this.dayGrid = this.instantiateDayGrid()), this.scroller = new we({ overflowX: "hidden", overflowY: "auto" }) }, instantiateTimeGrid: function() { var t = this.timeGridClass.extend(Be); return new t(this) }, instantiateDayGrid: function() { var t = this.dayGridClass.extend(ze); return new t(this) }, setRange: function(t) { Se.prototype.setRange.call(this, t), this.timeGrid.setRange(t), this.dayGrid && this.dayGrid.setRange(t) }, renderDates: function() { this.el.addClass("fc-agenda-view").html(this.renderSkeletonHtml()), this.renderHead(), this.scroller.render(); var e = this.scroller.el.addClass("fc-time-grid-container"), n = t('<div class="fc-time-grid" />').appendTo(e); this.el.find(".fc-body > tr > td").append(e), this.timeGrid.setElement(n), this.timeGrid.renderDates(), this.bottomRuleEl = t('<hr class="fc-divider ' + this.widgetHeaderClass + '"/>').appendTo(this.timeGrid.el), this.dayGrid && (this.dayGrid.setElement(this.el.find(".fc-day-grid")), this.dayGrid.renderDates(), this.dayGrid.bottomCoordPadding = this.dayGrid.el.next("hr").outerHeight()), this.noScrollRowEls = this.el.find(".fc-row:not(.fc-scroller *)") }, renderHead: function() { this.headContainerEl = this.el.find(".fc-head-container").html(this.timeGrid.renderHeadHtml()) }, unrenderDates: function() { this.timeGrid.unrenderDates(), this.timeGrid.removeElement(), this.dayGrid && (this.dayGrid.unrenderDates(), this.dayGrid.removeElement()), this.scroller.destroy() }, renderSkeletonHtml: function() { 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 + '">' + (this.dayGrid ? '<div class="fc-day-grid"/><hr class="fc-divider ' + this.widgetHeaderClass + '"/>' : "") + "</td></tr></tbody></table>" }, axisStyleAttr: function() { return null !== this.axisWidth ? 'style="width:' + this.axisWidth + 'px"' : "" }, renderBusinessHours: function() { this.timeGrid.renderBusinessHours(), this.dayGrid && this.dayGrid.renderBusinessHours() }, unrenderBusinessHours: function() { this.timeGrid.unrenderBusinessHours(), this.dayGrid && this.dayGrid.unrenderBusinessHours() }, getNowIndicatorUnit: function() { return this.timeGrid.getNowIndicatorUnit() }, renderNowIndicator: function(t) { this.timeGrid.renderNowIndicator(t) }, unrenderNowIndicator: function() { this.timeGrid.unrenderNowIndicator() }, updateSize: function(t) { this.timeGrid.updateSize(t), Se.prototype.updateSize.call(this, t) }, updateWidth: function() { this.axisWidth = u(this.el.find(".fc-axis")) }, setHeight: function(t, e) { var n, s, o; this.bottomRuleEl.hide(), this.scroller.clear(), r(this.noScrollRowEls), this.dayGrid && (this.dayGrid.removeSegPopover(), n = this.opt("eventLimit"), n && "number" != typeof n && (n = Fe), n && this.dayGrid.limitRows(n)), e || (s = this.computeScrollerHeight(t), this.scroller.setHeight(s), o = this.scroller.getScrollbarWidths(), (o.left || o.right) && (i(this.noScrollRowEls, o), s = this.computeScrollerHeight(t), this.scroller.setHeight(s)), this.scroller.lockOverflow(o), this.timeGrid.getTotalSlatHeight() < s && this.bottomRuleEl.show()) }, computeScrollerHeight: function(t) { return t - d(this.el, this.scroller.el) }, computeInitialScroll: function() { var t = e.duration(this.opt("scrollTime")), n = this.timeGrid.computeTimeTop(t); return n = Math.ceil(n), n && n++, n }, queryScroll: function() { return this.scroller.getScrollTop() }, setScroll: function(t) { this.scroller.setScrollTop(t) }, prepareHits: function() { this.timeGrid.prepareHits(), this.dayGrid && this.dayGrid.prepareHits() }, releaseHits: function() { this.timeGrid.releaseHits(), this.dayGrid && this.dayGrid.releaseHits() }, queryHit: function(t, e) { var n = this.timeGrid.queryHit(t, e); return !n && this.dayGrid && (n = this.dayGrid.queryHit(t, e)), n }, getHitSpan: function(t) { return t.component.getHitSpan(t) }, getHitEl: function(t) { return t.component.getHitEl(t) }, renderEvents: function(t) { var e, n, i = [], r = [], s = []; for (n = 0; n < t.length; n++) t[n].allDay ? i.push(t[n]) : r.push(t[n]); e = this.timeGrid.renderEvents(r), this.dayGrid && (s = this.dayGrid.renderEvents(i)), this.updateHeight() }, getEventSegs: function() { return this.timeGrid.getEventSegs().concat(this.dayGrid ? this.dayGrid.getEventSegs() : []) }, unrenderEvents: function() { this.timeGrid.unrenderEvents(), this.dayGrid && this.dayGrid.unrenderEvents() }, renderDrag: function(t, e) { return t.start.hasTime() ? this.timeGrid.renderDrag(t, e) : this.dayGrid ? this.dayGrid.renderDrag(t, e) : void 0 }, unrenderDrag: function() { this.timeGrid.unrenderDrag(), this.dayGrid && this.dayGrid.unrenderDrag() }, renderSelection: function(t) { t.start.hasTime() || t.end.hasTime() ? this.timeGrid.renderSelection(t) : this.dayGrid && this.dayGrid.renderSelection(t) }, unrenderSelection: function() { this.timeGrid.unrenderSelection(), this.dayGrid && this.dayGrid.unrenderSelection() } }), Be = { renderHeadIntroHtml: function() { var t, e = this.view; return e.opt("weekNumbers") ? (t = this.start.format(e.opt("smallWeekFormat")), '<th class="fc-axis fc-week-number ' + e.widgetHeaderClass + '" ' + e.axisStyleAttr() + ">" + e.buildGotoAnchorHtml({ date: this.start, type: "week", forceOff: this.colCnt > 1 }, tt(t)) + "</th>") : '<th class="fc-axis ' + e.widgetHeaderClass + '" ' + e.axisStyleAttr() + "></th>" }, renderBgIntroHtml: function() { var t = this.view; return '<td class="fc-axis ' + t.widgetContentClass + '" ' + t.axisStyleAttr() + "></td>" }, renderIntroHtml: function() { var t = this.view; return '<td class="fc-axis" ' + t.axisStyleAttr() + "></td>" } }, ze = { renderBgIntroHtml: function() { var t = this.view; return '<td class="fc-axis ' + t.widgetContentClass + '" ' + t.axisStyleAttr() + "><span>" + t.getAllDayHtml() + "</span></td>" }, renderIntroHtml: function() { var t = this.view; return '<td class="fc-axis" ' + t.axisStyleAttr() + "></td>" } }, Fe = 5, Ne = [{ hours: 1 }, { minutes: 30 }, { minutes: 15 }, { seconds: 30 }, { seconds: 15 }]; Ut.agenda = { class: Le, defaults: { allDaySlot: !0, slotDuration: "00:30:00", minTime: "00:00:00", maxTime: "24:00:00", slotEventOverlap: !0 } }, Ut.agendaDay = { type: "agenda", duration: { days: 1 } }, Ut.agendaWeek = { type: "agenda", duration: { weeks: 1 } }; var Ge = Se.extend({ grid: null, scroller: null, initialize: function() { this.grid = new Ae(this), this.scroller = new we({ overflowX: "hidden", overflowY: "auto" }) }, setRange: function(t) { Se.prototype.setRange.call(this, t), this.grid.setRange(t) }, renderSkeleton: function() { this.el.addClass("fc-list-view " + this.widgetContentClass), this.scroller.render(), this.scroller.el.appendTo(this.el), this.grid.setElement(this.scroller.scrollEl) }, unrenderSkeleton: function() { this.scroller.destroy() }, setHeight: function(t, e) { this.scroller.setHeight(this.computeScrollerHeight(t)) }, computeScrollerHeight: function(t) { return t - d(this.el, this.scroller.el) }, renderEvents: function(t) { this.grid.renderEvents(t) }, unrenderEvents: function() { this.grid.unrenderEvents() }, isEventResizable: function(t) { return !1 }, isEventDraggable: function(t) { return !1 } }), Ae = pe.extend({ segSelector: ".fc-list-item", hasDayInteractions: !1, spanToSegs: function(t) { for (var e, n = this.view, i = n.start.clone().time(0), r = 0, s = []; i < n.end;) if (e = F(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)) { e.end = t.end.clone(), e.isEnd = !0; break } return s }, computeEventTimeFormat: function() { return this.view.opt("mediumTimeFormat") }, handleSegClick: function(e, n) { var i; pe.prototype.handleSegClick.apply(this, arguments), t(n.target).closest("a[href]").length || (i = e.event.url, i && !n.isDefaultPrevented() && (window.location.href = i)) }, renderFgSegs: function(t) { return t = this.renderFgSegEls(t), t.length ? this.renderSegList(t) : this.renderEmptyMessage(), t }, renderEmptyMessage: function() { this.el.html('<div class="fc-list-empty-wrap2"><div class="fc-list-empty-wrap1"><div class="fc-list-empty">' + tt(this.view.opt("noEventsMessage")) + "</div></div></div>") }, renderSegList: function(e) { var n, i, r, s = this.groupSegsByDay(e), o = t('<table class="fc-list-table"><tbody/></table>'), l = o.find("tbody"); for (n = 0; n < s.length; n++) if (i = s[n]) for (l.append(this.dayHeaderHtml(this.view.start.clone().add(n, "days"))), this.sortEventSegs(i), r = 0; r < i.length; r++) l.append(i[r].el); this.el.empty().append(o) }, groupSegsByDay: function(t) { var e, n, i = []; for (e = 0; e < t.length; e++) n = t[e], (i[n.dayIndex] || (i[n.dayIndex] = [])).push(n); return i }, dayHeaderHtml: function(t) { var e = this.view, n = e.opt("listDayFormat"), i = e.opt("listDayAltFormat"); return '<tr class="fc-list-heading" data-date="' + t.format("YYYY-MM-DD") + '"><td class="' + e.widgetHeaderClass + '" colspan="3">' + (n ? e.buildGotoAnchorHtml(t, { class: "fc-list-heading-main" }, tt(t.format(n))) : "") + (i ? e.buildGotoAnchorHtml(t, { class: "fc-list-heading-alt" }, tt(t.format(i))) : "") + "</td></tr>" }, fgSegHtml: function(t) { var e, n = this.view, i = ["fc-list-item"].concat(this.getSegCustomClasses(t)), r = this.getSegBackgroundColor(t), s = t.event, o = s.url; return e = s.allDay ? n.getAllDayHtml() : n.isMultiDayEvent(s) ? t.isStart || t.isEnd ? tt(this.getEventTimeText(t)) : n.getAllDayHtml() : tt(this.getEventTimeText(s)), o && i.push("fc-has-url"), '<tr class="' + i.join(" ") + '">' + (this.displayEventTime ? '<td class="fc-list-item-time ' + n.widgetContentClass + '">' + (e || "") + "</td>" : "") + '<td class="fc-list-item-marker ' + n.widgetContentClass + '"><span class="fc-event-dot"' + (r ? ' style="background-color:' + r + '"' : "") + '></span></td><td class="fc-list-item-title ' + n.widgetContentClass + '"><a' + (o ? ' href="' + tt(o) + '"' : "") + ">" + tt(t.event.title || "") + "</a></td></tr>" } }); return Ut.list = { class: Ge, buttonTextKey: "list", defaults: { buttonText: "list", listDayFormat: "LL", noEventsMessage: "No events to display" } }, Ut.listDay = { type: "list", duration: { days: 1 }, defaults: { listDayFormat: "dddd" } }, Ut.listWeek = { type: "list", duration: { weeks: 1 }, defaults: { listDayFormat: "dddd", listDayAltFormat: "LL" } }, Ut.listMonth = { type: "list", duration: { month: 1 }, defaults: { listDayAltFormat: "dddd" } }, Ut.listYear = { type: "list", duration: { year: 1 }, defaults: { listDayAltFormat: "dddd" } }, jt });
Ukuran: 195.2 KB