/* jquery.sparkline 2.1.2 - http://omnipotent.net/jquery.sparkline/ ** Licensed under the New BSD License - see above site for details */ (function (a, b, c) { (function (a) { typeof define == "function" && define.amd ? define(["jquery"], a) : jQuery && !jQuery.fn.sparkline && a(jQuery); })(function (d) { "use strict"; var e = {}, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L = 0; (f = function () { return { common: { type: "line", lineColor: "#00f", fillColor: "#cdf", defaultPixelsPerValue: 3, width: "auto", height: "auto", composite: !1, tagValuesAttribute: "values", tagOptionsPrefix: "spark", enableTagOptions: !1, enableHighlight: !0, highlightLighten: 1.4, tooltipSkipNull: !0, tooltipPrefix: "", tooltipSuffix: "", disableHiddenCheck: !1, numberFormatter: !1, numberDigitGroupCount: 3, numberDigitGroupSep: ",", numberDecimalMark: ".", disableTooltips: !1, disableInteraction: !1, }, line: { spotColor: "#f80", highlightSpotColor: "#5f5", highlightLineColor: "#f22", spotRadius: 1.5, minSpotColor: "#f80", maxSpotColor: "#f80", lineWidth: 1, normalRangeMin: c, normalRangeMax: c, normalRangeColor: "#ccc", drawNormalOnTop: !1, chartRangeMin: c, chartRangeMax: c, chartRangeMinX: c, chartRangeMaxX: c, tooltipFormat: new h( ' {{prefix}}{{y}}{{suffix}}' ), }, bar: { barColor: "#3366cc", negBarColor: "#f44", stackedBarColor: [ "#3366cc", "#dc3912", "#ff9900", "#109618", "#66aa00", "#dd4477", "#0099c6", "#990099", ], zeroColor: c, nullColor: c, zeroAxis: !0, barWidth: 4, barSpacing: 1, chartRangeMax: c, chartRangeMin: c, chartRangeClip: !1, colorMap: c, tooltipFormat: new h( ' {{prefix}}{{value}}{{suffix}}' ), }, tristate: { barWidth: 4, barSpacing: 1, posBarColor: "#6f6", negBarColor: "#f44", zeroBarColor: "#999", colorMap: {}, tooltipFormat: new h( ' {{value:map}}' ), tooltipValueLookups: { map: { "-1": "Loss", 0: "Draw", 1: "Win" } }, }, discrete: { lineHeight: "auto", thresholdColor: c, thresholdValue: 0, chartRangeMax: c, chartRangeMin: c, chartRangeClip: !1, tooltipFormat: new h("{{prefix}}{{value}}{{suffix}}"), }, bullet: { targetColor: "#f33", targetWidth: 3, performanceColor: "#33f", rangeColors: ["#d3dafe", "#a8b6ff", "#7f94ff"], base: c, tooltipFormat: new h("{{fieldkey:fields}} - {{value}}"), tooltipValueLookups: { fields: { r: "Range", p: "Performance", t: "Target" }, }, }, pie: { offset: 0, sliceColors: [ "#3366cc", "#dc3912", "#ff9900", "#109618", "#66aa00", "#dd4477", "#0099c6", "#990099", ], borderWidth: 0, borderColor: "#000", tooltipFormat: new h( ' {{value}} ({{percent.1}}%)' ), }, box: { raw: !1, boxLineColor: "#000", boxFillColor: "#cdf", whiskerColor: "#000", outlierLineColor: "#333", outlierFillColor: "#fff", medianColor: "#f00", showOutliers: !0, outlierIQR: 1.5, spotRadius: 1.5, target: c, targetColor: "#4a2", chartRangeMax: c, chartRangeMin: c, tooltipFormat: new h("{{field:fields}}: {{value}}"), tooltipFormatFieldlistKey: "field", tooltipValueLookups: { fields: { lq: "Lower Quartile", med: "Median", uq: "Upper Quartile", lo: "Left Outlier", ro: "Right Outlier", lw: "Left Whisker", rw: "Right Whisker", }, }, }, }; }), (E = '.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;z-index: 10000;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}'), (g = function () { var a, b; return ( (a = function () { this.init.apply(this, arguments); }), arguments.length > 1 ? (arguments[0] ? ((a.prototype = d.extend( new arguments[0](), arguments[arguments.length - 1] )), (a._super = arguments[0].prototype)) : (a.prototype = arguments[arguments.length - 1]), arguments.length > 2 && ((b = Array.prototype.slice.call(arguments, 1, -1)), b.unshift(a.prototype), d.extend.apply(d, b))) : (a.prototype = arguments[0]), (a.prototype.cls = a), a ); }), (d.SPFormatClass = h = g({ fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g, precre: /(\w+)\.(\d+)/, init: function (a, b) { (this.format = a), (this.fclass = b); }, render: function (a, b, d) { var e = this, f = a, g, h, i, j, k; return this.format.replace(this.fre, function () { var a; return ( (h = arguments[1]), (i = arguments[3]), (g = e.precre.exec(h)), g ? ((k = g[2]), (h = g[1])) : (k = !1), (j = f[h]), j === c ? "" : i && b && b[i] ? ((a = b[i]), a.get ? b[i].get(j) || j : b[i][j] || j) : (n(j) && (d.get("numberFormatter") ? (j = d.get("numberFormatter")(j)) : (j = s( j, k, d.get("numberDigitGroupCount"), d.get("numberDigitGroupSep"), d.get("numberDecimalMark") ))), j) ); }); }, })), (d.spformat = function (a, b) { return new h(a, b); }), (i = function (a, b, c) { return a < b ? b : a > c ? c : a; }), (j = function (a, c) { var d; return c === 2 ? ((d = b.floor(a.length / 2)), a.length % 2 ? a[d] : (a[d - 1] + a[d]) / 2) : a.length % 2 ? ((d = (a.length * c + c) / 4), d % 1 ? (a[b.floor(d)] + a[b.floor(d) - 1]) / 2 : a[d - 1]) : ((d = (a.length * c + 2) / 4), d % 1 ? (a[b.floor(d)] + a[b.floor(d) - 1]) / 2 : a[d - 1]); }), (k = function (a) { var b; switch (a) { case "undefined": a = c; break; case "null": a = null; break; case "true": a = !0; break; case "false": a = !1; break; default: (b = parseFloat(a)), a == b && (a = b); } return a; }), (l = function (a) { var b, c = []; for (b = a.length; b--; ) c[b] = k(a[b]); return c; }), (m = function (a, b) { var c, d, e = []; for (c = 0, d = a.length; c < d; c++) a[c] !== b && e.push(a[c]); return e; }), (n = function (a) { return !isNaN(parseFloat(a)) && isFinite(a); }), (s = function (a, b, c, e, f) { var g, h; (a = (b === !1 ? parseFloat(a).toString() : a.toFixed(b)).split("")), (g = (g = d.inArray(".", a)) < 0 ? a.length : g), g < a.length && (a[g] = f); for (h = g - c; h > 0; h -= c) a.splice(h, 0, e); return a.join(""); }), (o = function (a, b, c) { var d; for (d = b.length; d--; ) { if (c && b[d] === null) continue; if (b[d] !== a) return !1; } return !0; }), (p = function (a) { var b = 0, c; for (c = a.length; c--; ) b += typeof a[c] == "number" ? a[c] : 0; return b; }), (r = function (a) { return d.isArray(a) ? a : [a]; }), (q = function (b) { var c; a.createStyleSheet ? (a.createStyleSheet().cssText = b) : ((c = a.createElement("style")), (c.type = "text/css"), a.getElementsByTagName("head")[0].appendChild(c), (c[ typeof a.body.style.WebkitAppearance == "string" ? "innerText" : "innerHTML" ] = b)); }), (d.fn.simpledraw = function (b, e, f, g) { var h, i; if (f && (h = this.data("_jqs_vcanvas"))) return h; if (d.fn.sparkline.canvas === !1) return !1; if (d.fn.sparkline.canvas === c) { var j = a.createElement("canvas"); if (!j.getContext || !j.getContext("2d")) { if (!a.namespaces || !!a.namespaces.v) return (d.fn.sparkline.canvas = !1), !1; a.namespaces.add( "v", "urn:schemas-microsoft-com:vml", "#default#VML" ), (d.fn.sparkline.canvas = function (a, b, c, d) { return new J(a, b, c); }); } else d.fn.sparkline.canvas = function (a, b, c, d) { return new I(a, b, c, d); }; } return ( b === c && (b = d(this).innerWidth()), e === c && (e = d(this).innerHeight()), (h = d.fn.sparkline.canvas(b, e, this, g)), (i = d(this).data("_jqs_mhandler")), i && i.registerCanvas(h), h ); }), (d.fn.cleardraw = function () { var a = this.data("_jqs_vcanvas"); a && a.reset(); }), (d.RangeMapClass = t = g({ init: function (a) { var b, c, d = []; for (b in a) a.hasOwnProperty(b) && typeof b == "string" && b.indexOf(":") > -1 && ((c = b.split(":")), (c[0] = c[0].length === 0 ? -Infinity : parseFloat(c[0])), (c[1] = c[1].length === 0 ? Infinity : parseFloat(c[1])), (c[2] = a[b]), d.push(c)); (this.map = a), (this.rangelist = d || !1); }, get: function (a) { var b = this.rangelist, d, e, f; if ((f = this.map[a]) !== c) return f; if (b) for (d = b.length; d--; ) { e = b[d]; if (e[0] <= a && e[1] >= a) return e[2]; } return c; }, })), (d.range_map = function (a) { return new t(a); }), (u = g({ init: function (a, b) { var c = d(a); (this.$el = c), (this.options = b), (this.currentPageX = 0), (this.currentPageY = 0), (this.el = a), (this.splist = []), (this.tooltip = null), (this.over = !1), (this.displayTooltips = !b.get("disableTooltips")), (this.highlightEnabled = !b.get("disableHighlight")); }, registerSparkline: function (a) { this.splist.push(a), this.over && this.updateDisplay(); }, registerCanvas: function (a) { var b = d(a.canvas); (this.canvas = a), (this.$canvas = b), b.mouseenter(d.proxy(this.mouseenter, this)), b.mouseleave(d.proxy(this.mouseleave, this)), b.click(d.proxy(this.mouseclick, this)); }, reset: function (a) { (this.splist = []), this.tooltip && a && (this.tooltip.remove(), (this.tooltip = c)); }, mouseclick: function (a) { var b = d.Event("sparklineClick"); (b.originalEvent = a), (b.sparklines = this.splist), this.$el.trigger(b); }, mouseenter: function (b) { d(a.body).unbind("mousemove.jqs"), d(a.body).bind("mousemove.jqs", d.proxy(this.mousemove, this)), (this.over = !0), (this.currentPageX = b.pageX), (this.currentPageY = b.pageY), (this.currentEl = b.target), !this.tooltip && this.displayTooltips && ((this.tooltip = new v(this.options)), this.tooltip.updatePosition(b.pageX, b.pageY)), this.updateDisplay(); }, mouseleave: function () { d(a.body).unbind("mousemove.jqs"); var b = this.splist, c = b.length, e = !1, f, g; (this.over = !1), (this.currentEl = null), this.tooltip && (this.tooltip.remove(), (this.tooltip = null)); for (g = 0; g < c; g++) (f = b[g]), f.clearRegionHighlight() && (e = !0); e && this.canvas.render(); }, mousemove: function (a) { (this.currentPageX = a.pageX), (this.currentPageY = a.pageY), (this.currentEl = a.target), this.tooltip && this.tooltip.updatePosition(a.pageX, a.pageY), this.updateDisplay(); }, updateDisplay: function () { var a = this.splist, b = a.length, c = !1, e = this.$canvas.offset(), f = this.currentPageX - e.left, g = this.currentPageY - e.top, h, i, j, k, l; if (!this.over) return; for (j = 0; j < b; j++) (i = a[j]), (k = i.setRegionHighlight(this.currentEl, f, g)), k && (c = !0); if (c) { (l = d.Event("sparklineRegionChange")), (l.sparklines = this.splist), this.$el.trigger(l); if (this.tooltip) { h = ""; for (j = 0; j < b; j++) (i = a[j]), (h += i.getCurrentRegionTooltip()); this.tooltip.setContent(h); } this.disableHighlight || this.canvas.render(); } k === null && this.mouseleave(); }, })), (v = g({ sizeStyle: "position: static !important;display: block !important;visibility: hidden !important;float: left !important;", init: function (b) { var c = b.get("tooltipClassname", "jqstooltip"), e = this.sizeStyle, f; (this.container = b.get("tooltipContainer") || a.body), (this.tooltipOffsetX = b.get("tooltipOffsetX", 10)), (this.tooltipOffsetY = b.get("tooltipOffsetY", 12)), d("#jqssizetip").remove(), d("#jqstooltip").remove(), (this.sizetip = d("
", { id: "jqssizetip", style: e, class: c, })), (this.tooltip = d("
", { id: "jqstooltip", class: c, }).appendTo(this.container)), (f = this.tooltip.offset()), (this.offsetLeft = f.left), (this.offsetTop = f.top), (this.hidden = !0), d(window).unbind("resize.jqs scroll.jqs"), d(window).bind( "resize.jqs scroll.jqs", d.proxy(this.updateWindowDims, this) ), this.updateWindowDims(); }, updateWindowDims: function () { (this.scrollTop = d(window).scrollTop()), (this.scrollLeft = d(window).scrollLeft()), (this.scrollRight = this.scrollLeft + d(window).width()), this.updatePosition(); }, getSize: function (a) { this.sizetip.html(a).appendTo(this.container), (this.width = this.sizetip.width() + 1), (this.height = this.sizetip.height()), this.sizetip.remove(); }, setContent: function (a) { if (!a) { this.tooltip.css("visibility", "hidden"), (this.hidden = !0); return; } this.getSize(a), this.tooltip .html(a) .css({ width: this.width, height: this.height, visibility: "visible", }), this.hidden && ((this.hidden = !1), this.updatePosition()); }, updatePosition: function (a, b) { if (a === c) { if (this.mousex === c) return; (a = this.mousex - this.offsetLeft), (b = this.mousey - this.offsetTop); } else (this.mousex = a -= this.offsetLeft), (this.mousey = b -= this.offsetTop); if (!this.height || !this.width || this.hidden) return; (b -= this.height + this.tooltipOffsetY), (a += this.tooltipOffsetX), b < this.scrollTop && (b = this.scrollTop), a < this.scrollLeft ? (a = this.scrollLeft) : a + this.width > this.scrollRight && (a = this.scrollRight - this.width), this.tooltip.css({ left: a, top: b }); }, remove: function () { this.tooltip.remove(), this.sizetip.remove(), (this.sizetip = this.tooltip = c), d(window).unbind("resize.jqs scroll.jqs"); }, })), (F = function () { q(E); }), d(F), (K = []), (d.fn.sparkline = function (b, e) { return this.each(function () { var f = new d.fn.sparkline.options(this, e), g = d(this), h, i; h = function () { var e, h, i, j, k, l, m; if (b === "html" || b === c) { m = this.getAttribute(f.get("tagValuesAttribute")); if (m === c || m === null) m = g.html(); e = m.replace(/(^\s*\s*$)|\s+/g, "").split(","); } else e = b; h = f.get("width") === "auto" ? e.length * f.get("defaultPixelsPerValue") : f.get("width"); if (f.get("height") === "auto") { if (!f.get("composite") || !d.data(this, "_jqs_vcanvas")) (j = a.createElement("span")), (j.innerHTML = "a"), g.html(j), (i = d(j).innerHeight() || d(j).height()), d(j).remove(), (j = null); } else i = f.get("height"); f.get("disableInteraction") ? (k = !1) : ((k = d.data(this, "_jqs_mhandler")), k ? f.get("composite") || k.reset() : ((k = new u(this, f)), d.data(this, "_jqs_mhandler", k))); if (f.get("composite") && !d.data(this, "_jqs_vcanvas")) { d.data(this, "_jqs_errnotify") || (alert( "Attempted to attach a composite sparkline to an element with no existing sparkline" ), d.data(this, "_jqs_errnotify", !0)); return; } (l = new d.fn.sparkline[f.get("type")](this, e, f, h, i)), l.render(), k && k.registerSparkline(l); }; if ( (d(this).html() && !f.get("disableHiddenCheck") && d(this).is(":hidden")) || !d(this).parents("body").length ) { if (!f.get("composite") && d.data(this, "_jqs_pending")) for (i = K.length; i; i--) K[i - 1][0] == this && K.splice(i - 1, 1); K.push([this, h]), d.data(this, "_jqs_pending", !0); } else h.call(this); }); }), (d.fn.sparkline.defaults = f()), (d.sparkline_display_visible = function () { var a, b, c, e = []; for (b = 0, c = K.length; b < c; b++) (a = K[b][0]), d(a).is(":visible") && !d(a).parents().is(":hidden") ? (K[b][1].call(a), d.data(K[b][0], "_jqs_pending", !1), e.push(b)) : !d(a).closest("html").length && !d.data(a, "_jqs_pending") && (d.data(K[b][0], "_jqs_pending", !1), e.push(b)); for (b = e.length; b; b--) K.splice(e[b - 1], 1); }), (d.fn.sparkline.options = g({ init: function (a, b) { var c, f, g, h; (this.userOptions = b = b || {}), (this.tag = a), (this.tagValCache = {}), (f = d.fn.sparkline.defaults), (g = f.common), (this.tagOptionsPrefix = b.enableTagOptions && (b.tagOptionsPrefix || g.tagOptionsPrefix)), (h = this.getTagSetting("type")), h === e ? (c = f[b.type || g.type]) : (c = f[h]), (this.mergedOptions = d.extend({}, g, c, b)); }, getTagSetting: function (a) { var b = this.tagOptionsPrefix, d, f, g, h; if (b === !1 || b === c) return e; if (this.tagValCache.hasOwnProperty(a)) d = this.tagValCache.key; else { d = this.tag.getAttribute(b + a); if (d === c || d === null) d = e; else if (d.substr(0, 1) === "[") { d = d.substr(1, d.length - 2).split(","); for (f = d.length; f--; ) d[f] = k(d[f].replace(/(^\s*)|(\s*$)/g, "")); } else if (d.substr(0, 1) === "{") { (g = d.substr(1, d.length - 2).split(",")), (d = {}); for (f = g.length; f--; ) (h = g[f].split(":", 2)), (d[h[0].replace(/(^\s*)|(\s*$)/g, "")] = k( h[1].replace(/(^\s*)|(\s*$)/g, "") )); } else d = k(d); this.tagValCache.key = d; } return d; }, get: function (a, b) { var d = this.getTagSetting(a), f; return d !== e ? d : (f = this.mergedOptions[a]) === c ? b : f; }, })), (d.fn.sparkline._base = g({ disabled: !1, init: function (a, b, e, f, g) { (this.el = a), (this.$el = d(a)), (this.values = b), (this.options = e), (this.width = f), (this.height = g), (this.currentRegion = c); }, initTarget: function () { var a = !this.options.get("disableInteraction"); (this.target = this.$el.simpledraw( this.width, this.height, this.options.get("composite"), a )) ? ((this.canvasWidth = this.target.pixelWidth), (this.canvasHeight = this.target.pixelHeight)) : (this.disabled = !0); }, render: function () { return this.disabled ? ((this.el.innerHTML = ""), !1) : !0; }, getRegion: function (a, b) {}, setRegionHighlight: function (a, b, d) { var e = this.currentRegion, f = !this.options.get("disableHighlight"), g; return b > this.canvasWidth || d > this.canvasHeight || b < 0 || d < 0 ? null : ((g = this.getRegion(a, b, d)), e !== g ? (e !== c && f && this.removeHighlight(), (this.currentRegion = g), g !== c && f && this.renderHighlight(), !0) : !1); }, clearRegionHighlight: function () { return this.currentRegion !== c ? (this.removeHighlight(), (this.currentRegion = c), !0) : !1; }, renderHighlight: function () { this.changeHighlight(!0); }, removeHighlight: function () { this.changeHighlight(!1); }, changeHighlight: function (a) {}, getCurrentRegionTooltip: function () { var a = this.options, b = "", e = [], f, g, i, j, k, l, m, n, o, p, q, r, s, t; if (this.currentRegion === c) return ""; (f = this.getCurrentRegionFields()), (q = a.get("tooltipFormatter")); if (q) return q(this, a, f); a.get("tooltipChartTitle") && (b += '
' + a.get("tooltipChartTitle") + "
\n"), (g = this.options.get("tooltipFormat")); if (!g) return ""; d.isArray(g) || (g = [g]), d.isArray(f) || (f = [f]), (m = this.options.get("tooltipFormatFieldlist")), (n = this.options.get("tooltipFormatFieldlistKey")); if (m && n) { o = []; for (l = f.length; l--; ) (p = f[l][n]), (t = d.inArray(p, m)) != -1 && (o[t] = f[l]); f = o; } (i = g.length), (s = f.length); for (l = 0; l < i; l++) { (r = g[l]), typeof r == "string" && (r = new h(r)), (j = r.fclass || "jqsfield"); for (t = 0; t < s; t++) if (!f[t].isNull || !a.get("tooltipSkipNull")) d.extend(f[t], { prefix: a.get("tooltipPrefix"), suffix: a.get("tooltipSuffix"), }), (k = r.render(f[t], a.get("tooltipValueLookups"), a)), e.push('
' + k + "
"); } return e.length ? b + e.join("\n") : ""; }, getCurrentRegionFields: function () {}, calcHighlightColor: function (a, c) { var d = c.get("highlightColor"), e = c.get("highlightLighten"), f, g, h, j; if (d) return d; if (e) { f = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(a); if (f) { (h = []), (g = a.length === 4 ? 16 : 1); for (j = 0; j < 3; j++) h[j] = i(b.round(parseInt(f[j + 1], 16) * g * e), 0, 255); return "rgb(" + h.join(",") + ")"; } } return a; }, })), (w = { changeHighlight: function (a) { var b = this.currentRegion, c = this.target, e = this.regionShapes[b], f; e && ((f = this.renderRegion(b, a)), d.isArray(f) || d.isArray(e) ? (c.replaceWithShapes(e, f), (this.regionShapes[b] = d.map(f, function (a) { return a.id; }))) : (c.replaceWithShape(e, f), (this.regionShapes[b] = f.id))); }, render: function () { var a = this.values, b = this.target, c = this.regionShapes, e, f, g, h; if (!this.cls._super.render.call(this)) return; for (g = a.length; g--; ) { e = this.renderRegion(g); if (e) if (d.isArray(e)) { f = []; for (h = e.length; h--; ) e[h].append(), f.push(e[h].id); c[g] = f; } else e.append(), (c[g] = e.id); else c[g] = null; } b.render(); }, }), (d.fn.sparkline.line = x = g(d.fn.sparkline._base, { type: "line", init: function (a, b, c, d, e) { x._super.init.call(this, a, b, c, d, e), (this.vertices = []), (this.regionMap = []), (this.xvalues = []), (this.yvalues = []), (this.yminmax = []), (this.hightlightSpotId = null), (this.lastShapeId = null), this.initTarget(); }, getRegion: function (a, b, d) { var e, f = this.regionMap; for (e = f.length; e--; ) if (f[e] !== null && b >= f[e][0] && b <= f[e][1]) return f[e][2]; return c; }, getCurrentRegionFields: function () { var a = this.currentRegion; return { isNull: this.yvalues[a] === null, x: this.xvalues[a], y: this.yvalues[a], color: this.options.get("lineColor"), fillColor: this.options.get("fillColor"), offset: a, }; }, renderHighlight: function () { var a = this.currentRegion, b = this.target, d = this.vertices[a], e = this.options, f = e.get("spotRadius"), g = e.get("highlightSpotColor"), h = e.get("highlightLineColor"), i, j; if (!d) return; f && g && ((i = b.drawCircle(d[0], d[1], f, c, g)), (this.highlightSpotId = i.id), b.insertAfterShape(this.lastShapeId, i)), h && ((j = b.drawLine( d[0], this.canvasTop, d[0], this.canvasTop + this.canvasHeight, h )), (this.highlightLineId = j.id), b.insertAfterShape(this.lastShapeId, j)); }, removeHighlight: function () { var a = this.target; this.highlightSpotId && (a.removeShapeId(this.highlightSpotId), (this.highlightSpotId = null)), this.highlightLineId && (a.removeShapeId(this.highlightLineId), (this.highlightLineId = null)); }, scanValues: function () { var a = this.values, c = a.length, d = this.xvalues, e = this.yvalues, f = this.yminmax, g, h, i, j, k; for (g = 0; g < c; g++) (h = a[g]), (i = typeof a[g] == "string"), (j = typeof a[g] == "object" && a[g] instanceof Array), (k = i && a[g].split(":")), i && k.length === 2 ? (d.push(Number(k[0])), e.push(Number(k[1])), f.push(Number(k[1]))) : j ? (d.push(h[0]), e.push(h[1]), f.push(h[1])) : (d.push(g), a[g] === null || a[g] === "null" ? e.push(null) : (e.push(Number(h)), f.push(Number(h)))); this.options.get("xvalues") && (d = this.options.get("xvalues")), (this.maxy = this.maxyorg = b.max.apply(b, f)), (this.miny = this.minyorg = b.min.apply(b, f)), (this.maxx = b.max.apply(b, d)), (this.minx = b.min.apply(b, d)), (this.xvalues = d), (this.yvalues = e), (this.yminmax = f); }, processRangeOptions: function () { var a = this.options, b = a.get("normalRangeMin"), d = a.get("normalRangeMax"); b !== c && (b < this.miny && (this.miny = b), d > this.maxy && (this.maxy = d)), a.get("chartRangeMin") !== c && (a.get("chartRangeClip") || a.get("chartRangeMin") < this.miny) && (this.miny = a.get("chartRangeMin")), a.get("chartRangeMax") !== c && (a.get("chartRangeClip") || a.get("chartRangeMax") > this.maxy) && (this.maxy = a.get("chartRangeMax")), a.get("chartRangeMinX") !== c && (a.get("chartRangeClipX") || a.get("chartRangeMinX") < this.minx) && (this.minx = a.get("chartRangeMinX")), a.get("chartRangeMaxX") !== c && (a.get("chartRangeClipX") || a.get("chartRangeMaxX") > this.maxx) && (this.maxx = a.get("chartRangeMaxX")); }, drawNormalRange: function (a, d, e, f, g) { var h = this.options.get("normalRangeMin"), i = this.options.get("normalRangeMax"), j = d + b.round(e - e * ((i - this.miny) / g)), k = b.round((e * (i - h)) / g); this.target .drawRect(a, j, f, k, c, this.options.get("normalRangeColor")) .append(); }, render: function () { var a = this.options, e = this.target, f = this.canvasWidth, g = this.canvasHeight, h = this.vertices, i = a.get("spotRadius"), j = this.regionMap, k, l, m, n, o, p, q, r, s, u, v, w, y, z, A, B, C, D, E, F, G, H, I, J, K; if (!x._super.render.call(this)) return; this.scanValues(), this.processRangeOptions(), (I = this.xvalues), (J = this.yvalues); if (!this.yminmax.length || this.yvalues.length < 2) return; (n = o = 0), (k = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx), (l = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny), (m = this.yvalues.length - 1), i && (f < i * 4 || g < i * 4) && (i = 0); if (i) { G = a.get("highlightSpotColor") && !a.get("disableInteraction"); if ( G || a.get("minSpotColor") || (a.get("spotColor") && J[m] === this.miny) ) g -= b.ceil(i); if ( G || a.get("maxSpotColor") || (a.get("spotColor") && J[m] === this.maxy) ) (g -= b.ceil(i)), (n += b.ceil(i)); if ( G || ((a.get("minSpotColor") || a.get("maxSpotColor")) && (J[0] === this.miny || J[0] === this.maxy)) ) (o += b.ceil(i)), (f -= b.ceil(i)); if ( G || a.get("spotColor") || a.get("minSpotColor") || (a.get("maxSpotColor") && (J[m] === this.miny || J[m] === this.maxy)) ) f -= b.ceil(i); } g--, a.get("normalRangeMin") !== c && !a.get("drawNormalOnTop") && this.drawNormalRange(o, n, g, f, l), (q = []), (r = [q]), (z = A = null), (B = J.length); for (K = 0; K < B; K++) (s = I[K]), (v = I[K + 1]), (u = J[K]), (w = o + b.round((s - this.minx) * (f / k))), (y = K < B - 1 ? o + b.round((v - this.minx) * (f / k)) : f), (A = w + (y - w) / 2), (j[K] = [z || 0, A, K]), (z = A), u === null ? K && (J[K - 1] !== null && ((q = []), r.push(q)), h.push(null)) : (u < this.miny && (u = this.miny), u > this.maxy && (u = this.maxy), q.length || q.push([w, n + g]), (p = [w, n + b.round(g - g * ((u - this.miny) / l))]), q.push(p), h.push(p)); (C = []), (D = []), (E = r.length); for (K = 0; K < E; K++) (q = r[K]), q.length && (a.get("fillColor") && (q.push([q[q.length - 1][0], n + g]), D.push(q.slice(0)), q.pop()), q.length > 2 && (q[0] = [q[0][0], q[1][1]]), C.push(q)); E = D.length; for (K = 0; K < E; K++) e.drawShape( D[K], a.get("fillColor"), a.get("fillColor") ).append(); a.get("normalRangeMin") !== c && a.get("drawNormalOnTop") && this.drawNormalRange(o, n, g, f, l), (E = C.length); for (K = 0; K < E; K++) e.drawShape( C[K], a.get("lineColor"), c, a.get("lineWidth") ).append(); if (i && a.get("valueSpots")) { (F = a.get("valueSpots")), F.get === c && (F = new t(F)); for (K = 0; K < B; K++) (H = F.get(J[K])), H && e .drawCircle( o + b.round((I[K] - this.minx) * (f / k)), n + b.round(g - g * ((J[K] - this.miny) / l)), i, c, H ) .append(); } i && a.get("spotColor") && J[m] !== null && e .drawCircle( o + b.round((I[I.length - 1] - this.minx) * (f / k)), n + b.round(g - g * ((J[m] - this.miny) / l)), i, c, a.get("spotColor") ) .append(), this.maxy !== this.minyorg && (i && a.get("minSpotColor") && ((s = I[d.inArray(this.minyorg, J)]), e .drawCircle( o + b.round((s - this.minx) * (f / k)), n + b.round(g - g * ((this.minyorg - this.miny) / l)), i, c, a.get("minSpotColor") ) .append()), i && a.get("maxSpotColor") && ((s = I[d.inArray(this.maxyorg, J)]), e .drawCircle( o + b.round((s - this.minx) * (f / k)), n + b.round(g - g * ((this.maxyorg - this.miny) / l)), i, c, a.get("maxSpotColor") ) .append())), (this.lastShapeId = e.getLastShapeId()), (this.canvasTop = n), e.render(); }, })), (d.fn.sparkline.bar = y = g(d.fn.sparkline._base, w, { type: "bar", init: function (a, e, f, g, h) { var j = parseInt(f.get("barWidth"), 10), n = parseInt(f.get("barSpacing"), 10), o = f.get("chartRangeMin"), p = f.get("chartRangeMax"), q = f.get("chartRangeClip"), r = Infinity, s = -Infinity, u, v, w, x, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R; y._super.init.call(this, a, e, f, g, h); for (A = 0, B = e.length; A < B; A++) { (O = e[A]), (u = typeof O == "string" && O.indexOf(":") > -1); if (u || d.isArray(O)) (J = !0), u && (O = e[A] = l(O.split(":"))), (O = m(O, null)), (v = b.min.apply(b, O)), (w = b.max.apply(b, O)), v < r && (r = v), w > s && (s = w); } (this.stacked = J), (this.regionShapes = {}), (this.barWidth = j), (this.barSpacing = n), (this.totalBarWidth = j + n), (this.width = g = e.length * j + (e.length - 1) * n), this.initTarget(), q && ((H = o === c ? -Infinity : o), (I = p === c ? Infinity : p)), (z = []), (x = J ? [] : z); var S = [], T = []; for (A = 0, B = e.length; A < B; A++) if (J) { (K = e[A]), (e[A] = N = []), (S[A] = 0), (x[A] = T[A] = 0); for (L = 0, M = K.length; L < M; L++) (O = N[L] = q ? i(K[L], H, I) : K[L]), O !== null && (O > 0 && (S[A] += O), r < 0 && s > 0 ? O < 0 ? (T[A] += b.abs(O)) : (x[A] += O) : (x[A] += b.abs(O - (O < 0 ? s : r))), z.push(O)); } else (O = q ? i(e[A], H, I) : e[A]), (O = e[A] = k(O)), O !== null && z.push(O); (this.max = G = b.max.apply(b, z)), (this.min = F = b.min.apply(b, z)), (this.stackMax = s = J ? b.max.apply(b, S) : G), (this.stackMin = r = J ? b.min.apply(b, z) : F), f.get("chartRangeMin") !== c && (f.get("chartRangeClip") || f.get("chartRangeMin") < F) && (F = f.get("chartRangeMin")), f.get("chartRangeMax") !== c && (f.get("chartRangeClip") || f.get("chartRangeMax") > G) && (G = f.get("chartRangeMax")), (this.zeroAxis = D = f.get("zeroAxis", !0)), F <= 0 && G >= 0 && D ? (E = 0) : D == 0 ? (E = F) : F > 0 ? (E = F) : (E = G), (this.xaxisOffset = E), (C = J ? b.max.apply(b, x) + b.max.apply(b, T) : G - F), (this.canvasHeightEf = D && F < 0 ? this.canvasHeight - 2 : this.canvasHeight - 1), F < E ? ((Q = J && G >= 0 ? s : G), (P = ((Q - E) / C) * this.canvasHeight), P !== b.ceil(P) && ((this.canvasHeightEf -= 2), (P = b.ceil(P)))) : (P = this.canvasHeight), (this.yoffset = P), d.isArray(f.get("colorMap")) ? ((this.colorMapByIndex = f.get("colorMap")), (this.colorMapByValue = null)) : ((this.colorMapByIndex = null), (this.colorMapByValue = f.get("colorMap")), this.colorMapByValue && this.colorMapByValue.get === c && (this.colorMapByValue = new t(this.colorMapByValue))), (this.range = C); }, getRegion: function (a, d, e) { var f = b.floor(d / this.totalBarWidth); return f < 0 || f >= this.values.length ? c : f; }, getCurrentRegionFields: function () { var a = this.currentRegion, b = r(this.values[a]), c = [], d, e; for (e = b.length; e--; ) (d = b[e]), c.push({ isNull: d === null, value: d, color: this.calcColor(e, d, a), offset: a, }); return c; }, calcColor: function (a, b, e) { var f = this.colorMapByIndex, g = this.colorMapByValue, h = this.options, i, j; return ( this.stacked ? (i = h.get("stackedBarColor")) : (i = b < 0 ? h.get("negBarColor") : h.get("barColor")), b === 0 && h.get("zeroColor") !== c && (i = h.get("zeroColor")), g && (j = g.get(b)) ? (i = j) : f && f.length > e && (i = f[e]), d.isArray(i) ? i[a % i.length] : i ); }, renderRegion: function (a, e) { var f = this.values[a], g = this.options, h = this.xaxisOffset, i = [], j = this.range, k = this.stacked, l = this.target, m = a * this.totalBarWidth, n = this.canvasHeightEf, p = this.yoffset, q, r, s, t, u, v, w, x, y, z; (f = d.isArray(f) ? f : [f]), (w = f.length), (x = f[0]), (t = o(null, f)), (z = o(h, f, !0)); if (t) return g.get("nullColor") ? ((s = e ? g.get("nullColor") : this.calcHighlightColor(g.get("nullColor"), g)), (q = p > 0 ? p - 1 : p), l.drawRect(m, q, this.barWidth - 1, 0, s, s)) : c; u = p; for (v = 0; v < w; v++) { x = f[v]; if (k && x === h) { if (!z || y) continue; y = !0; } j > 0 ? (r = b.floor(n * (b.abs(x - h) / j)) + 1) : (r = 1), x < h || (x === h && p === 0) ? ((q = u), (u += r)) : ((q = p - r), (p -= r)), (s = this.calcColor(v, x, a)), e && (s = this.calcHighlightColor(s, g)), i.push(l.drawRect(m, q, this.barWidth - 1, r - 1, s, s)); } return i.length === 1 ? i[0] : i; }, })), (d.fn.sparkline.tristate = z = g(d.fn.sparkline._base, w, { type: "tristate", init: function (a, b, e, f, g) { var h = parseInt(e.get("barWidth"), 10), i = parseInt(e.get("barSpacing"), 10); z._super.init.call(this, a, b, e, f, g), (this.regionShapes = {}), (this.barWidth = h), (this.barSpacing = i), (this.totalBarWidth = h + i), (this.values = d.map(b, Number)), (this.width = f = b.length * h + (b.length - 1) * i), d.isArray(e.get("colorMap")) ? ((this.colorMapByIndex = e.get("colorMap")), (this.colorMapByValue = null)) : ((this.colorMapByIndex = null), (this.colorMapByValue = e.get("colorMap")), this.colorMapByValue && this.colorMapByValue.get === c && (this.colorMapByValue = new t(this.colorMapByValue))), this.initTarget(); }, getRegion: function (a, c, d) { return b.floor(c / this.totalBarWidth); }, getCurrentRegionFields: function () { var a = this.currentRegion; return { isNull: this.values[a] === c, value: this.values[a], color: this.calcColor(this.values[a], a), offset: a, }; }, calcColor: function (a, b) { var c = this.values, d = this.options, e = this.colorMapByIndex, f = this.colorMapByValue, g, h; return ( f && (h = f.get(a)) ? (g = h) : e && e.length > b ? (g = e[b]) : c[b] < 0 ? (g = d.get("negBarColor")) : c[b] > 0 ? (g = d.get("posBarColor")) : (g = d.get("zeroBarColor")), g ); }, renderRegion: function (a, c) { var d = this.values, e = this.options, f = this.target, g, h, i, j, k, l; (g = f.pixelHeight), (i = b.round(g / 2)), (j = a * this.totalBarWidth), d[a] < 0 ? ((k = i), (h = i - 1)) : d[a] > 0 ? ((k = 0), (h = i - 1)) : ((k = i - 1), (h = 2)), (l = this.calcColor(d[a], a)); if (l === null) return; return ( c && (l = this.calcHighlightColor(l, e)), f.drawRect(j, k, this.barWidth - 1, h - 1, l, l) ); }, })), (d.fn.sparkline.discrete = A = g(d.fn.sparkline._base, w, { type: "discrete", init: function (a, e, f, g, h) { A._super.init.call(this, a, e, f, g, h), (this.regionShapes = {}), (this.values = e = d.map(e, Number)), (this.min = b.min.apply(b, e)), (this.max = b.max.apply(b, e)), (this.range = this.max - this.min), (this.width = g = f.get("width") === "auto" ? e.length * 2 : this.width), (this.interval = b.floor(g / e.length)), (this.itemWidth = g / e.length), f.get("chartRangeMin") !== c && (f.get("chartRangeClip") || f.get("chartRangeMin") < this.min) && (this.min = f.get("chartRangeMin")), f.get("chartRangeMax") !== c && (f.get("chartRangeClip") || f.get("chartRangeMax") > this.max) && (this.max = f.get("chartRangeMax")), this.initTarget(), this.target && (this.lineHeight = f.get("lineHeight") === "auto" ? b.round(this.canvasHeight * 0.3) : f.get("lineHeight")); }, getRegion: function (a, c, d) { return b.floor(c / this.itemWidth); }, getCurrentRegionFields: function () { var a = this.currentRegion; return { isNull: this.values[a] === c, value: this.values[a], offset: a, }; }, renderRegion: function (a, c) { var d = this.values, e = this.options, f = this.min, g = this.max, h = this.range, j = this.interval, k = this.target, l = this.canvasHeight, m = this.lineHeight, n = l - m, o, p, q, r; return ( (p = i(d[a], f, g)), (r = a * j), (o = b.round(n - n * ((p - f) / h))), (q = e.get("thresholdColor") && p < e.get("thresholdValue") ? e.get("thresholdColor") : e.get("lineColor")), c && (q = this.calcHighlightColor(q, e)), k.drawLine(r, o, r, o + m, q) ); }, })), (d.fn.sparkline.bullet = B = g(d.fn.sparkline._base, { type: "bullet", init: function (a, d, e, f, g) { var h, i, j; B._super.init.call(this, a, d, e, f, g), (this.values = d = l(d)), (j = d.slice()), (j[0] = j[0] === null ? j[2] : j[0]), (j[1] = d[1] === null ? j[2] : j[1]), (h = b.min.apply(b, d)), (i = b.max.apply(b, d)), e.get("base") === c ? (h = h < 0 ? h : 0) : (h = e.get("base")), (this.min = h), (this.max = i), (this.range = i - h), (this.shapes = {}), (this.valueShapes = {}), (this.regiondata = {}), (this.width = f = e.get("width") === "auto" ? "4.0em" : f), (this.target = this.$el.simpledraw(f, g, e.get("composite"))), d.length || (this.disabled = !0), this.initTarget(); }, getRegion: function (a, b, d) { var e = this.target.getShapeAt(a, b, d); return e !== c && this.shapes[e] !== c ? this.shapes[e] : c; }, getCurrentRegionFields: function () { var a = this.currentRegion; return { fieldkey: a.substr(0, 1), value: this.values[a.substr(1)], region: a, }; }, changeHighlight: function (a) { var b = this.currentRegion, c = this.valueShapes[b], d; delete this.shapes[c]; switch (b.substr(0, 1)) { case "r": d = this.renderRange(b.substr(1), a); break; case "p": d = this.renderPerformance(a); break; case "t": d = this.renderTarget(a); } (this.valueShapes[b] = d.id), (this.shapes[d.id] = b), this.target.replaceWithShape(c, d); }, renderRange: function (a, c) { var d = this.values[a], e = b.round(this.canvasWidth * ((d - this.min) / this.range)), f = this.options.get("rangeColors")[a - 2]; return ( c && (f = this.calcHighlightColor(f, this.options)), this.target.drawRect(0, 0, e - 1, this.canvasHeight - 1, f, f) ); }, renderPerformance: function (a) { var c = this.values[1], d = b.round(this.canvasWidth * ((c - this.min) / this.range)), e = this.options.get("performanceColor"); return ( a && (e = this.calcHighlightColor(e, this.options)), this.target.drawRect( 0, b.round(this.canvasHeight * 0.3), d - 1, b.round(this.canvasHeight * 0.4) - 1, e, e ) ); }, renderTarget: function (a) { var c = this.values[0], d = b.round( this.canvasWidth * ((c - this.min) / this.range) - this.options.get("targetWidth") / 2 ), e = b.round(this.canvasHeight * 0.1), f = this.canvasHeight - e * 2, g = this.options.get("targetColor"); return ( a && (g = this.calcHighlightColor(g, this.options)), this.target.drawRect( d, e, this.options.get("targetWidth") - 1, f - 1, g, g ) ); }, render: function () { var a = this.values.length, b = this.target, c, d; if (!B._super.render.call(this)) return; for (c = 2; c < a; c++) (d = this.renderRange(c).append()), (this.shapes[d.id] = "r" + c), (this.valueShapes["r" + c] = d.id); this.values[1] !== null && ((d = this.renderPerformance().append()), (this.shapes[d.id] = "p1"), (this.valueShapes.p1 = d.id)), this.values[0] !== null && ((d = this.renderTarget().append()), (this.shapes[d.id] = "t0"), (this.valueShapes.t0 = d.id)), b.render(); }, })), (d.fn.sparkline.pie = C = g(d.fn.sparkline._base, { type: "pie", init: function (a, c, e, f, g) { var h = 0, i; C._super.init.call(this, a, c, e, f, g), (this.shapes = {}), (this.valueShapes = {}), (this.values = c = d.map(c, Number)), e.get("width") === "auto" && (this.width = this.height); if (c.length > 0) for (i = c.length; i--; ) h += c[i]; (this.total = h), this.initTarget(), (this.radius = b.floor( b.min(this.canvasWidth, this.canvasHeight) / 2 )); }, getRegion: function (a, b, d) { var e = this.target.getShapeAt(a, b, d); return e !== c && this.shapes[e] !== c ? this.shapes[e] : c; }, getCurrentRegionFields: function () { var a = this.currentRegion; return { isNull: this.values[a] === c, value: this.values[a], percent: (this.values[a] / this.total) * 100, color: this.options.get("sliceColors")[ a % this.options.get("sliceColors").length ], offset: a, }; }, changeHighlight: function (a) { var b = this.currentRegion, c = this.renderSlice(b, a), d = this.valueShapes[b]; delete this.shapes[d], this.target.replaceWithShape(d, c), (this.valueShapes[b] = c.id), (this.shapes[c.id] = b); }, renderSlice: function (a, d) { var e = this.target, f = this.options, g = this.radius, h = f.get("borderWidth"), i = f.get("offset"), j = 2 * b.PI, k = this.values, l = this.total, m = i ? 2 * b.PI * (i / 360) : 0, n, o, p, q, r; q = k.length; for (p = 0; p < q; p++) { (n = m), (o = m), l > 0 && (o = m + j * (k[p] / l)); if (a === p) return ( (r = f.get("sliceColors")[p % f.get("sliceColors").length]), d && (r = this.calcHighlightColor(r, f)), e.drawPieSlice(g, g, g - h, n, o, c, r) ); m = o; } }, render: function () { var a = this.target, d = this.values, e = this.options, f = this.radius, g = e.get("borderWidth"), h, i; if (!C._super.render.call(this)) return; g && a .drawCircle( f, f, b.floor(f - g / 2), e.get("borderColor"), c, g ) .append(); for (i = d.length; i--; ) d[i] && ((h = this.renderSlice(i).append()), (this.valueShapes[i] = h.id), (this.shapes[h.id] = i)); a.render(); }, })), (d.fn.sparkline.box = D = g(d.fn.sparkline._base, { type: "box", init: function (a, b, c, e, f) { D._super.init.call(this, a, b, c, e, f), (this.values = d.map(b, Number)), (this.width = c.get("width") === "auto" ? "4.0em" : e), this.initTarget(), this.values.length || (this.disabled = 1); }, getRegion: function () { return 1; }, getCurrentRegionFields: function () { var a = [ { field: "lq", value: this.quartiles[0] }, { field: "med", value: this.quartiles[1] }, { field: "uq", value: this.quartiles[2] }, ]; return ( this.loutlier !== c && a.push({ field: "lo", value: this.loutlier }), this.routlier !== c && a.push({ field: "ro", value: this.routlier }), this.lwhisker !== c && a.push({ field: "lw", value: this.lwhisker }), this.rwhisker !== c && a.push({ field: "rw", value: this.rwhisker }), a ); }, render: function () { var a = this.target, d = this.values, e = d.length, f = this.options, g = this.canvasWidth, h = this.canvasHeight, i = f.get("chartRangeMin") === c ? b.min.apply(b, d) : f.get("chartRangeMin"), k = f.get("chartRangeMax") === c ? b.max.apply(b, d) : f.get("chartRangeMax"), l = 0, m, n, o, p, q, r, s, t, u, v, w; if (!D._super.render.call(this)) return; if (f.get("raw")) f.get("showOutliers") && d.length > 5 ? ((n = d[0]), (m = d[1]), (p = d[2]), (q = d[3]), (r = d[4]), (s = d[5]), (t = d[6])) : ((m = d[0]), (p = d[1]), (q = d[2]), (r = d[3]), (s = d[4])); else { d.sort(function (a, b) { return a - b; }), (p = j(d, 1)), (q = j(d, 2)), (r = j(d, 3)), (o = r - p); if (f.get("showOutliers")) { m = s = c; for (u = 0; u < e; u++) m === c && d[u] > p - o * f.get("outlierIQR") && (m = d[u]), d[u] < r + o * f.get("outlierIQR") && (s = d[u]); (n = d[0]), (t = d[e - 1]); } else (m = d[0]), (s = d[e - 1]); } (this.quartiles = [p, q, r]), (this.lwhisker = m), (this.rwhisker = s), (this.loutlier = n), (this.routlier = t), (w = g / (k - i + 1)), f.get("showOutliers") && ((l = b.ceil(f.get("spotRadius"))), (g -= 2 * b.ceil(f.get("spotRadius"))), (w = g / (k - i + 1)), n < m && a .drawCircle( (n - i) * w + l, h / 2, f.get("spotRadius"), f.get("outlierLineColor"), f.get("outlierFillColor") ) .append(), t > s && a .drawCircle( (t - i) * w + l, h / 2, f.get("spotRadius"), f.get("outlierLineColor"), f.get("outlierFillColor") ) .append()), a .drawRect( b.round((p - i) * w + l), b.round(h * 0.1), b.round((r - p) * w), b.round(h * 0.8), f.get("boxLineColor"), f.get("boxFillColor") ) .append(), a .drawLine( b.round((m - i) * w + l), b.round(h / 2), b.round((p - i) * w + l), b.round(h / 2), f.get("lineColor") ) .append(), a .drawLine( b.round((m - i) * w + l), b.round(h / 4), b.round((m - i) * w + l), b.round(h - h / 4), f.get("whiskerColor") ) .append(), a .drawLine( b.round((s - i) * w + l), b.round(h / 2), b.round((r - i) * w + l), b.round(h / 2), f.get("lineColor") ) .append(), a .drawLine( b.round((s - i) * w + l), b.round(h / 4), b.round((s - i) * w + l), b.round(h - h / 4), f.get("whiskerColor") ) .append(), a .drawLine( b.round((q - i) * w + l), b.round(h * 0.1), b.round((q - i) * w + l), b.round(h * 0.9), f.get("medianColor") ) .append(), f.get("target") && ((v = b.ceil(f.get("spotRadius"))), a .drawLine( b.round((f.get("target") - i) * w + l), b.round(h / 2 - v), b.round((f.get("target") - i) * w + l), b.round(h / 2 + v), f.get("targetColor") ) .append(), a .drawLine( b.round((f.get("target") - i) * w + l - v), b.round(h / 2), b.round((f.get("target") - i) * w + l + v), b.round(h / 2), f.get("targetColor") ) .append()), a.render(); }, })), (G = g({ init: function (a, b, c, d) { (this.target = a), (this.id = b), (this.type = c), (this.args = d); }, append: function () { return this.target.appendShape(this), this; }, })), (H = g({ _pxregex: /(\d+)(px)?\s*$/i, init: function (a, b, c) { if (!a) return; (this.width = a), (this.height = b), (this.target = c), (this.lastShapeId = null), c[0] && (c = c[0]), d.data(c, "_jqs_vcanvas", this); }, drawLine: function (a, b, c, d, e, f) { return this.drawShape( [ [a, b], [c, d], ], e, f ); }, drawShape: function (a, b, c, d) { return this._genShape("Shape", [a, b, c, d]); }, drawCircle: function (a, b, c, d, e, f) { return this._genShape("Circle", [a, b, c, d, e, f]); }, drawPieSlice: function (a, b, c, d, e, f, g) { return this._genShape("PieSlice", [a, b, c, d, e, f, g]); }, drawRect: function (a, b, c, d, e, f) { return this._genShape("Rect", [a, b, c, d, e, f]); }, getElement: function () { return this.canvas; }, getLastShapeId: function () { return this.lastShapeId; }, reset: function () { alert("reset not implemented"); }, _insert: function (a, b) { d(b).html(a); }, _calculatePixelDims: function (a, b, c) { var e; (e = this._pxregex.exec(b)), e ? (this.pixelHeight = e[1]) : (this.pixelHeight = d(c).height()), (e = this._pxregex.exec(a)), e ? (this.pixelWidth = e[1]) : (this.pixelWidth = d(c).width()); }, _genShape: function (a, b) { var c = L++; return b.unshift(c), new G(this, c, a, b); }, appendShape: function (a) { alert("appendShape not implemented"); }, replaceWithShape: function (a, b) { alert("replaceWithShape not implemented"); }, insertAfterShape: function (a, b) { alert("insertAfterShape not implemented"); }, removeShapeId: function (a) { alert("removeShapeId not implemented"); }, getShapeAt: function (a, b, c) { alert("getShapeAt not implemented"); }, render: function () { alert("render not implemented"); }, })), (I = g(H, { init: function (b, e, f, g) { I._super.init.call(this, b, e, f), (this.canvas = a.createElement("canvas")), f[0] && (f = f[0]), d.data(f, "_jqs_vcanvas", this), d(this.canvas).css({ display: "inline-block", width: b, height: e, verticalAlign: "top", }), this._insert(this.canvas, f), this._calculatePixelDims(b, e, this.canvas), (this.canvas.width = this.pixelWidth), (this.canvas.height = this.pixelHeight), (this.interact = g), (this.shapes = {}), (this.shapeseq = []), (this.currentTargetShapeId = c), d(this.canvas).css({ width: this.pixelWidth, height: this.pixelHeight, }); }, _getContext: function (a, b, d) { var e = this.canvas.getContext("2d"); return ( a !== c && (e.strokeStyle = a), (e.lineWidth = d === c ? 1 : d), b !== c && (e.fillStyle = b), e ); }, reset: function () { var a = this._getContext(); a.clearRect(0, 0, this.pixelWidth, this.pixelHeight), (this.shapes = {}), (this.shapeseq = []), (this.currentTargetShapeId = c); }, _drawShape: function (a, b, d, e, f) { var g = this._getContext(d, e, f), h, i; g.beginPath(), g.moveTo(b[0][0] + 0.5, b[0][1] + 0.5); for (h = 1, i = b.length; h < i; h++) g.lineTo(b[h][0] + 0.5, b[h][1] + 0.5); d !== c && g.stroke(), e !== c && g.fill(), this.targetX !== c && this.targetY !== c && g.isPointInPath(this.targetX, this.targetY) && (this.currentTargetShapeId = a); }, _drawCircle: function (a, d, e, f, g, h, i) { var j = this._getContext(g, h, i); j.beginPath(), j.arc(d, e, f, 0, 2 * b.PI, !1), this.targetX !== c && this.targetY !== c && j.isPointInPath(this.targetX, this.targetY) && (this.currentTargetShapeId = a), g !== c && j.stroke(), h !== c && j.fill(); }, _drawPieSlice: function (a, b, d, e, f, g, h, i) { var j = this._getContext(h, i); j.beginPath(), j.moveTo(b, d), j.arc(b, d, e, f, g, !1), j.lineTo(b, d), j.closePath(), h !== c && j.stroke(), i && j.fill(), this.targetX !== c && this.targetY !== c && j.isPointInPath(this.targetX, this.targetY) && (this.currentTargetShapeId = a); }, _drawRect: function (a, b, c, d, e, f, g) { return this._drawShape( a, [ [b, c], [b + d, c], [b + d, c + e], [b, c + e], [b, c], ], f, g ); }, appendShape: function (a) { return ( (this.shapes[a.id] = a), this.shapeseq.push(a.id), (this.lastShapeId = a.id), a.id ); }, replaceWithShape: function (a, b) { var c = this.shapeseq, d; this.shapes[b.id] = b; for (d = c.length; d--; ) c[d] == a && (c[d] = b.id); delete this.shapes[a]; }, replaceWithShapes: function (a, b) { var c = this.shapeseq, d = {}, e, f, g; for (f = a.length; f--; ) d[a[f]] = !0; for (f = c.length; f--; ) (e = c[f]), d[e] && (c.splice(f, 1), delete this.shapes[e], (g = f)); for (f = b.length; f--; ) c.splice(g, 0, b[f].id), (this.shapes[b[f].id] = b[f]); }, insertAfterShape: function (a, b) { var c = this.shapeseq, d; for (d = c.length; d--; ) if (c[d] === a) { c.splice(d + 1, 0, b.id), (this.shapes[b.id] = b); return; } }, removeShapeId: function (a) { var b = this.shapeseq, c; for (c = b.length; c--; ) if (b[c] === a) { b.splice(c, 1); break; } delete this.shapes[a]; }, getShapeAt: function (a, b, c) { return ( (this.targetX = b), (this.targetY = c), this.render(), this.currentTargetShapeId ); }, render: function () { var a = this.shapeseq, b = this.shapes, c = a.length, d = this._getContext(), e, f, g; d.clearRect(0, 0, this.pixelWidth, this.pixelHeight); for (g = 0; g < c; g++) (e = a[g]), (f = b[e]), this["_draw" + f.type].apply(this, f.args); this.interact || ((this.shapes = {}), (this.shapeseq = [])); }, })), (J = g(H, { init: function (b, c, e) { var f; J._super.init.call(this, b, c, e), e[0] && (e = e[0]), d.data(e, "_jqs_vcanvas", this), (this.canvas = a.createElement("span")), d(this.canvas).css({ display: "inline-block", position: "relative", overflow: "hidden", width: b, height: c, margin: "0px", padding: "0px", verticalAlign: "top", }), this._insert(this.canvas, e), this._calculatePixelDims(b, c, this.canvas), (this.canvas.width = this.pixelWidth), (this.canvas.height = this.pixelHeight), (f = ''), this.canvas.insertAdjacentHTML("beforeEnd", f), (this.group = d(this.canvas).children()[0]), (this.rendered = !1), (this.prerender = ""); }, _drawShape: function (a, b, d, e, f) { var g = [], h, i, j, k, l, m, n; for (n = 0, m = b.length; n < m; n++) g[n] = "" + b[n][0] + "," + b[n][1]; return ( (h = g.splice(0, 1)), (f = f === c ? 1 : f), (i = d === c ? ' stroked="false" ' : ' strokeWeight="' + f + 'px" strokeColor="' + d + '" '), (j = e === c ? ' filled="false"' : ' fillColor="' + e + '" filled="true" '), (k = g[0] === g[g.length - 1] ? "x " : ""), (l = '' + " "), l ); }, _drawCircle: function (a, b, d, e, f, g, h) { var i, j, k; return ( (b -= e), (d -= e), (i = f === c ? ' stroked="false" ' : ' strokeWeight="' + h + 'px" strokeColor="' + f + '" '), (j = g === c ? ' filled="false"' : ' fillColor="' + g + '" filled="true" '), (k = ''), k ); }, _drawPieSlice: function (a, d, e, f, g, h, i, j) { var k, l, m, n, o, p, q, r; if (g === h) return ""; h - g === 2 * b.PI && ((g = 0), (h = 2 * b.PI)), (l = d + b.round(b.cos(g) * f)), (m = e + b.round(b.sin(g) * f)), (n = d + b.round(b.cos(h) * f)), (o = e + b.round(b.sin(h) * f)); if (l === n && m === o) { if (h - g < b.PI) return ""; (l = n = d + f), (m = o = e); } return l === n && m === o && h - g < b.PI ? "" : ((k = [d - f, e - f, d + f, e + f, l, m, n, o]), (p = i === c ? ' stroked="false" ' : ' strokeWeight="1px" strokeColor="' + i + '" '), (q = j === c ? ' filled="false"' : ' fillColor="' + j + '" filled="true" '), (r = '' + " "), r); }, _drawRect: function (a, b, c, d, e, f, g) { return this._drawShape( a, [ [b, c], [b, c + e], [b + d, c + e], [b + d, c], [b, c], ], f, g ); }, reset: function () { this.group.innerHTML = ""; }, appendShape: function (a) { var b = this["_draw" + a.type].apply(this, a.args); return ( this.rendered ? this.group.insertAdjacentHTML("beforeEnd", b) : (this.prerender += b), (this.lastShapeId = a.id), a.id ); }, replaceWithShape: function (a, b) { var c = d("#jqsshape" + a), e = this["_draw" + b.type].apply(this, b.args); c[0].outerHTML = e; }, replaceWithShapes: function (a, b) { var c = d("#jqsshape" + a[0]), e = "", f = b.length, g; for (g = 0; g < f; g++) e += this["_draw" + b[g].type].apply(this, b[g].args); c[0].outerHTML = e; for (g = 1; g < a.length; g++) d("#jqsshape" + a[g]).remove(); }, insertAfterShape: function (a, b) { var c = d("#jqsshape" + a), e = this["_draw" + b.type].apply(this, b.args); c[0].insertAdjacentHTML("afterEnd", e); }, removeShapeId: function (a) { var b = d("#jqsshape" + a); this.group.removeChild(b[0]); }, getShapeAt: function (a, b, c) { var d = a.id.substr(8); return d; }, render: function () { this.rendered || ((this.group.innerHTML = this.prerender), (this.rendered = !0)); }, })); }); })(document, Math);