!function (e) { e.plot.plugins.push({ init: function (t) { var r = { start: null, end: null, active: !1, moveStart: 0, movex: 0, handle: "", color: "#fbb", borderWidth: 3, borderRadius: 3, fixedWidth: !1, noOffset: !1 }, n = {}, a = null, o = 5; function s(e) { var n = t.getOptions(); if (!n.rangeselection.enabled) return t.getPlaceholder().css("cursor", "auto"), !0; var a = t.getPlaceholder().offset(), s = t.getPlotOffset(), l = e.pageX - a.left - s.left, c = e.pageY - a.top - s.top; if (l < 0 || c < 0) return t.getPlaceholder().css("cursor", "auto"), !1; var d = i(0, l, t.width()); if (!r.active) { var u = t.getAxes().xaxis, g = u.p2c(r.start), h = u.p2c(r.end), f = o; return Math.abs(g - d) < f && g >= 0 && !n.rangeselection.fixedWidth ? t.getPlaceholder().css("cursor", "w-resize") : Math.abs(h - d) < f && h <= t.width() ? t.getPlaceholder().css("cursor", !n.rangeselection.fixedWidth) : d > g && d < h ? t.getPlaceholder().css("cursor", "move") : t.getPlaceholder().css("cursor", "auto"), !1 } return r.movex = d, t.triggerRedrawOverlay(), !1 } function l(s) { var l = t.getOptions(); if (l.rangeselection.enabled && 1 == s.which) { document.body.focus(), void 0 !== document.onselectstart && null == n.onselectstart && (n.onselectstart = document.onselectstart, document.onselectstart = function () { return !1 }), void 0 !== document.ondrag && null == n.ondrag && (n.ondrag = document.ondrag, document.ondrag = function () { return !1 }); var d = t.getPlaceholder().offset(), u = t.getPlotOffset(), g = i(0, s.pageX - d.left - u.left, t.width()), h = t.getAxes().xaxis, f = h.p2c(r.start), v = h.p2c(r.end), p = o; Math.abs(f - g) <= p && !l.rangeselection.fixedWidth ? (t.getPlaceholder().css("cursor", "w-resize"), r.handle = "start", r.active = !0) : Math.abs(v - g) <= p && !l.rangeselection.fixedWidth ? (t.getPlaceholder().css("cursor", "e-resize"), r.handle = "end", r.active = !0) : (t.getPlaceholder().css("cursor", "move"), r.handle = "move", l.rangeselection.noOffset ? r.moveStart = f : r.moveStart = v - (v - f) / 2, r.active = !0), a = c, e(document).one("mouseup", a) } } function c(e) { var n = t.getOptions(); if (!n.rangeselection.enabled) return !0; a = null, t.getPlaceholder().css("cursor", "auto"), r.active = !1; var o = t.getPlaceholder().offset(), s = t.getPlotOffset(), l = i(0, e.pageX - o.left - s.left, t.width()), c = t.getAxes().xaxis, d = c.p2c(r.start), u = c.p2c(r.end); switch (r.handle) { case "start": d = i(0, l, u - 10); break; case "end": u = i(d + 10, l, t.width()); break; case "move": var g = l - r.moveStart; d + g < 0 ? (u -= d, d = 0) : u + g > t.width() ? (d = t.width() - (u - d), u = t.width()) : (u += g, d += g) }return r.start = c.c2p(d), r.end = c.c2p(u), t.triggerRedrawOverlay(), n.rangeselection.callback && "function" == typeof n.rangeselection.callback && n.rangeselection.callback({ start: r.start, end: r.end }), !1 } function i(e, t, r) { return t < e ? e : t > r ? r : t } function d(t, r, n, a) { var o = t.getOptions(), s = t.getPlotOffset(); r.save(), r.translate(s.left, s.top); var l = e.color.parse(o.rangeselection.color); r.strokeStyle = l.scale("a", .9).toString(), r.fillStyle = l.scale("a", .4).toString(), r.lineWidth = o.rangeselection.borderWidth; var c = t.getAxes().xaxis, i = c.p2c(n), d = i, u = c.p2c(a) - i, g = t.height(); o.rangeselection.borderRadius ? (r.lineJoin = "round", function (e, t, r, n, a, o, s, l) { e.save(); var c = t + n, i = r + a; e.beginPath(), e.moveTo(t + o, r), e.lineTo(c - o, r), e.quadraticCurveTo(c, r, c, r + o), e.lineTo(c, r + a - o), e.quadraticCurveTo(c, i, c - o, i), e.lineTo(t + o, i), e.quadraticCurveTo(t, i, t, i - o), e.lineTo(t, r + o), e.quadraticCurveTo(t, r, t + o, r), e.stroke(), s && e.fill(), l && e.stroke(), e.restore() }(r, d, 0, u, g, o.rangeselection.borderRadius, !0, !0)) : r.fillRect(d, 0, u, g), r.restore() } t.hooks.bindEvents.push(function (e, t) { e.getOptions(), t.mousemove(s), t.mousedown(l) }), t.hooks.draw.push(function (e, t) { e.triggerRedrawOverlay() }), t.hooks.drawOverlay.push(function (e, t) { var n = e.getOptions(); if (n.rangeselection.enabled) { if (r.active) { var a = e.getAxes().xaxis, o = r.movex, s = a.p2c(r.start), l = a.p2c(r.end); switch (r.handle) { case "start": s = o, o < 0 && (s = 0), o > l - 10 && (s = l - 10); break; case "end": l = o, o > e.width() && (l = e.width()), o < s + 10 && (l = s + 10); break; case "move": var c = o - r.moveStart; s + c < 0 ? (l -= s, s = 0) : l + c > e.width() ? (s = e.width() - (l - s), l = e.width()) : (l += c, s += c) }return t.clearRect(0, 0, e.width(), e.height()), void d(e, t, a.c2p(s), a.c2p(l)) } var i; if (null === r.end && (null === n.rangeselection.end ? (i = e.getData()[0].data, r.end = i.length ? i[i.length - 1][0] : 0) : r.end = n.rangeselection.end), null === r.start) if (null === n.rangeselection.start) { i = e.getData()[0].data; var u = new Date(r.end); u.getMonth() > 0 ? u.setMonth(u.getMonth() - 1) : (u.setYear(u.getYear() - 1), u.setMonth(11)), i.length && i[0][0] > u.valueOf() ? r.start = i[0][0] : r.start = u.valueOf() } else r.start = n.rangeselection.start; d(e, t, r.start, r.end) } }), t.hooks.shutdown.push(function (t, r) { r.unbind("mousemove", s), r.unbind("mousedown", l), a && e(document).unbind("mouseup", a) }), t.setSelection = function (e, n) { r.start = e, r.end = n, t.triggerRedrawOverlay() } }, options: { rangeselection: { color: "#f88", start: null, enabled: !1, end: null, callback: null } }, name: "rangeselector", version: "1.3" }) }(jQuery);
!function (e) { e.plot.plugins.push({ init: function (t) { var r = { start: null, end: null, active: !1, moveStart: 0, movex: 0, handle: "", color: "#fbb", borderWidth: 3, borderRadius: 3, fixedWidth: !1, noOffset: !1 }, n = {}, a = null, o = 5; function s(e) { var n = t.getOptions(); if (!n.rangeselection.enabled) return t.getPlaceholder().css("cursor", "auto"), !0; var a = t.getPlaceholder().offset(), s = t.getPlotOffset(), l = e.pageX - a.left - s.left, c = e.pageY - a.top - s.top; if (l < 0 || c < 0) return t.getPlaceholder().css("cursor", "auto"), !1; var d = i(0, l, t.width()); if (!r.active) { var u = t.getAxes().xaxis, g = u.p2c(r.start), h = u.p2c(r.end), f = o; return Math.abs(g - d) < f && g >= 0 && !n.rangeselection.fixedWidth ? t.getPlaceholder().css("cursor", "w-resize") : Math.abs(h - d) < f && h <= t.width() ? t.getPlaceholder().css("cursor", !n.rangeselection.fixedWidth) : d > g && d < h ? t.getPlaceholder().css("cursor", "move") : t.getPlaceholder().css("cursor", "auto"), !1 } return r.movex = d, t.triggerRedrawOverlay(), !1 } function l(s) { var l = t.getOptions(); if (l.rangeselection.enabled && 1 == s.which) { document.body.focus(), void 0 !== document.onselectstart && null == n.onselectstart && (n.onselectstart = document.onselectstart, document.onselectstart = function () { return !1 }), void 0 !== document.ondrag && null == n.ondrag && (n.ondrag = document.ondrag, document.ondrag = function () { return !1 }); var d = t.getPlaceholder().offset(), u = t.getPlotOffset(), g = i(0, s.pageX - d.left - u.left, t.width()), h = t.getAxes().xaxis, f = h.p2c(r.start), v = h.p2c(r.end), p = o; Math.abs(f - g) <= p && !l.rangeselection.fixedWidth ? (t.getPlaceholder().css("cursor", "w-resize"), r.handle = "start", r.active = !0) : Math.abs(v - g) <= p && !l.rangeselection.fixedWidth ? (t.getPlaceholder().css("cursor", "e-resize"), r.handle = "end", r.active = !0) : (t.getPlaceholder().css("cursor", "move"), r.handle = "move", l.rangeselection.noOffset ? r.moveStart = f : r.moveStart = v - (v - f) / 2, r.active = !0), a = c, e(document).one("mouseup", a) } } function c(e) { var n = t.getOptions(); if (!n.rangeselection.enabled) return !0; a = null, t.getPlaceholder().css("cursor", "auto"), r.active = !1; var o = t.getPlaceholder().offset(), s = t.getPlotOffset(), l = i(0, e.pageX - o.left - s.left, t.width()), c = t.getAxes().xaxis, d = c.p2c(r.start), u = c.p2c(r.end); switch (r.handle) { case "start": d = i(0, l, u - 10); break; case "end": u = i(d + 10, l, t.width()); break; case "move": var g = l - r.moveStart; d + g < 0 ? (u -= d, d = 0) : u + g > t.width() ? (d = t.width() - (u - d), u = t.width()) : (u += g, d += g) }return r.start = c.c2p(d), r.end = c.c2p(u), t.triggerRedrawOverlay(), n.rangeselection.callback && "function" == typeof n.rangeselection.callback && n.rangeselection.callback({ start: r.start, end: r.end }), !1 } function i(e, t, r) { return t < e ? e : t > r ? r : t } function d(t, r, n, a) { var o = t.getOptions(), s = t.getPlotOffset(); r.save(), r.translate(s.left, s.top); var l = e.color.parse(o.rangeselection.color); r.strokeStyle = l.scale("a", .9).toString(), r.fillStyle = l.scale("a", .4).toString(), r.lineWidth = o.rangeselection.borderWidth; var c = t.getAxes().xaxis, i = c.p2c(n), d = i, u = c.p2c(a) - i, g = t.height(); o.rangeselection.borderRadius ? (r.lineJoin = "round", function (e, t, r, n, a, o, s, l) { e.save(); var c = t + n, i = r + a; e.beginPath(), e.moveTo(t + o, r), e.lineTo(c - o, r), e.quadraticCurveTo(c, r, c, r + o), e.lineTo(c, r + a - o), e.quadraticCurveTo(c, i, c - o, i), e.lineTo(t + o, i), e.quadraticCurveTo(t, i, t, i - o), e.lineTo(t, r + o), e.quadraticCurveTo(t, r, t + o, r), e.stroke(), s && e.fill(), l && e.stroke(), e.restore() }(r, d, 0, u, g, o.rangeselection.borderRadius, !0, !0)) : r.fillRect(d, 0, u, g), r.restore() } t.hooks.bindEvents.push(function (e, t) { e.getOptions(), t.mousemove(s), t.mousedown(l) }), t.hooks.draw.push(function (e, t) { e.triggerRedrawOverlay() }), t.hooks.drawOverlay.push(function (e, t) { var n = e.getOptions(); if (n.rangeselection.enabled) { if (r.active) { var a = e.getAxes().xaxis, o = r.movex, s = a.p2c(r.start), l = a.p2c(r.end); switch (r.handle) { case "start": s = o, o < 0 && (s = 0), o > l - 10 && (s = l - 10); break; case "end": l = o, o > e.width() && (l = e.width()), o < s + 10 && (l = s + 10); break; case "move": var c = o - r.moveStart; s + c < 0 ? (l -= s, s = 0) : l + c > e.width() ? (s = e.width() - (l - s), l = e.width()) : (l += c, s += c) }return t.clearRect(0, 0, e.width(), e.height()), void d(e, t, a.c2p(s), a.c2p(l)) } var i; if (null === r.end && (null === n.rangeselection.end ? (i = e.getData()[0].data, r.end = i.length ? i[i.length - 1][0] : 0) : r.end = n.rangeselection.end), null === r.start) if (null === n.rangeselection.start) { i = e.getData()[0].data; var u = new Date(r.end); u.getMonth() > 0 ? u.setMonth(u.getMonth() - 1) : (u.setYear(u.getYear() - 1), u.setMonth(11)), i.length && i[0][0] > u.valueOf() ? r.start = i[0][0] : r.start = u.valueOf() } else r.start = n.rangeselection.start; d(e, t, r.start, r.end) } }), t.hooks.shutdown.push(function (t, r) { r.unbind("mousemove", s), r.unbind("mousedown", l), a && e(document).unbind("mouseup", a) }), t.setSelection = function (e, n) { r.start = e, r.end = n, t.triggerRedrawOverlay() } }, options: { rangeselection: { color: "#f88", start: null, enabled: !1, end: null, callback: null } }, name: "rangeselector", version: "1.3" }) }(jQuery);