Created
April 17, 2017 06:31
-
-
Save Jason-Cooke/945cb494821b2ea79cc82a1ec4872102 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! | |
* FullCalendar v3.3.1 | |
* Docs & License: https://fullcalendar.io/ | |
* (c) 2017 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 it(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 = [], | |
c = 0; | |
a(e), e.each(function(n, i) { | |
var a = n === e.length - 1 ? s : r, | |
d = t(i).outerHeight(!0); | |
d < a ? (o.push(i), l.push(d), u.push(t(i).height())) : c += d | |
}), i && (n -= c, 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], | |
c = u[e], | |
d = i - (a - c); | |
a < i && t(n).height(d) | |
}) | |
} | |
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 c(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 d(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 + S(t, "border-left-width") + i.left - (e ? e.left : 0), | |
s = n.top + S(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 + S(t, "border-left-width") + S(t, "padding-left") - (e ? e.left : 0), | |
r = n.top + S(t, "border-top-width") + S(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, n = t[0].offsetWidth - t[0].clientWidth, | |
i = t[0].offsetHeight - t[0].clientHeight; | |
return n = v(n), i = v(i), e = { | |
left: 0, | |
right: 0, | |
top: 0, | |
bottom: i | |
}, m() && "rtl" == t.css("direction") ? e.left = n : e.right = n, e | |
} | |
function v(t) { | |
return t = Math.max(0, t), t = Math.round(t) | |
} | |
function m() { | |
return null === Xt && (Xt = y()), Xt | |
} | |
function y() { | |
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 S(t, e) { | |
return parseFloat(t.css(e)) || 0 | |
} | |
function w(t) { | |
return 1 == t.which && !t.ctrlKey | |
} | |
function b(t) { | |
var e = t.originalEvent.touches; | |
return e && e.length ? e[0].pageX : t.pageX | |
} | |
function E(t) { | |
var e = t.originalEvent.touches; | |
return e && e.length ? e[0].pageY : t.pageY | |
} | |
function D(t) { | |
return /^touch/.test(t.type) | |
} | |
function T(t) { | |
t.addClass("fc-unselectable").on("selectstart", H) | |
} | |
function C(t) { | |
t.removeClass("fc-unselectable").off("selectstart", H) | |
} | |
function H(t) { | |
t.preventDefault() | |
} | |
function R(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 x(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 L(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 M(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) : F(t[n.field], e[n.field]) * (n.order || 1) | |
} | |
function F(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 N(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 z(t, n) { | |
return e.duration({ | |
days: t.clone().stripTime().diff(n.clone().stripTime(), "days"), | |
ms: t.time() - n.time() | |
}) | |
} | |
function A(t, n) { | |
return e.duration({ | |
days: t.clone().stripTime().diff(n.clone().stripTime(), "days") | |
}) | |
} | |
function G(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 < Jt.length && (i = Jt[n], r = P(i, t, e), !(r >= 1 && vt(r))); n++); | |
return i | |
} | |
function V(t, e) { | |
var n = O(t); | |
return "week" === n && "object" == typeof e && e.days && (n = "day"), n | |
} | |
function P(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 _(t, e, n) { | |
var i; | |
return tt(n) ? (e - t) / n : (i = n.asMonths(), Math.abs(i) >= 1 && vt(i) ? e.diff(t, "months", !0) / i : e.diff(t, "days", !0) / n.asDays()) | |
} | |
function Y(t, e) { | |
var n, i; | |
return tt(t) || tt(e) ? t / e : (n = t.asMonths(), i = e.asMonths(), Math.abs(n) >= 1 && vt(n) && Math.abs(i) >= 1 && vt(i) ? n / i : t.asDays() / e.asDays()) | |
} | |
function W(t, n) { | |
var i; | |
return tt(t) ? e.duration(t * n) : (i = t.asMonths(), Math.abs(i) >= 1 && vt(i) ? e.duration({ | |
months: i * n | |
}) : e.duration({ | |
days: t.asDays() * n | |
})) | |
} | |
function U(t) { | |
return { | |
start: t.start.clone(), | |
end: t.end.clone() | |
} | |
} | |
function j(t, e) { | |
return t = U(t), e.start && (t.start = q(t.start, e)), e.end && (t.end = K(t.end, e.end)), t | |
} | |
function q(t, e) { | |
return t = t.clone(), e.start && (t = J(t, e.start)), e.end && t >= e.end && (t = e.end.clone().subtract(1)), t | |
} | |
function Z(t, e) { | |
return (!e.start || t >= e.start) && (!e.end || t < e.end) | |
} | |
function $(t, e) { | |
return (!e.start || t.end >= e.start) && (!e.end || t.start < e.end) | |
} | |
function Q(t, e) { | |
return (!e.start || t.start >= e.start) && (!e.end || t.end <= e.end) | |
} | |
function X(t, e) { | |
return (t.start && e.start && t.start.isSame(e.start) || !t.start && !e.start) && (t.end && e.end && t.end.isSame(e.end) || !t.end && !e.end) | |
} | |
function K(t, e) { | |
return (t.isBefore(e) ? t : e).clone() | |
} | |
function J(t, e) { | |
return (t.isAfter(e) ? t : e).clone() | |
} | |
function tt(t) { | |
return Boolean(t.hours() || t.minutes() || t.seconds() || t.milliseconds()) | |
} | |
function et(t) { | |
return "[object Date]" === Object.prototype.toString.call(t) || t instanceof Date | |
} | |
function nt(t) { | |
return /^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t) | |
} | |
function it(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] = it(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 rt(t) { | |
var e = function() {}; | |
return e.prototype = t, new e | |
} | |
function st(t, e) { | |
for (var n in t) ot(t, n) && (e[n] = t[n]) | |
} | |
function ot(t, e) { | |
return te.call(t, e) | |
} | |
function lt(e) { | |
return /undefined|null|boolean|number|string/.test(t.type(e)) | |
} | |
function at(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 ut() { | |
for (var t = 0; t < arguments.length; t++) | |
if (void 0 !== arguments[t]) return arguments[t] | |
} | |
function ct(t) { | |
return (t + "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """).replace(/\n/g, "<br />") | |
} | |
function dt(t) { | |
return t.replace(/&.*?;/g, "") | |
} | |
function ht(e) { | |
var n = []; | |
return t.each(e, function(t, e) { | |
null != e && n.push(t + ":" + e) | |
}), n.join(";") | |
} | |
function ft(e) { | |
var n = []; | |
return t.each(e, function(t, e) { | |
null != e && n.push(t + '="' + ct(e) + '"') | |
}), n.join(" ") | |
} | |
function gt(t) { | |
return t.charAt(0).toUpperCase() + t.slice(1) | |
} | |
function pt(t, e) { | |
return t - e | |
} | |
function vt(t) { | |
return t % 1 === 0 | |
} | |
function mt(t, e) { | |
var n = t[e]; | |
return function() { | |
return n.apply(t, arguments) | |
} | |
} | |
function yt(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 St(n, i, r) { | |
var s, o, l, a, u = n[0], | |
c = 1 == n.length && "string" == typeof u; | |
return e.isMoment(u) || et(u) || void 0 === u ? a = e.apply(null, n) : (s = !1, o = !1, c ? ee.test(u) ? (u += "-01", n = [u], s = !0, o = !0) : (l = ne.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 : c && a.utcOffset(u))), a._fullCalendar = !0, a | |
} | |
function wt() {} | |
function bt(t, e) { | |
var n; | |
return ot(e, "constructor") && (n = e.constructor), "function" != typeof n && (n = e.constructor = function() { | |
t.apply(this, arguments) | |
}), n.prototype = rt(t.prototype), st(e, n.prototype), st(t, n), n | |
} | |
function Et(t, e) { | |
st(e, t.prototype) | |
} | |
function Dt(e) { | |
var n = t.Deferred(), | |
i = n.promise(); | |
if ("function" == typeof e && e(function(t) { | |
Dt.immediate && (i._value = t), n.resolve(t) | |
}, function() { | |
n.reject() | |
}), Dt.immediate) { | |
var r = i.then; | |
i.then = function(t, e) { | |
var n = i.state(); | |
if ("resolved" === n) { | |
if ("function" == typeof t) return Dt.resolve(t(i._value)) | |
} else if ("rejected" === n && "function" == typeof e) return e(), i; | |
return r.call(i, t, e) | |
} | |
} | |
return i | |
} | |
function Tt(t) { | |
function e(t) { | |
return new Dt(function(e) { | |
var i = function() { | |
Dt.resolve(t()).then(e).then(function() { | |
n.shift(), n.length && n[0]() | |
}) | |
}; | |
n.push(i), 1 === n.length && i() | |
}) | |
} | |
var n = []; | |
this.add = "number" == typeof t ? yt(e, t) : e, this.addQuickly = e | |
} | |
function Ct(t, e) { | |
return !t && !e || !(!t || !e) && (t.component === e.component && Ht(t, e) && Ht(e, t)) | |
} | |
function Ht(t, e) { | |
for (var n in t) | |
if (!/^(component|left|right|top|bottom)$/.test(n) && t[n] !== e[n]) return !1; | |
return !0 | |
} | |
function Rt(t) { | |
return { | |
start: t.start.clone(), | |
end: t.end ? t.end.clone() : null, | |
allDay: t.allDay | |
} | |
} | |
function xt(t) { | |
var e = kt(t); | |
return "background" === e || "inverse-background" === e | |
} | |
function It(t) { | |
return "inverse-background" === kt(t) | |
} | |
function kt(t) { | |
return ut((t.source || {}).rendering, t.rendering) | |
} | |
function Lt(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 Mt(t, e) { | |
return t.start - e.start | |
} | |
function Bt(n) { | |
var i, r, s, o, l = Zt.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 Ft(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 Nt(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 && Ot(n, r[i]).length; i++); | |
n.level = i, (r[i] || (r[i] = [])).push(n) | |
} | |
return r | |
} | |
function At(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++) Ot(r, t[s], r.forwardSegs) | |
} | |
function Gt(t) { | |
var e, n, i = t.forwardSegs, | |
r = 0; | |
if (void 0 === t.forwardPressure) { | |
for (e = 0; e < i.length; e++) n = i[e], Gt(n), r = Math.max(r, 1 + n.forwardPressure); | |
t.forwardPressure = r | |
} | |
} | |
function Ot(t, e, n) { | |
n = n || []; | |
for (var i = 0; i < e.length; i++) Vt(t, e[i]) && n.push(e[i]); | |
return n | |
} | |
function Vt(t, e) { | |
return t.bottom > e.top && t.top < e.bottom | |
} | |
function Pt(t) { | |
this.items = t || [] | |
} | |
function _t(e, n) { | |
function i(t) { | |
n = t | |
} | |
function r() { | |
var i = n.layout; | |
p = e.options.theme ? "ui" : "fc", i ? (g ? g.empty() : g = this.el = t("<div class='fc-toolbar " + n.extraClasses + "'/>"), g.append(o("left")).append(o("right")).append(o("center")).append('<div class="fc-clear"/>')) : s() | |
} | |
function s() { | |
g && (g.remove(), g = f.el = null) | |
} | |
function o(i) { | |
var r = t('<div class="fc-' + i + '"/>'), | |
s = n.layout[i]; | |
return s && t.each(s.split(" "), function(n) { | |
var i, s = t(), | |
o = !0; | |
t.each(this.split(","), function(n, i) { | |
var r, l, a, u, c, d, h, f, g, m; | |
"title" == i ? (s = s.add(t("<h2> </h2>")), o = !1) : ((r = (e.options.customButtons || {})[i]) ? (a = function(t) { | |
r.click && r.click.call(m[0], t) | |
}, u = "", c = r.text) : (l = e.getViewSpec(i)) ? (a = function() { | |
e.changeView(i) | |
}, v.push(i), u = l.buttonTextOverride, c = l.buttonTextDefault) : e[i] && (a = function() { | |
e[i]() | |
}, u = (e.overrides.buttonText || {})[i], c = e.options.buttonText[i]), a && (d = r ? r.themeIcon : e.options.themeButtonIcons[i], h = r ? r.icon : e.options.buttonIcons[i], f = u ? ct(u) : d && e.options.theme ? "<span class='ui-icon ui-icon-" + d + "'></span>" : h && !e.options.theme ? "<span class='fc-icon fc-icon-" + h + "'></span>" : ct(c), g = ["fc-" + i + "-button", p + "-button", p + "-state-default"], m = t('<button type="button" class="' + g.join(" ") + '">' + f + "</button>").click(function(t) { | |
m.hasClass(p + "-state-disabled") || (a(t), (m.hasClass(p + "-state-active") || m.hasClass(p + "-state-disabled")) && m.removeClass(p + "-state-hover")) | |
}).mousedown(function() { | |
m.not("." + p + "-state-active").not("." + p + "-state-disabled").addClass(p + "-state-down") | |
}).mouseup(function() { | |
m.removeClass(p + "-state-down") | |
}).hover(function() { | |
m.not("." + p + "-state-active").not("." + p + "-state-disabled").addClass(p + "-state-hover") | |
}, function() { | |
m.removeClass(p + "-state-hover").removeClass(p + "-state-down") | |
}), s = s.add(m))) | |
}), o && s.first().addClass(p + "-corner-left").end().last().addClass(p + "-corner-right").end(), s.length > 1 ? (i = t("<div/>"), o && i.addClass("fc-button-group"), i.append(s), r.append(i)) : r.append(s) | |
}), r | |
} | |
function l(t) { | |
g && g.find("h2").text(t) | |
} | |
function a(t) { | |
g && g.find(".fc-" + t + "-button").addClass(p + "-state-active") | |
} | |
function u(t) { | |
g && g.find(".fc-" + t + "-button").removeClass(p + "-state-active") | |
} | |
function c(t) { | |
g && g.find(".fc-" + t + "-button").prop("disabled", !0).addClass(p + "-state-disabled") | |
} | |
function d(t) { | |
g && g.find(".fc-" + t + "-button").prop("disabled", !1).removeClass(p + "-state-disabled") | |
} | |
function h() { | |
return v | |
} | |
var f = this; | |
f.setToolbarOptions = i, f.render = r, f.removeElement = s, f.updateTitle = l, f.activateButton = a, f.deactivateButton = u, f.disableButton = c, f.enableButton = d, f.getViewsWithButtons = h, f.el = null; | |
var g, p, v = [] | |
} | |
function Yt(n, i) { | |
function r(t) { | |
t._locale = N | |
} | |
function s() { | |
O ? a() && (f(), u()) : o() | |
} | |
function o() { | |
n.addClass("fc"), n.on("click.fc", "a[data-goto]", function(e) { | |
var n = t(this), | |
i = n.data("goto"), | |
r = F.moment(i.date), | |
s = i.type, | |
o = P.opt("navLink" + gt(s) + "Click"); | |
"function" == typeof o ? o(r, e) : ("string" == typeof o && (s = o), C(r, s)) | |
}), F.bindOption("theme", function(t) { | |
V = t ? "ui" : "fc", n.toggleClass("ui-widget", t), n.toggleClass("fc-unthemed", !t) | |
}), F.bindOptions(["isRTL", "locale"], function(t) { | |
n.toggleClass("fc-ltr", !t), n.toggleClass("fc-rtl", t) | |
}), O = t("<div class='fc-view-container'/>").prependTo(n); | |
var e = y(); | |
z = new Pt(e), A = F.header = e[0], G = F.footer = e[1], b(), E(), u(F.options.defaultView), F.options.handleWindowResize && (Y = yt(v, F.options.windowResizeDelay), t(window).resize(Y)) | |
} | |
function l() { | |
P && P.removeElement(), z.proxyCall("removeElement"), O.remove(), n.removeClass("fc fc-ltr fc-rtl fc-unthemed ui-widget"), n.off(".fc"), Y && t(window).unbind("resize", Y), pe.unneeded() | |
} | |
function a() { | |
return n.is(":visible") | |
} | |
function u(e, n) { | |
j++; | |
var i = P && e && P.type !== e; | |
i && (H(), c()), !P && e && (P = F.view = U[e] || (U[e] = F.instantiateView(e)), P.setElement(t("<div class='fc-view fc-" + e + "-view' />").appendTo(O)), z.proxyCall("activateButton", e)), P && a() && (n && P.captureInitialScroll(n), P.setDate(F.currentDate), F.currentDate = P.currentDate, n && P.releaseScroll()), i && R(), j-- | |
} | |
function c() { | |
z.proxyCall("deactivateButton", P.type), P.removeElement(), P = F.view = null | |
} | |
function d() { | |
j++, H(); | |
var t = P.type, | |
e = P.queryScroll(); | |
c(), f(), u(t, e), R(), j-- | |
} | |
function h(t) { | |
if (a()) return t && g(), j++, P.updateSize(!0), j--, !0 | |
} | |
function f() { | |
a() && g() | |
} | |
function g() { | |
var t = F.options.contentHeight, | |
e = F.options.height; | |
_ = "number" == typeof t ? t : "function" == typeof t ? t() : "number" == typeof e ? e - p() : "function" == typeof e ? e() - p() : "parent" === e ? n.parent().height() - p() : Math.round(O.width() / Math.max(F.options.aspectRatio, .5)) | |
} | |
function p() { | |
return z.items.reduce(function(t, e) { | |
var n = e.el ? e.el.outerHeight(!0) : 0; | |
return t + n | |
}, 0) | |
} | |
function v(t) { | |
!j && t.target === window && P.renderRange && h(!0) && P.publiclyTrigger("windowResize", W) | |
} | |
function m() { | |
a() && F.reportEventChange() | |
} | |
function y() { | |
return [new _t(F, S()), new _t(F, w())] | |
} | |
function S() { | |
return { | |
extraClasses: "fc-header-toolbar", | |
layout: F.options.header | |
} | |
} | |
function w() { | |
return { | |
extraClasses: "fc-footer-toolbar", | |
layout: F.options.footer | |
} | |
} | |
function b() { | |
A.setToolbarOptions(S()), A.render(), A.el && n.prepend(A.el) | |
} | |
function E() { | |
G.setToolbarOptions(w()), G.render(), G.el && n.append(G.el) | |
} | |
function D(t, e) { | |
P.select(F.buildSelectSpan.apply(F, arguments)) | |
} | |
function T() { | |
P && P.unselect() | |
} | |
function C(t, e) { | |
var n; | |
e = e || "day", n = F.getViewSpec(e) || F.getUnitViewSpec(e), F.currentDate = t.clone(), u(n ? n.type : null) | |
} | |
function H() { | |
q++ || O.css({ | |
width: "100%", | |
height: O.height(), | |
overflow: "hidden" | |
}) | |
} | |
function R() { | |
--q || O.css({ | |
width: "", | |
height: "", | |
overflow: "" | |
}) | |
} | |
function x() { | |
return F | |
} | |
function I() { | |
return P | |
} | |
function k(t, e) { | |
var n; | |
if ("string" == typeof t) { | |
if (void 0 === e) return F.options[t]; | |
n = {}, n[t] = e, L(n) | |
} else "object" == typeof t && L(t) | |
} | |
function L(t) { | |
var e, n = 0; | |
M(t); | |
for (e in t) n++; | |
if (1 === n) { | |
if ("height" === e || "contentHeight" === e || "aspectRatio" === e) return void h(!0); | |
if ("defaultDate" === e) return; | |
if ("businessHours" === e) return void(P && (P.unrenderBusinessHours(), P.renderBusinessHours())); | |
if ("timezone" === e) return F.rezoneArrayEventSources(), void F.refetchEvents() | |
} | |
b(), E(), U = {}, d() | |
} | |
function M(t) { | |
var e; | |
for (e in t) F.dynamicOverrides[e] = t[e]; | |
F.viewSpecCache = {}, F.populateOptionsHash(); | |
for (e in t) F.triggerOptionHandlers(e) | |
} | |
function B(t, e) { | |
var n = Array.prototype.slice.call(arguments, 2); | |
if (e = e || W, this.triggerWith(t, e, n), F.options[t]) return F.options[t].apply(e, n) | |
} | |
var F = this; | |
pe.needed(), F.render = s, F.destroy = l, F.rerenderEvents = m, F.select = D, F.unselect = T, F.zoomTo = C, F.getCalendar = x, F.getView = I, F.option = k, F.recordOptionOverrides = M, F.publiclyTrigger = B, F.dynamicOverrides = {}, F.viewSpecCache = {}, F.optionHandlers = {}, F.overrides = t.extend({}, i), F.populateOptionsHash(); | |
var N; | |
F.bindOptions(["locale", "monthNames", "monthNamesShort", "dayNames", "dayNamesShort", "firstDay", "weekNumberCalculation"], function(t, e, n, i, s, o, l) { | |
if ("iso" === l && (l = "ISO"), N = rt(Ut(t)), e && (N._months = e), n && (N._monthsShort = n), i && (N._weekdays = i), s && (N._weekdaysShort = s), null == o && "ISO" === l && (o = 1), null != o) { | |
var a = rt(N._week); | |
a.dow = o, N._week = a | |
} | |
"ISO" !== l && "local" !== l && "function" != typeof l || (N._fullCalendar_weekCalc = l), F.currentDate && r(F.currentDate) | |
}), F.defaultAllDayEventDuration = e.duration(F.options.defaultAllDayEventDuration), F.defaultTimedEventDuration = e.duration(F.options.defaultTimedEventDuration), F.moment = function() { | |
var t; | |
return "local" === F.options.timezone ? (t = Zt.moment.apply(null, arguments), t.hasTime() && t.local()) : t = "UTC" === F.options.timezone ? Zt.moment.utc.apply(null, arguments) : Zt.moment.parseZone.apply(null, arguments), r(t), t | |
}, F.localizeMoment = r, F.getIsAmbigTimezone = function() { | |
return "local" !== F.options.timezone && "UTC" !== F.options.timezone | |
}, F.applyTimezone = function(t) { | |
if (!t.hasTime()) return t.clone(); | |
var e, n = F.moment(t.toArray()), | |
i = t.time() - n.time(); | |
return i && (e = n.clone().add(i), t.time() - e.time() === 0 && (n = e)), n | |
}, F.getNow = function() { | |
var t = F.options.now; | |
return "function" == typeof t && (t = t()), F.moment(t).stripZone() | |
}, F.getEventEnd = function(t) { | |
return t.end ? t.end.clone() : F.getDefaultEventEnd(t.allDay, t.start) | |
}, F.getDefaultEventEnd = function(t, e) { | |
var n = e.clone(); | |
return t ? n.stripTime().add(F.defaultAllDayEventDuration) : n.add(F.defaultTimedEventDuration), F.getIsAmbigTimezone() && n.stripZone(), n | |
}, F.humanizeDuration = function(t) { | |
return t.locale(F.options.locale).humanize() | |
}, jt.call(F); | |
var z, A, G, O, V, P, _, Y, W = n[0], | |
U = {}, | |
j = 0; | |
this.initCurrentDate(), F.renderView = u, F.getSuggestedViewHeight = function() { | |
return void 0 === _ && f(), _ | |
}, F.isHeightAuto = function() { | |
return "auto" === F.options.contentHeight || "auto" === F.options.height | |
}, F.setToolbarsTitle = function(t) { | |
z.proxyCall("updateTitle", t) | |
}, F.updateToolbarButtons = function() { | |
var t = F.getNow(), | |
e = P.buildDateProfile(t), | |
n = P.buildPrevDateProfile(F.currentDate), | |
i = P.buildNextDateProfile(F.currentDate); | |
z.proxyCall(e.isValid && !Z(t, P.currentRange) ? "enableButton" : "disableButton", "today"), z.proxyCall(n.isValid ? "enableButton" : "disableButton", "prev"), z.proxyCall(i.isValid ? "enableButton" : "disableButton", "next") | |
}, F.freezeContentHeight = H, F.thawContentHeight = R; | |
var q = 0; | |
F.initialize() | |
} | |
function Wt(e) { | |
t.each(Re, function(t, n) { | |
null == e[t] && (e[t] = n(e)) | |
}) | |
} | |
function Ut(t) { | |
return e.localeData(t) || e.localeData("en") | |
} | |
function jt() { | |
function n(t, e) { | |
return !U.options.lazyFetching || s(t, e) ? o(t, e) : Dt.resolve(Z) | |
} | |
function i() { | |
Z = r(K), U.trigger("eventsReset", Z) | |
} | |
function r(t) { | |
var e, n, i = []; | |
for (e = 0; e < t.length; e++) n = t[e], n.start.clone().stripZone() < q && U.getEventEnd(n).stripZone() > j && i.push(n); | |
return i | |
} | |
function s(t, e) { | |
return !j || t < j || e > q | |
} | |
function o(t, e) { | |
return j = t, q = e, l() | |
} | |
function l() { | |
return u(Q, "reset") | |
} | |
function a(t) { | |
return u(b(t)) | |
} | |
function u(t, e) { | |
var n, i; | |
for ("reset" === e ? K = [] : "add" !== e && (K = C(K, t)), n = 0; n < t.length; n++) i = t[n], "pending" !== i._status && X++, i._fetchId = (i._fetchId || 0) + 1, i._status = "pending"; | |
for (n = 0; n < t.length; n++) i = t[n], c(i, i._fetchId); | |
return X ? new Dt(function(t) { | |
U.one("eventsReceived", t) | |
}) : Dt.resolve(Z) | |
} | |
function c(e, n) { | |
f(e, function(i) { | |
var r, s, o, l = 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 = l ? s : N(s, e), o && K.push.apply(K, _(o)); | |
h() | |
} | |
}) | |
} | |
function d(t) { | |
var e = "pending" === t._status; | |
t._status = "rejected", e && h() | |
} | |
function h() { | |
X--, X || (i(K), U.trigger("eventsReceived", Z)) | |
} | |
function f(e, n) { | |
var i, r, s = Zt.sourceFetchers; | |
for (i = 0; i < s.length; i++) { | |
if (r = s[i].call(U, e, j.clone(), q.clone(), U.options.timezone, n), r === !0) return; | |
if ("object" == typeof r) return void f(r, n) | |
} | |
var o = e.events; | |
if (o) t.isFunction(o) ? (U.pushLoading(), o.call(U, j.clone(), q.clone(), U.options.timezone, function(t) { | |
n(t), U.popLoading() | |
})) : t.isArray(o) ? n(o) : n(); | |
else { | |
var l = e.url; | |
if (l) { | |
var a, u = e.success, | |
c = e.error, | |
d = e.complete; | |
a = t.isFunction(e.data) ? e.data() : e.data; | |
var h = t.extend({}, a || {}), | |
g = ut(e.startParam, U.options.startParam), | |
p = ut(e.endParam, U.options.endParam), | |
v = ut(e.timezoneParam, U.options.timezoneParam); | |
g && (h[g] = j.format()), p && (h[p] = q.format()), U.options.timezone && "local" != U.options.timezone && (h[v] = U.options.timezone), U.pushLoading(), t.ajax(t.extend({}, xe, e, { | |
data: h, | |
success: function(e) { | |
e = e || []; | |
var i = at(u, this, arguments); | |
t.isArray(i) && (e = i), n(e) | |
}, | |
error: function() { | |
at(c, this, arguments), n() | |
}, | |
complete: function() { | |
at(d, this, arguments), U.popLoading() | |
} | |
})) | |
} else n() | |
} | |
} | |
function g(t) { | |
var e = p(t); | |
e && (Q.push(e), u([e], "add")) | |
} | |
function p(e) { | |
var n, i, r = Zt.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 N(t, n) | |
})), i = 0; i < r.length; i++) r[i].call(U, n); | |
return n | |
} | |
} | |
function v(t) { | |
y(E(t)) | |
} | |
function m(t) { | |
null == t ? y(Q, !0) : y(b(t)) | |
} | |
function y(e, n) { | |
var r; | |
for (r = 0; r < e.length; r++) d(e[r]); | |
n ? (Q = [], K = []) : (Q = t.grep(Q, function(t) { | |
for (r = 0; r < e.length; r++) | |
if (t === e[r]) return !1; | |
return !0 | |
}), K = C(K, e)), i() | |
} | |
function S() { | |
return Q.slice(1) | |
} | |
function w(e) { | |
return t.grep(Q, function(t) { | |
return t.id && t.id === e | |
})[0] | |
} | |
function b(e) { | |
e ? t.isArray(e) || (e = [e]) : e = []; | |
var n, i = []; | |
for (n = 0; n < e.length; n++) i.push.apply(i, E(e[n])); | |
return i | |
} | |
function E(e) { | |
var n, i; | |
for (n = 0; n < Q.length; n++) | |
if (i = Q[n], i === e) return [i]; | |
return i = w(e), i ? [i] : t.grep(Q, function(t) { | |
return D(e, t) | |
}) | |
} | |
function D(t, e) { | |
return t && e && T(t) == T(e) | |
} | |
function T(t) { | |
return ("object" == typeof t ? t.origArray || t.googleCalendarId || t.url || t.events : null) || t | |
} | |
function C(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 H(t) { | |
R([t]) | |
} | |
function R(t) { | |
var e, n; | |
for (e = 0; e < t.length; e++) n = t[e], n.start = U.moment(n.start), n.end ? n.end = U.moment(n.end) : n.end = null, Y(n, x(n)); | |
i() | |
} | |
function x(e) { | |
var n = {}; | |
return t.each(e, function(t, e) { | |
I(t) && void 0 !== e && lt(e) && (n[t] = e) | |
}), n | |
} | |
function I(t) { | |
return !/^_|^(id|allDay|start|end)$/.test(t) | |
} | |
function k(t, e) { | |
return L([t], e) | |
} | |
function L(t, e) { | |
var n, r, s, o, l, a = []; | |
for (s = 0; s < t.length; s++) | |
if (r = N(t[s])) { | |
for (n = _(r), o = 0; o < n.length; o++) l = n[o], l.source || (e && ($.events.push(l), l.source = $), K.push(l)); | |
a = a.concat(n) | |
} | |
return a.length && i(), a | |
} | |
function M(e) { | |
var n, r; | |
for (null == e ? e = function() { | |
return !0 | |
} : t.isFunction(e) || (n = e + "", e = function(t) { | |
return t._id == n | |
}), K = t.grep(K, e, !0), r = 0; r < Q.length; r++) t.isArray(Q[r].events) && (Q[r].events = t.grep(Q[r].events, e, !0)); | |
i() | |
} | |
function B(e) { | |
return t.isFunction(e) ? t.grep(K, e) : null != e ? (e += "", t.grep(K, function(t) { | |
return t._id == e | |
})) : K | |
} | |
function F(t) { | |
t.start = U.moment(t.start), t.end && (t.end = U.moment(t.end)), qt(t) | |
} | |
function N(n, i) { | |
var r, s, o, l = {}; | |
if (U.options.eventDataTransform && (n = U.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" + Ie++ : 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, nt(r) && (r = e.duration(r)), nt(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 = U.moment(r), !r.isValid())) return !1; | |
s && (s = U.moment(s), s.isValid() || (s = null)), o = n.allDay, void 0 === o && (o = ut(i ? i.allDayDefault : void 0, U.options.allDayDefault)), O(r, s, o, l) | |
} | |
return U.normalizeEvent(l), l | |
} | |
function O(t, e, n, i) { | |
i.start = t, i.end = e, i.allDay = n, V(i), qt(i) | |
} | |
function V(t) { | |
P(t), t.end && !t.end.isAfter(t.start) && (t.end = null), t.end || (U.options.forceEventDuration ? t.end = U.getDefaultEventEnd(t.allDay, t.start) : t.end = null) | |
} | |
function P(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 = U.applyTimezone(t.start.time(0))), t.end && !t.end.hasTime() && (t.end = U.applyTimezone(t.end.time(0)))) | |
} | |
function _(e, n, i) { | |
var r, s, o, l, a, u, c, d, h, f = []; | |
if (n = n || j, i = i || q, 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, c = l.clone(), d = null, a && (c = c.time(a)), u && (d = l.clone().time(u)), h = t.extend({}, e), O(c, d, !a && !u, h), f.push(h)), l.add(1, "days") | |
} else f.push(e); | |
return f | |
} | |
function Y(e, n, i) { | |
function r(t, e) { | |
return i ? G(t, e, i) : n.allDay ? A(t, e) : z(t, e) | |
} | |
var s, o, l, a, u, c, d = {}; | |
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), V(n), s = { | |
start: e._start.clone(), | |
end: e._end ? e._end.clone() : U.getDefaultEventEnd(e._allDay, e._start), | |
allDay: n.allDay | |
}, V(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) { | |
I(t) && void 0 !== e && (d[t] = e) | |
}), c = W(B(e._id), o, n.allDay, l, u, d), { | |
dateDelta: l, | |
durationDelta: u, | |
undo: c | |
} | |
} | |
function W(e, n, i, r, s, o) { | |
var l = U.getIsAmbigTimezone(), | |
a = []; | |
return r && !r.valueOf() && (r = null), s && !s.valueOf() && (s = null), t.each(e, function(e, u) { | |
var c, d; | |
c = { | |
start: u.start.clone(), | |
end: u.end ? u.end.clone() : null, | |
allDay: u.allDay | |
}, t.each(o, function(t) { | |
c[t] = u[t] | |
}), d = { | |
start: u._start, | |
end: u._end, | |
allDay: i | |
}, V(d), n ? d.end = null : s && !d.end && (d.end = U.getDefaultEventEnd(d.allDay, d.start)), r && (d.start.add(r), d.end && d.end.add(r)), s && d.end.add(s), l && !d.allDay && (r || s) && (d.start.stripZone(), d.end && d.end.stripZone()), t.extend(u, o, d), qt(u), a.push(function() { | |
t.extend(u, c), qt(u) | |
}) | |
}), | |
function() { | |
for (var t = 0; t < a.length; t++) a[t]() | |
} | |
} | |
var U = this; | |
U.requestEvents = n, U.reportEventChange = i, U.isFetchNeeded = s, U.fetchEvents = o, U.fetchEventSources = u, U.refetchEvents = l, U.refetchEventSources = a, U.getEventSources = S, U.getEventSourceById = w, U.addEventSource = g, U.removeEventSource = v, U.removeEventSources = m, U.updateEvent = H, U.updateEvents = R, U.renderEvent = k, U.renderEvents = L, U.removeEvents = M, U.clientEvents = B, U.mutateEvent = Y, U.normalizeEventDates = V, U.normalizeEventTimes = P; | |
var j, q, Z, $ = { | |
events: [] | |
}, | |
Q = [$], | |
X = 0, | |
K = []; | |
t.each((U.options.events ? [U.options.events] : []).concat(U.options.eventSources || []), function(t, e) { | |
var n = p(e); | |
n && Q.push(n) | |
}), U.getEventCache = function() { | |
return K | |
}, U.getPrunedEventCache = function() { | |
return Z | |
}, U.rezoneArrayEventSources = function() { | |
var e, n, i; | |
for (e = 0; e < Q.length; e++) | |
if (n = Q[e].events, t.isArray(n)) | |
for (i = 0; i < n.length; i++) F(n[i]) | |
}, U.buildEventFromInput = N, U.expandEvent = _ | |
} | |
function qt(t) { | |
t._allDay = t.allDay, t._start = t.start.clone(), t._end = t.end ? t.end.clone() : null | |
} | |
var Zt = t.fullCalendar = { | |
version: "3.3.1", | |
internalApiVersion: 9 | |
}, | |
$t = Zt.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 De(l, e), l.data("fullCalendar", a), a.render()) | |
}), i | |
}; | |
var Qt = ["header", "footer", "buttonText", "buttonIcons", "themeButtonIcons"]; | |
Zt.intersectRanges = N, Zt.applyAll = at, Zt.debounce = yt, Zt.isInt = vt, Zt.htmlEscape = ct, Zt.cssToStr = ht, Zt.proxy = mt, Zt.capitaliseFirstLetter = gt, Zt.getOuterRect = h, Zt.getClientRect = f, Zt.getContentRect = g, Zt.getScrollbarWidths = p; | |
var Xt = null; | |
Zt.preventDefault = H, Zt.intersectRects = R, Zt.parseFieldSpecs = L, Zt.compareByFieldSpecs = M, Zt.compareByFieldSpec = B, Zt.flexibleCompare = F, Zt.computeGreatestUnit = O, Zt.divideRangeByDuration = _, Zt.divideDurationByDuration = Y, Zt.multiplyDuration = W, Zt.durationHasTime = tt; | |
var Kt = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"], | |
Jt = ["year", "month", "week", "day", "hour", "minute", "second", "millisecond"]; | |
Zt.log = function() { | |
var t = window.console; | |
if (t && t.log) return t.log.apply(t, arguments) | |
}, Zt.warn = function() { | |
var t = window.console; | |
return t && t.warn ? t.warn.apply(t, arguments) : Zt.log.apply(Zt, arguments) | |
}; | |
var te = {}.hasOwnProperty; | |
Zt.createObject = rt; | |
var ee = /^\s*\d{4}-\d\d$/, | |
ne = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/, | |
ie = e.fn, | |
re = t.extend({}, ie), | |
se = e.momentProperties; | |
se.push("_fullCalendar"), se.push("_ambigTime"), se.push("_ambigZone"), Zt.moment = function() { | |
return St(arguments) | |
}, Zt.moment.utc = function() { | |
var t = St(arguments, !0); | |
return t.hasTime() && t.utc(), t | |
}, Zt.moment.parseZone = function() { | |
return St(arguments, !0, !0) | |
}, ie.week = ie.weeks = function(t) { | |
var e = this._locale._fullCalendar_weekCalc; | |
return null == t && "function" == typeof e ? e(this) : "ISO" === e ? re.isoWeek.apply(this, arguments) : re.week.apply(this, arguments) | |
}, ie.time = function(t) { | |
if (!this._fullCalendar) return re.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()) | |
}, ie.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 | |
}, ie.hasTime = function() { | |
return !this._ambigTime | |
}, ie.stripZone = function() { | |
var t; | |
return this._ambigZone || (t = this._ambigTime, this.utc(!0), this._ambigTime = t || !1, this._ambigZone = !0), this | |
}, ie.hasZone = function() { | |
return !this._ambigZone | |
}, ie.local = function(t) { | |
return re.local.call(this, this._ambigZone || t), this._ambigTime = !1, this._ambigZone = !1, this | |
}, ie.utc = function(t) { | |
return re.utc.call(this, t), this._ambigTime = !1, this._ambigZone = !1, this | |
}, ie.utcOffset = function(t) { | |
return null != t && (this._ambigTime = !1, this._ambigZone = !1), re.utcOffset.apply(this, arguments) | |
}, ie.format = function() { | |
return this._fullCalendar && arguments[0] ? oe(this, arguments[0]) : this._ambigTime ? ae(this, "YYYY-MM-DD") : this._ambigZone ? ae(this, "YYYY-MM-DD[T]HH:mm:ss") : re.format.apply(this, arguments) | |
}, ie.toISOString = function() { | |
return this._ambigTime ? ae(this, "YYYY-MM-DD") : this._ambigZone ? ae(this, "YYYY-MM-DD[T]HH:mm:ss") : re.toISOString.apply(this, arguments) | |
}, | |
function() { | |
function t(t, e) { | |
return c(r(e).fakeFormatString, t) | |
} | |
function e(t, e) { | |
return re.format.call(t, e) | |
} | |
function n(t, e, n, s, o) { | |
var l; | |
return t = Zt.moment.parseZone(t), e = Zt.moment.parseZone(e), l = t.localeData(), n = l.longDateFormat(n) || n, i(r(n), t, e, s || " - ", o) | |
} | |
function i(t, e, n, i, r) { | |
var s, o, l, a = t.sameUnits, | |
u = e.clone().stripZone(), | |
c = n.clone().stripZone(), | |
f = d(t.fakeFormatString, e), | |
g = d(t.fakeFormatString, n), | |
p = "", | |
v = "", | |
m = "", | |
y = "", | |
S = ""; | |
for (s = 0; s < a.length && (!a[s] || u.isSame(c, a[s])); s++) p += f[s]; | |
for (o = a.length - 1; o > s && (!a[o] || u.isSame(c, a[o])) && (o - 1 !== s || "." !== f[o]); o--) v = f[o] + v; | |
for (l = s; l <= o; l++) m += f[l], y += g[l]; | |
return (m || y) && (S = r ? y + i + m : m + i + y), h(p + S + v) | |
} | |
function r(t) { | |
return w[t] || (w[t] = s(t)) | |
} | |
function s(t) { | |
var e = o(t); | |
return { | |
fakeFormatString: a(e), | |
sameUnits: u(e) | |
} | |
} | |
function o(t) { | |
for (var e, n = [], i = /\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g; e = i.exec(t);) e[1] ? n.push.apply(n, l(e[1])) : e[2] ? n.push({ | |
maybe: o(e[2]) | |
}) : e[3] ? n.push({ | |
token: e[3] | |
}) : e[5] && n.push.apply(n, l(e[5])); | |
return n | |
} | |
function l(t) { | |
return ". " === t ? [".", " "] : [t] | |
} | |
function a(t) { | |
var e, n, i = []; | |
for (e = 0; e < t.length; e++) n = t[e], "string" == typeof n ? i.push("[" + n + "]") : n.token ? n.token in y ? i.push(p + "[" + n.token + "]") : i.push(n.token) : n.maybe && i.push(v + a(n.maybe) + v); | |
return i.join(g) | |
} | |
function u(t) { | |
var e, n, i, r = []; | |
for (e = 0; e < t.length; e++) n = t[e], n.token ? (i = S[n.token.charAt(0)], r.push(i ? i.unit : "second")) : n.maybe ? r.push.apply(r, u(n.maybe)) : r.push(null); | |
return r | |
} | |
function c(t, e) { | |
return h(d(t, e).join("")) | |
} | |
function d(t, n) { | |
var i, r, s = [], | |
o = e(n, t), | |
l = o.split(g); | |
for (i = 0; i < l.length; i++) r = l[i], r.charAt(0) === p ? s.push(y[r.substring(1)](n)) : s.push(r); | |
return s | |
} | |
function h(t) { | |
return t.replace(m, function(t, e) { | |
return e.match(/[1-9]/) ? e : "" | |
}) | |
} | |
function f(t) { | |
var e, n, i, r, s = o(t); | |
for (e = 0; e < s.length; e++) n = s[e], n.token && (i = S[n.token.charAt(0)], i && (!r || i.value > r.value) && (r = i)); | |
return r ? r.unit : null | |
} | |
Zt.formatDate = t, Zt.formatRange = n, Zt.oldMomentFormat = e, Zt.queryMostGranularFormatUnit = f; | |
var g = "\v", | |
p = "", | |
v = "", | |
m = new RegExp(v + "([^" + v + "]*)" + v, "g"), | |
y = { | |
t: function(t) { | |
return e(t, "a").charAt(0) | |
}, | |
T: function(t) { | |
return e(t, "A").charAt(0) | |
} | |
}, | |
S = { | |
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" | |
} | |
}, | |
w = {} | |
}(); | |
var oe = Zt.formatDate, | |
le = Zt.formatRange, | |
ae = Zt.oldMomentFormat; | |
Zt.Class = wt, wt.extend = function() { | |
var t, e, n = arguments.length; | |
for (t = 0; t < n; t++) e = arguments[t], t < n - 1 && Et(this, e); | |
return bt(this, e || {}) | |
}, wt.mixin = function(t) { | |
Et(this, t) | |
}, Zt.Promise = Dt, Dt.immediate = !0, Dt.resolve = function(e) { | |
if (e && "function" == typeof e.resolve) return e.promise(); | |
if (e && "function" == typeof e.then) return e; | |
var n = t.Deferred().resolve(e), | |
i = n.promise(); | |
if (Dt.immediate) { | |
var r = i.then; | |
i._value = e, i.then = function(t, n) { | |
return "function" == typeof t ? Dt.resolve(t(e)) : r.call(i, t, n) | |
} | |
} | |
return i | |
}, Dt.reject = function() { | |
return t.Deferred().reject().promise() | |
}, Dt.all = function(e) { | |
var n, i, r, s = !1; | |
if (Dt.immediate) | |
for (s = !0, n = [], i = 0; i < e.length; i++) | |
if (r = e[i], r && "function" == typeof r.state && "resolved" === r.state() && "_value" in r) n.push(r._value); | |
else { | |
if (r && "function" == typeof r.then) { | |
s = !1; | |
break | |
} | |
n.push(r) | |
} | |
return s ? Dt.resolve(n) : t.when.apply(t.when, e).then(function() { | |
return t.when(t.makeArray(arguments)) | |
}) | |
}, Zt.TaskQueue = Tt; | |
var ue = Zt.EmitterMixin = { | |
on: function(e, n) { | |
return t(this).on(e, this._prepareIntercept(n)), this | |
}, | |
one: function(e, n) { | |
return t(this).one(e, this._prepareIntercept(n)), this | |
}, | |
_prepareIntercept: function(e) { | |
var n = function(t, n) { | |
return e.apply(n.context || this, n.args || []) | |
}; | |
return e.guid || (e.guid = t.guid++), n.guid = e.guid, n | |
}, | |
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 | |
} | |
}, | |
ce = Zt.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 | |
}(), | |
de = wt.extend(ce, { | |
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(), | |
c = t(window), | |
h = d(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 = c, e = 0, n = 0) : (i = h.offset(), e = i.top, n = i.left), e += c.scrollTop(), n += c.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)) | |
} | |
}), | |
he = Zt.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; | |
!t && this.els.length > 0 && (t = this.els.eq(0).offsetParent()), this.origin = t ? t.offset() : null, 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; | |
return this.els.length > 0 && (t = d(this.els.eq(0)), !t.is(document)) ? f(t) : null | |
}, | |
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 | |
} | |
}), | |
fe = Zt.DragListener = wt.extend(ce, { | |
options: null, | |
subjectEl: null, | |
originX: null, | |
originY: null, | |
scrollEl: null, | |
isInteracting: !1, | |
isDistanceSurpassed: !1, | |
isDelayEnded: !1, | |
isDragging: !1, | |
isTouch: !1, | |
isGeneric: !1, | |
delay: null, | |
delayTimeoutId: null, | |
minDistance: null, | |
shouldCancelTouchScroll: !0, | |
scrollAlwaysKills: !1, | |
constructor: function(t) { | |
this.options = t || {} | |
}, | |
startInteraction: function(e, n) { | |
if ("mousedown" === e.type) { | |
if (pe.get().shouldIgnoreMouse()) return; | |
if (!w(e)) return; | |
e.preventDefault() | |
} | |
this.isInteracting || (n = n || {}, this.delay = ut(n.delay, this.options.delay, 0), this.minDistance = ut(n.distance, this.options.distance, 0), this.subjectEl = this.options.subjectEl, T(t("body")), this.isInteracting = !0, this.isTouch = D(e), this.isGeneric = "dragstart" === e.type, this.isDelayEnded = !1, this.isDistanceSurpassed = !1, this.originX = b(e), this.originY = E(e), this.scrollEl = d(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(e, n) { | |
this.isInteracting && (this.endDrag(e), this.delayTimeoutId && (clearTimeout(this.delayTimeoutId), this.delayTimeoutId = null), this.destroyAutoScroll(), this.unbindHandlers(), this.isInteracting = !1, this.handleInteractionEnd(e, n), C(t("body"))) | |
}, | |
handleInteractionEnd: function(t, e) { | |
this.trigger("interactionEnd", t, e || !1) | |
}, | |
bindHandlers: function() { | |
var e = pe.get(); | |
this.isGeneric ? this.listenTo(t(document), { | |
drag: this.handleMove, | |
dragstop: this.endInteraction | |
}) : this.isTouch ? this.listenTo(e, { | |
touchmove: this.handleTouchMove, | |
touchend: this.endInteraction, | |
scroll: this.handleTouchScroll | |
}) : this.listenTo(e, { | |
mousemove: this.handleMouseMove, | |
mouseup: this.endInteraction | |
}), this.listenTo(e, { | |
selectstart: H, | |
contextmenu: H | |
}) | |
}, | |
unbindHandlers: function() { | |
this.stopListeningTo(pe.get()), this.stopListeningTo(t(document)) | |
}, | |
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 = b(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 && this.shouldCancelTouchScroll && t.preventDefault(), this.handleMove(t) | |
}, | |
handleMouseMove: function(t) { | |
this.handleMove(t) | |
}, | |
handleTouchScroll: function(t) { | |
this.isDragging && !this.scrollAlwaysKills || 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)) | |
} | |
}); | |
fe.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", yt(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 - (b(t) - o.left)) / s, r = (s - (o.right - b(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(mt(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 ge = fe.extend({ | |
component: null, | |
origHit: null, | |
hit: null, | |
coordAdjust: null, | |
constructor: function(t, e) { | |
fe.call(this, e), this.component = t | |
}, | |
handleInteractionStart: function(t) { | |
var e, n, i, r = this.subjectEl; | |
this.component.hitsNeeded(), this.computeScrollBounds(), t ? (n = { | |
left: b(t), | |
top: E(t) | |
}, i = n, r && (e = h(r), i = x(i, e)), this.origHit = this.queryHit(i.left, i.top), r && this.options.subjectCenter && (this.origHit && (e = R(this.origHit, e) || e), i = I(e)), this.coordAdjust = k(i, n)) : (this.origHit = null, this.coordAdjust = null), fe.prototype.handleInteractionStart.apply(this, arguments) | |
}, | |
handleDragStart: function(t) { | |
var e; | |
fe.prototype.handleDragStart.apply(this, arguments), e = this.queryHit(b(t), E(t)), e && this.handleHitOver(e) | |
}, | |
handleDrag: function(t, e, n) { | |
var i; | |
fe.prototype.handleDrag.apply(this, arguments), i = this.queryHit(b(n), E(n)), Ct(i, this.hit) || (this.hit && this.handleHitOut(), i && this.handleHitOver(i)) | |
}, | |
handleDragEnd: function() { | |
this.handleHitDone(), fe.prototype.handleDragEnd.apply(this, arguments) | |
}, | |
handleHitOver: function(t) { | |
var e = Ct(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() { | |
fe.prototype.handleInteractionEnd.apply(this, arguments), this.origHit = null, this.hit = null, this.component.hitsNotNeeded() | |
}, | |
handleScrollEnd: function() { | |
fe.prototype.handleScrollEnd.apply(this, arguments), this.isDragging && (this.component.releaseHits(), this.component.prepareHits()) | |
}, | |
queryHit: function(t, e) { | |
return this.coordAdjust && (t += this.coordAdjust.left, e += this.coordAdjust.top), this.component.queryHit(t, e) | |
} | |
}); | |
Zt.touchMouseIgnoreWait = 500; | |
var pe = wt.extend(ce, ue, { | |
isTouching: !1, | |
mouseIgnoreDepth: 0, | |
handleScrollProxy: null, | |
bind: function() { | |
var e = this; | |
this.listenTo(t(document), { | |
touchstart: this.handleTouchStart, | |
touchcancel: this.handleTouchCancel, | |
touchend: this.handleTouchEnd, | |
mousedown: this.handleMouseDown, | |
mousemove: this.handleMouseMove, | |
mouseup: this.handleMouseUp, | |
click: this.handleClick, | |
selectstart: this.handleSelectStart, | |
contextmenu: this.handleContextMenu | |
}), window.addEventListener("touchmove", this.handleTouchMoveProxy = function(n) { | |
e.handleTouchMove(t.Event(n)) | |
}, { | |
passive: !1 | |
}), window.addEventListener("scroll", this.handleScrollProxy = function(n) { | |
e.handleScroll(t.Event(n)) | |
}, !0) | |
}, | |
unbind: function() { | |
this.stopListeningTo(t(document)), window.removeEventListener("touchmove", this.handleTouchMoveProxy), window.removeEventListener("scroll", this.handleScrollProxy, !0) | |
}, | |
handleTouchStart: function(t) { | |
this.stopTouch(t, !0), this.isTouching = !0, this.trigger("touchstart", t) | |
}, | |
handleTouchMove: function(t) { | |
this.isTouching && this.trigger("touchmove", t) | |
}, | |
handleTouchCancel: function(t) { | |
this.isTouching && (this.trigger("touchcancel", t), this.stopTouch(t)) | |
}, | |
handleTouchEnd: function(t) { | |
this.stopTouch(t) | |
}, | |
handleMouseDown: function(t) { | |
this.shouldIgnoreMouse() || this.trigger("mousedown", t) | |
}, | |
handleMouseMove: function(t) { | |
this.shouldIgnoreMouse() || this.trigger("mousemove", t) | |
}, | |
handleMouseUp: function(t) { | |
this.shouldIgnoreMouse() || this.trigger("mouseup", t) | |
}, | |
handleClick: function(t) { | |
this.shouldIgnoreMouse() || this.trigger("click", t) | |
}, | |
handleSelectStart: function(t) { | |
this.trigger("selectstart", t) | |
}, | |
handleContextMenu: function(t) { | |
this.trigger("contextmenu", t) | |
}, | |
handleScroll: function(t) { | |
this.trigger("scroll", t) | |
}, | |
stopTouch: function(t, e) { | |
this.isTouching && (this.isTouching = !1, this.trigger("touchend", t), e || this.startTouchMouseIgnore()) | |
}, | |
startTouchMouseIgnore: function() { | |
var t = this, | |
e = Zt.touchMouseIgnoreWait; | |
e && (this.mouseIgnoreDepth++, setTimeout(function() { | |
t.mouseIgnoreDepth-- | |
}, e)) | |
}, | |
shouldIgnoreMouse: function() { | |
return this.isTouching || Boolean(this.mouseIgnoreDepth) | |
} | |
}); | |
! function() { | |
var t = null, | |
e = 0; | |
pe.get = function() { | |
return t || (t = new pe, t.bind()), t | |
}, pe.needed = function() { | |
pe.get(), e++ | |
}, pe.unneeded = function() { | |
e--, e || (t.unbind(), t = null) | |
} | |
}(); | |
var ve = wt.extend(ce, { | |
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 = b(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 = b(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()) | |
} | |
}), | |
me = Zt.Grid = wt.extend(ce, { | |
hasDayInteractions: !0, | |
view: null, | |
isRTL: null, | |
start: null, | |
end: null, | |
el: null, | |
elsByFill: null, | |
eventTimeFormat: null, | |
displayEventTime: null, | |
displayEventEnd: null, | |
minResizeDuration: null, | |
largeUnit: null, | |
dayClickListener: null, | |
daySelectListener: null, | |
segDragListener: null, | |
segResizeListener: null, | |
externalDragListener: null, | |
constructor: function(t) { | |
this.view = t, this.isRTL = t.opt("isRTL"), this.elsByFill = {}, this.dayClickListener = this.buildDayClickListener(), this.daySelectListener = this.buildDaySelectListener() | |
}, | |
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 ? G(t, e, this.largeUnit) : z(t, e) | |
}, | |
hitsNeededDepth: 0, | |
hitsNeeded: function() { | |
this.hitsNeededDepth++ || this.prepareHits() | |
}, | |
hitsNotNeeded: function() { | |
this.hitsNeededDepth && !--this.hitsNeededDepth && this.releaseHits() | |
}, | |
prepareHits: function() {}, | |
releaseHits: function() {}, | |
queryHit: function(t, e) {}, | |
getSafeHitSpan: function(t) { | |
var e = this.getHitSpan(t); | |
return Q(e, this.view.activeRange) ? e : null | |
}, | |
getHitSpan: function(t) {}, | |
getHitEl: function(t) {}, | |
setElement: function(t) { | |
this.el = t, this.hasDayInteractions && (T(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) { | |
var e = this.view; | |
pe.get().shouldIgnoreMouse() || (this.dayClickListener.startInteraction(t), e.opt("selectable") && this.daySelectListener.startInteraction(t, { | |
distance: e.opt("selectMinDistance") | |
})) | |
}, | |
dayTouchStart: function(t) { | |
var e, n = this.view; | |
n.isSelected || n.selectedEvent || (e = n.opt("selectLongPressDelay"), null == e && (e = n.opt("longPressDelay")), this.dayClickListener.startInteraction(t), n.opt("selectable") && this.daySelectListener.startInteraction(t, { | |
delay: e | |
})) | |
}, | |
buildDayClickListener: function() { | |
var t, e = this, | |
n = this.view, | |
i = new ge(this, { | |
scroll: n.opt("dragScroll"), | |
interactionStart: function() { | |
t = i.origHit | |
}, | |
hitOver: function(e, n, i) { | |
n || (t = null) | |
}, | |
hitOut: function() { | |
t = null | |
}, | |
interactionEnd: function(i, r) { | |
var s; | |
!r && t && (s = e.getSafeHitSpan(t), s && n.triggerDayClick(s, e.getHitEl(t), i)) | |
} | |
}); | |
return i.shouldCancelTouchScroll = !1, i.scrollAlwaysKills = !0, i | |
}, | |
buildDaySelectListener: function() { | |
var t, e = this, | |
n = this.view, | |
i = new ge(this, { | |
scroll: n.opt("dragScroll"), | |
interactionStart: function() { | |
t = null | |
}, | |
dragStart: function() { | |
n.unselect() | |
}, | |
hitOver: function(n, i, r) { | |
var o, l; | |
r && (o = e.getSafeHitSpan(r), l = e.getSafeHitSpan(n), t = o && l ? e.computeSelection(o, l) : null, t ? e.renderSelection(t) : t === !1 && s()) | |
}, | |
hitOut: function() { | |
t = null, e.unrenderSelection() | |
}, | |
hitDone: function() { | |
o() | |
}, | |
interactionEnd: function(e, i) { | |
!i && t && n.reportSelection(t, e) | |
} | |
}); | |
return i | |
}, | |
clearDragListeners: function() { | |
this.dayClickListener.endInteraction(), this.daySelectListener.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 ? rt(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(pt), { | |
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 = ht(i ? i.call(this, e) : {}); | |
return "<" + this.fillSegTag + (r.length ? ' class="' + r.join(" ") + '"' : "") + (s ? ' style="' + s + '"' : "") + " />" | |
}, | |
getDayClasses: function(t, e) { | |
var n, i = this.view, | |
r = []; | |
return Z(t, i.activeRange) ? (r.push("fc-" + Kt[t.day()]), 1 == i.currentRangeAs("months") && t.month() != i.currentRange.start.month() && r.push("fc-other-month"), n = i.calendar.getNow(), t.isSame(n, "day") ? (r.push("fc-today"), e !== !0 && r.push(i.highlightStateClass)) : t < n ? r.push("fc-past") : r.push("fc-future")) : r.push("fc-disabled-day"), r | |
} | |
}); | |
me.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++)(xt(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(t, e) { | |
return this.eventsToSegs(this.buildBusinessHourEvents(t, e)) | |
}, | |
buildBusinessHourEvents: function(e, n) { | |
var i, r = this.view.calendar; | |
return null == n && (n = r.options.businessHours), i = r.computeBusinessHourEvents(e, n), !i.length && n && (i = [t.extend({}, ke, { | |
start: this.view.activeRange.end, | |
end: this.view.activeRange.end, | |
dow: null | |
})]), i | |
}, | |
bindSegHandlers: function() { | |
this.bindSegHandlersToEl(this.el) | |
}, | |
bindSegHandlersToEl: function(t) { | |
this.bindSegHandlerToEl(t, "touchstart", this.handleSegTouchStart), 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.publiclyTrigger("eventClick", t.el[0], t.event, e); | |
n === !1 && e.preventDefault() | |
}, | |
handleSegMouseover: function(t, e) { | |
pe.get().shouldIgnoreMouse() || this.mousedOverSeg || (this.mousedOverSeg = t, this.view.isEventResizable(t.event) && t.el.addClass("fc-allow-mouse-resize"), this.view.publiclyTrigger("eventMouseover", t.el[0], t.event, e)) | |
}, | |
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.publiclyTrigger("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, r = this.view, | |
s = t.event, | |
o = r.isEventSelected(s), | |
l = r.isEventDraggable(s), | |
a = r.isEventResizable(s), | |
u = !1; | |
o && a && (u = this.startSegResize(t, e)), u || !l && !a || (i = r.opt("eventLongPressDelay"), null == i && (i = r.opt("longPressDelay")), n = l ? this.buildSegDragListener(t) : this.buildSegSelectListener(t), n.startInteraction(e, { | |
delay: o ? 0 : i | |
})) | |
}, | |
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 = t.el, | |
u = t.event; | |
if (this.segDragListener) return this.segDragListener; | |
var c = this.segDragListener = new ge(l, { | |
scroll: l.opt("dragScroll"), | |
subjectEl: a, | |
subjectCenter: !0, | |
interactionStart: function(i) { | |
t.component = r, e = !1, n = new ve(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(u) && l.selectEvent(u), e = !0, r.handleSegMouseout(t, n), r.segDragStart(t, n), l.hideEvent(u) | |
}, | |
hitOver: function(e, o, a) { | |
var d, h, f, g = !0; | |
t.hit && (a = t.hit), d = a.component.getSafeHitSpan(a), h = e.component.getSafeHitSpan(e), d && h ? (i = r.computeEventDrop(d, h, u), g = i && r.isEventLocationAllowed(i, u)) : g = !1, g || (i = null, s()), i && (f = l.renderDrag(i, t)) ? (f.addClass("fc-dragging"), c.isTouch || r.applyDragOpacity(f), 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(), r.segDragStop(t, s)), i ? l.reportSegDrop(t, i, r.largeUnit, a, s) : l.showEvent(u) | |
}), 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 fe({ | |
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.publiclyTrigger("eventDragStart", t.el[0], t.event, e, {}) | |
}, | |
segDragStop: function(t, e) { | |
this.isDraggingSeg = !1, this.view.publiclyTrigger("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 && tt(i) ? (r = { | |
start: n.start.clone(), | |
end: s.getEventEnd(n), | |
allDay: !1 | |
}, s.normalizeEventTimes(r)) : r = Rt(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, | |
a = Bt(t), | |
u = r.externalDragListener = new ge(this, { | |
interactionStart: function() { | |
r.isDraggingExternal = !0 | |
}, | |
hitOver: function(t) { | |
var e = !0, | |
n = t.component.getSafeHitSpan(t); | |
n ? (i = r.computeExternalDrop(n, a), e = i && r.isExternalLocationAllowed(i, a.eventProps)) : e = !1, e || (i = null, s()), i && r.renderDrag(i) | |
}, | |
hitOut: function() { | |
i = null | |
}, | |
hitDone: function() { | |
o(), r.unrenderDrag() | |
}, | |
interactionEnd: function(e) { | |
i && l.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, | |
c = t.event, | |
d = a.getEventEnd(c), | |
h = this.segResizeListener = new ge(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, a) { | |
var u = !0, | |
h = r.getSafeHitSpan(a), | |
f = r.getSafeHitSpan(n); | |
h && f ? (i = e ? r.computeEventStartResize(h, f, c) : r.computeEventEndResize(h, f, c), u = i && r.isEventLocationAllowed(i, c)) : u = !1, u ? i.start.isSame(c.start.clone().stripZone()) && i.end.isSame(d.clone().stripZone()) && (i = null) : (i = null, s()), i && (l.hideEvent(c), r.renderEventResize(i, t)) | |
}, | |
hitOut: function() { | |
i = null, l.showEvent(c) | |
}, | |
hitDone: function() { | |
r.unrenderEventResize(), o() | |
}, | |
interactionEnd: function(e) { | |
n && r.segResizeStop(t, e), i ? l.reportSegResize(t, i, r.largeUnit, u, e) : l.showEvent(c), r.segResizeListener = null | |
} | |
}); | |
return h | |
}, | |
segResizeStart: function(t, e) { | |
this.isResizingSeg = !0, this.view.publiclyTrigger("eventResizeStart", t.el[0], t.event, e, {}) | |
}, | |
segResizeStop: function(t, e) { | |
this.isResizingSeg = !1, this.view.publiclyTrigger("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 && tt(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") | |
}, | |
isEventLocationAllowed: function(t, e) { | |
if (this.isEventLocationInRange(t)) { | |
var n, i = this.view.calendar, | |
r = this.eventToSpans(t); | |
if (r.length) { | |
for (n = 0; n < r.length; n++) | |
if (!i.isEventSpanAllowed(r[n], e)) return !1; | |
return !0 | |
} | |
} | |
return !1 | |
}, | |
isExternalLocationAllowed: function(t, e) { | |
if (this.isEventLocationInRange(t)) { | |
var n, i = this.view.calendar, | |
r = this.eventToSpans(t); | |
if (r.length) { | |
for (n = 0; n < r.length; n++) | |
if (!i.isExternalSpanAllowed(r[n], t, e)) return !1; | |
return !0 | |
} | |
} | |
return !1 | |
}, | |
isEventLocationInRange: function(t) { | |
return Q(this.eventToRawRange(t), this.view.validRange) | |
}, | |
eventToSegs: function(t) { | |
return this.eventsToSegs([t]) | |
}, | |
eventToSpans: function(t) { | |
var e = this.eventToRange(t); | |
return e ? this.eventRangeToSpans(e, t) : [] | |
}, | |
eventsToSegs: function(e, n) { | |
var i = this, | |
r = Lt(e), | |
s = []; | |
return t.each(r, function(t, e) { | |
var r, o, l = [], | |
a = []; | |
for (o = 0; o < e.length; o++) r = i.eventToRange(e[o]), r && (a.push(r), l.push(e[o])); | |
if (It(e[0])) | |
for (a = i.invertRanges(a), o = 0; o < a.length; o++) s.push.apply(s, i.eventRangeToSegs(a[o], e[0], n)); | |
else | |
for (o = 0; o < a.length; o++) s.push.apply(s, i.eventRangeToSegs(a[o], l[o], n)) | |
}), s | |
}, | |
eventToRange: function(t) { | |
return this.refineRawEventRange(this.eventToRawRange(t)) | |
}, | |
refineRawEventRange: function(t) { | |
var e = this.view, | |
n = e.calendar, | |
i = N(t, e.activeRange); | |
if (i) return n.localizeMoment(i.start), n.localizeMoment(i.end), i | |
}, | |
eventToRawRange: 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 { | |
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], t.isStart || (r.isStart = !1), t.isEnd || (r.isEnd = !1), 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.activeRange.start.clone(), | |
s = i.activeRange.end.clone(), | |
o = [], | |
l = r; | |
for (t.sort(Mt), 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(mt(this, "compareEventSegs")) | |
}, | |
compareEventSegs: function(t, e) { | |
return t.eventStartMS - e.eventStartMS || e.eventDurationMS - t.eventDurationMS || e.event.allDay - t.event.allDay || M(t.event, e.event, this.view.eventOrderSpecs) | |
} | |
}), Zt.pluckEventDateProps = Rt, Zt.isBgEvent = xt, Zt.dataAttrPrefix = ""; | |
var ye = Zt.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")), | |
c = []; | |
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 && c.push({ | |
row: e, | |
firstRowDayIndex: r - n, | |
lastRowDayIndex: s - n, | |
isStart: r === a, | |
isEnd: s === u | |
}); | |
return c | |
}, | |
sliceRangeByDay: function(t) { | |
var e, n, i, r, s, o, l = this.daysPerRow, | |
a = this.view.computeDayRange(t), | |
u = this.getDateDayIndex(a.start), | |
c = this.getDateDayIndex(a.end.clone().subtract(1, "days")), | |
d = []; | |
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(c, r), s = Math.ceil(s), o = Math.floor(o), s <= o && d.push({ | |
row: e, | |
firstRowDayIndex: s - n, | |
lastRowDayIndex: o - n, | |
isStart: s === u, | |
isEnd: o === c | |
}); | |
return d | |
}, | |
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, | |
r = Z(t, i.activeRange), | |
s = ["fc-day-header", i.widgetHeaderClass], | |
o = ct(t.format(this.colHeadFormat)); | |
return 1 === this.rowCnt ? s = s.concat(this.getDayClasses(t, !0)) : s.push("fc-" + Kt[t.day()]), '<th class="' + s.join(" ") + '"' + (1 === (r && this.rowCnt) ? ' data-date="' + t.format("YYYY-MM-DD") + '"' : "") + (e > 1 ? ' colspan="' + e + '"' : "") + (n ? " " + n : "") + ">" + (r ? i.buildGotoAnchorHtml({ | |
date: t, | |
forceOff: this.rowCnt > 1 || 1 === this.colCnt | |
}, o) : o) + "</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 = Z(t, n.activeRange), | |
r = this.getDayClasses(t); | |
return r.unshift("fc-day", n.widgetContentClass), '<td class="' + r.join(" ") + '"' + (i ? ' 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)) | |
} | |
}, | |
Se = Zt.DayGrid = me.extend(ye, { | |
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, .fc-disabled-day"), this.rowCoordCache = new he({ | |
els: this.rowEls, | |
isVertical: !0 | |
}), this.colCoordCache = new he({ | |
els: this.cellEls.slice(0, this.colCnt), | |
isHorizontal: !0 | |
}), e = 0; e < r; e++) | |
for (n = 0; n < s; n++) i.publiclyTrigger("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 = this.view, | |
r = "", | |
s = Z(t, i.activeRange), | |
o = i.dayNumbersVisible && s; | |
return o || i.cellWeekNumbersVisible ? (e = this.getDayClasses(t), e.unshift("fc-day-top"), i.cellWeekNumbersVisible && (n = "ISO" === t._locale._fullCalendar_weekCalc ? 1 : t._locale.firstDayOfWeek()), r += '<td class="' + e.join(" ") + '"' + (s ? ' data-date="' + t.format() + '"' : "") + ">", i.cellWeekNumbersVisible && t.day() == n && (r += i.buildGotoAnchorHtml({ | |
date: t, | |
type: "week" | |
}, { | |
class: "fc-week-number" | |
}, t.format("w"))), o && (r += i.buildGotoAnchorHtml(t, { | |
class: "fc-day-number" | |
}, t.date())), r += "</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) { | |
var n, i = this.eventToSpans(t); | |
for (n = 0; n < i.length; n++) this.renderHighlight(i[n]); | |
if (e && e.component !== this) return this.renderEventLocationHelper(t, e) | |
}, | |
unrenderDrag: function() { | |
this.unrenderHighlight(), this.unrenderHelper() | |
}, | |
renderEventResize: function(t, e) { | |
var n, i = this.eventToSpans(t); | |
for (n = 0; n < i.length; n++) this.renderHighlight(i[n]); | |
return 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 | |
} | |
}); | |
Se.mixin({ | |
rowStructs: null, | |
unrenderEvents: function() { | |
this.removeSegPopover(), me.prototype.unrenderEvents.apply(this, arguments) | |
}, | |
getEventSegs: function() { | |
return me.prototype.getEventSegs.call(this).concat(this.popoverSegs || []) | |
}, | |
renderBgSegs: function(e) { | |
var n = t.grep(e, function(t) { | |
return t.event.allDay | |
}); | |
return me.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), | |
c = ht(this.getSegSkinCss(t)), | |
d = ""; | |
return u.unshift("fc-day-grid-event", "fc-h-event"), t.isStart && (n = this.getEventTimeText(s), n && (d = '<span class="fc-time">' + ct(n) + "</span>")), i = '<span class="fc-title">' + (ct(s.title || "") || " ") + "</span>", '<a class="' + u.join(" ") + '"' + (s.url ? ' href="' + ct(s.url) + '"' : "") + (c ? ' style="' + c + '"' : "") + '><div class="fc-content">' + (this.isRTL ? i + " " + d : d + " " + 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;) c = (m[r - 1] || [])[o], c ? c.attr("rowspan", parseInt(c.attr("rowspan") || 1, 10) + 1) : (c = t("<td/>"), l.append(c)), v[r][o] = c, m[r][o] = c, o++ | |
} | |
var r, s, o, l, a, u, c, d = 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), c = t('<td class="fc-event-container"/>').append(u.el), u.leftCol != u.rightCol ? c.attr("colspan", u.rightCol - u.leftCol + 1) : m[r][o] = c; o <= u.rightCol;) v[r][o] = c, p[r][o] = u, o++; | |
l.append(c) | |
} | |
i(d), 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 && Ft(n, r[i]); i++); | |
n.level = i, (r[i] || (r[i] = [])).push(n) | |
} | |
for (i = 0; i < r.length; i++) r[i].sort(Nt); | |
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 | |
} | |
}), Se.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 (; E < i;) u = S.getCellSegs(e, E, n), u.length && (h = s[n - 1][E], y = S.renderMoreLink(e, E, u), m = t("<div/>").append(y), h.append(m), b.push(m[0])), E++ | |
} | |
var r, s, o, l, a, u, c, d, h, f, g, p, v, m, y, S = this, | |
w = this.rowStructs[e], | |
b = [], | |
E = 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), d = [], c = 0; E <= a.rightCol;) u = this.getCellSegs(e, E, n), d.push(u), c += u.length, E++; | |
if (c) { | |
for (h = s[n - 1][a.leftCol], f = h.attr("rowspan") || 1, g = [], p = 0; p < d.length; p++) v = t('<td class="fc-more-cell"/>').attr("rowspan", f), u = d[p], y = this.renderMoreLink(e, a.leftCol + p, [a].concat(u)), m = t("<div/>").append(y), v.append(m), g.push(v[0]), b.push(v[0]); | |
h.addClass("fc-limited").after(t(g)), o.push(h[0]) | |
} | |
} | |
i(this.colCnt), w.moreEls = t(b), 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), | |
c = r.getCellEl(e, n), | |
d = r.getCellSegs(e, n), | |
h = r.resliceDaySegs(d, a), | |
f = r.resliceDaySegs(i, a); | |
"function" == typeof l && (l = s.publiclyTrigger("eventLimitClick", null, { | |
date: a, | |
dayEl: c, | |
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() { | |
if (o.popoverSegs) | |
for (var t, e = 0; e < o.popoverSegs.length; ++e) t = o.popoverSegs[e], l.publiclyTrigger("eventDestroy", t.event, t.event, t.el); | |
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">' + ct(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.hitsNeeded(), i[r].hit = this.getCellHit(e, n), this.hitsNotNeeded(), 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 = N(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 we = Zt.TimeGrid = me.extend(ye, { | |
slotDuration: null, | |
snapDuration: null, | |
snapsPerSlot: null, | |
labelFormat: null, | |
labelInterval: null, | |
colEls: null, | |
slatContainerEl: null, | |
slatEls: null, | |
nowIndicatorEls: null, | |
colCoordCache: null, | |
slatCoordCache: null, | |
constructor: function() { | |
me.apply(this, arguments), this.processOptions() | |
}, | |
renderDates: function() { | |
this.el.html(this.renderHtml()), this.colEls = this.el.find(".fc-day, .fc-disabled-day"), this.slatContainerEl = this.el.find(".fc-slats"), this.slatEls = this.slatContainerEl.find("tr"), this.colCoordCache = new he({ | |
els: this.colEls, | |
isHorizontal: !0 | |
}), this.slatCoordCache = new he({ | |
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.view.minTime); l < this.view.maxTime;) t = this.start.clone().time(l), n = vt(Y(l, this.labelInterval)), i = '<td class="fc-axis fc-time ' + r.widgetContentClass + '" ' + r.axisStyleAttr() + ">" + (n ? "<span>" + ct(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, 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 = Ge.length - 1; n >= 0; n--) | |
if (i = e.duration(Ge[n]), r = Y(i, t), vt(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, | |
c = Math.floor(u * n), | |
d = o * n + c, | |
h = l + c / n * a, | |
f = l + (c + 1) / n * a; | |
return { | |
col: s, | |
snap: d, | |
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.view.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().time(0), r = { | |
start: i.clone().add(this.view.minTime), | |
end: i.clone().add(this.view.maxTime) | |
}, e = N(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.view.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) { | |
var n, i; | |
if (e) return this.renderEventLocationHelper(t, e); | |
for (n = this.eventToSpans(t), i = 0; i < n.length; i++) this.renderHighlight(n[i]) | |
}, | |
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() | |
} | |
}); | |
we.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), | |
c = this.getSegClasses(t, l, a || u), | |
d = ht(this.getSegSkinCss(t)); | |
return c.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="' + c.join(" ") + '"' + (o.url ? ' href="' + ct(o.url) + '"' : "") + (d ? ' style="' + d + '"' : "") + '><div class="fc-content">' + (n ? '<div class="fc-time" data-start="' + ct(r) + '" data-full="' + ct(i) + '"><span>' + ct(n) + "</span></div>" : "") + (o.title ? '<div class="fc-title">' + ct(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, i; | |
for (e = 0; e < t.length; e++) n = t[e], i = this.dayDates[n.dayIndex], n.top = this.computeDateTop(n.start, i), n.bottom = this.computeDateTop(n.end, i) | |
}, | |
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), At(e), n = e[0]) { | |
for (i = 0; i < n.length; i++) Gt(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(mt(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 be = Zt.View = wt.extend(ue, ce, { | |
type: null, | |
name: null, | |
title: null, | |
calendar: null, | |
viewSpec: null, | |
options: null, | |
el: null, | |
isDateSet: !1, | |
isDateRendered: !1, | |
dateRenderQueue: null, | |
isEventsBound: !1, | |
isEventsSet: !1, | |
isEventsRendered: !1, | |
eventRenderQueue: 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) { | |
this.calendar = t, this.viewSpec = n, this.type = n.type, this.options = n.options, this.name = this.type, this.nextDayThreshold = e.duration(this.opt("nextDayThreshold")), this.initThemingProps(), this.initHiddenDays(), this.isRTL = this.opt("isRTL"), this.eventOrderSpecs = L(this.opt("eventOrder")), this.dateRenderQueue = new Tt, this.eventRenderQueue = new Tt(this.opt("eventRenderWait")), this.initialize() | |
}, | |
initialize: function() {}, | |
opt: function(t) { | |
return this.options[t] | |
}, | |
publiclyTrigger: function(t, e) { | |
var n = this.calendar; | |
return n.publiclyTrigger.apply(n, [t, e || this].concat(Array.prototype.slice.call(arguments, 2), [this])) | |
}, | |
rejectOn: function(t, e) { | |
var n = this; | |
return new Dt(function(i, r) { | |
function s() { | |
n.off(t, r) | |
} | |
n.one(t, r), e.then(function(t) { | |
s(), i(t) | |
}, function() { | |
s(), r() | |
}) | |
}) | |
}, | |
updateTitle: function() { | |
this.title = this.computeTitle(), this.calendar.setToolbarsTitle(this.title) | |
}, | |
computeTitle: function() { | |
var t; | |
return t = /^(year|month)$/.test(this.currentRangeUnit) ? this.currentRange : this.activeRange, this.formatRange({ | |
start: this.calendar.applyTimezone(t.start), | |
end: this.calendar.applyTimezone(t.end) | |
}, this.opt("titleFormat") || this.computeTitleFormat(), this.opt("titleRangeSeparator")) | |
}, | |
computeTitleFormat: function() { | |
return "year" == this.currentRangeUnit ? "YYYY" : "month" == this.currentRangeUnit ? this.opt("monthYearFormat") : this.currentRangeAs("days") > 1 ? "ll" : "LL" | |
}, | |
formatRange: function(t, e, n) { | |
var i = t.end; | |
return i.hasTime() || (i = i.clone().subtract(1)), le(t.start, i, e, n, this.opt("isRTL")) | |
}, | |
getAllDayHtml: function() { | |
return this.opt("allDayHtml") || ct(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 = Zt.moment(r), l = { | |
date: r.format("YYYY-MM-DD"), | |
type: s || "day" | |
}, "string" == typeof n && (i = n, n = null), n = n ? " " + ft(n) : "", i = i || "", !o && this.opt("navLinks") ? "<a" + n + ' data-goto="' + ct(JSON.stringify(l)) + '">' + i + "</a>" : "<span" + n + ">" + i + "</span>" | |
}, | |
setElement: function(t) { | |
this.el = t, this.bindGlobalHandlers(), this.renderSkeleton() | |
}, | |
removeElement: function() { | |
this.unsetDate(), this.unrenderSkeleton(), this.unbindGlobalHandlers(), this.el.remove() | |
}, | |
renderSkeleton: function() {}, | |
unrenderSkeleton: function() {}, | |
setDate: function(t) { | |
var e = this.isDateSet; | |
this.isDateSet = !0, this.handleRawDate(t), this.trigger(e ? "dateReset" : "dateSet", t) | |
}, | |
unsetDate: function() { | |
this.isDateSet && (this.isDateSet = !1, this.handleDateUnset(), this.trigger("dateUnset")) | |
}, | |
handleRawDate: function(t) { | |
var e = this, | |
n = this.buildDateProfile(t, null, !0); | |
this.isSameDateProfile(n) ? this.dateRenderQueue.add(function() { | |
e.isDateRendered || e.handleDate(n) | |
}) : this.handleDate(n) | |
}, | |
handleDate: function(t) { | |
var e = this; | |
this.unbindEvents(), this.requestDateRender(t).then(function() { | |
e.bindEvents() | |
}) | |
}, | |
handleDateUnset: function() { | |
this.unbindEvents(), this.requestDateUnrender() | |
}, | |
requestDateRender: function(t) { | |
var e = this; | |
return this.dateRenderQueue.add(function() { | |
return e.executeDateRender(t) | |
}) | |
}, | |
requestDateUnrender: function() { | |
var t = this; | |
return this.dateRenderQueue.add(function() { | |
return t.executeDateUnrender() | |
}) | |
}, | |
executeDateRender: function(t) { | |
var e = this; | |
return t && e.setDateProfile(t), this.updateTitle(), this.calendar.updateToolbarButtons(), t ? this.captureInitialScroll() : this.captureScroll(), this.freezeHeight(), this.executeDateUnrender().then(function() { | |
e.render && e.render(), e.renderDates(), e.updateSize(), e.renderBusinessHours(), e.startNowIndicator(), e.thawHeight(), e.releaseScroll(), e.isDateRendered = !0, e.onDateRender(), e.trigger("dateRender") | |
}) | |
}, | |
executeDateUnrender: function() { | |
var t = this; | |
return t.isDateRendered ? this.requestEventsUnrender().then(function() { | |
t.unselect(), t.stopNowIndicator(), t.triggerUnrender(), t.unrenderBusinessHours(), t.unrenderDates(), t.destroy && t.destroy(), t.isDateRendered = !1, t.trigger("dateUnrender") | |
}) : Dt.resolve() | |
}, | |
onDateRender: function() { | |
this.triggerRender() | |
}, | |
renderDates: function() {}, | |
unrenderDates: function() {}, | |
triggerRender: function() { | |
this.publiclyTrigger("viewRender", this, this, this.el) | |
}, | |
triggerUnrender: function() { | |
this.publiclyTrigger("viewDestroy", this, this, this.el) | |
}, | |
bindGlobalHandlers: function() { | |
this.listenTo(pe.get(), { | |
touchstart: this.processUnselect, | |
mousedown: this.handleDocumentMousedown | |
}) | |
}, | |
unbindGlobalHandlers: function() { | |
this.stopListeningTo(pe.get()) | |
}, | |
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 = mt(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) { | |
t && this.captureScroll(), this.updateHeight(t), this.updateWidth(t), this.updateNowIndicator(), t && this.releaseScroll() | |
}, | |
updateWidth: function(t) {}, | |
updateHeight: function(t) { | |
var e = this.calendar; | |
this.setHeight(e.getSuggestedViewHeight(), e.isHeightAuto()) | |
}, | |
setHeight: function(t, e) {}, | |
capturedScroll: null, | |
capturedScrollDepth: 0, | |
captureScroll: function() { | |
return !this.capturedScrollDepth++ && (this.capturedScroll = this.isDateRendered ? this.queryScroll() : {}, !0) | |
}, | |
captureInitialScroll: function(e) { | |
this.captureScroll() && (this.capturedScroll.isInitial = !0, e ? t.extend(this.capturedScroll, e) : this.capturedScroll.isComputed = !0) | |
}, | |
releaseScroll: function() { | |
var e = this.capturedScroll, | |
n = this.discardScroll(); | |
e.isComputed && (n ? t.extend(e, this.computeInitialScroll()) : e = null), e && (e.isInitial ? this.hardSetScroll(e) : this.setScroll(e)) | |
}, | |
discardScroll: function() { | |
return !--this.capturedScrollDepth && (this.capturedScroll = null, !0) | |
}, | |
computeInitialScroll: function() { | |
return {} | |
}, | |
queryScroll: function() { | |
return {} | |
}, | |
hardSetScroll: function(t) { | |
var e = this, | |
n = function() { | |
e.setScroll(t) | |
}; | |
n(), setTimeout(n, 0) | |
}, | |
setScroll: function(t) {}, | |
freezeHeight: function() { | |
this.calendar.freezeContentHeight() | |
}, | |
thawHeight: function() { | |
this.calendar.thawContentHeight() | |
}, | |
bindEvents: function() { | |
var t = this; | |
this.isEventsBound || (this.isEventsBound = !0, this.rejectOn("eventsUnbind", this.requestEvents()).then(function(e) { | |
t.listenTo(t.calendar, "eventsReset", t.setEvents), t.setEvents(e) | |
})) | |
}, | |
unbindEvents: function() { | |
this.isEventsBound && (this.isEventsBound = !1, this.stopListeningTo(this.calendar, "eventsReset"), this.unsetEvents(), this.trigger("eventsUnbind")) | |
}, | |
setEvents: function(t) { | |
var e = this.isEventSet; | |
this.isEventsSet = !0, this.handleEvents(t, e), this.trigger(e ? "eventsReset" : "eventsSet", t) | |
}, | |
unsetEvents: function() { | |
this.isEventsSet && (this.isEventsSet = !1, this.handleEventsUnset(), this.trigger("eventsUnset")) | |
}, | |
whenEventsSet: function() { | |
var t = this; | |
return this.isEventsSet ? Dt.resolve(this.getCurrentEvents()) : new Dt(function(e) { | |
t.one("eventsSet", e) | |
}) | |
}, | |
handleEvents: function(t, e) { | |
this.requestEventsRender(t) | |
}, | |
handleEventsUnset: function() { | |
this.requestEventsUnrender() | |
}, | |
requestEventsRender: function(t) { | |
var e = this; | |
return this.eventRenderQueue.add(function() { | |
return e.executeEventsRender(t) | |
}) | |
}, | |
requestEventsUnrender: function() { | |
var t = this; | |
return this.isEventsRendered ? this.eventRenderQueue.addQuickly(function() { | |
return t.executeEventsUnrender() | |
}) : Dt.resolve() | |
}, | |
requestCurrentEventsRender: function() { | |
return this.isEventsSet ? void this.requestEventsRender(this.getCurrentEvents()) : Dt.reject() | |
}, | |
executeEventsRender: function(t) { | |
var e = this; | |
return this.captureScroll(), this.freezeHeight(), this.executeEventsUnrender().then(function() { | |
e.renderEvents(t), e.thawHeight(), e.releaseScroll(), e.isEventsRendered = !0, e.onEventsRender(), e.trigger("eventsRender") | |
}) | |
}, | |
executeEventsUnrender: function() { | |
return this.isEventsRendered && (this.onBeforeEventsUnrender(), this.captureScroll(), this.freezeHeight(), this.destroyEvents && this.destroyEvents(), this.unrenderEvents(), this.thawHeight(), this.releaseScroll(), this.isEventsRendered = !1, this.trigger("eventsUnrender")), Dt.resolve() | |
}, | |
onEventsRender: function() { | |
this.renderedEventSegEach(function(t) { | |
this.publiclyTrigger("eventAfterRender", t.event, t.event, t.el) | |
}), this.publiclyTrigger("eventAfterAllRender") | |
}, | |
onBeforeEventsUnrender: function() { | |
this.renderedEventSegEach(function(t) { | |
this.publiclyTrigger("eventDestroy", t.event, t.event, t.el) | |
}) | |
}, | |
renderEvents: function(t) {}, | |
unrenderEvents: function() {}, | |
requestEvents: function() { | |
return this.calendar.requestEvents(this.activeRange.start, this.activeRange.end) | |
}, | |
getCurrentEvents: function() { | |
return this.calendar.getPrunedEventCache() | |
}, | |
resolveEventEl: function(e, n) { | |
var i = this.publiclyTrigger("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 ut(t.startEditable, (t.source || {}).startEditable, this.opt("eventStartEditable"), this.isEventGenerallyEditable(t)) | |
}, | |
isEventGenerallyEditable: function(t) { | |
return ut(t.editable, (t.source || {}).editable, this.opt("editable")) | |
}, | |
reportSegDrop: function(t, e, n, i, r) { | |
var s = this.calendar, | |
o = s.mutateSeg(t, e, n), | |
l = function() { | |
o.undo(), s.reportEventChange() | |
}; | |
this.triggerEventDrop(t.event, o.dateDelta, l, i, r), s.reportEventChange() | |
}, | |
triggerEventDrop: function(t, e, n, i, r) { | |
this.publiclyTrigger("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.publiclyTrigger("drop", n[0], e.start, i, r), t && this.publiclyTrigger("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 ut(t.durationEditable, e.durationEditable, this.opt("eventDurationEditable"), t.editable, e.editable, this.opt("editable")) | |
}, | |
reportSegResize: function(t, e, n, i, r) { | |
var s = this.calendar, | |
o = s.mutateSeg(t, e, n), | |
l = function() { | |
o.undo(), s.reportEventChange() | |
}; | |
this.triggerEventResize(t.event, o.durationDelta, l, i, r), s.reportEventChange() | |
}, | |
triggerEventResize: function(t, e, n, i, r) { | |
this.publiclyTrigger("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.publiclyTrigger("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.publiclyTrigger("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) { | |
w(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.publiclyTrigger("dayClick", e, this.calendar.applyTimezone(t.start), n) | |
}, | |
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 | |
} | |
}); | |
be.mixin({ | |
currentRange: null, | |
currentRangeUnit: null, | |
renderRange: null, | |
activeRange: null, | |
validRange: null, | |
dateIncrement: null, | |
currentDate: null, | |
minTime: null, | |
maxTime: null, | |
usesMinMaxTime: !1, | |
start: null, | |
end: null, | |
intervalStart: null, | |
intervalEnd: null, | |
isSameDateProfile: function(t) { | |
return this.activeRange && X(this.activeRange, t.activeRange) | |
}, | |
setDateProfile: function(t) { | |
this.currentRange = t.currentRange, this.currentRangeUnit = t.currentRangeUnit, this.renderRange = t.renderRange, this.activeRange = t.activeRange, this.validRange = t.validRange, this.dateIncrement = t.dateIncrement, this.currentDate = t.date, this.minTime = t.minTime, this.maxTime = t.maxTime, this.start = t.activeRange.start, this.end = t.activeRange.end, this.intervalStart = t.currentRange.start, this.intervalEnd = t.currentRange.end | |
}, | |
buildPrevDateProfile: function(t) { | |
var e = t.clone().startOf(this.currentRangeUnit).subtract(this.dateIncrement); | |
return this.buildDateProfile(e, -1) | |
}, | |
buildNextDateProfile: function(t) { | |
var e = t.clone().startOf(this.currentRangeUnit).add(this.dateIncrement); | |
return this.buildDateProfile(e, 1) | |
}, | |
buildDateProfile: function(t, n, i) { | |
var r, s, o, l, a = this.buildValidRange(), | |
u = null, | |
c = null; | |
return i && (t = q(t, a)), r = this.buildCurrentRangeInfo(t, n), s = this.buildRenderRange(r.range, r.unit), o = U(s), this.opt("showNonCurrentDates") || (o = j(o, r.range)), u = e.duration(this.opt("minTime")), c = e.duration(this.opt("maxTime")), this.adjustActiveRange(o, u, c), o = j(o, a), t = q(t, o), l = $(r.range, a), { | |
validRange: a, | |
currentRange: r.range, | |
currentRangeUnit: r.unit, | |
activeRange: o, | |
renderRange: s, | |
minTime: u, | |
maxTime: c, | |
isValid: l, | |
date: t, | |
dateIncrement: this.buildDateIncrement(r.duration) | |
} | |
}, | |
buildValidRange: function() { | |
return this.getRangeOption("validRange", this.calendar.getNow()) || {} | |
}, | |
buildCurrentRangeInfo: function(t, e) { | |
var n, i = null, | |
r = null, | |
s = null; | |
return this.viewSpec.duration ? (i = this.viewSpec.duration, r = this.viewSpec.durationUnit, s = this.buildRangeFromDuration(t, e, i, r)) : (n = this.opt("dayCount")) ? (r = "day", s = this.buildRangeFromDayCount(t, e, n)) : (s = this.buildCustomVisibleRange(t)) ? r = O(s.start, s.end) : (i = this.getFallbackDuration(), r = O(i), s = this.buildRangeFromDuration(t, e, i, r)), this.normalizeCurrentRange(s, r), { | |
duration: i, | |
unit: r, | |
range: s | |
} | |
}, | |
getFallbackDuration: function() { | |
return e.duration({ | |
days: 1 | |
}) | |
}, | |
normalizeCurrentRange: function(t, e) { | |
/^(year|month|week|day)$/.test(e) ? (t.start.stripTime(), t.end.stripTime()) : (t.start.hasTime() || t.start.time(0), t.end.hasTime() || t.end.time(0)) | |
}, | |
adjustActiveRange: function(t, e, n) { | |
var i = !1; | |
this.usesMinMaxTime && (e < 0 && (t.start.time(0).add(e), i = !0), n > 864e5 && (t.end.time(n - 864e5), i = !0), i && (t.start.hasTime() || t.start.time(0), t.end.hasTime() || t.end.time(0))) | |
}, | |
buildRangeFromDuration: function(t, n, i, r) { | |
var s, o, l, a = this.opt("dateAlignment"), | |
u = t.clone(); | |
return i.as("days") <= 1 && this.isHiddenDay(u) && (u = this.skipHiddenDays(u, n), u.startOf("day")), a || (o = this.opt("dateIncrement"), o ? (l = e.duration(o), a = l < i ? V(l, o) : r) : a = r), u.startOf(a), s = u.clone().add(i), { | |
start: u, | |
end: s | |
} | |
}, | |
buildRangeFromDayCount: function(t, e, n) { | |
var i, r = this.opt("dateAlignment"), | |
s = 0, | |
o = t.clone(); | |
r && o.startOf(r), o.startOf("day"), o = this.skipHiddenDays(o, e), i = o.clone(); | |
do i.add(1, "day"), this.isHiddenDay(i) || s++; while (s < n); | |
return { | |
start: o, | |
end: i | |
} | |
}, | |
buildCustomVisibleRange: function(t) { | |
var e = this.getRangeOption("visibleRange", this.calendar.moment(t)); | |
return !e || e.start && e.end ? e : null | |
}, | |
buildRenderRange: function(t, e) { | |
return this.trimHiddenDays(t) | |
}, | |
buildDateIncrement: function(t) { | |
var n, i = this.opt("dateIncrement"); | |
return i ? e.duration(i) : (n = this.opt("dateAlignment")) ? e.duration(1, n) : t ? t : e.duration({ | |
days: 1 | |
}) | |
}, | |
trimHiddenDays: function(t) { | |
return { | |
start: this.skipHiddenDays(t.start), | |
end: this.skipHiddenDays(t.end, -1, !0) | |
} | |
}, | |
currentRangeAs: function(t) { | |
var e = this.currentRange; | |
return e.end.diff(e.start, t, !0) | |
}, | |
getRangeOption: function(t) { | |
var e = this.opt(t); | |
if ("function" == typeof e && (e = e.apply(null, Array.prototype.slice.call(arguments, 1))), e) return this.calendar.parseRange(e) | |
}, | |
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 | |
} | |
}); | |
var Ee = Zt.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) | |
} | |
}); | |
Pt.prototype.proxyCall = function(t) { | |
var e = Array.prototype.slice.call(arguments, 1), | |
n = []; | |
return this.items.forEach(function(i) { | |
n.push(i[t].apply(i, e)) | |
}), n | |
}; | |
var De = Zt.Calendar = wt.extend({ | |
dirDefaults: null, | |
localeDefaults: null, | |
overrides: null, | |
dynamicOverrides: null, | |
options: null, | |
viewSpecCache: null, | |
view: null, | |
currentDate: null, | |
header: null, | |
footer: null, | |
loadingLevel: 0, | |
constructor: Yt, | |
initialize: function() {}, | |
populateOptionsHash: function() { | |
var t, e, i, r; | |
t = ut(this.dynamicOverrides.locale, this.overrides.locale), e = Te[t], e || (t = De.defaults.locale, e = Te[t] || {}), i = ut(this.dynamicOverrides.isRTL, this.overrides.isRTL, e.isRTL, De.defaults.isRTL), r = i ? De.rtlDefaults : {}, this.dirDefaults = r, this.localeDefaults = e, this.options = n([De.defaults, r, e, this.overrides, this.dynamicOverrides]), Wt(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, Jt) != -1) | |
for (n = this.header.getViewsWithButtons(), t.each(Zt.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, a = this.overrides.views || {}, u = [], c = [], d = [], h = t; h;) i = $t[h], r = a[h], h = null, "function" == typeof i && (i = { | |
class: i | |
}), i && (u.unshift(i), c.unshift(i.defaults || {}), s = s || i.duration, h = h || i.type), r && (d.unshift(r), s = s || r.duration, h = h || r.type); | |
return i = it(u), i.type = t, !!i.class && (s = s || this.dynamicOverrides.duration || this.overrides.duration, s && (o = e.duration(s), o.valueOf() && (l = V(o, s), i.duration = o, i.durationUnit = l, 1 === o.as(l) && (i.singleUnit = l, d.unshift(a[l] || {})))), i.defaults = n(c), i.overrides = n(d), this.buildViewSpecOptions(i), this.buildViewSpecButtonText(i, t), i) | |
}, | |
buildViewSpecOptions: function(t) { | |
t.options = n([De.defaults, t.defaults, this.dirDefaults, this.localeDefaults, this.overrides, t.overrides, this.dynamicOverrides]), Wt(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(De.defaults) || (t.duration ? this.humanizeDuration(t.duration) : null) || e | |
}, | |
instantiateView: function(t) { | |
var e = this.getViewSpec(t); | |
return new e.class(this, e) | |
}, | |
isValidViewType: function(t) { | |
return Boolean(this.getViewSpec(t)) | |
}, | |
pushLoading: function() { | |
this.loadingLevel++ || this.publiclyTrigger("loading", null, !0, this.view) | |
}, | |
popLoading: function() { | |
--this.loadingLevel || this.publiclyTrigger("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 | |
} | |
}, | |
initCurrentDate: function() { | |
null != this.options.defaultDate ? this.currentDate = this.moment(this.options.defaultDate).stripZone() : this.currentDate = this.getNow() | |
}, | |
changeView: function(t, e) { | |
e && (e.start && e.end ? this.recordOptionOverrides({ | |
visibleRange: e | |
}) : this.currentDate = this.moment(e).stripZone()), this.renderView(t) | |
}, | |
prev: function() { | |
var t = this.view.buildPrevDateProfile(this.currentDate); | |
t.isValid && (this.currentDate = t.date, this.renderView()) | |
}, | |
next: function() { | |
var t = this.view.buildNextDateProfile(this.currentDate); | |
t.isValid && (this.currentDate = t.date, this.renderView()) | |
}, | |
prevYear: function() { | |
this.currentDate.add(-1, "years"), this.renderView() | |
}, | |
nextYear: function() { | |
this.currentDate.add(1, "years"), this.renderView() | |
}, | |
today: function() { | |
this.currentDate = this.getNow(), this.renderView() | |
}, | |
gotoDate: function(t) { | |
this.currentDate = this.moment(t).stripZone(), this.renderView() | |
}, | |
incrementDate: function(t) { | |
this.currentDate.add(e.duration(t)), this.renderView() | |
}, | |
getDate: function() { | |
return this.applyTimezone(this.currentDate) | |
}, | |
parseRange: function(t) { | |
var e = null, | |
n = null; | |
return t.start && (e = this.moment(t.start).stripZone()), t.end && (n = this.moment(t.end).stripZone()), e || n ? e && n && n.isBefore(e) ? null : { | |
start: e, | |
end: n | |
} : null | |
} | |
}); | |
De.mixin(ue), De.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) | |
} | |
}), De.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", | |
minTime: "00:00:00", | |
maxTime: "24:00:00", | |
showNonCurrentDates: !0, | |
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 | |
}, De.englishDefaults = { | |
dayPopoverFormat: "dddd, MMMM D" | |
}, De.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 Te = Zt.locales = {}; | |
Zt.datepickerLocale = function(e, n, i) { | |
var r = Te[e] || (Te[e] = {}); | |
r.isRTL = i.isRTL, r.weekNumberTitle = i.weekHeader, t.each(Ce, 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)) | |
}, Zt.locale = function(e, i) { | |
var r, s; | |
r = Te[e] || (Te[e] = {}), i && (r = Te[e] = n([r, i])), s = Ut(e), t.each(He, function(t, e) { | |
null == r[t] && (r[t] = e(s, r)) | |
}), De.defaults.locale = e | |
}; | |
var Ce = { | |
buttonText: function(t) { | |
return { | |
prev: dt(t.prevText), | |
next: dt(t.nextText), | |
today: dt(t.currentText) | |
} | |
}, | |
monthYearFormat: function(t) { | |
return t.showMonthAfterYear ? "YYYY[" + t.yearSuffix + "] MMMM" : "MMMM YYYY[" + t.yearSuffix + "]" | |
} | |
}, | |
He = { | |
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, "") | |
} | |
}, | |
Re = { | |
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" | |
} | |
}; | |
Zt.locale("en", De.englishDefaults), Zt.sourceNormalizers = [], Zt.sourceFetchers = []; | |
var xe = { | |
dataType: "json", | |
cache: !1 | |
}, | |
Ie = 1; | |
De.prototype.mutateSeg = function(t, e) { | |
return this.mutateEvent(t.event, e) | |
}, De.prototype.normalizeEvent = function(t) {}, De.prototype.spanContainsSpan = function(t, e) { | |
var n = t.start.clone().stripZone(), | |
i = this.getEventEnd(t).stripZone(); | |
return e.start >= n && e.end <= i | |
}, De.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 | |
}, De.prototype.isEventSpanAllowed = function(t, e) { | |
var n = e.source || {}, | |
i = ut(e.constraint, n.constraint, this.options.eventConstraint), | |
r = ut(e.overlap, n.overlap, this.options.eventOverlap); | |
return this.isSpanAllowed(t, i, r, e) && (!this.options.eventAllow || this.options.eventAllow(t, e) !== !1) | |
}, De.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) | |
}, De.prototype.isSelectionSpanAllowed = function(t) { | |
return this.isSpanAllowed(t, this.options.selectConstraint, this.options.selectOverlap) && (!this.options.selectAllow || this.options.selectAllow(t) !== !1) | |
}, De.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 = ut(a.overlap, (a.source || {}).overlap), u === !1) return !1; | |
if ("function" == typeof u && !u(i, a)) return !1 | |
} | |
} | |
return !0 | |
}, De.prototype.constraintToEvents = function(t) { | |
return "businessHours" === t ? this.getCurrentBusinessHourEvents() : "object" == typeof t ? null != t.start ? this.expandEvent(this.buildEventFromInput(t)) : null : this.clientEvents(t) | |
}, De.prototype.eventIntersectsRange = function(t, e) { | |
var n = t.start.clone().stripZone(), | |
i = this.getEventEnd(t).stripZone(); | |
return e.start < i && e.end > n | |
}; | |
var ke = { | |
id: "_fcBusinessHours", | |
start: "09:00", | |
end: "17:00", | |
dow: [1, 2, 3, 4, 5], | |
rendering: "inverse-background" | |
}; | |
De.prototype.getCurrentBusinessHourEvents = function(t) { | |
return this.computeBusinessHourEvents(t, this.options.businessHours) | |
}, De.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) : [] | |
}, De.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({}, ke, s), e && (s.start = null, s.end = null), l.push.apply(l, this.expandEvent(this.buildEventFromInput(s), o.activeRange.start, o.activeRange.end))); | |
return l | |
}; | |
var Le = Zt.BasicView = be.extend({ | |
scroller: null, | |
dayGridClass: Se, | |
dayGrid: null, | |
dayNumbersVisible: !1, | |
colWeekNumbersVisible: !1, | |
cellWeekNumbersVisible: !1, | |
weekNumberWidth: null, | |
headContainerEl: null, | |
headRowEl: null, | |
initialize: function() { | |
this.dayGrid = this.instantiateDayGrid(), this.scroller = new Ee({ | |
overflowX: "hidden", | |
overflowY: "auto" | |
}) | |
}, | |
instantiateDayGrid: function() { | |
var t = this.dayGridClass.extend(Me); | |
return new t(this) | |
}, | |
buildRenderRange: function(t, e) { | |
var n = be.prototype.buildRenderRange.apply(this, arguments); | |
return /^(year|month)$/.test(e) && (n.start.startOf("week"), n.end.weekday() && n.end.add(1, "week").startOf("week")), this.trimHiddenDays(n) | |
}, | |
renderDates: function() { | |
this.dayGrid.breakOnWeeks = /year|month|week/.test(this.currentRangeUnit), this.dayGrid.setRange(this.renderRange), 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 - c(this.el, this.scroller.el) | |
}, | |
setGridHeight: function(t, e) { | |
e ? a(this.dayGrid.rowEls) : l(this.dayGrid.rowEls, t, !0) | |
}, | |
computeInitialScroll: function() { | |
return { | |
top: 0 | |
} | |
}, | |
queryScroll: function() { | |
return { | |
top: this.scroller.getScrollTop() | |
} | |
}, | |
setScroll: function(t) { | |
this.scroller.setScrollTop(t.top) | |
}, | |
hitsNeeded: function() { | |
this.dayGrid.hitsNeeded() | |
}, | |
hitsNotNeeded: function() { | |
this.dayGrid.hitsNotNeeded() | |
}, | |
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() | |
} | |
}), | |
Me = { | |
renderHeadIntroHtml: function() { | |
var t = this.view; | |
return t.colWeekNumbersVisible ? '<th class="fc-week-number ' + t.widgetHeaderClass + '" ' + t.weekNumberStyleAttr() + "><span>" + ct(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>" : "" | |
} | |
}, | |
Be = Zt.MonthView = Le.extend({ | |
buildRenderRange: function() { | |
var t, e = Le.prototype.buildRenderRange.apply(this, arguments); | |
return this.isFixedWeeks() && (t = Math.ceil(e.end.diff(e.start, "weeks", !0)), e.end.add(6 - t, "weeks")), e | |
}, | |
setGridHeight: function(t, e) { | |
e && (t *= this.rowCnt / 6), l(this.dayGrid.rowEls, t, !e) | |
}, | |
isFixedWeeks: function() { | |
return this.opt("fixedWeekCount") | |
} | |
}); | |
$t.basic = { | |
class: Le | |
}, $t.basicDay = { | |
type: "basic", | |
duration: { | |
days: 1 | |
} | |
}, $t.basicWeek = { | |
type: "basic", | |
duration: { | |
weeks: 1 | |
} | |
}, $t.month = { | |
class: Be, | |
duration: { | |
months: 1 | |
}, | |
defaults: { | |
fixedWeekCount: !0 | |
} | |
}; | |
var Fe = Zt.AgendaView = be.extend({ | |
scroller: null, | |
timeGridClass: we, | |
timeGrid: null, | |
dayGridClass: Se, | |
dayGrid: null, | |
axisWidth: null, | |
headContainerEl: null, | |
noScrollRowEls: null, | |
bottomRuleEl: null, | |
usesMinMaxTime: !0, | |
initialize: function() { | |
this.timeGrid = this.instantiateTimeGrid(), this.opt("allDaySlot") && (this.dayGrid = this.instantiateDayGrid()), this.scroller = new Ee({ | |
overflowX: "hidden", | |
overflowY: "auto" | |
}) | |
}, | |
instantiateTimeGrid: function() { | |
var t = this.timeGridClass.extend(Ne); | |
return new t(this) | |
}, | |
instantiateDayGrid: function() { | |
var t = this.dayGridClass.extend(ze); | |
return new t(this) | |
}, | |
renderDates: function() { | |
this.timeGrid.setRange(this.renderRange), this.dayGrid && this.dayGrid.setRange(this.renderRange), this.el.addClass("fc-agenda-view").html(this.renderSkeletonHtml()), this.renderHead(), this.scroller.render(); | |
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), be.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 = Ae), 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 - c(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++, { | |
top: n | |
} | |
}, | |
queryScroll: function() { | |
return { | |
top: this.scroller.getScrollTop() | |
} | |
}, | |
setScroll: function(t) { | |
this.scroller.setScrollTop(t.top) | |
}, | |
hitsNeeded: function() { | |
this.timeGrid.hitsNeeded(), this.dayGrid && this.dayGrid.hitsNeeded() | |
}, | |
hitsNotNeeded: function() { | |
this.timeGrid.hitsNotNeeded(), this.dayGrid && this.dayGrid.hitsNotNeeded() | |
}, | |
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() | |
} | |
}), | |
Ne = { | |
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 | |
}, ct(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>" | |
} | |
}, | |
Ae = 5, | |
Ge = [{ | |
hours: 1 | |
}, { | |
minutes: 30 | |
}, { | |
minutes: 15 | |
}, { | |
seconds: 30 | |
}, { | |
seconds: 15 | |
}]; | |
$t.agenda = { | |
class: Fe, | |
defaults: { | |
allDaySlot: !0, | |
slotDuration: "00:30:00", | |
slotEventOverlap: !0 | |
} | |
}, $t.agendaDay = { | |
type: "agenda", | |
duration: { | |
days: 1 | |
} | |
}, $t.agendaWeek = { | |
type: "agenda", | |
duration: { | |
weeks: 1 | |
} | |
}; | |
var Oe = be.extend({ | |
grid: null, | |
scroller: null, | |
initialize: function() { | |
this.grid = new Ve(this), this.scroller = new Ee({ | |
overflowX: "hidden", | |
overflowY: "auto" | |
}) | |
}, | |
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 - c(this.el, this.scroller.el) | |
}, | |
renderDates: function() { | |
this.grid.setRange(this.renderRange) | |
}, | |
renderEvents: function(t) { | |
this.grid.renderEvents(t) | |
}, | |
unrenderEvents: function() { | |
this.grid.unrenderEvents() | |
}, | |
isEventResizable: function(t) { | |
return !1 | |
}, | |
isEventDraggable: function(t) { | |
return !1 | |
} | |
}), | |
Ve = me.extend({ | |
segSelector: ".fc-list-item", | |
hasDayInteractions: !1, | |
spanToSegs: function(t) { | |
for (var e, n = this.view, i = n.renderRange.start.clone().time(0), r = 0, s = []; i < n.renderRange.end;) | |
if (e = N(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; | |
me.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">' + ct(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.renderRange.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" | |
}, ct(t.format(n))) : "") + (i ? e.buildGotoAnchorHtml(t, { | |
class: "fc-list-heading-alt" | |
}, ct(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 ? ct(this.getEventTimeText(t)) : n.getAllDayHtml() : ct(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="' + ct(o) + '"' : "") + ">" + ct(t.event.title || "") + "</a></td></tr>" | |
} | |
}); | |
return $t.list = { | |
class: Oe, | |
buttonTextKey: "list", | |
defaults: { | |
buttonText: "list", | |
listDayFormat: "LL", | |
noEventsMessage: "No events to display" | |
} | |
}, $t.listDay = { | |
type: "list", | |
duration: { | |
days: 1 | |
}, | |
defaults: { | |
listDayFormat: "dddd" | |
} | |
}, $t.listWeek = { | |
type: "list", | |
duration: { | |
weeks: 1 | |
}, | |
defaults: { | |
listDayFormat: "dddd", | |
listDayAltFormat: "LL" | |
} | |
}, $t.listMonth = { | |
type: "list", | |
duration: { | |
month: 1 | |
}, | |
defaults: { | |
listDayAltFormat: "dddd" | |
} | |
}, $t.listYear = { | |
type: "list", | |
duration: { | |
year: 1 | |
}, | |
defaults: { | |
listDayAltFormat: "dddd" | |
} | |
}, Zt | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment