/* CanvasJS HTML5 & JavaScript Charts - v2.3.1 GA - https://canvasjs.com/ Copyright 2018 fenopix --------------------- License Information -------------------- CanvasJS is a commercial product which requires purchase of license. Without a commercial license you can use it for evaluation purposes for upto 30 days. Please refer to the following link for further details. https://canvasjs.com/license/ */ /*eslint-disable*/ /*jshint ignore:start*/ (function () { function qa(k, p) { k.prototype = eb(p.prototype); k.prototype.constructor = k; k.base = p.prototype; } function eb(k) { function p() {} p.prototype = k; return new p(); } function Ya(k, p, D) { "millisecond" === D ? k.setMilliseconds(k.getMilliseconds() + 1 * p) : "second" === D ? k.setSeconds(k.getSeconds() + 1 * p) : "minute" === D ? k.setMinutes(k.getMinutes() + 1 * p) : "hour" === D ? k.setHours(k.getHours() + 1 * p) : "day" === D ? k.setDate(k.getDate() + 1 * p) : "week" === D ? k.setDate(k.getDate() + 7 * p) : "month" === D ? k.setMonth(k.getMonth() + 1 * p) : "year" === D && k.setFullYear(k.getFullYear() + 1 * p); return k; } function $(k, p) { var D = !1; 0 > k && ((D = !0), (k *= -1)); k = "" + k; for (p = p ? p : 1; k.length < p; ) k = "0" + k; return D ? "-" + k : k; } function Ia(k) { if (!k) return k; k = k.replace(/^\s\s*/, ""); for (var p = /\s/, D = k.length; p.test(k.charAt(--D)); ); return k.slice(0, D + 1); } function Ea(k) { k.roundRect = function (k, D, r, u, H, F, z, v) { z && (this.fillStyle = z); v && (this.strokeStyle = v); "undefined" === typeof H && (H = 5); this.lineWidth = F; this.beginPath(); this.moveTo(k + H, D); this.lineTo(k + r - H, D); this.quadraticCurveTo(k + r, D, k + r, D + H); this.lineTo(k + r, D + u - H); this.quadraticCurveTo(k + r, D + u, k + r - H, D + u); this.lineTo(k + H, D + u); this.quadraticCurveTo(k, D + u, k, D + u - H); this.lineTo(k, D + H); this.quadraticCurveTo(k, D, k + H, D); this.closePath(); z && this.fill(); v && 0 < F && this.stroke(); }; } function Sa(k, p) { return k - p; } function Ta(k, p, D) { if (k && p && D) { D = D + "." + p; var r = "image/" + p; k = k.toDataURL(r); var u = !1, H = document.createElement("a"); H.download = D; H.href = k; if ("undefined" !== typeof Blob && new Blob()) { for ( var F = k.replace(/^data:[a-z\/]*;base64,/, ""), F = atob(F), z = new ArrayBuffer(F.length), z = new Uint8Array(z), v = 0; v < F.length; v++ ) z[v] = F.charCodeAt(v); p = new Blob([z.buffer], { type: "image/" + p }); try { window.navigator.msSaveBlob(p, D), (u = !0); } catch (L) { (H.dataset.downloadurl = [r, H.download, H.href].join(":")), (H.href = window.URL.createObjectURL(p)); } } if (!u) try { (event = document.createEvent("MouseEvents")), event.initMouseEvent( "click", !0, !1, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null ), H.dispatchEvent ? H.dispatchEvent(event) : H.fireEvent && H.fireEvent("onclick"); } catch (E) { (p = window.open()), p.document.write( "
Please right click on the image and save it to your device
" ), p.document.close(); } } } function N(k) { var p = ((k & 16711680) >> 16).toString(16), D = ((k & 65280) >> 8).toString(16); k = ((k & 255) >> 0).toString(16); p = 2 > p.length ? "0" + p : p; D = 2 > D.length ? "0" + D : D; k = 2 > k.length ? "0" + k : k; return "#" + p + D + k; } function fb(k, p) { var D = this.length >>> 0, r = Number(p) || 0, r = 0 > r ? Math.ceil(r) : Math.floor(r); for (0 > r && (r += D); r < D; r++) if (r in this && this[r] === k) return r; return -1; } function u(k) { return null === k || "undefined" === typeof k; } function Fa(k) { k.indexOf || (k.indexOf = fb); return k; } function gb(k) { if (U.fSDec) k[ja("`eeDwdouMhrudods")](ja("e`u`@ohl`uhnoHuds`uhnoDoe"), function () { U._fTWm && U._fTWm(k); }); } function Za(k, p, D) { D = D || "normal"; var r = k + "_" + p + "_" + D, u = $a[r]; if (isNaN(u)) { try { k = "position:absolute; left:0px; top:-20000px; padding:0px;margin:0px;border:none;white-space:pre;line-height:normal;font-family:" + k + "; font-size:" + p + "px; font-weight:" + D + ";"; if (!xa) { var H = document.body; xa = document.createElement("span"); xa.innerHTML = ""; var F = document.createTextNode("Mpgyi"); xa.appendChild(F); H.appendChild(xa); } xa.style.display = ""; xa.setAttribute("style", k); u = Math.round(xa.offsetHeight); xa.style.display = "none"; } catch (z) { u = Math.ceil(1.1 * p); } u = Math.max(u, p); $a[r] = u; } return u; } function R(k, p) { var D = []; if ( (D = { solid: [], shortDash: [3, 1], shortDot: [1, 1], shortDashDot: [3, 1, 1, 1], shortDashDotDot: [3, 1, 1, 1, 1, 1], dot: [1, 2], dash: [4, 2], dashDot: [4, 2, 1, 2], longDash: [8, 2], longDashDot: [8, 2, 1, 2], longDashDotDot: [8, 2, 1, 2, 1, 2], }[k || "solid"]) ) for (var r = 0; r < D.length; r++) D[r] *= p; else D = []; return D; } function O(k, p, D, r, u) { r = r || []; u = u || !1; r.push([k, p, D, u]); return k.addEventListener ? (k.addEventListener(p, D, u), D) : k.attachEvent ? ((r = function (p) { p = p || window.event; p.preventDefault = p.preventDefault || function () { p.returnValue = !1; }; p.stopPropagation = p.stopPropagation || function () { p.cancelBubble = !0; }; D.call(k, p); }), k.attachEvent("on" + p, r), r) : !1; } function ab(k, p, D) { k *= W; p *= W; k = D.getImageData(k, p, 2, 2).data; p = !0; for (D = 0; 4 > D; D++) if ((k[D] !== k[D + 4]) | (k[D] !== k[D + 8]) | (k[D] !== k[D + 12])) { p = !1; break; } return p ? (k[0] << 16) | (k[1] << 8) | k[2] : 0; } function na(k, p, D) { return k in p ? p[k] : D[k]; } function Oa(k, p, D) { if (r && bb) { var u = k.getContext("2d"); Pa = u.webkitBackingStorePixelRatio || u.mozBackingStorePixelRatio || u.msBackingStorePixelRatio || u.oBackingStorePixelRatio || u.backingStorePixelRatio || 1; W = Ua / Pa; k.width = p * W; k.height = D * W; Ua !== Pa && ((k.style.width = p + "px"), (k.style.height = D + "px"), u.scale(W, W)); } else (k.width = p), (k.height = D); } function hb(k) { if (!ib) { var p = !1, D = !1; "undefined" === typeof ra.Chart.creditHref ? ((k.creditHref = ja("iuuqr;..b`ow`rkr/bnl.")), (k.creditText = ja("B`ow`rKR/bnl"))) : ((p = k.updateOption("creditText")), (D = k.updateOption("creditHref"))); if (k.creditHref && k.creditText) { k._creditLink || ((k._creditLink = document.createElement("a")), k._creditLink.setAttribute("class", "canvasjs-chart-credit"), k._creditLink.setAttribute("title", "JavaScript Charts"), k._creditLink.setAttribute( "style", "outline:none;margin:0px;position:absolute;right:2px;top:" + (k.height - 14) + "px;color:dimgrey;text-decoration:none;font-size:11px;font-family: Calibri, Lucida Grande, Lucida Sans Unicode, Arial, sans-serif" ), k._creditLink.setAttribute("tabIndex", -1), k._creditLink.setAttribute("target", "_blank")); if (0 === k.renderCount || p || D) k._creditLink.setAttribute("href", k.creditHref), (k._creditLink.innerHTML = k.creditText); k._creditLink && k.creditHref && k.creditText ? (k._creditLink.parentElement || k._canvasJSContainer.appendChild(k._creditLink), (k._creditLink.style.top = k.height - 14 + "px")) : k._creditLink.parentElement && k._canvasJSContainer.removeChild(k._creditLink); } } } function ta(k, p) { Ja && ((this.canvasCount |= 0), window.console.log(++this.canvasCount)); var D = document.createElement("canvas"); D.setAttribute("class", "canvasjs-chart-canvas"); Oa(D, k, p); r || "undefined" === typeof G_vmlCanvasManager || G_vmlCanvasManager.initElement(D); return D; } function sa(k, p, D) { for (var r in D) p.style[r] = D[r]; } function ua(k, p, D) { p.getAttribute("state") || ((p.style.backgroundColor = k.toolbar.backgroundColor), (p.style.color = k.toolbar.fontColor), (p.style.border = "none"), sa(k, p, { WebkitUserSelect: "none", MozUserSelect: "none", msUserSelect: "none", userSelect: "none", })); p.getAttribute("state") !== D && (p.setAttribute("state", D), p.setAttribute("type", "button"), sa(k, p, { padding: "5px 12px", cursor: "pointer", float: "left", width: "40px", height: "25px", outline: "0px", verticalAlign: "baseline", lineHeight: "0", }), p.setAttribute("title", k._cultureInfo[D + "Text"]), (p.innerHTML = "" +
        k._cultureInfo[D + "Text"] +
        "")); } function Qa() { for (var k = null, p = 0; p < arguments.length; p++) (k = arguments[p]), k.style && (k.style.display = "inline"); } function va() { for (var k = null, p = 0; p < arguments.length; p++) (k = arguments[p]) && k.style && (k.style.display = "none"); } function V(k, p, D, r, v) { this._defaultsKey = k; this._themeOptionsKey = p; this._index = r; this.parent = v; this._eventListeners = []; k = {}; this.theme && u(p) && u(r) ? (k = u(ya[this.theme]) ? ya.light1 : ya[this.theme]) : this.parent && this.parent.themeOptions && this.parent.themeOptions[p] && (null === r ? (k = this.parent.themeOptions[p]) : 0 < this.parent.themeOptions[p].length && ((r = Math.min(this.parent.themeOptions[p].length - 1, r)), (k = this.parent.themeOptions[p][r]))); this.themeOptions = k; this.options = D ? D : { _isPlaceholder: !0 }; this.setOptions(this.options, k); } function Ga(k, p, r, u, v) { "undefined" === typeof v && (v = 0); this._padding = v; this._x1 = k; this._y1 = p; this._x2 = r; this._y2 = u; this._rightOccupied = this._leftOccupied = this._bottomOccupied = this._topOccupied = this._padding; } function ka(k, p) { ka.base.constructor.call(this, "TextBlock", null, p, null, null); this.ctx = k; this._isDirty = !0; this._wrappedText = null; this._initialize(); } function Va(k, p) { Va.base.constructor.call(this, "Toolbar", "toolbar", p, null, k); this.chart = k; this.canvas = k.canvas; this.ctx = this.chart.ctx; this.optionsName = "toolbar"; } function Aa(k, p) { Aa.base.constructor.call(this, "Title", "title", p, null, k); this.chart = k; this.canvas = k.canvas; this.ctx = this.chart.ctx; this.optionsName = "title"; if (u(this.options.margin) && k.options.subtitles) for (var r = k.options.subtitles, za = 0; za < r.length; za++) if ( ((u(r[za].horizontalAlign) && "center" === this.horizontalAlign) || r[za].horizontalAlign === this.horizontalAlign) && ((u(r[za].verticalAlign) && "top" === this.verticalAlign) || r[za].verticalAlign === this.verticalAlign) && !r[za].dockInsidePlotArea === !this.dockInsidePlotArea ) { this.margin = 0; break; } "undefined" === typeof this.options.fontSize && (this.fontSize = this.chart.getAutoFontSize(this.fontSize)); this.height = this.width = null; this.bounds = { x1: null, y1: null, x2: null, y2: null }; } function Ka(k, p, r) { Ka.base.constructor.call(this, "Subtitle", "subtitles", p, r, k); this.chart = k; this.canvas = k.canvas; this.ctx = this.chart.ctx; this.optionsName = "subtitles"; this.isOptionsInArray = !0; "undefined" === typeof this.options.fontSize && (this.fontSize = this.chart.getAutoFontSize(this.fontSize)); this.height = this.width = null; this.bounds = { x1: null, y1: null, x2: null, y2: null }; } function Wa() { this.pool = []; } function La(k) { var p; k && Ma[k] && (p = Ma[k]); La.base.constructor.call(this, "CultureInfo", null, p, null, null); } var Ja = !1, U = {}, r = !!document.createElement("canvas").getContext, ra = { Chart: { width: 500, height: 400, zoomEnabled: !1, zoomType: "x", backgroundColor: "white", theme: "light1", animationEnabled: !1, animationDuration: 1200, dataPointWidth: null, dataPointMinWidth: null, dataPointMaxWidth: null, colorSet: "colorSet1", culture: "en", creditHref: "", creditText: "CanvasJS", interactivityEnabled: !0, exportEnabled: !1, exportFileName: "Chart", rangeChanging: null, rangeChanged: null, publicProperties: { title: "readWrite", subtitles: "readWrite", toolbar: "readWrite", toolTip: "readWrite", legend: "readWrite", axisX: "readWrite", axisY: "readWrite", axisX2: "readWrite", axisY2: "readWrite", data: "readWrite", options: "readWrite", bounds: "readOnly", container: "readOnly", }, }, Title: { padding: 0, text: null, verticalAlign: "top", horizontalAlign: "center", fontSize: 20, fontFamily: "Calibri", fontWeight: "normal", fontColor: "black", fontStyle: "normal", borderThickness: 0, borderColor: "black", cornerRadius: 0, backgroundColor: r ? "transparent" : null, margin: 5, wrap: !0, maxWidth: null, dockInsidePlotArea: !1, publicProperties: { options: "readWrite", bounds: "readOnly", chart: "readOnly", }, }, Subtitle: { padding: 0, text: null, verticalAlign: "top", horizontalAlign: "center", fontSize: 14, fontFamily: "Calibri", fontWeight: "normal", fontColor: "black", fontStyle: "normal", borderThickness: 0, borderColor: "black", cornerRadius: 0, backgroundColor: null, margin: 2, wrap: !0, maxWidth: null, dockInsidePlotArea: !1, publicProperties: { options: "readWrite", bounds: "readOnly", chart: "readOnly", }, }, Toolbar: { backgroundColor: "white", backgroundColorOnHover: "#2196f3", borderColor: "#2196f3", borderThickness: 1, fontColor: "black", fontColorOnHover: "white", publicProperties: { options: "readWrite", chart: "readOnly" }, }, Legend: { name: null, verticalAlign: "center", horizontalAlign: "right", fontSize: 14, fontFamily: "calibri", fontWeight: "normal", fontColor: "black", fontStyle: "normal", cursor: null, itemmouseover: null, itemmouseout: null, itemmousemove: null, itemclick: null, dockInsidePlotArea: !1, reversed: !1, backgroundColor: r ? "transparent" : null, borderColor: r ? "transparent" : null, borderThickness: 0, cornerRadius: 0, maxWidth: null, maxHeight: null, markerMargin: null, itemMaxWidth: null, itemWidth: null, itemWrap: !0, itemTextFormatter: null, publicProperties: { options: "readWrite", bounds: "readOnly", chart: "readOnly", }, }, ToolTip: { enabled: !0, shared: !1, animationEnabled: !0, content: null, contentFormatter: null, reversed: !1, backgroundColor: r ? "rgba(255,255,255,.9)" : "rgb(255,255,255)", borderColor: null, borderThickness: 2, cornerRadius: 5, fontSize: 14, fontColor: "black", fontFamily: "Calibri, Arial, Georgia, serif;", fontWeight: "normal", fontStyle: "italic", publicProperties: { options: "readWrite", chart: "readOnly" }, }, Axis: { minimum: null, maximum: null, viewportMinimum: null, viewportMaximum: null, interval: null, intervalType: null, reversed: !1, logarithmic: !1, logarithmBase: 10, title: null, titleFontColor: "black", titleFontSize: 20, titleFontFamily: "arial", titleFontWeight: "normal", titleFontStyle: "normal", titleWrap: !0, titleMaxWidth: null, titleBackgroundColor: r ? "transparent" : null, titleBorderColor: r ? "transparent" : null, titleBorderThickness: 0, titleCornerRadius: 0, labelAngle: 0, labelFontFamily: "arial", labelFontColor: "black", labelFontSize: 12, labelFontWeight: "normal", labelFontStyle: "normal", labelAutoFit: !0, labelWrap: !0, labelMaxWidth: null, labelFormatter: null, labelBackgroundColor: r ? "transparent" : null, labelBorderColor: r ? "transparent" : null, labelBorderThickness: 0, labelCornerRadius: 0, labelPlacement: "outside", prefix: "", suffix: "", includeZero: !0, tickLength: 5, tickColor: "black", tickThickness: 1, lineColor: "black", lineThickness: 1, lineDashType: "solid", gridColor: "A0A0A0", gridThickness: 0, gridDashType: "solid", interlacedColor: r ? "transparent" : null, valueFormatString: null, margin: 2, publicProperties: { options: "readWrite", stripLines: "readWrite", scaleBreaks: "readWrite", crosshair: "readWrite", bounds: "readOnly", chart: "readOnly", }, }, StripLine: { value: null, startValue: null, endValue: null, color: "orange", opacity: null, thickness: 2, lineDashType: "solid", label: "", labelPlacement: "inside", labelAlign: "far", labelWrap: !0, labelMaxWidth: null, labelBackgroundColor: null, labelBorderColor: r ? "transparent" : null, labelBorderThickness: 0, labelCornerRadius: 0, labelFontFamily: "arial", labelFontColor: "orange", labelFontSize: 12, labelFontWeight: "normal", labelFontStyle: "normal", labelFormatter: null, showOnTop: !1, publicProperties: { options: "readWrite", axis: "readOnly", bounds: "readOnly", chart: "readOnly", }, }, ScaleBreaks: { autoCalculate: !1, collapsibleThreshold: "25%", maxNumberOfAutoBreaks: 2, spacing: 8, type: "straight", color: "#FFFFFF", fillOpacity: 0.9, lineThickness: 2, lineColor: "#E16E6E", lineDashType: "solid", publicProperties: { options: "readWrite", customBreaks: "readWrite", axis: "readOnly", autoBreaks: "readOnly", bounds: "readOnly", chart: "readOnly", }, }, Break: { startValue: null, endValue: null, spacing: 8, type: "straight", color: "#FFFFFF", fillOpacity: 0.9, lineThickness: 2, lineColor: "#E16E6E", lineDashType: "solid", publicProperties: { options: "readWrite", scaleBreaks: "readOnly", bounds: "readOnly", chart: "readOnly", }, }, Crosshair: { enabled: !1, snapToDataPoint: !1, color: "grey", opacity: null, thickness: 2, lineDashType: "solid", label: "", labelWrap: !0, labelMaxWidth: null, labelBackgroundColor: r ? "grey" : null, labelBorderColor: r ? "grey" : null, labelBorderThickness: 0, labelCornerRadius: 0, labelFontFamily: r ? "Calibri, Optima, Candara, Verdana, Geneva, sans-serif" : "calibri", labelFontSize: 12, labelFontColor: "#fff", labelFontWeight: "normal", labelFontStyle: "normal", labelFormatter: null, valueFormatString: null, publicProperties: { options: "readWrite", axis: "readOnly", bounds: "readOnly", chart: "readOnly", }, }, DataSeries: { name: null, dataPoints: null, label: "", bevelEnabled: !1, highlightEnabled: !0, cursor: "default", indexLabel: "", indexLabelPlacement: "auto", indexLabelOrientation: "horizontal", indexLabelFontColor: "black", indexLabelFontSize: 12, indexLabelFontStyle: "normal", indexLabelFontFamily: "Arial", indexLabelFontWeight: "normal", indexLabelBackgroundColor: null, indexLabelLineColor: "gray", indexLabelLineThickness: 1, indexLabelLineDashType: "solid", indexLabelMaxWidth: null, indexLabelWrap: !0, indexLabelFormatter: null, lineThickness: 2, lineDashType: "solid", connectNullData: !1, nullDataLineDashType: "dash", color: null, lineColor: null, risingColor: "white", fallingColor: "red", fillOpacity: null, startAngle: 0, radius: null, innerRadius: null, neckHeight: null, neckWidth: null, reversed: !1, valueRepresents: null, linkedDataSeriesIndex: null, whiskerThickness: 2, whiskerDashType: "solid", whiskerColor: null, whiskerLength: null, stemThickness: 2, stemColor: null, stemDashType: "solid", upperBoxColor: "white", lowerBoxColor: "white", type: "column", xValueType: "number", axisXType: "primary", axisYType: "primary", axisXIndex: 0, axisYIndex: 0, xValueFormatString: null, yValueFormatString: null, zValueFormatString: null, percentFormatString: null, showInLegend: null, legendMarkerType: null, legendMarkerColor: null, legendText: null, legendMarkerBorderColor: r ? "transparent" : null, legendMarkerBorderThickness: 0, markerType: "circle", markerColor: null, markerSize: null, markerBorderColor: r ? "transparent" : null, markerBorderThickness: 0, mouseover: null, mouseout: null, mousemove: null, click: null, toolTipContent: null, visible: !0, publicProperties: { options: "readWrite", axisX: "readWrite", axisY: "readWrite", chart: "readOnly", }, }, TextBlock: { x: 0, y: 0, width: null, height: null, maxWidth: null, maxHeight: null, padding: 0, angle: 0, text: "", horizontalAlign: "center", fontSize: 12, fontFamily: "calibri", fontWeight: "normal", fontColor: "black", fontStyle: "normal", borderThickness: 0, borderColor: "black", cornerRadius: 0, backgroundColor: null, textBaseline: "top", }, CultureInfo: { decimalSeparator: ".", digitGroupSeparator: ",", zoomText: "Zoom", panText: "Pan", resetText: "Reset", menuText: "More Options", saveJPGText: "Save as JPEG", savePNGText: "Save as PNG", printText: "Print", days: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split( " " ), shortDays: "Sun Mon Tue Wed Thu Fri Sat".split(" "), months: "January February March April May June July August September October November December".split( " " ), shortMonths: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split( " " ), }, }, Ma = { en: {} }, v = r ? "Trebuchet MS, Helvetica, sans-serif" : "Arial", Ha = r ? "Impact, Charcoal, sans-serif" : "Arial", Ba = { colorSet1: "#4F81BC #C0504E #9BBB58 #23BFAA #8064A1 #4AACC5 #F79647 #7F6084 #77A033 #33558B #E59566".split( " " ), colorSet2: "#6D78AD #51CDA0 #DF7970 #4C9CA0 #AE7D99 #C9D45C #5592AD #DF874D #52BCA8 #8E7AA3 #E3CB64 #C77B85 #C39762 #8DD17E #B57952 #FCC26C".split( " " ), colorSet3: "#8CA1BC #36845C #017E82 #8CB9D0 #708C98 #94838D #F08891 #0366A7 #008276 #EE7757 #E5BA3A #F2990B #03557B #782970".split( " " ), }, I, fa, Q, ha, ga; fa = "#333333"; Q = "#000000"; I = "#666666"; ga = ha = "#000000"; var X = 20, E = 14, Xa = { colorSet: "colorSet1", backgroundColor: "#FFFFFF", title: { fontFamily: Ha, fontSize: 32, fontColor: fa, fontWeight: "normal", verticalAlign: "top", margin: 5, }, subtitles: [ { fontFamily: Ha, fontSize: E, fontColor: fa, fontWeight: "normal", verticalAlign: "top", margin: 5, }, ], data: [ { indexLabelFontFamily: v, indexLabelFontSize: E, indexLabelFontColor: fa, indexLabelFontWeight: "normal", indexLabelLineThickness: 1, }, ], axisX: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: fa, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 0, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#EEEEEE", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#BBBBBB", lineThickness: 1, lineDashType: "solid", }, }, ], axisX2: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: fa, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 0, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#EEEEEE", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#BBBBBB", lineThickness: 1, lineDashType: "solid", }, }, ], axisY: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: fa, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 1, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#EEEEEE", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#BBBBBB", lineThickness: 1, lineDashType: "solid", }, }, ], axisY2: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: fa, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 1, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#EEEEEE", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#BBBBBB", lineThickness: 1, lineDashType: "solid", }, }, ], legend: { fontFamily: v, fontSize: 14, fontColor: fa, fontWeight: "bold", verticalAlign: "bottom", horizontalAlign: "center", }, toolTip: { fontFamily: v, fontSize: 14, fontStyle: "normal", cornerRadius: 0, borderThickness: 1, }, }; Q = fa = "#F5F5F5"; I = "#FFFFFF"; ha = "#40BAF1"; ga = "#F5F5F5"; var X = 20, E = 14, cb = { colorSet: "colorSet2", title: { fontFamily: v, fontSize: 33, fontColor: "#3A3A3A", fontWeight: "bold", verticalAlign: "top", margin: 5, }, subtitles: [ { fontFamily: v, fontSize: E, fontColor: "#3A3A3A", fontWeight: "normal", verticalAlign: "top", margin: 5, }, ], data: [ { indexLabelFontFamily: v, indexLabelFontSize: E, indexLabelFontColor: "#666666", indexLabelFontWeight: "normal", indexLabelLineThickness: 1, }, ], axisX: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: "#666666", titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: "#666666", labelFontWeight: "normal", lineThickness: 1, lineColor: "#BBBBBB", tickThickness: 1, tickColor: "#BBBBBB", gridThickness: 1, gridColor: "#BBBBBB", stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FFA500", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FFA500", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#EEEEEE", labelFontWeight: "normal", labelBackgroundColor: "black", color: "black", thickness: 1, lineDashType: "dot", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#BBBBBB", lineThickness: 1, lineDashType: "solid", }, }, ], axisX2: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: "#666666", titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: "#666666", labelFontWeight: "normal", lineThickness: 1, lineColor: "#BBBBBB", tickColor: "#BBBBBB", tickThickness: 1, gridThickness: 1, gridColor: "#BBBBBB", stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FFA500", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FFA500", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#EEEEEE", labelFontWeight: "normal", labelBackgroundColor: "black", color: "black", thickness: 1, lineDashType: "dot", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#BBBBBB", lineThickness: 1, lineDashType: "solid", }, }, ], axisY: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: "#666666", titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: "#666666", labelFontWeight: "normal", lineThickness: 0, lineColor: "#BBBBBB", tickColor: "#BBBBBB", tickThickness: 1, gridThickness: 1, gridColor: "#BBBBBB", stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FFA500", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FFA500", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#EEEEEE", labelFontWeight: "normal", labelBackgroundColor: "black", color: "black", thickness: 1, lineDashType: "dot", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#BBBBBB", lineThickness: 1, lineDashType: "solid", }, }, ], axisY2: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: "#666666", titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: "#666666", labelFontWeight: "normal", lineThickness: 0, lineColor: "#BBBBBB", tickColor: "#BBBBBB", tickThickness: 1, gridThickness: 1, gridColor: "#BBBBBB", stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FFA500", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FFA500", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#EEEEEE", labelFontWeight: "normal", labelBackgroundColor: "black", color: "black", thickness: 1, lineDashType: "dot", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#BBBBBB", lineThickness: 1, lineDashType: "solid", }, }, ], legend: { fontFamily: v, fontSize: 14, fontColor: "#3A3A3A", fontWeight: "bold", verticalAlign: "bottom", horizontalAlign: "center", }, toolTip: { fontFamily: v, fontSize: 14, fontStyle: "normal", cornerRadius: 0, borderThickness: 1, }, }; Q = fa = "#F5F5F5"; I = "#FFFFFF"; ha = "#40BAF1"; ga = "#F5F5F5"; X = 20; E = 14; Ha = { colorSet: "colorSet12", backgroundColor: "#2A2A2A", title: { fontFamily: Ha, fontSize: 32, fontColor: fa, fontWeight: "normal", verticalAlign: "top", margin: 5, }, subtitles: [ { fontFamily: Ha, fontSize: E, fontColor: fa, fontWeight: "normal", verticalAlign: "top", margin: 5, }, ], toolbar: { backgroundColor: "#666666", backgroundColorOnHover: "#FF7372", borderColor: "#FF7372", borderThickness: 1, fontColor: "#F5F5F5", fontColorOnHover: "#F5F5F5", }, data: [ { indexLabelFontFamily: v, indexLabelFontSize: E, indexLabelFontColor: Q, indexLabelFontWeight: "normal", indexLabelLineThickness: 1, }, ], axisX: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: Q, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 0, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#000000", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#777777", lineThickness: 1, lineDashType: "solid", color: "#111111", }, }, ], axisX2: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: Q, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 0, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#000000", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#777777", lineThickness: 1, lineDashType: "solid", color: "#111111", }, }, ], axisY: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: Q, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 1, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#000000", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#777777", lineThickness: 1, lineDashType: "solid", color: "#111111", }, }, ], axisY2: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: Q, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 1, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#000000", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#777777", lineThickness: 1, lineDashType: "solid", color: "#111111", }, }, ], legend: { fontFamily: v, fontSize: 14, fontColor: fa, fontWeight: "bold", verticalAlign: "bottom", horizontalAlign: "center", }, toolTip: { fontFamily: v, fontSize: 14, fontStyle: "normal", cornerRadius: 0, borderThickness: 1, fontColor: Q, backgroundColor: "rgba(0, 0, 0, .7)", }, }; I = "#FFFFFF"; Q = fa = "#FAFAFA"; ha = "#40BAF1"; ga = "#F5F5F5"; var X = 20, E = 14, ya = { light1: Xa, light2: cb, dark1: Ha, dark2: { colorSet: "colorSet2", backgroundColor: "#32373A", title: { fontFamily: v, fontSize: 32, fontColor: fa, fontWeight: "normal", verticalAlign: "top", margin: 5, }, subtitles: [ { fontFamily: v, fontSize: E, fontColor: fa, fontWeight: "normal", verticalAlign: "top", margin: 5, }, ], toolbar: { backgroundColor: "#666666", backgroundColorOnHover: "#FF7372", borderColor: "#FF7372", borderThickness: 1, fontColor: "#F5F5F5", fontColorOnHover: "#F5F5F5", }, data: [ { indexLabelFontFamily: v, indexLabelFontSize: E, indexLabelFontColor: Q, indexLabelFontWeight: "normal", indexLabelLineThickness: 1, }, ], axisX: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: Q, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 0, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#000000", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#777777", lineThickness: 1, lineDashType: "solid", color: "#111111", }, }, ], axisX2: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: Q, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 1, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 0, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#000000", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#777777", lineThickness: 1, lineDashType: "solid", color: "#111111", }, }, ], axisY: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: Q, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 0, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 1, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#000000", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#777777", lineThickness: 1, lineDashType: "solid", color: "#111111", }, }, ], axisY2: [ { titleFontFamily: v, titleFontSize: X, titleFontColor: Q, titleFontWeight: "normal", labelFontFamily: v, labelFontSize: E, labelFontColor: Q, labelFontWeight: "normal", lineThickness: 0, lineColor: I, tickThickness: 1, tickColor: I, gridThickness: 1, gridColor: I, stripLines: [ { labelFontFamily: v, labelFontSize: E, labelFontColor: "#FF7300", labelFontWeight: "normal", labelBackgroundColor: null, color: "#FF7300", thickness: 1, }, ], crosshair: { labelFontFamily: v, labelFontSize: E, labelFontColor: "#000000", labelFontWeight: "normal", labelBackgroundColor: ga, color: ha, thickness: 1, lineDashType: "dash", }, scaleBreaks: { type: "zigzag", spacing: "2%", lineColor: "#777777", lineThickness: 1, lineDashType: "solid", color: "#111111", }, }, ], legend: { fontFamily: v, fontSize: 14, fontColor: fa, fontWeight: "bold", verticalAlign: "bottom", horizontalAlign: "center", }, toolTip: { fontFamily: v, fontSize: 14, fontStyle: "normal", cornerRadius: 0, borderThickness: 1, fontColor: Q, backgroundColor: "rgba(0, 0, 0, .7)", }, }, theme1: Xa, theme2: cb, theme3: Xa, }, S = { numberDuration: 1, yearDuration: 314496e5, monthDuration: 2592e6, weekDuration: 6048e5, dayDuration: 864e5, hourDuration: 36e5, minuteDuration: 6e4, secondDuration: 1e3, millisecondDuration: 1, dayOfWeekFromInt: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), }; (function () { U.fSDec = function (k) { for (var p = "", r = 0; r < k.length; r++) p += String.fromCharCode( Math.ceil(k.length / 57 / 5) ^ k.charCodeAt(r) ); return p; }; U.obj = { trVs: "Ush`m!Wdsrhno", fntStr: "qy!B`mhcsh-!Mtbhe`!Fs`oed-!Mtbhe`!R`or!Tohbned-!@sh`m-!r`or,rdshg", txtBl: "udyuC`rdmhod", fnt: "gnou", fSy: "ghmmRuxmd", fTx: "ghmmUdyu", grClr: "fsdx", cntx: "buy", tp: "unq", }; delete ra[U.fSDec("Bi`su")][U.fSDec("bsdehuIsdg")]; U.pro = { sCH: ra[U.fSDec("Bi`su")][U.fSDec("bsdehuIsdg")] }; U._fTWm = function (k) { if ("undefined" === typeof U.pro.sCH && !db) try { var p = k[U.fSDec(U.obj.cntx)]; p[U.fSDec(U.obj.txtBl)] = U.fSDec(U.obj.tp); p[U.fSDec(U.obj.fnt)] = 11 + U.fSDec(U.obj.fntStr); p[U.fSDec(U.obj.fSy)] = U.fSDec(U.obj.grClr); p[U.fSDec(U.obj.fTx)](U.fSDec(U.obj.trVs), 2, k.height - 11 - 2); } catch (r) {} }; })(); var $a = {}, xa = null, kb = function () { this.ctx.clearRect(0, 0, this.width, this.height); this.backgroundColor && ((this.ctx.fillStyle = this.backgroundColor), this.ctx.fillRect(0, 0, this.width, this.height)); }, lb = function (k, p, r) { p = Math.min(this.width, this.height); return Math.max( "theme4" === this.theme ? 0 : 300 <= p ? 12 : 10, Math.round(p * (k / 400)) ); }, Ca = (function () { var k = /D{1,4}|M{1,4}|Y{1,4}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|f{1,3}|t{1,2}|T{1,2}|K|z{1,3}|"[^"]*"|'[^']*'/g, p = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split( " " ), r = "Sun Mon Tue Wed Thu Fri Sat".split(" "), u = "January February March April May June July August September October November December".split( " " ), v = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "), H = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, F = /[^-+\dA-Z]/g; return function (z, E, L) { var R = L ? L.days : p, I = L ? L.months : u, N = L ? L.shortDays : r, O = L ? L.shortMonths : v; L = ""; var S = !1; z = z && z.getTime ? z : z ? new Date(z) : new Date(); if (isNaN(z)) throw SyntaxError("invalid date"); "UTC:" === E.slice(0, 4) && ((E = E.slice(4)), (S = !0)); L = S ? "getUTC" : "get"; var U = z[L + "Date"](), V = z[L + "Day"](), M = z[L + "Month"](), Q = z[L + "FullYear"](), a = z[L + "Hours"](), d = z[L + "Minutes"](), b = z[L + "Seconds"](), c = z[L + "Milliseconds"](), e = S ? 0 : z.getTimezoneOffset(); return (L = E.replace(k, function (g) { switch (g) { case "D": return U; case "DD": return $(U, 2); case "DDD": return N[V]; case "DDDD": return R[V]; case "M": return M + 1; case "MM": return $(M + 1, 2); case "MMM": return O[M]; case "MMMM": return I[M]; case "Y": return parseInt(String(Q).slice(-2)); case "YY": return $(String(Q).slice(-2), 2); case "YYY": return $(String(Q).slice(-3), 3); case "YYYY": return $(Q, 4); case "h": return a % 12 || 12; case "hh": return $(a % 12 || 12, 2); case "H": return a; case "HH": return $(a, 2); case "m": return d; case "mm": return $(d, 2); case "s": return b; case "ss": return $(b, 2); case "f": return String(c).slice(0, 1); case "ff": return $(String(c).slice(0, 2), 2); case "fff": return $(String(c).slice(0, 3), 3); case "t": return 12 > a ? "a" : "p"; case "tt": return 12 > a ? "am" : "pm"; case "T": return 12 > a ? "A" : "P"; case "TT": return 12 > a ? "AM" : "PM"; case "K": return S ? "UTC" : (String(z).match(H) || [""]).pop().replace(F, ""); case "z": return (0 < e ? "-" : "+") + Math.floor(Math.abs(e) / 60); case "zz": return (0 < e ? "-" : "+") + $(Math.floor(Math.abs(e) / 60), 2); case "zzz": return ( (0 < e ? "-" : "+") + $(Math.floor(Math.abs(e) / 60), 2) + $(Math.abs(e) % 60, 2) ); default: return g.slice(1, g.length - 1); } })); }; })(), ba = function (k, p, r) { if (null === k) return ""; if (!isFinite(k)) return k; k = Number(k); var u = 0 > k ? !0 : !1; u && (k *= -1); var v = r ? r.decimalSeparator : ".", H = r ? r.digitGroupSeparator : ",", F = ""; p = String(p); var F = 1, z = (r = ""), E = -1, L = [], R = [], I = 0, N = 0, S = 0, O = !1, U = 0, z = p.match(/"[^"]*"|'[^']*'|[eE][+-]*[0]+|[,]+[.]|\u2030|./g); p = null; for (var Q = 0; z && Q < z.length; Q++) if (((p = z[Q]), "." === p && 0 > E)) E = Q; else { if ("%" === p) F *= 100; else if ("\u2030" === p) { F *= 1e3; continue; } else if ("," === p[0] && "." === p[p.length - 1]) { F /= Math.pow(1e3, p.length - 1); E = Q + p.length - 1; continue; } else ("E" !== p[0] && "e" !== p[0]) || "0" !== p[p.length - 1] || (O = !0); 0 > E ? (L.push(p), "#" === p || "0" === p ? I++ : "," === p && S++) : (R.push(p), ("#" !== p && "0" !== p) || N++); } O && ((p = Math.floor(k)), (z = -Math.floor(Math.log(k) / Math.LN10 + 1)), (U = 0 === k ? 0 : 0 === p ? -(I + z) : String(p).length - I), (F /= Math.pow(10, U))); 0 > E && (E = Q); F = (k * F).toFixed(N); p = F.split("."); F = (p[0] + "").split(""); k = (p[1] + "").split(""); F && "0" === F[0] && F.shift(); for (O = z = Q = N = E = 0; 0 < L.length; ) if (((p = L.pop()), "#" === p || "0" === p)) if ((E++, E === I)) { var M = F, F = []; if ("0" === p) for (p = I - N - (M ? M.length : 0); 0 < p; ) M.unshift("0"), p--; for (; 0 < M.length; ) (r = M.pop() + r), O++, 0 === O % z && Q === S && 0 < M.length && (r = H + r); } else 0 < F.length ? ((r = F.pop() + r), N++, O++) : "0" === p && ((r = "0" + r), N++, O++), 0 === O % z && Q === S && 0 < F.length && (r = H + r); else ("E" !== p[0] && "e" !== p[0]) || "0" !== p[p.length - 1] || !/[eE][+-]*[0]+/.test(p) ? "," === p ? (Q++, (z = O), (O = 0), 0 < F.length && (r = H + r)) : (r = 1 < p.length && (('"' === p[0] && '"' === p[p.length - 1]) || ("'" === p[0] && "'" === p[p.length - 1])) ? p.slice(1, p.length - 1) + r : p + r) : ((p = 0 > U ? p.replace("+", "").replace("-", "") : p.replace("-", "")), (r += p.replace(/[0]+/, function (k) { return $(U, k.length); }))); H = ""; for (L = !1; 0 < R.length; ) (p = R.shift()), "#" === p || "0" === p ? 0 < k.length && 0 !== Number(k.join("")) ? ((H += k.shift()), (L = !0)) : "0" === p && ((H += "0"), (L = !0)) : 1 < p.length && (('"' === p[0] && '"' === p[p.length - 1]) || ("'" === p[0] && "'" === p[p.length - 1])) ? (H += p.slice(1, p.length - 1)) : ("E" !== p[0] && "e" !== p[0]) || "0" !== p[p.length - 1] || !/[eE][+-]*[0]+/.test(p) ? (H += p) : ((p = 0 > U ? p.replace("+", "").replace("-", "") : p.replace("-", "")), (H += p.replace(/[0]+/, function (k) { return $(U, k.length); }))); r += (L ? v : "") + H; return u ? "-" + r : r; }, Ra = function (k) { var p = 0, r = 0; k = k || window.event; k.offsetX || 0 === k.offsetX ? ((p = k.offsetX), (r = k.offsetY)) : k.layerX || 0 == k.layerX ? ((p = k.layerX), (r = k.layerY)) : ((p = k.pageX - k.target.offsetLeft), (r = k.pageY - k.target.offsetTop)); return { x: p, y: r }; }, bb = !0, Ua = window.devicePixelRatio || 1, Pa = 1, W = bb ? Ua / Pa : 1, ea = function (k, p, r, u, v, H, F, z, E, L, R, N, O) { "undefined" === typeof O && (O = 1); F = F || 0; z = z || "black"; var I = 15 < u - p && 15 < v - r ? 8 : 0.35 * Math.min(u - p, v - r); k.beginPath(); k.moveTo(p, r); k.save(); k.fillStyle = H; k.globalAlpha = O; k.fillRect(p, r, u - p, v - r); k.globalAlpha = 1; 0 < F && ((O = 0 === F % 2 ? 0 : 0.5), k.beginPath(), (k.lineWidth = F), (k.strokeStyle = z), k.moveTo(p, r), k.rect(p - O, r - O, u - p + 2 * O, v - r + 2 * O), k.stroke()); k.restore(); !0 === E && (k.save(), k.beginPath(), k.moveTo(p, r), k.lineTo(p + I, r + I), k.lineTo(u - I, r + I), k.lineTo(u, r), k.closePath(), (F = k.createLinearGradient((u + p) / 2, r + I, (u + p) / 2, r)), F.addColorStop(0, H), F.addColorStop(1, "rgba(255, 255, 255, .4)"), (k.fillStyle = F), k.fill(), k.restore()); !0 === L && (k.save(), k.beginPath(), k.moveTo(p, v), k.lineTo(p + I, v - I), k.lineTo(u - I, v - I), k.lineTo(u, v), k.closePath(), (F = k.createLinearGradient((u + p) / 2, v - I, (u + p) / 2, v)), F.addColorStop(0, H), F.addColorStop(1, "rgba(255, 255, 255, .4)"), (k.fillStyle = F), k.fill(), k.restore()); !0 === R && (k.save(), k.beginPath(), k.moveTo(p, r), k.lineTo(p + I, r + I), k.lineTo(p + I, v - I), k.lineTo(p, v), k.closePath(), (F = k.createLinearGradient(p + I, (v + r) / 2, p, (v + r) / 2)), F.addColorStop(0, H), F.addColorStop(1, "rgba(255, 255, 255, 0.1)"), (k.fillStyle = F), k.fill(), k.restore()); !0 === N && (k.save(), k.beginPath(), k.moveTo(u, r), k.lineTo(u - I, r + I), k.lineTo(u - I, v - I), k.lineTo(u, v), (F = k.createLinearGradient(u - I, (v + r) / 2, u, (v + r) / 2)), F.addColorStop(0, H), F.addColorStop(1, "rgba(255, 255, 255, 0.1)"), (k.fillStyle = F), F.addColorStop(0, H), F.addColorStop(1, "rgba(255, 255, 255, 0.1)"), (k.fillStyle = F), k.fill(), k.closePath(), k.restore()); }, ja = function (k) { for (var p = "", r = 0; r < k.length; r++) p += String.fromCharCode( Math.ceil(k.length / 57 / 5) ^ k.charCodeAt(r) ); return p; }, db = window && window[ja("mnb`uhno")] && window[ja("mnb`uhno")].href && window[ja("mnb`uhno")].href.indexOf && (-1 !== window[ja("mnb`uhno")].href.indexOf(ja("b`ow`rkr/bnl")) || -1 !== window[ja("mnb`uhno")].href.indexOf(ja("gdonqhy/bnl")) || -1 !== window[ja("mnb`uhno")].href.indexOf(ja("gheemd"))), ib = db && -1 === window[ja("mnb`uhno")].href.indexOf(ja("gheemd")), jb = { reset: { image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPjSURBVFhHxVdJaFNRFP1J/jwkP5MxsbaC1WJEglSxOFAXIsFpVRE3ggi1K90obioRRBA33XXnQnciirhQcMCdorgQxBkXWlREkFKsWkv5npvckp/XnzRpKh64kLw733fffe9L/wrL0+mVUdO8uTSZ3MBL/we2qg4rkuSpodCELstXE46ziVkLQ6FQcGOmeSSq6wd4aV50d3drWjj8kQKZJTUc9kxFGenv79dZrDksTSTWWJp2QYtEPiErysyzdX0LsxsCQR8keX8gs6RHIk8ysdgKFg2G53mhuOPsshTlBjKaFo1g7SqLNoShKLdFXT8huQ/paLSbxatYnc2mHMM4hr18Vi8TIvCmXF3vYrW6cF23gGTOk0M1wA4RKvOmq6vLZRVJipvmSWT6tZ6CSEYkco5V50VPT4+D7RwOqi6RiSZm0fJ+vggSqkeoypdsNmuyelNwbXsbgvkWYMtzDWNvWaijoyOBqE+hVK8abcssUeXQ/YfKyi0gFYv1Ipgfoj34fYGTJLOYJA0ODirok32GLN8XhUWCwSes1hIwBg6LydJ/tEeRRapAdUp+wSAiZchtZZWWgAZ+JNpD8peYXQVK9UwUxNpzOK8pq97kURZhYTCKBwPD7h2zK+js7Myi7D8Fod+0TkMI8+EMAngLGc/WtBFWawkFHFnoj/t9KLgGmF0B3QfkxC+EarxkdhnFYlFLY06USqUwL7UMjICHfh/wOc2sCqhpxGbCkLvL7EUDbF73+6DkmVWB6zi7xUDQSLeYvWjAILvm9zEnkJhlbRcDQZcv6Kg2AipyT/Axw6wKlqVSqxDdjF8Izfod13qURdrG/nxehY+xGh+h0CSzKygGvSNQIcc097BI24jb9hax6kj2E7OrMFX1il+ICEf2NrPbhiXLl+fYl+U7zK4iYdsDcyLGf+ofFlkwcN+s10KhmpuYhhtm0hCLVIFL0MDsqNlDIqy9x2CLs1jL6OvrI7vPRbtohXG6eFmsFnHDGAp6n9AgyuVySRZrGvROxRgIfLXhzjrNYnNBUxNX/dMgRWT1mt4XLDovaApD53E9W3ilNX5M55LJHpRtIsgAvciR4WWcgK2Dvb1YqgXevmF8z2zEBTcKG39EfSKsT9EbhVUaI2FZO+oZIqImxol6j66/hcAu4sSN4vc1ZPoKeoE6RGhYL2YYA+ymOSSi0Z0wWntbtkGUWCvfSDXIxONraZ/FY90KUfNTpfC5spnNLgxoYNnR9RO4F8ofXEHOgogCQE99w+fF2Xw+b7O59rEOsyRqGEfpVoaDMQQ1CZrG46bcM6AZ0C/wPqNfHliqejyTySxh9TqQpL+xmbIlkB9SlAAAAABJRU5ErkJggg==", }, pan: { image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAICSURBVEhLxZbPahNRGMUn/5MpuAiBEAIufQGfzr5E40YptBXajYzudCEuGqS+gGlrFwquDGRTutBdYfydzJ3LzeQmJGZue+Dw/Z17Mnfmu5Pof9Hr9Z61Wq0bWZMKj263O6xWq99wU9lOpzPMKgEhEcRucNOcioOK+0RzBhNvt9tPV4nmVF19+OWhVqt9xXgFXZq+8lCv119UKpUJ7iX2FmvFTKz8RH34YdBsNk8wVtjE4fGYwm8wrrDi3WBG5oKXZGRSS9hGuNFojLTe2lFz5xThWZIktayyiE2FdT3rzXBXz7krKiL8c17wAKFDjCus2AvW+YGZ9y2JF0VFRuMPfI//rsCE/C+s26s4gQu9ul7r4NteKx7H8XOC724xNNGbaNu++IrBqbOV7Tj3FgMRvc/YKOr3+3sE47wgEt/Bl/gaK5cHbNU11vYSXylfpK7XOvjuumPp4Wcoipu30Qsez2uMXYz4lfI+mOmwothY+SLiXJy7mKVpWs3Si0CoOMfeI9Od43Wic+jO+ZVv+crsm9QSNhUW9LXSeoPBYLXopthGuFQgdIxxhY+UDwlt1x5CZ1hX+NTUdt/OIvjKaDSmuOJfaIVNPKX+W18j/PLA2/kR44p5Sd8HbHngT/yTfNRWUXX14ZcL3wmX0+TLf8YO7CGT8yFE5zB3/gney25/OETRP9CtPDFe5jShAAAAAElFTkSuQmCC", }, zoom: { image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALWSURBVEhLvZZLaBNRFIabyftBIgEfqCCBoCC6MYqiXYiIj4U76U4X7sUHbhQhUBfixhZEUBDB16YuFERaUaQLK7ooCOJj4UKtYEFU0EptShO/A9Ph3js3k8lo/eHnP7n3nP/M3LlzMz1hkUwmNziOcyKRSFyFt+LxeD/c2Wq1Ym7Kv0M2m11Os1OxWGycn1OwZXCGuXfwIhezkd9/jRgNT2L4ldhs1pbkX5OLJe4euVxuGQaPCa3mnUjtJx7BDuKusJTCV6jVVGHTMuYRjxma7yIOhTgFY6jNaAKew2xPKpVay9ganmkvj+M448/MfJdT5K5Gg4HJacRngPFgqVRaRNwW1B4i7yehWfsEDdz1K+A01AoxPIqGAiuwGfkOTY8+1A6u7AyiFTB2Hu0KPIrdiOnzHLWDybeImvy+Wq2mZa5bUHsD0Zpz+KxHdWQymV6kAb1ElqeORgJLvgnRdj1+R1AfzkIvSUjxVjQSarVakrueIPT8+H1F5jSUy+WXiJrUYBVWyVxU4PEU8TzhfaijUqnMIWrjaY492eWRwdKOIqrnIxnXwLLeRLwk2GQzrEMjg0avEbXxkIxr4OoOImpj2QwyFgms1koa/SZUG8s+0iGnEhNfCNXEhzIXBVz0McTzEvJ+70P9oNFtxEzei3aFYrFYxmuSUPWSv9Yi9IMm2xE1We56Mp1OV4nDwqFmBDV9gk9AEh4gZtFHNt8W4kAUCoXF5MorY9Z/kDni9nDv7hc0i2fhgLvTtX8a99PoMPPagTFPxofRzmDJ9yM+AyEmTfgGysYbQcfhDzPPJDmX0c7gDg4gs9BqFIWhm/Nct5H8gtBq1I7UfIbtvmIuoaGQcp+fdpbbSM43eEH5wrwLbXmhm/fU63VHXjcuok7hEByFY/AeHGC8L5/PL3HT5xGH1uYwfPOICGo+CBcU0vwO1BqzUqILDl/z/9VYIMfpddiAc47jDP8BsUpb13wOLRwAAAAASUVORK5CYII=", }, menu: { image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAeCAYAAABE4bxTAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADoSURBVFhH7dc9CsJAFATgRxIIBCwCqZKATX5sbawsY2MvWOtF9AB6AU8gguAJbD2AnZ2VXQT/Ko2TYGCL2OYtYQc+BuYA+1hCtnCVwMm27SGaXpDJIAiCvCkVR05hGOZNN3HkFMdx3nQRR06+76/R1IcFLJlNQEWlmWlBTwJtKLKHynehZqnjOGM0PYWRVXk61C37p7xlZ3Hk5HneCk1dmMH811xGoKLSzDiQwIBZB4ocoPJdqNkDt2yKlueWRVGUtzy3rPwo3sWRU3nLjuLI6OO67oZM00wMw3hrmpZx0XU9syxrR0T0BeMpb9dneSR2AAAAAElFTkSuQmCC", }, handle: { image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAAXNSR0IArs4c6QAAAAZiS0dEANAAzwDP4Z7KegAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sHGw0cMqdt1UwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAaElEQVQoz+3SsRFAQBCF4Z9WJM8KCDVwownl6YXsTmCUsyKGkZzcl7zkz3YLkypgAnreFmDEpHkIwVOMfpdi9CEEN2nGpFdwD03yEqDtOgCaun7sqSTDH32I1pQA2Pb9sZecAxc5r3IAb21d6878xsAAAAAASUVORK5CYII=", }, }; V.prototype.setOptions = function (k, p) { if (ra[this._defaultsKey]) { var r = ra[this._defaultsKey], u; for (u in r) "publicProperties" !== u && r.hasOwnProperty(u) && (this[u] = k && u in k ? k[u] : p && u in p ? p[u] : r[u]); } else Ja && window.console && console.log("defaults not set"); }; V.prototype.get = function (k) { var p = ra[this._defaultsKey]; if ("options" === k) return this.options && this.options._isPlaceholder ? null : this.options; if ( p.hasOwnProperty(k) || (p.publicProperties && p.publicProperties.hasOwnProperty(k)) ) return this[k]; window.console && window.console.log( 'Property "' + k + "\" doesn't exist. Please check for typo." ); }; V.prototype.set = function (k, p, r) { r = "undefined" === typeof r ? !0 : r; var u = ra[this._defaultsKey]; if ("options" === k) this.createUserOptions(p); else if ( u.hasOwnProperty(k) || (u.publicProperties && u.publicProperties.hasOwnProperty(k) && "readWrite" === u.publicProperties[k]) ) this.options._isPlaceholder && this.createUserOptions(), (this.options[k] = p); else { window.console && (u.publicProperties && u.publicProperties.hasOwnProperty(k) && "readOnly" === u.publicProperties[k] ? window.console.log('Property "' + k + '" is read-only.') : window.console.log( 'Property "' + k + "\" doesn't exist. Please check for typo." )); return; } r && (this.stockChart || this.chart || this).render(); }; V.prototype.addTo = function (k, p, r, u) { u = "undefined" === typeof u ? !0 : u; var v = ra[this._defaultsKey]; v.hasOwnProperty(k) || (v.publicProperties && v.publicProperties.hasOwnProperty(k) && "readWrite" === v.publicProperties[k]) ? (this.options._isPlaceholder && this.createUserOptions(), "undefined" === typeof this.options[k] && (this.options[k] = []), (k = this.options[k]), (r = "undefined" === typeof r || null === r ? k.length : r), k.splice(r, 0, p), u && (this.chart || this).render()) : window.console && (v.publicProperties && v.publicProperties.hasOwnProperty(k) && "readOnly" === v.publicProperties[k] ? window.console.log('Property "' + k + '" is read-only.') : window.console.log( 'Property "' + k + "\" doesn't exist. Please check for typo." )); }; V.prototype.createUserOptions = function (k) { if ("undefined" !== typeof k || this.options._isPlaceholder) if ( (this.parent.options._isPlaceholder && this.parent.createUserOptions(), this.isOptionsInArray) ) { this.parent.options[this.optionsName] || (this.parent.options[this.optionsName] = []); var p = this.parent.options[this.optionsName], r = p.length; this.options._isPlaceholder || (Fa(p), (r = p.indexOf(this.options))); this.options = "undefined" === typeof k ? {} : k; p[r] = this.options; } else (this.options = "undefined" === typeof k ? {} : k), (k = this.parent.options), this.optionsName ? (p = this.optionsName) : (p = this._defaultsKey) && 0 !== p.length ? ((r = p.charAt(0).toLowerCase()), 1 < p.length && (r = r.concat(p.slice(1))), (p = r)) : (p = void 0), (k[p] = this.options); }; V.prototype.remove = function (k) { k = "undefined" === typeof k ? !0 : k; if (this.isOptionsInArray) { var p = this.parent.options[this.optionsName]; Fa(p); var r = p.indexOf(this.options); 0 <= r && p.splice(r, 1); } else delete this.parent.options[this.optionsName]; k && (this.chart || this).render(); }; V.prototype.updateOption = function (k) { !ra[this._defaultsKey] && Ja && window.console && console.log("defaults not set"); var p = ra[this._defaultsKey], r = {}, v = this[k], E = this._themeOptionsKey, H = this._index; this.theme && u(E) && u(H) ? (r = u(ya[this.theme]) ? ya.light1 : ya[this.theme]) : this.parent && this.parent.themeOptions && this.parent.themeOptions[E] && (null === H ? (r = this.parent.themeOptions[E]) : 0 < this.parent.themeOptions[E].length && ((r = Math.min(this.parent.themeOptions[E].length - 1, H)), (r = this.parent.themeOptions[E][r]))); this.themeOptions = r; k in p && (v = k in this.options ? this.options[k] : r && k in r ? r[k] : p[k]); if (v === this[k]) return !1; this[k] = v; return !0; }; V.prototype.trackChanges = function (k) { if (!this.sessionVariables) throw "Session Variable Store not set"; this.sessionVariables[k] = this.options[k]; }; V.prototype.isBeingTracked = function (k) { this.options._oldOptions || (this.options._oldOptions = {}); return this.options._oldOptions[k] ? !0 : !1; }; V.prototype.hasOptionChanged = function (k) { if (!this.sessionVariables) throw "Session Variable Store not set"; return this.sessionVariables[k] !== this.options[k]; }; V.prototype.addEventListener = function (k, p, r) { k && p && ((this._eventListeners[k] = this._eventListeners[k] || []), this._eventListeners[k].push({ context: r || this, eventHandler: p })); }; V.prototype.removeEventListener = function (k, p) { if (k && p && this._eventListeners[k]) for (var r = this._eventListeners[k], u = 0; u < r.length; u++) if (r[u].eventHandler === p) { r[u].splice(u, 1); break; } }; V.prototype.removeAllEventListeners = function () { this._eventListeners = []; }; V.prototype.dispatchEvent = function (k, p, r) { if (k && this._eventListeners[k]) { p = p || {}; for (var u = this._eventListeners[k], v = 0; v < u.length; v++) u[v].eventHandler.call(u[v].context, p); } "function" === typeof this[k] && this[k].call(r || this.chart, p); }; Ga.prototype.registerSpace = function (k, p) { "top" === k ? (this._topOccupied += p.height) : "bottom" === k ? (this._bottomOccupied += p.height) : "left" === k ? (this._leftOccupied += p.width) : "right" === k && (this._rightOccupied += p.width); }; Ga.prototype.unRegisterSpace = function (k, p) { "top" === k ? (this._topOccupied -= p.height) : "bottom" === k ? (this._bottomOccupied -= p.height) : "left" === k ? (this._leftOccupied -= p.width) : "right" === k && (this._rightOccupied -= p.width); }; Ga.prototype.getFreeSpace = function () { return { x1: this._x1 + this._leftOccupied, y1: this._y1 + this._topOccupied, x2: this._x2 - this._rightOccupied, y2: this._y2 - this._bottomOccupied, width: this._x2 - this._x1 - this._rightOccupied - this._leftOccupied, height: this._y2 - this._y1 - this._bottomOccupied - this._topOccupied, }; }; Ga.prototype.reset = function () { this._rightOccupied = this._leftOccupied = this._bottomOccupied = this._topOccupied = this._padding; }; qa(ka, V); ka.prototype._initialize = function () { u(this.padding) || "object" !== typeof this.padding ? (this.topPadding = this.rightPadding = this.bottomPadding = this.leftPadding = Number(this.padding) | 0) : ((this.topPadding = u(this.padding.top) ? 0 : Number(this.padding.top) | 0), (this.rightPadding = u(this.padding.right) ? 0 : Number(this.padding.right) | 0), (this.bottomPadding = u(this.padding.bottom) ? 0 : Number(this.padding.bottom) | 0), (this.leftPadding = u(this.padding.left) ? 0 : Number(this.padding.left) | 0)); }; ka.prototype.render = function (k) { if (0 !== this.fontSize) { k && this.ctx.save(); var p = this.ctx.font; this.ctx.textBaseline = this.textBaseline; var r = 0; this._isDirty && this.measureText(this.ctx); this.ctx.translate(this.x, this.y + r); "middle" === this.textBaseline && (r = -this._lineHeight / 2); this.ctx.font = this._getFontString(); this.ctx.rotate((Math.PI / 180) * this.angle); var u = 0, v = this.topPadding, H = null; this.ctx.roundRect || Ea(this.ctx); ((0 < this.borderThickness && this.borderColor) || this.backgroundColor) && this.ctx.roundRect( 0, r, this.width, this.height, this.cornerRadius, this.borderThickness, this.backgroundColor, this.borderColor ); this.ctx.fillStyle = this.fontColor; for (r = 0; r < this._wrappedText.lines.length; r++) (H = this._wrappedText.lines[r]), "right" === this.horizontalAlign ? (u = (this.width - (this.leftPadding + this.rightPadding)) / 2 - H.width / 2 + this.leftPadding) : "left" === this.horizontalAlign ? (u = this.leftPadding) : "center" === this.horizontalAlign && (u = (this.width - (this.leftPadding + this.rightPadding)) / 2 - H.width / 2 + this.leftPadding), this.ctx.fillText(H.text, u, v), (v += H.height); this.ctx.font = p; k && this.ctx.restore(); } }; ka.prototype.setText = function (k) { this.text = k; this._isDirty = !0; this._wrappedText = null; }; ka.prototype.measureText = function () { this._lineHeight = Za(this.fontFamily, this.fontSize, this.fontWeight); if (null === this.maxWidth) throw "Please set maxWidth and height for TextBlock"; this._wrapText(this.ctx); this._isDirty = !1; return { width: this.width, height: this.height }; }; ka.prototype._getLineWithWidth = function (k, p, r) { k = String(k); if (!k) return { text: "", width: 0 }; var u = (r = 0), v = k.length - 1, H = Infinity; for (this.ctx.font = this._getFontString(); u <= v; ) { var H = Math.floor((u + v) / 2), F = k.substr(0, H + 1); r = this.ctx.measureText(F).width; if (r < p) u = H + 1; else if (r > p) v = H - 1; else break; } r > p && 1 < F.length && ((F = F.substr(0, F.length - 1)), (r = this.ctx.measureText(F).width)); p = !0; if (F.length === k.length || " " === k[F.length]) p = !1; p && ((k = F.split(" ")), 1 < k.length && k.pop(), (F = k.join(" ")), (r = this.ctx.measureText(F).width)); return { text: F, width: r }; }; ka.prototype._wrapText = function () { var k = new String(Ia(String(this.text))), p = [], r = this.ctx.font, u = 0, v = 0; this.ctx.font = this._getFontString(); if (0 === this.frontSize) v = u = 0; else for (; 0 < k.length; ) { var H = this.maxHeight - (this.topPadding + this.bottomPadding), F = this._getLineWithWidth( k, this.maxWidth - (this.leftPadding + this.rightPadding), !1 ); F.height = this._lineHeight; p.push(F); var z = v, v = Math.max(v, F.width), u = u + F.height, k = Ia(k.slice(F.text.length, k.length)); H && u > H && ((F = p.pop()), (u -= F.height), (v = z)); } this._wrappedText = { lines: p, width: v, height: u }; this.width = v + (this.leftPadding + this.rightPadding); this.height = u + (this.topPadding + this.bottomPadding); this.ctx.font = r; }; ka.prototype._getFontString = function () { var k; k = "" + (this.fontStyle ? this.fontStyle + " " : ""); k += this.fontWeight ? this.fontWeight + " " : ""; k += this.fontSize ? this.fontSize + "px " : ""; var p = this.fontFamily ? this.fontFamily + "" : ""; !r && p && ((p = p.split(",")[0]), "'" !== p[0] && '"' !== p[0] && (p = "'" + p + "'")); return (k += p); }; qa(Va, V); qa(Aa, V); Aa.prototype.setLayout = function () { if (this.text) { var k = this.dockInsidePlotArea ? this.chart.plotArea : this.chart, p = k.layoutManager.getFreeSpace(), r = p.x1, v = p.y1, E = 0, H = 0, F = this.chart._menuButton && this.chart.exportEnabled && "top" === this.verticalAlign ? 22 : 0, z, I; "top" === this.verticalAlign || "bottom" === this.verticalAlign ? (null === this.maxWidth && (this.maxWidth = p.width - 4 - F * ("center" === this.horizontalAlign ? 2 : 1)), (H = 0.5 * p.height - this.margin - 2), (E = 0)) : "center" === this.verticalAlign && ("left" === this.horizontalAlign || "right" === this.horizontalAlign ? (null === this.maxWidth && (this.maxWidth = p.height - 4), (H = 0.5 * p.width - this.margin - 2)) : "center" === this.horizontalAlign && (null === this.maxWidth && (this.maxWidth = p.width - 4), (H = 0.5 * p.height - 4))); var L; u(this.padding) || "number" !== typeof this.padding ? u(this.padding) || "object" !== typeof this.padding || ((L = this.padding.top ? this.padding.top : this.padding.bottom ? this.padding.bottom : 0), (L += this.padding.bottom ? this.padding.bottom : this.padding.top ? this.padding.top : 0), (L *= 1.25)) : (L = 2.5 * this.padding); this.wrap || (H = Math.min(H, Math.max(1.5 * this.fontSize, this.fontSize + L))); H = new ka(this.ctx, { fontSize: this.fontSize, fontFamily: this.fontFamily, fontColor: this.fontColor, fontStyle: this.fontStyle, fontWeight: this.fontWeight, horizontalAlign: this.horizontalAlign, verticalAlign: this.verticalAlign, borderColor: this.borderColor, borderThickness: this.borderThickness, backgroundColor: this.backgroundColor, maxWidth: this.maxWidth, maxHeight: H, cornerRadius: this.cornerRadius, text: this.text, padding: this.padding, textBaseline: "top", }); L = H.measureText(); "top" === this.verticalAlign || "bottom" === this.verticalAlign ? ("top" === this.verticalAlign ? ((v = p.y1 + 2), (I = "top")) : "bottom" === this.verticalAlign && ((v = p.y2 - 2 - L.height), (I = "bottom")), "left" === this.horizontalAlign ? (r = p.x1 + 2) : "center" === this.horizontalAlign ? (r = p.x1 + p.width / 2 - L.width / 2) : "right" === this.horizontalAlign && (r = p.x2 - 2 - L.width - F), (z = this.horizontalAlign), (this.width = L.width), (this.height = L.height)) : "center" === this.verticalAlign && ("left" === this.horizontalAlign ? ((r = p.x1 + 2), (v = p.y2 - 2 - (this.maxWidth / 2 - L.width / 2)), (E = -90), (I = "left"), (this.width = L.height), (this.height = L.width)) : "right" === this.horizontalAlign ? ((r = p.x2 - 2), (v = p.y1 + 2 + (this.maxWidth / 2 - L.width / 2)), (E = 90), (I = "right"), (this.width = L.height), (this.height = L.width)) : "center" === this.horizontalAlign && ((v = k.y1 + (k.height / 2 - L.height / 2)), (r = k.x1 + (k.width / 2 - L.width / 2)), (I = "center"), (this.width = L.width), (this.height = L.height)), (z = "center")); H.x = r; H.y = v; H.angle = E; H.horizontalAlign = z; this._textBlock = H; k.layoutManager.registerSpace(I, { width: this.width + ("left" === I || "right" === I ? this.margin + 2 : 0), height: this.height + ("top" === I || "bottom" === I ? this.margin + 2 : 0), }); this.bounds = { x1: r, y1: v, x2: r + this.width, y2: v + this.height }; this.ctx.textBaseline = "top"; } }; Aa.prototype.render = function () { this._textBlock && this._textBlock.render(!0); }; qa(Ka, V); Ka.prototype.setLayout = Aa.prototype.setLayout; Ka.prototype.render = Aa.prototype.render; Wa.prototype.get = function (k, p) { var r = null; 0 < this.pool.length ? ((r = this.pool.pop()), Oa(r, k, p)) : (r = ta(k, p)); return r; }; Wa.prototype.release = function (k) { this.pool.push(k); }; qa(La, V); var Na = { addTheme: function (k, p) { ya[k] = p; }, addColorSet: function (k, p) { Ba[k] = p; }, addCultureInfo: function (k, p) { Ma[k] = p; }, formatNumber: function (k, p, r) { r = r || "en"; if (Ma[r]) return ba(k, p || "#,##0.##", new La(r)); throw "Unknown Culture Name"; }, formatDate: function (k, p, r) { r = r || "en"; if (Ma[r]) return Ca(k, p || "DD MMM YYYY", new La(r)); throw "Unknown Culture Name"; }, }; "undefined" !== typeof module && "undefined" !== typeof module.exports ? (module.exports = Na) : "function" === typeof define && define.amd ? define([], function () { return Na; }) : (window.CanvasJS = Na); Na.Chart = (function () { function k(a, d) { return a.x - d.x; } function p(a, d) { d = d || {}; this.theme = u(d.theme) || u(ya[d.theme]) ? "light1" : d.theme; p.base.constructor.call(this, "Chart", null, d, null, null); var b = this; this._containerId = a; this._objectsInitialized = !1; this.overlaidCanvasCtx = this.ctx = null; this._indexLabels = []; this._panTimerId = 0; this._lastTouchEventType = ""; this._lastTouchData = null; this.isAnimating = !1; this.renderCount = 0; this.disableToolTip = this.animatedRender = !1; this.canvasPool = new Wa(); this.allDOMEventHandlers = []; this.panEnabled = !1; this._defaultCursor = "default"; this.plotArea = { canvas: null, ctx: null, x1: 0, y1: 0, x2: 0, y2: 0, width: 0, height: 0, }; this._dataInRenderedOrder = []; if ( (this.container = "string" === typeof this._containerId ? document.getElementById(this._containerId) : this._containerId) ) { this.container.innerHTML = ""; var c = 0, e = 0, c = this.options.width ? this.width : 0 < this.container.clientWidth ? this.container.clientWidth : this.width, e = this.options.height ? this.height : 0 < this.container.clientHeight ? this.container.clientHeight : this.height; this.width = c; this.height = e; this.x1 = this.y1 = 0; this.x2 = this.width; this.y2 = this.height; this._selectedColorSet = "undefined" !== typeof Ba[this.colorSet] ? Ba[this.colorSet] : Ba.colorSet1; this._canvasJSContainer = document.createElement("div"); this._canvasJSContainer.setAttribute( "class", "canvasjs-chart-container" ); this._canvasJSContainer.style.position = "relative"; this._canvasJSContainer.style.textAlign = "left"; this._canvasJSContainer.style.cursor = "auto"; r || (this._canvasJSContainer.style.height = "0px"); this.container.appendChild(this._canvasJSContainer); this.canvas = ta(c, e); this._preRenderCanvas = ta(c, e); this.canvas.style.position = "absolute"; this.canvas.style.WebkitUserSelect = "none"; this.canvas.style.MozUserSelect = "none"; this.canvas.style.msUserSelect = "none"; this.canvas.style.userSelect = "none"; this.canvas.getContext && (this._canvasJSContainer.appendChild(this.canvas), (this.ctx = this.canvas.getContext("2d")), (this.ctx.textBaseline = "top"), Ea(this.ctx), (this._preRenderCtx = this._preRenderCanvas.getContext("2d")), (this._preRenderCtx.textBaseline = "top"), Ea(this._preRenderCtx), r ? (this.plotArea.ctx = this.ctx) : ((this.plotArea.canvas = ta(c, e)), (this.plotArea.canvas.style.position = "absolute"), this.plotArea.canvas.setAttribute("class", "plotAreaCanvas"), this._canvasJSContainer.appendChild(this.plotArea.canvas), (this.plotArea.ctx = this.plotArea.canvas.getContext("2d"))), (this.overlaidCanvas = ta(c, e)), (this.overlaidCanvas.style.position = "absolute"), (this.overlaidCanvas.style.webkitTapHighlightColor = "transparent"), (this.overlaidCanvas.style.WebkitUserSelect = "none"), (this.overlaidCanvas.style.MozUserSelect = "none"), (this.overlaidCanvas.style.msUserSelect = "none"), (this.overlaidCanvas.style.userSelect = "none"), this.overlaidCanvas.getContext && (this._canvasJSContainer.appendChild(this.overlaidCanvas), (this.overlaidCanvasCtx = this.overlaidCanvas.getContext("2d")), (this.overlaidCanvasCtx.textBaseline = "top"), Ea(this.overlaidCanvasCtx)), (this._eventManager = new ha(this)), (this.windowResizeHandler = O( window, "resize", function () { b._updateSize() && b.render(); }, this.allDOMEventHandlers )), (this._toolBar = document.createElement("div")), this._toolBar.setAttribute("class", "canvasjs-chart-toolbar"), (this._toolBar.style.cssText = "position: absolute; right: 1px; top: 1px;"), this._canvasJSContainer.appendChild(this._toolBar), (this.bounds = { x1: 0, y1: 0, x2: this.width, y2: this.height }), O( this.overlaidCanvas, "click", function (a) { b._mouseEventHandler(a); }, this.allDOMEventHandlers ), O( this.overlaidCanvas, "mousemove", function (a) { b._mouseEventHandler(a); }, this.allDOMEventHandlers ), O( this.overlaidCanvas, "mouseup", function (a) { b._mouseEventHandler(a); }, this.allDOMEventHandlers ), O( this.overlaidCanvas, "mousedown", function (a) { b._mouseEventHandler(a); va(b._dropdownMenu); }, this.allDOMEventHandlers ), O( this.overlaidCanvas, "mouseout", function (a) { b._mouseEventHandler(a); }, this.allDOMEventHandlers ), O( this.overlaidCanvas, window.navigator.msPointerEnabled ? "MSPointerDown" : "touchstart", function (a) { b._touchEventHandler(a); }, this.allDOMEventHandlers ), O( this.overlaidCanvas, window.navigator.msPointerEnabled ? "MSPointerMove" : "touchmove", function (a) { b._touchEventHandler(a); }, this.allDOMEventHandlers ), O( this.overlaidCanvas, window.navigator.msPointerEnabled ? "MSPointerUp" : "touchend", function (a) { b._touchEventHandler(a); }, this.allDOMEventHandlers ), O( this.overlaidCanvas, window.navigator.msPointerEnabled ? "MSPointerCancel" : "touchcancel", function (a) { b._touchEventHandler(a); }, this.allDOMEventHandlers ), (this.toolTip = new $(this, this.options.toolTip)), (this.data = null), (this.axisX = []), (this.axisX2 = []), (this.axisY = []), (this.axisY2 = []), (this.sessionVariables = { axisX: [], axisX2: [], axisY: [], axisY2: [], })); } else window.console && window.console.log( 'CanvasJS Error: Chart Container with id "' + this._containerId + '" was not found' ); } function v(a, d) { for (var b = [], c, e = 0; e < a.length; e++) if (0 == e) b.push(a[0]); else { var g, m, l; l = e - 1; g = 0 === l ? 0 : l - 1; m = l === a.length - 1 ? l : l + 1; c = (Math.abs( (a[m].x - a[g].x) / (0 === a[m].x - a[l].x ? 0.01 : a[m].x - a[l].x) ) * (d - 1)) / 2 + 1; var w = (a[m].x - a[g].x) / c; c = (a[m].y - a[g].y) / c; b[b.length] = (a[l].x > a[g].x && 0 < w) || (a[l].x < a[g].x && 0 > w) ? { x: a[l].x + w / 3, y: a[l].y + c / 3 } : { x: a[l].x, y: a[l].y + c / 9 }; l = e; g = 0 === l ? 0 : l - 1; m = l === a.length - 1 ? l : l + 1; c = (Math.abs( (a[m].x - a[g].x) / (0 === a[l].x - a[g].x ? 0.01 : a[l].x - a[g].x) ) * (d - 1)) / 2 + 1; w = (a[m].x - a[g].x) / c; c = (a[m].y - a[g].y) / c; b[b.length] = (a[l].x > a[g].x && 0 < w) || (a[l].x < a[g].x && 0 > w) ? { x: a[l].x - w / 3, y: a[l].y - c / 3 } : { x: a[l].x, y: a[l].y - c / 9 }; b[b.length] = a[e]; } return b; } function E(a, d, b, c, e, g, m, l, w, h) { var s = 0; h ? ((m.color = g), (l.color = g)) : (h = 1); s = w ? Math.abs(e - b) : Math.abs(c - d); s = 0 < m.trimLength ? Math.abs((s * m.trimLength) / 100) : Math.abs(s - m.length); w ? ((b += s / 2), (e -= s / 2)) : ((d += s / 2), (c -= s / 2)); var s = 1 === Math.round(m.thickness) % 2 ? 0.5 : 0, q = 1 === Math.round(l.thickness) % 2 ? 0.5 : 0; a.save(); a.globalAlpha = h; a.strokeStyle = l.color || g; a.lineWidth = l.thickness || 2; a.setLineDash && a.setLineDash(R(l.dashType, l.thickness)); a.beginPath(); w && 0 < l.thickness ? (a.moveTo(c - m.thickness / 2, Math.round((b + e) / 2) - q), a.lineTo(d + m.thickness / 2, Math.round((b + e) / 2) - q)) : 0 < l.thickness && (a.moveTo(Math.round((d + c) / 2) - q, b + m.thickness / 2), a.lineTo(Math.round((d + c) / 2) - q, e - m.thickness / 2)); a.stroke(); a.strokeStyle = m.color || g; a.lineWidth = m.thickness || 2; a.setLineDash && a.setLineDash(R(m.dashType, m.thickness)); a.beginPath(); w && 0 < m.thickness ? (a.moveTo(c - s, b), a.lineTo(c - s, e), a.moveTo(d + s, b), a.lineTo(d + s, e)) : 0 < m.thickness && (a.moveTo(d, b + s), a.lineTo(c, b + s), a.moveTo(d, e - s), a.lineTo(c, e - s)); a.stroke(); a.restore(); } function I(a, d, b, c, e) { if (null === a || "undefined" === typeof a) return "undefined" === typeof b ? d : b; a = parseFloat(a.toString()) * (0 <= a.toString().indexOf("%") ? d / 100 : 1); "undefined" !== typeof c && ((a = Math.min(c, a)), "undefined" !== typeof e && (a = Math.max(e, a))); return !isNaN(a) && a <= d && 0 <= a ? a : "undefined" === typeof b ? d : b; } function H(a, d) { H.base.constructor.call(this, "Legend", "legend", d, null, a); this.chart = a; this.canvas = a.canvas; this.ctx = this.chart.ctx; this.ghostCtx = this.chart._eventManager.ghostCtx; this.items = []; this.optionsName = "legend"; this.height = this.width = 0; this.orientation = null; this.dataSeries = []; this.bounds = { x1: null, y1: null, x2: null, y2: null }; "undefined" === typeof this.options.fontSize && (this.fontSize = this.chart.getAutoFontSize(this.fontSize)); this.lineHeight = Za(this.fontFamily, this.fontSize, this.fontWeight); this.horizontalSpacing = this.fontSize; } function F(a, d, b, c) { F.base.constructor.call(this, "DataSeries", "data", d, b, a); this.chart = a; this.canvas = a.canvas; this._ctx = a.canvas.ctx; this.index = b; this.noDataPointsInPlotArea = 0; this.id = c; this.chart._eventManager.objectMap[c] = { id: c, objectType: "dataSeries", dataSeriesIndex: b, }; a = d.dataPoints ? d.dataPoints.length : 0; this.dataPointEOs = []; for (d = 0; d < a; d++) this.dataPointEOs[d] = {}; this.dataPointIds = []; this.plotUnit = []; this.axisY = this.axisX = null; this.optionsName = "data"; this.isOptionsInArray = !0; null === this.fillOpacity && (this.type.match(/area/i) ? (this.fillOpacity = 0.7) : (this.fillOpacity = 1)); this.axisPlacement = this.getDefaultAxisPlacement(); "undefined" === typeof this.options.indexLabelFontSize && (this.indexLabelFontSize = this.chart.getAutoFontSize( this.indexLabelFontSize )); } function z(a, d, b, c, e, g) { z.base.constructor.call(this, "Axis", d, b, c, a); this.chart = a; this.canvas = a.canvas; this.ctx = a.ctx; this.intervalStartPosition = this.maxHeight = this.maxWidth = 0; this.labels = []; this.dataSeries = []; this._stripLineLabels = this._ticks = this._labels = null; this.dataInfo = { min: Infinity, max: -Infinity, viewPortMin: Infinity, viewPortMax: -Infinity, minDiff: Infinity, }; this.isOptionsInArray = !0; "axisX" === e ? ("left" === g || "bottom" === g ? ((this.optionsName = "axisX"), u(this.chart.sessionVariables.axisX[c]) && (this.chart.sessionVariables.axisX[c] = {}), (this.sessionVariables = this.chart.sessionVariables.axisX[c])) : ((this.optionsName = "axisX2"), u(this.chart.sessionVariables.axisX2[c]) && (this.chart.sessionVariables.axisX2[c] = {}), (this.sessionVariables = this.chart.sessionVariables.axisX2[c])), this.options.interval || (this.intervalType = null)) : "left" === g || "bottom" === g ? ((this.optionsName = "axisY"), u(this.chart.sessionVariables.axisY[c]) && (this.chart.sessionVariables.axisY[c] = {}), (this.sessionVariables = this.chart.sessionVariables.axisY[c])) : ((this.optionsName = "axisY2"), u(this.chart.sessionVariables.axisY2[c]) && (this.chart.sessionVariables.axisY2[c] = {}), (this.sessionVariables = this.chart.sessionVariables.axisY2[c])); "undefined" === typeof this.options.titleFontSize && (this.titleFontSize = this.chart.getAutoFontSize(this.titleFontSize)); "undefined" === typeof this.options.labelFontSize && (this.labelFontSize = this.chart.getAutoFontSize(this.labelFontSize)); this.type = e; "axisX" !== e || (b && "undefined" !== typeof b.gridThickness) || (this.gridThickness = 0); this._position = g; this.lineCoordinates = { x1: null, y1: null, x2: null, y2: null, width: null, }; this.labelAngle = ((this.labelAngle % 360) + 360) % 360; 90 < this.labelAngle && 270 > this.labelAngle ? (this.labelAngle -= 180) : 270 <= this.labelAngle && 360 >= this.labelAngle && (this.labelAngle -= 360); this.options.scaleBreaks && (this.scaleBreaks = new Q( this.chart, this.options.scaleBreaks, ++this.chart._eventManager.lastObjectId, this )); this.stripLines = []; if (this.options.stripLines && 0 < this.options.stripLines.length) for (a = 0; a < this.options.stripLines.length; a++) this.stripLines.push( new X( this.chart, this.options.stripLines[a], a, ++this.chart._eventManager.lastObjectId, this ) ); this.options.crosshair && (this.crosshair = new fa(this.chart, this.options.crosshair, this)); this._titleTextBlock = null; this.hasOptionChanged("viewportMinimum") && null === this.viewportMinimum && ((this.options.viewportMinimum = void 0), (this.sessionVariables.viewportMinimum = null)); this.hasOptionChanged("viewportMinimum") || isNaN(this.sessionVariables.newViewportMinimum) || null === this.sessionVariables.newViewportMinimum ? (this.sessionVariables.newViewportMinimum = null) : (this.viewportMinimum = this.sessionVariables.newViewportMinimum); this.hasOptionChanged("viewportMaximum") && null === this.viewportMaximum && ((this.options.viewportMaximum = void 0), (this.sessionVariables.viewportMaximum = null)); this.hasOptionChanged("viewportMaximum") || isNaN(this.sessionVariables.newViewportMaximum) || null === this.sessionVariables.newViewportMaximum ? (this.sessionVariables.newViewportMaximum = null) : (this.viewportMaximum = this.sessionVariables.newViewportMaximum); null !== this.minimum && null !== this.viewportMinimum && (this.viewportMinimum = Math.max(this.viewportMinimum, this.minimum)); null !== this.maximum && null !== this.viewportMaximum && (this.viewportMaximum = Math.min(this.viewportMaximum, this.maximum)); this.trackChanges("viewportMinimum"); this.trackChanges("viewportMaximum"); } function Q(a, d, b, c) { Q.base.constructor.call(this, "ScaleBreaks", "scaleBreaks", d, null, c); this.id = b; this.chart = a; this.ctx = this.chart.ctx; this.axis = c; this.optionsName = "scaleBreaks"; this.isOptionsInArray = !1; this._appliedBreaks = []; this.customBreaks = []; this.autoBreaks = []; "string" === typeof this.spacing ? ((this.spacing = parseFloat(this.spacing)), (this.spacing = isNaN(this.spacing) ? 8 : (10 < this.spacing ? 10 : this.spacing) + "%")) : "number" !== typeof this.spacing && (this.spacing = 8); this.autoCalculate && (this.maxNumberOfAutoBreaks = Math.min(this.maxNumberOfAutoBreaks, 5)); if (this.options.customBreaks && 0 < this.options.customBreaks.length) { for (a = 0; a < this.options.customBreaks.length; a++) this.customBreaks.push( new L( this.chart, "customBreaks", this.options.customBreaks[a], a, ++this.chart._eventManager.lastObjectId, this ) ), "number" === typeof this.customBreaks[a].startValue && "number" === typeof this.customBreaks[a].endValue && this.customBreaks[a].endValue !== this.customBreaks[a].startValue && this._appliedBreaks.push(this.customBreaks[a]); this._appliedBreaks.sort(function (a, c) { return a.startValue - c.startValue; }); for (a = 0; a < this._appliedBreaks.length - 1; a++) this._appliedBreaks[a].endValue >= this._appliedBreaks[a + 1].startValue && ((this._appliedBreaks[a].endValue = Math.max( this._appliedBreaks[a].endValue, this._appliedBreaks[a + 1].endValue )), window.console && window.console.log( "CanvasJS Error: Breaks " + a + " and " + (a + 1) + " are overlapping." ), this._appliedBreaks.splice(a, 2), a--); } } function L(a, d, b, c, e, g) { L.base.constructor.call(this, "Break", d, b, c, g); this.id = e; this.chart = a; this.ctx = this.chart.ctx; this.scaleBreaks = g; this.optionsName = d; this.isOptionsInArray = !0; this.type = b.type ? this.type : g.type; this.fillOpacity = u(b.fillOpacity) ? g.fillOpacity : this.fillOpacity; this.lineThickness = u(b.lineThickness) ? g.lineThickness : this.lineThickness; this.color = b.color ? this.color : g.color; this.lineColor = b.lineColor ? this.lineColor : g.lineColor; this.lineDashType = b.lineDashType ? this.lineDashType : g.lineDashType; !u(this.startValue) && this.startValue.getTime && (this.startValue = this.startValue.getTime()); !u(this.endValue) && this.endValue.getTime && (this.endValue = this.endValue.getTime()); "number" === typeof this.startValue && "number" === typeof this.endValue && this.endValue < this.startValue && ((a = this.startValue), (this.startValue = this.endValue), (this.endValue = a)); this.spacing = "undefined" === typeof b.spacing ? g.spacing : b.spacing; "string" === typeof this.options.spacing ? ((this.spacing = parseFloat(this.spacing)), (this.spacing = isNaN(this.spacing) ? 0 : (10 < this.spacing ? 10 : this.spacing) + "%")) : "number" !== typeof this.options.spacing && (this.spacing = g.spacing); this.size = g.parent.logarithmic ? 1 : 0; } function X(a, d, b, c, e) { X.base.constructor.call(this, "StripLine", "stripLines", d, b, e); this.id = c; this.chart = a; this.ctx = this.chart.ctx; this.label = this.label; this.axis = e; this.optionsName = "stripLines"; this.isOptionsInArray = !0; this._thicknessType = "pixel"; null !== this.startValue && null !== this.endValue && ((this.value = e.logarithmic ? Math.sqrt( (this.startValue.getTime ? this.startValue.getTime() : this.startValue) * (this.endValue.getTime ? this.endValue.getTime() : this.endValue) ) : ((this.startValue.getTime ? this.startValue.getTime() : this.startValue) + (this.endValue.getTime ? this.endValue.getTime() : this.endValue)) / 2), (this._thicknessType = null)); } function fa(a, d, b) { fa.base.constructor.call(this, "Crosshair", "crosshair", d, null, b); this.chart = a; this.ctx = this.chart.ctx; this.axis = b; this.optionsName = "crosshair"; this._thicknessType = "pixel"; } function $(a, d) { $.base.constructor.call(this, "ToolTip", "toolTip", d, null, a); this.chart = a; this.canvas = a.canvas; this.ctx = this.chart.ctx; this.currentDataPointIndex = this.currentSeriesIndex = -1; this._prevY = this._prevX = NaN; this.containerTransitionDuration = 0.1; this.mozContainerTransition = this.getContainerTransition( this.containerTransitionDuration ); this.optionsName = "toolTip"; this._initialize(); } function ha(a) { this.chart = a; this.lastObjectId = 0; this.objectMap = []; this.rectangularRegionEventSubscriptions = []; this.previousDataPointEventObject = null; this.ghostCanvas = ta(this.chart.width, this.chart.height); this.ghostCtx = this.ghostCanvas.getContext("2d"); this.mouseoveredObjectMaps = []; } function ga(a) { this.chart = a; this.ctx = this.chart.plotArea.ctx; this.animations = []; this.animationRequestId = null; } qa(p, V); p.prototype.destroy = function () { var a = this.allDOMEventHandlers; this._animator && this._animator.cancelAllAnimations(); this._panTimerId && clearTimeout(this._panTimerId); for (var d = 0; d < a.length; d++) { var b = a[d][0], c = a[d][1], e = a[d][2], g = a[d][3], g = g || !1; b.removeEventListener ? b.removeEventListener(c, e, g) : b.detachEvent && b.detachEvent("on" + c, e); } this.allDOMEventHandlers = []; for ( this.removeAllEventListeners(); this._canvasJSContainer && this._canvasJSContainer.hasChildNodes(); ) this._canvasJSContainer.removeChild(this._canvasJSContainer.lastChild); for (; this.container && this.container.hasChildNodes(); ) this.container.removeChild(this.container.lastChild); for (; this._dropdownMenu && this._dropdownMenu.hasChildNodes(); ) this._dropdownMenu.removeChild(this._dropdownMenu.lastChild); this.overlaidCanvas = this.canvas = this.container = this._canvasJSContainer = null; this._toolBar = this._dropdownMenu = this._menuButton = this._resetButton = this._zoomButton = this._breaksCanvas = this._preRenderCanvas = this.toolTip.container = null; }; p.prototype._updateOptions = function () { var a = this; this.updateOption("width"); this.updateOption("height"); this.updateOption("dataPointWidth"); this.updateOption("dataPointMinWidth"); this.updateOption("dataPointMaxWidth"); this.updateOption("interactivityEnabled"); this.updateOption("theme"); this.updateOption("colorSet") && (this._selectedColorSet = "undefined" !== typeof Ba[this.colorSet] ? Ba[this.colorSet] : Ba.colorSet1); this.updateOption("backgroundColor"); this.backgroundColor || (this.backgroundColor = "rgba(0,0,0,0)"); this.updateOption("culture"); this._cultureInfo = new La(this.options.culture); this.updateOption("animationEnabled"); this.animationEnabled = this.animationEnabled && r; this.updateOption("animationDuration"); this.updateOption("rangeChanging"); this.updateOption("rangeChanged"); this.updateOption("exportEnabled"); this.updateOption("exportFileName"); this.updateOption("zoomType"); if (this.options.zoomEnabled) { if (!this._zoomButton) { var d = !1; va((this._zoomButton = document.createElement("button"))); ua(this, this._zoomButton, "pan"); this._toolBar.appendChild(this._zoomButton); this._zoomButton.style.borderRight = this.toolbar.borderThickness + "px solid " + this.toolbar.borderColor; O( this._zoomButton, "touchstart", function (a) { d = !0; }, this.allDOMEventHandlers ); O( this._zoomButton, "click", function () { a.zoomEnabled ? ((a.zoomEnabled = !1), (a.panEnabled = !0), ua(a, a._zoomButton, "zoom")) : ((a.zoomEnabled = !0), (a.panEnabled = !1), ua(a, a._zoomButton, "pan")); a.render(); }, this.allDOMEventHandlers ); O( this._zoomButton, "mouseover", function () { d ? (d = !1) : (sa(a, a._zoomButton, { backgroundColor: a.toolbar.backgroundColorOnHover, color: a.toolbar.fontColorOnHover, transition: "0.4s", WebkitTransition: "0.4s", }), 0 >= navigator.userAgent.search("MSIE") && sa(a, a._zoomButton.childNodes[0], { WebkitFilter: "invert(100%)", filter: "invert(100%)", })); }, this.allDOMEventHandlers ); O( this._zoomButton, "mouseout", function () { d || (sa(a, a._zoomButton, { backgroundColor: a.toolbar.backgroundColor, color: a.toolbar.fontColor, transition: "0.4s", WebkitTransition: "0.4s", }), 0 >= navigator.userAgent.search("MSIE") && sa(a, a._zoomButton.childNodes[0], { WebkitFilter: "invert(0%)", filter: "invert(0%)", })); }, this.allDOMEventHandlers ); } this._resetButton || ((d = !1), va((this._resetButton = document.createElement("button"))), ua(this, this._resetButton, "reset"), (this._resetButton.style.borderRight = (this.exportEnabled ? this.toolbar.borderThickness : 0) + "px solid " + this.toolbar.borderColor), this._toolBar.appendChild(this._resetButton), O( this._resetButton, "touchstart", function (a) { d = !0; }, this.allDOMEventHandlers ), O( this._resetButton, "click", function () { a.toolTip.hide(); a.zoomEnabled || a.panEnabled ? ((a.zoomEnabled = !0), (a.panEnabled = !1), ua(a, a._zoomButton, "pan"), (a._defaultCursor = "default"), (a.overlaidCanvas.style.cursor = a._defaultCursor)) : ((a.zoomEnabled = !1), (a.panEnabled = !1)); if (a.sessionVariables.axisX) for (var c = 0; c < a.sessionVariables.axisX.length; c++) (a.sessionVariables.axisX[c].newViewportMinimum = null), (a.sessionVariables.axisX[c].newViewportMaximum = null); if (a.sessionVariables.axisX2) for (c = 0; c < a.sessionVariables.axisX2.length; c++) (a.sessionVariables.axisX2[c].newViewportMinimum = null), (a.sessionVariables.axisX2[c].newViewportMaximum = null); if (a.sessionVariables.axisY) for (c = 0; c < a.sessionVariables.axisY.length; c++) (a.sessionVariables.axisY[c].newViewportMinimum = null), (a.sessionVariables.axisY[c].newViewportMaximum = null); if (a.sessionVariables.axisY2) for (c = 0; c < a.sessionVariables.axisY2.length; c++) (a.sessionVariables.axisY2[c].newViewportMinimum = null), (a.sessionVariables.axisY2[c].newViewportMaximum = null); a.resetOverlayedCanvas(); va(a._zoomButton, a._resetButton); a._dispatchRangeEvent("rangeChanging", "reset"); a.render(); a._dispatchRangeEvent("rangeChanged", "reset"); a.syncCharts && a.syncCharts(null, null); }, this.allDOMEventHandlers ), O( this._resetButton, "mouseover", function () { d || (sa(a, a._resetButton, { backgroundColor: a.toolbar.backgroundColorOnHover, color: a.toolbar.hoverFfontColorOnHoverontColor, transition: "0.4s", WebkitTransition: "0.4s", }), 0 >= navigator.userAgent.search("MSIE") && sa(a, a._resetButton.childNodes[0], { WebkitFilter: "invert(100%)", filter: "invert(100%)", })); }, this.allDOMEventHandlers ), O( this._resetButton, "mouseout", function () { d || (sa(a, a._resetButton, { backgroundColor: a.toolbar.backgroundColor, color: a.toolbar.fontColor, transition: "0.4s", WebkitTransition: "0.4s", }), 0 >= navigator.userAgent.search("MSIE") && sa(a, a._resetButton.childNodes[0], { WebkitFilter: "invert(0%)", filter: "invert(0%)", })); }, this.allDOMEventHandlers ), (this.overlaidCanvas.style.cursor = a._defaultCursor)); this.zoomEnabled || this.panEnabled || (this._zoomButton ? (a._zoomButton.getAttribute("state") === a._cultureInfo.zoomText ? ((this.panEnabled = !0), (this.zoomEnabled = !1)) : ((this.zoomEnabled = !0), (this.panEnabled = !1)), Qa(a._zoomButton, a._resetButton)) : ((this.zoomEnabled = !0), (this.panEnabled = !1))); } else this.panEnabled = this.zoomEnabled = !1; this._menuButton ? this.exportEnabled ? Qa(this._menuButton) : va(this._menuButton) : this.exportEnabled && r && ((d = !1), (this._menuButton = document.createElement("button")), ua(this, this._menuButton, "menu"), this._toolBar.appendChild(this._menuButton), O( this._menuButton, "touchstart", function (a) { d = !0; }, this.allDOMEventHandlers ), O( this._menuButton, "click", function () { "none" !== a._dropdownMenu.style.display || (a._dropDownCloseTime && 500 >= new Date().getTime() - a._dropDownCloseTime.getTime()) || ((a._dropdownMenu.style.display = "block"), a._menuButton.blur(), a._dropdownMenu.focus()); }, this.allDOMEventHandlers, !0 ), O( this._menuButton, "mouseover", function () { d || (sa(a, a._menuButton, { backgroundColor: a.toolbar.backgroundColorOnHover, color: a.toolbar.fontColorOnHover, }), 0 >= navigator.userAgent.search("MSIE") && sa(a, a._menuButton.childNodes[0], { WebkitFilter: "invert(100%)", filter: "invert(100%)", })); }, this.allDOMEventHandlers, !0 ), O( this._menuButton, "mouseout", function () { d || (sa(a, a._menuButton, { backgroundColor: a.toolbar.backgroundColor, color: a.toolbar.fontColor, }), 0 >= navigator.userAgent.search("MSIE") && sa(a, a._menuButton.childNodes[0], { WebkitFilter: "invert(0%)", filter: "invert(0%)", })); }, this.allDOMEventHandlers, !0 )); if (!this._dropdownMenu && this.exportEnabled && r) { d = !1; this._dropdownMenu = document.createElement("div"); this._dropdownMenu.setAttribute("tabindex", -1); var b = -1 !== this.theme.indexOf("dark") ? "black" : "#888888"; this._dropdownMenu.style.cssText = "position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer;right: 0px;top: 25px;min-width: 120px;outline: 0;font-size: 14px; font-family: Arial, Helvetica, sans-serif;padding: 5px 0px 5px 0px;text-align: left;line-height: 10px;background-color:" + this.toolbar.backgroundColor + ";box-shadow: 2px 2px 10px " + b; a._dropdownMenu.style.display = "none"; this._toolBar.appendChild(this._dropdownMenu); O( this._dropdownMenu, "blur", function () { va(a._dropdownMenu); a._dropDownCloseTime = new Date(); }, this.allDOMEventHandlers, !0 ); b = document.createElement("div"); b.style.cssText = "padding: 12px 8px 12px 8px"; b.innerHTML = this._cultureInfo.printText; b.style.backgroundColor = this.toolbar.backgroundColor; b.style.color = this.toolbar.fontColor; this._dropdownMenu.appendChild(b); O( b, "touchstart", function (a) { d = !0; }, this.allDOMEventHandlers ); O( b, "mouseover", function () { d || ((this.style.backgroundColor = a.toolbar.backgroundColorOnHover), (this.style.color = a.toolbar.fontColorOnHover)); }, this.allDOMEventHandlers, !0 ); O( b, "mouseout", function () { d || ((this.style.backgroundColor = a.toolbar.backgroundColor), (this.style.color = a.toolbar.fontColor)); }, this.allDOMEventHandlers, !0 ); O( b, "click", function () { a.print(); va(a._dropdownMenu); }, this.allDOMEventHandlers, !0 ); b = document.createElement("div"); b.style.cssText = "padding: 12px 8px 12px 8px"; b.innerHTML = this._cultureInfo.saveJPGText; b.style.backgroundColor = this.toolbar.backgroundColor; b.style.color = this.toolbar.fontColor; this._dropdownMenu.appendChild(b); O( b, "touchstart", function (a) { d = !0; }, this.allDOMEventHandlers ); O( b, "mouseover", function () { d || ((this.style.backgroundColor = a.toolbar.backgroundColorOnHover), (this.style.color = a.toolbar.fontColorOnHover)); }, this.allDOMEventHandlers, !0 ); O( b, "mouseout", function () { d || ((this.style.backgroundColor = a.toolbar.backgroundColor), (this.style.color = a.toolbar.fontColor)); }, this.allDOMEventHandlers, !0 ); O( b, "click", function () { Ta(a.canvas, "jpeg", a.exportFileName); va(a._dropdownMenu); }, this.allDOMEventHandlers, !0 ); b = document.createElement("div"); b.style.cssText = "padding: 12px 8px 12px 8px"; b.innerHTML = this._cultureInfo.savePNGText; b.style.backgroundColor = this.toolbar.backgroundColor; b.style.color = this.toolbar.fontColor; this._dropdownMenu.appendChild(b); O( b, "touchstart", function (a) { d = !0; }, this.allDOMEventHandlers ); O( b, "mouseover", function () { d || ((this.style.backgroundColor = a.toolbar.backgroundColorOnHover), (this.style.color = a.toolbar.fontColorOnHover)); }, this.allDOMEventHandlers, !0 ); O( b, "mouseout", function () { d || ((this.style.backgroundColor = a.toolbar.backgroundColor), (this.style.color = a.toolbar.fontColor)); }, this.allDOMEventHandlers, !0 ); O( b, "click", function () { Ta(a.canvas, "png", a.exportFileName); va(a._dropdownMenu); }, this.allDOMEventHandlers, !0 ); } "none" !== this._toolBar.style.display && this._zoomButton && (this.panEnabled ? ua(a, a._zoomButton, "zoom") : ua(a, a._zoomButton, "pan"), a._resetButton.getAttribute("state") !== a._cultureInfo.resetText && ua(a, a._resetButton, "reset")); this.options.toolTip && this.toolTip.options !== this.options.toolTip && (this.toolTip.options = this.options.toolTip); for (var c in this.toolTip.options) this.toolTip.options.hasOwnProperty(c) && this.toolTip.updateOption(c); }; p.prototype._updateSize = function () { var a; a = [ this.canvas, this._preRenderCanvas, this.overlaidCanvas, this._eventManager.ghostCanvas, ]; var d = 0, b = 0; this.options.width ? (d = this.width) : (this.width = d = 0 < this.container.clientWidth ? this.container.clientWidth : this.width); this.options.height ? (b = this.height) : (this.height = b = 0 < this.container.clientHeight ? this.container.clientHeight : this.height); if (this.canvas.width !== d * W || this.canvas.height !== b * W) { for (var c = 0; c < a.length; c++) Oa(a[c], d, b); a = !0; } else a = !1; return a; }; p.prototype._initialize = function () { this.isNavigator = u(this.parent) || u(this.parent._defaultsKey) || "Navigator" !== this.parent._defaultsKey ? !1 : !0; this.toolbar = new Va(this, this.options.toolbar); this._animator ? this._animator.cancelAllAnimations() : (this._animator = new ga(this)); this.removeAllEventListeners(); this.disableToolTip = !1; this._axes = []; this.funnelPyramidClickHandler = this.pieDoughnutClickHandler = null; this._updateOptions(); this.animatedRender = r && this.animationEnabled && 0 === this.renderCount; this._updateSize(); this.clearCanvas(); this.ctx.beginPath(); this.axisX = []; this.axisX2 = []; this.axisY = []; this.axisY2 = []; this._indexLabels = []; this._dataInRenderedOrder = []; this._events = []; this._eventManager && this._eventManager.reset(); this.plotInfo = { axisPlacement: null, plotTypes: [] }; this.layoutManager = new Ga( 0, 0, this.width, this.height, this.isNavigator ? 0 : 2 ); this.plotArea.layoutManager && this.plotArea.layoutManager.reset(); this.data = []; var a = 0, d = null; if (this.options.data) { for (var b = 0; b < this.options.data.length; b++) if ( (a++, !this.options.data[b].type || 0 <= p._supportedChartTypes.indexOf(this.options.data[b].type)) ) { var c = new F( this, this.options.data[b], a - 1, ++this._eventManager.lastObjectId ); "error" === c.type && ((c.linkedDataSeriesIndex = u( this.options.data[b].linkedDataSeriesIndex ) ? b - 1 : this.options.data[b].linkedDataSeriesIndex), 0 > c.linkedDataSeriesIndex || c.linkedDataSeriesIndex >= this.options.data.length || "number" !== typeof c.linkedDataSeriesIndex || "error" === this.options.data[c.linkedDataSeriesIndex].type) && (c.linkedDataSeriesIndex = null); null === c.name && (c.name = "DataSeries " + a); null === c.color ? 1 < this.options.data.length ? ((c._colorSet = [ this._selectedColorSet[ c.index % this._selectedColorSet.length ], ]), (c.color = this._selectedColorSet[ c.index % this._selectedColorSet.length ])) : (c._colorSet = "line" === c.type || "stepLine" === c.type || "spline" === c.type || "area" === c.type || "stepArea" === c.type || "splineArea" === c.type || "stackedArea" === c.type || "stackedArea100" === c.type || "rangeArea" === c.type || "rangeSplineArea" === c.type || "candlestick" === c.type || "ohlc" === c.type || "waterfall" === c.type || "boxAndWhisker" === c.type ? [this._selectedColorSet[0]] : this._selectedColorSet) : (c._colorSet = [c.color]); null === c.markerSize && ((("line" === c.type || "stepLine" === c.type || "spline" === c.type || 0 <= c.type.toLowerCase().indexOf("area")) && c.dataPoints && c.dataPoints.length < this.width / 16) || "scatter" === c.type) && (c.markerSize = 8); ("bubble" !== c.type && "scatter" !== c.type) || !c.dataPoints || (c.dataPoints.some ? c.dataPoints.some(function (a) { return a.x; }) && c.dataPoints.sort(k) : c.dataPoints.sort(k)); this.data.push(c); var e = c.axisPlacement, d = d || e, g; "normal" === e ? "xySwapped" === this.plotInfo.axisPlacement ? (g = 'You cannot combine "' + c.type + '" with bar chart') : "none" === this.plotInfo.axisPlacement ? (g = 'You cannot combine "' + c.type + '" with pie chart') : null === this.plotInfo.axisPlacement && (this.plotInfo.axisPlacement = "normal") : "xySwapped" === e ? "normal" === this.plotInfo.axisPlacement ? (g = 'You cannot combine "' + c.type + '" with line, area, column or pie chart') : "none" === this.plotInfo.axisPlacement ? (g = 'You cannot combine "' + c.type + '" with pie chart') : null === this.plotInfo.axisPlacement && (this.plotInfo.axisPlacement = "xySwapped") : "none" === e ? "normal" === this.plotInfo.axisPlacement ? (g = 'You cannot combine "' + c.type + '" with line, area, column or bar chart') : "xySwapped" === this.plotInfo.axisPlacement ? (g = 'You cannot combine "' + c.type + '" with bar chart') : null === this.plotInfo.axisPlacement && (this.plotInfo.axisPlacement = "none") : null === e && "none" === this.plotInfo.axisPlacement && (g = 'You cannot combine "' + c.type + '" with pie chart'); if (g && window.console) { window.console.log(g); return; } } for (b = 0; b < this.data.length; b++) { if ("none" == d && "error" === this.data[b].type && window.console) { window.console.log( 'You cannot combine "' + c.type + '" with error chart' ); return; } "error" === this.data[b].type && ((this.data[b].axisPlacement = this.plotInfo.axisPlacement = d || "normal"), (this.data[b]._linkedSeries = null === this.data[b].linkedDataSeriesIndex ? null : this.data[this.data[b].linkedDataSeriesIndex])); } } this._objectsInitialized = !0; this._plotAreaElements = []; }; p._supportedChartTypes = Fa( "line stepLine spline column area stepArea splineArea bar bubble scatter stackedColumn stackedColumn100 stackedBar stackedBar100 stackedArea stackedArea100 candlestick ohlc boxAndWhisker rangeColumn error rangeBar rangeArea rangeSplineArea pie doughnut funnel pyramid waterfall".split( " " ) ); p.prototype.setLayout = function () { for (var a = this._plotAreaElements, d = 0; d < this.data.length; d++) if ( "normal" === this.plotInfo.axisPlacement || "xySwapped" === this.plotInfo.axisPlacement ) { if (!this.data[d].axisYType || "primary" === this.data[d].axisYType) if (this.options.axisY && 0 < this.options.axisY.length) { if (!this.axisY.length) for (var b = 0; b < this.options.axisY.length; b++) "normal" === this.plotInfo.axisPlacement ? this._axes.push( (this.axisY[b] = new z( this, "axisY", this.options.axisY[b], b, "axisY", "left" )) ) : "xySwapped" === this.plotInfo.axisPlacement && this._axes.push( (this.axisY[b] = new z( this, "axisY", this.options.axisY[b], b, "axisY", "bottom" )) ); this.data[d].axisY = this.axisY[ 0 <= this.data[d].axisYIndex && this.data[d].axisYIndex < this.axisY.length ? this.data[d].axisYIndex : 0 ]; this.axisY[ 0 <= this.data[d].axisYIndex && this.data[d].axisYIndex < this.axisY.length ? this.data[d].axisYIndex : 0 ].dataSeries.push(this.data[d]); } else this.axisY.length || ("normal" === this.plotInfo.axisPlacement ? this._axes.push( (this.axisY[0] = new z( this, "axisY", this.options.axisY, 0, "axisY", "left" )) ) : "xySwapped" === this.plotInfo.axisPlacement && this._axes.push( (this.axisY[0] = new z( this, "axisY", this.options.axisY, 0, "axisY", "bottom" )) )), (this.data[d].axisY = this.axisY[0]), this.axisY[0].dataSeries.push(this.data[d]); if ("secondary" === this.data[d].axisYType) if (this.options.axisY2 && 0 < this.options.axisY2.length) { if (!this.axisY2.length) for (b = 0; b < this.options.axisY2.length; b++) "normal" === this.plotInfo.axisPlacement ? this._axes.push( (this.axisY2[b] = new z( this, "axisY2", this.options.axisY2[b], b, "axisY", "right" )) ) : "xySwapped" === this.plotInfo.axisPlacement && this._axes.push( (this.axisY2[b] = new z( this, "axisY2", this.options.axisY2[b], b, "axisY", "top" )) ); this.data[d].axisY = this.axisY2[ 0 <= this.data[d].axisYIndex && this.data[d].axisYIndex < this.axisY2.length ? this.data[d].axisYIndex : 0 ]; this.axisY2[ 0 <= this.data[d].axisYIndex && this.data[d].axisYIndex < this.axisY2.length ? this.data[d].axisYIndex : 0 ].dataSeries.push(this.data[d]); } else this.axisY2.length || ("normal" === this.plotInfo.axisPlacement ? this._axes.push( (this.axisY2[0] = new z( this, "axisY2", this.options.axisY2, 0, "axisY", "right" )) ) : "xySwapped" === this.plotInfo.axisPlacement && this._axes.push( (this.axisY2[0] = new z( this, "axisY2", this.options.axisY2, 0, "axisY", "top" )) )), (this.data[d].axisY = this.axisY2[0]), this.axisY2[0].dataSeries.push(this.data[d]); if (!this.data[d].axisXType || "primary" === this.data[d].axisXType) if (this.options.axisX && 0 < this.options.axisX.length) { if (!this.axisX.length) for (b = 0; b < this.options.axisX.length; b++) "normal" === this.plotInfo.axisPlacement ? this._axes.push( (this.axisX[b] = new z( this, "axisX", this.options.axisX[b], b, "axisX", "bottom" )) ) : "xySwapped" === this.plotInfo.axisPlacement && this._axes.push( (this.axisX[b] = new z( this, "axisX", this.options.axisX[b], b, "axisX", "left" )) ); this.data[d].axisX = this.axisX[ 0 <= this.data[d].axisXIndex && this.data[d].axisXIndex < this.axisX.length ? this.data[d].axisXIndex : 0 ]; this.axisX[ 0 <= this.data[d].axisXIndex && this.data[d].axisXIndex < this.axisX.length ? this.data[d].axisXIndex : 0 ].dataSeries.push(this.data[d]); } else this.axisX.length || ("normal" === this.plotInfo.axisPlacement ? this._axes.push( (this.axisX[0] = new z( this, "axisX", this.options.axisX, 0, "axisX", "bottom" )) ) : "xySwapped" === this.plotInfo.axisPlacement && this._axes.push( (this.axisX[0] = new z( this, "axisX", this.options.axisX, 0, "axisX", "left" )) )), (this.data[d].axisX = this.axisX[0]), this.axisX[0].dataSeries.push(this.data[d]); if ("secondary" === this.data[d].axisXType) if (this.options.axisX2 && 0 < this.options.axisX2.length) { if (!this.axisX2.length) for (b = 0; b < this.options.axisX2.length; b++) "normal" === this.plotInfo.axisPlacement ? this._axes.push( (this.axisX2[b] = new z( this, "axisX2", this.options.axisX2[b], b, "axisX", "top" )) ) : "xySwapped" === this.plotInfo.axisPlacement && this._axes.push( (this.axisX2[b] = new z( this, "axisX2", this.options.axisX2[b], b, "axisX", "right" )) ); this.data[d].axisX = this.axisX2[ 0 <= this.data[d].axisXIndex && this.data[d].axisXIndex < this.axisX2.length ? this.data[d].axisXIndex : 0 ]; this.axisX2[ 0 <= this.data[d].axisXIndex && this.data[d].axisXIndex < this.axisX2.length ? this.data[d].axisXIndex : 0 ].dataSeries.push(this.data[d]); } else this.axisX2.length || ("normal" === this.plotInfo.axisPlacement ? this._axes.push( (this.axisX2[0] = new z( this, "axisX2", this.options.axisX2, 0, "axisX", "top" )) ) : "xySwapped" === this.plotInfo.axisPlacement && this._axes.push( (this.axisX2[0] = new z( this, "axisX2", this.options.axisX2, 0, "axisX", "right" )) )), (this.data[d].axisX = this.axisX2[0]), this.axisX2[0].dataSeries.push(this.data[d]); } if (this.axisY) { for (b = 1; b < this.axisY.length; b++) "undefined" === typeof this.axisY[b].options.gridThickness && (this.axisY[b].gridThickness = 0); for (b = 0; b < this.axisY.length - 1; b++) "undefined" === typeof this.axisY[b].options.margin && (this.axisY[b].margin = 10); } if (this.axisY2) { for (b = 1; b < this.axisY2.length; b++) "undefined" === typeof this.axisY2[b].options.gridThickness && (this.axisY2[b].gridThickness = 0); for (b = 0; b < this.axisY2.length - 1; b++) "undefined" === typeof this.axisY2[b].options.margin && (this.axisY2[b].margin = 10); } this.axisY && 0 < this.axisY.length && this.axisY2 && 0 < this.axisY2.length && (0 < this.axisY[0].gridThickness && "undefined" === typeof this.axisY2[0].options.gridThickness ? (this.axisY2[0].gridThickness = 0) : 0 < this.axisY2[0].gridThickness && "undefined" === typeof this.axisY[0].options.gridThickness && (this.axisY[0].gridThickness = 0)); if (this.axisX) for (b = 0; b < this.axisX.length; b++) "undefined" === typeof this.axisX[b].options.gridThickness && (this.axisX[b].gridThickness = 0); if (this.axisX2) for (b = 0; b < this.axisX2.length; b++) "undefined" === typeof this.axisX2[b].options.gridThickness && (this.axisX2[b].gridThickness = 0); this.axisX && 0 < this.axisX.length && this.axisX2 && 0 < this.axisX2.length && (0 < this.axisX[0].gridThickness && "undefined" === typeof this.axisX2[0].options.gridThickness ? (this.axisX2[0].gridThickness = 0) : 0 < this.axisX2[0].gridThickness && "undefined" === typeof this.axisX[0].options.gridThickness && (this.axisX[0].gridThickness = 0)); b = !1; if (0 < this._axes.length && (this.zoomEnabled || this.panEnabled)) for (d = 0; d < this._axes.length; d++) if ( null !== this._axes[d].viewportMinimum || null !== this._axes[d].viewportMaximum ) { b = !0; break; } b ? (Qa(this._zoomButton, this._resetButton), (this._toolBar.style.border = this.toolbar.borderThickness + "px solid " + this.toolbar.borderColor), (this._zoomButton.style.borderRight = this.toolbar.borderThickness + "px solid " + this.toolbar.borderColor), (this._resetButton.style.borderRight = (this.exportEnabled ? this.toolbar.borderThickness : 0) + "px solid " + this.toolbar.borderColor)) : (va(this._zoomButton, this._resetButton), (this._toolBar.style.border = this.toolbar.borderThickness + "px solid transparent"), this.options.zoomEnabled && ((this.zoomEnabled = !0), (this.panEnabled = !1))); gb(this); this._processData(); this.options.title && ((this.title = new Aa(this, this.options.title)), this.title.dockInsidePlotArea ? a.push(this.title) : this.title.setLayout()); this.subtitles = []; if (this.options.subtitles) for (d = 0; d < this.options.subtitles.length; d++) (b = new Ka(this, this.options.subtitles[d], d)), this.subtitles.push(b), b.dockInsidePlotArea ? a.push(b) : b.setLayout(); this.legend = new H(this, this.options.legend); for (d = 0; d < this.data.length; d++) (this.data[d].showInLegend || "pie" === this.data[d].type || "doughnut" === this.data[d].type || "funnel" === this.data[d].type || "pyramid" === this.data[d].type) && this.legend.dataSeries.push(this.data[d]); this.legend.dockInsidePlotArea ? a.push(this.legend) : this.legend.setLayout(); for (d = 0; d < this._axes.length; d++) if ( this._axes[d].scaleBreaks && this._axes[d].scaleBreaks._appliedBreaks.length ) { r ? ((this._breaksCanvas = ta(this.width, this.height, !0)), (this._breaksCanvasCtx = this._breaksCanvas.getContext("2d"))) : ((this._breaksCanvas = this.canvas), (this._breaksCanvasCtx = this.ctx)); break; } this._preRenderCanvas = u(this._preRenderCanvas) ? ta(this.width, this.height) : this._preRenderCanvas; this._preRenderCtx = this._preRenderCanvas.getContext("2d"); ("normal" !== this.plotInfo.axisPlacement && "xySwapped" !== this.plotInfo.axisPlacement) || z.setLayout( this.axisX, this.axisX2, this.axisY, this.axisY2, this.plotInfo.axisPlacement, this.layoutManager.getFreeSpace() ); }; p.prototype.renderElements = function () { var a = this._plotAreaElements; this.title && !this.title.dockInsidePlotArea && this.title.render(); for (var d = 0; d < this.subtitles.length; d++) this.subtitles[d].dockInsidePlotArea || this.subtitles[d].render(); this.legend.dockInsidePlotArea || this.legend.render(); if ( "normal" === this.plotInfo.axisPlacement || "xySwapped" === this.plotInfo.axisPlacement ) z.render( this.axisX, this.axisX2, this.axisY, this.axisY2, this.plotInfo.axisPlacement ); else if ("none" === this.plotInfo.axisPlacement) this.preparePlotArea(); else return; for (d = 0; d < a.length; d++) a[d].setLayout(), a[d].render(); var b = []; if (this.animatedRender) { var c = ta(this.width, this.height); c.getContext("2d").drawImage( this.canvas, 0, 0, this.width, this.height ); } hb(this); var a = this.ctx.miterLimit, e; this.ctx.miterLimit = 3; r && this._breaksCanvas && (this._preRenderCtx.drawImage( this.canvas, 0, 0, this.width, this.height ), this._preRenderCtx.drawImage( this._breaksCanvas, 0, 0, this.width, this.height ), (this._breaksCanvasCtx.globalCompositeOperation = "source-atop"), this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), this._preRenderCtx.clearRect(0, 0, this.width, this.height)); for (d = 0; d < this.plotInfo.plotTypes.length; d++) for ( var g = this.plotInfo.plotTypes[d], m = 0; m < g.plotUnits.length; m++ ) { var l = g.plotUnits[m], w = null; l.targetCanvas = null; this.animatedRender && ((l.targetCanvas = ta(this.width, this.height)), (l.targetCanvasCtx = l.targetCanvas.getContext("2d")), (e = l.targetCanvasCtx.miterLimit), (l.targetCanvasCtx.miterLimit = 3)); "line" === l.type ? (w = this.renderLine(l)) : "stepLine" === l.type ? (w = this.renderStepLine(l)) : "spline" === l.type ? (w = this.renderSpline(l)) : "column" === l.type ? (w = this.renderColumn(l)) : "bar" === l.type ? (w = this.renderBar(l)) : "area" === l.type ? (w = this.renderArea(l)) : "stepArea" === l.type ? (w = this.renderStepArea(l)) : "splineArea" === l.type ? (w = this.renderSplineArea(l)) : "stackedColumn" === l.type ? (w = this.renderStackedColumn(l)) : "stackedColumn100" === l.type ? (w = this.renderStackedColumn100(l)) : "stackedBar" === l.type ? (w = this.renderStackedBar(l)) : "stackedBar100" === l.type ? (w = this.renderStackedBar100(l)) : "stackedArea" === l.type ? (w = this.renderStackedArea(l)) : "stackedArea100" === l.type ? (w = this.renderStackedArea100(l)) : "bubble" === l.type ? (w = w = this.renderBubble(l)) : "scatter" === l.type ? (w = this.renderScatter(l)) : "pie" === l.type ? this.renderPie(l) : "doughnut" === l.type ? this.renderPie(l) : "funnel" === l.type ? (w = this.renderFunnel(l)) : "pyramid" === l.type ? (w = this.renderFunnel(l)) : "candlestick" === l.type ? (w = this.renderCandlestick(l)) : "ohlc" === l.type ? (w = this.renderCandlestick(l)) : "rangeColumn" === l.type ? (w = this.renderRangeColumn(l)) : "error" === l.type ? (w = this.renderError(l)) : "rangeBar" === l.type ? (w = this.renderRangeBar(l)) : "rangeArea" === l.type ? (w = this.renderRangeArea(l)) : "rangeSplineArea" === l.type ? (w = this.renderRangeSplineArea(l)) : "waterfall" === l.type ? (w = this.renderWaterfall(l)) : "boxAndWhisker" === l.type && (w = this.renderBoxAndWhisker(l)); for (var h = 0; h < l.dataSeriesIndexes.length; h++) this._dataInRenderedOrder.push(this.data[l.dataSeriesIndexes[h]]); this.animatedRender && ((l.targetCanvasCtx.miterLimit = e), w && b.push(w)); } this.ctx.miterLimit = a; this.animatedRender && this._breaksCanvasCtx && b.push({ source: this._breaksCanvasCtx, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, startTimePercent: 0.7, }); this.animatedRender && 0 < this._indexLabels.length && ((e = ta(this.width, this.height).getContext("2d")), b.push(this.renderIndexLabels(e))); var s = this; if (0 < b.length) (s.disableToolTip = !0), s._animator.animate( 200, s.animationDuration, function (a) { s.ctx.clearRect(0, 0, s.width, s.height); s.ctx.drawImage( c, 0, 0, Math.floor(s.width * W), Math.floor(s.height * W), 0, 0, s.width, s.height ); for (var e = 0; e < b.length; e++) (w = b[e]), 1 > a && "undefined" !== typeof w.startTimePercent ? a >= w.startTimePercent && w.animationCallback( w.easingFunction( a - w.startTimePercent, 0, 1, 1 - w.startTimePercent ), w ) : w.animationCallback(w.easingFunction(a, 0, 1, 1), w); s.dispatchEvent("dataAnimationIterationEnd", { chart: s }); }, function () { b = []; for (var a = 0; a < s.plotInfo.plotTypes.length; a++) for ( var e = s.plotInfo.plotTypes[a], d = 0; d < e.plotUnits.length; d++ ) e.plotUnits[d].targetCanvas = null; c = null; s.disableToolTip = !1; } ); else { if (s._breaksCanvas) if (r) s.plotArea.ctx.drawImage( s._breaksCanvas, 0, 0, this.width, this.height ); else for (h = 0; h < s._axes.length; h++) s._axes[h].createMask(); 0 < s._indexLabels.length && s.renderIndexLabels(); s.dispatchEvent("dataAnimationIterationEnd", { chart: s }); } this.attachPlotAreaEventHandlers(); this.zoomEnabled || this.panEnabled || !this._zoomButton || "none" === this._zoomButton.style.display || va(this._zoomButton, this._resetButton); this.toolTip._updateToolTip(); this.renderCount++; Ja && ((s = this), setTimeout(function () { var a = document.getElementById("ghostCanvasCopy"); a && (Oa(a, s.width, s.height), a.getContext("2d").drawImage(s._eventManager.ghostCanvas, 0, 0)); }, 2e3)); this._breaksCanvas && (delete this._breaksCanvas, delete this._breaksCanvasCtx); for (h = 0; h < this._axes.length; h++) this._axes[h].maskCanvas && (delete this._axes[h].maskCanvas, delete this._axes[h].maskCtx); }; p.prototype.render = function (a) { a && (this.options = a); this._initialize(); this.setLayout(); this.renderElements(); }; p.prototype.attachPlotAreaEventHandlers = function () { this.attachEvent({ context: this, chart: this, mousedown: this._plotAreaMouseDown, mouseup: this._plotAreaMouseUp, mousemove: this._plotAreaMouseMove, cursor: this.panEnabled ? "move" : "default", capture: !0, bounds: this.plotArea, }); }; p.prototype.categoriseDataSeries = function () { for (var a = "", d = 0; d < this.data.length; d++) if ( ((a = this.data[d]), a.dataPoints && 0 !== a.dataPoints.length && a.visible && 0 <= p._supportedChartTypes.indexOf(a.type)) ) { for ( var b = null, c = !1, e = null, g = !1, m = 0; m < this.plotInfo.plotTypes.length; m++ ) if (this.plotInfo.plotTypes[m].type === a.type) { c = !0; b = this.plotInfo.plotTypes[m]; break; } c || ((b = { type: a.type, totalDataSeries: 0, plotUnits: [] }), this.plotInfo.plotTypes.push(b)); for (m = 0; m < b.plotUnits.length; m++) if ( b.plotUnits[m].axisYType === a.axisYType && b.plotUnits[m].axisXType === a.axisXType && b.plotUnits[m].axisYIndex === a.axisYIndex && b.plotUnits[m].axisXIndex === a.axisXIndex ) { g = !0; e = b.plotUnits[m]; break; } g || ((e = { type: a.type, previousDataSeriesCount: 0, index: b.plotUnits.length, plotType: b, axisXType: a.axisXType, axisYType: a.axisYType, axisYIndex: a.axisYIndex, axisXIndex: a.axisXIndex, axisY: "primary" === a.axisYType ? this.axisY[ 0 <= a.axisYIndex && a.axisYIndex < this.axisY.length ? a.axisYIndex : 0 ] : this.axisY2[ 0 <= a.axisYIndex && a.axisYIndex < this.axisY2.length ? a.axisYIndex : 0 ], axisX: "primary" === a.axisXType ? this.axisX[ 0 <= a.axisXIndex && a.axisXIndex < this.axisX.length ? a.axisXIndex : 0 ] : this.axisX2[ 0 <= a.axisXIndex && a.axisXIndex < this.axisX2.length ? a.axisXIndex : 0 ], dataSeriesIndexes: [], yTotals: [], }), b.plotUnits.push(e)); b.totalDataSeries++; e.dataSeriesIndexes.push(d); a.plotUnit = e; } for (d = 0; d < this.plotInfo.plotTypes.length; d++) for ( b = this.plotInfo.plotTypes[d], m = a = 0; m < b.plotUnits.length; m++ ) (b.plotUnits[m].previousDataSeriesCount = a), (a += b.plotUnits[m].dataSeriesIndexes.length); }; p.prototype.assignIdToDataPoints = function () { for (var a = 0; a < this.data.length; a++) { var d = this.data[a]; if (d.dataPoints) for (var b = d.dataPoints.length, c = 0; c < b; c++) d.dataPointIds[c] = ++this._eventManager.lastObjectId; } }; p.prototype._processData = function () { this.assignIdToDataPoints(); this.categoriseDataSeries(); for (var a = 0; a < this.plotInfo.plotTypes.length; a++) for ( var d = this.plotInfo.plotTypes[a], b = 0; b < d.plotUnits.length; b++ ) { var c = d.plotUnits[b]; "line" === c.type || "stepLine" === c.type || "spline" === c.type || "column" === c.type || "area" === c.type || "stepArea" === c.type || "splineArea" === c.type || "bar" === c.type || "bubble" === c.type || "scatter" === c.type ? this._processMultiseriesPlotUnit(c) : "stackedColumn" === c.type || "stackedBar" === c.type || "stackedArea" === c.type ? this._processStackedPlotUnit(c) : "stackedColumn100" === c.type || "stackedBar100" === c.type || "stackedArea100" === c.type ? this._processStacked100PlotUnit(c) : "candlestick" === c.type || "ohlc" === c.type || "rangeColumn" === c.type || "rangeBar" === c.type || "rangeArea" === c.type || "rangeSplineArea" === c.type || "error" === c.type || "boxAndWhisker" === c.type ? this._processMultiYPlotUnit(c) : "waterfall" === c.type && this._processSpecificPlotUnit(c); } this.calculateAutoBreaks(); }; p.prototype._processMultiseriesPlotUnit = function (a) { if (a.dataSeriesIndexes && !(1 > a.dataSeriesIndexes.length)) for ( var d = a.axisY.dataInfo, b = a.axisX.dataInfo, c, e, g = !1, m = 0; m < a.dataSeriesIndexes.length; m++ ) { var l = this.data[a.dataSeriesIndexes[m]], w = 0, h = !1, s = !1, q; if ("normal" === l.axisPlacement || "xySwapped" === l.axisPlacement) var n = a.axisX.sessionVariables.newViewportMinimum ? a.axisX.sessionVariables.newViewportMinimum : this.options.axisX && this.options.axisX.viewportMinimum ? this.options.axisX.viewportMinimum : this.options.axisX && this.options.axisX.minimum ? this.options.axisX.minimum : a.axisX.logarithmic ? 0 : -Infinity, f = a.axisX.sessionVariables.newViewportMaximum ? a.axisX.sessionVariables.newViewportMaximum : this.options.axisX && this.options.axisX.viewportMaximum ? this.options.axisX.viewportMaximum : this.options.axisX && this.options.axisX.maximum ? this.options.axisX.maximum : Infinity; if ( (l.dataPoints[w].x && l.dataPoints[w].x.getTime) || "dateTime" === l.xValueType ) g = !0; for (w = 0; w < l.dataPoints.length; w++) { "undefined" === typeof l.dataPoints[w].x && (l.dataPoints[w].x = w + (a.axisX.logarithmic ? 1 : 0)); l.dataPoints[w].x.getTime ? ((g = !0), (c = l.dataPoints[w].x.getTime())) : (c = l.dataPoints[w].x); e = l.dataPoints[w].y; c < b.min && (b.min = c); c > b.max && (b.max = c); e < d.min && "number" === typeof e && (d.min = e); e > d.max && "number" === typeof e && (d.max = e); if (0 < w) { if (a.axisX.logarithmic) { var B = c / l.dataPoints[w - 1].x; 1 > B && (B = 1 / B); b.minDiff > B && 1 !== B && (b.minDiff = B); } else (B = c - l.dataPoints[w - 1].x), 0 > B && (B *= -1), b.minDiff > B && 0 !== B && (b.minDiff = B); null !== e && null !== l.dataPoints[w - 1].y && (a.axisY.logarithmic ? ((B = e / l.dataPoints[w - 1].y), 1 > B && (B = 1 / B), d.minDiff > B && 1 !== B && (d.minDiff = B)) : ((B = e - l.dataPoints[w - 1].y), 0 > B && (B *= -1), d.minDiff > B && 0 !== B && (d.minDiff = B))); } if (c < n && !h) null !== e && (q = c); else { if (!h && ((h = !0), 0 < w)) { w -= 2; continue; } if (c > f && !s) s = !0; else if (c > f && s) continue; l.dataPoints[w].label && (a.axisX.labels[c] = l.dataPoints[w].label); c < b.viewPortMin && (b.viewPortMin = c); c > b.viewPortMax && (b.viewPortMax = c); null === e ? b.viewPortMin === c && q < c && (b.viewPortMin = q) : (e < d.viewPortMin && "number" === typeof e && (d.viewPortMin = e), e > d.viewPortMax && "number" === typeof e && (d.viewPortMax = e)); } } l.axisX.valueType = l.xValueType = g ? "dateTime" : "number"; } }; p.prototype._processStackedPlotUnit = function (a) { if (a.dataSeriesIndexes && !(1 > a.dataSeriesIndexes.length)) { for ( var d = a.axisY.dataInfo, b = a.axisX.dataInfo, c, e, g = !1, m = [], l = [], w = Infinity, h = -Infinity, s = 0; s < a.dataSeriesIndexes.length; s++ ) { var q = this.data[a.dataSeriesIndexes[s]], n = 0, f = !1, B = !1, k; if ("normal" === q.axisPlacement || "xySwapped" === q.axisPlacement) var p = a.axisX.sessionVariables.newViewportMinimum ? a.axisX.sessionVariables.newViewportMinimum : this.options.axisX && this.options.axisX.viewportMinimum ? this.options.axisX.viewportMinimum : this.options.axisX && this.options.axisX.minimum ? this.options.axisX.minimum : -Infinity, t = a.axisX.sessionVariables.newViewportMaximum ? a.axisX.sessionVariables.newViewportMaximum : this.options.axisX && this.options.axisX.viewportMaximum ? this.options.axisX.viewportMaximum : this.options.axisX && this.options.axisX.maximum ? this.options.axisX.maximum : Infinity; if ( (q.dataPoints[n].x && q.dataPoints[n].x.getTime) || "dateTime" === q.xValueType ) g = !0; for (n = 0; n < q.dataPoints.length; n++) { "undefined" === typeof q.dataPoints[n].x && (q.dataPoints[n].x = n + (a.axisX.logarithmic ? 1 : 0)); q.dataPoints[n].x.getTime ? ((g = !0), (c = q.dataPoints[n].x.getTime())) : (c = q.dataPoints[n].x); e = u(q.dataPoints[n].y) ? 0 : q.dataPoints[n].y; c < b.min && (b.min = c); c > b.max && (b.max = c); if (0 < n) { if (a.axisX.logarithmic) { var r = c / q.dataPoints[n - 1].x; 1 > r && (r = 1 / r); b.minDiff > r && 1 !== r && (b.minDiff = r); } else (r = c - q.dataPoints[n - 1].x), 0 > r && (r *= -1), b.minDiff > r && 0 !== r && (b.minDiff = r); null !== e && null !== q.dataPoints[n - 1].y && (a.axisY.logarithmic ? 0 < e && ((r = e / q.dataPoints[n - 1].y), 1 > r && (r = 1 / r), d.minDiff > r && 1 !== r && (d.minDiff = r)) : ((r = e - q.dataPoints[n - 1].y), 0 > r && (r *= -1), d.minDiff > r && 0 !== r && (d.minDiff = r))); } if (c < p && !f) null !== q.dataPoints[n].y && (k = c); else { if (!f && ((f = !0), 0 < n)) { n -= 2; continue; } if (c > t && !B) B = !0; else if (c > t && B) continue; q.dataPoints[n].label && (a.axisX.labels[c] = q.dataPoints[n].label); c < b.viewPortMin && (b.viewPortMin = c); c > b.viewPortMax && (b.viewPortMax = c); null === q.dataPoints[n].y ? b.viewPortMin === c && k < c && (b.viewPortMin = k) : ((a.yTotals[c] = (a.yTotals[c] ? a.yTotals[c] : 0) + e), 0 <= e ? m[c] ? (m[c] += e) : ((m[c] = e), (w = Math.min(e, w))) : l[c] ? (l[c] += e) : ((l[c] = e), (h = Math.max(e, h)))); } } a.axisY.scaleBreaks && a.axisY.scaleBreaks.autoCalculate && 1 <= a.axisY.scaleBreaks.maxNumberOfAutoBreaks && (d.dataPointYPositiveSums ? (d.dataPointYPositiveSums.push.apply( d.dataPointYPositiveSums, m ), d.dataPointYNegativeSums.push.apply( d.dataPointYPositiveSums, l )) : ((d.dataPointYPositiveSums = m), (d.dataPointYNegativeSums = l))); q.axisX.valueType = q.xValueType = g ? "dateTime" : "number"; } for (n in m) m.hasOwnProperty(n) && !isNaN(n) && ((a = m[n]), a < d.min && (d.min = Math.min(a, w)), a > d.max && (d.max = a), n < b.viewPortMin || n > b.viewPortMax || (a < d.viewPortMin && (d.viewPortMin = Math.min(a, w)), a > d.viewPortMax && (d.viewPortMax = a))); for (n in l) l.hasOwnProperty(n) && !isNaN(n) && ((a = l[n]), a < d.min && (d.min = a), a > d.max && (d.max = Math.max(a, h)), n < b.viewPortMin || n > b.viewPortMax || (a < d.viewPortMin && (d.viewPortMin = a), a > d.viewPortMax && (d.viewPortMax = Math.max(a, h)))); } }; p.prototype._processStacked100PlotUnit = function (a) { if (a.dataSeriesIndexes && !(1 > a.dataSeriesIndexes.length)) { for ( var d = a.axisY.dataInfo, b = a.axisX.dataInfo, c, e, g = !1, m = !1, l = !1, w = [], h = 0; h < a.dataSeriesIndexes.length; h++ ) { var s = this.data[a.dataSeriesIndexes[h]], q = 0, n = !1, f = !1, B; if ("normal" === s.axisPlacement || "xySwapped" === s.axisPlacement) var k = a.axisX.sessionVariables.newViewportMinimum ? a.axisX.sessionVariables.newViewportMinimum : this.options.axisX && this.options.axisX.viewportMinimum ? this.options.axisX.viewportMinimum : this.options.axisX && this.options.axisX.minimum ? this.options.axisX.minimum : -Infinity, r = a.axisX.sessionVariables.newViewportMaximum ? a.axisX.sessionVariables.newViewportMaximum : this.options.axisX && this.options.axisX.viewportMaximum ? this.options.axisX.viewportMaximum : this.options.axisX && this.options.axisX.maximum ? this.options.axisX.maximum : Infinity; if ( (s.dataPoints[q].x && s.dataPoints[q].x.getTime) || "dateTime" === s.xValueType ) g = !0; for (q = 0; q < s.dataPoints.length; q++) { "undefined" === typeof s.dataPoints[q].x && (s.dataPoints[q].x = q + (a.axisX.logarithmic ? 1 : 0)); s.dataPoints[q].x.getTime ? ((g = !0), (c = s.dataPoints[q].x.getTime())) : (c = s.dataPoints[q].x); e = u(s.dataPoints[q].y) ? null : s.dataPoints[q].y; c < b.min && (b.min = c); c > b.max && (b.max = c); if (0 < q) { if (a.axisX.logarithmic) { var t = c / s.dataPoints[q - 1].x; 1 > t && (t = 1 / t); b.minDiff > t && 1 !== t && (b.minDiff = t); } else (t = c - s.dataPoints[q - 1].x), 0 > t && (t *= -1), b.minDiff > t && 0 !== t && (b.minDiff = t); u(e) || null === s.dataPoints[q - 1].y || (a.axisY.logarithmic ? 0 < e && ((t = e / s.dataPoints[q - 1].y), 1 > t && (t = 1 / t), d.minDiff > t && 1 !== t && (d.minDiff = t)) : ((t = e - s.dataPoints[q - 1].y), 0 > t && (t *= -1), d.minDiff > t && 0 !== t && (d.minDiff = t))); } if (c < k && !n) null !== e && (B = c); else { if (!n && ((n = !0), 0 < q)) { q -= 2; continue; } if (c > r && !f) f = !0; else if (c > r && f) continue; s.dataPoints[q].label && (a.axisX.labels[c] = s.dataPoints[q].label); c < b.viewPortMin && (b.viewPortMin = c); c > b.viewPortMax && (b.viewPortMax = c); null === e ? b.viewPortMin === c && B < c && (b.viewPortMin = B) : ((a.yTotals[c] = (a.yTotals[c] ? a.yTotals[c] : 0) + e), 0 <= e ? (m = !0) : 0 > e && (l = !0), (w[c] = w[c] ? w[c] + Math.abs(e) : Math.abs(e))); } } s.axisX.valueType = s.xValueType = g ? "dateTime" : "number"; } a.axisY.logarithmic ? ((d.max = u(d.viewPortMax) ? 99 * Math.pow(a.axisY.logarithmBase, -0.05) : Math.max( d.viewPortMax, 99 * Math.pow(a.axisY.logarithmBase, -0.05) )), (d.min = u(d.viewPortMin) ? 1 : Math.min(d.viewPortMin, 1))) : m && !l ? ((d.max = u(d.viewPortMax) ? 99 : Math.max(d.viewPortMax, 99)), (d.min = u(d.viewPortMin) ? 1 : Math.min(d.viewPortMin, 1))) : m && l ? ((d.max = u(d.viewPortMax) ? 99 : Math.max(d.viewPortMax, 99)), (d.min = u(d.viewPortMin) ? -99 : Math.min(d.viewPortMin, -99))) : !m && l && ((d.max = u(d.viewPortMax) ? -1 : Math.max(d.viewPortMax, -1)), (d.min = u(d.viewPortMin) ? -99 : Math.min(d.viewPortMin, -99))); d.viewPortMin = d.min; d.viewPortMax = d.max; a.dataPointYSums = w; } }; p.prototype._processMultiYPlotUnit = function (a) { if (a.dataSeriesIndexes && !(1 > a.dataSeriesIndexes.length)) for ( var d = a.axisY.dataInfo, b = a.axisX.dataInfo, c, e, g, m, l = !1, w = 0; w < a.dataSeriesIndexes.length; w++ ) { var h = this.data[a.dataSeriesIndexes[w]], s = 0, q = !1, n = !1, f, B, k; if ("normal" === h.axisPlacement || "xySwapped" === h.axisPlacement) var r = a.axisX.sessionVariables.newViewportMinimum ? a.axisX.sessionVariables.newViewportMinimum : this.options.axisX && this.options.axisX.viewportMinimum ? this.options.axisX.viewportMinimum : this.options.axisX && this.options.axisX.minimum ? this.options.axisX.minimum : a.axisX.logarithmic ? 0 : -Infinity, t = a.axisX.sessionVariables.newViewportMaximum ? a.axisX.sessionVariables.newViewportMaximum : this.options.axisX && this.options.axisX.viewportMaximum ? this.options.axisX.viewportMaximum : this.options.axisX && this.options.axisX.maximum ? this.options.axisX.maximum : Infinity; if ( (h.dataPoints[s].x && h.dataPoints[s].x.getTime) || "dateTime" === h.xValueType ) l = !0; for (s = 0; s < h.dataPoints.length; s++) { "undefined" === typeof h.dataPoints[s].x && (h.dataPoints[s].x = s + (a.axisX.logarithmic ? 1 : 0)); h.dataPoints[s].x.getTime ? ((l = !0), (c = h.dataPoints[s].x.getTime())) : (c = h.dataPoints[s].x); if ((e = h.dataPoints[s].y) && e.length) { g = Math.min.apply(null, e); m = Math.max.apply(null, e); B = !0; for (var p = 0; p < e.length; p++) null === e.k && (B = !1); B && (q || (k = f), (f = c)); } c < b.min && (b.min = c); c > b.max && (b.max = c); g < d.min && (d.min = g); m > d.max && (d.max = m); 0 < s && (a.axisX.logarithmic ? ((B = c / h.dataPoints[s - 1].x), 1 > B && (B = 1 / B), b.minDiff > B && 1 !== B && (b.minDiff = B)) : ((B = c - h.dataPoints[s - 1].x), 0 > B && (B *= -1), b.minDiff > B && 0 !== B && (b.minDiff = B)), e && null !== e[0] && h.dataPoints[s - 1].y && null !== h.dataPoints[s - 1].y[0] && (a.axisY.logarithmic ? ((B = e[0] / h.dataPoints[s - 1].y[0]), 1 > B && (B = 1 / B), d.minDiff > B && 1 !== B && (d.minDiff = B)) : ((B = e[0] - h.dataPoints[s - 1].y[0]), 0 > B && (B *= -1), d.minDiff > B && 0 !== B && (d.minDiff = B)))); if (!(c < r) || q) { if (!q && ((q = !0), 0 < s)) { s -= 2; f = k; continue; } if (c > t && !n) n = !0; else if (c > t && n) continue; h.dataPoints[s].label && (a.axisX.labels[c] = h.dataPoints[s].label); c < b.viewPortMin && (b.viewPortMin = c); c > b.viewPortMax && (b.viewPortMax = c); if (b.viewPortMin === c && e) for (p = 0; p < e.length; p++) if (null === e[p] && f < c) { b.viewPortMin = f; break; } null === e ? b.viewPortMin === c && f < c && (b.viewPortMin = f) : (g < d.viewPortMin && (d.viewPortMin = g), m > d.viewPortMax && (d.viewPortMax = m)); } } h.axisX.valueType = h.xValueType = l ? "dateTime" : "number"; } }; p.prototype._processSpecificPlotUnit = function (a) { if ( "waterfall" === a.type && a.dataSeriesIndexes && !(1 > a.dataSeriesIndexes.length) ) for ( var d = a.axisY.dataInfo, b = a.axisX.dataInfo, c, e, g = !1, m = 0; m < a.dataSeriesIndexes.length; m++ ) { var l = this.data[a.dataSeriesIndexes[m]], w = 0, h = !1, s = !1, q = (c = 0); if ("normal" === l.axisPlacement || "xySwapped" === l.axisPlacement) var n = a.axisX.sessionVariables.newViewportMinimum ? a.axisX.sessionVariables.newViewportMinimum : this.options.axisX && this.options.axisX.viewportMinimum ? this.options.axisX.viewportMinimum : this.options.axisX && this.options.axisX.minimum ? this.options.axisX.minimum : a.axisX.logarithmic ? 0 : -Infinity, f = a.axisX.sessionVariables.newViewportMaximum ? a.axisX.sessionVariables.newViewportMaximum : this.options.axisX && this.options.axisX.viewportMaximum ? this.options.axisX.viewportMaximum : this.options.axisX && this.options.axisX.maximum ? this.options.axisX.maximum : Infinity; if ( (l.dataPoints[w].x && l.dataPoints[w].x.getTime) || "dateTime" === l.xValueType ) g = !0; for (w = 0; w < l.dataPoints.length; w++) "undefined" !== typeof l.dataPoints[w].isCumulativeSum && !0 === l.dataPoints[w].isCumulativeSum ? ((l.dataPointEOs[w].cumulativeSumYStartValue = 0), (l.dataPointEOs[w].cumulativeSum = 0 === w ? 0 : l.dataPointEOs[w - 1].cumulativeSum), (l.dataPoints[w].y = 0 === w ? 0 : l.dataPointEOs[w - 1].cumulativeSum)) : "undefined" !== typeof l.dataPoints[w].isIntermediateSum && !0 === l.dataPoints[w].isIntermediateSum ? ((l.dataPointEOs[w].cumulativeSumYStartValue = q), (l.dataPointEOs[w].cumulativeSum = 0 === w ? 0 : l.dataPointEOs[w - 1].cumulativeSum), (l.dataPoints[w].y = 0 === w ? 0 : c), (q = 0 === w ? 0 : l.dataPointEOs[w - 1].cumulativeSum), (c = 0)) : ((e = "number" !== typeof l.dataPoints[w].y ? 0 : l.dataPoints[w].y), (l.dataPointEOs[w].cumulativeSumYStartValue = 0 === w ? 0 : l.dataPointEOs[w - 1].cumulativeSum), (l.dataPointEOs[w].cumulativeSum = 0 === w ? e : l.dataPointEOs[w - 1].cumulativeSum + e), (c += e)); for (w = 0; w < l.dataPoints.length; w++) if ( ("undefined" === typeof l.dataPoints[w].x && (l.dataPoints[w].x = w + (a.axisX.logarithmic ? 1 : 0)), l.dataPoints[w].x.getTime ? ((g = !0), (c = l.dataPoints[w].x.getTime())) : (c = l.dataPoints[w].x), (e = l.dataPoints[w].y), c < b.min && (b.min = c), c > b.max && (b.max = c), l.dataPointEOs[w].cumulativeSum < d.min && (d.min = l.dataPointEOs[w].cumulativeSum), l.dataPointEOs[w].cumulativeSum > d.max && (d.max = l.dataPointEOs[w].cumulativeSum), 0 < w && (a.axisX.logarithmic ? ((q = c / l.dataPoints[w - 1].x), 1 > q && (q = 1 / q), b.minDiff > q && 1 !== q && (b.minDiff = q)) : ((q = c - l.dataPoints[w - 1].x), 0 > q && (q *= -1), b.minDiff > q && 0 !== q && (b.minDiff = q)), null !== e && null !== l.dataPoints[w - 1].y && (a.axisY.logarithmic ? ((e = l.dataPointEOs[w].cumulativeSum / l.dataPointEOs[w - 1].cumulativeSum), 1 > e && (e = 1 / e), d.minDiff > e && 1 !== e && (d.minDiff = e)) : ((e = l.dataPointEOs[w].cumulativeSum - l.dataPointEOs[w - 1].cumulativeSum), 0 > e && (e *= -1), d.minDiff > e && 0 !== e && (d.minDiff = e)))), !(c < n) || h) ) { if (!h && ((h = !0), 0 < w)) { w -= 2; continue; } if (c > f && !s) s = !0; else if (c > f && s) continue; l.dataPoints[w].label && (a.axisX.labels[c] = l.dataPoints[w].label); c < b.viewPortMin && (b.viewPortMin = c); c > b.viewPortMax && (b.viewPortMax = c); 0 < w && (l.dataPointEOs[w - 1].cumulativeSum < d.viewPortMin && (d.viewPortMin = l.dataPointEOs[w - 1].cumulativeSum), l.dataPointEOs[w - 1].cumulativeSum > d.viewPortMax && (d.viewPortMax = l.dataPointEOs[w - 1].cumulativeSum)); l.dataPointEOs[w].cumulativeSum < d.viewPortMin && (d.viewPortMin = l.dataPointEOs[w].cumulativeSum); l.dataPointEOs[w].cumulativeSum > d.viewPortMax && (d.viewPortMax = l.dataPointEOs[w].cumulativeSum); } l.axisX.valueType = l.xValueType = g ? "dateTime" : "number"; } }; p.prototype.calculateAutoBreaks = function () { function a(a, c, b, e) { if (e) return ( (b = Math.pow(Math.min((b * a) / c, c / a), 0.2)), 1 >= b && (b = Math.pow(1 > a ? 1 / a : Math.min(c / a, a), 0.25)), { startValue: a * b, endValue: c / b } ); b = 0.2 * Math.min(b - c + a, c - a); 0 >= b && (b = 0.25 * Math.min(c - a, Math.abs(a))); return { startValue: a + b, endValue: c - b }; } function d(a) { if (a.dataSeriesIndexes && !(1 > a.dataSeriesIndexes.length)) { var c = a.axisX.scaleBreaks && a.axisX.scaleBreaks.autoCalculate && 1 <= a.axisX.scaleBreaks.maxNumberOfAutoBreaks, b = a.axisY.scaleBreaks && a.axisY.scaleBreaks.autoCalculate && 1 <= a.axisY.scaleBreaks.maxNumberOfAutoBreaks; if (c || b) for ( var d = a.axisY.dataInfo, f = a.axisX.dataInfo, g, h = f.min, l = f.max, m = d.min, n = d.max, f = f._dataRanges, d = d._dataRanges, q, w = 0, s = 0; s < a.dataSeriesIndexes.length; s++ ) { var k = e.data[a.dataSeriesIndexes[s]]; if (!(4 > k.dataPoints.length)) for (w = 0; w < k.dataPoints.length; w++) if ( (c && ((q = ((l + 1 - h) * Math.max( parseFloat( a.axisX.scaleBreaks.collapsibleThreshold ) || 10, 10 )) / 100), (g = k.dataPoints[w].x.getTime ? k.dataPoints[w].x.getTime() : k.dataPoints[w].x), (q = Math.floor((g - h) / q)), g < f[q].min && (f[q].min = g), g > f[q].max && (f[q].max = g)), b) ) { var r = ((n + 1 - m) * Math.max( parseFloat( a.axisY.scaleBreaks.collapsibleThreshold ) || 10, 10 )) / 100; if ( (g = "waterfall" === a.type ? k.dataPointEOs[w].cumulativeSum : k.dataPoints[w].y) && g.length ) for (var p = 0; p < g.length; p++) (q = Math.floor((g[p] - m) / r)), g[p] < d[q].min && (d[q].min = g[p]), g[p] > d[q].max && (d[q].max = g[p]); else u(g) || ((q = Math.floor((g - m) / r)), g < d[q].min && (d[q].min = g), g > d[q].max && (d[q].max = g)); } } } } function b(a) { if ( a.dataSeriesIndexes && !(1 > a.dataSeriesIndexes.length) && a.axisX.scaleBreaks && a.axisX.scaleBreaks.autoCalculate && 1 <= a.axisX.scaleBreaks.maxNumberOfAutoBreaks ) for ( var c = a.axisX.dataInfo, b = c.min, d = c.max, f = c._dataRanges, g, h = 0, l = 0; l < a.dataSeriesIndexes.length; l++ ) { var m = e.data[a.dataSeriesIndexes[l]]; if (!(4 > m.dataPoints.length)) for (h = 0; h < m.dataPoints.length; h++) (g = ((d + 1 - b) * Math.max( parseFloat(a.axisX.scaleBreaks.collapsibleThreshold) || 10, 10 )) / 100), (c = m.dataPoints[h].x.getTime ? m.dataPoints[h].x.getTime() : m.dataPoints[h].x), (g = Math.floor((c - b) / g)), c < f[g].min && (f[g].min = c), c > f[g].max && (f[g].max = c); } } for (var c, e = this, g = !1, m = 0; m < this._axes.length; m++) if ( this._axes[m].scaleBreaks && this._axes[m].scaleBreaks.autoCalculate && 1 <= this._axes[m].scaleBreaks.maxNumberOfAutoBreaks ) { g = !0; this._axes[m].dataInfo._dataRanges = []; for ( var l = 0; l < 100 / Math.max( parseFloat(this._axes[m].scaleBreaks.collapsibleThreshold) || 10, 10 ); l++ ) this._axes[m].dataInfo._dataRanges.push({ min: Infinity, max: -Infinity, }); } if (g) { for (m = 0; m < this.plotInfo.plotTypes.length; m++) for ( g = this.plotInfo.plotTypes[m], l = 0; l < g.plotUnits.length; l++ ) (c = g.plotUnits[l]), "line" === c.type || "stepLine" === c.type || "spline" === c.type || "column" === c.type || "area" === c.type || "stepArea" === c.type || "splineArea" === c.type || "bar" === c.type || "bubble" === c.type || "scatter" === c.type || "candlestick" === c.type || "ohlc" === c.type || "rangeColumn" === c.type || "rangeBar" === c.type || "rangeArea" === c.type || "rangeSplineArea" === c.type || "waterfall" === c.type || "error" === c.type || "boxAndWhisker" === c.type ? d(c) : 0 <= c.type.indexOf("stacked") && b(c); for (m = 0; m < this._axes.length; m++) if (this._axes[m].dataInfo._dataRanges) { var w = this._axes[m].dataInfo.min; c = ((this._axes[m].dataInfo.max + 1 - w) * Math.max( parseFloat(this._axes[m].scaleBreaks.collapsibleThreshold) || 10, 10 )) / 100; var h = this._axes[m].dataInfo._dataRanges, s, q, g = []; if (this._axes[m].dataInfo.dataPointYPositiveSums) { var n = this._axes[m].dataInfo.dataPointYPositiveSums; s = h; for (l in n) if (n.hasOwnProperty(l) && !isNaN(l) && ((q = n[l]), !u(q))) { var f = Math.floor((q - w) / c); q < s[f].min && (s[f].min = q); q > s[f].max && (s[f].max = q); } delete this._axes[m].dataInfo.dataPointYPositiveSums; } if (this._axes[m].dataInfo.dataPointYNegativeSums) { n = this._axes[m].dataInfo.dataPointYNegativeSums; s = h; for (l in n) n.hasOwnProperty(l) && !isNaN(l) && ((q = -1 * n[l]), u(q) || ((f = Math.floor((q - w) / c)), q < s[f].min && (s[f].min = q), q > s[f].max && (s[f].max = q))); delete this._axes[m].dataInfo.dataPointYNegativeSums; } for (l = 0; l < h.length - 1; l++) if (((s = h[l].max), isFinite(s))) for (; l < h.length - 1; ) if (((w = h[l + 1].min), isFinite(w))) { q = w - s; q > c && g.push({ diff: q, start: s, end: w }); break; } else l++; if (this._axes[m].scaleBreaks.customBreaks) for ( l = 0; l < this._axes[m].scaleBreaks.customBreaks.length; l++ ) for (c = 0; c < g.length; c++) if ( (this._axes[m].scaleBreaks.customBreaks[l].startValue <= g[c].start && g[c].start <= this._axes[m].scaleBreaks.customBreaks[l].endValue) || (this._axes[m].scaleBreaks.customBreaks[l].startValue <= g[c].start && g[c].start <= this._axes[m].scaleBreaks.customBreaks[l].endValue) || (g[c].start <= this._axes[m].scaleBreaks.customBreaks[l].startValue && this._axes[m].scaleBreaks.customBreaks[l].startValue <= g[c].end) || (g[c].start <= this._axes[m].scaleBreaks.customBreaks[l].endValue && this._axes[m].scaleBreaks.customBreaks[l].endValue <= g[c].end) ) g.splice(c, 1), c--; g.sort(function (a, c) { return c.diff - a.diff; }); for ( l = 0; l < Math.min( g.length, this._axes[m].scaleBreaks.maxNumberOfAutoBreaks ); l++ ) (c = a( g[l].start, g[l].end, this._axes[m].logarithmic ? this._axes[m].dataInfo.max / this._axes[m].dataInfo.min : this._axes[m].dataInfo.max - this._axes[m].dataInfo.min, this._axes[m].logarithmic )), this._axes[m].scaleBreaks.autoBreaks.push( new L( this, "autoBreaks", c, l, ++this._eventManager.lastObjectId, this._axes[m].scaleBreaks ) ), this._axes[m].scaleBreaks._appliedBreaks.push( this._axes[m].scaleBreaks.autoBreaks[ this._axes[m].scaleBreaks.autoBreaks.length - 1 ] ); this._axes[m].scaleBreaks._appliedBreaks.sort(function (a, c) { return a.startValue - c.startValue; }); } } }; p.prototype.getDataPointAtXY = function (a, d, b) { b = b || !1; for (var c = [], e = this._dataInRenderedOrder.length - 1; 0 <= e; e--) { var g = null; (g = this._dataInRenderedOrder[e].getDataPointAtXY(a, d, b)) && c.push(g); } a = null; d = !1; for (b = 0; b < c.length; b++) if ( "line" === c[b].dataSeries.type || "stepLine" === c[b].dataSeries.type || "area" === c[b].dataSeries.type || "stepArea" === c[b].dataSeries.type ) if ( ((e = na("markerSize", c[b].dataPoint, c[b].dataSeries) || 8), c[b].distance <= e / 2) ) { d = !0; break; } for (b = 0; b < c.length; b++) (d && "line" !== c[b].dataSeries.type && "stepLine" !== c[b].dataSeries.type && "area" !== c[b].dataSeries.type && "stepArea" !== c[b].dataSeries.type) || (a ? c[b].distance <= a.distance && (a = c[b]) : (a = c[b])); return a; }; p.prototype.getObjectAtXY = function (a, d, b) { var c = null; if ((b = this.getDataPointAtXY(a, d, b || !1))) c = b.dataSeries.dataPointIds[b.dataPointIndex]; else if (r) c = ab(a, d, this._eventManager.ghostCtx); else for (b = 0; b < this.legend.items.length; b++) { var e = this.legend.items[b]; a >= e.x1 && a <= e.x2 && d >= e.y1 && d <= e.y2 && (c = e.id); } return c; }; p.prototype.getAutoFontSize = lb; p.prototype.resetOverlayedCanvas = function () { this.overlaidCanvasCtx.clearRect(0, 0, this.width, this.height); }; p.prototype.clearCanvas = kb; p.prototype.attachEvent = function (a) { this._events.push(a); }; p.prototype._touchEventHandler = function (a) { if (a.changedTouches && this.interactivityEnabled) { var d = [], b = a.changedTouches, c = b ? b[0] : a, e = null; switch (a.type) { case "touchstart": case "MSPointerDown": d = ["mousemove", "mousedown"]; this._lastTouchData = Ra(c); this._lastTouchData.time = new Date(); break; case "touchmove": case "MSPointerMove": d = ["mousemove"]; break; case "touchend": case "MSPointerUp": var g = this._lastTouchData && this._lastTouchData.time ? new Date() - this._lastTouchData.time : 0, d = "touchstart" === this._lastTouchEventType || "MSPointerDown" === this._lastTouchEventType || 300 > g ? ["mouseup", "click"] : ["mouseup"]; break; default: return; } if (!(b && 1 < b.length)) { e = Ra(c); e.time = new Date(); try { var m = e.y - this._lastTouchData.y, g = e.time - this._lastTouchData.time; if ( (1 < Math.abs(m) && this._lastTouchData.scroll) || (5 < Math.abs(m) && 250 > g) ) this._lastTouchData.scroll = !0; } catch (l) {} this._lastTouchEventType = a.type; if (this._lastTouchData.scroll && this.zoomEnabled) this.isDrag && this.resetOverlayedCanvas(), (this.isDrag = !1); else for (b = 0; b < d.length; b++) if ( ((e = d[b]), (m = document.createEvent("MouseEvent")), m.initMouseEvent( e, !0, !0, window, 1, c.screenX, c.screenY, c.clientX, c.clientY, !1, !1, !1, !1, 0, null ), c.target.dispatchEvent(m), (!u(this._lastTouchData.scroll) && !this._lastTouchData.scroll) || (!this._lastTouchData.scroll && 250 < g) || "click" === e) ) a.preventManipulation && a.preventManipulation(), a.preventDefault && a.preventDefault(); } } }; p.prototype._dispatchRangeEvent = function (a, d) { var b = { chart: this }; b.type = a; b.trigger = d; var c = []; this.axisX && 0 < this.axisX.length && c.push("axisX"); this.axisX2 && 0 < this.axisX2.length && c.push("axisX2"); this.axisY && 0 < this.axisY.length && c.push("axisY"); this.axisY2 && 0 < this.axisY2.length && c.push("axisY2"); for (var e = 0; e < c.length; e++) if ((u(b[c[e]]) && (b[c[e]] = []), "axisY" === c[e])) for (var g = 0; g < this.axisY.length; g++) b[c[e]].push({ viewportMinimum: this[c[e]][g].sessionVariables.newViewportMinimum, viewportMaximum: this[c[e]][g].sessionVariables.newViewportMaximum, }); else if ("axisY2" === c[e]) for (g = 0; g < this.axisY2.length; g++) b[c[e]].push({ viewportMinimum: this[c[e]][g].sessionVariables.newViewportMinimum, viewportMaximum: this[c[e]][g].sessionVariables.newViewportMaximum, }); else if ("axisX" === c[e]) for (g = 0; g < this.axisX.length; g++) b[c[e]].push({ viewportMinimum: this[c[e]][g].sessionVariables.newViewportMinimum, viewportMaximum: this[c[e]][g].sessionVariables.newViewportMaximum, }); else if ("axisX2" === c[e]) for (g = 0; g < this.axisX2.length; g++) b[c[e]].push({ viewportMinimum: this[c[e]][g].sessionVariables.newViewportMinimum, viewportMaximum: this[c[e]][g].sessionVariables.newViewportMaximum, }); this.dispatchEvent(a, b, this); }; p.prototype._mouseEventHandler = function (a) { "undefined" === typeof a.target && a.srcElement && (a.target = a.srcElement); var d = Ra(a), b = a.type, c, e; a.which ? (e = 3 == a.which) : a.button && (e = 2 == a.button); p.capturedEventParam && ((c = p.capturedEventParam), "mouseup" === b && ((p.capturedEventParam = null), c.chart.overlaidCanvas.releaseCapture ? c.chart.overlaidCanvas.releaseCapture() : document.documentElement.removeEventListener( "mouseup", c.chart._mouseEventHandler, !1 )), c.hasOwnProperty(b) && ("mouseup" !== b || c.chart.overlaidCanvas.releaseCapture ? (a.target !== c.chart.overlaidCanvas && r) || c[b].call(c.context, d.x, d.y) : a.target !== c.chart.overlaidCanvas && (c.chart.isDrag = !1))); if (this.interactivityEnabled) if (this._ignoreNextEvent) this._ignoreNextEvent = !1; else if ( (a.preventManipulation && a.preventManipulation(), a.preventDefault && a.preventDefault(), Ja && window.console && (window.console.log(b + " --\x3e x: " + d.x + "; y:" + d.y), e && window.console.log(a.which), "mouseup" === b && window.console.log("mouseup")), !e) ) { if (!p.capturedEventParam && this._events) { for (var g = 0; g < this._events.length; g++) if (this._events[g].hasOwnProperty(b)) if ( ((c = this._events[g]), (e = c.bounds), d.x >= e.x1 && d.x <= e.x2 && d.y >= e.y1 && d.y <= e.y2) ) { c[b].call(c.context, d.x, d.y); "mousedown" === b && !0 === c.capture ? ((p.capturedEventParam = c), this.overlaidCanvas.setCapture ? this.overlaidCanvas.setCapture() : document.documentElement.addEventListener( "mouseup", this._mouseEventHandler, !1 )) : "mouseup" === b && (c.chart.overlaidCanvas.releaseCapture ? c.chart.overlaidCanvas.releaseCapture() : document.documentElement.removeEventListener( "mouseup", this._mouseEventHandler, !1 )); break; } else c = null; a.target.style.cursor = c && c.cursor ? c.cursor : this._defaultCursor; } b = this.plotArea; if (d.x < b.x1 || d.x > b.x2 || d.y < b.y1 || d.y > b.y2) this.toolTip && this.toolTip.enabled ? this.toolTip.hide() : this.resetOverlayedCanvas(); (this.isDrag && this.zoomEnabled) || !this._eventManager || this._eventManager.mouseEventHandler(a); } }; p.prototype._plotAreaMouseDown = function (a, d) { this.isDrag = !0; this.dragStartPoint = { x: a, y: d }; }; p.prototype._plotAreaMouseUp = function (a, d) { if ( ("normal" === this.plotInfo.axisPlacement || "xySwapped" === this.plotInfo.axisPlacement) && this.isDrag ) { var b = d - this.dragStartPoint.y, c = a - this.dragStartPoint.x, e = 0 <= this.zoomType.indexOf("x"), g = 0 <= this.zoomType.indexOf("y"), m = !1; this.resetOverlayedCanvas(); if ("xySwapped" === this.plotInfo.axisPlacement) var l = g, g = e, e = l; if (this.panEnabled || this.zoomEnabled) { if (this.panEnabled) for (e = g = 0; e < this._axes.length; e++) (b = this._axes[e]), b.logarithmic ? b.viewportMinimum < b.minimum ? ((g = b.minimum / b.viewportMinimum), (b.sessionVariables.newViewportMinimum = b.viewportMinimum * g), (b.sessionVariables.newViewportMaximum = b.viewportMaximum * g), (m = !0)) : b.viewportMaximum > b.maximum && ((g = b.viewportMaximum / b.maximum), (b.sessionVariables.newViewportMinimum = b.viewportMinimum / g), (b.sessionVariables.newViewportMaximum = b.viewportMaximum / g), (m = !0)) : b.viewportMinimum < b.minimum ? ((g = b.minimum - b.viewportMinimum), (b.sessionVariables.newViewportMinimum = b.viewportMinimum + g), (b.sessionVariables.newViewportMaximum = b.viewportMaximum + g), (m = !0)) : b.viewportMaximum > b.maximum && ((g = b.viewportMaximum - b.maximum), (b.sessionVariables.newViewportMinimum = b.viewportMinimum - g), (b.sessionVariables.newViewportMaximum = b.viewportMaximum - g), (m = !0)); else if ( (!e || 2 < Math.abs(c)) && (!g || 2 < Math.abs(b)) && this.zoomEnabled ) { if (!this.dragStartPoint) return; b = e ? this.dragStartPoint.x : this.plotArea.x1; c = g ? this.dragStartPoint.y : this.plotArea.y1; e = e ? a : this.plotArea.x2; g = g ? d : this.plotArea.y2; 2 < Math.abs(b - e) && 2 < Math.abs(c - g) && this._zoomPanToSelectedRegion(b, c, e, g) && (m = !0); } m && ((this._ignoreNextEvent = !0), this._dispatchRangeEvent("rangeChanging", "zoom"), this.render(), this._dispatchRangeEvent("rangeChanged", "zoom"), m && this.zoomEnabled && "none" === this._zoomButton.style.display && (Qa(this._zoomButton, this._resetButton), ua(this, this._zoomButton, "pan"), ua(this, this._resetButton, "reset"))); } } this.isDrag = !1; if ("none" !== this.plotInfo.axisPlacement) { this.resetOverlayedCanvas(); if (this.axisX && 0 < this.axisX.length) for (m = 0; m < this.axisX.length; m++) this.axisX[m].crosshair && this.axisX[m].crosshair.enabled && this.axisX[m].renderCrosshair(a, d); if (this.axisX2 && 0 < this.axisX2.length) for (m = 0; m < this.axisX2.length; m++) this.axisX2[m].crosshair && this.axisX2[m].crosshair.enabled && this.axisX2[m].renderCrosshair(a, d); if (this.axisY && 0 < this.axisY.length) for (m = 0; m < this.axisY.length; m++) this.axisY[m].crosshair && this.axisY[m].crosshair.enabled && this.axisY[m].renderCrosshair(a, d); if (this.axisY2 && 0 < this.axisY2.length) for (m = 0; m < this.axisY2.length; m++) this.axisY2[m].crosshair && this.axisY2[m].crosshair.enabled && this.axisY2[m].renderCrosshair(a, d); } }; p.prototype._plotAreaMouseMove = function (a, d) { if (this.isDrag && "none" !== this.plotInfo.axisPlacement) { var b = 0, c = 0, e = (b = null), e = 0 <= this.zoomType.indexOf("x"), g = 0 <= this.zoomType.indexOf("y"), m = this; "xySwapped" === this.plotInfo.axisPlacement && ((b = g), (g = e), (e = b)); b = this.dragStartPoint.x - a; c = this.dragStartPoint.y - d; 2 < Math.abs(b) && 8 > Math.abs(b) && (this.panEnabled || this.zoomEnabled) ? this.toolTip.hide() : this.panEnabled || this.zoomEnabled || this.toolTip.mouseMoveHandler(a, d); if ( (!e || 2 < Math.abs(b) || !g || 2 < Math.abs(c)) && (this.panEnabled || this.zoomEnabled) ) if (this.panEnabled) (e = { x1: e ? this.plotArea.x1 + b : this.plotArea.x1, y1: g ? this.plotArea.y1 + c : this.plotArea.y1, x2: e ? this.plotArea.x2 + b : this.plotArea.x2, y2: g ? this.plotArea.y2 + c : this.plotArea.y2, }), clearTimeout(m._panTimerId), (m._panTimerId = setTimeout( (function (c, b, e, f) { return function () { m._zoomPanToSelectedRegion(c, b, e, f, !0) && (m._dispatchRangeEvent("rangeChanging", "pan"), m.render(), m._dispatchRangeEvent("rangeChanged", "pan"), (m.dragStartPoint.x = a), (m.dragStartPoint.y = d)); }; })(e.x1, e.y1, e.x2, e.y2), 0 )); else if (this.zoomEnabled) { this.resetOverlayedCanvas(); b = this.overlaidCanvasCtx.globalAlpha; this.overlaidCanvasCtx.fillStyle = "#A89896"; var c = e ? this.dragStartPoint.x : this.plotArea.x1, l = g ? this.dragStartPoint.y : this.plotArea.y1, w = e ? a - this.dragStartPoint.x : this.plotArea.x2 - this.plotArea.x1, h = g ? d - this.dragStartPoint.y : this.plotArea.y2 - this.plotArea.y1; this.validateRegion( c, l, e ? a : this.plotArea.x2 - this.plotArea.x1, g ? d : this.plotArea.y2 - this.plotArea.y1, "xy" !== this.zoomType ).isValid && (this.resetOverlayedCanvas(), (this.overlaidCanvasCtx.fillStyle = "#99B2B5")); this.overlaidCanvasCtx.globalAlpha = 0.7; this.overlaidCanvasCtx.fillRect(c, l, w, h); this.overlaidCanvasCtx.globalAlpha = b; } } else if ( (this.toolTip.mouseMoveHandler(a, d), "none" !== this.plotInfo.axisPlacement) ) { if (this.axisX && 0 < this.axisX.length) for (e = 0; e < this.axisX.length; e++) this.axisX[e].crosshair && this.axisX[e].crosshair.enabled && this.axisX[e].renderCrosshair(a, d); if (this.axisX2 && 0 < this.axisX2.length) for (e = 0; e < this.axisX2.length; e++) this.axisX2[e].crosshair && this.axisX2[e].crosshair.enabled && this.axisX2[e].renderCrosshair(a, d); if (this.axisY && 0 < this.axisY.length) for (e = 0; e < this.axisY.length; e++) this.axisY[e].crosshair && this.axisY[e].crosshair.enabled && this.axisY[e].renderCrosshair(a, d); if (this.axisY2 && 0 < this.axisY2.length) for (e = 0; e < this.axisY2.length; e++) this.axisY2[e].crosshair && this.axisY2[e].crosshair.enabled && this.axisY2[e].renderCrosshair(a, d); } }; p.prototype._zoomPanToSelectedRegion = function (a, d, b, c, e) { a = this.validateRegion(a, d, b, c, e); d = a.axesWithValidRange; b = a.axesRanges; if (a.isValid) for (c = 0; c < d.length; c++) (e = b[c]), d[c].setViewPortRange(e.val1, e.val2), this.syncCharts && this.syncCharts(e.val1, e.val2); return a.isValid; }; p.prototype.validateRegion = function (a, d, b, c, e) { e = e || !1; for ( var g = 0 <= this.zoomType.indexOf("x"), m = 0 <= this.zoomType.indexOf("y"), l = !1, w = [], h = [], s = [], q = 0; q < this._axes.length; q++ ) (("axisX" === this._axes[q].type && g) || ("axisY" === this._axes[q].type && m)) && h.push(this._axes[q]); for (m = 0; m < h.length; m++) { var q = h[m], g = !1, n = q.convertPixelToValue({ x: a, y: d }), f = q.convertPixelToValue({ x: b, y: c }); if (n > f) var B = f, f = n, n = B; if (q.scaleBreaks) for (B = 0; !g && B < q.scaleBreaks._appliedBreaks.length; B++) g = q.scaleBreaks._appliedBreaks[B].startValue <= n && q.scaleBreaks._appliedBreaks[B].endValue >= f; if (isFinite(q.dataInfo.minDiff)) if ( ((B = q.getApparentDifference(n, f, null, !0)), !( g || (!( this.panEnabled && q.scaleBreaks && q.scaleBreaks._appliedBreaks.length ) && ((q.logarithmic && B < Math.pow(q.dataInfo.minDiff, 3)) || (!q.logarithmic && B < 3 * Math.abs(q.dataInfo.minDiff)))) || n < q.minimum || f > q.maximum )) ) w.push(q), s.push({ val1: n, val2: f }), (l = !0); else if (!e) { l = !1; break; } } return { isValid: l, axesWithValidRange: w, axesRanges: s }; }; p.prototype.preparePlotArea = function () { var a = this.plotArea; !r && (0 < a.x1 || 0 < a.y1) && a.ctx.translate(a.x1, a.y1); if ( (this.axisX[0] || this.axisX2[0]) && (this.axisY[0] || this.axisY2[0]) ) { var d = this.axisX[0] ? this.axisX[0].lineCoordinates : this.axisX2[0].lineCoordinates; if (this.axisY && 0 < this.axisY.length && this.axisY[0]) { var b = this.axisY[0]; a.x1 = d.x1 < d.x2 ? d.x1 : b.lineCoordinates.x1; a.y1 = d.y1 < b.lineCoordinates.y1 ? d.y1 : b.lineCoordinates.y1; a.x2 = d.x2 > b.lineCoordinates.x2 ? d.x2 : b.lineCoordinates.x2; a.y2 = d.y2 > d.y1 ? d.y2 : b.lineCoordinates.y2; a.width = a.x2 - a.x1; a.height = a.y2 - a.y1; } this.axisY2 && 0 < this.axisY2.length && this.axisY2[0] && ((b = this.axisY2[0]), (a.x1 = d.x1 < d.x2 ? d.x1 : b.lineCoordinates.x1), (a.y1 = d.y1 < b.lineCoordinates.y1 ? d.y1 : b.lineCoordinates.y1), (a.x2 = d.x2 > b.lineCoordinates.x2 ? d.x2 : b.lineCoordinates.x2), (a.y2 = d.y2 > d.y1 ? d.y2 : b.lineCoordinates.y2), (a.width = a.x2 - a.x1), (a.height = a.y2 - a.y1)); } else (d = this.layoutManager.getFreeSpace()), (a.x1 = d.x1), (a.x2 = d.x2), (a.y1 = d.y1), (a.y2 = d.y2), (a.width = d.width), (a.height = d.height); r || ((a.canvas.width = a.width), (a.canvas.height = a.height), (a.canvas.style.left = a.x1 + "px"), (a.canvas.style.top = a.y1 + "px"), (0 < a.x1 || 0 < a.y1) && a.ctx.translate(-a.x1, -a.y1)); a.layoutManager = new Ga(a.x1, a.y1, a.x2, a.y2, 2); }; p.prototype.renderIndexLabels = function (a) { var d = a || this.plotArea.ctx, b = this.plotArea, c = 0, e = 0, g = 0, m = 0, l = (c = m = e = g = 0), w = 0; for (a = 0; a < this._indexLabels.length; a++) { var h = this._indexLabels[a], s = h.chartType.toLowerCase(), q, n, l = na("indexLabelFontColor", h.dataPoint, h.dataSeries), w = na("indexLabelFontSize", h.dataPoint, h.dataSeries); q = na("indexLabelFontFamily", h.dataPoint, h.dataSeries); n = na("indexLabelFontStyle", h.dataPoint, h.dataSeries); var m = na("indexLabelFontWeight", h.dataPoint, h.dataSeries), f = na("indexLabelBackgroundColor", h.dataPoint, h.dataSeries), e = na("indexLabelMaxWidth", h.dataPoint, h.dataSeries), g = na("indexLabelWrap", h.dataPoint, h.dataSeries), B = na("indexLabelLineDashType", h.dataPoint, h.dataSeries), k = na("indexLabelLineColor", h.dataPoint, h.dataSeries), p = u(h.dataPoint.indexLabelLineThickness) ? u(h.dataSeries.options.indexLabelLineThickness) ? 0 : h.dataSeries.options.indexLabelLineThickness : h.dataPoint.indexLabelLineThickness, c = 0 < p ? Math.min( 10, ("normal" === this.plotInfo.axisPlacement ? this.plotArea.height : this.plotArea.width) << 0 ) : 0, t = { percent: null, total: null }, C = null; if ( 0 <= h.dataSeries.type.indexOf("stacked") || "pie" === h.dataSeries.type || "doughnut" === h.dataSeries.type ) t = this.getPercentAndTotal(h.dataSeries, h.dataPoint); if (h.dataSeries.indexLabelFormatter || h.dataPoint.indexLabelFormatter) C = { chart: this, dataSeries: h.dataSeries, dataPoint: h.dataPoint, index: h.indexKeyword, total: t.total, percent: t.percent, }; var x = h.dataPoint.indexLabelFormatter ? h.dataPoint.indexLabelFormatter(C) : h.dataPoint.indexLabel ? this.replaceKeywordsWithValue( h.dataPoint.indexLabel, h.dataPoint, h.dataSeries, null, h.indexKeyword ) : h.dataSeries.indexLabelFormatter ? h.dataSeries.indexLabelFormatter(C) : h.dataSeries.indexLabel ? this.replaceKeywordsWithValue( h.dataSeries.indexLabel, h.dataPoint, h.dataSeries, null, h.indexKeyword ) : null; if (null !== x && "" !== x) { var t = na("indexLabelPlacement", h.dataPoint, h.dataSeries), C = na("indexLabelOrientation", h.dataPoint, h.dataSeries), ma = h.direction, y = h.dataSeries.axisX, A = h.dataSeries.axisY, v = !1, f = new ka(d, { x: 0, y: 0, maxWidth: e ? e : 0.5 * this.width, maxHeight: g ? 5 * w : 1.5 * w, angle: "horizontal" === C ? 0 : -90, text: x, padding: 0, backgroundColor: f, horizontalAlign: "left", fontSize: w, fontFamily: q, fontWeight: m, fontColor: l, fontStyle: n, textBaseline: "top", }); f.measureText(); h.dataSeries.indexLabelMaxWidth = f.maxWidth; if ("stackedarea100" === s) { if ( h.point.x < b.x1 || h.point.x > b.x2 || h.point.y < b.y1 - 1 || h.point.y > b.y2 + 1 ) continue; } else if ("rangearea" === s || "rangesplinearea" === s) { if ( h.dataPoint.x < y.viewportMinimum || h.dataPoint.x > y.viewportMaximum || Math.max.apply(null, h.dataPoint.y) < A.viewportMinimum || Math.min.apply(null, h.dataPoint.y) > A.viewportMaximum ) continue; } else if ( 0 <= s.indexOf("line") || 0 <= s.indexOf("area") || 0 <= s.indexOf("bubble") || 0 <= s.indexOf("scatter") ) { if ( h.dataPoint.x < y.viewportMinimum || h.dataPoint.x > y.viewportMaximum || h.dataPoint.y < A.viewportMinimum || h.dataPoint.y > A.viewportMaximum ) continue; } else if ( 0 <= s.indexOf("column") || "waterfall" === s || ("error" === s && !h.axisSwapped) ) { if ( h.dataPoint.x < y.viewportMinimum || h.dataPoint.x > y.viewportMaximum || h.bounds.y1 > b.y2 || h.bounds.y2 < b.y1 ) continue; } else if (0 <= s.indexOf("bar") || "error" === s) { if ( h.dataPoint.x < y.viewportMinimum || h.dataPoint.x > y.viewportMaximum || h.bounds.x1 > b.x2 || h.bounds.x2 < b.x1 ) continue; } else if ("candlestick" === s || "ohlc" === s) { if ( h.dataPoint.x < y.viewportMinimum || h.dataPoint.x > y.viewportMaximum || Math.max.apply(null, h.dataPoint.y) < A.viewportMinimum || Math.min.apply(null, h.dataPoint.y) > A.viewportMaximum ) continue; } else if ( h.dataPoint.x < y.viewportMinimum || h.dataPoint.x > y.viewportMaximum ) continue; e = m = 2; "horizontal" === C ? ((l = f.width), (w = f.height)) : ((w = f.width), (l = f.height)); if ("normal" === this.plotInfo.axisPlacement) { if (0 <= s.indexOf("line") || 0 <= s.indexOf("area")) (t = "auto"), (m = 4); else if (0 <= s.indexOf("stacked")) "auto" === t && (t = "inside"); else if ("bubble" === s || "scatter" === s) t = "inside"; q = h.point.x - l / 2; "inside" !== t ? ((e = b.y1), (g = b.y2), 0 < ma ? ((n = h.point.y - w - m - c), n < e && ((n = "auto" === t ? Math.max(h.point.y, e) + m + c : e + m + c), (v = n + w > h.point.y))) : ((n = h.point.y + m + c), n > g - w - m - c && ((n = "auto" === t ? Math.min(h.point.y, g) - w - m - c : g - w - m - c), (v = n < h.point.y)))) : ((e = Math.max(h.bounds.y1, b.y1)), (g = Math.min(h.bounds.y2, b.y2)), (c = 0 <= s.indexOf("range") || "error" === s ? 0 < ma ? Math.max(h.bounds.y1, b.y1) + w / 2 + m : Math.min(h.bounds.y2, b.y2) - w / 2 - m : (Math.max(h.bounds.y1, b.y1) + Math.min(h.bounds.y2, b.y2)) / 2), 0 < ma ? ((n = Math.max(h.point.y, c) - w / 2), n < e && ("bubble" === s || "scatter" === s) && (n = Math.max(h.point.y - w - m, b.y1 + m))) : ((n = Math.min(h.point.y, c) - w / 2), n > g - w - m && ("bubble" === s || "scatter" === s) && (n = Math.min(h.point.y + m, b.y2 - w - m))), (n = Math.min(n, g - w))); } else 0 <= s.indexOf("line") || 0 <= s.indexOf("area") || 0 <= s.indexOf("scatter") ? ((t = "auto"), (e = 4)) : 0 <= s.indexOf("stacked") ? "auto" === t && (t = "inside") : "bubble" === s && (t = "inside"), (n = h.point.y - w / 2), "inside" !== t ? ((m = b.x1), (g = b.x2), 0 > ma ? ((q = h.point.x - l - e - c), q < m && ((q = "auto" === t ? Math.max(h.point.x, m) + e + c : m + e + c), (v = q + l > h.point.x))) : ((q = h.point.x + e + c), q > g - l - e - c && ((q = "auto" === t ? Math.min(h.point.x, g) - l - e - c : g - l - e - c), (v = q < h.point.x)))) : ((m = Math.max(h.bounds.x1, b.x1)), Math.min(h.bounds.x2, b.x2), (c = 0 <= s.indexOf("range") || "error" === s ? 0 > ma ? Math.max(h.bounds.x1, b.x1) + l / 2 + e : Math.min(h.bounds.x2, b.x2) - l / 2 - e : (Math.max(h.bounds.x1, b.x1) + Math.min(h.bounds.x2, b.x2)) / 2), (q = 0 > ma ? Math.max(h.point.x, c) - l / 2 : Math.min(h.point.x, c) - l / 2), (q = Math.max(q, m))); "vertical" === C && (n += w); f.x = q; f.y = n; f.render(!0); p && "inside" !== t && ((0 > s.indexOf("bar") && ("error" !== s || !h.axisSwapped) && h.point.x > b.x1 && h.point.x < b.x2) || !v) && ((0 > s.indexOf("column") && ("error" !== s || h.axisSwapped) && h.point.y > b.y1 && h.point.y < b.y2) || !v) && ((d.lineWidth = p), (d.strokeStyle = k ? k : "gray"), d.setLineDash && d.setLineDash(R(B, p)), d.beginPath(), d.moveTo(h.point.x, h.point.y), 0 <= s.indexOf("bar") || ("error" === s && h.axisSwapped) ? d.lineTo( q + (0 < h.direction ? 0 : l), n + ("horizontal" === C ? w : -w) / 2 ) : 0 <= s.indexOf("column") || ("error" === s && !h.axisSwapped) ? d.lineTo( q + l / 2, n + ((0 < h.direction ? w : -w) + ("horizontal" === C ? w : -w)) / 2 ) : d.lineTo( q + l / 2, n + ((n < h.point.y ? w : -w) + ("horizontal" === C ? w : -w)) / 2 ), d.stroke()); } } d = { source: d, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, startTimePercent: 0.7, }; for (a = 0; a < this._indexLabels.length; a++) (h = this._indexLabels[a]), (f = na("indexLabelBackgroundColor", h.dataPoint, h.dataSeries)), (h.dataSeries.indexLabelBackgroundColor = u(f) ? r ? "transparent" : null : f); return d; }; p.prototype.renderLine = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = this._eventManager.ghostCtx; b.save(); var e = this.plotArea; b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); for (var g = [], m, l = 0; l < a.dataSeriesIndexes.length; l++) { var w = a.dataSeriesIndexes[l], h = this.data[w]; b.lineWidth = h.lineThickness; var s = h.dataPoints, q = "solid"; if (b.setLineDash) { var n = R(h.nullDataLineDashType, h.lineThickness), q = h.lineDashType, f = R(q, h.lineThickness); b.setLineDash(f); } var B = h.id; this._eventManager.objectMap[B] = { objectType: "dataSeries", dataSeriesIndex: w, }; B = N(B); c.strokeStyle = B; c.lineWidth = 0 < h.lineThickness ? Math.max(h.lineThickness, 4) : 0; var B = h._colorSet, k = (B = h.lineColor = h.options.lineColor ? h.options.lineColor : B[0]); b.strokeStyle = B; var p = !0, t = 0, C, x; b.beginPath(); if (0 < s.length) { for (var u = !1, t = 0; t < s.length; t++) if ( ((C = s[t].x.getTime ? s[t].x.getTime() : s[t].x), !( C < a.axisX.dataInfo.viewPortMin || (C > a.axisX.dataInfo.viewPortMax && (!h.connectNullData || !u)) )) ) if ("number" !== typeof s[t].y) 0 < t && !(h.connectNullData || u || p) && (b.stroke(), r && c.stroke()), (u = !0); else { C = a.axisX.convertValueToPixel(C); x = a.axisY.convertValueToPixel(s[t].y); var y = h.dataPointIds[t]; this._eventManager.objectMap[y] = { id: y, objectType: "dataPoint", dataSeriesIndex: w, dataPointIndex: t, x1: C, y1: x, }; p || u ? (!p && h.connectNullData ? (b.setLineDash && (h.options.nullDataLineDashType || (q === h.lineDashType && h.lineDashType !== h.nullDataLineDashType)) && (b.stroke(), b.beginPath(), b.moveTo(m.x, m.y), (q = h.nullDataLineDashType), b.setLineDash(n)), b.lineTo(C, x), r && c.lineTo(C, x)) : (b.beginPath(), b.moveTo(C, x), r && (c.beginPath(), c.moveTo(C, x))), (u = p = !1)) : (b.lineTo(C, x), r && c.lineTo(C, x), 0 == t % 500 && (b.stroke(), b.beginPath(), b.moveTo(C, x), r && (c.stroke(), c.beginPath(), c.moveTo(C, x)))); m = { x: C, y: x }; t < s.length - 1 && (k !== (s[t].lineColor || B) || q !== (s[t].lineDashType || h.lineDashType)) && (b.stroke(), b.beginPath(), b.moveTo(C, x), (k = s[t].lineColor || B), (b.strokeStyle = k), b.setLineDash && (s[t].lineDashType ? ((q = s[t].lineDashType), b.setLineDash(R(q, h.lineThickness))) : ((q = h.lineDashType), b.setLineDash(f)))); if (0 < s[t].markerSize || 0 < h.markerSize) { var A = h.getMarkerProperties(t, C, x, b); g.push(A); y = N(y); r && g.push({ x: C, y: x, ctx: c, type: A.type, size: A.size, color: y, borderColor: y, borderThickness: A.borderThickness, }); } (s[t].indexLabel || h.indexLabel || s[t].indexLabelFormatter || h.indexLabelFormatter) && this._indexLabels.push({ chartType: "line", dataPoint: s[t], dataSeries: h, point: { x: C, y: x }, direction: 0 > s[t].y === a.axisY.reversed ? 1 : -1, color: B, }); } b.stroke(); r && c.stroke(); } } ia.drawMarkers(g); r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), c.beginPath()); b.restore(); b.beginPath(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderStepLine = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = this._eventManager.ghostCtx; b.save(); var e = this.plotArea; b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); for (var g = [], m, l = 0; l < a.dataSeriesIndexes.length; l++) { var w = a.dataSeriesIndexes[l], h = this.data[w]; b.lineWidth = h.lineThickness; var s = h.dataPoints, q = "solid"; if (b.setLineDash) { var n = R(h.nullDataLineDashType, h.lineThickness), q = h.lineDashType, f = R(q, h.lineThickness); b.setLineDash(f); } var B = h.id; this._eventManager.objectMap[B] = { objectType: "dataSeries", dataSeriesIndex: w, }; B = N(B); c.strokeStyle = B; c.lineWidth = 0 < h.lineThickness ? Math.max(h.lineThickness, 4) : 0; var B = h._colorSet, k = (B = h.lineColor = h.options.lineColor ? h.options.lineColor : B[0]); b.strokeStyle = B; var p = !0, t = 0, C, x; b.beginPath(); if (0 < s.length) { for (var u = !1, t = 0; t < s.length; t++) if ( ((C = s[t].getTime ? s[t].x.getTime() : s[t].x), !( C < a.axisX.dataInfo.viewPortMin || (C > a.axisX.dataInfo.viewPortMax && (!h.connectNullData || !u)) )) ) if ("number" !== typeof s[t].y) 0 < t && !(h.connectNullData || u || p) && (b.stroke(), r && c.stroke()), (u = !0); else { var y = x; C = a.axisX.convertValueToPixel(C); x = a.axisY.convertValueToPixel(s[t].y); var A = h.dataPointIds[t]; this._eventManager.objectMap[A] = { id: A, objectType: "dataPoint", dataSeriesIndex: w, dataPointIndex: t, x1: C, y1: x, }; p || u ? (!p && h.connectNullData ? (b.setLineDash && (h.options.nullDataLineDashType || (q === h.lineDashType && h.lineDashType !== h.nullDataLineDashType)) && (b.stroke(), b.beginPath(), b.moveTo(m.x, m.y), (q = h.nullDataLineDashType), b.setLineDash(n)), b.lineTo(C, y), b.lineTo(C, x), r && (c.lineTo(C, y), c.lineTo(C, x))) : (b.beginPath(), b.moveTo(C, x), r && (c.beginPath(), c.moveTo(C, x))), (u = p = !1)) : (b.lineTo(C, y), r && c.lineTo(C, y), b.lineTo(C, x), r && c.lineTo(C, x), 0 == t % 500 && (b.stroke(), b.beginPath(), b.moveTo(C, x), r && (c.stroke(), c.beginPath(), c.moveTo(C, x)))); m = { x: C, y: x }; t < s.length - 1 && (k !== (s[t].lineColor || B) || q !== (s[t].lineDashType || h.lineDashType)) && (b.stroke(), b.beginPath(), b.moveTo(C, x), (k = s[t].lineColor || B), (b.strokeStyle = k), b.setLineDash && (s[t].lineDashType ? ((q = s[t].lineDashType), b.setLineDash(R(q, h.lineThickness))) : ((q = h.lineDashType), b.setLineDash(f)))); if (0 < s[t].markerSize || 0 < h.markerSize) (y = h.getMarkerProperties(t, C, x, b)), g.push(y), (A = N(A)), r && g.push({ x: C, y: x, ctx: c, type: y.type, size: y.size, color: A, borderColor: A, borderThickness: y.borderThickness, }); (s[t].indexLabel || h.indexLabel || s[t].indexLabelFormatter || h.indexLabelFormatter) && this._indexLabels.push({ chartType: "stepLine", dataPoint: s[t], dataSeries: h, point: { x: C, y: x }, direction: 0 > s[t].y === a.axisY.reversed ? 1 : -1, color: B, }); } b.stroke(); r && c.stroke(); } } ia.drawMarkers(g); r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), c.beginPath()); b.restore(); b.beginPath(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderSpline = function (a) { function d(a) { a = v(a, 2); if (0 < a.length) { c.beginPath(); r && e.beginPath(); c.moveTo(a[0].x, a[0].y); a[0].newStrokeStyle && (c.strokeStyle = a[0].newStrokeStyle); a[0].newLineDashArray && c.setLineDash(a[0].newLineDashArray); r && e.moveTo(a[0].x, a[0].y); for (var b = 0; b < a.length - 3; b += 3) if ( (c.bezierCurveTo( a[b + 1].x, a[b + 1].y, a[b + 2].x, a[b + 2].y, a[b + 3].x, a[b + 3].y ), r && e.bezierCurveTo( a[b + 1].x, a[b + 1].y, a[b + 2].x, a[b + 2].y, a[b + 3].x, a[b + 3].y ), (0 < b && 0 === b % 3e3) || a[b + 3].newStrokeStyle || a[b + 3].newLineDashArray) ) c.stroke(), c.beginPath(), c.moveTo(a[b + 3].x, a[b + 3].y), a[b + 3].newStrokeStyle && (c.strokeStyle = a[b + 3].newStrokeStyle), a[b + 3].newLineDashArray && c.setLineDash(a[b + 3].newLineDashArray), r && (e.stroke(), e.beginPath(), e.moveTo(a[b + 3].x, a[b + 3].y)); c.stroke(); r && e.stroke(); } } var b = a.targetCanvasCtx || this.plotArea.ctx, c = r ? this._preRenderCtx : b; if (!(0 >= a.dataSeriesIndexes.length)) { var e = this._eventManager.ghostCtx; c.save(); var g = this.plotArea; c.beginPath(); c.rect(g.x1, g.y1, g.width, g.height); c.clip(); for (var m = [], l = 0; l < a.dataSeriesIndexes.length; l++) { var w = a.dataSeriesIndexes[l], h = this.data[w]; c.lineWidth = h.lineThickness; var s = h.dataPoints, q = "solid"; if (c.setLineDash) { var n = R(h.nullDataLineDashType, h.lineThickness), q = h.lineDashType, f = R(q, h.lineThickness); c.setLineDash(f); } var B = h.id; this._eventManager.objectMap[B] = { objectType: "dataSeries", dataSeriesIndex: w, }; B = N(B); e.strokeStyle = B; e.lineWidth = 0 < h.lineThickness ? Math.max(h.lineThickness, 4) : 0; var B = h._colorSet, k = (B = h.lineColor = h.options.lineColor ? h.options.lineColor : B[0]); c.strokeStyle = B; var p = 0, t, u, x = []; c.beginPath(); if (0 < s.length) for (u = !1, p = 0; p < s.length; p++) if ( ((t = s[p].getTime ? s[p].x.getTime() : s[p].x), !( t < a.axisX.dataInfo.viewPortMin || (t > a.axisX.dataInfo.viewPortMax && (!h.connectNullData || !u)) )) ) if ("number" !== typeof s[p].y) 0 < p && !u && (h.connectNullData ? c.setLineDash && 0 < x.length && (h.options.nullDataLineDashType || !s[p - 1].lineDashType) && ((x[x.length - 1].newLineDashArray = n), (q = h.nullDataLineDashType)) : (d(x), (x = []))), (u = !0); else { t = a.axisX.convertValueToPixel(t); u = a.axisY.convertValueToPixel(s[p].y); var ma = h.dataPointIds[p]; this._eventManager.objectMap[ma] = { id: ma, objectType: "dataPoint", dataSeriesIndex: w, dataPointIndex: p, x1: t, y1: u, }; x[x.length] = { x: t, y: u }; p < s.length - 1 && (k !== (s[p].lineColor || B) || q !== (s[p].lineDashType || h.lineDashType)) && ((k = s[p].lineColor || B), (x[x.length - 1].newStrokeStyle = k), c.setLineDash && (s[p].lineDashType ? ((q = s[p].lineDashType), (x[x.length - 1].newLineDashArray = R( q, h.lineThickness ))) : ((q = h.lineDashType), (x[x.length - 1].newLineDashArray = f)))); if (0 < s[p].markerSize || 0 < h.markerSize) { var y = h.getMarkerProperties(p, t, u, c); m.push(y); ma = N(ma); r && m.push({ x: t, y: u, ctx: e, type: y.type, size: y.size, color: ma, borderColor: ma, borderThickness: y.borderThickness, }); } (s[p].indexLabel || h.indexLabel || s[p].indexLabelFormatter || h.indexLabelFormatter) && this._indexLabels.push({ chartType: "spline", dataPoint: s[p], dataSeries: h, point: { x: t, y: u }, direction: 0 > s[p].y === a.axisY.reversed ? 1 : -1, color: B, }); u = !1; } d(x); } ia.drawMarkers(m); r && (b.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (c.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && c.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && c.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), c.clearRect(g.x1, g.y1, g.width, g.height), e.beginPath()); c.restore(); c.beginPath(); return { source: b, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderColumn = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = null, e = this.plotArea, g = 0, m, l, w, h = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), g = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1, s = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : Math.min( 0.15 * this.width, 0.9 * (this.plotArea.width / a.plotType.totalDataSeries) ) << 0, q = a.axisX.dataInfo.minDiff; isFinite(q) || (q = 0.3 * Math.abs(a.axisX.range)); q = this.dataPointWidth = this.options.dataPointWidth ? this.dataPointWidth : (0.9 * ((e.width * (a.axisX.logarithmic ? Math.log(q) / Math.log(a.axisX.range) : Math.abs(q) / Math.abs(a.axisX.range))) / a.plotType.totalDataSeries)) << 0; this.dataPointMaxWidth && g > s && (g = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, s )); !this.dataPointMaxWidth && this.dataPointMinWidth && s < g && (s = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, g )); q < g && (q = g); q > s && (q = s); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.clip()); for (s = 0; s < a.dataSeriesIndexes.length; s++) { var n = a.dataSeriesIndexes[s], f = this.data[n], B = f.dataPoints; if (0 < B.length) for ( var p = 5 < q && f.bevelEnabled ? !0 : !1, g = 0; g < B.length; g++ ) if ( (B[g].getTime ? (w = B[g].x.getTime()) : (w = B[g].x), !( w < a.axisX.dataInfo.viewPortMin || w > a.axisX.dataInfo.viewPortMax ) && "number" === typeof B[g].y) ) { m = a.axisX.convertValueToPixel(w); l = a.axisY.convertValueToPixel(B[g].y); m = a.axisX.reversed ? (m + (a.plotType.totalDataSeries * q) / 2 - (a.previousDataSeriesCount + s) * q) << 0 : (m - (a.plotType.totalDataSeries * q) / 2 + (a.previousDataSeriesCount + s) * q) << 0; var k = a.axisX.reversed ? (m - q) << 0 : (m + q) << 0, t; 0 <= B[g].y ? (t = h) : ((t = l), (l = h)); l > t && ((c = l), (l = t), (t = c)); c = B[g].color ? B[g].color : f._colorSet[g % f._colorSet.length]; ea( b, m, l, k, t, c, 0, null, p && 0 <= B[g].y, 0 > B[g].y && p, !1, !1, f.fillOpacity ); c = f.dataPointIds[g]; this._eventManager.objectMap[c] = { id: c, objectType: "dataPoint", dataSeriesIndex: n, dataPointIndex: g, x1: m, y1: l, x2: k, y2: t, }; c = N(c); r && ea( this._eventManager.ghostCtx, m, l, k, t, c, 0, null, !1, !1, !1, !1 ); (B[g].indexLabel || f.indexLabel || B[g].indexLabelFormatter || f.indexLabelFormatter) && this._indexLabels.push({ chartType: "column", dataPoint: B[g], dataSeries: f, point: { x: m + (k - m) / 2, y: 0 > B[g].y === a.axisY.reversed ? l : t, }, direction: 0 > B[g].y === a.axisY.reversed ? 1 : -1, bounds: { x1: m, y1: Math.min(l, t), x2: k, y2: Math.max(l, t), }, color: c, }); } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.yScaleAnimation, easingFunction: M.easing.easeOutQuart, animationBase: h < a.axisY.bounds.y1 ? a.axisY.bounds.y1 : h > a.axisY.bounds.y2 ? a.axisY.bounds.y2 : h, }; } }; p.prototype.renderStackedColumn = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = null, e = this.plotArea, g = [], m = [], l = [], w = [], h = 0, s, q, n = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), h = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1; s = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : (0.15 * this.width) << 0; var f = a.axisX.dataInfo.minDiff; isFinite(f) || (f = 0.3 * Math.abs(a.axisX.range)); f = this.options.dataPointWidth ? this.dataPointWidth : (0.9 * ((e.width * (a.axisX.logarithmic ? Math.log(f) / Math.log(a.axisX.range) : Math.abs(f) / Math.abs(a.axisX.range))) / a.plotType.plotUnits.length)) << 0; this.dataPointMaxWidth && h > s && (h = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, s )); !this.dataPointMaxWidth && this.dataPointMinWidth && s < h && (s = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, h )); f < h && (f = h); f > s && (f = s); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.clip()); for (var B = 0; B < a.dataSeriesIndexes.length; B++) { var k = a.dataSeriesIndexes[B], p = this.data[k], t = p.dataPoints; if (0 < t.length) { var u = 5 < f && p.bevelEnabled ? !0 : !1; b.strokeStyle = "#4572A7 "; for (h = 0; h < t.length; h++) if ( ((c = t[h].x.getTime ? t[h].x.getTime() : t[h].x), !( c < a.axisX.dataInfo.viewPortMin || c > a.axisX.dataInfo.viewPortMax ) && "number" === typeof t[h].y) ) { s = a.axisX.convertValueToPixel(c); var x = (s - (a.plotType.plotUnits.length * f) / 2 + a.index * f) << 0, v = (x + f) << 0, y; if ( a.axisY.logarithmic || (a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length && 0 < t[h].y) ) (l[c] = t[h].y + (l[c] ? l[c] : 0)), 0 < l[c] && ((q = a.axisY.convertValueToPixel(l[c])), (y = "undefined" !== typeof g[c] ? g[c] : n), (g[c] = q)); else if ( a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length && 0 >= t[h].y ) (w[c] = t[h].y + (w[c] ? w[c] : 0)), (y = a.axisY.convertValueToPixel(w[c])), (q = "undefined" !== typeof m[c] ? m[c] : n), (m[c] = y); else if ( ((q = a.axisY.convertValueToPixel(t[h].y)), 0 <= t[h].y) ) { var A = "undefined" !== typeof g[c] ? g[c] : 0; q -= A; y = n - A; g[c] = A + (y - q); } else (A = m[c] ? m[c] : 0), (y = q + A), (q = n + A), (m[c] = A + (y - q)); c = t[h].color ? t[h].color : p._colorSet[h % p._colorSet.length]; ea( b, x, q, v, y, c, 0, null, u && 0 <= t[h].y, 0 > t[h].y && u, !1, !1, p.fillOpacity ); c = p.dataPointIds[h]; this._eventManager.objectMap[c] = { id: c, objectType: "dataPoint", dataSeriesIndex: k, dataPointIndex: h, x1: x, y1: q, x2: v, y2: y, }; c = N(c); r && ea( this._eventManager.ghostCtx, x, q, v, y, c, 0, null, !1, !1, !1, !1 ); (t[h].indexLabel || p.indexLabel || t[h].indexLabelFormatter || p.indexLabelFormatter) && this._indexLabels.push({ chartType: "stackedColumn", dataPoint: t[h], dataSeries: p, point: { x: s, y: 0 <= t[h].y ? q : y }, direction: 0 > t[h].y === a.axisY.reversed ? 1 : -1, bounds: { x1: x, y1: Math.min(q, y), x2: v, y2: Math.max(q, y), }, color: c, }); } } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.yScaleAnimation, easingFunction: M.easing.easeOutQuart, animationBase: n < a.axisY.bounds.y1 ? a.axisY.bounds.y1 : n > a.axisY.bounds.y2 ? a.axisY.bounds.y2 : n, }; } }; p.prototype.renderStackedColumn100 = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = null, e = this.plotArea, g = [], m = [], l = [], w = [], h = 0, s, q, n = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), h = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1; s = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : (0.15 * this.width) << 0; var f = a.axisX.dataInfo.minDiff; isFinite(f) || (f = 0.3 * Math.abs(a.axisX.range)); f = this.options.dataPointWidth ? this.dataPointWidth : (0.9 * ((e.width * (a.axisX.logarithmic ? Math.log(f) / Math.log(a.axisX.range) : Math.abs(f) / Math.abs(a.axisX.range))) / a.plotType.plotUnits.length)) << 0; this.dataPointMaxWidth && h > s && (h = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, s )); !this.dataPointMaxWidth && this.dataPointMinWidth && s < h && (s = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, h )); f < h && (f = h); f > s && (f = s); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.clip()); for (var B = 0; B < a.dataSeriesIndexes.length; B++) { var p = a.dataSeriesIndexes[B], k = this.data[p], t = k.dataPoints; if (0 < t.length) for ( var u = 5 < f && k.bevelEnabled ? !0 : !1, h = 0; h < t.length; h++ ) if ( ((c = t[h].x.getTime ? t[h].x.getTime() : t[h].x), !( c < a.axisX.dataInfo.viewPortMin || c > a.axisX.dataInfo.viewPortMax ) && "number" === typeof t[h].y) ) { s = a.axisX.convertValueToPixel(c); q = 0 !== a.dataPointYSums[c] ? 100 * (t[h].y / a.dataPointYSums[c]) : 0; var x = (s - (a.plotType.plotUnits.length * f) / 2 + a.index * f) << 0, v = (x + f) << 0, y; if ( a.axisY.logarithmic || (a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length && 0 < t[h].y) ) { l[c] = q + ("undefined" !== typeof l[c] ? l[c] : 0); if (0 >= l[c]) continue; q = a.axisY.convertValueToPixel(l[c]); y = g[c] ? g[c] : n; g[c] = q; } else if ( a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length && 0 >= t[h].y ) (w[c] = q + ("undefined" !== typeof w[c] ? w[c] : 0)), (y = a.axisY.convertValueToPixel(w[c])), (q = m[c] ? m[c] : n), (m[c] = y); else if (((q = a.axisY.convertValueToPixel(q)), 0 <= t[h].y)) { var A = "undefined" !== typeof g[c] ? g[c] : 0; q -= A; y = n - A; a.dataSeriesIndexes.length - 1 === B && 1 >= Math.abs(e.y1 - q) && (q = e.y1); g[c] = A + (y - q); } else (A = "undefined" !== typeof m[c] ? m[c] : 0), (y = q + A), (q = n + A), a.dataSeriesIndexes.length - 1 === B && 1 >= Math.abs(e.y2 - y) && (y = e.y2), (m[c] = A + (y - q)); c = t[h].color ? t[h].color : k._colorSet[h % k._colorSet.length]; ea( b, x, q, v, y, c, 0, null, u && 0 <= t[h].y, 0 > t[h].y && u, !1, !1, k.fillOpacity ); c = k.dataPointIds[h]; this._eventManager.objectMap[c] = { id: c, objectType: "dataPoint", dataSeriesIndex: p, dataPointIndex: h, x1: x, y1: q, x2: v, y2: y, }; c = N(c); r && ea( this._eventManager.ghostCtx, x, q, v, y, c, 0, null, !1, !1, !1, !1 ); (t[h].indexLabel || k.indexLabel || t[h].indexLabelFormatter || k.indexLabelFormatter) && this._indexLabels.push({ chartType: "stackedColumn100", dataPoint: t[h], dataSeries: k, point: { x: s, y: 0 <= t[h].y ? q : y }, direction: 0 > t[h].y === a.axisY.reversed ? 1 : -1, bounds: { x1: x, y1: Math.min(q, y), x2: v, y2: Math.max(q, y), }, color: c, }); } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.yScaleAnimation, easingFunction: M.easing.easeOutQuart, animationBase: n < a.axisY.bounds.y1 ? a.axisY.bounds.y1 : n > a.axisY.bounds.y2 ? a.axisY.bounds.y2 : n, }; } }; p.prototype.renderBar = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = null, e = this.plotArea, g = 0, m, l, w, h = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), g = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1, s = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : Math.min( 0.15 * this.height, 0.9 * (this.plotArea.height / a.plotType.totalDataSeries) ) << 0, q = a.axisX.dataInfo.minDiff; isFinite(q) || (q = 0.3 * Math.abs(a.axisX.range)); q = this.options.dataPointWidth ? this.dataPointWidth : (0.9 * ((e.height * (a.axisX.logarithmic ? Math.log(q) / Math.log(a.axisX.range) : Math.abs(q) / Math.abs(a.axisX.range))) / a.plotType.totalDataSeries)) << 0; this.dataPointMaxWidth && g > s && (g = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, s )); !this.dataPointMaxWidth && this.dataPointMinWidth && s < g && (s = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, g )); q < g && (q = g); q > s && (q = s); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.clip()); for (s = 0; s < a.dataSeriesIndexes.length; s++) { var n = a.dataSeriesIndexes[s], f = this.data[n], B = f.dataPoints; if (0 < B.length) { var k = 5 < q && f.bevelEnabled ? !0 : !1; b.strokeStyle = "#4572A7 "; for (g = 0; g < B.length; g++) if ( (B[g].getTime ? (w = B[g].x.getTime()) : (w = B[g].x), !( w < a.axisX.dataInfo.viewPortMin || w > a.axisX.dataInfo.viewPortMax ) && "number" === typeof B[g].y) ) { l = a.axisX.convertValueToPixel(w); m = a.axisY.convertValueToPixel(B[g].y); l = a.axisX.reversed ? (l + (a.plotType.totalDataSeries * q) / 2 - (a.previousDataSeriesCount + s) * q) << 0 : (l - (a.plotType.totalDataSeries * q) / 2 + (a.previousDataSeriesCount + s) * q) << 0; var p = a.axisX.reversed ? (l - q) << 0 : (l + q) << 0, t; 0 <= B[g].y ? (t = h) : ((t = m), (m = h)); c = B[g].color ? B[g].color : f._colorSet[g % f._colorSet.length]; ea(b, t, l, m, p, c, 0, null, k, !1, !1, !1, f.fillOpacity); c = f.dataPointIds[g]; this._eventManager.objectMap[c] = { id: c, objectType: "dataPoint", dataSeriesIndex: n, dataPointIndex: g, x1: t, y1: l, x2: m, y2: p, }; c = N(c); r && ea( this._eventManager.ghostCtx, t, l, m, p, c, 0, null, !1, !1, !1, !1 ); (B[g].indexLabel || f.indexLabel || B[g].indexLabelFormatter || f.indexLabelFormatter) && this._indexLabels.push({ chartType: "bar", dataPoint: B[g], dataSeries: f, point: { x: 0 <= B[g].y ? m : t, y: l + (p - l) / 2 }, direction: 0 > B[g].y === a.axisY.reversed ? 1 : -1, bounds: { x1: Math.min(t, m), y1: l, x2: Math.max(t, m), y2: p, }, color: c, }); } } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.xScaleAnimation, easingFunction: M.easing.easeOutQuart, animationBase: h < a.axisY.bounds.x1 ? a.axisY.bounds.x1 : h > a.axisY.bounds.x2 ? a.axisY.bounds.x2 : h, }; } }; p.prototype.renderStackedBar = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = null, e = this.plotArea, g = [], m = [], l = [], w = [], h = 0, s, q, n = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), h = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1; q = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : (0.15 * this.height) << 0; var f = a.axisX.dataInfo.minDiff; isFinite(f) || (f = 0.3 * Math.abs(a.axisX.range)); f = this.options.dataPointWidth ? this.dataPointWidth : (0.9 * ((e.height * (a.axisX.logarithmic ? Math.log(f) / Math.log(a.axisX.range) : Math.abs(f) / Math.abs(a.axisX.range))) / a.plotType.plotUnits.length)) << 0; this.dataPointMaxWidth && h > q && (h = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, q )); !this.dataPointMaxWidth && this.dataPointMinWidth && q < h && (q = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, h )); f < h && (f = h); f > q && (f = q); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.clip()); for (var B = 0; B < a.dataSeriesIndexes.length; B++) { var p = a.dataSeriesIndexes[B], k = this.data[p], t = k.dataPoints; if (0 < t.length) { var u = 5 < f && k.bevelEnabled ? !0 : !1; b.strokeStyle = "#4572A7 "; for (h = 0; h < t.length; h++) if ( ((c = t[h].x.getTime ? t[h].x.getTime() : t[h].x), !( c < a.axisX.dataInfo.viewPortMin || c > a.axisX.dataInfo.viewPortMax ) && "number" === typeof t[h].y) ) { q = a.axisX.convertValueToPixel(c); var x = (q - (a.plotType.plotUnits.length * f) / 2 + a.index * f) << 0, v = (x + f) << 0, y; if ( a.axisY.logarithmic || (a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length && 0 < t[h].y) ) (l[c] = t[h].y + (l[c] ? l[c] : 0)), 0 < l[c] && ((y = g[c] ? g[c] : n), (g[c] = s = a.axisY.convertValueToPixel(l[c]))); else if ( a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length && 0 >= t[h].y ) (w[c] = t[h].y + (w[c] ? w[c] : 0)), (s = m[c] ? m[c] : n), (m[c] = y = a.axisY.convertValueToPixel(w[c])); else if ( ((s = a.axisY.convertValueToPixel(t[h].y)), 0 <= t[h].y) ) { var A = g[c] ? g[c] : 0; y = n + A; s += A; g[c] = A + (s - y); } else (A = m[c] ? m[c] : 0), (y = s - A), (s = n - A), (m[c] = A + (s - y)); c = t[h].color ? t[h].color : k._colorSet[h % k._colorSet.length]; ea(b, y, x, s, v, c, 0, null, u, !1, !1, !1, k.fillOpacity); c = k.dataPointIds[h]; this._eventManager.objectMap[c] = { id: c, objectType: "dataPoint", dataSeriesIndex: p, dataPointIndex: h, x1: y, y1: x, x2: s, y2: v, }; c = N(c); r && ea( this._eventManager.ghostCtx, y, x, s, v, c, 0, null, !1, !1, !1, !1 ); (t[h].indexLabel || k.indexLabel || t[h].indexLabelFormatter || k.indexLabelFormatter) && this._indexLabels.push({ chartType: "stackedBar", dataPoint: t[h], dataSeries: k, point: { x: 0 <= t[h].y ? s : y, y: q }, direction: 0 > t[h].y === a.axisY.reversed ? 1 : -1, bounds: { x1: Math.min(y, s), y1: x, x2: Math.max(y, s), y2: v, }, color: c, }); } } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.xScaleAnimation, easingFunction: M.easing.easeOutQuart, animationBase: n < a.axisY.bounds.x1 ? a.axisY.bounds.x1 : n > a.axisY.bounds.x2 ? a.axisY.bounds.x2 : n, }; } }; p.prototype.renderStackedBar100 = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = null, e = this.plotArea, g = [], m = [], l = [], w = [], h = 0, s, q, n = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), h = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1; q = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : (0.15 * this.height) << 0; var f = a.axisX.dataInfo.minDiff; isFinite(f) || (f = 0.3 * Math.abs(a.axisX.range)); f = this.options.dataPointWidth ? this.dataPointWidth : (0.9 * ((e.height * (a.axisX.logarithmic ? Math.log(f) / Math.log(a.axisX.range) : Math.abs(f) / Math.abs(a.axisX.range))) / a.plotType.plotUnits.length)) << 0; this.dataPointMaxWidth && h > q && (h = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, q )); !this.dataPointMaxWidth && this.dataPointMinWidth && q < h && (q = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, h )); f < h && (f = h); f > q && (f = q); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.clip()); for (var B = 0; B < a.dataSeriesIndexes.length; B++) { var k = a.dataSeriesIndexes[B], p = this.data[k], t = p.dataPoints; if (0 < t.length) { var u = 5 < f && p.bevelEnabled ? !0 : !1; b.strokeStyle = "#4572A7 "; for (h = 0; h < t.length; h++) if ( ((c = t[h].x.getTime ? t[h].x.getTime() : t[h].x), !( c < a.axisX.dataInfo.viewPortMin || c > a.axisX.dataInfo.viewPortMax ) && "number" === typeof t[h].y) ) { q = a.axisX.convertValueToPixel(c); var x; x = 0 !== a.dataPointYSums[c] ? 100 * (t[h].y / a.dataPointYSums[c]) : 0; var v = (q - (a.plotType.plotUnits.length * f) / 2 + a.index * f) << 0, y = (v + f) << 0; if ( a.axisY.logarithmic || (a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length && 0 < t[h].y) ) { l[c] = x + (l[c] ? l[c] : 0); if (0 >= l[c]) continue; x = g[c] ? g[c] : n; g[c] = s = a.axisY.convertValueToPixel(l[c]); } else if ( a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length && 0 >= t[h].y ) (w[c] = x + (w[c] ? w[c] : 0)), (s = m[c] ? m[c] : n), (m[c] = x = a.axisY.convertValueToPixel(w[c])); else if (((s = a.axisY.convertValueToPixel(x)), 0 <= t[h].y)) { var A = g[c] ? g[c] : 0; x = n + A; s += A; a.dataSeriesIndexes.length - 1 === B && 1 >= Math.abs(e.x2 - s) && (s = e.x2); g[c] = A + (s - x); } else (A = m[c] ? m[c] : 0), (x = s - A), (s = n - A), a.dataSeriesIndexes.length - 1 === B && 1 >= Math.abs(e.x1 - x) && (x = e.x1), (m[c] = A + (s - x)); c = t[h].color ? t[h].color : p._colorSet[h % p._colorSet.length]; ea(b, x, v, s, y, c, 0, null, u, !1, !1, !1, p.fillOpacity); c = p.dataPointIds[h]; this._eventManager.objectMap[c] = { id: c, objectType: "dataPoint", dataSeriesIndex: k, dataPointIndex: h, x1: x, y1: v, x2: s, y2: y, }; c = N(c); r && ea( this._eventManager.ghostCtx, x, v, s, y, c, 0, null, !1, !1, !1, !1 ); (t[h].indexLabel || p.indexLabel || t[h].indexLabelFormatter || p.indexLabelFormatter) && this._indexLabels.push({ chartType: "stackedBar100", dataPoint: t[h], dataSeries: p, point: { x: 0 <= t[h].y ? s : x, y: q }, direction: 0 > t[h].y === a.axisY.reversed ? 1 : -1, bounds: { x1: Math.min(x, s), y1: v, x2: Math.max(x, s), y2: y, }, color: c, }); } } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.xScaleAnimation, easingFunction: M.easing.easeOutQuart, animationBase: n < a.axisY.bounds.x1 ? a.axisY.bounds.x1 : n > a.axisY.bounds.x2 ? a.axisY.bounds.x2 : n, }; } }; p.prototype.renderArea = function (a) { var d, b; function c() { A && (0 < B.lineThickness && g.stroke(), a.axisY.logarithmic || (0 >= a.axisY.viewportMinimum && 0 <= a.axisY.viewportMaximum) ? (y = v) : 0 > a.axisY.viewportMaximum ? (y = w.y1) : 0 < a.axisY.viewportMinimum && (y = l.y2), g.lineTo(t, y), g.lineTo(A.x, y), g.closePath(), (g.globalAlpha = B.fillOpacity), g.fill(), (g.globalAlpha = 1), r && (m.lineTo(t, y), m.lineTo(A.x, y), m.closePath(), m.fill()), g.beginPath(), g.moveTo(t, u), m.beginPath(), m.moveTo(t, u), (A = { x: t, y: u })); } var e = a.targetCanvasCtx || this.plotArea.ctx, g = r ? this._preRenderCtx : e; if (!(0 >= a.dataSeriesIndexes.length)) { var m = this._eventManager.ghostCtx, l = a.axisX.lineCoordinates, w = a.axisY.lineCoordinates, h = [], s = this.plotArea, q; g.save(); r && m.save(); g.beginPath(); g.rect(s.x1, s.y1, s.width, s.height); g.clip(); r && (m.beginPath(), m.rect(s.x1, s.y1, s.width, s.height), m.clip()); for (var n = 0; n < a.dataSeriesIndexes.length; n++) { var f = a.dataSeriesIndexes[n], B = this.data[f], p = B.dataPoints, h = B.id; this._eventManager.objectMap[h] = { objectType: "dataSeries", dataSeriesIndex: f, }; h = N(h); m.fillStyle = h; h = []; d = !0; var k = 0, t, u, x, v = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), y, A = null; if (0 < p.length) { var z = B._colorSet[k % B._colorSet.length], aa = (B.lineColor = B.options.lineColor || z), T = aa; g.fillStyle = z; g.strokeStyle = aa; g.lineWidth = B.lineThickness; b = "solid"; if (g.setLineDash) { var Y = R(B.nullDataLineDashType, B.lineThickness); b = B.lineDashType; var ca = R(b, B.lineThickness); g.setLineDash(ca); } for (var da = !0; k < p.length; k++) if ( ((x = p[k].x.getTime ? p[k].x.getTime() : p[k].x), !( x < a.axisX.dataInfo.viewPortMin || (x > a.axisX.dataInfo.viewPortMax && (!B.connectNullData || !da)) )) ) if ("number" !== typeof p[k].y) B.connectNullData || da || d || c(), (da = !0); else { t = a.axisX.convertValueToPixel(x); u = a.axisY.convertValueToPixel(p[k].y); d || da ? (!d && B.connectNullData ? (g.setLineDash && (B.options.nullDataLineDashType || (b === B.lineDashType && B.lineDashType !== B.nullDataLineDashType)) && ((d = t), (b = u), (t = q.x), (u = q.y), c(), g.moveTo(q.x, q.y), (t = d), (u = b), (A = q), (b = B.nullDataLineDashType), g.setLineDash(Y)), g.lineTo(t, u), r && m.lineTo(t, u)) : (g.beginPath(), g.moveTo(t, u), r && (m.beginPath(), m.moveTo(t, u)), (A = { x: t, y: u })), (da = d = !1)) : (g.lineTo(t, u), r && m.lineTo(t, u), 0 == k % 250 && c()); q = { x: t, y: u }; k < p.length - 1 && (T !== (p[k].lineColor || aa) || b !== (p[k].lineDashType || B.lineDashType)) && (c(), (T = p[k].lineColor || aa), (g.strokeStyle = T), g.setLineDash && (p[k].lineDashType ? ((b = p[k].lineDashType), g.setLineDash(R(b, B.lineThickness))) : ((b = B.lineDashType), g.setLineDash(ca)))); var Z = B.dataPointIds[k]; this._eventManager.objectMap[Z] = { id: Z, objectType: "dataPoint", dataSeriesIndex: f, dataPointIndex: k, x1: t, y1: u, }; 0 !== p[k].markerSize && (0 < p[k].markerSize || 0 < B.markerSize) && ((x = B.getMarkerProperties(k, t, u, g)), h.push(x), (Z = N(Z)), r && h.push({ x: t, y: u, ctx: m, type: x.type, size: x.size, color: Z, borderColor: Z, borderThickness: x.borderThickness, })); (p[k].indexLabel || B.indexLabel || p[k].indexLabelFormatter || B.indexLabelFormatter) && this._indexLabels.push({ chartType: "area", dataPoint: p[k], dataSeries: B, point: { x: t, y: u }, direction: 0 > p[k].y === a.axisY.reversed ? 1 : -1, color: z, }); } c(); ia.drawMarkers(h); } } r && (e.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (g.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && g.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && g.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), g.clearRect(s.x1, s.y1, s.width, s.height), this._eventManager.ghostCtx.restore()); g.restore(); return { source: e, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderSplineArea = function (a) { function d() { var b = v(x, 2); if (0 < b.length) { if (0 < q.lineThickness) { c.beginPath(); c.moveTo(b[0].x, b[0].y); b[0].newStrokeStyle && (c.strokeStyle = b[0].newStrokeStyle); b[0].newLineDashArray && c.setLineDash(b[0].newLineDashArray); for (var d = 0; d < b.length - 3; d += 3) if ( (c.bezierCurveTo( b[d + 1].x, b[d + 1].y, b[d + 2].x, b[d + 2].y, b[d + 3].x, b[d + 3].y ), r && e.bezierCurveTo( b[d + 1].x, b[d + 1].y, b[d + 2].x, b[d + 2].y, b[d + 3].x, b[d + 3].y ), b[d + 3].newStrokeStyle || b[d + 3].newLineDashArray) ) c.stroke(), c.beginPath(), c.moveTo(b[d + 3].x, b[d + 3].y), b[d + 3].newStrokeStyle && (c.strokeStyle = b[d + 3].newStrokeStyle), b[d + 3].newLineDashArray && c.setLineDash(b[d + 3].newLineDashArray); c.stroke(); } c.beginPath(); c.moveTo(b[0].x, b[0].y); r && (e.beginPath(), e.moveTo(b[0].x, b[0].y)); for (d = 0; d < b.length - 3; d += 3) c.bezierCurveTo( b[d + 1].x, b[d + 1].y, b[d + 2].x, b[d + 2].y, b[d + 3].x, b[d + 3].y ), r && e.bezierCurveTo( b[d + 1].x, b[d + 1].y, b[d + 2].x, b[d + 2].y, b[d + 3].x, b[d + 3].y ); a.axisY.logarithmic || (0 >= a.axisY.viewportMinimum && 0 <= a.axisY.viewportMaximum) ? (t = p) : 0 > a.axisY.viewportMaximum ? (t = m.y1) : 0 < a.axisY.viewportMinimum && (t = g.y2); u = { x: b[0].x, y: b[0].y }; c.lineTo(b[b.length - 1].x, t); c.lineTo(u.x, t); c.closePath(); c.globalAlpha = q.fillOpacity; c.fill(); c.globalAlpha = 1; r && (e.lineTo(b[b.length - 1].x, t), e.lineTo(u.x, t), e.closePath(), e.fill()); } } var b = a.targetCanvasCtx || this.plotArea.ctx, c = r ? this._preRenderCtx : b; if (!(0 >= a.dataSeriesIndexes.length)) { var e = this._eventManager.ghostCtx, g = a.axisX.lineCoordinates, m = a.axisY.lineCoordinates, l = [], w = this.plotArea; c.save(); r && e.save(); c.beginPath(); c.rect(w.x1, w.y1, w.width, w.height); c.clip(); r && (e.beginPath(), e.rect(w.x1, w.y1, w.width, w.height), e.clip()); for (var h = 0; h < a.dataSeriesIndexes.length; h++) { var s = a.dataSeriesIndexes[h], q = this.data[s], n = q.dataPoints, l = q.id; this._eventManager.objectMap[l] = { objectType: "dataSeries", dataSeriesIndex: s, }; l = N(l); e.fillStyle = l; var l = [], f = 0, B, k, p = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), t, u = null, x = []; if (0 < n.length) { var ma = q._colorSet[f % q._colorSet.length], y = (q.lineColor = q.options.lineColor || ma), A = y; c.fillStyle = ma; c.strokeStyle = y; c.lineWidth = q.lineThickness; var z = "solid"; if (c.setLineDash) { var aa = R(q.nullDataLineDashType, q.lineThickness), z = q.lineDashType, T = R(z, q.lineThickness); c.setLineDash(T); } for (k = !1; f < n.length; f++) if ( ((B = n[f].x.getTime ? n[f].x.getTime() : n[f].x), !( B < a.axisX.dataInfo.viewPortMin || (B > a.axisX.dataInfo.viewPortMax && (!q.connectNullData || !k)) )) ) if ("number" !== typeof n[f].y) 0 < f && !k && (q.connectNullData ? c.setLineDash && 0 < x.length && (q.options.nullDataLineDashType || !n[f - 1].lineDashType) && ((x[x.length - 1].newLineDashArray = aa), (z = q.nullDataLineDashType)) : (d(), (x = []))), (k = !0); else { B = a.axisX.convertValueToPixel(B); k = a.axisY.convertValueToPixel(n[f].y); var Y = q.dataPointIds[f]; this._eventManager.objectMap[Y] = { id: Y, objectType: "dataPoint", dataSeriesIndex: s, dataPointIndex: f, x1: B, y1: k, }; x[x.length] = { x: B, y: k }; f < n.length - 1 && (A !== (n[f].lineColor || y) || z !== (n[f].lineDashType || q.lineDashType)) && ((A = n[f].lineColor || y), (x[x.length - 1].newStrokeStyle = A), c.setLineDash && (n[f].lineDashType ? ((z = n[f].lineDashType), (x[x.length - 1].newLineDashArray = R( z, q.lineThickness ))) : ((z = q.lineDashType), (x[x.length - 1].newLineDashArray = T)))); if ( 0 !== n[f].markerSize && (0 < n[f].markerSize || 0 < q.markerSize) ) { var ca = q.getMarkerProperties(f, B, k, c); l.push(ca); Y = N(Y); r && l.push({ x: B, y: k, ctx: e, type: ca.type, size: ca.size, color: Y, borderColor: Y, borderThickness: ca.borderThickness, }); } (n[f].indexLabel || q.indexLabel || n[f].indexLabelFormatter || q.indexLabelFormatter) && this._indexLabels.push({ chartType: "splineArea", dataPoint: n[f], dataSeries: q, point: { x: B, y: k }, direction: 0 > n[f].y === a.axisY.reversed ? 1 : -1, color: ma, }); k = !1; } d(); ia.drawMarkers(l); } } r && (b.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (c.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && c.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && c.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), c.clearRect(w.x1, w.y1, w.width, w.height), this._eventManager.ghostCtx.restore()); c.restore(); return { source: b, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderStepArea = function (a) { var d, b; function c() { A && (0 < B.lineThickness && g.stroke(), a.axisY.logarithmic || (0 >= a.axisY.viewportMinimum && 0 <= a.axisY.viewportMaximum) ? (y = v) : 0 > a.axisY.viewportMaximum ? (y = w.y1) : 0 < a.axisY.viewportMinimum && (y = l.y2), g.lineTo(t, y), g.lineTo(A.x, y), g.closePath(), (g.globalAlpha = B.fillOpacity), g.fill(), (g.globalAlpha = 1), r && (m.lineTo(t, y), m.lineTo(A.x, y), m.closePath(), m.fill()), g.beginPath(), g.moveTo(t, u), m.beginPath(), m.moveTo(t, u), (A = { x: t, y: u })); } var e = a.targetCanvasCtx || this.plotArea.ctx, g = r ? this._preRenderCtx : e; if (!(0 >= a.dataSeriesIndexes.length)) { var m = this._eventManager.ghostCtx, l = a.axisX.lineCoordinates, w = a.axisY.lineCoordinates, h = [], s = this.plotArea, q; g.save(); r && m.save(); g.beginPath(); g.rect(s.x1, s.y1, s.width, s.height); g.clip(); r && (m.beginPath(), m.rect(s.x1, s.y1, s.width, s.height), m.clip()); for (var n = 0; n < a.dataSeriesIndexes.length; n++) { var f = a.dataSeriesIndexes[n], B = this.data[f], k = B.dataPoints, h = B.id; this._eventManager.objectMap[h] = { objectType: "dataSeries", dataSeriesIndex: f, }; h = N(h); m.fillStyle = h; h = []; d = !0; var p = 0, t, u, x, v = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), y, A = null; b = !1; if (0 < k.length) { var z = B._colorSet[p % B._colorSet.length], aa = (B.lineColor = B.options.lineColor || z), T = aa; g.fillStyle = z; g.strokeStyle = aa; g.lineWidth = B.lineThickness; var Y = "solid"; if (g.setLineDash) { var ca = R(B.nullDataLineDashType, B.lineThickness), Y = B.lineDashType, da = R(Y, B.lineThickness); g.setLineDash(da); } for (; p < k.length; p++) if ( ((x = k[p].x.getTime ? k[p].x.getTime() : k[p].x), !( x < a.axisX.dataInfo.viewPortMin || (x > a.axisX.dataInfo.viewPortMax && (!B.connectNullData || !b)) )) ) { var Z = u; "number" !== typeof k[p].y ? (B.connectNullData || b || d || c(), (b = !0)) : ((t = a.axisX.convertValueToPixel(x)), (u = a.axisY.convertValueToPixel(k[p].y)), d || b ? (!d && B.connectNullData ? (g.setLineDash && (B.options.nullDataLineDashType || (Y === B.lineDashType && B.lineDashType !== B.nullDataLineDashType)) && ((d = t), (b = u), (t = q.x), (u = q.y), c(), g.moveTo(q.x, q.y), (t = d), (u = b), (A = q), (Y = B.nullDataLineDashType), g.setLineDash(ca)), g.lineTo(t, Z), g.lineTo(t, u), r && (m.lineTo(t, Z), m.lineTo(t, u))) : (g.beginPath(), g.moveTo(t, u), r && (m.beginPath(), m.moveTo(t, u)), (A = { x: t, y: u })), (b = d = !1)) : (g.lineTo(t, Z), r && m.lineTo(t, Z), g.lineTo(t, u), r && m.lineTo(t, u), 0 == p % 250 && c()), (q = { x: t, y: u }), p < k.length - 1 && (T !== (k[p].lineColor || aa) || Y !== (k[p].lineDashType || B.lineDashType)) && (c(), (T = k[p].lineColor || aa), (g.strokeStyle = T), g.setLineDash && (k[p].lineDashType ? ((Y = k[p].lineDashType), g.setLineDash(R(Y, B.lineThickness))) : ((Y = B.lineDashType), g.setLineDash(da)))), (x = B.dataPointIds[p]), (this._eventManager.objectMap[x] = { id: x, objectType: "dataPoint", dataSeriesIndex: f, dataPointIndex: p, x1: t, y1: u, }), 0 !== k[p].markerSize && (0 < k[p].markerSize || 0 < B.markerSize) && ((Z = B.getMarkerProperties(p, t, u, g)), h.push(Z), (x = N(x)), r && h.push({ x: t, y: u, ctx: m, type: Z.type, size: Z.size, color: x, borderColor: x, borderThickness: Z.borderThickness, })), (k[p].indexLabel || B.indexLabel || k[p].indexLabelFormatter || B.indexLabelFormatter) && this._indexLabels.push({ chartType: "stepArea", dataPoint: k[p], dataSeries: B, point: { x: t, y: u }, direction: 0 > k[p].y === a.axisY.reversed ? 1 : -1, color: z, })); } c(); ia.drawMarkers(h); } } r && (e.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (g.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && g.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && g.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), g.clearRect(s.x1, s.y1, s.width, s.height), this._eventManager.ghostCtx.restore()); g.restore(); return { source: e, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderStackedArea = function (a) { function d() { if (!(1 > h.length)) { for (0 < A.lineThickness && c.stroke(); 0 < h.length; ) { var a = h.pop(); c.lineTo(a.x, a.y); r && u.lineTo(a.x, a.y); } c.closePath(); c.globalAlpha = A.fillOpacity; c.fill(); c.globalAlpha = 1; c.beginPath(); r && (u.closePath(), u.fill(), u.beginPath()); h = []; } } var b = a.targetCanvasCtx || this.plotArea.ctx, c = r ? this._preRenderCtx : b; if (!(0 >= a.dataSeriesIndexes.length)) { var e = null, g = null, m = [], l = this.plotArea, w = [], h = [], s = [], q = [], n = 0, f, k, p = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), u = this._eventManager.ghostCtx, t, C, x; r && u.beginPath(); c.save(); r && u.save(); c.beginPath(); c.rect(l.x1, l.y1, l.width, l.height); c.clip(); r && (u.beginPath(), u.rect(l.x1, l.y1, l.width, l.height), u.clip()); for (var e = [], v = 0; v < a.dataSeriesIndexes.length; v++) { var y = a.dataSeriesIndexes[v], A = this.data[y], z = A.dataPoints; A.dataPointIndexes = []; for (n = 0; n < z.length; n++) (y = z[n].x.getTime ? z[n].x.getTime() : z[n].x), (A.dataPointIndexes[y] = n), e[y] || (s.push(y), (e[y] = !0)); s.sort(Sa); } for (v = 0; v < a.dataSeriesIndexes.length; v++) { y = a.dataSeriesIndexes[v]; A = this.data[y]; z = A.dataPoints; C = !0; h = []; n = A.id; this._eventManager.objectMap[n] = { objectType: "dataSeries", dataSeriesIndex: y, }; n = N(n); u.fillStyle = n; if (0 < s.length) { var e = A._colorSet[0], aa = (A.lineColor = A.options.lineColor || e), T = aa; c.fillStyle = e; c.strokeStyle = aa; c.lineWidth = A.lineThickness; x = "solid"; if (c.setLineDash) { var Y = R(A.nullDataLineDashType, A.lineThickness); x = A.lineDashType; var ca = R(x, A.lineThickness); c.setLineDash(ca); } for (var da = !0, n = 0; n < s.length; n++) { var g = s[n], Z = null, Z = 0 <= A.dataPointIndexes[g] ? z[A.dataPointIndexes[g]] : { x: g, y: null }; if ( !( g < a.axisX.dataInfo.viewPortMin || (g > a.axisX.dataInfo.viewPortMax && (!A.connectNullData || !da)) ) ) if ("number" !== typeof Z.y) A.connectNullData || da || C || d(), (da = !0); else { f = a.axisX.convertValueToPixel(g); var oa = w[g] ? w[g] : 0; if ( a.axisY.logarithmic || (a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length) ) { q[g] = Z.y + (q[g] ? q[g] : 0); if (0 >= q[g] && a.axisY.logarithmic) continue; k = a.axisY.convertValueToPixel(q[g]); } else (k = a.axisY.convertValueToPixel(Z.y)), (k -= oa); h.push({ x: f, y: p - oa }); w[g] = p - k; C || da ? (!C && A.connectNullData ? (c.setLineDash && (A.options.nullDataLineDashType || (x === A.lineDashType && A.lineDashType !== A.nullDataLineDashType)) && ((C = h.pop()), (x = h[h.length - 1]), d(), c.moveTo(t.x, t.y), h.push(x), h.push(C), (x = A.nullDataLineDashType), c.setLineDash(Y)), c.lineTo(f, k), r && u.lineTo(f, k)) : (c.beginPath(), c.moveTo(f, k), r && (u.beginPath(), u.moveTo(f, k))), (da = C = !1)) : (c.lineTo(f, k), r && u.lineTo(f, k), 0 == n % 250 && (d(), c.moveTo(f, k), r && u.moveTo(f, k), h.push({ x: f, y: p - oa }))); t = { x: f, y: k }; n < z.length - 1 && (T !== (z[n].lineColor || aa) || x !== (z[n].lineDashType || A.lineDashType)) && (d(), c.beginPath(), c.moveTo(f, k), h.push({ x: f, y: p - oa }), (T = z[n].lineColor || aa), (c.strokeStyle = T), c.setLineDash && (z[n].lineDashType ? ((x = z[n].lineDashType), c.setLineDash(R(x, A.lineThickness))) : ((x = A.lineDashType), c.setLineDash(ca)))); if (0 <= A.dataPointIndexes[g]) { var la = A.dataPointIds[A.dataPointIndexes[g]]; this._eventManager.objectMap[la] = { id: la, objectType: "dataPoint", dataSeriesIndex: y, dataPointIndex: A.dataPointIndexes[g], x1: f, y1: k, }; } 0 <= A.dataPointIndexes[g] && 0 !== Z.markerSize && (0 < Z.markerSize || 0 < A.markerSize) && ((oa = A.getMarkerProperties( A.dataPointIndexes[g], f, k, c )), m.push(oa), (g = N(la)), r && m.push({ x: f, y: k, ctx: u, type: oa.type, size: oa.size, color: g, borderColor: g, borderThickness: oa.borderThickness, })); (Z.indexLabel || A.indexLabel || Z.indexLabelFormatter || A.indexLabelFormatter) && this._indexLabels.push({ chartType: "stackedArea", dataPoint: Z, dataSeries: A, point: { x: f, y: k }, direction: 0 > z[n].y === a.axisY.reversed ? 1 : -1, color: e, }); } } d(); c.moveTo(f, k); r && u.moveTo(f, k); } delete A.dataPointIndexes; } ia.drawMarkers(m); r && (b.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (c.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && c.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && c.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), c.clearRect(l.x1, l.y1, l.width, l.height), u.restore()); c.restore(); return { source: b, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderStackedArea100 = function (a) { function d() { for (0 < A.lineThickness && c.stroke(); 0 < h.length; ) { var a = h.pop(); c.lineTo(a.x, a.y); r && x.lineTo(a.x, a.y); } c.closePath(); c.globalAlpha = A.fillOpacity; c.fill(); c.globalAlpha = 1; c.beginPath(); r && (x.closePath(), x.fill(), x.beginPath()); h = []; } var b = a.targetCanvasCtx || this.plotArea.ctx, c = r ? this._preRenderCtx : b; if (!(0 >= a.dataSeriesIndexes.length)) { var e = null, g = null, m = this.plotArea, l = [], w = [], h = [], s = [], q = [], n = 0, f, k, p, u, t, C = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), x = this._eventManager.ghostCtx; c.save(); r && x.save(); c.beginPath(); c.rect(m.x1, m.y1, m.width, m.height); c.clip(); r && (x.beginPath(), x.rect(m.x1, m.y1, m.width, m.height), x.clip()); for (var e = [], v = 0; v < a.dataSeriesIndexes.length; v++) { var y = a.dataSeriesIndexes[v], A = this.data[y], z = A.dataPoints; A.dataPointIndexes = []; for (n = 0; n < z.length; n++) (y = z[n].x.getTime ? z[n].x.getTime() : z[n].x), (A.dataPointIndexes[y] = n), e[y] || (s.push(y), (e[y] = !0)); s.sort(Sa); } for (v = 0; v < a.dataSeriesIndexes.length; v++) { y = a.dataSeriesIndexes[v]; A = this.data[y]; z = A.dataPoints; u = !0; e = A.id; this._eventManager.objectMap[e] = { objectType: "dataSeries", dataSeriesIndex: y, }; e = N(e); x.fillStyle = e; h = []; if (0 < s.length) { var e = A._colorSet[n % A._colorSet.length], aa = (A.lineColor = A.options.lineColor || e), T = aa; c.fillStyle = e; c.strokeStyle = aa; c.lineWidth = A.lineThickness; t = "solid"; if (c.setLineDash) { var Y = R(A.nullDataLineDashType, A.lineThickness); t = A.lineDashType; var ca = R(t, A.lineThickness); c.setLineDash(ca); } for (var da = !0, n = 0; n < s.length; n++) { var g = s[n], Z = null, Z = 0 <= A.dataPointIndexes[g] ? z[A.dataPointIndexes[g]] : { x: g, y: null }; if ( !( g < a.axisX.dataInfo.viewPortMin || (g > a.axisX.dataInfo.viewPortMax && (!A.connectNullData || !da)) ) ) if ("number" !== typeof Z.y) A.connectNullData || da || u || d(), (da = !0); else { var oa; oa = 0 !== a.dataPointYSums[g] ? 100 * (Z.y / a.dataPointYSums[g]) : 0; f = a.axisX.convertValueToPixel(g); var la = w[g] ? w[g] : 0; if ( a.axisY.logarithmic || (a.axisY.scaleBreaks && 0 < a.axisY.scaleBreaks._appliedBreaks.length) ) { q[g] = oa + (q[g] ? q[g] : 0); if (0 >= q[g] && a.axisY.logarithmic) continue; k = a.axisY.convertValueToPixel(q[g]); } else (k = a.axisY.convertValueToPixel(oa)), (k -= la); h.push({ x: f, y: C - la }); w[g] = C - k; u || da ? (!u && A.connectNullData ? (c.setLineDash && (A.options.nullDataLineDashType || (t === A.lineDashType && A.lineDashType !== A.nullDataLineDashType)) && ((u = h.pop()), (t = h[h.length - 1]), d(), c.moveTo(p.x, p.y), h.push(t), h.push(u), (t = A.nullDataLineDashType), c.setLineDash(Y)), c.lineTo(f, k), r && x.lineTo(f, k)) : (c.beginPath(), c.moveTo(f, k), r && (x.beginPath(), x.moveTo(f, k))), (da = u = !1)) : (c.lineTo(f, k), r && x.lineTo(f, k), 0 == n % 250 && (d(), c.moveTo(f, k), r && x.moveTo(f, k), h.push({ x: f, y: C - la }))); p = { x: f, y: k }; n < z.length - 1 && (T !== (z[n].lineColor || aa) || t !== (z[n].lineDashType || A.lineDashType)) && (d(), c.beginPath(), c.moveTo(f, k), h.push({ x: f, y: C - la }), (T = z[n].lineColor || aa), (c.strokeStyle = T), c.setLineDash && (z[n].lineDashType ? ((t = z[n].lineDashType), c.setLineDash(R(t, A.lineThickness))) : ((t = A.lineDashType), c.setLineDash(ca)))); if (0 <= A.dataPointIndexes[g]) { var G = A.dataPointIds[A.dataPointIndexes[g]]; this._eventManager.objectMap[G] = { id: G, objectType: "dataPoint", dataSeriesIndex: y, dataPointIndex: A.dataPointIndexes[g], x1: f, y1: k, }; } 0 <= A.dataPointIndexes[g] && 0 !== Z.markerSize && (0 < Z.markerSize || 0 < A.markerSize) && ((la = A.getMarkerProperties(n, f, k, c)), l.push(la), (g = N(G)), r && l.push({ x: f, y: k, ctx: x, type: la.type, size: la.size, color: g, borderColor: g, borderThickness: la.borderThickness, })); (Z.indexLabel || A.indexLabel || Z.indexLabelFormatter || A.indexLabelFormatter) && this._indexLabels.push({ chartType: "stackedArea100", dataPoint: Z, dataSeries: A, point: { x: f, y: k }, direction: 0 > z[n].y === a.axisY.reversed ? 1 : -1, color: e, }); } } d(); c.moveTo(f, k); r && x.moveTo(f, k); } delete A.dataPointIndexes; } ia.drawMarkers(l); r && (b.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (c.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && c.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && c.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), c.clearRect(m.x1, m.y1, m.width, m.height), x.restore()); c.restore(); return { source: b, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderBubble = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = this.plotArea, e = 0, g, m; b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(c.x1, c.y1, c.width, c.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(c.x1, c.y1, c.width, c.height), this._eventManager.ghostCtx.clip()); for ( var l = -Infinity, w = Infinity, h = 0; h < a.dataSeriesIndexes.length; h++ ) for ( var s = a.dataSeriesIndexes[h], q = this.data[s], n = q.dataPoints, f = 0, e = 0; e < n.length; e++ ) (g = n[e].getTime ? (g = n[e].x.getTime()) : (g = n[e].x)), g < a.axisX.dataInfo.viewPortMin || g > a.axisX.dataInfo.viewPortMax || "undefined" === typeof n[e].z || ((f = n[e].z), f > l && (l = f), f < w && (w = f)); for ( var k = 25 * Math.PI, p = Math.max( Math.pow((0.25 * Math.min(c.height, c.width)) / 2, 2) * Math.PI, k ), h = 0; h < a.dataSeriesIndexes.length; h++ ) if ( ((s = a.dataSeriesIndexes[h]), (q = this.data[s]), (n = q.dataPoints), 0 < n.length) ) for (b.strokeStyle = "#4572A7 ", e = 0; e < n.length; e++) if ( ((g = n[e].getTime ? (g = n[e].x.getTime()) : (g = n[e].x)), !( g < a.axisX.dataInfo.viewPortMin || g > a.axisX.dataInfo.viewPortMax ) && "number" === typeof n[e].y) ) { g = a.axisX.convertValueToPixel(g); m = a.axisY.convertValueToPixel(n[e].y); var f = n[e].z, u = 2 * Math.max( Math.sqrt( (l === w ? p / 2 : k + ((p - k) / (l - w)) * (f - w)) / Math.PI ) << 0, 1 ), f = q.getMarkerProperties(e, b); f.size = u; b.globalAlpha = q.fillOpacity; ia.drawMarker( g, m, b, f.type, f.size, f.color, f.borderColor, f.borderThickness ); b.globalAlpha = 1; var t = q.dataPointIds[e]; this._eventManager.objectMap[t] = { id: t, objectType: "dataPoint", dataSeriesIndex: s, dataPointIndex: e, x1: g, y1: m, size: u, }; u = N(t); r && ia.drawMarker( g, m, this._eventManager.ghostCtx, f.type, f.size, u, u, f.borderThickness ); (n[e].indexLabel || q.indexLabel || n[e].indexLabelFormatter || q.indexLabelFormatter) && this._indexLabels.push({ chartType: "bubble", dataPoint: n[e], dataSeries: q, point: { x: g, y: m }, direction: 1, bounds: { x1: g - f.size / 2, y1: m - f.size / 2, x2: g + f.size / 2, y2: m + f.size / 2, }, color: null, }); } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(c.x1, c.y1, c.width, c.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, }; } }; p.prototype.renderScatter = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = this.plotArea, e = 0, g, m; b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(c.x1, c.y1, c.width, c.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(c.x1, c.y1, c.width, c.height), this._eventManager.ghostCtx.clip()); for (var l = 0; l < a.dataSeriesIndexes.length; l++) { var w = a.dataSeriesIndexes[l], h = this.data[w], s = h.dataPoints; if (0 < s.length) { b.strokeStyle = "#4572A7 "; Math.pow((0.3 * Math.min(c.height, c.width)) / 2, 2); for (var q = 0, n = 0, e = 0; e < s.length; e++) if ( ((g = s[e].getTime ? (g = s[e].x.getTime()) : (g = s[e].x)), !( g < a.axisX.dataInfo.viewPortMin || g > a.axisX.dataInfo.viewPortMax ) && "number" === typeof s[e].y) ) { g = a.axisX.convertValueToPixel(g); m = a.axisY.convertValueToPixel(s[e].y); var f = h.getMarkerProperties(e, g, m, b); b.globalAlpha = h.fillOpacity; ia.drawMarker( f.x, f.y, f.ctx, f.type, f.size, f.color, f.borderColor, f.borderThickness ); b.globalAlpha = 1; (Math.sqrt((q - g) * (q - g) + (n - m) * (n - m)) < Math.min(f.size, 5) && s.length > Math.min(this.plotArea.width, this.plotArea.height)) || ((q = h.dataPointIds[e]), (this._eventManager.objectMap[q] = { id: q, objectType: "dataPoint", dataSeriesIndex: w, dataPointIndex: e, x1: g, y1: m, }), (q = N(q)), r && ia.drawMarker( f.x, f.y, this._eventManager.ghostCtx, f.type, f.size, q, q, f.borderThickness ), (s[e].indexLabel || h.indexLabel || s[e].indexLabelFormatter || h.indexLabelFormatter) && this._indexLabels.push({ chartType: "scatter", dataPoint: s[e], dataSeries: h, point: { x: g, y: m }, direction: 1, bounds: { x1: g - f.size / 2, y1: m - f.size / 2, x2: g + f.size / 2, y2: m + f.size / 2, }, color: null, }), (q = g), (n = m)); } } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(c.x1, c.y1, c.width, c.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, }; } }; p.prototype.renderCandlestick = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d, c = this._eventManager.ghostCtx; if (!(0 >= a.dataSeriesIndexes.length)) { var e = null, g = null, m = this.plotArea, l = 0, w, h, s, q, n, f, e = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1, g = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : 0.015 * this.width, k = a.axisX.dataInfo.minDiff; isFinite(k) || (k = 0.3 * Math.abs(a.axisX.range)); k = this.options.dataPointWidth ? this.dataPointWidth : (0.7 * m.width * (a.axisX.logarithmic ? Math.log(k) / Math.log(a.axisX.range) : Math.abs(k) / Math.abs(a.axisX.range))) << 0; this.dataPointMaxWidth && e > g && (e = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, g )); !this.dataPointMaxWidth && this.dataPointMinWidth && g < e && (g = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, e )); k < e && (k = e); k > g && (k = g); b.save(); r && c.save(); b.beginPath(); b.rect(m.x1, m.y1, m.width, m.height); b.clip(); r && (c.beginPath(), c.rect(m.x1, m.y1, m.width, m.height), c.clip()); for (var p = 0; p < a.dataSeriesIndexes.length; p++) { var v = a.dataSeriesIndexes[p], t = this.data[v], C = t.dataPoints; if (0 < C.length) for ( var x = 5 < k && t.bevelEnabled ? !0 : !1, l = 0; l < C.length; l++ ) if ( (C[l].getTime ? (f = C[l].x.getTime()) : (f = C[l].x), !( f < a.axisX.dataInfo.viewPortMin || f > a.axisX.dataInfo.viewPortMax ) && !u(C[l].y) && C[l].y.length && "number" === typeof C[l].y[0] && "number" === typeof C[l].y[1] && "number" === typeof C[l].y[2] && "number" === typeof C[l].y[3]) ) { w = a.axisX.convertValueToPixel(f); h = a.axisY.convertValueToPixel(C[l].y[0]); s = a.axisY.convertValueToPixel(C[l].y[1]); q = a.axisY.convertValueToPixel(C[l].y[2]); n = a.axisY.convertValueToPixel(C[l].y[3]); var z = (w - k / 2) << 0, y = (z + k) << 0, g = t.options.fallingColor ? t.fallingColor : t._colorSet[0], e = C[l].color ? C[l].color : t._colorSet[0], A = Math.round(Math.max(1, 0.15 * k)), D = 0 === A % 2 ? 0 : 0.5, aa = t.dataPointIds[l]; this._eventManager.objectMap[aa] = { id: aa, objectType: "dataPoint", dataSeriesIndex: v, dataPointIndex: l, x1: z, y1: h, x2: y, y2: s, x3: w, y3: q, x4: w, y4: n, borderThickness: A, color: e, }; b.strokeStyle = e; b.beginPath(); b.lineWidth = A; c.lineWidth = Math.max(A, 4); "candlestick" === t.type ? (b.moveTo(w - D, s), b.lineTo(w - D, Math.min(h, n)), b.stroke(), b.moveTo(w - D, Math.max(h, n)), b.lineTo(w - D, q), b.stroke(), ea( b, z, Math.min(h, n), y, Math.max(h, n), C[l].y[0] <= C[l].y[3] ? t.risingColor : g, A, e, x, x, !1, !1, t.fillOpacity ), r && ((e = N(aa)), (c.strokeStyle = e), c.moveTo(w - D, s), c.lineTo(w - D, Math.min(h, n)), c.stroke(), c.moveTo(w - D, Math.max(h, n)), c.lineTo(w - D, q), c.stroke(), ea( c, z, Math.min(h, n), y, Math.max(h, n), e, 0, null, !1, !1, !1, !1 ))) : "ohlc" === t.type && (b.moveTo(w - D, s), b.lineTo(w - D, q), b.stroke(), b.beginPath(), b.moveTo(w, h), b.lineTo(z, h), b.stroke(), b.beginPath(), b.moveTo(w, n), b.lineTo(y, n), b.stroke(), r && ((e = N(aa)), (c.strokeStyle = e), c.moveTo(w - D, s), c.lineTo(w - D, q), c.stroke(), c.beginPath(), c.moveTo(w, h), c.lineTo(z, h), c.stroke(), c.beginPath(), c.moveTo(w, n), c.lineTo(y, n), c.stroke())); (C[l].indexLabel || t.indexLabel || C[l].indexLabelFormatter || t.indexLabelFormatter) && this._indexLabels.push({ chartType: t.type, dataPoint: C[l], dataSeries: t, point: { x: z + (y - z) / 2, y: a.axisY.reversed ? q : s }, direction: 1, bounds: { x1: z, y1: Math.min(s, q), x2: y, y2: Math.max(s, q), }, color: e, }); } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(m.x1, m.y1, m.width, m.height), c.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, }; } }; p.prototype.renderBoxAndWhisker = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d, c = this._eventManager.ghostCtx; if (!(0 >= a.dataSeriesIndexes.length)) { var e = null, g = this.plotArea, m = 0, l, w, h, s, q, n, f, e = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1, m = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : 0.015 * this.width, k = a.axisX.dataInfo.minDiff; isFinite(k) || (k = 0.3 * Math.abs(a.axisX.range)); k = this.options.dataPointWidth ? this.dataPointWidth : (0.7 * g.width * (a.axisX.logarithmic ? Math.log(k) / Math.log(a.axisX.range) : Math.abs(k) / Math.abs(a.axisX.range))) << 0; this.dataPointMaxWidth && e > m && (e = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, m )); !this.dataPointMaxWidth && this.dataPointMinWidth && m < e && (m = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, e )); k < e && (k = e); k > m && (k = m); b.save(); r && c.save(); b.beginPath(); b.rect(g.x1, g.y1, g.width, g.height); b.clip(); r && (c.beginPath(), c.rect(g.x1, g.y1, g.width, g.height), c.clip()); for ( var p = !1, p = !!a.axisY.reversed, v = 0; v < a.dataSeriesIndexes.length; v++ ) { var t = a.dataSeriesIndexes[v], C = this.data[t], x = C.dataPoints; if (0 < x.length) for ( var z = 5 < k && C.bevelEnabled ? !0 : !1, m = 0; m < x.length; m++ ) if ( (x[m].getTime ? (f = x[m].x.getTime()) : (f = x[m].x), !( f < a.axisX.dataInfo.viewPortMin || f > a.axisX.dataInfo.viewPortMax ) && !u(x[m].y) && x[m].y.length && "number" === typeof x[m].y[0] && "number" === typeof x[m].y[1] && "number" === typeof x[m].y[2] && "number" === typeof x[m].y[3] && "number" === typeof x[m].y[4] && 5 === x[m].y.length) ) { l = a.axisX.convertValueToPixel(f); w = a.axisY.convertValueToPixel(x[m].y[0]); h = a.axisY.convertValueToPixel(x[m].y[1]); s = a.axisY.convertValueToPixel(x[m].y[2]); q = a.axisY.convertValueToPixel(x[m].y[3]); n = a.axisY.convertValueToPixel(x[m].y[4]); var y = (l - k / 2) << 0, A = (l + k / 2) << 0, e = x[m].color ? x[m].color : C._colorSet[0], D = Math.round(Math.max(1, 0.15 * k)), aa = 0 === D % 2 ? 0 : 0.5, T = x[m].whiskerColor ? x[m].whiskerColor : x[m].color ? C.whiskerColor ? C.whiskerColor : x[m].color : C.whiskerColor ? C.whiskerColor : e, Y = "number" === typeof x[m].whiskerThickness ? x[m].whiskerThickness : "number" === typeof C.options.whiskerThickness ? C.whiskerThickness : D, ca = x[m].whiskerDashType ? x[m].whiskerDashType : C.whiskerDashType, da = u(x[m].whiskerLength) ? u(C.options.whiskerLength) ? k : C.whiskerLength : x[m].whiskerLength, da = "number" === typeof da ? 0 >= da ? 0 : da >= k ? k : da : "string" === typeof da ? (parseInt(da) * k) / 100 > k ? k : (parseInt(da) * k) / 100 : k, Z = 1 === Math.round(Y) % 2 ? 0.5 : 0, oa = x[m].stemColor ? x[m].stemColor : x[m].color ? C.stemColor ? C.stemColor : x[m].color : C.stemColor ? C.stemColor : e, la = "number" === typeof x[m].stemThickness ? x[m].stemThickness : "number" === typeof C.options.stemThickness ? C.stemThickness : D, G = 1 === Math.round(la) % 2 ? 0.5 : 0, F = x[m].stemDashType ? x[m].stemDashType : C.stemDashType, E = x[m].lineColor ? x[m].lineColor : x[m].color ? C.lineColor ? C.lineColor : x[m].color : C.lineColor ? C.lineColor : e, H = "number" === typeof x[m].lineThickness ? x[m].lineThickness : "number" === typeof C.options.lineThickness ? C.lineThickness : D, I = x[m].lineDashType ? x[m].lineDashType : C.lineDashType, K = 1 === Math.round(H) % 2 ? 0.5 : 0, L = C.upperBoxColor, O = C.lowerBoxColor, Q = u(C.options.fillOpacity) ? 1 : C.fillOpacity, P = C.dataPointIds[m]; this._eventManager.objectMap[P] = { id: P, objectType: "dataPoint", dataSeriesIndex: t, dataPointIndex: m, x1: y, y1: w, x2: A, y2: h, x3: l, y3: s, x4: l, y4: q, y5: n, borderThickness: D, color: e, stemThickness: la, stemColor: oa, whiskerThickness: Y, whiskerLength: da, whiskerColor: T, lineThickness: H, lineColor: E, }; b.save(); 0 < la && (b.beginPath(), (b.strokeStyle = oa), (b.lineWidth = la), b.setLineDash && b.setLineDash(R(F, la)), b.moveTo(l - G, h), b.lineTo(l - G, w), b.stroke(), b.moveTo(l - G, q), b.lineTo(l - G, s), b.stroke()); b.restore(); c.lineWidth = Math.max(D, 4); b.beginPath(); ea( b, y, Math.min(n, h), A, Math.max(h, n), O, 0, e, p ? z : !1, p ? !1 : z, !1, !1, Q ); b.beginPath(); ea( b, y, Math.min(s, n), A, Math.max(n, s), L, 0, e, p ? !1 : z, p ? z : !1, !1, !1, Q ); b.beginPath(); b.lineWidth = D; b.strokeStyle = e; b.rect( y - aa, Math.min(h, s) - aa, A - y + 2 * aa, Math.max(h, s) - Math.min(h, s) + 2 * aa ); b.stroke(); b.save(); 0 < H && (b.beginPath(), (b.globalAlpha = 1), b.setLineDash && b.setLineDash(R(I, H)), (b.strokeStyle = E), (b.lineWidth = H), b.moveTo(y, n - K), b.lineTo(A, n - K), b.stroke()); b.restore(); b.save(); 0 < Y && (b.beginPath(), b.setLineDash && b.setLineDash(R(ca, Y)), (b.strokeStyle = T), (b.lineWidth = Y), b.moveTo((l - da / 2) << 0, q - Z), b.lineTo((l + da / 2) << 0, q - Z), b.stroke(), b.moveTo((l - da / 2) << 0, w + Z), b.lineTo((l + da / 2) << 0, w + Z), b.stroke()); b.restore(); r && ((e = N(P)), (c.strokeStyle = e), (c.lineWidth = la), 0 < la && (c.moveTo(l - aa - G, h), c.lineTo(l - aa - G, Math.max(w, q)), c.stroke(), c.moveTo(l - aa - G, Math.min(w, q)), c.lineTo(l - aa - G, s), c.stroke()), ea( c, y, Math.max(h, s), A, Math.min(h, s), e, 0, null, !1, !1, !1, !1 ), 0 < Y && (c.beginPath(), (c.lineWidth = Y), c.moveTo(l + da / 2, q - Z), c.lineTo(l - da / 2, q - Z), c.stroke(), c.moveTo(l + da / 2, w + Z), c.lineTo(l - da / 2, w + Z), c.stroke())); (x[m].indexLabel || C.indexLabel || x[m].indexLabelFormatter || C.indexLabelFormatter) && this._indexLabels.push({ chartType: C.type, dataPoint: x[m], dataSeries: C, point: { x: y + (A - y) / 2, y: a.axisY.reversed ? w : q }, direction: 1, bounds: { x1: y, y1: Math.min(w, q), x2: A, y2: Math.max(w, q), }, color: e, }); } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(g.x1, g.y1, g.width, g.height), c.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, }; } }; p.prototype.renderRangeColumn = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = null, e = this.plotArea, g = 0, m, l, w, g = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1; m = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : 0.03 * this.width; var h = a.axisX.dataInfo.minDiff; isFinite(h) || (h = 0.3 * Math.abs(a.axisX.range)); h = this.options.dataPointWidth ? this.dataPointWidth : (0.9 * ((e.width * (a.axisX.logarithmic ? Math.log(h) / Math.log(a.axisX.range) : Math.abs(h) / Math.abs(a.axisX.range))) / a.plotType.totalDataSeries)) << 0; this.dataPointMaxWidth && g > m && (g = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, m )); !this.dataPointMaxWidth && this.dataPointMinWidth && m < g && (m = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, g )); h < g && (h = g); h > m && (h = m); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.clip()); for (var s = 0; s < a.dataSeriesIndexes.length; s++) { var q = a.dataSeriesIndexes[s], n = this.data[q], f = n.dataPoints; if (0 < f.length) for ( var k = 5 < h && n.bevelEnabled ? !0 : !1, g = 0; g < f.length; g++ ) if ( (f[g].getTime ? (w = f[g].x.getTime()) : (w = f[g].x), !( w < a.axisX.dataInfo.viewPortMin || w > a.axisX.dataInfo.viewPortMax ) && !u(f[g].y) && f[g].y.length && "number" === typeof f[g].y[0] && "number" === typeof f[g].y[1]) ) { c = a.axisX.convertValueToPixel(w); m = a.axisY.convertValueToPixel(f[g].y[0]); l = a.axisY.convertValueToPixel(f[g].y[1]); var p = a.axisX.reversed ? (c + (a.plotType.totalDataSeries * h) / 2 - (a.previousDataSeriesCount + s) * h) << 0 : (c - (a.plotType.totalDataSeries * h) / 2 + (a.previousDataSeriesCount + s) * h) << 0, v = a.axisX.reversed ? (p - h) << 0 : (p + h) << 0, c = f[g].color ? f[g].color : n._colorSet[g % n._colorSet.length]; if (m > l) { var t = m; m = l; l = t; } t = n.dataPointIds[g]; this._eventManager.objectMap[t] = { id: t, objectType: "dataPoint", dataSeriesIndex: q, dataPointIndex: g, x1: p, y1: m, x2: v, y2: l, }; ea(b, p, m, v, l, c, 0, c, k, k, !1, !1, n.fillOpacity); c = N(t); r && ea( this._eventManager.ghostCtx, p, m, v, l, c, 0, null, !1, !1, !1, !1 ); if ( f[g].indexLabel || n.indexLabel || f[g].indexLabelFormatter || n.indexLabelFormatter ) this._indexLabels.push({ chartType: "rangeColumn", dataPoint: f[g], dataSeries: n, indexKeyword: 0, point: { x: p + (v - p) / 2, y: f[g].y[1] >= f[g].y[0] ? l : m, }, direction: f[g].y[1] >= f[g].y[0] ? -1 : 1, bounds: { x1: p, y1: Math.min(m, l), x2: v, y2: Math.max(m, l), }, color: c, }), this._indexLabels.push({ chartType: "rangeColumn", dataPoint: f[g], dataSeries: n, indexKeyword: 1, point: { x: p + (v - p) / 2, y: f[g].y[1] >= f[g].y[0] ? m : l, }, direction: f[g].y[1] >= f[g].y[0] ? 1 : -1, bounds: { x1: p, y1: Math.min(m, l), x2: v, y2: Math.max(m, l), }, color: c, }); } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, }; } }; p.prototype.renderError = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d, c = a.axisY._position ? "left" === a.axisY._position || "right" === a.axisY._position ? !1 : !0 : !1; if (!(0 >= a.dataSeriesIndexes.length)) { var e = null, g = !1, m = this.plotArea, l = 0, w, h, s, q, n, f, k, p = a.axisX.dataInfo.minDiff; isFinite(p) || (p = 0.3 * Math.abs(a.axisX.range)); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(m.x1, m.y1, m.width, m.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(m.x1, m.y1, m.width, m.height), this._eventManager.ghostCtx.clip()); for (var v = 0, t = 0; t < this.data.length; t++) !this.data[t].type.match(/(bar|column)/gi) || !this.data[t].visible || (this.data[t].type.match(/(stacked)/gi) && v) || v++; for (var C = 0; C < a.dataSeriesIndexes.length; C++) { var x = a.dataSeriesIndexes[C], z = this.data[x], y = z.dataPoints, A = u(z._linkedSeries) ? !1 : z._linkedSeries.type.match(/(bar|column)/gi) && z._linkedSeries.visible ? !0 : !1, D = 0; if (A) for (e = z._linkedSeries.id, t = 0; t < e; t++) !this.data[t].type.match(/(bar|column)/gi) || !this.data[t].visible || (this.data[t].type.match(/(stacked)/gi) && D) || (this.data[t].type.match(/(range)/gi) && (g = !0), D++); e = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1; l = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : c ? Math.min( 0.15 * this.height, 0.9 * (this.plotArea.height / (A ? v : 1)) ) << 0 : 0.3 * this.width; g && (l = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : c ? Math.min( 0.15 * this.height, 0.9 * (this.plotArea.height / (A ? v : 1)) ) << 0 : 0.03 * this.width); t = this.options.dataPointWidth ? this.dataPointWidth : (0.9 * (((c ? m.height : m.width) * (a.axisX.logarithmic ? Math.log(p) / Math.log(a.axisX.range) : Math.abs(p) / Math.abs(a.axisX.range))) / (A ? v : 1))) << 0; this.dataPointMaxWidth && e > l && (e = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, l )); !this.dataPointMaxWidth && this.dataPointMinWidth && l < e && (l = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, e )); t < e && (t = e); t > l && (t = l); if (0 < y.length) for (var aa = z._colorSet, l = 0; l < y.length; l++) { var e = (z.lineColor = z.options.color ? z.options.color : aa[0]), T = { color: y[l].whiskerColor ? y[l].whiskerColor : y[l].color ? z.whiskerColor ? z.whiskerColor : y[l].color : z.whiskerColor ? z.whiskerColor : e, thickness: u(y[l].whiskerThickness) ? z.whiskerThickness : y[l].whiskerThickness, dashType: y[l].whiskerDashType ? y[l].whiskerDashType : z.whiskerDashType, length: u(y[l].whiskerLength) ? u(z.options.whiskerLength) ? t : z.options.whiskerLength : y[l].whiskerLength, trimLength: u(y[l].whiskerLength) ? u(z.options.whiskerLength) ? 50 : 0 : 0, }; T.length = "number" === typeof T.length ? 0 >= T.length ? 0 : T.length >= t ? t : T.length : "string" === typeof T.length ? (parseInt(T.length) * t) / 100 > t ? t : (parseInt(T.length) * t) / 100 > t : t; T.thickness = "number" === typeof T.thickness ? 0 > T.thickness ? 0 : Math.round(T.thickness) : 2; var Y = { color: y[l].stemColor ? y[l].stemColor : y[l].color ? z.stemColor ? z.stemColor : y[l].color : z.stemColor ? z.stemColor : e, thickness: y[l].stemThickness ? y[l].stemThickness : z.stemThickness, dashType: y[l].stemDashType ? y[l].stemDashType : z.stemDashType, }; Y.thickness = "number" === typeof Y.thickness ? 0 > Y.thickness ? 0 : Math.round(Y.thickness) : 2; y[l].getTime ? (k = y[l].x.getTime()) : (k = y[l].x); if ( !( k < a.axisX.dataInfo.viewPortMin || k > a.axisX.dataInfo.viewPortMax ) && !u(y[l].y) && y[l].y.length && "number" === typeof y[l].y[0] && "number" === typeof y[l].y[1] ) { var ca = a.axisX.convertValueToPixel(k); c ? (h = ca) : (w = ca); ca = a.axisY.convertValueToPixel(y[l].y[0]); c ? (s = ca) : (n = ca); ca = a.axisY.convertValueToPixel(y[l].y[1]); c ? (q = ca) : (f = ca); c ? ((n = a.axisX.reversed ? (h + ((A ? v : 1) * t) / 2 - (A ? D - 1 : 0) * t) << 0 : (h - ((A ? v : 1) * t) / 2 + (A ? D - 1 : 0) * t) << 0), (f = a.axisX.reversed ? (n - t) << 0 : (n + t) << 0)) : ((s = a.axisX.reversed ? (w + ((A ? v : 1) * t) / 2 - (A ? D - 1 : 0) * t) << 0 : (w - ((A ? v : 1) * t) / 2 + (A ? D - 1 : 0) * t) << 0), (q = a.axisX.reversed ? (s - t) << 0 : (s + t) << 0)); !c && n > f && ((ca = n), (n = f), (f = ca)); c && s > q && ((ca = s), (s = q), (q = ca)); ca = z.dataPointIds[l]; this._eventManager.objectMap[ca] = { id: ca, objectType: "dataPoint", dataSeriesIndex: x, dataPointIndex: l, x1: Math.min(s, q), y1: Math.min(n, f), x2: Math.max(q, s), y2: Math.max(f, n), isXYSwapped: c, stemProperties: Y, whiskerProperties: T, }; E( b, Math.min(s, q), Math.min(n, f), Math.max(q, s), Math.max(f, n), e, T, Y, c ); r && E(this._eventManager.ghostCtx, s, n, q, f, e, T, Y, c); if ( y[l].indexLabel || z.indexLabel || y[l].indexLabelFormatter || z.indexLabelFormatter ) this._indexLabels.push({ chartType: "error", dataPoint: y[l], dataSeries: z, indexKeyword: 0, point: { x: c ? (y[l].y[1] >= y[l].y[0] ? s : q) : s + (q - s) / 2, y: c ? n + (f - n) / 2 : y[l].y[1] >= y[l].y[0] ? f : n, }, direction: y[l].y[1] >= y[l].y[0] ? -1 : 1, bounds: { x1: c ? Math.min(s, q) : s, y1: c ? n : Math.min(n, f), x2: c ? Math.max(s, q) : q, y2: c ? f : Math.max(n, f), }, color: e, axisSwapped: c, }), this._indexLabels.push({ chartType: "error", dataPoint: y[l], dataSeries: z, indexKeyword: 1, point: { x: c ? y[l].y[1] >= y[l].y[0] ? q : s : s + (q - s) / 2, y: c ? n + (f - n) / 2 : y[l].y[1] >= y[l].y[0] ? n : f, }, direction: y[l].y[1] >= y[l].y[0] ? 1 : -1, bounds: { x1: c ? Math.min(s, q) : s, y1: c ? n : Math.min(n, f), x2: c ? Math.max(s, q) : q, y2: c ? f : Math.max(n, f), }, color: e, axisSwapped: c, }); } } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(m.x1, m.y1, m.width, m.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, }; } }; p.prototype.renderRangeBar = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = null, e = this.plotArea, g = 0, m, l, w, h, g = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1; m = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : Math.min( 0.15 * this.height, 0.9 * (this.plotArea.height / a.plotType.totalDataSeries) ) << 0; var s = a.axisX.dataInfo.minDiff; isFinite(s) || (s = 0.3 * Math.abs(a.axisX.range)); s = this.options.dataPointWidth ? this.dataPointWidth : (0.9 * ((e.height * (a.axisX.logarithmic ? Math.log(s) / Math.log(a.axisX.range) : Math.abs(s) / Math.abs(a.axisX.range))) / a.plotType.totalDataSeries)) << 0; this.dataPointMaxWidth && g > m && (g = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, m )); !this.dataPointMaxWidth && this.dataPointMinWidth && m < g && (m = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, g )); s < g && (s = g); s > m && (s = m); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(e.x1, e.y1, e.width, e.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.clip()); for (var q = 0; q < a.dataSeriesIndexes.length; q++) { var n = a.dataSeriesIndexes[q], f = this.data[n], k = f.dataPoints; if (0 < k.length) { var p = 5 < s && f.bevelEnabled ? !0 : !1; b.strokeStyle = "#4572A7 "; for (g = 0; g < k.length; g++) if ( (k[g].getTime ? (h = k[g].x.getTime()) : (h = k[g].x), !( h < a.axisX.dataInfo.viewPortMin || h > a.axisX.dataInfo.viewPortMax ) && !u(k[g].y) && k[g].y.length && "number" === typeof k[g].y[0] && "number" === typeof k[g].y[1]) ) { m = a.axisY.convertValueToPixel(k[g].y[0]); l = a.axisY.convertValueToPixel(k[g].y[1]); w = a.axisX.convertValueToPixel(h); w = a.axisX.reversed ? (w + (a.plotType.totalDataSeries * s) / 2 - (a.previousDataSeriesCount + q) * s) << 0 : (w - (a.plotType.totalDataSeries * s) / 2 + (a.previousDataSeriesCount + q) * s) << 0; var v = a.axisX.reversed ? (w - s) << 0 : (w + s) << 0; m > l && ((c = m), (m = l), (l = c)); c = k[g].color ? k[g].color : f._colorSet[g % f._colorSet.length]; ea(b, m, w, l, v, c, 0, null, p, !1, !1, !1, f.fillOpacity); c = f.dataPointIds[g]; this._eventManager.objectMap[c] = { id: c, objectType: "dataPoint", dataSeriesIndex: n, dataPointIndex: g, x1: m, y1: w, x2: l, y2: v, }; c = N(c); r && ea( this._eventManager.ghostCtx, m, w, l, v, c, 0, null, !1, !1, !1, !1 ); if ( k[g].indexLabel || f.indexLabel || k[g].indexLabelFormatter || f.indexLabelFormatter ) this._indexLabels.push({ chartType: "rangeBar", dataPoint: k[g], dataSeries: f, indexKeyword: 0, point: { x: k[g].y[1] >= k[g].y[0] ? m : l, y: w + (v - w) / 2, }, direction: k[g].y[1] >= k[g].y[0] ? -1 : 1, bounds: { x1: Math.min(m, l), y1: w, x2: Math.max(m, l), y2: v, }, color: c, }), this._indexLabels.push({ chartType: "rangeBar", dataPoint: k[g], dataSeries: f, indexKeyword: 1, point: { x: k[g].y[1] >= k[g].y[0] ? l : m, y: w + (v - w) / 2, }, direction: k[g].y[1] >= k[g].y[0] ? 1 : -1, bounds: { x1: Math.min(m, l), y1: w, x2: Math.max(m, l), y2: v, }, color: c, }); } } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(e.x1, e.y1, e.width, e.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, }; } }; p.prototype.renderRangeArea = function (a) { function d() { if (C) { var a = null; 0 < s.lineThickness && c.stroke(); for (var b = w.length - 1; 0 <= b; b--) (a = w[b]), c.lineTo(a.x, a.y), e.lineTo(a.x, a.y); c.closePath(); c.globalAlpha = s.fillOpacity; c.fill(); c.globalAlpha = 1; e.fill(); if (0 < s.lineThickness) { c.beginPath(); c.moveTo(a.x, a.y); for (b = 0; b < w.length; b++) (a = w[b]), c.lineTo(a.x, a.y); c.stroke(); } c.beginPath(); c.moveTo(k, p); e.beginPath(); e.moveTo(k, p); C = { x: k, y: p }; w = []; w.push({ x: k, y: u }); } } var b = a.targetCanvasCtx || this.plotArea.ctx, c = r ? this._preRenderCtx : b; if (!(0 >= a.dataSeriesIndexes.length)) { var e = this._eventManager.ghostCtx, g = [], m = this.plotArea; c.save(); r && e.save(); c.beginPath(); c.rect(m.x1, m.y1, m.width, m.height); c.clip(); r && (e.beginPath(), e.rect(m.x1, m.y1, m.width, m.height), e.clip()); for (var l = 0; l < a.dataSeriesIndexes.length; l++) { var w = [], h = a.dataSeriesIndexes[l], s = this.data[h], q = s.dataPoints, g = s.id; this._eventManager.objectMap[g] = { objectType: "dataSeries", dataSeriesIndex: h, }; g = N(g); e.fillStyle = g; var g = [], n = !0, f = 0, k, p, u, t, C = null; if (0 < q.length) { var x = s._colorSet[f % s._colorSet.length], v = (s.lineColor = s.options.lineColor || x), y = v; c.fillStyle = x; c.strokeStyle = v; c.lineWidth = s.lineThickness; var A = "solid"; if (c.setLineDash) { var z = R(s.nullDataLineDashType, s.lineThickness), A = s.lineDashType, D = R(A, s.lineThickness); c.setLineDash(D); } for (var T = !0; f < q.length; f++) if ( ((t = q[f].x.getTime ? q[f].x.getTime() : q[f].x), !( t < a.axisX.dataInfo.viewPortMin || (t > a.axisX.dataInfo.viewPortMax && (!s.connectNullData || !T)) )) ) if ( null !== q[f].y && q[f].y.length && "number" === typeof q[f].y[0] && "number" === typeof q[f].y[1] ) { k = a.axisX.convertValueToPixel(t); p = a.axisY.convertValueToPixel(q[f].y[0]); u = a.axisY.convertValueToPixel(q[f].y[1]); n || T ? (s.connectNullData && !n ? (c.setLineDash && (s.options.nullDataLineDashType || (A === s.lineDashType && s.lineDashType !== s.nullDataLineDashType)) && ((w[w.length - 1].newLineDashArray = D), (A = s.nullDataLineDashType), c.setLineDash(z)), c.lineTo(k, p), r && e.lineTo(k, p), w.push({ x: k, y: u })) : (c.beginPath(), c.moveTo(k, p), (C = { x: k, y: p }), (w = []), w.push({ x: k, y: u }), r && (e.beginPath(), e.moveTo(k, p))), (T = n = !1)) : (c.lineTo(k, p), w.push({ x: k, y: u }), r && e.lineTo(k, p), 0 == f % 250 && d()); t = s.dataPointIds[f]; this._eventManager.objectMap[t] = { id: t, objectType: "dataPoint", dataSeriesIndex: h, dataPointIndex: f, x1: k, y1: p, y2: u, }; f < q.length - 1 && (y !== (q[f].lineColor || v) || A !== (q[f].lineDashType || s.lineDashType)) && (d(), (y = q[f].lineColor || v), (w[w.length - 1].newStrokeStyle = y), (c.strokeStyle = y), c.setLineDash && (q[f].lineDashType ? ((A = q[f].lineDashType), (w[w.length - 1].newLineDashArray = R( A, s.lineThickness )), c.setLineDash(w[w.length - 1].newLineDashArray)) : ((A = s.lineDashType), (w[w.length - 1].newLineDashArray = D), c.setLineDash(D)))); if ( 0 !== q[f].markerSize && (0 < q[f].markerSize || 0 < s.markerSize) ) { var Y = s.getMarkerProperties(f, k, u, c); g.push(Y); var ca = N(t); r && g.push({ x: k, y: u, ctx: e, type: Y.type, size: Y.size, color: ca, borderColor: ca, borderThickness: Y.borderThickness, }); Y = s.getMarkerProperties(f, k, p, c); g.push(Y); ca = N(t); r && g.push({ x: k, y: p, ctx: e, type: Y.type, size: Y.size, color: ca, borderColor: ca, borderThickness: Y.borderThickness, }); } if ( q[f].indexLabel || s.indexLabel || q[f].indexLabelFormatter || s.indexLabelFormatter ) this._indexLabels.push({ chartType: "rangeArea", dataPoint: q[f], dataSeries: s, indexKeyword: 0, point: { x: k, y: p }, direction: q[f].y[0] > q[f].y[1] === a.axisY.reversed ? -1 : 1, color: x, }), this._indexLabels.push({ chartType: "rangeArea", dataPoint: q[f], dataSeries: s, indexKeyword: 1, point: { x: k, y: u }, direction: q[f].y[0] > q[f].y[1] === a.axisY.reversed ? 1 : -1, color: x, }); } else T || n || d(), (T = !0); d(); ia.drawMarkers(g); } } r && (b.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (c.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && c.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && c.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), c.clearRect(m.x1, m.y1, m.width, m.height), this._eventManager.ghostCtx.restore()); c.restore(); return { source: b, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderRangeSplineArea = function (a) { function d(a, b) { var d = v(u, 2); if (0 < d.length) { if (0 < h.lineThickness) { c.strokeStyle = b; c.setLineDash && c.setLineDash(a); c.beginPath(); c.moveTo(d[0].x, d[0].y); for (var f = 0; f < d.length - 3; f += 3) { if (d[f].newStrokeStyle || d[f].newLineDashArray) c.stroke(), c.beginPath(), c.moveTo(d[f].x, d[f].y), d[f].newStrokeStyle && (c.strokeStyle = d[f].newStrokeStyle), d[f].newLineDashArray && c.setLineDash(d[f].newLineDashArray); c.bezierCurveTo( d[f + 1].x, d[f + 1].y, d[f + 2].x, d[f + 2].y, d[f + 3].x, d[f + 3].y ); } c.stroke(); } c.beginPath(); c.moveTo(d[0].x, d[0].y); r && (e.beginPath(), e.moveTo(d[0].x, d[0].y)); for (f = 0; f < d.length - 3; f += 3) c.bezierCurveTo( d[f + 1].x, d[f + 1].y, d[f + 2].x, d[f + 2].y, d[f + 3].x, d[f + 3].y ), r && e.bezierCurveTo( d[f + 1].x, d[f + 1].y, d[f + 2].x, d[f + 2].y, d[f + 3].x, d[f + 3].y ); d = v(z, 2); c.lineTo(z[z.length - 1].x, z[z.length - 1].y); for (f = d.length - 1; 2 < f; f -= 3) c.bezierCurveTo( d[f - 1].x, d[f - 1].y, d[f - 2].x, d[f - 2].y, d[f - 3].x, d[f - 3].y ), r && e.bezierCurveTo( d[f - 1].x, d[f - 1].y, d[f - 2].x, d[f - 2].y, d[f - 3].x, d[f - 3].y ); c.closePath(); c.globalAlpha = h.fillOpacity; c.fill(); r && (e.closePath(), e.fill()); c.globalAlpha = 1; if (0 < h.lineThickness) { c.strokeStyle = b; c.setLineDash && c.setLineDash(a); c.beginPath(); c.moveTo(d[0].x, d[0].y); for (var g = (f = 0); f < d.length - 3; f += 3, g++) { if (u[g].newStrokeStyle || u[g].newLineDashArray) c.stroke(), c.beginPath(), c.moveTo(d[f].x, d[f].y), u[g].newStrokeStyle && (c.strokeStyle = u[g].newStrokeStyle), u[g].newLineDashArray && c.setLineDash(u[g].newLineDashArray); c.bezierCurveTo( d[f + 1].x, d[f + 1].y, d[f + 2].x, d[f + 2].y, d[f + 3].x, d[f + 3].y ); } c.stroke(); } c.beginPath(); } } var b = a.targetCanvasCtx || this.plotArea.ctx, c = r ? this._preRenderCtx : b; if (!(0 >= a.dataSeriesIndexes.length)) { var e = this._eventManager.ghostCtx, g = [], m = this.plotArea; c.save(); r && e.save(); c.beginPath(); c.rect(m.x1, m.y1, m.width, m.height); c.clip(); r && (e.beginPath(), e.rect(m.x1, m.y1, m.width, m.height), e.clip()); for (var l = 0; l < a.dataSeriesIndexes.length; l++) { var w = a.dataSeriesIndexes[l], h = this.data[w], k = h.dataPoints, g = h.id; this._eventManager.objectMap[g] = { objectType: "dataSeries", dataSeriesIndex: w, }; g = N(g); e.fillStyle = g; var g = [], q = 0, n, f, p, u = [], z = []; if (0 < k.length) { var t = h._colorSet[q % h._colorSet.length], C = (h.lineColor = h.options.lineColor || t), x = C; c.fillStyle = t; c.lineWidth = h.lineThickness; var F = "solid", y; if (c.setLineDash) { var A = R(h.nullDataLineDashType, h.lineThickness), F = h.lineDashType; y = R(F, h.lineThickness); } for (f = !1; q < k.length; q++) if ( ((n = k[q].x.getTime ? k[q].x.getTime() : k[q].x), !( n < a.axisX.dataInfo.viewPortMin || (n > a.axisX.dataInfo.viewPortMax && (!h.connectNullData || !f)) )) ) if ( null !== k[q].y && k[q].y.length && "number" === typeof k[q].y[0] && "number" === typeof k[q].y[1] ) { n = a.axisX.convertValueToPixel(n); f = a.axisY.convertValueToPixel(k[q].y[0]); p = a.axisY.convertValueToPixel(k[q].y[1]); var E = h.dataPointIds[q]; this._eventManager.objectMap[E] = { id: E, objectType: "dataPoint", dataSeriesIndex: w, dataPointIndex: q, x1: n, y1: f, y2: p, }; u[u.length] = { x: n, y: f }; z[z.length] = { x: n, y: p }; q < k.length - 1 && (x !== (k[q].lineColor || C) || F !== (k[q].lineDashType || h.lineDashType)) && ((x = k[q].lineColor || C), (u[u.length - 1].newStrokeStyle = x), c.setLineDash && (k[q].lineDashType ? ((F = k[q].lineDashType), (u[u.length - 1].newLineDashArray = R( F, h.lineThickness ))) : ((F = h.lineDashType), (u[u.length - 1].newLineDashArray = y)))); if ( 0 !== k[q].markerSize && (0 < k[q].markerSize || 0 < h.markerSize) ) { var aa = h.getMarkerProperties(q, n, f, c); g.push(aa); var T = N(E); r && g.push({ x: n, y: f, ctx: e, type: aa.type, size: aa.size, color: T, borderColor: T, borderThickness: aa.borderThickness, }); aa = h.getMarkerProperties(q, n, p, c); g.push(aa); T = N(E); r && g.push({ x: n, y: p, ctx: e, type: aa.type, size: aa.size, color: T, borderColor: T, borderThickness: aa.borderThickness, }); } if ( k[q].indexLabel || h.indexLabel || k[q].indexLabelFormatter || h.indexLabelFormatter ) this._indexLabels.push({ chartType: "rangeSplineArea", dataPoint: k[q], dataSeries: h, indexKeyword: 0, point: { x: n, y: f }, direction: k[q].y[0] <= k[q].y[1] ? -1 : 1, color: t, }), this._indexLabels.push({ chartType: "rangeSplineArea", dataPoint: k[q], dataSeries: h, indexKeyword: 1, point: { x: n, y: p }, direction: k[q].y[0] <= k[q].y[1] ? 1 : -1, color: t, }); f = !1; } else 0 < q && !f && (h.connectNullData ? c.setLineDash && 0 < u.length && (h.options.nullDataLineDashType || !k[q - 1].lineDashType) && ((u[u.length - 1].newLineDashArray = A), (F = h.nullDataLineDashType)) : (d(y, C), (u = []), (z = []))), (f = !0); d(y, C); ia.drawMarkers(g); } } r && (b.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (c.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && c.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && c.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), c.clearRect(m.x1, m.y1, m.width, m.height), this._eventManager.ghostCtx.restore()); c.restore(); return { source: b, dest: this.plotArea.ctx, animationCallback: M.xClipAnimation, easingFunction: M.easing.linear, animationBase: 0, }; } }; p.prototype.renderWaterfall = function (a) { var d = a.targetCanvasCtx || this.plotArea.ctx, b = r ? this._preRenderCtx : d; if (!(0 >= a.dataSeriesIndexes.length)) { var c = this._eventManager.ghostCtx, e = null, g = this.plotArea, m = 0, l, k, h, s, q = a.axisY.convertValueToPixel( a.axisY.logarithmic ? a.axisY.viewportMinimum : 0 ), m = this.options.dataPointMinWidth ? this.dataPointMinWidth : this.options.dataPointWidth ? this.dataPointWidth : 1; k = this.options.dataPointMaxWidth ? this.dataPointMaxWidth : this.options.dataPointWidth ? this.dataPointWidth : Math.min( 0.15 * this.width, 0.9 * (this.plotArea.width / a.plotType.totalDataSeries) ) << 0; var n = a.axisX.dataInfo.minDiff; isFinite(n) || (n = 0.3 * Math.abs(a.axisX.range)); n = this.options.dataPointWidth ? this.dataPointWidth : (0.6 * ((g.width * (a.axisX.logarithmic ? Math.log(n) / Math.log(a.axisX.range) : Math.abs(n) / Math.abs(a.axisX.range))) / a.plotType.totalDataSeries)) << 0; this.dataPointMaxWidth && m > k && (m = Math.min( this.options.dataPointWidth ? this.dataPointWidth : Infinity, k )); !this.dataPointMaxWidth && this.dataPointMinWidth && k < m && (k = Math.max( this.options.dataPointWidth ? this.dataPointWidth : -Infinity, m )); n < m && (n = m); n > k && (n = k); b.save(); r && this._eventManager.ghostCtx.save(); b.beginPath(); b.rect(g.x1, g.y1, g.width, g.height); b.clip(); r && (this._eventManager.ghostCtx.beginPath(), this._eventManager.ghostCtx.rect(g.x1, g.y1, g.width, g.height), this._eventManager.ghostCtx.clip()); for (var f = 0; f < a.dataSeriesIndexes.length; f++) { var p = a.dataSeriesIndexes[f], u = this.data[p], v = u.dataPoints, e = u._colorSet[0]; u.risingColor = u.options.risingColor ? u.options.risingColor : e; u.fallingColor = u.options.fallingColor ? u.options.fallingColor : "#e40a0a"; var t = "number" === typeof u.options.lineThickness ? Math.round(u.lineThickness) : 1, C = 1 === Math.round(t) % 2 ? -0.5 : 0; if (0 < v.length) for ( var x = 5 < n && u.bevelEnabled ? !0 : !1, z = !1, y = null, A = null, m = 0; m < v.length; m++ ) if ( (v[m].getTime ? (s = v[m].x.getTime()) : (s = v[m].x), "number" !== typeof v[m].y) ) { if (0 < m && !z && u.connectNullData) var D = u.options.nullDataLineDashType || !v[m - 1].lineDashType ? u.nullDataLineDashType : v[m - 1].lineDashType; z = !0; } else { l = a.axisX.convertValueToPixel(s); k = 0 === u.dataPointEOs[m].cumulativeSum ? q : a.axisY.convertValueToPixel( u.dataPointEOs[m].cumulativeSum ); h = 0 === u.dataPointEOs[m].cumulativeSumYStartValue ? q : a.axisY.convertValueToPixel( u.dataPointEOs[m].cumulativeSumYStartValue ); l = a.axisX.reversed ? (l + (a.plotType.totalDataSeries * n) / 2 - (a.previousDataSeriesCount + f) * n) << 0 : (l - (a.plotType.totalDataSeries * n) / 2 + (a.previousDataSeriesCount + f) * n) << 0; var F = a.axisX.reversed ? (l - n) << 0 : (l + n) << 0; k > h && ((e = k), (k = h), (h = e)); a.axisY.reversed && ((e = k), (k = h), (h = e)); e = u.dataPointIds[m]; this._eventManager.objectMap[e] = { id: e, objectType: "dataPoint", dataSeriesIndex: p, dataPointIndex: m, x1: l, y1: k, x2: F, y2: h, }; var T = v[m].color ? v[m].color : 0 < v[m].y ? u.risingColor : u.fallingColor; ea(b, l, k, F, h, T, 0, T, x, x, !1, !1, u.fillOpacity); e = N(e); r && ea( this._eventManager.ghostCtx, l, k, F, h, e, 0, null, !1, !1, !1, !1 ); var Y, T = l; Y = ("undefined" !== typeof v[m].isIntermediateSum && !0 === v[m].isIntermediateSum) || ("undefined" !== typeof v[m].isCumulativeSum && !0 === v[m].isCumulativeSum) ? 0 < v[m].y ? k : h : 0 < v[m].y ? h : k; 0 < m && y && (!z || u.connectNullData) && (z && b.setLineDash && b.setLineDash(R(D, t)), b.beginPath(), b.moveTo(y, A - C), b.lineTo(T, Y - C), 0 < t && b.stroke(), r && (c.beginPath(), c.moveTo(y, A - C), c.lineTo(T, Y - C), 0 < t && c.stroke())); z = !1; y = F; A = 0 < v[m].y ? k : h; T = v[m].lineDashType ? v[m].lineDashType : u.options.lineDashType ? u.options.lineDashType : "shortDash"; b.strokeStyle = v[m].lineColor ? v[m].lineColor : u.options.lineColor ? u.options.lineColor : "#9e9e9e"; b.lineWidth = t; b.setLineDash && ((T = R(T, t)), b.setLineDash(T)); (v[m].indexLabel || u.indexLabel || v[m].indexLabelFormatter || u.indexLabelFormatter) && this._indexLabels.push({ chartType: "waterfall", dataPoint: v[m], dataSeries: u, point: { x: l + (F - l) / 2, y: 0 <= v[m].y ? k : h }, direction: 0 > v[m].y === a.axisY.reversed ? 1 : -1, bounds: { x1: l, y1: Math.min(k, h), x2: F, y2: Math.max(k, h), }, color: e, }); } } r && (d.drawImage(this._preRenderCanvas, 0, 0, this.width, this.height), (b.globalCompositeOperation = "source-atop"), a.axisX.maskCanvas && b.drawImage(a.axisX.maskCanvas, 0, 0, this.width, this.height), a.axisY.maskCanvas && b.drawImage(a.axisY.maskCanvas, 0, 0, this.width, this.height), this._breaksCanvasCtx && this._breaksCanvasCtx.drawImage( this._preRenderCanvas, 0, 0, this.width, this.height ), b.clearRect(g.x1, g.y1, g.width, g.height), this._eventManager.ghostCtx.restore()); b.restore(); return { source: d, dest: this.plotArea.ctx, animationCallback: M.fadeInAnimation, easingFunction: M.easing.easeInQuad, animationBase: 0, }; } }; var ja = function (a, d, b, c, e, g, m, l, k) { if (!(0 > b)) { "undefined" === typeof l && (l = 1); if (!r) { var h = Number((m % (2 * Math.PI)).toFixed(8)); Number((g % (2 * Math.PI)).toFixed(8)) === h && (m -= 1e-4); } a.save(); a.globalAlpha = l; "pie" === e ? (a.beginPath(), a.moveTo(d.x, d.y), a.arc(d.x, d.y, b, g, m, !1), (a.fillStyle = c), (a.strokeStyle = "white"), (a.lineWidth = 2), a.closePath(), a.fill()) : "doughnut" === e && (a.beginPath(), a.arc(d.x, d.y, b, g, m, !1), 0 <= k && a.arc(d.x, d.y, k * b, m, g, !0), a.closePath(), (a.fillStyle = c), (a.strokeStyle = "white"), (a.lineWidth = 2), a.fill()); a.globalAlpha = 1; a.restore(); } }; p.prototype.renderPie = function (a) { function d() { if (h && s) { for (var a = 0, b = 0, c = 0, e = 0, d = 0; d < s.length; d++) { var g = s[d], l = h.dataPointIds[d]; f[d].id = l; f[d].objectType = "dataPoint"; f[d].dataPointIndex = d; f[d].dataSeriesIndex = 0; var m = f[d], q = { percent: null, total: null }, p = null, q = k.getPercentAndTotal(h, g); if (h.indexLabelFormatter || g.indexLabelFormatter) p = { chart: k.options, dataSeries: h, dataPoint: g, total: q.total, percent: q.percent, }; q = g.indexLabelFormatter ? g.indexLabelFormatter(p) : g.indexLabel ? k.replaceKeywordsWithValue(g.indexLabel, g, h, d) : h.indexLabelFormatter ? h.indexLabelFormatter(p) : h.indexLabel ? k.replaceKeywordsWithValue(h.indexLabel, g, h, d) : g.label ? g.label : ""; k._eventManager.objectMap[l] = m; m.center = { x: x.x, y: x.y }; m.y = g.y; m.radius = A; m.percentInnerRadius = F; m.indexLabelText = q; m.indexLabelPlacement = h.indexLabelPlacement; m.indexLabelLineColor = g.indexLabelLineColor ? g.indexLabelLineColor : h.options.indexLabelLineColor ? h.options.indexLabelLineColor : g.color ? g.color : h._colorSet[d % h._colorSet.length]; m.indexLabelLineThickness = u(g.indexLabelLineThickness) ? h.indexLabelLineThickness : g.indexLabelLineThickness; m.indexLabelLineDashType = g.indexLabelLineDashType ? g.indexLabelLineDashType : h.indexLabelLineDashType; m.indexLabelFontColor = g.indexLabelFontColor ? g.indexLabelFontColor : h.indexLabelFontColor; m.indexLabelFontStyle = g.indexLabelFontStyle ? g.indexLabelFontStyle : h.indexLabelFontStyle; m.indexLabelFontWeight = g.indexLabelFontWeight ? g.indexLabelFontWeight : h.indexLabelFontWeight; m.indexLabelFontSize = u(g.indexLabelFontSize) ? h.indexLabelFontSize : g.indexLabelFontSize; m.indexLabelFontFamily = g.indexLabelFontFamily ? g.indexLabelFontFamily : h.indexLabelFontFamily; m.indexLabelBackgroundColor = g.indexLabelBackgroundColor ? g.indexLabelBackgroundColor : h.options.indexLabelBackgroundColor ? h.options.indexLabelBackgroundColor : h.indexLabelBackgroundColor; m.indexLabelMaxWidth = g.indexLabelMaxWidth ? g.indexLabelMaxWidth : h.indexLabelMaxWidth ? h.indexLabelMaxWidth : 0.33 * n.width; m.indexLabelWrap = "undefined" !== typeof g.indexLabelWrap ? g.indexLabelWrap : h.indexLabelWrap; m.startAngle = 0 === d ? h.startAngle ? (h.startAngle / 180) * Math.PI : 0 : f[d - 1].endAngle; m.startAngle = (m.startAngle + 2 * Math.PI) % (2 * Math.PI); m.endAngle = m.startAngle + ((2 * Math.PI) / z) * Math.abs(g.y); g = (m.endAngle + m.startAngle) / 2; g = (g + 2 * Math.PI) % (2 * Math.PI); m.midAngle = g; if (m.midAngle > Math.PI / 2 - t && m.midAngle < Math.PI / 2 + t) { if (0 === a || f[c].midAngle > m.midAngle) c = d; a++; } else if ( m.midAngle > (3 * Math.PI) / 2 - t && m.midAngle < (3 * Math.PI) / 2 + t ) { if (0 === b || f[e].midAngle > m.midAngle) e = d; b++; } m.hemisphere = g > Math.PI / 2 && g <= (3 * Math.PI) / 2 ? "left" : "right"; m.indexLabelTextBlock = new ka(k.plotArea.ctx, { fontSize: m.indexLabelFontSize, fontFamily: m.indexLabelFontFamily, fontColor: m.indexLabelFontColor, fontStyle: m.indexLabelFontStyle, fontWeight: m.indexLabelFontWeight, horizontalAlign: "left", backgroundColor: m.indexLabelBackgroundColor, maxWidth: m.indexLabelMaxWidth, maxHeight: m.indexLabelWrap ? 5 * m.indexLabelFontSize : 1.5 * m.indexLabelFontSize, text: m.indexLabelText, padding: 0, textBaseline: "top", }); m.indexLabelTextBlock.measureText(); } l = g = 0; q = !1; for (d = 0; d < s.length; d++) (m = f[(c + d) % s.length]), 1 < a && m.midAngle > Math.PI / 2 - t && m.midAngle < Math.PI / 2 + t && (g <= a / 2 && !q ? ((m.hemisphere = "right"), g++) : ((m.hemisphere = "left"), (q = !0))); q = !1; for (d = 0; d < s.length; d++) (m = f[(e + d) % s.length]), 1 < b && m.midAngle > (3 * Math.PI) / 2 - t && m.midAngle < (3 * Math.PI) / 2 + t && (l <= b / 2 && !q ? ((m.hemisphere = "left"), l++) : ((m.hemisphere = "right"), (q = !0))); } } function b(a) { var b = k.plotArea.ctx; b.clearRect(n.x1, n.y1, n.width, n.height); b.fillStyle = k.backgroundColor; b.fillRect(n.x1, n.y1, n.width, n.height); for (b = 0; b < s.length; b++) { var c = f[b].startAngle, e = f[b].endAngle; if (e > c) { var d = 0.07 * A * Math.cos(f[b].midAngle), g = 0.07 * A * Math.sin(f[b].midAngle), m = !1; if (s[b].exploded) { if ( 1e-9 < Math.abs(f[b].center.x - (x.x + d)) || 1e-9 < Math.abs(f[b].center.y - (x.y + g)) ) (f[b].center.x = x.x + d * a), (f[b].center.y = x.y + g * a), (m = !0); } else if ( 0 < Math.abs(f[b].center.x - x.x) || 0 < Math.abs(f[b].center.y - x.y) ) (f[b].center.x = x.x + d * (1 - a)), (f[b].center.y = x.y + g * (1 - a)), (m = !0); m && ((d = {}), (d.dataSeries = h), (d.dataPoint = h.dataPoints[b]), (d.index = b), k.toolTip.highlightObjects([d])); ja( k.plotArea.ctx, f[b].center, f[b].radius, s[b].color ? s[b].color : h._colorSet[b % h._colorSet.length], h.type, c, e, h.fillOpacity, f[b].percentInnerRadius ); } } a = k.plotArea.ctx; a.save(); a.fillStyle = "black"; a.strokeStyle = "grey"; a.textBaseline = "middle"; a.lineJoin = "round"; for (b = b = 0; b < s.length; b++) (c = f[b]), c.indexLabelText && ((c.indexLabelTextBlock.y -= c.indexLabelTextBlock.height / 2), (e = 0), (e = "left" === c.hemisphere ? "inside" !== h.indexLabelPlacement ? -(c.indexLabelTextBlock.width + q) : -c.indexLabelTextBlock.width / 2 : "inside" !== h.indexLabelPlacement ? q : -c.indexLabelTextBlock.width / 2), (c.indexLabelTextBlock.x += e), c.indexLabelTextBlock.render(!0), (c.indexLabelTextBlock.x -= e), (c.indexLabelTextBlock.y += c.indexLabelTextBlock.height / 2), "inside" !== c.indexLabelPlacement && 0 < c.indexLabelLineThickness && ((e = c.center.x + A * Math.cos(c.midAngle)), (d = c.center.y + A * Math.sin(c.midAngle)), (a.strokeStyle = c.indexLabelLineColor), (a.lineWidth = c.indexLabelLineThickness), a.setLineDash && a.setLineDash( R(c.indexLabelLineDashType, c.indexLabelLineThickness) ), a.beginPath(), a.moveTo(e, d), a.lineTo(c.indexLabelTextBlock.x, c.indexLabelTextBlock.y), a.lineTo( c.indexLabelTextBlock.x + ("left" === c.hemisphere ? -q : q), c.indexLabelTextBlock.y ), a.stroke()), (a.lineJoin = "miter")); a.save(); } function c(a, b) { var c = 0, c = a.indexLabelTextBlock.y - a.indexLabelTextBlock.height / 2, e = a.indexLabelTextBlock.y + a.indexLabelTextBlock.height / 2, d = b.indexLabelTextBlock.y - b.indexLabelTextBlock.height / 2, f = b.indexLabelTextBlock.y + b.indexLabelTextBlock.height / 2; return (c = b.indexLabelTextBlock.y > a.indexLabelTextBlock.y ? d - e : c - f); } function e(a) { for (var b = null, e = 1; e < s.length; e++) if ( ((b = (a + e + f.length) % f.length), f[b].hemisphere !== f[a].hemisphere) ) { b = null; break; } else if ( f[b].indexLabelText && b !== a && (0 > c(f[b], f[a]) || ("right" === f[a].hemisphere ? f[b].indexLabelTextBlock.y >= f[a].indexLabelTextBlock.y : f[b].indexLabelTextBlock.y <= f[a].indexLabelTextBlock.y)) ) break; else b = null; return b; } function g(a, b, d) { d = (d || 0) + 1; if (1e3 < d) return 0; b = b || 0; var m = 0, h = x.y - 1 * r, l = x.y + 1 * r; if (0 <= a && a < s.length) { var n = f[a]; if ( (0 > b && n.indexLabelTextBlock.y < h) || (0 < b && n.indexLabelTextBlock.y > l) ) return 0; var k = 0, q = 0, q = (k = k = 0); 0 > b ? n.indexLabelTextBlock.y - n.indexLabelTextBlock.height / 2 > h && n.indexLabelTextBlock.y - n.indexLabelTextBlock.height / 2 + b < h && (b = -( h - (n.indexLabelTextBlock.y - n.indexLabelTextBlock.height / 2 + b) )) : n.indexLabelTextBlock.y + n.indexLabelTextBlock.height / 2 < h && n.indexLabelTextBlock.y + n.indexLabelTextBlock.height / 2 + b > l && (b = n.indexLabelTextBlock.y + n.indexLabelTextBlock.height / 2 + b - l); b = n.indexLabelTextBlock.y + b; h = 0; h = "right" === n.hemisphere ? x.x + Math.sqrt(Math.pow(r, 2) - Math.pow(b - x.y, 2)) : x.x - Math.sqrt(Math.pow(r, 2) - Math.pow(b - x.y, 2)); q = x.x + A * Math.cos(n.midAngle); k = x.y + A * Math.sin(n.midAngle); k = Math.sqrt(Math.pow(h - q, 2) + Math.pow(b - k, 2)); q = Math.acos(A / r); k = Math.acos((r * r + A * A - k * k) / (2 * A * r)); b = k < q ? b - n.indexLabelTextBlock.y : 0; h = null; for (l = 1; l < s.length; l++) if ( ((h = (a - l + f.length) % f.length), f[h].hemisphere !== f[a].hemisphere) ) { h = null; break; } else if ( f[h].indexLabelText && f[h].hemisphere === f[a].hemisphere && h !== a && (0 > c(f[h], f[a]) || ("right" === f[a].hemisphere ? f[h].indexLabelTextBlock.y <= f[a].indexLabelTextBlock.y : f[h].indexLabelTextBlock.y >= f[a].indexLabelTextBlock.y)) ) break; else h = null; q = h; k = e(a); l = h = 0; 0 > b ? ((l = "right" === n.hemisphere ? q : k), (m = b), null !== l && ((q = -b), (b = n.indexLabelTextBlock.y - n.indexLabelTextBlock.height / 2 - (f[l].indexLabelTextBlock.y + f[l].indexLabelTextBlock.height / 2)), b - q < p && ((h = -q), (l = g(l, h, d + 1)), +l.toFixed(C) > +h.toFixed(C) && (m = b > p ? -(b - p) : -(q - (l - h)))))) : 0 < b && ((l = "right" === n.hemisphere ? k : q), (m = b), null !== l && ((q = b), (b = f[l].indexLabelTextBlock.y - f[l].indexLabelTextBlock.height / 2 - (n.indexLabelTextBlock.y + n.indexLabelTextBlock.height / 2)), b - q < p && ((h = q), (l = g(l, h, d + 1)), +l.toFixed(C) < +h.toFixed(C) && (m = b > p ? b - p : q - (h - l))))); m && ((d = n.indexLabelTextBlock.y + m), (b = 0), (b = "right" === n.hemisphere ? x.x + Math.sqrt(Math.pow(r, 2) - Math.pow(d - x.y, 2)) : x.x - Math.sqrt(Math.pow(r, 2) - Math.pow(d - x.y, 2))), n.midAngle > Math.PI / 2 - t && n.midAngle < Math.PI / 2 + t ? ((h = (a - 1 + f.length) % f.length), (h = f[h]), (a = f[(a + 1 + f.length) % f.length]), "left" === n.hemisphere && "right" === h.hemisphere && b > h.indexLabelTextBlock.x ? (b = h.indexLabelTextBlock.x - 15) : "right" === n.hemisphere && "left" === a.hemisphere && b < a.indexLabelTextBlock.x && (b = a.indexLabelTextBlock.x + 15)) : n.midAngle > (3 * Math.PI) / 2 - t && n.midAngle < (3 * Math.PI) / 2 + t && ((h = (a - 1 + f.length) % f.length), (h = f[h]), (a = f[(a + 1 + f.length) % f.length]), "right" === n.hemisphere && "left" === h.hemisphere && b < h.indexLabelTextBlock.x ? (b = h.indexLabelTextBlock.x + 15) : "left" === n.hemisphere && "right" === a.hemisphere && b > a.indexLabelTextBlock.x && (b = a.indexLabelTextBlock.x - 15)), (n.indexLabelTextBlock.y = d), (n.indexLabelTextBlock.x = b), (n.indexLabelAngle = Math.atan2( n.indexLabelTextBlock.y - x.y, n.indexLabelTextBlock.x - x.x ))); } return m; } function m() { var a = k.plotArea.ctx; a.fillStyle = "grey"; a.strokeStyle = "grey"; a.font = "16px Arial"; a.textBaseline = "middle"; for ( var b = (a = 0), d = 0, m = !0, b = 0; 10 > b && (1 > b || 0 < d); b++ ) { if ( h.radius || (!h.radius && "undefined" !== typeof h.innerRadius && null !== h.innerRadius && A - d <= D) ) m = !1; m && (A -= d); d = 0; if ("inside" !== h.indexLabelPlacement) { r = A * v; for (a = 0; a < s.length; a++) { var l = f[a]; l.indexLabelTextBlock.x = x.x + r * Math.cos(l.midAngle); l.indexLabelTextBlock.y = x.y + r * Math.sin(l.midAngle); l.indexLabelAngle = l.midAngle; l.radius = A; l.percentInnerRadius = F; } for (var t, u, a = 0; a < s.length; a++) { var l = f[a], y = e(a); if (null !== y) { t = f[a]; u = f[y]; var z = 0, z = c(t, u) - p; if (0 > z) { for (var E = (u = 0), H = 0; H < s.length; H++) H !== a && f[H].hemisphere === l.hemisphere && (f[H].indexLabelTextBlock.y < l.indexLabelTextBlock.y ? u++ : E++); u = (z / (u + E || 1)) * E; var E = -1 * (z - u), I = (H = 0); "right" === l.hemisphere ? ((H = g(a, u)), (E = -1 * (z - H)), (I = g(y, E)), +I.toFixed(C) < +E.toFixed(C) && +H.toFixed(C) <= +u.toFixed(C) && g(a, -(E - I))) : ((H = g(y, u)), (E = -1 * (z - H)), (I = g(a, E)), +I.toFixed(C) < +E.toFixed(C) && +H.toFixed(C) <= +u.toFixed(C) && g(y, -(E - I))); } } } } else for (a = 0; a < s.length; a++) (l = f[a]), (r = "pie" === h.type ? 0.7 * A : 0.8 * A), (y = x.x + r * Math.cos(l.midAngle)), (u = x.y + r * Math.sin(l.midAngle)), (l.indexLabelTextBlock.x = y), (l.indexLabelTextBlock.y = u); for (a = 0; a < s.length; a++) if ( ((l = f[a]), (y = l.indexLabelTextBlock.measureText()), 0 !== y.height && 0 !== y.width) ) (y = y = 0), "right" === l.hemisphere ? ((y = n.x2 - (l.indexLabelTextBlock.x + l.indexLabelTextBlock.width + q)), (y *= -1)) : (y = n.x1 - (l.indexLabelTextBlock.x - l.indexLabelTextBlock.width - q)), 0 < y && (!m && l.indexLabelText && ((u = "right" === l.hemisphere ? n.x2 - l.indexLabelTextBlock.x : l.indexLabelTextBlock.x - n.x1), 0.3 * l.indexLabelTextBlock.maxWidth > u ? (l.indexLabelText = "") : (l.indexLabelTextBlock.maxWidth = 0.85 * u), 0.3 * l.indexLabelTextBlock.maxWidth < u && (l.indexLabelTextBlock.x -= "right" === l.hemisphere ? 2 : -2)), Math.abs( l.indexLabelTextBlock.y - l.indexLabelTextBlock.height / 2 - x.y ) < A || Math.abs( l.indexLabelTextBlock.y + l.indexLabelTextBlock.height / 2 - x.y ) < A) && ((y /= Math.abs(Math.cos(l.indexLabelAngle))), 9 < y && (y *= 0.3), y > d && (d = y)), (y = y = 0), 0 < l.indexLabelAngle && l.indexLabelAngle < Math.PI ? ((y = n.y2 - (l.indexLabelTextBlock.y + l.indexLabelTextBlock.height / 2 + 5)), (y *= -1)) : (y = n.y1 - (l.indexLabelTextBlock.y - l.indexLabelTextBlock.height / 2 - 5)), 0 < y && (!m && l.indexLabelText && ((u = 0 < l.indexLabelAngle && l.indexLabelAngle < Math.PI ? -1 : 1), 0 === g(a, y * u) && g(a, 2 * u)), Math.abs(l.indexLabelTextBlock.x - x.x) < A && ((y /= Math.abs(Math.sin(l.indexLabelAngle))), 9 < y && (y *= 0.3), y > d && (d = y))); var K = function (a, b, c) { for ( var e = [], d = 0; e.push(f[b]), b !== c; b = (b + 1 + s.length) % s.length ); e.sort(function (a, b) { return a.y - b.y; }); for (b = 0; b < e.length; b++) if (((c = e[b]), d < 0.7 * a)) (d += c.indexLabelTextBlock.height), (c.indexLabelTextBlock.text = ""), (c.indexLabelText = ""), c.indexLabelTextBlock.measureText(); else break; }; (function () { for (var a = -1, b = -1, d = 0, g = !1, l = 0; l < s.length; l++) if (((g = !1), (t = f[l]), t.indexLabelText)) { var m = e(l); if (null !== m) { var h = f[m]; z = 0; z = c(t, h); var n; if ((n = 0 > z)) { n = t.indexLabelTextBlock.x; var k = t.indexLabelTextBlock.y - t.indexLabelTextBlock.height / 2, w = t.indexLabelTextBlock.y + t.indexLabelTextBlock.height / 2, p = h.indexLabelTextBlock.y - h.indexLabelTextBlock.height / 2, u = h.indexLabelTextBlock.x + h.indexLabelTextBlock.width, r = h.indexLabelTextBlock.y + h.indexLabelTextBlock.height / 2; n = t.indexLabelTextBlock.x + t.indexLabelTextBlock.width < h.indexLabelTextBlock.x - q || n > u + q || k > r + q || w < p - q ? !1 : !0; } n ? (0 > a && (a = l), m !== a && ((b = m), (d += -z)), 0 === l % Math.max(s.length / 10, 3) && (g = !0)) : (g = !0); g && 0 < d && 0 <= a && 0 <= b && (K(d, a, b), (b = a = -1), (d = 0)); } } 0 < d && K(d, a, b); })(); } } function l() { k.plotArea.layoutManager.reset(); k.title && (k.title.dockInsidePlotArea || ("center" === k.title.horizontalAlign && "center" === k.title.verticalAlign)) && k.title.render(); if (k.subtitles) for (var a = 0; a < k.subtitles.length; a++) { var b = k.subtitles[a]; (b.dockInsidePlotArea || ("center" === b.horizontalAlign && "center" === b.verticalAlign)) && b.render(); } k.legend && (k.legend.dockInsidePlotArea || ("center" === k.legend.horizontalAlign && "center" === k.legend.verticalAlign)) && (k.legend.setLayout(), k.legend.render()); } var k = this; if (!(0 >= a.dataSeriesIndexes.length)) { var h = this.data[a.dataSeriesIndexes[0]], s = h.dataPoints, q = 10, n = this.plotArea, f = h.dataPointEOs, p = 2, r, v = 1.3, t = (20 / 180) * Math.PI, C = 6, x = { x: (n.x2 + n.x1) / 2, y: (n.y2 + n.y1) / 2 }, z = 0; a = !1; for (var y = 0; y < s.length; y++) (z += Math.abs(s[y].y)), !a && "undefined" !== typeof s[y].indexLabel && null !== s[y].indexLabel && 0 < s[y].indexLabel.toString().length && (a = !0), !a && "undefined" !== typeof s[y].label && null !== s[y].label && 0 < s[y].label.toString().length && (a = !0); if (0 !== z) { a = a || ("undefined" !== typeof h.indexLabel && null !== h.indexLabel && 0 < h.indexLabel.toString().length); var A = "inside" !== h.indexLabelPlacement && a ? (0.75 * Math.min(n.width, n.height)) / 2 : (0.92 * Math.min(n.width, n.height)) / 2; h.radius && (A = I(h.radius, A)); var D = "undefined" !== typeof h.innerRadius && null !== h.innerRadius ? I(h.innerRadius, A) : 0.7 * A; h.radius = A; "doughnut" === h.type && (h.innerRadius = D); var F = Math.min(D / A, (A - 1) / A); this.pieDoughnutClickHandler = function (a) { k.isAnimating || (!u(a.dataSeries.explodeOnClick) && !a.dataSeries.explodeOnClick) || ((a = a.dataPoint), (a.exploded = a.exploded ? !1 : !0), 1 < this.dataPoints.length && k._animator.animate(0, 500, function (a) { b(a); l(); })); }; d(); m(); m(); m(); m(); this.disableToolTip = !0; this._animator.animate( 0, this.animatedRender ? this.animationDuration : 0, function (a) { var b = k.plotArea.ctx; b.clearRect(n.x1, n.y1, n.width, n.height); b.fillStyle = k.backgroundColor; b.fillRect(n.x1, n.y1, n.width, n.height); a = f[0].startAngle + 2 * Math.PI * a; for (b = 0; b < s.length; b++) { var c = 0 === b ? f[b].startAngle : e, e = c + (f[b].endAngle - f[b].startAngle), d = !1; e > a && ((e = a), (d = !0)); var g = s[b].color ? s[b].color : h._colorSet[b % h._colorSet.length]; e > c && ja( k.plotArea.ctx, f[b].center, f[b].radius, g, h.type, c, e, h.fillOpacity, f[b].percentInnerRadius ); if (d) break; } l(); }, function () { k.disableToolTip = !1; k._animator.animate(0, k.animatedRender ? 500 : 0, function (a) { b(a); l(); }); } ); } } }; var ra = function (a, d, b, c) { "undefined" === typeof b && (b = 1); 0 >= Math.round(d.y4 - d.y1) || (a.save(), (a.globalAlpha = b), a.beginPath(), a.moveTo(Math.round(d.x1), Math.round(d.y1)), a.lineTo(Math.round(d.x2), Math.round(d.y2)), a.lineTo(Math.round(d.x3), Math.round(d.y3)), a.lineTo(Math.round(d.x4), Math.round(d.y4)), "undefined" !== d.x5 && (a.lineTo(Math.round(d.x5), Math.round(d.y5)), a.lineTo(Math.round(d.x6), Math.round(d.y6))), a.closePath(), (a.fillStyle = c ? c : d.color), a.fill(), (a.globalAplha = 1), a.restore()); }; p.prototype.renderFunnel = function (a) { function d() { for (var a = 0, b = [], c = 0; c < C.length; c++) { if ("undefined" === typeof C[c].y) return -1; C[c].y = "number" === typeof C[c].y ? C[c].y : 0; a += Math.abs(C[c].y); } if (0 === a) return -1; for (c = b[0] = 0; c < C.length; c++) b.push((Math.abs(C[c].y) * F) / a); return b; } function b() { var a = $, b = V, c = K, e = ea, d, f; d = O; f = Z - N; e = Math.abs(((f - d) * (b - a + (e - c))) / 2); c = ea - K; d = f - d; f = c * (f - Z); f = Math.abs(f); f = e + f; for (var e = [], g = 0, l = 0; l < C.length; l++) { if ("undefined" === typeof C[l].y) return -1; C[l].y = "number" === typeof C[l].y ? C[l].y : 0; g += Math.abs(C[l].y); } if (0 === g) return -1; for ( var m = (e[0] = 0), h = 0, n, k, b = b - a, m = !1, l = 0; l < C.length; l++ ) (a = (Math.abs(C[l].y) * f) / g), m ? (n = 0 == Number(c.toFixed(3)) ? 0 : a / c) : ((k = ba * ba * b * b - 4 * Math.abs(ba) * a), 0 > k ? ((k = c), (m = ((b + k) * (d - h)) / 2), (a -= m), (n = d - h), (h += d - h), (n += 0 == k ? 0 : a / k), (h += a / k), (m = !0)) : ((n = (Math.abs(ba) * b - Math.sqrt(k)) / 2), (k = b - (2 * n) / Math.abs(ba)), (h += n), h > d && ((h -= n), (k = c), (m = ((b + k) * (d - h)) / 2), (a -= m), (n = d - h), (h += d - h), (n += a / k), (h += a / k), (m = !0)), (b = k))), e.push(n); return e; } function c() { if (t && C) { for ( var a, b, c, e, d, g, l, h, m, n, k, q, s, w, p = [], B = [], x = { percent: null, total: null }, v = null, y = 0; y < C.length; y++ ) (w = P[y]), (w = "undefined" !== typeof w.x5 ? (w.y2 + w.y4) / 2 : (w.y2 + w.y3) / 2), (w = f(w).x2 + 1), (p[y] = L - w - S); w = 0.5 * S; for (var y = 0, A = C.length - 1; y < C.length || 0 <= A; y++, A--) { b = t.reversed ? C[A] : C[y]; a = b.color ? b.color : t.reversed ? t._colorSet[(C.length - 1 - y) % t._colorSet.length] : t._colorSet[y % t._colorSet.length]; c = b.indexLabelPlacement || t.indexLabelPlacement || "outside"; e = b.indexLabelBackgroundColor || t.indexLabelBackgroundColor || (r ? "transparent" : null); d = b.indexLabelFontColor || t.indexLabelFontColor || "#979797"; g = u(b.indexLabelFontSize) ? t.indexLabelFontSize : b.indexLabelFontSize; l = b.indexLabelFontStyle || t.indexLabelFontStyle || "normal"; h = b.indexLabelFontFamily || t.indexLabelFontFamily || "arial"; m = b.indexLabelFontWeight || t.indexLabelFontWeight || "normal"; a = b.indexLabelLineColor || t.options.indexLabelLineColor || a; n = "number" === typeof b.indexLabelLineThickness ? b.indexLabelLineThickness : "number" === typeof t.indexLabelLineThickness ? t.indexLabelLineThickness : 2; k = b.indexLabelLineDashType || t.indexLabelLineDashType || "solid"; q = "undefined" !== typeof b.indexLabelWrap ? b.indexLabelWrap : "undefined" !== typeof t.indexLabelWrap ? t.indexLabelWrap : !0; s = t.dataPointIds[y]; z._eventManager.objectMap[s] = { id: s, objectType: "dataPoint", dataPointIndex: y, dataSeriesIndex: 0, funnelSection: P[t.reversed ? C.length - 1 - y : y], }; "inside" === t.indexLabelPlacement && ((p[y] = y !== fa ? t.reversed ? P[y].x2 - P[y].x1 : P[y].x3 - P[y].x4 : P[y].x3 - P[y].x6), 20 > p[y] && ((p[y] = y !== fa ? t.reversed ? P[y].x3 - P[y].x4 : P[y].x2 - P[y].x1 : P[y].x2 - P[y].x1), (p[y] /= 2))); s = b.indexLabelMaxWidth ? b.indexLabelMaxWidth : t.options.indexLabelMaxWidth ? t.indexLabelMaxWidth : p[y]; if (s > p[y] || 0 > s) s = p[y]; B[y] = "inside" === t.indexLabelPlacement ? P[y].height : !1; x = z.getPercentAndTotal(t, b); if (t.indexLabelFormatter || b.indexLabelFormatter) v = { chart: z.options, dataSeries: t, dataPoint: b, total: x.total, percent: x.percent, }; b = b.indexLabelFormatter ? b.indexLabelFormatter(v) : b.indexLabel ? z.replaceKeywordsWithValue(b.indexLabel, b, t, y) : t.indexLabelFormatter ? t.indexLabelFormatter(v) : t.indexLabel ? z.replaceKeywordsWithValue(t.indexLabel, b, t, y) : b.label ? b.label : ""; 0 >= n && (n = 0); 1e3 > s && 1e3 - s < w && (s += 1e3 - s); Q.roundRect || Ea(Q); c = new ka(Q, { fontSize: g, fontFamily: h, fontColor: d, fontStyle: l, fontWeight: m, horizontalAlign: c, backgroundColor: e, maxWidth: s, maxHeight: !1 === B[y] ? (q ? 4.28571429 * g : 1.5 * g) : B[y], text: b, padding: ga, }); c.measureText(); J.push({ textBlock: c, id: t.reversed ? A : y, isDirty: !1, lineColor: a, lineThickness: n, lineDashType: k, height: c.height < c.maxHeight ? c.height : c.maxHeight, width: c.width < c.maxWidth ? c.width : c.maxWidth, }); } } } function e() { var a, b, c, e, d, f = []; d = !1; c = 0; for ( var g, l = L - V - S / 2, l = t.options.indexLabelMaxWidth ? t.indexLabelMaxWidth > l ? l : t.indexLabelMaxWidth : l, h = J.length - 1; 0 <= h; h-- ) { g = C[J[h].id]; c = J[h]; e = c.textBlock; b = (a = n(h) < P.length ? J[n(h)] : null) ? a.textBlock : null; c = c.height; a && e.y + c + ga > b.y && (d = !0); c = g.indexLabelMaxWidth || l; if (c > l || 0 > c) c = l; f.push(c); } if (d) for (h = J.length - 1; 0 <= h; h--) (a = P[h]), (J[h].textBlock.maxWidth = f[f.length - (h + 1)]), J[h].textBlock.measureText(), (J[h].textBlock.x = L - l), (c = J[h].textBlock.height < J[h].textBlock.maxHeight ? J[h].textBlock.height : J[h].textBlock.maxHeight), (d = J[h].textBlock.width < J[h].textBlock.maxWidth ? J[h].textBlock.width : J[h].textBlock.maxWidth), (J[h].height = c), (J[h].width = d), (c = "undefined" !== typeof a.x5 ? (a.y2 + a.y4) / 2 : (a.y2 + a.y3) / 2), (J[h].textBlock.y = c - J[h].height / 2), t.reversed ? (J[h].textBlock.y + J[h].height > pa + D && (J[h].textBlock.y = pa + D - J[h].height), J[h].textBlock.y < wa - D && (J[h].textBlock.y = wa - D)) : (J[h].textBlock.y < pa - D && (J[h].textBlock.y = pa - D), J[h].textBlock.y + J[h].height > wa + D && (J[h].textBlock.y = wa + D - J[h].height)); } function g() { var a, b, c, e; if ("inside" !== t.indexLabelPlacement) for (var d = 0; d < P.length; d++) 0 == J[d].textBlock.text.length ? (J[d].isDirty = !0) : ((a = P[d]), (c = "undefined" !== typeof a.x5 ? (a.y2 + a.y4) / 2 : (a.y2 + a.y3) / 2), (b = t.reversed ? "undefined" !== typeof a.x5 ? c > Da ? f(c).x2 + 1 : (a.x2 + a.x3) / 2 + 1 : (a.x2 + a.x3) / 2 + 1 : "undefined" !== typeof a.x5 ? c < Da ? f(c).x2 + 1 : (a.x4 + a.x3) / 2 + 1 : (a.x2 + a.x3) / 2 + 1), (J[d].textBlock.x = b + S), (J[d].textBlock.y = c - J[d].height / 2), t.reversed ? (J[d].textBlock.y + J[d].height > pa + D && (J[d].textBlock.y = pa + D - J[d].height), J[d].textBlock.y < wa - D && (J[d].textBlock.y = wa - D)) : (J[d].textBlock.y < pa - D && (J[d].textBlock.y = pa - D), J[d].textBlock.y + J[d].height > wa + D && (J[d].textBlock.y = wa + D - J[d].height))); else for (d = 0; d < P.length; d++) 0 == J[d].textBlock.text.length ? (J[d].isDirty = !0) : ((a = P[d]), (b = a.height), (c = J[d].height), (e = J[d].width), b >= c ? ((b = d != fa ? (a.x4 + a.x3) / 2 - e / 2 : (a.x5 + a.x4) / 2 - e / 2), (c = d != fa ? (a.y1 + a.y3) / 2 - c / 2 : (a.y1 + a.y4) / 2 - c / 2), (J[d].textBlock.x = b), (J[d].textBlock.y = c)) : (J[d].isDirty = !0)); } function m() { function a(b, c) { var d; if (0 > b || b >= J.length) return 0; var e, f = J[b].textBlock; if (0 > c) { c *= -1; e = q(b); d = l(e, b); if (d >= c) return (f.y -= c), c; if (0 == b) return 0 < d && (f.y -= d), d; d += a(e, -(c - d)); 0 < d && (f.y -= d); return d; } e = n(b); d = l(b, e); if (d >= c) return (f.y += c), c; if (b == P.length - 1) return 0 < d && (f.y += d), d; d += a(e, c - d); 0 < d && (f.y += d); return d; } function b() { var a, d, e, f, g = 0, h; f = (Z - O + 2 * D) / k; h = k; for (var l, m = 1; m < h; m++) { e = m * f; for (var s = J.length - 1; 0 <= s; s--) !J[s].isDirty && J[s].textBlock.y < e && J[s].textBlock.y + J[s].height > e && ((l = n(s)), !(l >= J.length - 1) && J[s].textBlock.y + J[s].height + ga > J[l].textBlock.y && (J[s].textBlock.y = J[s].textBlock.y + J[s].height - e > e - J[s].textBlock.y ? e + 1 : e - J[s].height - 1)); } for (l = P.length - 1; 0 < l; l--) if (!J[l].isDirty) { e = q(l); if (0 > e && ((e = 0), J[e].isDirty)) break; if (J[l].textBlock.y < J[e].textBlock.y + J[e].height) { d = d || l; f = l; for ( h = 0; J[f].textBlock.y < J[e].textBlock.y + J[e].height + ga; ) { a = a || J[f].textBlock.y + J[f].height; h += J[f].height; h += ga; f = e; if (0 >= f) { f = 0; h += J[f].height; break; } e = q(f); if (0 > e) { f = 0; h += J[f].height; break; } } if (f != l) { g = J[f].textBlock.y; a -= g; a = h - a; g = c(a, d, f); break; } } } return g; } function c(a, b, d) { var e = [], f = 0, g = 0; for (a = Math.abs(a); d <= b; d++) e.push(P[d]); e.sort(function (a, b) { return a.height - b.height; }); for (d = 0; d < e.length; d++) if (((b = e[d]), f < a)) g++, (f += J[b.id].height + ga), (J[b.id].textBlock.text = ""), (J[b.id].indexLabelText = ""), (J[b.id].isDirty = !0), J[b.id].textBlock.measureText(); else break; return g; } for (var d, e, f, g, h, m, k = 1, s = 0; s < 2 * k; s++) { for ( var w = J.length - 1; 0 <= w && !(0 <= q(w) && q(w), (f = J[w]), (g = f.textBlock), (m = (h = n(w) < P.length ? J[n(w)] : null) ? h.textBlock : null), (d = +f.height.toFixed(6)), (e = +g.y.toFixed(6)), !f.isDirty && h && e + d + ga > +m.y.toFixed(6) && ((d = g.y + d + ga - m.y), (e = a(w, -d)), e < d && (0 < e && (d -= e), (e = a(n(w), d)), e != d))); w-- ); b(); } } function l(a, b) { return ( (b < P.length ? J[b].textBlock.y : t.reversed ? pa + D : wa + D) - (0 > a ? t.reversed ? wa - D : pa - D : J[a].textBlock.y + J[a].height + ga) ); } function k(a, b, c) { var d, e, f, l = [], m = D, n = []; -1 !== b && (0 <= W.indexOf(b) ? ((e = W.indexOf(b)), W.splice(e, 1)) : (W.push(b), (W = W.sort(function (a, b) { return a - b; })))); if (0 === W.length) l = ia; else { e = (D * (1 != W.length || (0 != W[0] && W[0] != P.length - 1) ? 2 : 1)) / h(); for (var q = 0; q < P.length; q++) { if (1 == W.length && 0 == W[0]) { if (0 === q) { l.push(ia[q]); d = m; continue; } } else 0 === q && (d = -1 * m); l.push(ia[q] + d); if (0 <= W.indexOf(q) || (q < P.length && 0 <= W.indexOf(q + 1))) d += e; } } f = (function () { for (var a = [], b = 0; b < P.length; b++) a.push(l[b] - P[b].y1); return a; })(); var w = { startTime: new Date().getTime(), duration: c || 500, easingFunction: function (a, b, c, d) { return M.easing.easeOutQuart(a, b, c, d); }, changeSection: function (a) { for (var b, c, d = 0; d < P.length; d++) (b = f[d]), (c = P[d]), (b *= a), "undefined" === typeof n[d] && (n[d] = 0), 0 > n && (n *= -1), (c.y1 += b - n[d]), (c.y2 += b - n[d]), (c.y3 += b - n[d]), (c.y4 += b - n[d]), c.y5 && ((c.y5 += b - n[d]), (c.y6 += b - n[d])), (n[d] = b); }, }; a._animator.animate( 0, c, function (c) { var d = a.plotArea.ctx || a.ctx; ja = !0; d.clearRect(x.x1, x.y1, x.x2 - x.x1, x.y2 - x.y1); d.fillStyle = a.backgroundColor; d.fillRect(x.x1, x.y1, x.width, x.height); w.changeSection(c, b); var e = {}; e.dataSeries = t; e.dataPoint = t.reversed ? t.dataPoints[C.length - 1 - b] : t.dataPoints[b]; e.index = t.reversed ? C.length - 1 - b : b; a.toolTip.highlightObjects([e]); for (e = 0; e < P.length; e++) ra(d, P[e], t.fillOpacity); v(d); H && ("inside" !== t.indexLabelPlacement ? s(d) : g(), p(d)); 1 <= c && (ja = !1); }, null, M.easing.easeOutQuart ); } function h() { for (var a = 0, b = 0; b < P.length - 1; b++) (0 <= W.indexOf(b) || 0 <= W.indexOf(b + 1)) && a++; return a; } function s(a) { for (var b, c, d, e, g = 0; g < P.length; g++) (e = 1 === J[g].lineThickness % 2 ? 0.5 : 0), (c = (((P[g].y2 + P[g].y4) / 2) << 0) + e), (b = f(c).x2 - 1), (d = J[g].textBlock.x), (e = ((J[g].textBlock.y + J[g].height / 2) << 0) + e), J[g].isDirty || 0 == J[g].lineThickness || ((a.strokeStyle = J[g].lineColor), (a.lineWidth = J[g].lineThickness), a.setLineDash && a.setLineDash(R(J[g].lineDashType, J[g].lineThickness)), a.beginPath(), a.moveTo(b, c), a.lineTo(d, e), a.stroke()); } function q(a) { for (a -= 1; -1 <= a && -1 != a && J[a].isDirty; a--); return a; } function n(a) { for (a += 1; a <= P.length && a != P.length && J[a].isDirty; a++); return a; } function f(a) { for (var b, c = 0; c < C.length; c++) if (P[c].y1 < a && P[c].y4 > a) { b = P[c]; break; } return b ? ((a = b.y6 ? a > b.y6 ? b.x3 + ((b.x4 - b.x3) / (b.y4 - b.y3)) * (a - b.y3) : b.x2 + ((b.x3 - b.x2) / (b.y3 - b.y2)) * (a - b.y2) : b.x2 + ((b.x3 - b.x2) / (b.y3 - b.y2)) * (a - b.y2)), { x1: a, x2: a }) : -1; } function p(a) { for (var b = 0; b < P.length; b++) J[b].isDirty || (a && (J[b].textBlock.ctx = a), J[b].textBlock.render(!0)); } function v(a) { z.plotArea.layoutManager.reset(); a.roundRect || Ea(a); z.title && (z.title.dockInsidePlotArea || ("center" === z.title.horizontalAlign && "center" === z.title.verticalAlign)) && ((z.title.ctx = a), z.title.render()); if (z.subtitles) for (var b = 0; b < z.subtitles.length; b++) { var c = z.subtitles[b]; if ( c.dockInsidePlotArea || ("center" === c.horizontalAlign && "center" === c.verticalAlign) ) (z.subtitles.ctx = a), c.render(); } z.legend && (z.legend.dockInsidePlotArea || ("center" === z.legend.horizontalAlign && "center" === z.legend.verticalAlign)) && ((z.legend.ctx = a), z.legend.setLayout(), z.legend.render()); U.fNg && U.fNg(z); } var z = this; if (!(0 >= a.dataSeriesIndexes.length)) { for ( var t = this.data[a.dataSeriesIndexes[0]], C = t.dataPoints, x = this.plotArea, D = 0.025 * x.width, y = 0.01 * x.width, A = 0, F = x.height - 2 * D, E = Math.min(x.width - 2 * y, 2.8 * x.height), H = !1, I = 0; I < C.length; I++ ) if ( (!H && "undefined" !== typeof C[I].indexLabel && null !== C[I].indexLabel && 0 < C[I].indexLabel.toString().length && (H = !0), !H && "undefined" !== typeof C[I].label && null !== C[I].label && 0 < C[I].label.toString().length && (H = !0), (!H && "function" === typeof t.indexLabelFormatter) || "function" === typeof C[I].indexLabelFormatter) ) H = !0; H = H || ("undefined" !== typeof t.indexLabel && null !== t.indexLabel && 0 < t.indexLabel.toString().length); ("inside" !== t.indexLabelPlacement && H) || (y = (x.width - 0.75 * E) / 2); var I = x.x1 + y, L = x.x2 - y, O = x.y1 + D, Z = x.y2 - D, Q = a.targetCanvasCtx || this.plotArea.ctx || this.ctx; if (0 != t.length && t.dataPoints && t.visible && 0 !== C.length) { var N, G; a = (75 * E) / 100; var S = (30 * (L - a)) / 100; "funnel" === t.type ? ((N = u(t.options.neckHeight) ? 0.35 * F : t.neckHeight), (G = u(t.options.neckWidth) ? 0.25 * a : t.neckWidth), "string" === typeof N && N.match(/%$/) ? ((N = parseInt(N)), (N = (N * F) / 100)) : (N = parseInt(N)), "string" === typeof G && G.match(/%$/) ? ((G = parseInt(G)), (G = (G * a) / 100)) : (G = parseInt(G)), N > F ? (N = F) : 0 >= N && (N = 0), G > a ? (G = a - 0.5) : 0 >= G && (G = 0)) : "pyramid" === t.type && ((G = N = 0), (t.reversed = t.reversed ? !1 : !0)); var y = I + a / 2, $ = I, V = I + a, pa = t.reversed ? Z : O, K = y - G / 2, ea = y + G / 2, Da = t.reversed ? O + N : Z - N, wa = t.reversed ? O : Z; a = []; var y = [], P = [], E = [], X = O, fa, ba = (Da - pa) / (K - $), ha = -ba, I = "area" === (t.valueRepresents ? t.valueRepresents : "height") ? b() : d(); if (-1 !== I) { if (t.reversed) for (E.push(X), G = I.length - 1; 0 < G; G--) (X += I[G]), E.push(X); else for (G = 0; G < I.length; G++) (X += I[G]), E.push(X); if (t.reversed) for (G = 0; G < I.length; G++) E[G] < Da ? (a.push(K), y.push(ea), (fa = G)) : (a.push((E[G] - pa + ba * $) / ba), y.push((E[G] - pa + ha * V) / ha)); else for (G = 0; G < I.length; G++) E[G] < Da ? (a.push((E[G] - pa + ba * $) / ba), y.push((E[G] - pa + ha * V) / ha), (fa = G)) : (a.push(K), y.push(ea)); for (G = 0; G < I.length - 1; G++) (X = t.reversed ? C[C.length - 1 - G].color ? C[C.length - 1 - G].color : t._colorSet[(C.length - 1 - G) % t._colorSet.length] : C[G].color ? C[G].color : t._colorSet[G % t._colorSet.length]), G === fa ? P.push({ x1: a[G], y1: E[G], x2: y[G], y2: E[G], x3: ea, y3: Da, x4: y[G + 1], y4: E[G + 1], x5: a[G + 1], y5: E[G + 1], x6: K, y6: Da, id: G, height: E[G + 1] - E[G], color: X, }) : P.push({ x1: a[G], y1: E[G], x2: y[G], y2: E[G], x3: y[G + 1], y3: E[G + 1], x4: a[G + 1], y4: E[G + 1], id: G, height: E[G + 1] - E[G], color: X, }); var ga = 2, J = [], ja = !1, W = [], ia = [], I = !1; a = a = 0; Fa(W); for (G = 0; G < C.length; G++) C[G].exploded && ((I = !0), t.reversed ? W.push(C.length - 1 - G) : W.push(G)); Q.clearRect(x.x1, x.y1, x.width, x.height); Q.fillStyle = z.backgroundColor; Q.fillRect(x.x1, x.y1, x.width, x.height); if ( H && t.visible && (c(), g(), e(), "inside" !== t.indexLabelPlacement) ) { m(); for (G = 0; G < C.length; G++) J[G].isDirty || ((a = J[G].textBlock.x + J[G].width), (a = (L - a) / 2), 0 == G && (A = a), A > a && (A = a)); for (G = 0; G < P.length; G++) (P[G].x1 += A), (P[G].x2 += A), (P[G].x3 += A), (P[G].x4 += A), P[G].x5 && ((P[G].x5 += A), (P[G].x6 += A)), (J[G].textBlock.x += A); } for (G = 0; G < P.length; G++) (A = P[G]), ra(Q, A, t.fillOpacity), ia.push(A.y1); v(Q); H && t.visible && ("inside" === t.indexLabelPlacement || z.animationEnabled || s(Q), z.animationEnabled || p()); if (!H) for (G = 0; G < C.length; G++) (A = t.dataPointIds[G]), (a = { id: A, objectType: "dataPoint", dataPointIndex: G, dataSeriesIndex: 0, funnelSection: P[t.reversed ? C.length - 1 - G : G], }), (z._eventManager.objectMap[A] = a); !z.animationEnabled && I ? k(z, -1, 0) : z.animationEnabled && !z.animatedRender && k(z, -1, 0); this.funnelPyramidClickHandler = function (a) { var b = -1; if ( !ja && !z.isAnimating && (u(a.dataSeries.explodeOnClick) || a.dataSeries.explodeOnClick) && ((b = t.reversed ? C.length - 1 - a.dataPointIndex : a.dataPointIndex), 0 <= b) ) { a = b; if ("funnel" === t.type || "pyramid" === t.type) t.reversed ? (C[C.length - 1 - a].exploded = C[C.length - 1 - a] .exploded ? !1 : !0) : (C[a].exploded = C[a].exploded ? !1 : !0); k(z, b, 500); } }; return { source: Q, dest: this.plotArea.ctx, animationCallback: function (a, b) { M.fadeInAnimation(a, b); 1 <= a && (k(z, -1, 500), v(z.plotArea.ctx || z.ctx)); }, easingFunction: M.easing.easeInQuad, animationBase: 0, }; } } } }; p.prototype.requestAnimFrame = (function () { return ( window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (a) { window.setTimeout(a, 1e3 / 60); } ); })(); p.prototype.cancelRequestAnimFrame = window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || clearTimeout; p.prototype.set = function (a, d, b) { b = "undefined" === typeof b ? !0 : b; "options" === a ? ((this.options = d), b && this.render()) : p.base.set.call(this, a, d, b); }; p.prototype.exportChart = function (a) { a = "undefined" === typeof a ? {} : a; var d = a.format ? a.format : "png", b = a.fileName ? a.fileName : this.exportFileName; if (a.toDataURL) return this.canvas.toDataURL("image/" + d); Ta(this.canvas, d, b); }; p.prototype.print = function () { var a = this.exportChart({ toDataURL: !0 }), d = document.createElement("iframe"); d.setAttribute("class", "canvasjs-chart-print-frame"); d.setAttribute( "style", "position:absolute; width:100%; border: 0px; margin: 0px 0px 0px 0px; padding 0px 0px 0px 0px;" ); d.style.height = this.height + "px"; this._canvasJSContainer.appendChild(d); var b = this, c = d.contentWindow || d.contentDocument.document || d.contentDocument; c.document.open(); c.document.write( '\n' ); c.document.close(); setTimeout(function () { c.focus(); c.print(); setTimeout(function () { b._canvasJSContainer.removeChild(d); }, 1e3); }, 500); }; p.prototype.getPercentAndTotal = function (a, d) { var b = null, c = null, e = null; if (0 <= a.type.indexOf("stacked")) (c = 0), (b = d.x.getTime ? d.x.getTime() : d.x), b in a.plotUnit.yTotals && ((c = a.plotUnit.yTotals[b]), (e = isNaN(d.y) ? 0 : 100 * (d.y / c))); else if ( "pie" === a.type || "doughnut" === a.type || "funnel" === a.type || "pyramid" === a.type ) { for (b = c = 0; b < a.dataPoints.length; b++) isNaN(a.dataPoints[b].y) || (c += a.dataPoints[b].y); e = isNaN(d.y) ? 0 : 100 * (d.y / c); } return { percent: e, total: c }; }; p.prototype.replaceKeywordsWithValue = function (a, d, b, c, e) { var g = this; e = "undefined" === typeof e ? 0 : e; if ( (0 <= b.type.indexOf("stacked") || "pie" === b.type || "doughnut" === b.type || "funnel" === b.type || "pyramid" === b.type) && (0 <= a.indexOf("#percent") || 0 <= a.indexOf("#total")) ) { var m = "#percent", l = "#total", k = this.getPercentAndTotal(b, d), l = isNaN(k.total) ? l : k.total, m = isNaN(k.percent) ? m : k.percent; do { k = ""; if (b.percentFormatString) k = b.percentFormatString; else { var k = "#,##0.", h = Math.max(Math.ceil(Math.log(1 / Math.abs(m)) / Math.LN10), 2); if (isNaN(h) || !isFinite(h)) h = 2; for (var s = 0; s < h; s++) k += "#"; b.percentFormatString = k; } a = a.replace("#percent", ba(m, k, g._cultureInfo)); a = a.replace( "#total", ba( l, b.yValueFormatString ? b.yValueFormatString : "#,##0.########", g._cultureInfo ) ); } while (0 <= a.indexOf("#percent") || 0 <= a.indexOf("#total")); } return a.replace(/\{.*?\}|"[^"]*"|'[^']*'/g, function (a) { if ( ('"' === a[0] && '"' === a[a.length - 1]) || ("'" === a[0] && "'" === a[a.length - 1]) ) return a.slice(1, a.length - 1); a = Ia(a.slice(1, a.length - 1)); a = a.replace("#index", e); var h = null; try { var f = a.match(/(.*?)\s*\[\s*(.*?)\s*\]/); f && 0 < f.length && ((h = Ia(f[2])), (a = Ia(f[1]))); } catch (l) {} f = null; if ("color" === a) return "waterfall" === b.type ? d.color ? d.color : 0 < d.y ? b.risingColor : b.fallingColor : "error" === b.type ? b.color ? b.color : b._colorSet[h % b._colorSet.length] : d.color ? d.color : b.color ? b.color : b._colorSet[c % b._colorSet.length]; if (d.hasOwnProperty(a)) f = d; else if (b.hasOwnProperty(a)) f = b; else return ""; f = f[a]; null !== h && (f = f[h]); if ("x" === a) if ( "dateTime" === b.axisX.valueType || "dateTime" === b.xValueType || (d.x && d.x.getTime) ) { if ( g.plotInfo.plotTypes[0].plotUnits[0].axisX && !g.plotInfo.plotTypes[0].plotUnits[0].axisX.logarithmic ) return Ca( f, d.xValueFormatString ? d.xValueFormatString : b.xValueFormatString ? b.xValueFormatString : (b.xValueFormatString = g.axisX && g.axisX.autoValueFormatString ? g.axisX.autoValueFormatString : "DD MMM YY"), g._cultureInfo ); } else return ba( f, d.xValueFormatString ? d.xValueFormatString : b.xValueFormatString ? b.xValueFormatString : (b.xValueFormatString = "#,##0.########"), g._cultureInfo ); else return "y" === a ? ba( f, d.yValueFormatString ? d.yValueFormatString : b.yValueFormatString ? b.yValueFormatString : (b.yValueFormatString = "#,##0.########"), g._cultureInfo ) : "z" === a ? ba( f, d.zValueFormatString ? d.zValueFormatString : b.zValueFormatString ? b.zValueFormatString : (b.zValueFormatString = "#,##0.########"), g._cultureInfo ) : f; }); }; qa(H, V); H.prototype.setLayout = function () { var a = this.dockInsidePlotArea ? this.chart.plotArea : this.chart, d = a.layoutManager.getFreeSpace(), b = null, c = 0, e = 0, g = 0, m = 0, l = (this.markerMargin = this.chart.options.legend && !u(this.chart.options.legend.markerMargin) ? this.chart.options.legend.markerMargin : 0.3 * this.fontSize); this.height = 0; var k = [], h = []; "top" === this.verticalAlign || "bottom" === this.verticalAlign ? ((this.orientation = "horizontal"), (b = this.verticalAlign), (g = this.maxWidth = null !== this.maxWidth ? this.maxWidth : d.width), (m = this.maxHeight = null !== this.maxHeight ? this.maxHeight : 0.5 * d.height)) : "center" === this.verticalAlign && ((this.orientation = "vertical"), (b = this.horizontalAlign), (g = this.maxWidth = null !== this.maxWidth ? this.maxWidth : 0.5 * d.width), (m = this.maxHeight = null !== this.maxHeight ? this.maxHeight : d.height)); this.errorMarkerColor = []; for (var s = 0; s < this.dataSeries.length; s++) { var q = this.dataSeries[s]; if (q.dataPoints && q.dataPoints.length) if ( "pie" !== q.type && "doughnut" !== q.type && "funnel" !== q.type && "pyramid" !== q.type ) { var n = (q.legendMarkerType = q.legendMarkerType ? q.legendMarkerType : ("line" !== q.type && "stepLine" !== q.type && "spline" !== q.type && "scatter" !== q.type && "bubble" !== q.type) || !q.markerType ? "error" === q.type && q._linkedSeries ? q._linkedSeries.legendMarkerType ? q._linkedSeries.legendMarkerType : F.getDefaultLegendMarker(q._linkedSeries.type) : F.getDefaultLegendMarker(q.type) : q.markerType), f = q.legendText ? q.legendText : this.itemTextFormatter ? this.itemTextFormatter({ chart: this.chart, legend: this.options, dataSeries: q, dataPoint: null, }) : q.name, p = (q.legendMarkerColor = q.legendMarkerColor ? q.legendMarkerColor : q.markerColor ? q.markerColor : "error" === q.type ? u(q.whiskerColor) ? q._colorSet[0] : q.whiskerColor : q._colorSet[0]), r = q.markerSize || ("line" !== q.type && "stepLine" !== q.type && "spline" !== q.type) ? 0.75 * this.lineHeight : 0, v = q.legendMarkerBorderColor ? q.legendMarkerBorderColor : q.markerBorderColor, t = q.legendMarkerBorderThickness ? q.legendMarkerBorderThickness : q.markerBorderThickness ? Math.max(1, Math.round(0.2 * r)) : 0; "error" === q.type && this.errorMarkerColor.push(p); f = this.chart.replaceKeywordsWithValue(f, q.dataPoints[0], q, s); n = { markerType: n, markerColor: p, text: f, textBlock: null, chartType: q.type, markerSize: r, lineColor: q._colorSet[0], dataSeriesIndex: q.index, dataPointIndex: null, markerBorderColor: v, markerBorderThickness: t, }; k.push(n); } else for (var z = 0; z < q.dataPoints.length; z++) { var x = q.dataPoints[z], n = x.legendMarkerType ? x.legendMarkerType : q.legendMarkerType ? q.legendMarkerType : F.getDefaultLegendMarker(q.type), f = x.legendText ? x.legendText : q.legendText ? q.legendText : this.itemTextFormatter ? this.itemTextFormatter({ chart: this.chart, legend: this.options, dataSeries: q, dataPoint: x, }) : x.name ? x.name : "DataPoint: " + (z + 1), p = x.legendMarkerColor ? x.legendMarkerColor : q.legendMarkerColor ? q.legendMarkerColor : x.color ? x.color : q.color ? q.color : q._colorSet[z % q._colorSet.length], r = 0.75 * this.lineHeight, v = x.legendMarkerBorderColor ? x.legendMarkerBorderColor : q.legendMarkerBorderColor ? q.legendMarkerBorderColor : x.markerBorderColor ? x.markerBorderColor : q.markerBorderColor, t = x.legendMarkerBorderThickness ? x.legendMarkerBorderThickness : q.legendMarkerBorderThickness ? q.legendMarkerBorderThickness : x.markerBorderThickness || q.markerBorderThickness ? Math.max(1, Math.round(0.2 * r)) : 0, f = this.chart.replaceKeywordsWithValue(f, x, q, z), n = { markerType: n, markerColor: p, text: f, textBlock: null, chartType: q.type, markerSize: r, dataSeriesIndex: s, dataPointIndex: z, markerBorderColor: v, markerBorderThickness: t, }; (x.showInLegend || (q.showInLegend && !1 !== x.showInLegend)) && k.push(n); } } !0 === this.reversed && k.reverse(); if (0 < k.length) { q = null; p = f = x = z = 0; x = null !== this.itemWidth ? null !== this.itemMaxWidth ? Math.min(this.itemWidth, this.itemMaxWidth, g) : (this.itemMaxWidth = Math.min(this.itemWidth, g)) : null !== this.itemMaxWidth ? Math.min(this.itemMaxWidth, g) : (this.itemMaxWidth = g); r = 0 === r ? 0.75 * this.lineHeight : r; x -= r + l; for (s = 0; s < k.length; s++) { n = k[s]; v = x; if ( "line" === n.chartType || "spline" === n.chartType || "stepLine" === n.chartType ) v -= 2 * 0.1 * this.lineHeight; if ( !( 0 >= m || "undefined" === typeof m || 0 >= v || "undefined" === typeof v ) ) { if ("horizontal" === this.orientation) { n.textBlock = new ka(this.ctx, { x: 0, y: 0, maxWidth: v, maxHeight: this.itemWrap ? m : this.lineHeight, angle: 0, text: n.text, horizontalAlign: "left", fontSize: this.fontSize, fontFamily: this.fontFamily, fontWeight: this.fontWeight, fontColor: this.fontColor, fontStyle: this.fontStyle, textBaseline: "middle", }); n.textBlock.measureText(); null !== this.itemWidth && (n.textBlock.width = this.itemWidth - (r + l + ("line" === n.chartType || "spline" === n.chartType || "stepLine" === n.chartType ? 2 * 0.1 * this.lineHeight : 0))); if ( !q || q.width + Math.round( n.textBlock.width + r + l + (0 === q.width ? 0 : this.horizontalSpacing) + ("line" === n.chartType || "spline" === n.chartType || "stepLine" === n.chartType ? 2 * 0.1 * this.lineHeight : 0) ) > g ) (q = { items: [], width: 0 }), h.push(q), (this.height += f), (f = 0); f = Math.max(f, n.textBlock.height); } else (n.textBlock = new ka(this.ctx, { x: 0, y: 0, maxWidth: x, maxHeight: !0 === this.itemWrap ? m : 1.5 * this.fontSize, angle: 0, text: n.text, horizontalAlign: "left", fontSize: this.fontSize, fontFamily: this.fontFamily, fontWeight: this.fontWeight, fontColor: this.fontColor, fontStyle: this.fontStyle, textBaseline: "middle", })), n.textBlock.measureText(), null !== this.itemWidth && (n.textBlock.width = this.itemWidth - (r + l + ("line" === n.chartType || "spline" === n.chartType || "stepLine" === n.chartType ? 2 * 0.1 * this.lineHeight : 0))), this.height < m - this.lineHeight ? ((q = { items: [], width: 0 }), h.push(q)) : ((q = h[z]), (z = (z + 1) % h.length)), (this.height += n.textBlock.height); n.textBlock.x = q.width; n.textBlock.y = 0; q.width += Math.round( n.textBlock.width + r + l + (0 === q.width ? 0 : this.horizontalSpacing) + ("line" === n.chartType || "spline" === n.chartType || "stepLine" === n.chartType ? 2 * 0.1 * this.lineHeight : 0) ); q.items.push(n); this.width = Math.max(q.width, this.width); p = n.textBlock.width + (r + l + ("line" === n.chartType || "spline" === n.chartType || "stepLine" === n.chartType ? 2 * 0.1 * this.lineHeight : 0)); } } this.itemWidth = p; this.height = !1 === this.itemWrap ? h.length * this.lineHeight : this.height + f; this.height = Math.min(m, this.height); this.width = Math.min(g, this.width); } "top" === this.verticalAlign ? ((e = "left" === this.horizontalAlign ? d.x1 : "right" === this.horizontalAlign ? d.x2 - this.width : d.x1 + d.width / 2 - this.width / 2), (c = d.y1)) : "center" === this.verticalAlign ? ((e = "left" === this.horizontalAlign ? d.x1 : "right" === this.horizontalAlign ? d.x2 - this.width : d.x1 + d.width / 2 - this.width / 2), (c = d.y1 + d.height / 2 - this.height / 2)) : "bottom" === this.verticalAlign && ((e = "left" === this.horizontalAlign ? d.x1 : "right" === this.horizontalAlign ? d.x2 - this.width : d.x1 + d.width / 2 - this.width / 2), (c = d.y2 - this.height)); this.items = k; for (s = 0; s < this.items.length; s++) (n = k[s]), (n.id = ++this.chart._eventManager.lastObjectId), (this.chart._eventManager.objectMap[n.id] = { id: n.id, objectType: "legendItem", legendItemIndex: s, dataSeriesIndex: n.dataSeriesIndex, dataPointIndex: n.dataPointIndex, }); this.markerSize = r; this.rows = h; 0 < k.length && a.layoutManager.registerSpace(b, { width: this.width + 2 + 2, height: this.height + 5 + 5, }); this.bounds = { x1: e, y1: c, x2: e + this.width, y2: c + this.height }; }; H.prototype.render = function () { var a = this.bounds.x1, d = this.bounds.y1, b = this.markerMargin, c = this.maxWidth, e = this.maxHeight, g = this.markerSize, m = this.rows; ((0 < this.borderThickness && this.borderColor) || this.backgroundColor) && this.ctx.roundRect( a, d, this.width, this.height, this.cornerRadius, this.borderThickness, this.backgroundColor, this.borderColor ); for (var l = 0, k = 0; k < m.length; k++) { for (var h = m[k], s = 0, q = 0; q < h.items.length; q++) { var n = h.items[q], f = n.textBlock.x + a + (0 === q ? 0.2 * g : this.horizontalSpacing), p = d + l, u = f; this.chart.data[n.dataSeriesIndex].visible || (this.ctx.globalAlpha = 0.5); this.ctx.save(); this.ctx.beginPath(); this.ctx.rect(a, d, c, Math.max(e - (e % this.lineHeight), 0)); this.ctx.clip(); if ( "line" === n.chartType || "stepLine" === n.chartType || "spline" === n.chartType ) (this.ctx.strokeStyle = n.lineColor), (this.ctx.lineWidth = Math.ceil(this.lineHeight / 8)), this.ctx.beginPath(), this.ctx.moveTo( f - 0.1 * this.lineHeight, p + this.lineHeight / 2 ), this.ctx.lineTo( f + 0.85 * this.lineHeight, p + this.lineHeight / 2 ), this.ctx.stroke(), (u -= 0.1 * this.lineHeight); if ("error" === n.chartType) { this.ctx.strokeStyle = this.errorMarkerColor[0]; this.ctx.lineWidth = g / 8; this.ctx.beginPath(); var r = f - 0.08 * this.lineHeight + 0.1 * this.lineHeight, t = p + 0.15 * this.lineHeight, v = 0.7 * this.lineHeight, x = v + 0.02 * this.lineHeight; this.ctx.moveTo(r, t); this.ctx.lineTo(r + v, t); this.ctx.stroke(); this.ctx.beginPath(); this.ctx.moveTo(r + v / 2, t); this.ctx.lineTo(r + v / 2, t + x); this.ctx.stroke(); this.ctx.beginPath(); this.ctx.moveTo(r, t + x); this.ctx.lineTo(r + v, t + x); this.ctx.stroke(); this.errorMarkerColor.shift(); } ia.drawMarker( f + g / 2, p + this.lineHeight / 2, this.ctx, n.markerType, "error" === n.chartType || "line" === n.chartType || "spline" === n.chartType ? n.markerSize / 2 : n.markerSize, n.markerColor, n.markerBorderColor, n.markerBorderThickness ); n.textBlock.x = f + b + g; if ( "line" === n.chartType || "stepLine" === n.chartType || "spline" === n.chartType ) n.textBlock.x += 0.1 * this.lineHeight; n.textBlock.y = Math.round(p + this.lineHeight / 2); n.textBlock.render(!0); this.ctx.restore(); s = 0 < q ? Math.max(s, n.textBlock.height) : n.textBlock.height; this.chart.data[n.dataSeriesIndex].visible || (this.ctx.globalAlpha = 1); f = N(n.id); this.ghostCtx.fillStyle = f; this.ghostCtx.beginPath(); this.ghostCtx.fillRect( u, n.textBlock.y - this.lineHeight / 2, n.textBlock.x + n.textBlock.width - u, n.textBlock.height ); n.x1 = this.chart._eventManager.objectMap[n.id].x1 = u; n.y1 = this.chart._eventManager.objectMap[n.id].y1 = n.textBlock.y - this.lineHeight / 2; n.x2 = this.chart._eventManager.objectMap[n.id].x2 = n.textBlock.x + n.textBlock.width; n.y2 = this.chart._eventManager.objectMap[n.id].y2 = n.textBlock.y + n.textBlock.height - this.lineHeight / 2; } l += s; } }; qa(F, V); F.prototype.getDefaultAxisPlacement = function () { var a = this.type; if ( "column" === a || "line" === a || "stepLine" === a || "spline" === a || "area" === a || "stepArea" === a || "splineArea" === a || "stackedColumn" === a || "stackedLine" === a || "bubble" === a || "scatter" === a || "stackedArea" === a || "stackedColumn100" === a || "stackedLine100" === a || "stackedArea100" === a || "candlestick" === a || "ohlc" === a || "rangeColumn" === a || "rangeArea" === a || "rangeSplineArea" === a || "boxAndWhisker" === a || "waterfall" === a ) return "normal"; if ( "bar" === a || "stackedBar" === a || "stackedBar100" === a || "rangeBar" === a ) return "xySwapped"; if ("pie" === a || "doughnut" === a || "funnel" === a || "pyramid" === a) return "none"; "error" !== a && window.console.log("Unknown Chart Type: " + a); return null; }; F.getDefaultLegendMarker = function (a) { if ( "column" === a || "stackedColumn" === a || "stackedLine" === a || "bar" === a || "stackedBar" === a || "stackedBar100" === a || "bubble" === a || "scatter" === a || "stackedColumn100" === a || "stackedLine100" === a || "stepArea" === a || "candlestick" === a || "ohlc" === a || "rangeColumn" === a || "rangeBar" === a || "rangeArea" === a || "rangeSplineArea" === a || "boxAndWhisker" === a || "waterfall" === a ) return "square"; if ( "line" === a || "stepLine" === a || "spline" === a || "pie" === a || "doughnut" === a ) return "circle"; if ( "area" === a || "splineArea" === a || "stackedArea" === a || "stackedArea100" === a || "funnel" === a || "pyramid" === a ) return "triangle"; if ("error" === a) return "none"; window.console.log("Unknown Chart Type: " + a); return null; }; F.prototype.getDataPointAtX = function (a, d) { if (!this.dataPoints || 0 === this.dataPoints.length) return null; var b = { dataPoint: null, distance: Infinity, index: NaN }, c = null, e = 0, g = 0, m = 1, l = Infinity, k = 0, h = 0, s = 0; "none" !== this.chart.plotInfo.axisPlacement && (this.axisX.logarithmic ? ((s = Math.log( this.dataPoints[this.dataPoints.length - 1].x / this.dataPoints[0].x )), (s = 1 < s ? Math.min( Math.max( (((this.dataPoints.length - 1) / s) * Math.log(a / this.dataPoints[0].x)) >> 0, 0 ), this.dataPoints.length ) : 0)) : ((s = this.dataPoints[this.dataPoints.length - 1].x - this.dataPoints[0].x), (s = 0 < s ? Math.min( Math.max( (((this.dataPoints.length - 1) / s) * (a - this.dataPoints[0].x)) >> 0, 0 ), this.dataPoints.length ) : 0))); for (;;) { g = 0 < m ? s + e : s - e; if (0 <= g && g < this.dataPoints.length) { var c = this.dataPoints[g], q = this.axisX.logarithmic ? c.x > a ? c.x / a : a / c.x : Math.abs(c.x - a); q < b.distance && ((b.dataPoint = c), (b.distance = q), (b.index = g)); c = q; c <= l ? (l = c) : 0 < m ? k++ : h++; if (1e3 < k && 1e3 < h) break; } else if (0 > s - e && s + e >= this.dataPoints.length) break; -1 === m ? (e++, (m = 1)) : (m = -1); } return d || b.dataPoint.x !== a ? d && null !== b.dataPoint ? b : null : b; }; F.prototype.getDataPointAtXY = function (a, d, b) { if ( !this.dataPoints || 0 === this.dataPoints.length || a < this.chart.plotArea.x1 || a > this.chart.plotArea.x2 || d < this.chart.plotArea.y1 || d > this.chart.plotArea.y2 ) return null; b = b || !1; var c = [], e = 0, g = 0, m = 1, l = !1, k = Infinity, h = 0, s = 0, q = 0; if ("none" !== this.chart.plotInfo.axisPlacement) if ( ((q = ( this.chart.axisX[0] ? this.chart.axisX[0] : this.chart.axisX2[0] ).getXValueAt({ x: a, y: d })), this.axisX.logarithmic) ) var n = Math.log( this.dataPoints[this.dataPoints.length - 1].x / this.dataPoints[0].x ), q = 1 < n ? Math.min( Math.max( (((this.dataPoints.length - 1) / n) * Math.log(q / this.dataPoints[0].x)) >> 0, 0 ), this.dataPoints.length ) : 0; else (n = this.dataPoints[this.dataPoints.length - 1].x - this.dataPoints[0].x), (q = 0 < n ? Math.min( Math.max( (((this.dataPoints.length - 1) / n) * (q - this.dataPoints[0].x)) >> 0, 0 ), this.dataPoints.length ) : 0); for (;;) { g = 0 < m ? q + e : q - e; if (0 <= g && g < this.dataPoints.length) { var n = this.chart._eventManager.objectMap[this.dataPointIds[g]], f = this.dataPoints[g], p = null; if (n) { switch (this.type) { case "column": case "stackedColumn": case "stackedColumn100": case "bar": case "stackedBar": case "stackedBar100": case "rangeColumn": case "rangeBar": case "waterfall": case "error": a >= n.x1 && a <= n.x2 && d >= n.y1 && d <= n.y2 && (c.push({ dataPoint: f, dataPointIndex: g, dataSeries: this, distance: Math.min( Math.abs(n.x1 - a), Math.abs(n.x2 - a), Math.abs(n.y1 - d), Math.abs(n.y2 - d) ), }), (l = !0)); break; case "line": case "stepLine": case "spline": case "area": case "stepArea": case "stackedArea": case "stackedArea100": case "splineArea": case "scatter": var u = na("markerSize", f, this) || 4, r = b ? 20 : u, p = Math.sqrt(Math.pow(n.x1 - a, 2) + Math.pow(n.y1 - d, 2)); p <= r && c.push({ dataPoint: f, dataPointIndex: g, dataSeries: this, distance: p, }); n = Math.abs(n.x1 - a); n <= k ? (k = n) : 0 < m ? h++ : s++; p <= u / 2 && (l = !0); break; case "rangeArea": case "rangeSplineArea": u = na("markerSize", f, this) || 4; r = b ? 20 : u; p = Math.min( Math.sqrt(Math.pow(n.x1 - a, 2) + Math.pow(n.y1 - d, 2)), Math.sqrt(Math.pow(n.x1 - a, 2) + Math.pow(n.y2 - d, 2)) ); p <= r && c.push({ dataPoint: f, dataPointIndex: g, dataSeries: this, distance: p, }); n = Math.abs(n.x1 - a); n <= k ? (k = n) : 0 < m ? h++ : s++; p <= u / 2 && (l = !0); break; case "bubble": u = n.size; p = Math.sqrt(Math.pow(n.x1 - a, 2) + Math.pow(n.y1 - d, 2)); p <= u / 2 && (c.push({ dataPoint: f, dataPointIndex: g, dataSeries: this, distance: p, }), (l = !0)); break; case "pie": case "doughnut": u = n.center; r = "doughnut" === this.type ? n.percentInnerRadius * n.radius : 0; p = Math.sqrt(Math.pow(u.x - a, 2) + Math.pow(u.y - d, 2)); p < n.radius && p > r && ((p = Math.atan2(d - u.y, a - u.x)), 0 > p && (p += 2 * Math.PI), (p = Number( ((((180 * (p / Math.PI)) % 360) + 360) % 360).toFixed(12) )), (u = Number( ( (((180 * (n.startAngle / Math.PI)) % 360) + 360) % 360 ).toFixed(12) )), (r = Number( ( (((180 * (n.endAngle / Math.PI)) % 360) + 360) % 360 ).toFixed(12) )), 0 === r && 1 < n.endAngle && (r = 360), u >= r && 0 !== f.y && ((r += 360), p < u && (p += 360)), p > u && p < r && (c.push({ dataPoint: f, dataPointIndex: g, dataSeries: this, distance: 0, }), (l = !0))); break; case "funnel": case "pyramid": p = n.funnelSection; d > p.y1 && d < p.y4 && (p.y6 ? d > p.y6 ? ((g = p.x6 + ((p.x5 - p.x6) / (p.y5 - p.y6)) * (d - p.y6)), (p = p.x3 + ((p.x4 - p.x3) / (p.y4 - p.y3)) * (d - p.y3))) : ((g = p.x1 + ((p.x6 - p.x1) / (p.y6 - p.y1)) * (d - p.y1)), (p = p.x2 + ((p.x3 - p.x2) / (p.y3 - p.y2)) * (d - p.y2))) : ((g = p.x1 + ((p.x4 - p.x1) / (p.y4 - p.y1)) * (d - p.y1)), (p = p.x2 + ((p.x3 - p.x2) / (p.y3 - p.y2)) * (d - p.y2))), a > g && a < p && (c.push({ dataPoint: f, dataPointIndex: n.dataPointIndex, dataSeries: this, distance: 0, }), (l = !0))); break; case "boxAndWhisker": if ( (a >= n.x1 - n.borderThickness / 2 && a <= n.x2 + n.borderThickness / 2 && d >= n.y4 - n.borderThickness / 2 && d <= n.y1 + n.borderThickness / 2) || (Math.abs(n.x2 - a + n.x1 - a) < n.borderThickness && d >= n.y1 && d <= n.y4) ) c.push({ dataPoint: f, dataPointIndex: g, dataSeries: this, distance: Math.min( Math.abs(n.x1 - a), Math.abs(n.x2 - a), Math.abs(n.y2 - d), Math.abs(n.y3 - d) ), }), (l = !0); break; case "candlestick": if ( (a >= n.x1 - n.borderThickness / 2 && a <= n.x2 + n.borderThickness / 2 && d >= n.y2 - n.borderThickness / 2 && d <= n.y3 + n.borderThickness / 2) || (Math.abs(n.x2 - a + n.x1 - a) < n.borderThickness && d >= n.y1 && d <= n.y4) ) c.push({ dataPoint: f, dataPointIndex: g, dataSeries: this, distance: Math.min( Math.abs(n.x1 - a), Math.abs(n.x2 - a), Math.abs(n.y2 - d), Math.abs(n.y3 - d) ), }), (l = !0); break; case "ohlc": if ( (Math.abs(n.x2 - a + n.x1 - a) < n.borderThickness && d >= n.y2 && d <= n.y3) || (a >= n.x1 && a <= (n.x2 + n.x1) / 2 && d >= n.y1 - n.borderThickness / 2 && d <= n.y1 + n.borderThickness / 2) || (a >= (n.x1 + n.x2) / 2 && a <= n.x2 && d >= n.y4 - n.borderThickness / 2 && d <= n.y4 + n.borderThickness / 2) ) c.push({ dataPoint: f, dataPointIndex: g, dataSeries: this, distance: Math.min( Math.abs(n.x1 - a), Math.abs(n.x2 - a), Math.abs(n.y2 - d), Math.abs(n.y3 - d) ), }), (l = !0); } if (l || (1e3 < h && 1e3 < s)) break; } } else if (0 > q - e && q + e >= this.dataPoints.length) break; -1 === m ? (e++, (m = 1)) : (m = -1); } a = null; for (d = 0; d < c.length; d++) a ? c[d].distance <= a.distance && (a = c[d]) : (a = c[d]); return a; }; F.prototype.getMarkerProperties = function (a, d, b, c) { var e = this.dataPoints; return { x: d, y: b, ctx: c, type: e[a].markerType ? e[a].markerType : this.markerType, size: e[a].markerSize ? e[a].markerSize : this.markerSize, color: e[a].markerColor ? e[a].markerColor : this.markerColor ? this.markerColor : e[a].color ? e[a].color : this.color ? this.color : this._colorSet[a % this._colorSet.length], borderColor: e[a].markerBorderColor ? e[a].markerBorderColor : this.markerBorderColor ? this.markerBorderColor : null, borderThickness: e[a].markerBorderThickness ? e[a].markerBorderThickness : this.markerBorderThickness ? this.markerBorderThickness : null, }; }; qa(z, V); z.prototype.createExtraLabelsForLog = function (a) { a = (a || 0) + 1; if (!(5 < a)) { var d = this.logLabelValues[0] || this.intervalStartPosition; if ( Math.log(this.range) / Math.log(d / this.viewportMinimum) < this.noTicks - 1 ) { for ( var b = z.getNiceNumber( (d - this.viewportMinimum) / Math.min( Math.max(2, this.noTicks - this.logLabelValues.length), 3 ), !0 ), c = Math.ceil(this.viewportMinimum / b) * b; c < d; c += b ) c < this.viewportMinimum || this.logLabelValues.push(c); this.logLabelValues.sort(Sa); this.createExtraLabelsForLog(a); } } }; z.prototype.createLabels = function () { var a, d, b = 0, c = 0, e, g = 0, m = 0, c = 0, c = this.interval, l = 0, k, h = 0.6 * this.chart.height, p; a = !1; var q = this.scaleBreaks ? this.scaleBreaks._appliedBreaks : [], n = q.length ? u(this.scaleBreaks.firstBreakIndex) ? 0 : this.scaleBreaks.firstBreakIndex : 0; if ( "axisX" !== this.type || "dateTime" !== this.valueType || this.logarithmic ) { e = this.viewportMaximum; if (this.labels) { a = Math.ceil(c); for ( var c = Math.ceil(this.intervalStartPosition), f = !1, b = c; b < this.viewportMaximum; b += a ) if (this.labels[b]) f = !0; else { f = !1; break; } f && ((this.interval = a), (this.intervalStartPosition = c)); } if (this.logarithmic && !this.equidistantInterval) for ( this.logLabelValues || ((this.logLabelValues = []), this.createExtraLabelsForLog()), c = 0, f = n; c < this.logLabelValues.length; c++ ) if (((b = this.logLabelValues[c]), b < this.viewportMinimum)) c++; else { for (; f < q.length && b > q[f].endValue; f++); a = f < q.length && b >= q[f].startValue && b <= q[f].endValue; p = b; a || ((a = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.options, value: p, label: this.labels[p] ? this.labels[p] : null, }) : "axisX" === this.type && this.labels[p] ? this.labels[p] : ba(p, this.valueFormatString, this.chart._cultureInfo)), (a = new ka(this.ctx, { x: 0, y: 0, maxWidth: g, maxHeight: m, angle: this.labelAngle, text: this.prefix + a + this.suffix, backgroundColor: this.labelBackgroundColor, borderColor: this.labelBorderColor, borderThickness: this.labelBorderThickness, cornerRadius: this.labelCornerRadius, horizontalAlign: "left", fontSize: this.labelFontSize, fontFamily: this.labelFontFamily, fontWeight: this.labelFontWeight, fontColor: this.labelFontColor, fontStyle: this.labelFontStyle, textBaseline: "middle", borderThickness: 0, })), this._labels.push({ position: p, textBlock: a, effectiveHeight: null, })); } f = n; for ( b = this.intervalStartPosition; b <= e; b = parseFloat( 1e-12 > this.interval ? this.logarithmic && this.equidistantInterval ? b * Math.pow(this.logarithmBase, this.interval) : b + this.interval : (this.logarithmic && this.equidistantInterval ? b * Math.pow(this.logarithmBase, this.interval) : b + this.interval ).toFixed(12) ) ) { for (; f < q.length && b > q[f].endValue; f++); a = f < q.length && b >= q[f].startValue && b <= q[f].endValue; p = b; a || ((a = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.options, value: p, label: this.labels[p] ? this.labels[p] : null, }) : "axisX" === this.type && this.labels[p] ? this.labels[p] : ba(p, this.valueFormatString, this.chart._cultureInfo)), (a = new ka(this.ctx, { x: 0, y: 0, maxWidth: g, maxHeight: m, angle: this.labelAngle, text: this.prefix + a + this.suffix, horizontalAlign: "left", backgroundColor: this.labelBackgroundColor, borderColor: this.labelBorderColor, borderThickness: this.labelBorderThickness, cornerRadius: this.labelCornerRadius, fontSize: this.labelFontSize, fontFamily: this.labelFontFamily, fontWeight: this.labelFontWeight, fontColor: this.labelFontColor, fontStyle: this.labelFontStyle, textBaseline: "middle", })), this._labels.push({ position: p, textBlock: a, effectiveHeight: null, })); } } else for ( this.intervalStartPosition = this.getLabelStartPoint( new Date(this.viewportMinimum), this.intervalType, this.interval ), e = Ya( new Date(this.viewportMaximum), this.interval, this.intervalType ), f = n, b = this.intervalStartPosition; b < e; Ya(b, c, this.intervalType) ) { for (a = b.getTime(); f < q.length && a > q[f].endValue; f++); p = a; a = f < q.length && a >= q[f].startValue && a <= q[f].endValue; a || ((a = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.options, value: new Date(p), label: this.labels[p] ? this.labels[p] : null, }) : "axisX" === this.type && this.labels[p] ? this.labels[p] : Ca(p, this.valueFormatString, this.chart._cultureInfo)), (a = new ka(this.ctx, { x: 0, y: 0, maxWidth: g, backgroundColor: this.labelBackgroundColor, borderColor: this.labelBorderColor, borderThickness: this.labelBorderThickness, cornerRadius: this.labelCornerRadius, maxHeight: m, angle: this.labelAngle, text: this.prefix + a + this.suffix, horizontalAlign: "left", fontSize: this.labelFontSize, fontFamily: this.labelFontFamily, fontWeight: this.labelFontWeight, fontColor: this.labelFontColor, fontStyle: this.labelFontStyle, textBaseline: "middle", })), this._labels.push({ position: p, textBlock: a, effectiveHeight: null, breaksLabelType: void 0, })); } if ("bottom" === this._position || "top" === this._position) (l = this.logarithmic && !this.equidistantInterval && 2 <= this._labels.length ? (this.lineCoordinates.width * Math.log( Math.min( this._labels[this._labels.length - 1].position / this._labels[this._labels.length - 2].position, this._labels[1].position / this._labels[0].position ) )) / Math.log(this.range) : (this.lineCoordinates.width / (this.logarithmic && this.equidistantInterval ? Math.log(this.range) / Math.log(this.logarithmBase) : Math.abs(this.range))) * S[this.intervalType + "Duration"] * this.interval), (g = "undefined" === typeof this.options.labelMaxWidth ? (0.5 * this.chart.width) >> 0 : this.options.labelMaxWidth), this.chart.panEnabled || (m = "undefined" === typeof this.options.labelWrap || this.labelWrap ? (0.8 * this.chart.height) >> 0 : 1.5 * this.labelFontSize); else if ("left" === this._position || "right" === this._position) (l = this.logarithmic && !this.equidistantInterval && 2 <= this._labels.length ? (this.lineCoordinates.height * Math.log( Math.min( this._labels[this._labels.length - 1].position / this._labels[this._labels.length - 2].position, this._labels[1].position / this._labels[0].position ) )) / Math.log(this.range) : (this.lineCoordinates.height / (this.logarithmic && this.equidistantInterval ? Math.log(this.range) / Math.log(this.logarithmBase) : Math.abs(this.range))) * S[this.intervalType + "Duration"] * this.interval), this.chart.panEnabled || (g = "undefined" === typeof this.options.labelMaxWidth ? (0.3 * this.chart.width) >> 0 : this.options.labelMaxWidth), (m = "undefined" === typeof this.options.labelWrap || this.labelWrap ? (0.3 * this.chart.height) >> 0 : 1.5 * this.labelFontSize); for (c = 0; c < this._labels.length; c++) { a = this._labels[c].textBlock; a.maxWidth = g; a.maxHeight = m; var B = a.measureText(); k = B.height; } e = []; n = q = 0; if (this.labelAutoFit || this.options.labelAutoFit) if ( (u(this.labelAngle) || ((this.labelAngle = ((this.labelAngle % 360) + 360) % 360), 90 < this.labelAngle && 270 > this.labelAngle ? (this.labelAngle -= 180) : 270 <= this.labelAngle && 360 >= this.labelAngle && (this.labelAngle -= 360)), "bottom" === this._position || "top" === this._position) ) if ( ((g = (0.9 * l) >> 0), (n = 0), !this.chart.panEnabled && 1 <= this._labels.length) ) { this.sessionVariables.labelFontSize = this.labelFontSize; this.sessionVariables.labelMaxWidth = g; this.sessionVariables.labelMaxHeight = m; this.sessionVariables.labelAngle = this.labelAngle; this.sessionVariables.labelWrap = this.labelWrap; for (b = 0; b < this._labels.length; b++) if (!this._labels[b].breaksLabelType) { a = this._labels[b].textBlock; for (var v, f = a.text.split(" "), c = 0; c < f.length; c++) (p = f[c]), (this.ctx.font = a.fontStyle + " " + a.fontWeight + " " + a.fontSize + "px " + a.fontFamily), (p = this.ctx.measureText(p)), p.width > n && ((v = b), (n = p.width)); } b = 0; for ( b = this.intervalStartPosition < this.viewportMinimum ? 1 : 0; b < this._labels.length; b++ ) if (!this._labels[b].breaksLabelType) { a = this._labels[b].textBlock; B = a.measureText(); for (f = b + 1; f < this._labels.length; f++) if (!this._labels[f].breaksLabelType) { d = this._labels[f].textBlock; d = d.measureText(); break; } e.push(a.height); this.sessionVariables.labelMaxHeight = Math.max.apply(Math, e); Math.cos((Math.PI / 180) * Math.abs(this.labelAngle)); Math.sin((Math.PI / 180) * Math.abs(this.labelAngle)); c = g * Math.sin((Math.PI / 180) * Math.abs(this.labelAngle)) + (m - a.fontSize / 2) * Math.cos((Math.PI / 180) * Math.abs(this.labelAngle)); if ( u(this.options.labelAngle) && isNaN(this.options.labelAngle) && 0 !== this.options.labelAngle ) if ( ((this.sessionVariables.labelMaxHeight = 0 === this.labelAngle ? m : Math.min( (c - g * Math.cos( (Math.PI / 180) * Math.abs(this.labelAngle) )) / Math.sin( (Math.PI / 180) * Math.abs(this.labelAngle) ), c )), (p = (h - (k + a.fontSize / 2) * Math.cos((Math.PI / 180) * Math.abs(-25))) / Math.sin((Math.PI / 180) * Math.abs(-25))), !u(this.options.labelWrap)) ) this.labelWrap ? u(this.options.labelMaxWidth) ? ((this.sessionVariables.labelMaxWidth = Math.min( Math.max(g, n), p )), (this.sessionVariables.labelWrap = this.labelWrap), (B.width + d.width) >> 0 > 2 * g && (this.sessionVariables.labelAngle = -25)) : ((this.sessionVariables.labelWrap = this.labelWrap), (this.sessionVariables.labelMaxWidth = this.options.labelMaxWidth), (this.sessionVariables.labelAngle = this.sessionVariables.labelMaxWidth > g ? -25 : this.sessionVariables.labelAngle)) : u(this.options.labelMaxWidth) ? ((this.sessionVariables.labelWrap = this.labelWrap), (this.sessionVariables.labelMaxHeight = m), (this.sessionVariables.labelMaxWidth = g), (B.width + d.width) >> 0 > 2 * g && ((this.sessionVariables.labelAngle = -25), (this.sessionVariables.labelMaxWidth = p))) : ((this.sessionVariables.labelAngle = this.sessionVariables.labelMaxWidth > g ? -25 : this.sessionVariables.labelAngle), (this.sessionVariables.labelMaxWidth = this.options.labelMaxWidth), (this.sessionVariables.labelMaxHeight = m), (this.sessionVariables.labelWrap = this.labelWrap)); else { if (u(this.options.labelWrap)) if (!u(this.options.labelMaxWidth)) this.options.labelMaxWidth < g ? ((this.sessionVariables.labelMaxWidth = this.options.labelMaxWidth), (this.sessionVariables.labelMaxHeight = c)) : ((this.sessionVariables.labelAngle = -25), (this.sessionVariables.labelMaxWidth = this.options.labelMaxWidth), (this.sessionVariables.labelMaxHeight = m)); else if (!u(d)) if ( ((c = (B.width + d.width) >> 0), (f = this.labelFontSize), n < g) ) c - 2 * g > q && ((q = c - 2 * g), c >= 2 * g && c < 2.2 * g ? ((this.sessionVariables.labelMaxWidth = g), u(this.options.labelFontSize) && 12 < f && ((f = Math.floor((12 / 13) * f)), a.measureText()), (this.sessionVariables.labelFontSize = u( this.options.labelFontSize ) ? f : this.options.labelFontSize), (this.sessionVariables.labelAngle = this.labelAngle)) : c >= 2.2 * g && c < 2.8 * g ? ((this.sessionVariables.labelAngle = -25), (this.sessionVariables.labelMaxWidth = p), (this.sessionVariables.labelFontSize = f)) : c >= 2.8 * g && c < 3.2 * g ? ((this.sessionVariables.labelMaxWidth = Math.max(g, n)), (this.sessionVariables.labelWrap = !0), u(this.options.labelFontSize) && 12 < this.labelFontSize && ((this.labelFontSize = Math.floor( (12 / 13) * this.labelFontSize )), a.measureText()), (this.sessionVariables.labelFontSize = u( this.options.labelFontSize ) ? f : this.options.labelFontSize), (this.sessionVariables.labelAngle = this.labelAngle)) : c >= 3.2 * g && c < 3.6 * g ? ((this.sessionVariables.labelAngle = -25), (this.sessionVariables.labelWrap = !0), (this.sessionVariables.labelMaxWidth = p), (this.sessionVariables.labelFontSize = this.labelFontSize)) : c > 3.6 * g && c < 5 * g ? (u(this.options.labelFontSize) && 12 < f && ((f = Math.floor((12 / 13) * f)), a.measureText()), (this.sessionVariables.labelFontSize = u( this.options.labelFontSize ) ? f : this.options.labelFontSize), (this.sessionVariables.labelWrap = !0), (this.sessionVariables.labelAngle = -25), (this.sessionVariables.labelMaxWidth = p)) : c > 5 * g && ((this.sessionVariables.labelWrap = !0), (this.sessionVariables.labelMaxWidth = g), (this.sessionVariables.labelFontSize = f), (this.sessionVariables.labelMaxHeight = m), (this.sessionVariables.labelAngle = this.labelAngle))); else if ( v === b && ((0 === v && n + this._labels[v + 1].textBlock.measureText() .width - 2 * g > q) || (v === this._labels.length - 1 && n + this._labels[v - 1].textBlock.measureText() .width - 2 * g > q) || (0 < v && v < this._labels.length - 1 && n + this._labels[v + 1].textBlock.measureText() .width - 2 * g > q && n + this._labels[v - 1].textBlock.measureText() .width - 2 * g > q)) ) (q = 0 === v ? n + this._labels[v + 1].textBlock.measureText() .width - 2 * g : n + this._labels[v - 1].textBlock.measureText() .width - 2 * g), (this.sessionVariables.labelFontSize = u( this.options.labelFontSize ) ? f : this.options.labelFontSize), (this.sessionVariables.labelWrap = !0), (this.sessionVariables.labelAngle = -25), (this.sessionVariables.labelMaxWidth = p); else if (0 === q) for ( this.sessionVariables.labelFontSize = u( this.options.labelFontSize ) ? f : this.options.labelFontSize, this.sessionVariables.labelWrap = !0, c = 0; c < this._labels.length; c++ ) (a = this._labels[c].textBlock), (a.maxWidth = this.sessionVariables.labelMaxWidth = Math.min(Math.max(g, n), p)), (B = a.measureText()), c < this._labels.length - 1 && ((f = c + 1), (d = this._labels[f].textBlock), (d.maxWidth = this.sessionVariables.labelMaxWidth = Math.min(Math.max(g, n), p)), (d = d.measureText()), (B.width + d.width) >> 0 > 2 * g && (this.sessionVariables.labelAngle = -25)); } else ((this.sessionVariables.labelAngle = this.labelAngle), (this.sessionVariables.labelMaxHeight = 0 === this.labelAngle ? m : Math.min( (c - g * Math.cos( (Math.PI / 180) * Math.abs(this.labelAngle) )) / Math.sin( (Math.PI / 180) * Math.abs(this.labelAngle) ), c )), (p = 0 != this.labelAngle ? (h - (k + a.fontSize / 2) * Math.cos( (Math.PI / 180) * Math.abs(this.labelAngle) )) / Math.sin((Math.PI / 180) * Math.abs(this.labelAngle)) : g), (this.sessionVariables.labelMaxHeight = m = this.labelWrap ? (h - p * Math.sin( (Math.PI / 180) * Math.abs(this.labelAngle) )) / Math.cos((Math.PI / 180) * Math.abs(this.labelAngle)) : 1.5 * this.labelFontSize), u(this.options.labelWrap)) ? u(this.options.labelWrap) && (this.labelWrap && !u(this.options.labelMaxWidth) ? ((this.sessionVariables.labelWrap = this.labelWrap), (this.sessionVariables.labelMaxWidth = this.options .labelMaxWidth ? this.options.labelMaxWidth : p), (this.sessionVariables.labelMaxHeight = m)) : ((this.sessionVariables.labelAngle = this.labelAngle), (this.sessionVariables.labelMaxWidth = p), (this.sessionVariables.labelMaxHeight = c < 0.9 * l ? 0.9 * l : c), (this.sessionVariables.labelWrap = this.labelWrap))) : (this.options.labelWrap ? ((this.sessionVariables.labelWrap = this.labelWrap), (this.sessionVariables.labelMaxWidth = this.options .labelMaxWidth ? this.options.labelMaxWidth : p)) : (u(this.options.labelMaxWidth), (this.sessionVariables.labelMaxWidth = this.options .labelMaxWidth ? this.options.labelMaxWidth : p), (this.sessionVariables.labelWrap = this.labelWrap)), (this.sessionVariables.labelMaxHeight = m)); } for (c = 0; c < this._labels.length; c++) (a = this._labels[c].textBlock), (a.maxWidth = this.labelMaxWidth = this.sessionVariables.labelMaxWidth), (a.fontSize = this.sessionVariables.labelFontSize), (a.angle = this.labelAngle = this.sessionVariables.labelAngle), (a.wrap = this.labelWrap = this.sessionVariables.labelWrap), (a.maxHeight = this.sessionVariables.labelMaxHeight), a.measureText(); } else for (b = 0; b < this._labels.length; b++) (a = this._labels[b].textBlock), (a.maxWidth = this.labelMaxWidth = u(this.options.labelMaxWidth) ? this.sessionVariables.labelMaxWidth : this.options.labelMaxWidth), (a.fontSize = this.labelFontSize = u(this.options.labelFontSize) ? this.sessionVariables.labelFontSize : this.options.labelFontSize), (a.angle = this.labelAngle = u(this.options.labelAngle) ? this.sessionVariables.labelAngle : this.labelAngle), (a.wrap = this.labelWrap = u(this.options.labelWrap) ? this.sessionVariables.labelWrap : this.options.labelWrap), (a.maxHeight = this.sessionVariables.labelMaxHeight), a.measureText(); else if ("left" === this._position || "right" === this._position) if ( ((g = u(this.options.labelMaxWidth) ? (0.3 * this.chart.width) >> 0 : this.options.labelMaxWidth), (m = "undefined" === typeof this.options.labelWrap || this.labelWrap ? (0.3 * this.chart.height) >> 0 : 1.5 * this.labelFontSize), !this.chart.panEnabled && 1 <= this._labels.length) ) { this.sessionVariables.labelFontSize = this.labelFontSize; this.sessionVariables.labelMaxWidth = g; this.sessionVariables.labelMaxHeight = m; this.sessionVariables.labelAngle = u( this.sessionVariables.labelAngle ) ? 0 : this.sessionVariables.labelAngle; this.sessionVariables.labelWrap = this.labelWrap; for (b = 0; b < this._labels.length; b++) if (!this._labels[b].breaksLabelType) { a = this._labels[b].textBlock; B = a.measureText(); for (f = b + 1; f < this._labels.length; f++) if (!this._labels[f].breaksLabelType) { d = this._labels[f].textBlock; d = d.measureText(); break; } e.push(a.height); this.sessionVariables.labelMaxHeight = Math.max.apply(Math, e); c = g * Math.sin((Math.PI / 180) * Math.abs(this.labelAngle)) + (m - a.fontSize / 2) * Math.cos((Math.PI / 180) * Math.abs(this.labelAngle)); Math.cos((Math.PI / 180) * Math.abs(this.labelAngle)); Math.sin((Math.PI / 180) * Math.abs(this.labelAngle)); u(this.options.labelAngle) && isNaN(this.options.labelAngle) && 0 !== this.options.labelAngle ? u(this.options.labelWrap) ? u(this.options.labelWrap) && (u(this.options.labelMaxWidth) ? u(d) || ((l = (B.height + d.height) >> 0), l - 2 * m > n && ((n = l - 2 * m), l >= 2 * m && l < 2.4 * m ? (u(this.options.labelFontSize) && 12 < this.labelFontSize && ((this.labelFontSize = Math.floor( (12 / 13) * this.labelFontSize )), a.measureText()), (this.sessionVariables.labelMaxHeight = m), (this.sessionVariables.labelFontSize = u( this.options.labelFontSize ) ? this.labelFontSize : this.options.labelFontSize)) : l >= 2.4 * m && l < 2.8 * m ? ((this.sessionVariables.labelMaxHeight = c), (this.sessionVariables.labelFontSize = this.labelFontSize), (this.sessionVariables.labelWrap = !0)) : l >= 2.8 * m && l < 3.2 * m ? ((this.sessionVariables.labelMaxHeight = m), (this.sessionVariables.labelWrap = !0), u(this.options.labelFontSize) && 12 < this.labelFontSize && ((this.labelFontSize = Math.floor( (12 / 13) * this.labelFontSize )), a.measureText()), (this.sessionVariables.labelFontSize = u( this.options.labelFontSize ) ? this.labelFontSize : this.options.labelFontSize), (this.sessionVariables.labelAngle = u( this.sessionVariables.labelAngle ) ? 0 : this.sessionVariables.labelAngle)) : l >= 3.2 * m && l < 3.6 * m ? ((this.sessionVariables.labelMaxHeight = c), (this.sessionVariables.labelWrap = !0), (this.sessionVariables.labelFontSize = this.labelFontSize)) : l > 3.6 * m && l < 10 * m ? (u(this.options.labelFontSize) && 12 < this.labelFontSize && ((this.labelFontSize = Math.floor( (12 / 13) * this.labelFontSize )), a.measureText()), (this.sessionVariables.labelFontSize = u( this.options.labelFontSize ) ? this.labelFontSize : this.options.labelFontSize), (this.sessionVariables.labelMaxWidth = g), (this.sessionVariables.labelMaxHeight = m), (this.sessionVariables.labelAngle = u( this.sessionVariables.labelAngle ) ? 0 : this.sessionVariables.labelAngle)) : l > 10 * m && l < 50 * m && (u(this.options.labelFontSize) && 12 < this.labelFontSize && ((this.labelFontSize = Math.floor( (12 / 13) * this.labelFontSize )), a.measureText()), (this.sessionVariables.labelFontSize = u( this.options.labelFontSize ) ? this.labelFontSize : this.options.labelFontSize), (this.sessionVariables.labelMaxHeight = m), (this.sessionVariables.labelMaxWidth = g), (this.sessionVariables.labelAngle = u( this.sessionVariables.labelAngle ) ? 0 : this.sessionVariables.labelAngle)))) : ((this.sessionVariables.labelMaxHeight = m), (this.sessionVariables.labelMaxWidth = this.options .labelMaxWidth ? this.options.labelMaxWidth : this.sessionVariables.labelMaxWidth))) : ((this.sessionVariables.labelMaxWidth = this.labelWrap ? this.options.labelMaxWidth ? this.options.labelMaxWidth : this.sessionVariables.labelMaxWidth : this.labelMaxWidth ? this.options.labelMaxWidth ? this.options.labelMaxWidth : this.sessionVariables.labelMaxWidth : g), (this.sessionVariables.labelMaxHeight = m)) : ((this.sessionVariables.labelAngle = this.labelAngle), (this.sessionVariables.labelMaxWidth = 0 === this.labelAngle ? g : Math.min( (c - m * Math.sin( (Math.PI / 180) * Math.abs(this.labelAngle) )) / Math.cos( (Math.PI / 180) * Math.abs(this.labelAngle) ), m )), u(this.options.labelWrap)) ? u(this.options.labelWrap) && (this.labelWrap && !u(this.options.labelMaxWidth) ? ((this.sessionVariables.labelMaxWidth = this.options .labelMaxWidth ? this.options.labelMaxWidth > this.options.labelMaxWidth : this.sessionVariables.labelMaxWidth), (this.sessionVariables.labelWrap = this.labelWrap), (this.sessionVariables.labelMaxHeight = c)) : ((this.sessionVariables.labelMaxWidth = this.options .labelMaxWidth ? this.options.labelMaxWidth : g), (this.sessionVariables.labelMaxHeight = 0 === this.labelAngle ? m : c), u(this.options.labelMaxWidth) && (this.sessionVariables.labelAngle = this.labelAngle))) : this.options.labelWrap ? ((this.sessionVariables.labelMaxHeight = 0 === this.labelAngle ? m : c), (this.sessionVariables.labelWrap = this.labelWrap), (this.sessionVariables.labelMaxWidth = g)) : ((this.sessionVariables.labelMaxHeight = m), u(this.options.labelMaxWidth), (this.sessionVariables.labelMaxWidth = this.options .labelMaxWidth ? this.options.labelMaxWidth : this.sessionVariables.labelMaxWidth), (this.sessionVariables.labelWrap = this.labelWrap)); } for (c = 0; c < this._labels.length; c++) (a = this._labels[c].textBlock), (a.maxWidth = this.labelMaxWidth = this.sessionVariables.labelMaxWidth), (a.fontSize = this.labelFontSize = this.sessionVariables.labelFontSize), (a.angle = this.labelAngle = this.sessionVariables.labelAngle), (a.wrap = this.labelWrap = this.sessionVariables.labelWrap), (a.maxHeight = this.sessionVariables.labelMaxHeight), a.measureText(); } else for (b = 0; b < this._labels.length; b++) (a = this._labels[b].textBlock), (a.maxWidth = this.labelMaxWidth = u(this.options.labelMaxWidth) ? this.sessionVariables.labelMaxWidth : this.options.labelMaxWidth), (a.fontSize = this.labelFontSize = u(this.options.labelFontSize) ? this.sessionVariables.labelFontSize : this.options.labelFontSize), (a.angle = this.labelAngle = u(this.options.labelAngle) ? this.sessionVariables.labelAngle : this.labelAngle), (a.wrap = this.labelWrap = u(this.options.labelWrap) ? this.sessionVariables.labelWrap : this.options.labelWrap), (a.maxHeight = this.sessionVariables.labelMaxHeight), a.measureText(); for (b = 0; b < this.stripLines.length; b++) { var g = this.stripLines[b], z; if ("outside" === g.labelPlacement) { m = this.sessionVariables.labelMaxWidth; if ("bottom" === this._position || "top" === this._position) z = u(g.options.labelWrap) ? this.sessionVariables.labelMaxHeight : g.labelWrap ? (0.8 * this.chart.height) >> 0 : 1.5 * this.labelFontSize; if ("left" === this._position || "right" === this._position) z = u(g.options.labelWrap) ? this.sessionVariables.labelMaxHeight : g.labelWrap ? (0.8 * this.chart.width) >> 0 : 1.5 * this.labelFontSize; u(g.labelBackgroundColor) && (g.labelBackgroundColor = "#EEEEEE"); } else (m = "bottom" === this._position || "top" === this._position ? (0.9 * this.chart.width) >> 0 : (0.9 * this.chart.height) >> 0), (z = u(g.options.labelWrap) || g.labelWrap ? "bottom" === this._position || "top" === this._position ? (0.8 * this.chart.width) >> 0 : (0.8 * this.chart.height) >> 0 : 1.5 * this.labelFontSize), u(g.labelBackgroundColor) && (u(g.startValue) && 0 !== g.startValue ? (g.labelBackgroundColor = r ? "transparent" : null) : (g.labelBackgroundColor = "#EEEEEE")); a = new ka(this.ctx, { x: 0, y: 0, backgroundColor: g.labelBackgroundColor, borderColor: g.labelBorderColor, borderThickness: g.labelBorderThickness, cornerRadius: g.labelCornerRadius, maxWidth: g.options.labelMaxWidth ? g.options.labelMaxWidth : m, maxHeight: z, angle: this.labelAngle, text: g.labelFormatter ? g.labelFormatter({ chart: this.chart, axis: this, stripLine: g }) : g.label, horizontalAlign: "left", fontSize: "outside" === g.labelPlacement ? g.options.labelFontSize ? g.labelFontSize : this.labelFontSize : g.labelFontSize, fontFamily: "outside" === g.labelPlacement ? g.options.labelFontFamily ? g.labelFontFamily : this.labelFontFamily : g.labelFontFamily, fontWeight: "outside" === g.labelPlacement ? g.options.labelFontWeight ? g.labelFontWeight : this.labelFontWeight : g.labelFontWeight, fontColor: g.labelFontColor || g.color, fontStyle: "outside" === g.labelPlacement ? g.options.labelFontStyle ? g.labelFontStyle : this.fontWeight : g.labelFontStyle, textBaseline: "middle", }); this._stripLineLabels.push({ position: g.value, textBlock: a, effectiveHeight: null, stripLine: g, }); } }; z.prototype.createLabelsAndCalculateWidth = function () { var a = 0, d = 0; this._labels = []; this._stripLineLabels = []; var b = this.chart.isNavigator ? 0 : 5; if ("left" === this._position || "right" === this._position) { this.createLabels(); for (d = 0; d < this._labels.length; d++) { var c = this._labels[d].textBlock, e = c.measureText(), g = 0, g = 0 === this.labelAngle ? e.width : e.width * Math.cos((Math.PI / 180) * Math.abs(this.labelAngle)) + (e.height - c.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(this.labelAngle)); a < g && (a = g); this._labels[d].effectiveWidth = g; } for (d = 0; d < this._stripLineLabels.length; d++) "outside" === this._stripLineLabels[d].stripLine.labelPlacement && this._stripLineLabels[d].stripLine.value >= this.viewportMinimum && this._stripLineLabels[d].stripLine.value <= this.viewportMaximum && ((c = this._stripLineLabels[d].textBlock), (e = c.measureText()), (g = 0 === this.labelAngle ? e.width : e.width * Math.cos((Math.PI / 180) * Math.abs(this.labelAngle)) + (e.height - c.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(this.labelAngle))), a < g && (a = g), (this._stripLineLabels[d].effectiveWidth = g)); } d = this.title ? this._titleTextBlock.measureText().height + 2 : 0; return (c = "inside" === this.labelPlacement ? (c = d + b) : d + a + this.tickLength + b); }; z.prototype.createLabelsAndCalculateHeight = function () { var a = 0; this._labels = []; this._stripLineLabels = []; var d, b = 0, c = this.chart.isNavigator ? 0 : 5; this.createLabels(); if ("bottom" === this._position || "top" === this._position) { for (b = 0; b < this._labels.length; b++) { d = this._labels[b].textBlock; var e = d.measureText(), g = 0, g = 0 === this.labelAngle ? e.height : e.width * Math.sin((Math.PI / 180) * Math.abs(this.labelAngle)) + (e.height - d.fontSize / 2) * Math.cos((Math.PI / 180) * Math.abs(this.labelAngle)); a < g && (a = g); this._labels[b].effectiveHeight = g; } for (b = 0; b < this._stripLineLabels.length; b++) "outside" === this._stripLineLabels[b].stripLine.labelPlacement && this._stripLineLabels[b].stripLine.value >= this.viewportMinimum && this._stripLineLabels[b].stripLine.value <= this.viewportMaximum && ((d = this._stripLineLabels[b].textBlock), (e = d.measureText()), (g = 0 === this.labelAngle ? e.height : e.width * Math.sin((Math.PI / 180) * Math.abs(this.labelAngle)) + (e.height - d.fontSize / 2) * Math.cos((Math.PI / 180) * Math.abs(this.labelAngle))), a < g && (a = g), (this._stripLineLabels[b].effectiveHeight = g)); } d = this.title ? this._titleTextBlock.measureText().height + 2 : 0; return (b = "inside" === this.labelPlacement ? (b = d + c) : d + a + this.tickLength + c); }; z.setLayout = function (a, d, b, c, e, g) { var m, l, k, h, p = a[0] ? a[0].chart : d[0].chart, q = p.isNavigator ? 0 : 10, n = p._axes; if (a && 0 < a.length) for (var f = 0; f < a.length; f++) a[f] && a[f].calculateAxisParameters(); if (d && 0 < d.length) for (f = 0; f < d.length; f++) d[f].calculateAxisParameters(); if (b && 0 < b.length) for (f = 0; f < b.length; f++) b[f].calculateAxisParameters(); if (c && 0 < c.length) for (f = 0; f < c.length; f++) c[f].calculateAxisParameters(); for (f = 0; f < n.length; f++) if (n[f] && n[f].scaleBreaks && n[f].scaleBreaks._appliedBreaks.length) for ( var r = n[f].scaleBreaks._appliedBreaks, v = 0; v < r.length && !(r[v].startValue > n[f].viewportMaximum); v++ ) r[v].endValue < n[f].viewportMinimum || (u(n[f].scaleBreaks.firstBreakIndex) && (n[f].scaleBreaks.firstBreakIndex = v), r[v].startValue >= n[f].viewPortMinimum && (n[f].scaleBreaks.lastBreakIndex = v)); for ( var z = (v = 0), t = 0, C = 0, x = 0, D = 0, y = 0, A, E, F = (l = 0), H, I, L, r = (H = I = L = !1), f = 0; f < n.length; f++ ) n[f] && n[f].title && (n[f]._titleTextBlock = new ka(n[f].ctx, { text: n[f].title, horizontalAlign: "center", fontSize: n[f].titleFontSize, fontFamily: n[f].titleFontFamily, fontWeight: n[f].titleFontWeight, fontColor: n[f].titleFontColor, fontStyle: n[f].titleFontStyle, borderColor: n[f].titleBorderColor, borderThickness: n[f].titleBorderThickness, backgroundColor: n[f].titleBackgroundColor, cornerRadius: n[f].titleCornerRadius, textBaseline: "top", })); for (f = 0; f < n.length; f++) if (n[f].title) switch (n[f]._position) { case "left": n[f]._titleTextBlock.maxWidth = n[f].titleMaxWidth || g.height; n[f]._titleTextBlock.maxHeight = n[f].titleWrap ? 0.8 * g.width : 1.5 * n[f].titleFontSize; n[f]._titleTextBlock.angle = -90; break; case "right": n[f]._titleTextBlock.maxWidth = n[f].titleMaxWidth || g.height; n[f]._titleTextBlock.maxHeight = n[f].titleWrap ? 0.8 * g.width : 1.5 * n[f].titleFontSize; n[f]._titleTextBlock.angle = 90; break; default: (n[f]._titleTextBlock.maxWidth = n[f].titleMaxWidth || g.width), (n[f]._titleTextBlock.maxHeight = n[f].titleWrap ? 0.8 * g.height : 1.5 * n[f].titleFontSize), (n[f]._titleTextBlock.angle = 0); } if ("normal" === e) { for ( var C = [], x = [], D = [], y = [], M = [], N = [], O = [], Q = []; 4 > v; ) { var G = 0, R = 0, S = 0, U = 0, W = (e = 0), K = 0, $ = 0, V = 0, X = 0, P = 0, ba = 0; if (b && 0 < b.length) for (D = [], f = P = 0; f < b.length; f++) D.push( Math.ceil(b[f] ? b[f].createLabelsAndCalculateWidth() : 0) ), (P += D[f]), (K += b[f] && !p.isNavigator ? b[f].margin : 0); else D.push(Math.ceil(b[0] ? b[0].createLabelsAndCalculateWidth() : 0)); O.push(D); if (c && 0 < c.length) for (y = [], f = ba = 0; f < c.length; f++) y.push( Math.ceil(c[f] ? c[f].createLabelsAndCalculateWidth() : 0) ), (ba += y[f]), ($ += c[f] ? c[f].margin : 0); else y.push(Math.ceil(c[0] ? c[0].createLabelsAndCalculateWidth() : 0)); Q.push(y); m = Math.round(g.x1 + P + K); k = Math.round( g.x2 - ba - $ > p.width - q ? p.width - q : g.x2 - ba - $ ); if (a && 0 < a.length) for (C = [], f = V = 0; f < a.length; f++) a[f] && (a[f].lineCoordinates = {}), (a[f].lineCoordinates.width = Math.abs(k - m)), a[f].title && (a[f]._titleTextBlock.maxWidth = 0 < a[f].titleMaxWidth && a[f].titleMaxWidth < a[f].lineCoordinates.width ? a[f].titleMaxWidth : a[f].lineCoordinates.width), C.push( Math.ceil(a[f] ? a[f].createLabelsAndCalculateHeight() : 0) ), (V += C[f]), (e += a[f] && !p.isNavigator ? a[f].margin : 0); else C.push(Math.ceil(a[0] ? a[0].createLabelsAndCalculateHeight() : 0)); M.push(C); if (d && 0 < d.length) for (x = [], f = X = 0; f < d.length; f++) d[f] && (d[f].lineCoordinates = {}), (d[f].lineCoordinates.width = Math.abs(k - m)), d[f].title && (d[f]._titleTextBlock.maxWidth = 0 < d[f].titleMaxWidth && d[f].titleMaxWidth < d[f].lineCoordinates.width ? d[f].titleMaxWidth : d[f].lineCoordinates.width), x.push( Math.ceil(d[f] ? d[f].createLabelsAndCalculateHeight() : 0) ), (X += x[f]), (W += d[f] && !p.isNavigator ? d[f].margin : 0); else x.push(Math.ceil(d[0] ? d[0].createLabelsAndCalculateHeight() : 0)); N.push(x); if (a && 0 < a.length) for (f = 0; f < a.length; f++) a[f] && ((a[f].lineCoordinates.x1 = m), (k = Math.round( g.x2 - ba - $ > p.width - q ? p.width - q : g.x2 - ba - $ )), a[f]._labels && 1 < a[f]._labels.length && ((l = h = 0), (h = a[f]._labels[1]), (l = "dateTime" === a[f].valueType ? a[f]._labels[a[f]._labels.length - 2] : a[f]._labels[a[f]._labels.length - 1]), (z = h.textBlock.width * Math.cos((Math.PI / 180) * Math.abs(h.textBlock.angle)) + (h.textBlock.height - l.textBlock.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(h.textBlock.angle))), (t = l.textBlock.width * Math.cos((Math.PI / 180) * Math.abs(l.textBlock.angle)) + (l.textBlock.height - l.textBlock.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(l.textBlock.angle)))), !a[f] || !a[f].labelAutoFit || u(A) || u(E) || p.isNavigator || ((l = 0), 0 < a[f].labelAngle ? E + t > k && (l += 0 < a[f].labelAngle ? E + t - k - ba : 0) : 0 > a[f].labelAngle ? A - z < m && A - z < a[f].viewportMinimum && (F = m - (K + a[f].tickLength + D + A - z + a[f].labelFontSize / 2)) : 0 === a[f].labelAngle && (E + t > k && (l = E + t / 2 - k - ba), A - z < m && A - z < a[f].viewportMinimum && (F = m - K - a[f].tickLength - D - A + z / 2)), a[f].viewportMaximum === a[f].maximum && a[f].viewportMinimum === a[f].minimum && 0 < a[f].labelAngle && 0 < l ? (k -= l) : a[f].viewportMaximum === a[f].maximum && a[f].viewportMinimum === a[f].minimum && 0 > a[f].labelAngle && 0 < F ? (m += F) : a[f].viewportMaximum === a[f].maximum && a[f].viewportMinimum === a[f].minimum && 0 === a[f].labelAngle && (0 < F && (m += F), 0 < l && (k -= l))), p.panEnabled ? (V = p.sessionVariables.axisX.height) : (p.sessionVariables.axisX.height = V), (l = Math.round(g.y2 - V - e + G)), (h = Math.round(g.y2)), (a[f].lineCoordinates.x2 = k), (a[f].lineCoordinates.width = k - m), (a[f].lineCoordinates.y1 = l), (a[f].lineCoordinates.y2 = l), (a[f].bounds = { x1: m, y1: l, x2: k, y2: h - (V + e - C[f] - G), width: k - m, height: h - l, })), (G += C[f] + a[f].margin); if (d && 0 < d.length) for (f = 0; f < d.length; f++) (d[f].lineCoordinates.x1 = Math.round(g.x1 + P + K)), (d[f].lineCoordinates.x2 = Math.round( g.x2 - ba - $ > p.width - q ? p.width - q : g.x2 - ba - $ )), (d[f].lineCoordinates.width = Math.abs(k - m)), d[f]._labels && 1 < d[f]._labels.length && ((h = d[f]._labels[1]), (l = "dateTime" === d[f].valueType ? d[f]._labels[d[f]._labels.length - 2] : d[f]._labels[d[f]._labels.length - 1]), (z = h.textBlock.width * Math.cos((Math.PI / 180) * Math.abs(h.textBlock.angle)) + (h.textBlock.height - l.textBlock.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(h.textBlock.angle))), (t = l.textBlock.width * Math.cos((Math.PI / 180) * Math.abs(l.textBlock.angle)) + (l.textBlock.height - l.textBlock.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(l.textBlock.angle)))), p.panEnabled ? (X = p.sessionVariables.axisX2.height) : (p.sessionVariables.axisX2.height = X), (l = Math.round(g.y1)), (h = Math.round(g.y2 + d[f].margin)), (d[f].lineCoordinates.y1 = l + X + W - R), (d[f].lineCoordinates.y2 = l), (d[f].bounds = { x1: m, y1: l + (X + W - x[f] - R), x2: k, y2: h, width: k - m, height: h - l, }), (R += x[f] + d[f].margin); if (b && 0 < b.length) for (f = 0; f < b.length; f++) (K = p.isNavigator ? 0 : 10), b[f] && ((m = Math.round( a[0] ? a[0].lineCoordinates.x1 : d[0].lineCoordinates.x1 )), (K = b[f]._labels && 0 < b[f]._labels.length ? b[f]._labels[b[f]._labels.length - 1].textBlock.height / 2 : q), (l = Math.round( g.y1 + X + W < Math.max(K, q) ? Math.max(K, q) : g.y1 + X + W )), (k = Math.round( a[0] ? a[0].lineCoordinates.x1 : d[0].lineCoordinates.x1 )), (K = 0 < a.length ? 0 : b[f]._labels && 0 < b[f]._labels.length ? b[f]._labels[0].textBlock.height / 2 : q), (h = Math.round(g.y2 - V - e - K)), (b[f].lineCoordinates = { x1: k - S, y1: l, x2: k - S, y2: h, height: Math.abs(h - l), }), (b[f].bounds = { x1: m - (D[f] + S), y1: l, x2: k, y2: h, width: k - m, height: h - l, }), b[f].title && (b[f]._titleTextBlock.maxWidth = 0 < b[f].titleMaxWidth && b[f].titleMaxWidth < b[f].lineCoordinates.height ? b[f].titleMaxWidth : b[f].lineCoordinates.height), (S += D[f] + b[f].margin)); if (c && 0 < c.length) for (f = 0; f < c.length; f++) c[f] && ((m = Math.round( a[0] ? a[0].lineCoordinates.x2 : d[0].lineCoordinates.x2 )), (k = Math.round(m)), (K = c[f]._labels && 0 < c[f]._labels.length ? c[f]._labels[c[f]._labels.length - 1].textBlock.height / 2 : 0), (l = Math.round( g.y1 + X + W < Math.max(K, q) ? Math.max(K, q) : g.y1 + X + W )), (K = 0 < a.length ? 0 : c[f]._labels && 0 < c[f]._labels.length ? c[f]._labels[0].textBlock.height / 2 : 0), (h = Math.round(g.y2 - (V + e + K))), (c[f].lineCoordinates = { x1: m + U, y1: l, x2: m + U, y2: h, height: Math.abs(h - l), }), (c[f].bounds = { x1: m, y1: l, x2: k + (y[f] + U), y2: h, width: k - m, height: h - l, }), c[f].title && (c[f]._titleTextBlock.maxWidth = 0 < c[f].titleMaxWidth && c[f].titleMaxWidth < c[f].lineCoordinates.height ? c[f].titleMaxWidth : c[f].lineCoordinates.height), (U += y[f] + c[f].margin)); if (a && 0 < a.length) for (f = 0; f < a.length; f++) a[f] && (a[f].calculateValueToPixelConversionParameters(), a[f].calculateBreaksSizeInValues(), a[f]._labels && 1 < a[f]._labels.length && ((A = (a[f].logarithmic ? Math.log( a[f]._labels[1].position / a[f].viewportMinimum ) / a[f].conversionParameters.lnLogarithmBase : a[f]._labels[1].position - a[f].viewportMinimum) * Math.abs(a[f].conversionParameters.pixelPerUnit) + a[f].lineCoordinates.x1), (m = a[f]._labels[ a[f]._labels.length - ("dateTime" === a[f].valueType ? 2 : 1) ].position), (m = a[f].getApparentDifference(a[f].viewportMinimum, m)), (E = a[f].logarithmic ? (1 < m ? (Math.log(m) / a[f].conversionParameters.lnLogarithmBase) * Math.abs(a[f].conversionParameters.pixelPerUnit) : 0) + a[f].lineCoordinates.x1 : (0 < m ? m * Math.abs(a[f].conversionParameters.pixelPerUnit) : 0) + a[f].lineCoordinates.x1))); if (d && 0 < d.length) for (f = 0; f < d.length; f++) d[f].calculateValueToPixelConversionParameters(), d[f].calculateBreaksSizeInValues(), d[f]._labels && 1 < d[f]._labels.length && ((A = (d[f].logarithmic ? Math.log( d[f]._labels[1].position / d[f].viewportMinimum ) / d[f].conversionParameters.lnLogarithmBase : d[f]._labels[1].position - d[f].viewportMinimum) * Math.abs(d[f].conversionParameters.pixelPerUnit) + d[f].lineCoordinates.x1), (m = d[f]._labels[ d[f]._labels.length - ("dateTime" === d[f].valueType ? 2 : 1) ].position), (m = d[f].getApparentDifference(d[f].viewportMinimum, m)), (E = d[f].logarithmic ? (1 < m ? (Math.log(m) / d[f].conversionParameters.lnLogarithmBase) * Math.abs(d[f].conversionParameters.pixelPerUnit) : 0) + d[f].lineCoordinates.x1 : (0 < m ? m * Math.abs(d[f].conversionParameters.pixelPerUnit) : 0) + d[f].lineCoordinates.x1)); for (f = 0; f < n.length; f++) "axisY" === n[f].type && (n[f].calculateValueToPixelConversionParameters(), n[f].calculateBreaksSizeInValues()); if (0 < v) { if (a && 0 < a.length) for (f = 0; f < a.length; f++) r = M[v - 1][f] === M[v][f] ? !0 : !1; else r = !0; if (d && 0 < d.length) for (f = 0; f < d.length; f++) H = N[v - 1][f] === N[v][f] ? !0 : !1; else H = !0; if (b && 0 < b.length) for (f = 0; f < b.length; f++) I = O[v - 1][f] === O[v][f] ? !0 : !1; else I = !0; if (c && 0 < c.length) for (f = 0; f < c.length; f++) L = Q[v - 1][f] === Q[v][f] ? !0 : !1; else L = !0; } if (r && H && I && L) break; v++; } if (a && 0 < a.length) for (f = 0; f < a.length; f++) a[f].calculateStripLinesThicknessInValues(), a[f].calculateBreaksInPixels(); if (d && 0 < d.length) for (f = 0; f < d.length; f++) d[f].calculateStripLinesThicknessInValues(), d[f].calculateBreaksInPixels(); if (b && 0 < b.length) for (f = 0; f < b.length; f++) b[f].calculateStripLinesThicknessInValues(), b[f].calculateBreaksInPixels(); if (c && 0 < c.length) for (f = 0; f < c.length; f++) c[f].calculateStripLinesThicknessInValues(), c[f].calculateBreaksInPixels(); } else { q = []; A = []; F = []; z = []; E = []; t = []; M = []; for (N = []; 4 > v; ) { V = U = R = S = $ = K = W = e = Q = O = G = X = 0; if (a && 0 < a.length) for (F = [], f = U = 0; f < a.length; f++) F.push( Math.ceil(a[f] ? a[f].createLabelsAndCalculateWidth() : 0) ), (U += F[f]), (e += a[f] && !p.isNavigator ? a[f].margin : 0); else F.push(Math.ceil(a[0] ? a[0].createLabelsAndCalculateWidth() : 0)); M.push(F); if (d && 0 < d.length) for (z = [], f = V = 0; f < d.length; f++) z.push( Math.ceil(d[f] ? d[f].createLabelsAndCalculateWidth() : 0) ), (V += z[f]), (W += d[f] ? d[f].margin : 0); else z.push(Math.ceil(d[0] ? d[0].createLabelsAndCalculateWidth() : 0)); N.push(z); if (b && 0 < b.length) for (f = 0; f < b.length; f++) (b[f].lineCoordinates = {}), (m = Math.round(g.x1 + U + e)), (k = Math.round( g.x2 - V - W > p.width - 10 ? p.width - 10 : g.x2 - V - W )), b[f].labelAutoFit && !u(C) && (0 < !a.length && (m = 0 > b[f].labelAngle ? Math.max(m, C) : 0 === b[f].labelAngle ? Math.max(m, C / 2) : m), 0 < !d.length && (k = 0 < b[f].labelAngle ? k - x / 2 : 0 === b[f].labelAngle ? k - x / 2 : k)), (b[f].lineCoordinates.x1 = m), (b[f].lineCoordinates.x2 = k), (b[f].lineCoordinates.width = Math.abs(k - m)), b[f].title && (b[f]._titleTextBlock.maxWidth = 0 < b[f].titleMaxWidth && b[f].titleMaxWidth < b[f].lineCoordinates.width ? b[f].titleMaxWidth : b[f].lineCoordinates.width); if (c && 0 < c.length) for (f = 0; f < c.length; f++) (c[f].lineCoordinates = {}), (m = Math.round(g.x1 + U + e)), (k = Math.round( g.x2 - V - W > c[f].chart.width - 10 ? c[f].chart.width - 10 : g.x2 - V - W )), c[f] && c[f].labelAutoFit && !u(D) && (0 < !a.length && (m = 0 < c[f].labelAngle ? Math.max(m, D) : 0 === c[f].labelAngle ? Math.max(m, D / 2) : m), 0 < !d.length && (k -= y / 2)), (c[f].lineCoordinates.x1 = m), (c[f].lineCoordinates.x2 = k), (c[f].lineCoordinates.width = Math.abs(k - m)), c[f].title && (c[f]._titleTextBlock.maxWidth = 0 < c[f].titleMaxWidth && c[f].titleMaxWidth < c[f].lineCoordinates.width ? c[f].titleMaxWidth : c[f].lineCoordinates.width); if (b && 0 < b.length) for (q = [], f = S = 0; f < b.length; f++) q.push( Math.ceil(b[f] ? b[f].createLabelsAndCalculateHeight() : 0) ), (S += q[f] + b[f].margin), (K += b[f].margin); else q.push(Math.ceil(b[0] ? b[0].createLabelsAndCalculateHeight() : 0)); E.push(q); if (c && 0 < c.length) for (A = [], f = R = 0; f < c.length; f++) A.push( Math.ceil(c[f] ? c[f].createLabelsAndCalculateHeight() : 0) ), (R += A[f]), ($ += c[f].margin); else A.push(Math.ceil(c[0] ? c[0].createLabelsAndCalculateHeight() : 0)); t.push(A); if (b && 0 < b.length) for (f = 0; f < b.length; f++) 0 < b[f]._labels.length && ((h = b[f]._labels[0]), (l = b[f]._labels[b[f]._labels.length - 1]), (C = h.textBlock.width * Math.cos((Math.PI / 180) * Math.abs(h.textBlock.angle)) + (h.textBlock.height - l.textBlock.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(h.textBlock.angle))), (x = l.textBlock.width * Math.cos((Math.PI / 180) * Math.abs(l.textBlock.angle)) + (l.textBlock.height - l.textBlock.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(l.textBlock.angle)))); if (c && 0 < c.length) for (f = 0; f < c.length; f++) c[f] && 0 < c[f]._labels.length && ((h = c[f]._labels[0]), (l = c[f]._labels[c[f]._labels.length - 1]), (D = h.textBlock.width * Math.cos((Math.PI / 180) * Math.abs(h.textBlock.angle)) + (h.textBlock.height - l.textBlock.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(h.textBlock.angle))), (y = l.textBlock.width * Math.cos((Math.PI / 180) * Math.abs(l.textBlock.angle)) + (l.textBlock.height - l.textBlock.fontSize / 2) * Math.sin((Math.PI / 180) * Math.abs(l.textBlock.angle)))); if (p.panEnabled) for (f = 0; f < b.length; f++) q[f] = p.sessionVariables.axisY.height; else for (f = 0; f < b.length; f++) p.sessionVariables.axisY.height = q[f]; if (b && 0 < b.length) for (f = b.length - 1; 0 <= f; f--) (l = Math.round(g.y2)), (h = Math.round( g.y2 > b[f].chart.height - 10 ? b[f].chart.height - 10 : g.y2 )), (b[f].lineCoordinates.y1 = l - (q[f] + b[f].margin + X)), (b[f].lineCoordinates.y2 = l - (q[f] + b[f].margin + X)), (b[f].bounds = { x1: m, y1: l - (q[f] + X + b[f].margin), x2: k, y2: h - (X + b[f].margin), width: k - m, height: q[f], }), b[f].title && (b[f]._titleTextBlock.maxWidth = 0 < b[f].titleMaxWidth && b[f].titleMaxWidth < b[f].lineCoordinates.width ? b[f].titleMaxWidth : b[f].lineCoordinates.width), (X += q[f] + b[f].margin); if (c && 0 < c.length) for (f = c.length - 1; 0 <= f; f--) c[f] && ((l = Math.round(g.y1)), (h = Math.round(g.y1 + (A[f] + c[f].margin + G))), (c[f].lineCoordinates.y1 = h), (c[f].lineCoordinates.y2 = h), (c[f].bounds = { x1: m, y1: l + (c[f].margin + G), x2: k, y2: h, width: k - m, height: R, }), c[f].title && (c[f]._titleTextBlock.maxWidth = 0 < c[f].titleMaxWidth && c[f].titleMaxWidth < c[f].lineCoordinates.width ? c[f].titleMaxWidth : c[f].lineCoordinates.width), (G += A[f] + c[f].margin)); if (a && 0 < a.length) for (f = 0; f < a.length; f++) { K = a[f]._labels && 0 < a[f]._labels.length ? a[f]._labels[0].textBlock.fontSize / 2 : 0; m = Math.round(g.x1 + e); l = c && 0 < c.length ? Math.round( c[0] ? c[0].lineCoordinates.y2 : g.y1 < Math.max(K, 10) ? Math.max(K, 10) : g.y1 ) : g.y1 < Math.max(K, 10) ? Math.max(K, 10) : g.y1; k = Math.round(g.x1 + U + e); h = b && 0 < b.length ? Math.round( b[0] ? b[0].lineCoordinates.y1 : g.y2 - S > p.height - Math.max(K, 10) ? p.height - Math.max(K, 10) : g.y2 - S ) : g.y2 > p.height - Math.max(K, 10) ? p.height - Math.max(K, 10) : g.y2; if (b && 0 < b.length) for (K = 0; K < b.length; K++) b[K] && b[K].labelAutoFit && ((k = 0 > b[K].labelAngle ? Math.max(k, C) : 0 === b[K].labelAngle ? Math.max(k, C / 2) : k), (m = 0 > b[K].labelAngle || 0 === b[K].labelAngle ? k - U : m)); if (c && 0 < c.length) for (K = 0; K < c.length; K++) c[K] && c[K].labelAutoFit && ((k = c[K].lineCoordinates.x1), (m = k - U)); a[f].lineCoordinates = { x1: k - O, y1: l, x2: k - O, y2: h, height: Math.abs(h - l), }; a[f].bounds = { x1: k - (F[f] + O), y1: l, x2: k, y2: h, width: k - m, height: h - l, }; a[f].title && (a[f]._titleTextBlock.maxWidth = 0 < a[f].titleMaxWidth && a[f].titleMaxWidth < a[f].lineCoordinates.height ? a[f].titleMaxWidth : a[f].lineCoordinates.height); a[f].calculateValueToPixelConversionParameters(); a[f].calculateBreaksSizeInValues(); O += F[f] + a[f].margin; } if (d && 0 < d.length) for (f = 0; f < d.length; f++) { K = d[f]._labels && 0 < d[f]._labels.length ? d[f]._labels[0].textBlock.fontSize / 2 : 0; m = Math.round(g.x1 - e); l = c && 0 < c.length ? Math.round( c[0] ? c[0].lineCoordinates.y2 : g.y1 < Math.max(K, 10) ? Math.max(K, 10) : g.y1 ) : g.y1 < Math.max(K, 10) ? Math.max(K, 10) : g.y1; k = Math.round(g.x2 - V - W); h = b && 0 < b.length ? Math.round( b[0] ? b[0].lineCoordinates.y1 : g.y2 - S > p.height - Math.max(K, 10) ? p.height - Math.max(K, 10) : g.y2 - S ) : g.y2 > p.height - Math.max(K, 10) ? p.height - Math.max(K, 10) : g.y2; if (b && 0 < b.length) for (K = 0; K < b.length; K++) b[K] && b[K].labelAutoFit && ((k = 0 > b[K].labelAngle ? Math.max(k, C) : 0 === b[K].labelAngle ? Math.max(k, C / 2) : k), (m = 0 > b[K].labelAngle || 0 === b[K].labelAngle ? k - V : m)); if (c && 0 < c.length) for (K = 0; K < c.length; K++) c[K] && c[K].labelAutoFit && ((k = c[K].lineCoordinates.x2), (m = k - V)); d[f].lineCoordinates = { x1: k + Q, y1: l, x2: k + Q, y2: h, height: Math.abs(h - l), }; d[f].bounds = { x1: m, y1: l, x2: k + z[f] + Q, y2: h, width: k - m, height: h - l, }; d[f].title && (d[f]._titleTextBlock.maxWidth = 0 < d[f].titleMaxWidth && d[f].titleMaxWidth < d[f].lineCoordinates.height ? d[f].titleMaxWidth : d[f].lineCoordinates.height); d[f].calculateValueToPixelConversionParameters(); d[f].calculateBreaksSizeInValues(); Q += z[f] + d[f].margin; } for (f = 0; f < n.length; f++) "axisY" === n[f].type && (n[f].calculateValueToPixelConversionParameters(), n[f].calculateBreaksSizeInValues()); if (0 < v) { if (a && 0 < a.length) for (f = 0; f < a.length; f++) r = M[v - 1][f] === M[v][f] ? !0 : !1; else r = !0; if (d && 0 < d.length) for (f = 0; f < d.length; f++) H = N[v - 1][f] === N[v][f] ? !0 : !1; else H = !0; if (b && 0 < b.length) for (f = 0; f < b.length; f++) I = E[v - 1][f] === E[v][f] ? !0 : !1; else I = !0; if (c && 0 < c.length) for (f = 0; f < c.length; f++) L = t[v - 1][f] === t[v][f] ? !0 : !1; else L = !0; } if (r && H && I && L) break; v++; } if (b && 0 < b.length) for (f = 0; f < b.length; f++) b[f].calculateStripLinesThicknessInValues(), b[f].calculateBreaksInPixels(); if (c && 0 < c.length) for (f = 0; f < c.length; f++) c[f].calculateStripLinesThicknessInValues(), c[f].calculateBreaksInPixels(); if (a && 0 < a.length) for (f = 0; f < a.length; f++) a[f].calculateStripLinesThicknessInValues(), a[f].calculateBreaksInPixels(); if (d && 0 < d.length) for (f = 0; f < d.length; f++) d[f].calculateStripLinesThicknessInValues(), d[f].calculateBreaksInPixels(); } }; z.render = function (a, d, b, c, e) { var g = a[0] ? a[0].chart : d[0].chart; e = g.ctx; var m = g._axes; g.alignVerticalAxes && g.alignVerticalAxes(); e.save(); e.beginPath(); a[0] && e.rect(5, a[0].bounds.y1, a[0].chart.width - 10, a[0].bounds.height); d[0] && e.rect( 5, d[d.length - 1].bounds.y1, d[0].chart.width - 10, d[0].bounds.height ); e.clip(); if (a && 0 < a.length) for (var l = 0; l < a.length; l++) a[l].renderLabelsTicksAndTitle(); if (d && 0 < d.length) for (l = 0; l < d.length; l++) d[l].renderLabelsTicksAndTitle(); e.restore(); if (b && 0 < b.length) for (l = 0; l < b.length; l++) b[l].renderLabelsTicksAndTitle(); if (c && 0 < c.length) for (l = 0; l < c.length; l++) c[l].renderLabelsTicksAndTitle(); g.preparePlotArea(); g = g.plotArea; e.save(); e.beginPath(); e.rect(g.x1, g.y1, Math.abs(g.x2 - g.x1), Math.abs(g.y2 - g.y1)); e.clip(); if (a && 0 < a.length) for (l = 0; l < m.length; l++) m[l].renderStripLinesOfThicknessType("value"); if (d && 0 < d.length) for (l = 0; l < d.length; l++) d[l].renderStripLinesOfThicknessType("value"); if (b && 0 < b.length) for (l = 0; l < b.length; l++) b[l].renderStripLinesOfThicknessType("value"); if (c && 0 < c.length) for (l = 0; l < c.length; l++) c[l].renderStripLinesOfThicknessType("value"); if (a && 0 < a.length) for (l = 0; l < a.length; l++) a[l].renderInterlacedColors(); if (d && 0 < d.length) for (l = 0; l < d.length; l++) d[l].renderInterlacedColors(); if (b && 0 < b.length) for (l = 0; l < b.length; l++) b[l].renderInterlacedColors(); if (c && 0 < c.length) for (l = 0; l < c.length; l++) c[l].renderInterlacedColors(); e.restore(); if (a && 0 < a.length) for (l = 0; l < a.length; l++) a[l].renderGrid(), r && (a[l].createMask(), a[l].renderBreaksBackground()); if (d && 0 < d.length) for (l = 0; l < d.length; l++) d[l].renderGrid(), r && (d[l].createMask(), d[l].renderBreaksBackground()); if (b && 0 < b.length) for (l = 0; l < b.length; l++) b[l].renderGrid(), r && (b[l].createMask(), b[l].renderBreaksBackground()); if (c && 0 < c.length) for (l = 0; l < c.length; l++) c[l].renderGrid(), r && (c[l].createMask(), c[l].renderBreaksBackground()); if (a && 0 < a.length) for (l = 0; l < a.length; l++) a[l].renderAxisLine(); if (d && 0 < d.length) for (l = 0; l < d.length; l++) d[l].renderAxisLine(); if (b && 0 < b.length) for (l = 0; l < b.length; l++) b[l].renderAxisLine(); if (c && 0 < c.length) for (l = 0; l < c.length; l++) c[l].renderAxisLine(); if (a && 0 < a.length) for (l = 0; l < a.length; l++) a[l].renderStripLinesOfThicknessType("pixel"); if (d && 0 < d.length) for (l = 0; l < d.length; l++) d[l].renderStripLinesOfThicknessType("pixel"); if (b && 0 < b.length) for (l = 0; l < b.length; l++) b[l].renderStripLinesOfThicknessType("pixel"); if (c && 0 < c.length) for (l = 0; l < c.length; l++) c[l].renderStripLinesOfThicknessType("pixel"); }; z.prototype.calculateStripLinesThicknessInValues = function () { for (var a = 0; a < this.stripLines.length; a++) if ( null !== this.stripLines[a].startValue && null !== this.stripLines[a].endValue ) { var d = Math.min( this.stripLines[a].startValue, this.stripLines[a].endValue ), b = Math.max( this.stripLines[a].startValue, this.stripLines[a].endValue ), d = this.getApparentDifference(d, b); this.stripLines[a].value = this.logarithmic ? this.stripLines[a].value * Math.sqrt( Math.log( this.stripLines[a].endValue / this.stripLines[a].startValue ) / Math.log(d) ) : this.stripLines[a].value + (Math.abs( this.stripLines[a].endValue - this.stripLines[a].startValue ) - d) / 2; this.stripLines[a].thickness = d; this.stripLines[a]._thicknessType = "value"; } }; z.prototype.calculateBreaksSizeInValues = function () { for ( var a = "left" === this._position || "right" === this._position ? this.lineCoordinates.height || this.chart.height : this.lineCoordinates.width || this.chart.width, d = this.scaleBreaks ? this.scaleBreaks._appliedBreaks : [], b = this.conversionParameters.pixelPerUnit || a / (this.logarithmic ? this.conversionParameters.maximum / this.conversionParameters.minimum : this.conversionParameters.maximum - this.conversionParameters.minimum), c = this.scaleBreaks && !u(this.scaleBreaks.options.spacing), e, g = 0; g < d.length; g++ ) (e = c || !u(d[g].options.spacing)), (d[g].spacing = I(d[g].spacing, a, 8, e ? 0.1 * a : 8, e ? 0 : 3) << 0), (d[g].size = 0 > d[g].spacing ? 0 : Math.abs(d[g].spacing / b)), this.logarithmic && (d[g].size = Math.pow(this.logarithmBase, d[g].size)); }; z.prototype.calculateBreaksInPixels = function () { if (!(this.scaleBreaks && 0 >= this.scaleBreaks._appliedBreaks.length)) { var a = this.scaleBreaks ? this.scaleBreaks._appliedBreaks : []; a.length && (this.scaleBreaks.firstBreakIndex = this.scaleBreaks.lastBreakIndex = null); for ( var d = 0; d < a.length && !(a[d].startValue > this.conversionParameters.maximum); d++ ) a[d].endValue < this.conversionParameters.minimum || (u(this.scaleBreaks.firstBreakIndex) && (this.scaleBreaks.firstBreakIndex = d), a[d].startValue >= this.conversionParameters.minimum && ((a[d].startPixel = this.convertValueToPixel(a[d].startValue)), (this.scaleBreaks.lastBreakIndex = d)), a[d].endValue <= this.conversionParameters.maximum && (a[d].endPixel = this.convertValueToPixel(a[d].endValue))); } }; z.prototype.renderLabelsTicksAndTitle = function () { var a = this, d = !1, b = 0, c = 0, e = 1, g = 0; 0 !== this.labelAngle && 360 !== this.labelAngle && (e = 1.2); if ("undefined" === typeof this.options.interval) { if ("bottom" === this._position || "top" === this._position) if ( this.logarithmic && !this.equidistantInterval && this.labelAutoFit ) { for ( var b = [], e = 0 !== this.labelAngle && 360 !== this.labelAngle ? 1 : 1.2, m, l = this.viewportMaximum, k = this.lineCoordinates.width / Math.log(this.range), h = this._labels.length - 1; 0 <= h; h-- ) { q = this._labels[h]; if (q.position < this.viewportMinimum) break; q.position > this.viewportMaximum || !( h === this._labels.length - 1 || m < (Math.log(l / q.position) * k) / e ) || (b.push(q), (l = q.position), (m = q.textBlock.width * Math.abs(Math.cos((Math.PI / 180) * this.labelAngle)) + q.textBlock.height * Math.abs(Math.sin((Math.PI / 180) * this.labelAngle)))); } this._labels = b; } else { for (h = 0; h < this._labels.length; h++) (q = this._labels[h]), q.position < this.viewportMinimum || ((m = q.textBlock.width * Math.abs(Math.cos((Math.PI / 180) * this.labelAngle)) + q.textBlock.height * Math.abs(Math.sin((Math.PI / 180) * this.labelAngle))), (b += m)); b > this.lineCoordinates.width * e && this.labelAutoFit && (d = !0); } if ("left" === this._position || "right" === this._position) if ( this.logarithmic && !this.equidistantInterval && this.labelAutoFit ) { for ( var b = [], p, l = this.viewportMaximum, k = this.lineCoordinates.height / Math.log(this.range), h = this._labels.length - 1; 0 <= h; h-- ) { q = this._labels[h]; if (q.position < this.viewportMinimum) break; q.position > this.viewportMaximum || !( h === this._labels.length - 1 || p < Math.log(l / q.position) * k ) || (b.push(q), (l = q.position), (p = q.textBlock.height * Math.abs(Math.cos((Math.PI / 180) * this.labelAngle)) + q.textBlock.width * Math.abs(Math.sin((Math.PI / 180) * this.labelAngle)))); } this._labels = b; } else { for (h = 0; h < this._labels.length; h++) (q = this._labels[h]), q.position < this.viewportMinimum || ((p = q.textBlock.height * Math.abs(Math.cos((Math.PI / 180) * this.labelAngle)) + q.textBlock.width * Math.abs(Math.sin((Math.PI / 180) * this.labelAngle))), (c += p)); c > this.lineCoordinates.height * e && this.labelAutoFit && (d = !0); } } this.logarithmic && !this.equidistantInterval && this.labelAutoFit && this._labels.sort(function (a, b) { return a.position - b.position; }); var h = 0, q, n; if ("bottom" === this._position) { for (h = 0; h < this._labels.length; h++) (q = this._labels[h]), q.position < this.viewportMinimum || q.position > this.viewportMaximum || (d && 0 !== g++ % 2 && this.labelAutoFit) || ((n = this.getPixelCoordinatesOnAxis(q.position)), this.tickThickness && "inside" != this.labelPlacement && ((this.ctx.lineWidth = this.tickThickness), (this.ctx.strokeStyle = this.tickColor), (c = 1 === this.ctx.lineWidth % 2 ? (n.x << 0) + 0.5 : n.x << 0), this.ctx.beginPath(), this.ctx.moveTo(c, n.y << 0), this.ctx.lineTo(c, (n.y + this.tickLength) << 0), this.ctx.stroke()), 0 === q.textBlock.angle ? ((n.x -= q.textBlock.width / 2), (n.y = "inside" === this.labelPlacement ? n.y - (this.tickLength + q.textBlock.fontSize / 2) : n.y + this.tickLength + q.textBlock.fontSize / 2)) : ((n.x = "inside" === this.labelPlacement ? 0 > this.labelAngle ? n.x : n.x - q.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) : n.x - (0 > this.labelAngle ? q.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) : 0)), (n.y = "inside" === this.labelPlacement ? 0 > this.labelAngle ? n.y - this.tickLength - 5 : n.y - this.tickLength - Math.abs( q.textBlock.width * Math.sin((Math.PI / 180) * this.labelAngle) + 5 ) : n.y + this.tickLength + Math.abs( 0 > this.labelAngle ? q.textBlock.width * Math.sin((Math.PI / 180) * this.labelAngle) - 5 : 5 ))), (q.textBlock.x = n.x), (q.textBlock.y = n.y)); "inside" === this.labelPlacement && this.chart.addEventListener( "dataAnimationIterationEnd", function () { for (h = 0; h < a._labels.length; h++) if ( ((q = a._labels[h]), !( q.position < a.viewportMinimum || q.position > a.viewportMaximum || (d && 0 !== g++ % 2 && a.labelAutoFit) ) && ((n = a.getPixelCoordinatesOnAxis(q.position)), a.tickThickness)) ) { a.ctx.lineWidth = a.tickThickness; a.ctx.strokeStyle = a.tickColor; var b = 1 === a.ctx.lineWidth % 2 ? (n.x << 0) + 0.5 : n.x << 0; a.ctx.save(); a.ctx.beginPath(); a.ctx.moveTo(b, n.y << 0); a.ctx.lineTo(b, (n.y - a.tickLength) << 0); a.ctx.stroke(); a.ctx.restore(); } }, this ); this.title && (this._titleTextBlock.measureText(), (this._titleTextBlock.x = this.lineCoordinates.x1 + this.lineCoordinates.width / 2 - this._titleTextBlock.width / 2), (this._titleTextBlock.y = this.bounds.y2 - this._titleTextBlock.height - 3), (this.titleMaxWidth = this._titleTextBlock.maxWidth), this._titleTextBlock.render(!0)); } else if ("top" === this._position) { for (h = 0; h < this._labels.length; h++) (q = this._labels[h]), q.position < this.viewportMinimum || q.position > this.viewportMaximum || (d && 0 !== g++ % 2 && this.labelAutoFit) || ((n = this.getPixelCoordinatesOnAxis(q.position)), this.tickThickness && "inside" != this.labelPlacement && ((this.ctx.lineWidth = this.tickThickness), (this.ctx.strokeStyle = this.tickColor), (c = 1 === this.ctx.lineWidth % 2 ? (n.x << 0) + 0.5 : n.x << 0), this.ctx.beginPath(), this.ctx.moveTo(c, n.y << 0), this.ctx.lineTo(c, (n.y - this.tickLength) << 0), this.ctx.stroke()), 0 === q.textBlock.angle ? ((n.x -= q.textBlock.width / 2), (n.y = "inside" === this.labelPlacement ? n.y + this.labelFontSize / 2 + this.tickLength + 5 : n.y - (this.tickLength + q.textBlock.height - q.textBlock.fontSize / 2))) : ((n.x = "inside" === this.labelPlacement ? 0 < this.labelAngle ? n.x : n.x - q.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) : n.x + (q.textBlock.height - this.tickLength - this.labelFontSize) * Math.sin((Math.PI / 180) * this.labelAngle) - (0 < this.labelAngle ? q.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) : 0)), (n.y = "inside" === this.labelPlacement ? 0 < this.labelAngle ? n.y + this.tickLength + 5 : n.y - q.textBlock.width * Math.sin((Math.PI / 180) * this.labelAngle) + this.tickLength + 5 : n.y - (this.tickLength + ((q.textBlock.height - q.textBlock.fontSize / 2) * Math.cos((Math.PI / 180) * this.labelAngle) + (0 < this.labelAngle ? q.textBlock.width * Math.sin((Math.PI / 180) * this.labelAngle) : 0))))), (q.textBlock.x = n.x), (q.textBlock.y = n.y)); "inside" === this.labelPlacement && this.chart.addEventListener( "dataAnimationIterationEnd", function () { for (h = 0; h < a._labels.length; h++) if ( ((q = a._labels[h]), !( q.position < a.viewportMinimum || q.position > a.viewportMaximum || (d && 0 !== g++ % 2 && a.labelAutoFit) ) && ((n = a.getPixelCoordinatesOnAxis(q.position)), a.tickThickness)) ) { a.ctx.lineWidth = a.tickThickness; a.ctx.strokeStyle = a.tickColor; var b = 1 === this.ctx.lineWidth % 2 ? (n.x << 0) + 0.5 : n.x << 0; a.ctx.save(); a.ctx.beginPath(); a.ctx.moveTo(b, n.y << 0); a.ctx.lineTo(b, (n.y + a.tickLength) << 0); a.ctx.stroke(); a.ctx.restore(); } }, this ); this.title && (this._titleTextBlock.measureText(), (this._titleTextBlock.x = this.lineCoordinates.x1 + this.lineCoordinates.width / 2 - this._titleTextBlock.width / 2), (this._titleTextBlock.y = this.bounds.y1 + 1), (this.titleMaxWidth = this._titleTextBlock.maxWidth), this._titleTextBlock.render(!0)); } else if ("left" === this._position) { for (h = 0; h < this._labels.length; h++) (q = this._labels[h]), q.position < this.viewportMinimum || q.position > this.viewportMaximum || (d && 0 !== g++ % 2 && this.labelAutoFit) || ((n = this.getPixelCoordinatesOnAxis(q.position)), this.tickThickness && "inside" != this.labelPlacement && ((this.ctx.lineWidth = this.tickThickness), (this.ctx.strokeStyle = this.tickColor), (c = 1 === this.ctx.lineWidth % 2 ? (n.y << 0) + 0.5 : n.y << 0), this.ctx.beginPath(), this.ctx.moveTo(n.x << 0, c), this.ctx.lineTo((n.x - this.tickLength) << 0, c), this.ctx.stroke()), 0 === this.labelAngle ? ((q.textBlock.y = n.y), (q.textBlock.x = "inside" === this.labelPlacement ? n.x + this.tickLength + 5 : n.x - q.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) - this.tickLength - 5)) : ((q.textBlock.y = "inside" === this.labelPlacement ? n.y : n.y - q.textBlock.width * Math.sin((Math.PI / 180) * this.labelAngle)), (q.textBlock.x = "inside" === this.labelPlacement ? n.x + this.tickLength + 5 : 0 < this.labelAngle ? n.x - q.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) - this.tickLength - 5 : n.x - q.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) + (q.textBlock.height - q.textBlock.fontSize / 2 - 5) * Math.sin((Math.PI / 180) * this.labelAngle) - this.tickLength))); "inside" === this.labelPlacement && this.chart.addEventListener( "dataAnimationIterationEnd", function () { for (h = 0; h < a._labels.length; h++) if ( ((q = a._labels[h]), !( q.position < a.viewportMinimum || q.position > a.viewportMaximum || (d && 0 !== g++ % 2 && a.labelAutoFit) ) && ((n = a.getPixelCoordinatesOnAxis(q.position)), a.tickThickness)) ) { a.ctx.lineWidth = a.tickThickness; a.ctx.strokeStyle = a.tickColor; var b = 1 === a.ctx.lineWidth % 2 ? (n.y << 0) + 0.5 : n.y << 0; a.ctx.save(); a.ctx.beginPath(); a.ctx.moveTo(n.x << 0, b); a.ctx.lineTo((n.x + a.tickLength) << 0, b); a.ctx.stroke(); a.ctx.restore(); } }, this ); this.title && (this._titleTextBlock.measureText(), (this._titleTextBlock.x = this.bounds.x1 + 1), (this._titleTextBlock.y = this.lineCoordinates.height / 2 + this._titleTextBlock.width / 2 + this.lineCoordinates.y1), (this.titleMaxWidth = this._titleTextBlock.maxWidth), this._titleTextBlock.render(!0)); } else if ("right" === this._position) { for (h = 0; h < this._labels.length; h++) (q = this._labels[h]), q.position < this.viewportMinimum || q.position > this.viewportMaximum || (d && 0 !== g++ % 2 && this.labelAutoFit) || ((n = this.getPixelCoordinatesOnAxis(q.position)), this.tickThickness && "inside" != this.labelPlacement && ((this.ctx.lineWidth = this.tickThickness), (this.ctx.strokeStyle = this.tickColor), (c = 1 === this.ctx.lineWidth % 2 ? (n.y << 0) + 0.5 : n.y << 0), this.ctx.beginPath(), this.ctx.moveTo(n.x << 0, c), this.ctx.lineTo((n.x + this.tickLength) << 0, c), this.ctx.stroke()), 0 === this.labelAngle ? ((q.textBlock.y = n.y), (q.textBlock.x = "inside" === this.labelPlacement ? n.x - q.textBlock.width - this.tickLength - 5 : n.x + this.tickLength + 5)) : ((q.textBlock.y = "inside" === this.labelPlacement ? n.y - q.textBlock.width * Math.sin((Math.PI / 180) * this.labelAngle) : 0 > this.labelAngle ? n.y : n.y - (q.textBlock.height - q.textBlock.fontSize / 2 - 5) * Math.cos((Math.PI / 180) * this.labelAngle)), (q.textBlock.x = "inside" === this.labelPlacement ? n.x - q.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) - this.tickLength - 5 : 0 < this.labelAngle ? n.x + (q.textBlock.height - q.textBlock.fontSize / 2 - 5) * Math.sin((Math.PI / 180) * this.labelAngle) + this.tickLength : n.x + this.tickLength + 5))); "inside" === this.labelPlacement && this.chart.addEventListener( "dataAnimationIterationEnd", function () { for (h = 0; h < a._labels.length; h++) if ( ((q = a._labels[h]), !( q.position < a.viewportMinimum || q.position > a.viewportMaximum || (d && 0 !== g++ % 2 && a.labelAutoFit) ) && ((n = a.getPixelCoordinatesOnAxis(q.position)), a.tickThickness)) ) { a.ctx.lineWidth = a.tickThickness; a.ctx.strokeStyle = a.tickColor; var b = 1 === a.ctx.lineWidth % 2 ? (n.y << 0) + 0.5 : n.y << 0; a.ctx.save(); a.ctx.beginPath(); a.ctx.moveTo(n.x << 0, b); a.ctx.lineTo((n.x - a.tickLength) << 0, b); a.ctx.stroke(); a.ctx.restore(); } }, this ); this.title && (this._titleTextBlock.measureText(), (this._titleTextBlock.x = this.bounds.x2 - 1), (this._titleTextBlock.y = this.lineCoordinates.height / 2 - this._titleTextBlock.width / 2 + this.lineCoordinates.y1), (this.titleMaxWidth = this._titleTextBlock.maxWidth), this._titleTextBlock.render(!0)); } g = 0; if ("inside" === this.labelPlacement) this.chart.addEventListener( "dataAnimationIterationEnd", function () { for (h = 0; h < a._labels.length; h++) (q = a._labels[h]), q.position < a.viewportMinimum || q.position > a.viewportMaximum || (d && 0 !== g++ % 2 && a.labelAutoFit) || (a.ctx.save(), a.ctx.beginPath(), q.textBlock.render(!0), a.ctx.restore()); }, this ); else for (h = 0; h < this._labels.length; h++) (q = this._labels[h]), q.position < this.viewportMinimum || q.position > this.viewportMaximum || (d && 0 !== g++ % 2 && this.labelAutoFit) || q.textBlock.render(!0); }; z.prototype.renderInterlacedColors = function () { var a = this.chart.plotArea.ctx, d, b, c = this.chart.plotArea, e = 0; d = !0; if ( ("bottom" === this._position || "top" === this._position) && this.interlacedColor ) for ( a.fillStyle = this.interlacedColor, e = 0; e < this._labels.length; e++ ) d ? ((d = this.getPixelCoordinatesOnAxis(this._labels[e].position)), (b = e + 1 > this._labels.length - 1 ? this.getPixelCoordinatesOnAxis(this.viewportMaximum) : this.getPixelCoordinatesOnAxis( this._labels[e + 1].position )), a.fillRect( Math.min(b.x, d.x), c.y1, Math.abs(b.x - d.x), Math.abs(c.y1 - c.y2) ), (d = !1)) : (d = !0); else if ( ("left" === this._position || "right" === this._position) && this.interlacedColor ) for ( a.fillStyle = this.interlacedColor, e = 0; e < this._labels.length; e++ ) d ? ((b = this.getPixelCoordinatesOnAxis(this._labels[e].position)), (d = e + 1 > this._labels.length - 1 ? this.getPixelCoordinatesOnAxis(this.viewportMaximum) : this.getPixelCoordinatesOnAxis( this._labels[e + 1].position )), a.fillRect( c.x1, Math.min(b.y, d.y), Math.abs(c.x1 - c.x2), Math.abs(d.y - b.y) ), (d = !1)) : (d = !0); a.beginPath(); }; z.prototype.renderStripLinesOfThicknessType = function (a) { if (this.stripLines && 0 < this.stripLines.length && a) { for ( var d = this, b, c = 0, e = 0, g = !1, m = !1, l = [], k = [], m = !1, c = 0; c < this.stripLines.length; c++ ) { var h = this.stripLines[c]; h._thicknessType === a && (("pixel" === a && (h.value < this.viewportMinimum || h.value > this.viewportMaximum || u(h.value) || isNaN(this.range))) || l.push(h)); } for (c = 0; c < this._stripLineLabels.length; c++) if ( ((h = this.stripLines[c]), (b = this._stripLineLabels[c]), !( b.position < this.viewportMinimum || b.position > this.viewportMaximum || isNaN(this.range) )) ) { a = this.getPixelCoordinatesOnAxis(b.position); if ("outside" === b.stripLine.labelPlacement) if ( (h && ((this.ctx.strokeStyle = h.color), "pixel" === h._thicknessType && (this.ctx.lineWidth = h.thickness)), "bottom" === this._position) ) { var p = 1 === this.ctx.lineWidth % 2 ? (a.x << 0) + 0.5 : a.x << 0; this.ctx.beginPath(); this.ctx.moveTo(p, a.y << 0); this.ctx.lineTo(p, (a.y + this.tickLength) << 0); this.ctx.stroke(); 0 === this.labelAngle ? ((a.x -= b.textBlock.width / 2), (a.y += this.tickLength + b.textBlock.fontSize / 2)) : ((a.x -= 0 > this.labelAngle ? b.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) : 0), (a.y += this.tickLength + Math.abs( 0 > this.labelAngle ? b.textBlock.width * Math.sin((Math.PI / 180) * this.labelAngle) - 5 : 5 ))); } else "top" === this._position ? ((p = 1 === this.ctx.lineWidth % 2 ? (a.x << 0) + 0.5 : a.x << 0), this.ctx.beginPath(), this.ctx.moveTo(p, a.y << 0), this.ctx.lineTo(p, (a.y - this.tickLength) << 0), this.ctx.stroke(), 0 === this.labelAngle ? ((a.x -= b.textBlock.width / 2), (a.y -= this.tickLength + b.textBlock.height)) : ((a.x += (b.textBlock.height - this.tickLength - this.labelFontSize / 2) * Math.sin((Math.PI / 180) * this.labelAngle) - (0 < this.labelAngle ? b.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) : 0)), (a.y -= this.tickLength + (b.textBlock.height * Math.cos((Math.PI / 180) * this.labelAngle) + (0 < this.labelAngle ? b.textBlock.width * Math.sin((Math.PI / 180) * this.labelAngle) : 0))))) : "left" === this._position ? ((p = 1 === this.ctx.lineWidth % 2 ? (a.y << 0) + 0.5 : a.y << 0), this.ctx.beginPath(), this.ctx.moveTo(a.x << 0, p), this.ctx.lineTo((a.x - this.tickLength) << 0, p), this.ctx.stroke(), 0 === this.labelAngle ? (a.x = a.x - b.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) - this.tickLength - 5) : ((a.y -= b.textBlock.width * Math.sin((Math.PI / 180) * this.labelAngle)), (a.x = 0 < this.labelAngle ? a.x - b.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) - this.tickLength - 5 : a.x - b.textBlock.width * Math.cos((Math.PI / 180) * this.labelAngle) + (b.textBlock.height - b.textBlock.fontSize / 2 - 5) * Math.sin((Math.PI / 180) * this.labelAngle) - this.tickLength))) : "right" === this._position && ((p = 1 === this.ctx.lineWidth % 2 ? (a.y << 0) + 0.5 : a.y << 0), this.ctx.beginPath(), this.ctx.moveTo(a.x << 0, p), this.ctx.lineTo((a.x + this.tickLength) << 0, p), this.ctx.stroke(), 0 === this.labelAngle ? (a.x = a.x + this.tickLength + 5) : ((a.y = 0 > this.labelAngle ? a.y : a.y - (b.textBlock.height - b.textBlock.fontSize / 2 - 5) * Math.cos((Math.PI / 180) * this.labelAngle)), (a.x = 0 < this.labelAngle ? a.x + (b.textBlock.height - b.textBlock.fontSize / 2 - 5) * Math.sin((Math.PI / 180) * this.labelAngle) + this.tickLength : a.x + this.tickLength + 5))); else (b.textBlock.angle = -90), "bottom" === this._position ? ((b.textBlock.maxWidth = this.options.stripLines[c] .labelMaxWidth ? this.options.stripLines[c].labelMaxWidth : this.chart.plotArea.height - 3), b.textBlock.measureText(), a.x - b.textBlock.height > this.chart.plotArea.x1 ? u(h.startValue) ? (a.x -= b.textBlock.height - b.textBlock.fontSize / 2) : (a.x -= b.textBlock.height / 2 - b.textBlock.fontSize / 2 + 3) : ((b.textBlock.angle = 90), u(h.startValue) ? (a.x += b.textBlock.height - b.textBlock.fontSize / 2) : (a.x += b.textBlock.height / 2 - b.textBlock.fontSize / 2 + 3)), (a.y = -90 === b.textBlock.angle ? "near" === b.stripLine.labelAlign ? this.chart.plotArea.y2 - 3 : "center" === b.stripLine.labelAlign ? (this.chart.plotArea.y2 + this.chart.plotArea.y1 + b.textBlock.width) / 2 : this.chart.plotArea.y1 + b.textBlock.width + 3 : "near" === b.stripLine.labelAlign ? this.chart.plotArea.y2 - b.textBlock.width - 3 : "center" === b.stripLine.labelAlign ? (this.chart.plotArea.y2 + this.chart.plotArea.y1 - b.textBlock.width) / 2 : this.chart.plotArea.y1 + 3)) : "top" === this._position ? ((b.textBlock.maxWidth = this.options.stripLines[c] .labelMaxWidth ? this.options.stripLines[c].labelMaxWidth : this.chart.plotArea.height - 3), b.textBlock.measureText(), a.x - b.textBlock.height > this.chart.plotArea.x1 ? u(h.startValue) ? (a.x -= b.textBlock.height - b.textBlock.fontSize / 2) : (a.x -= b.textBlock.height / 2 - b.textBlock.fontSize / 2 + 3) : ((b.textBlock.angle = 90), u(h.startValue) ? (a.x += b.textBlock.height - b.textBlock.fontSize / 2) : (a.x += b.textBlock.height / 2 - b.textBlock.fontSize / 2 + 3)), (a.y = -90 === b.textBlock.angle ? "near" === b.stripLine.labelAlign ? this.chart.plotArea.y1 + b.textBlock.width + 3 : "center" === b.stripLine.labelAlign ? (this.chart.plotArea.y2 + this.chart.plotArea.y1 + b.textBlock.width) / 2 : this.chart.plotArea.y2 - 3 : "near" === b.stripLine.labelAlign ? this.chart.plotArea.y1 + 3 : "center" === b.stripLine.labelAlign ? (this.chart.plotArea.y2 + this.chart.plotArea.y1 - b.textBlock.width) / 2 : this.chart.plotArea.y2 - b.textBlock.width - 3)) : "left" === this._position ? ((b.textBlock.maxWidth = this.options.stripLines[c] .labelMaxWidth ? this.options.stripLines[c].labelMaxWidth : this.chart.plotArea.width - 3), (b.textBlock.angle = 0), b.textBlock.measureText(), a.y - b.textBlock.height > this.chart.plotArea.y1 ? u(h.startValue) ? (a.y -= b.textBlock.height - b.textBlock.fontSize / 2) : (a.y -= b.textBlock.height / 2 - b.textBlock.fontSize + 3) : a.y - b.textBlock.height < this.chart.plotArea.y2 ? (a.y += b.textBlock.fontSize / 2 + 3) : u(h.startValue) ? (a.y -= b.textBlock.height - b.textBlock.fontSize / 2) : (a.y -= b.textBlock.height / 2 - b.textBlock.fontSize + 3), (a.x = "near" === b.stripLine.labelAlign ? this.chart.plotArea.x1 + 3 : "center" === b.stripLine.labelAlign ? (this.chart.plotArea.x2 + this.chart.plotArea.x1) / 2 - b.textBlock.width / 2 : this.chart.plotArea.x2 - b.textBlock.width - 3)) : "right" === this._position && ((b.textBlock.maxWidth = this.options.stripLines[c] .labelMaxWidth ? this.options.stripLines[c].labelMaxWidth : this.chart.plotArea.width - 3), (b.textBlock.angle = 0), b.textBlock.measureText(), a.y - +b.textBlock.height > this.chart.plotArea.y1 ? u(h.startValue) ? (a.y -= b.textBlock.height - b.textBlock.fontSize / 2) : (a.y -= b.textBlock.height / 2 - b.textBlock.fontSize / 2 - 3) : a.y - b.textBlock.height < this.chart.plotArea.y2 ? (a.y += b.textBlock.fontSize / 2 + 3) : u(h.startValue) ? (a.y -= b.textBlock.height - b.textBlock.fontSize / 2) : (a.y -= b.textBlock.height / 2 - b.textBlock.fontSize / 2 + 3), (a.x = "near" === b.stripLine.labelAlign ? this.chart.plotArea.x2 - b.textBlock.width - 3 : "center" === b.stripLine.labelAlign ? (this.chart.plotArea.x2 + this.chart.plotArea.x1) / 2 - b.textBlock.width / 2 : this.chart.plotArea.x1 + 3)); b.textBlock.x = a.x; b.textBlock.y = a.y; k.push(b); } if (!m) { m = !1; this.ctx.save(); this.ctx.beginPath(); this.ctx.rect( this.chart.plotArea.x1, this.chart.plotArea.y1, this.chart.plotArea.width, this.chart.plotArea.height ); this.ctx.clip(); for (c = 0; c < l.length; c++) (h = l[c]), h.showOnTop ? g || ((g = !0), this.chart.addEventListener( "dataAnimationIterationEnd", function () { this.ctx.save(); this.ctx.beginPath(); this.ctx.rect( this.chart.plotArea.x1, this.chart.plotArea.y1, this.chart.plotArea.width, this.chart.plotArea.height ); this.ctx.clip(); for (e = 0; e < l.length; e++) (h = l[e]), h.showOnTop && h.render(); this.ctx.restore(); }, h )) : h.render(); for (c = 0; c < k.length; c++) (b = k[c]), b.stripLine.showOnTop ? m || ((m = !0), this.chart.addEventListener( "dataAnimationIterationEnd", function () { for (e = 0; e < k.length; e++) (b = k[e]), "inside" === b.stripLine.labelPlacement && b.stripLine.showOnTop && (d.ctx.save(), d.ctx.beginPath(), d.ctx.rect( d.chart.plotArea.x1, d.chart.plotArea.y1, d.chart.plotArea.width, d.chart.plotArea.height ), d.ctx.clip(), b.textBlock.render(!0), d.ctx.restore()); }, b.textBlock )) : "inside" === b.stripLine.labelPlacement && b.textBlock.render(!0); this.ctx.restore(); m = !0; } if (m) for (m = !1, c = 0; c < k.length; c++) (b = k[c]), b.stripLine.showOnTop ? m || ((m = !0), this.chart.addEventListener( "dataAnimationIterationEnd", function () { for (e = 0; e < k.length; e++) (b = k[e]), "outside" === b.stripLine.labelPlacement && b.stripLine.showOnTop && b.textBlock.render(!0); }, b.textBlock )) : "outside" === b.stripLine.labelPlacement && b.textBlock.render(!0); } }; z.prototype.renderBreaksBackground = function () { this.chart._breaksCanvas && this.scaleBreaks && 0 < this.scaleBreaks._appliedBreaks.length && this.maskCanvas && (this.chart._breaksCanvasCtx.save(), this.chart._breaksCanvasCtx.beginPath(), this.chart._breaksCanvasCtx.rect( this.chart.plotArea.x1, this.chart.plotArea.y1, this.chart.plotArea.width, this.chart.plotArea.height ), this.chart._breaksCanvasCtx.clip(), this.chart._breaksCanvasCtx.drawImage( this.maskCanvas, 0, 0, this.chart.width, this.chart.height ), this.chart._breaksCanvasCtx.restore()); }; z.prototype.createMask = function () { if (this.scaleBreaks && 0 < this.scaleBreaks._appliedBreaks.length) { var a = this.scaleBreaks._appliedBreaks; r ? ((this.maskCanvas = ta(this.chart.width, this.chart.height)), (this.maskCtx = this.maskCanvas.getContext("2d"))) : ((this.maskCanvas = this.chart.plotArea.canvas), (this.maskCtx = this.chart.plotArea.ctx)); this.maskCtx.save(); this.maskCtx.beginPath(); this.maskCtx.rect( this.chart.plotArea.x1, this.chart.plotArea.y1, this.chart.plotArea.width, this.chart.plotArea.height ); this.maskCtx.clip(); for (var d = 0; d < a.length; d++) a[d].endValue < this.viewportMinimum || a[d].startValue > this.viewportMaximum || isNaN(this.range) || a[d].render(this.maskCtx); this.maskCtx.restore(); } }; z.prototype.renderCrosshair = function (a, d) { this.crosshair.render(a, d); }; z.prototype.renderGrid = function () { if (this.gridThickness && 0 < this.gridThickness) { var a = this.chart.ctx; a.save(); var d, b = this.chart.plotArea; a.lineWidth = this.gridThickness; a.strokeStyle = this.gridColor; a.setLineDash && a.setLineDash(R(this.gridDashType, this.gridThickness)); if ("bottom" === this._position || "top" === this._position) for (c = 0; c < this._labels.length; c++) this._labels[c].position < this.viewportMinimum || this._labels[c].position > this.viewportMaximum || this._labels[c].breaksLabelType || (a.beginPath(), (d = this.getPixelCoordinatesOnAxis(this._labels[c].position)), (d = 1 === a.lineWidth % 2 ? (d.x << 0) + 0.5 : d.x << 0), a.moveTo(d, b.y1 << 0), a.lineTo(d, b.y2 << 0), a.stroke()); else if ("left" === this._position || "right" === this._position) for (var c = 0; c < this._labels.length; c++) this._labels[c].position < this.viewportMinimum || this._labels[c].position > this.viewportMaximum || this._labels[c].breaksLabelType || (a.beginPath(), (d = this.getPixelCoordinatesOnAxis(this._labels[c].position)), (d = 1 === a.lineWidth % 2 ? (d.y << 0) + 0.5 : d.y << 0), a.moveTo(b.x1 << 0, d), a.lineTo(b.x2 << 0, d), a.stroke()); a.restore(); } }; z.prototype.renderAxisLine = function () { var a = this.chart.ctx, d = r ? this.chart._preRenderCtx : a, b = Math.ceil(this.tickThickness / (this.reversed ? -2 : 2)), c = Math.ceil(this.tickThickness / (this.reversed ? 2 : -2)), e, g; d.save(); if ("bottom" === this._position || "top" === this._position) { if (this.lineThickness) { this.reversed ? ((e = this.lineCoordinates.x2), (g = this.lineCoordinates.x1)) : ((e = this.lineCoordinates.x1), (g = this.lineCoordinates.x2)); d.lineWidth = this.lineThickness; d.strokeStyle = this.lineColor ? this.lineColor : "black"; d.setLineDash && d.setLineDash(R(this.lineDashType, this.lineThickness)); var m = 1 === this.lineThickness % 2 ? (this.lineCoordinates.y1 << 0) + 0.5 : this.lineCoordinates.y1 << 0; d.beginPath(); if (this.scaleBreaks && !u(this.scaleBreaks.firstBreakIndex)) if (u(this.scaleBreaks.lastBreakIndex)) e = this.scaleBreaks._appliedBreaks[ this.scaleBreaks.firstBreakIndex ].endPixel + c; else for ( var l = this.scaleBreaks.firstBreakIndex; l <= this.scaleBreaks.lastBreakIndex; l++ ) d.moveTo(e, m), d.lineTo( this.scaleBreaks._appliedBreaks[l].startPixel + b, m ), (e = this.scaleBreaks._appliedBreaks[l].endPixel + c); e && (d.moveTo(e, m), d.lineTo(g, m)); d.stroke(); } } else if ( ("left" === this._position || "right" === this._position) && this.lineThickness ) { this.reversed ? ((e = this.lineCoordinates.y1), (g = this.lineCoordinates.y2)) : ((e = this.lineCoordinates.y2), (g = this.lineCoordinates.y1)); d.lineWidth = this.lineThickness; d.strokeStyle = this.lineColor; d.setLineDash && d.setLineDash(R(this.lineDashType, this.lineThickness)); m = 1 === this.lineThickness % 2 ? (this.lineCoordinates.x1 << 0) + 0.5 : this.lineCoordinates.x1 << 0; d.beginPath(); if (this.scaleBreaks && !u(this.scaleBreaks.firstBreakIndex)) if (u(this.scaleBreaks.lastBreakIndex)) e = this.scaleBreaks._appliedBreaks[this.scaleBreaks.firstBreakIndex] .endPixel + b; else for ( l = this.scaleBreaks.firstBreakIndex; l <= this.scaleBreaks.lastBreakIndex; l++ ) d.moveTo(m, e), d.lineTo(m, this.scaleBreaks._appliedBreaks[l].startPixel + c), (e = this.scaleBreaks._appliedBreaks[l].endPixel + b); e && (d.moveTo(m, e), d.lineTo(m, g)); d.stroke(); } r && (a.drawImage( this.chart._preRenderCanvas, 0, 0, this.chart.width, this.chart.height ), this.chart._breaksCanvasCtx && this.chart._breaksCanvasCtx.drawImage( this.chart._preRenderCanvas, 0, 0, this.chart.width, this.chart.height ), d.clearRect(0, 0, this.chart.width, this.chart.height)); d.restore(); }; z.prototype.getPixelCoordinatesOnAxis = function (a) { var d = {}; if ("bottom" === this._position || "top" === this._position) (d.x = this.convertValueToPixel(a)), (d.y = this.lineCoordinates.y1); if ("left" === this._position || "right" === this._position) (d.y = this.convertValueToPixel(a)), (d.x = this.lineCoordinates.x2); return d; }; z.prototype.convertPixelToValue = function (a) { if ("undefined" === typeof a) return null; var d = 0, b = 0, c, d = !0, e = this.scaleBreaks ? this.scaleBreaks._appliedBreaks : [], b = "number" === typeof a ? a : "left" === this._position || "right" === this._position ? a.y : a.x; if (this.logarithmic) { a = c = Math.pow( this.logarithmBase, (b - this.conversionParameters.reference) / this.conversionParameters.pixelPerUnit ); if ( (b <= this.conversionParameters.reference === ("left" === this._position || "right" === this._position)) !== this.reversed ) for (b = 0; b < e.length; b++) { if (!(e[b].endValue < this.conversionParameters.minimum)) if (d) if (e[b].startValue < this.conversionParameters.minimum) { if ( 1 < e[b].size && this.conversionParameters.minimum * Math.pow( e[b].endValue / e[b].startValue, Math.log(c) / Math.log(e[b].size) ) < e[b].endValue ) { a = Math.pow( e[b].endValue / e[b].startValue, Math.log(c) / Math.log(e[b].size) ); break; } else (a *= e[b].endValue / this.conversionParameters.minimum / Math.pow( e[b].size, Math.log( e[b].endValue / this.conversionParameters.minimum ) / Math.log(e[b].endValue / e[b].startValue) )), (c /= Math.pow( e[b].size, Math.log( e[b].endValue / this.conversionParameters.minimum ) / Math.log(e[b].endValue / e[b].startValue) )); d = !1; } else if ( c > e[b].startValue / this.conversionParameters.minimum ) { c /= e[b].startValue / this.conversionParameters.minimum; if (c < e[b].size) { a *= Math.pow( e[b].endValue / e[b].startValue, 1 === e[b].size ? 1 : Math.log(c) / Math.log(e[b].size) ) / c; break; } else a *= e[b].endValue / e[b].startValue / e[b].size; c /= e[b].size; d = !1; } else break; else if (c > e[b].startValue / e[b - 1].endValue) { c /= e[b].startValue / e[b - 1].endValue; if (c < e[b].size) { a *= Math.pow( e[b].endValue / e[b].startValue, 1 === e[b].size ? 1 : Math.log(c) / Math.log(e[b].size) ) / c; break; } else a *= e[b].endValue / e[b].startValue / e[b].size; c /= e[b].size; } else break; } else for (b = e.length - 1; 0 <= b; b--) if (!(e[b].startValue > this.conversionParameters.minimum)) if (d) if (e[b].endValue > this.conversionParameters.minimum) { if ( 1 < e[b].size && this.conversionParameters.minimum * Math.pow( e[b].endValue / e[b].startValue, Math.log(c) / Math.log(e[b].size) ) > e[b].startValue ) { a = Math.pow( e[b].endValue / e[b].startValue, Math.log(c) / Math.log(e[b].size) ); break; } else (a *= (e[b].startValue / this.conversionParameters.minimum) * Math.pow( e[b].size, Math.log( e[b].startValue / this.conversionParameters.minimum ) / Math.log(e[b].endValue / e[b].startValue) ) * c), (c *= Math.pow( e[b].size, Math.log( this.conversionParameters.minimum / e[b].startValue ) / Math.log(e[b].endValue / e[b].startValue) )); d = !1; } else if ( c < e[b].endValue / this.conversionParameters.minimum ) { c /= e[b].endValue / this.conversionParameters.minimum; if (c > 1 / e[b].size) { a *= Math.pow( e[b].endValue / e[b].startValue, 1 >= e[b].size ? 1 : Math.log(c) / Math.log(e[b].size) ) * c; break; } else a /= e[b].endValue / e[b].startValue / e[b].size; c *= e[b].size; d = !1; } else break; else if (c < e[b].endValue / e[b + 1].startValue) { c /= e[b].endValue / e[b + 1].startValue; if (c > 1 / e[b].size) { a *= Math.pow( e[b].endValue / e[b].startValue, 1 >= e[b].size ? 1 : Math.log(c) / Math.log(e[b].size) ) * c; break; } else a /= e[b].endValue / e[b].startValue / e[b].size; c *= e[b].size; } else break; d = a * this.viewportMinimum; } else { a = c = (b - this.conversionParameters.reference) / this.conversionParameters.pixelPerUnit; if ( (b <= this.conversionParameters.reference === ("left" === this._position || "right" === this._position)) !== this.reversed ) for (b = 0; b < e.length; b++) { if (!(e[b].endValue < this.conversionParameters.minimum)) if (d) if (e[b].startValue < this.conversionParameters.minimum) { if ( e[b].size && this.conversionParameters.minimum + (c * (e[b].endValue - e[b].startValue)) / e[b].size < e[b].endValue ) { a = 0 >= e[b].size ? 0 : (c * (e[b].endValue - e[b].startValue)) / e[b].size; break; } else (a += e[b].endValue - this.conversionParameters.minimum - (e[b].size * (e[b].endValue - this.conversionParameters.minimum)) / (e[b].endValue - e[b].startValue)), (c -= (e[b].size * (e[b].endValue - this.conversionParameters.minimum)) / (e[b].endValue - e[b].startValue)); d = !1; } else if ( c > e[b].startValue - this.conversionParameters.minimum ) { c -= e[b].startValue - this.conversionParameters.minimum; if (c < e[b].size) { a += (e[b].endValue - e[b].startValue) * (0 === e[b].size ? 1 : c / e[b].size) - c; break; } else a += e[b].endValue - e[b].startValue - e[b].size; c -= e[b].size; d = !1; } else break; else if (c > e[b].startValue - e[b - 1].endValue) { c -= e[b].startValue - e[b - 1].endValue; if (c < e[b].size) { a += (e[b].endValue - e[b].startValue) * (0 === e[b].size ? 1 : c / e[b].size) - c; break; } else a += e[b].endValue - e[b].startValue - e[b].size; c -= e[b].size; } else break; } else for (b = e.length - 1; 0 <= b; b--) if (!(e[b].startValue > this.conversionParameters.minimum)) if (d) if (e[b].endValue > this.conversionParameters.minimum) if ( e[b].size && this.conversionParameters.minimum + (c * (e[b].endValue - e[b].startValue)) / e[b].size > e[b].startValue ) { a = 0 >= e[b].size ? 0 : (c * (e[b].endValue - e[b].startValue)) / e[b].size; break; } else (a += e[b].startValue - this.conversionParameters.minimum + (e[b].size * (this.conversionParameters.minimum - e[b].startValue)) / (e[b].endValue - e[b].startValue)), (c += (e[b].size * (this.conversionParameters.minimum - e[b].startValue)) / (e[b].endValue - e[b].startValue)), (d = !1); else if ( c < e[b].endValue - this.conversionParameters.minimum ) { c -= e[b].endValue - this.conversionParameters.minimum; if (c > -1 * e[b].size) { a += (e[b].endValue - e[b].startValue) * (0 === e[b].size ? 1 : c / e[b].size) + c; break; } else a -= e[b].endValue - e[b].startValue - e[b].size; c += e[b].size; d = !1; } else break; else if (c < e[b].endValue - e[b + 1].startValue) { c -= e[b].endValue - e[b + 1].startValue; if (c > -1 * e[b].size) { a += (e[b].endValue - e[b].startValue) * (0 === e[b].size ? 1 : c / e[b].size) + c; break; } else a -= e[b].endValue - e[b].startValue - e[b].size; c += e[b].size; } else break; d = this.conversionParameters.minimum + a; } return d; }; z.prototype.convertValueToPixel = function (a) { a = this.getApparentDifference(this.conversionParameters.minimum, a, a); return this.logarithmic ? (this.conversionParameters.reference + (this.conversionParameters.pixelPerUnit * Math.log(a / this.conversionParameters.minimum)) / this.conversionParameters.lnLogarithmBase + 0.5) << 0 : "axisX" === this.type ? (this.conversionParameters.reference + this.conversionParameters.pixelPerUnit * (a - this.conversionParameters.minimum) + 0.5) << 0 : this.conversionParameters.reference + this.conversionParameters.pixelPerUnit * (a - this.conversionParameters.minimum) + 0.5; }; z.prototype.getApparentDifference = function (a, d, b, c) { var e = this.scaleBreaks ? this.scaleBreaks._appliedBreaks : []; if (this.logarithmic) { b = u(b) ? d / a : b; for (var g = 0; g < e.length && !(d < e[g].startValue); g++) a > e[g].endValue || (a <= e[g].startValue && d >= e[g].endValue ? (b = (b / e[g].endValue) * e[g].startValue * e[g].size) : a >= e[g].startValue && d >= e[g].endValue ? (b = (b / e[g].endValue) * a * Math.pow( e[g].size, Math.log(e[g].endValue / a) / Math.log(e[g].endValue / e[g].startValue) )) : a <= e[g].startValue && d <= e[g].endValue ? (b = (b / d) * e[g].startValue * Math.pow( e[g].size, Math.log(d / e[g].startValue) / Math.log(e[g].endValue / e[g].startValue) )) : !c && a > e[g].startValue && d < e[g].endValue && (b = a * Math.pow( e[g].size, Math.log(d / a) / Math.log(e[g].endValue / e[g].startValue) ))); } else for ( b = u(b) ? Math.abs(d - a) : b, g = 0; g < e.length && !(d < e[g].startValue); g++ ) a > e[g].endValue || (a <= e[g].startValue && d >= e[g].endValue ? (b = b - e[g].endValue + e[g].startValue + e[g].size) : a > e[g].startValue && d >= e[g].endValue ? (b = b - e[g].endValue + a + (e[g].size * (e[g].endValue - a)) / (e[g].endValue - e[g].startValue)) : a <= e[g].startValue && d < e[g].endValue ? (b = b - d + e[g].startValue + (e[g].size * (d - e[g].startValue)) / (e[g].endValue - e[g].startValue)) : !c && a > e[g].startValue && d < e[g].endValue && (b = a + (e[g].size * (d - a)) / (e[g].endValue - e[g].startValue))); return b; }; z.prototype.setViewPortRange = function (a, d) { this.sessionVariables.newViewportMinimum = this.viewportMinimum = Math.min(a, d); this.sessionVariables.newViewportMaximum = this.viewportMaximum = Math.max(a, d); }; z.prototype.getXValueAt = function (a) { if (!a) return null; var d = null; "left" === this._position ? (d = this.convertPixelToValue(a.y)) : "bottom" === this._position && (d = this.convertPixelToValue(a.x)); return d; }; z.prototype.calculateValueToPixelConversionParameters = function (a) { a = this.scaleBreaks ? this.scaleBreaks._appliedBreaks : []; var d = { pixelPerUnit: null, minimum: null, reference: null }, b = this.lineCoordinates.width, c = this.lineCoordinates.height, b = "bottom" === this._position || "top" === this._position ? b : c, c = Math.abs(this.range); if (this.logarithmic) for ( var e = 0; e < a.length && !(this.viewportMaximum < a[e].startValue); e++ ) this.viewportMinimum > a[e].endValue || (this.viewportMinimum >= a[e].startValue && this.viewportMaximum <= a[e].endValue ? (b = 0) : this.viewportMinimum <= a[e].startValue && this.viewportMaximum >= a[e].endValue ? ((c = (c / a[e].endValue) * a[e].startValue), (b = 0 < a[e].spacing.toString().indexOf("%") ? b * (1 - parseFloat(a[e].spacing) / 100) : b - Math.min(a[e].spacing, 0.1 * b))) : this.viewportMinimum > a[e].startValue && this.viewportMaximum >= a[e].endValue ? ((c = (c / a[e].endValue) * this.viewportMinimum), (b = 0 < a[e].spacing.toString().indexOf("%") ? b * (1 - ((parseFloat(a[e].spacing) / 100) * Math.log(a[e].endValue / this.viewportMinimum)) / Math.log(a[e].endValue / a[e].startValue)) : b - (Math.min(a[e].spacing, 0.1 * b) * Math.log(a[e].endValue / this.viewportMinimum)) / Math.log(a[e].endValue / a[e].startValue))) : this.viewportMinimum <= a[e].startValue && this.viewportMaximum < a[e].endValue && ((c = (c / this.viewportMaximum) * a[e].startValue), (b = 0 < a[e].spacing.toString().indexOf("%") ? b * (1 - ((parseFloat(a[e].spacing) / 100) * Math.log(this.viewportMaximum / a[e].startValue)) / Math.log(a[e].endValue / a[e].startValue)) : b - (Math.min(a[e].spacing, 0.1 * b) * Math.log(this.viewportMaximum / a[e].startValue)) / Math.log(a[e].endValue / a[e].startValue)))); else for ( e = 0; e < a.length && !(this.viewportMaximum < a[e].startValue); e++ ) this.viewportMinimum > a[e].endValue || (this.viewportMinimum >= a[e].startValue && this.viewportMaximum <= a[e].endValue ? (b = 0) : this.viewportMinimum <= a[e].startValue && this.viewportMaximum >= a[e].endValue ? ((c = c - a[e].endValue + a[e].startValue), (b = 0 < a[e].spacing.toString().indexOf("%") ? b * (1 - parseFloat(a[e].spacing) / 100) : b - Math.min(a[e].spacing, 0.1 * b))) : this.viewportMinimum > a[e].startValue && this.viewportMaximum >= a[e].endValue ? ((c = c - a[e].endValue + this.viewportMinimum), (b = 0 < a[e].spacing.toString().indexOf("%") ? b * (1 - ((parseFloat(a[e].spacing) / 100) * (a[e].endValue - this.viewportMinimum)) / (a[e].endValue - a[e].startValue)) : b - (Math.min(a[e].spacing, 0.1 * b) * (a[e].endValue - this.viewportMinimum)) / (a[e].endValue - a[e].startValue))) : this.viewportMinimum <= a[e].startValue && this.viewportMaximum < a[e].endValue && ((c = c - this.viewportMaximum + a[e].startValue), (b = 0 < a[e].spacing.toString().indexOf("%") ? b * (1 - ((parseFloat(a[e].spacing) / 100) * (this.viewportMaximum - a[e].startValue)) / (a[e].endValue - a[e].startValue)) : b - (Math.min(a[e].spacing, 0.1 * b) * (this.viewportMaximum - a[e].startValue)) / (a[e].endValue - a[e].startValue)))); d.minimum = this.viewportMinimum; d.maximum = this.viewportMaximum; d.range = c; if ("bottom" === this._position || "top" === this._position) this.logarithmic ? ((d.lnLogarithmBase = Math.log(this.logarithmBase)), (d.pixelPerUnit = ((this.reversed ? -1 : 1) * b * d.lnLogarithmBase) / Math.log(Math.abs(c)))) : (d.pixelPerUnit = ((this.reversed ? -1 : 1) * b) / Math.abs(c)), (d.reference = this.reversed ? this.lineCoordinates.x2 : this.lineCoordinates.x1); if ("left" === this._position || "right" === this._position) this.logarithmic ? ((d.lnLogarithmBase = Math.log(this.logarithmBase)), (d.pixelPerUnit = ((this.reversed ? 1 : -1) * b * d.lnLogarithmBase) / Math.log(Math.abs(c)))) : (d.pixelPerUnit = ((this.reversed ? 1 : -1) * b) / Math.abs(c)), (d.reference = this.reversed ? this.lineCoordinates.y1 : this.lineCoordinates.y2); this.conversionParameters = d; }; z.prototype.calculateAxisParameters = function () { if (this.logarithmic) this.calculateLogarithmicAxisParameters(); else { var a = this.chart.layoutManager.getFreeSpace(), d = !1, b = !1; "bottom" === this._position || "top" === this._position ? ((this.maxWidth = a.width), (this.maxHeight = a.height)) : ((this.maxWidth = a.height), (this.maxHeight = a.width)); var a = "axisX" === this.type ? "xySwapped" === this.chart.plotInfo.axisPlacement ? 62 : 70 : "xySwapped" === this.chart.plotInfo.axisPlacement ? 50 : 40, c = 4; "axisX" === this.type && (c = 600 > this.maxWidth ? 8 : 6); var a = Math.max(c, Math.floor(this.maxWidth / a)), e, g, m, c = 0; !u(this.options.viewportMinimum) && !u(this.options.viewportMaximum) && this.options.viewportMinimum >= this.options.viewportMaximum && (this.viewportMinimum = this.viewportMaximum = null); if ( u(this.options.viewportMinimum) && !u(this.sessionVariables.newViewportMinimum) && !isNaN(this.sessionVariables.newViewportMinimum) ) this.viewportMinimum = this.sessionVariables.newViewportMinimum; else if (null === this.viewportMinimum || isNaN(this.viewportMinimum)) this.viewportMinimum = this.minimum; if ( u(this.options.viewportMaximum) && !u(this.sessionVariables.newViewportMaximum) && !isNaN(this.sessionVariables.newViewportMaximum) ) this.viewportMaximum = this.sessionVariables.newViewportMaximum; else if (null === this.viewportMaximum || isNaN(this.viewportMaximum)) this.viewportMaximum = this.maximum; if (this.scaleBreaks) for (c = 0; c < this.scaleBreaks._appliedBreaks.length; c++) if ( ((!u(this.sessionVariables.newViewportMinimum) && this.sessionVariables.newViewportMinimum >= this.scaleBreaks._appliedBreaks[c].startValue) || (!u(this.options.minimum) && this.options.minimum >= this.scaleBreaks._appliedBreaks[c].startValue) || (!u(this.options.viewportMinimum) && this.viewportMinimum >= this.scaleBreaks._appliedBreaks[c].startValue)) && ((!u(this.sessionVariables.newViewportMaximum) && this.sessionVariables.newViewportMaximum <= this.scaleBreaks._appliedBreaks[c].endValue) || (!u(this.options.maximum) && this.options.maximum <= this.scaleBreaks._appliedBreaks[c].endValue) || (!u(this.options.viewportMaximum) && this.viewportMaximum <= this.scaleBreaks._appliedBreaks[c].endValue)) ) { this.scaleBreaks._appliedBreaks.splice(c, 1); break; } if ("axisX" === this.type) { if (this.dataSeries && 0 < this.dataSeries.length) for (e = 0; e < this.dataSeries.length; e++) "dateTime" === this.dataSeries[e].xValueType && (b = !0); e = null !== this.viewportMinimum ? this.viewportMinimum : this.dataInfo.viewPortMin; g = null !== this.viewportMaximum ? this.viewportMaximum : this.dataInfo.viewPortMax; 0 === g - e && ((c = "undefined" === typeof this.options.interval ? 0.4 : this.options.interval), (g += c), (e -= c)); Infinity !== this.dataInfo.minDiff ? (m = this.dataInfo.minDiff) : 1 < g - e ? (m = 0.5 * Math.abs(g - e)) : ((m = 1), b && (d = !0)); } else "axisY" === this.type && ((e = null !== this.viewportMinimum ? this.viewportMinimum : this.dataInfo.viewPortMin), (g = null !== this.viewportMaximum ? this.viewportMaximum : this.dataInfo.viewPortMax), isFinite(e) || isFinite(g) ? isFinite(e) ? isFinite(g) || (g = e) : (e = g) : ((g = "undefined" === typeof this.options.interval ? -Infinity : this.options.interval), (e = "undefined" !== typeof this.options.interval || isFinite(this.dataInfo.minDiff) ? 0 : Infinity)), 0 === e && 0 === g ? ((g += 9), (e = 0)) : 0 === g - e ? ((c = Math.min(Math.abs(0.01 * Math.abs(g)), 5)), (g += c), (e -= c)) : e > g ? ((c = Math.min( 0.01 * Math.abs(this.getApparentDifference(g, e, null, !0)), 5 )), 0 <= g ? (e = g - c) : (g = isFinite(e) ? e + c : 0)) : ((c = Math.min( 0.01 * Math.abs(this.getApparentDifference(e, g, null, !0)), 0.05 )), 0 !== g && (g += c), 0 !== e && (e -= c)), (m = Infinity !== this.dataInfo.minDiff ? this.dataInfo.minDiff : 1 < g - e ? 0.5 * Math.abs(g - e) : 1), this.includeZero && (null === this.viewportMinimum || isNaN(this.viewportMinimum)) && 0 < e && (e = 0), this.includeZero && (null === this.viewportMaximum || isNaN(this.viewportMaximum)) && 0 > g && (g = 0)); c = this.getApparentDifference( isNaN(this.viewportMinimum) || null === this.viewportMinimum ? e : this.viewportMinimum, isNaN(this.viewportMaximum) || null === this.viewportMaximum ? g : this.viewportMaximum, null, !0 ); if ("axisX" === this.type && b) { this.intervalType || (c / 1 <= a ? ((this.interval = 1), (this.intervalType = "millisecond")) : c / 2 <= a ? ((this.interval = 2), (this.intervalType = "millisecond")) : c / 5 <= a ? ((this.interval = 5), (this.intervalType = "millisecond")) : c / 10 <= a ? ((this.interval = 10), (this.intervalType = "millisecond")) : c / 20 <= a ? ((this.interval = 20), (this.intervalType = "millisecond")) : c / 50 <= a ? ((this.interval = 50), (this.intervalType = "millisecond")) : c / 100 <= a ? ((this.interval = 100), (this.intervalType = "millisecond")) : c / 200 <= a ? ((this.interval = 200), (this.intervalType = "millisecond")) : c / 250 <= a ? ((this.interval = 250), (this.intervalType = "millisecond")) : c / 300 <= a ? ((this.interval = 300), (this.intervalType = "millisecond")) : c / 400 <= a ? ((this.interval = 400), (this.intervalType = "millisecond")) : c / 500 <= a ? ((this.interval = 500), (this.intervalType = "millisecond")) : c / (1 * S.secondDuration) <= a ? ((this.interval = 1), (this.intervalType = "second")) : c / (2 * S.secondDuration) <= a ? ((this.interval = 2), (this.intervalType = "second")) : c / (5 * S.secondDuration) <= a ? ((this.interval = 5), (this.intervalType = "second")) : c / (10 * S.secondDuration) <= a ? ((this.interval = 10), (this.intervalType = "second")) : c / (15 * S.secondDuration) <= a ? ((this.interval = 15), (this.intervalType = "second")) : c / (20 * S.secondDuration) <= a ? ((this.interval = 20), (this.intervalType = "second")) : c / (30 * S.secondDuration) <= a ? ((this.interval = 30), (this.intervalType = "second")) : c / (1 * S.minuteDuration) <= a ? ((this.interval = 1), (this.intervalType = "minute")) : c / (2 * S.minuteDuration) <= a ? ((this.interval = 2), (this.intervalType = "minute")) : c / (5 * S.minuteDuration) <= a ? ((this.interval = 5), (this.intervalType = "minute")) : c / (10 * S.minuteDuration) <= a ? ((this.interval = 10), (this.intervalType = "minute")) : c / (15 * S.minuteDuration) <= a ? ((this.interval = 15), (this.intervalType = "minute")) : c / (20 * S.minuteDuration) <= a ? ((this.interval = 20), (this.intervalType = "minute")) : c / (30 * S.minuteDuration) <= a ? ((this.interval = 30), (this.intervalType = "minute")) : c / (1 * S.hourDuration) <= a ? ((this.interval = 1), (this.intervalType = "hour")) : c / (2 * S.hourDuration) <= a ? ((this.interval = 2), (this.intervalType = "hour")) : c / (3 * S.hourDuration) <= a ? ((this.interval = 3), (this.intervalType = "hour")) : c / (6 * S.hourDuration) <= a ? ((this.interval = 6), (this.intervalType = "hour")) : c / (1 * S.dayDuration) <= a ? ((this.interval = 1), (this.intervalType = "day")) : c / (2 * S.dayDuration) <= a ? ((this.interval = 2), (this.intervalType = "day")) : c / (4 * S.dayDuration) <= a ? ((this.interval = 4), (this.intervalType = "day")) : c / (1 * S.weekDuration) <= a ? ((this.interval = 1), (this.intervalType = "week")) : c / (2 * S.weekDuration) <= a ? ((this.interval = 2), (this.intervalType = "week")) : c / (3 * S.weekDuration) <= a ? ((this.interval = 3), (this.intervalType = "week")) : c / (1 * S.monthDuration) <= a ? ((this.interval = 1), (this.intervalType = "month")) : c / (2 * S.monthDuration) <= a ? ((this.interval = 2), (this.intervalType = "month")) : c / (3 * S.monthDuration) <= a ? ((this.interval = 3), (this.intervalType = "month")) : c / (6 * S.monthDuration) <= a ? ((this.interval = 6), (this.intervalType = "month")) : ((this.interval = c / (1 * S.yearDuration) <= a ? 1 : c / (2 * S.yearDuration) <= a ? 2 : c / (4 * S.yearDuration) <= a ? 4 : Math.floor( z.getNiceNumber(c / (a - 1), !0) / S.yearDuration )), (this.intervalType = "year"))); if (null === this.viewportMinimum || isNaN(this.viewportMinimum)) this.viewportMinimum = e - m / 2; if (null === this.viewportMaximum || isNaN(this.viewportMaximum)) this.viewportMaximum = g + m / 2; d ? (this.autoValueFormatString = "MMM DD YYYY HH:mm") : "year" === this.intervalType ? (this.autoValueFormatString = "YYYY") : "month" === this.intervalType ? (this.autoValueFormatString = "MMM YYYY") : "week" === this.intervalType ? (this.autoValueFormatString = "MMM DD YYYY") : "day" === this.intervalType ? (this.autoValueFormatString = "MMM DD YYYY") : "hour" === this.intervalType ? (this.autoValueFormatString = "hh:mm TT") : "minute" === this.intervalType ? (this.autoValueFormatString = "hh:mm TT") : "second" === this.intervalType ? (this.autoValueFormatString = "hh:mm:ss TT") : "millisecond" === this.intervalType && (this.autoValueFormatString = "fff'ms'"); this.valueFormatString || (this.valueFormatString = this.autoValueFormatString); } else { this.intervalType = "number"; c = z.getNiceNumber(c, !1); this.interval = this.options && 0 < this.options.interval ? this.options.interval : z.getNiceNumber(c / (a - 1), !0); if (null === this.viewportMinimum || isNaN(this.viewportMinimum)) this.viewportMinimum = "axisX" === this.type ? e - m / 2 : Math.floor(e / this.interval) * this.interval; if (null === this.viewportMaximum || isNaN(this.viewportMaximum)) this.viewportMaximum = "axisX" === this.type ? g + m / 2 : Math.ceil(g / this.interval) * this.interval; 0 === this.viewportMaximum && 0 === this.viewportMinimum && (0 === this.options.viewportMinimum ? (this.viewportMaximum += 10) : 0 === this.options.viewportMaximum && (this.viewportMinimum -= 10), this.options && "undefined" === typeof this.options.interval && (this.interval = z.getNiceNumber( (this.viewportMaximum - this.viewportMinimum) / (a - 1), !0 ))); } if (null === this.minimum || null === this.maximum) if ( ("axisX" === this.type ? ((e = null !== this.minimum ? this.minimum : this.dataInfo.min), (g = null !== this.maximum ? this.maximum : this.dataInfo.max), 0 === g - e && ((c = "undefined" === typeof this.options.interval ? 0.4 : this.options.interval), (g += c), (e -= c)), (m = Infinity !== this.dataInfo.minDiff ? this.dataInfo.minDiff : 1 < g - e ? 0.5 * Math.abs(g - e) : 1)) : "axisY" === this.type && ((e = null !== this.minimum ? this.minimum : this.dataInfo.min), (g = null !== this.maximum ? this.maximum : this.dataInfo.max), isFinite(e) || isFinite(g) ? 0 === e && 0 === g ? ((g += 9), (e = 0)) : 0 === g - e ? ((c = Math.min(Math.abs(0.01 * Math.abs(g)), 5)), (g += c), (e -= c)) : e > g ? ((c = Math.min( 0.01 * Math.abs(this.getApparentDifference(g, e, null, !0)), 5 )), 0 <= g ? (e = g - c) : (g = isFinite(e) ? e + c : 0)) : ((c = Math.min( 0.01 * Math.abs(this.getApparentDifference(e, g, null, !0)), 0.05 )), 0 !== g && (g += c), 0 !== e && (e -= c)) : ((g = "undefined" === typeof this.options.interval ? -Infinity : this.options.interval), (e = "undefined" !== typeof this.options.interval || isFinite(this.dataInfo.minDiff) ? 0 : Infinity)), (m = Infinity !== this.dataInfo.minDiff ? this.dataInfo.minDiff : 1 < g - e ? 0.5 * Math.abs(g - e) : 1), this.includeZero && (null === this.minimum || isNaN(this.minimum)) && 0 < e && (e = 0), this.includeZero && (null === this.maximum || isNaN(this.maximum)) && 0 > g && (g = 0)), Math.abs(this.getApparentDifference(e, g, null, !0)), "axisX" === this.type && b) ) { this.valueType = "dateTime"; if (null === this.minimum || isNaN(this.minimum)) this.minimum = e - m / 2; if (null === this.maximum || isNaN(this.maximum)) this.maximum = g + m / 2; } else (this.intervalType = this.valueType = "number"), null === this.minimum && ((this.minimum = "axisX" === this.type ? e - m / 2 : Math.floor(e / this.interval) * this.interval), (this.minimum = Math.min( this.minimum, null === this.sessionVariables.viewportMinimum || isNaN(this.sessionVariables.viewportMinimum) ? Infinity : this.sessionVariables.viewportMinimum ))), null === this.maximum && ((this.maximum = "axisX" === this.type ? g + m / 2 : Math.ceil(g / this.interval) * this.interval), (this.maximum = Math.max( this.maximum, null === this.sessionVariables.viewportMaximum || isNaN(this.sessionVariables.viewportMaximum) ? -Infinity : this.sessionVariables.viewportMaximum ))), 0 === this.maximum && 0 === this.minimum && (0 === this.options.minimum ? (this.maximum += 10) : 0 === this.options.maximum && (this.minimum -= 10)); u(this.sessionVariables.newViewportMinimum) && (this.viewportMinimum = Math.max(this.viewportMinimum, this.minimum)); u(this.sessionVariables.newViewportMaximum) && (this.viewportMaximum = Math.min(this.viewportMaximum, this.maximum)); this.range = this.viewportMaximum - this.viewportMinimum; this.intervalStartPosition = "axisX" === this.type && b ? this.getLabelStartPoint( new Date(this.viewportMinimum), this.intervalType, this.interval ) : Math.floor( (this.viewportMinimum + 0.2 * this.interval) / this.interval ) * this.interval; this.valueFormatString || (this.valueFormatString = z.generateValueFormatString(this.range, 2)); } }; z.prototype.calculateLogarithmicAxisParameters = function () { var a = this.chart.layoutManager.getFreeSpace(), d = Math.log(this.logarithmBase), b; "bottom" === this._position || "top" === this._position ? ((this.maxWidth = a.width), (this.maxHeight = a.height)) : ((this.maxWidth = a.height), (this.maxHeight = a.width)); var a = "axisX" === this.type ? 500 > this.maxWidth ? 7 : Math.max(7, Math.floor(this.maxWidth / 100)) : Math.max(Math.floor(this.maxWidth / 50), 3), c, e, g, m; m = 1; if (null === this.viewportMinimum || isNaN(this.viewportMinimum)) this.viewportMinimum = this.minimum; if (null === this.viewportMaximum || isNaN(this.viewportMaximum)) this.viewportMaximum = this.maximum; if (this.scaleBreaks) for (m = 0; m < this.scaleBreaks._appliedBreaks.length; m++) if ( ((!u(this.sessionVariables.newViewportMinimum) && this.sessionVariables.newViewportMinimum >= this.scaleBreaks._appliedBreaks[m].startValue) || (!u(this.options.minimum) && this.options.minimum >= this.scaleBreaks._appliedBreaks[m].startValue) || (!u(this.options.viewportMinimum) && this.viewportMinimum >= this.scaleBreaks._appliedBreaks[m].startValue)) && ((!u(this.sessionVariables.newViewportMaximum) && this.sessionVariables.newViewportMaximum <= this.scaleBreaks._appliedBreaks[m].endValue) || (!u(this.options.maximum) && this.options.maximum <= this.scaleBreaks._appliedBreaks[m].endValue) || (!u(this.options.viewportMaximum) && this.viewportMaximum <= this.scaleBreaks._appliedBreaks[m].endValue)) ) { this.scaleBreaks._appliedBreaks.splice(m, 1); break; } "axisX" === this.type ? ((c = null !== this.viewportMinimum ? this.viewportMinimum : this.dataInfo.viewPortMin), (e = null !== this.viewportMaximum ? this.viewportMaximum : this.dataInfo.viewPortMax), 1 === e / c && ((m = Math.pow( this.logarithmBase, "undefined" === typeof this.options.interval ? 0.4 : this.options.interval )), (e *= m), (c /= m)), (g = Infinity !== this.dataInfo.minDiff ? this.dataInfo.minDiff : e / c > this.logarithmBase ? (e / c) * Math.pow(this.logarithmBase, 0.5) : this.logarithmBase)) : "axisY" === this.type && ((c = null !== this.viewportMinimum ? this.viewportMinimum : this.dataInfo.viewPortMin), (e = null !== this.viewportMaximum ? this.viewportMaximum : this.dataInfo.viewPortMax), 0 >= c && !isFinite(e) ? ((e = "undefined" === typeof this.options.interval ? 0 : this.options.interval), (c = 1)) : 0 >= c ? (c = e) : isFinite(e) || (e = c), 1 === c && 1 === e ? ((e *= this.logarithmBase - 1 / this.logarithmBase), (c = 1)) : 1 === e / c ? ((m = Math.min( e * Math.pow(this.logarithmBase, 0.01), Math.pow(this.logarithmBase, 5) )), (e *= m), (c /= m)) : c > e ? ((m = Math.min( (c / e) * Math.pow(this.logarithmBase, 0.01), Math.pow(this.logarithmBase, 5) )), 1 <= e ? (c = e / m) : (e = c * m)) : ((m = Math.min( (e / c) * Math.pow(this.logarithmBase, 0.01), Math.pow(this.logarithmBase, 0.04) )), 1 !== e && (e *= m), 1 !== c && (c /= m)), (g = Infinity !== this.dataInfo.minDiff ? this.dataInfo.minDiff : e / c > this.logarithmBase ? (e / c) * Math.pow(this.logarithmBase, 0.5) : this.logarithmBase), this.includeZero && (null === this.viewportMinimum || isNaN(this.viewportMinimum)) && 1 < c && (c = 1), this.includeZero && (null === this.viewportMaximum || isNaN(this.viewportMaximum)) && 1 > e && (e = 1)); m = (isNaN(this.viewportMaximum) || null === this.viewportMaximum ? e : this.viewportMaximum) / (isNaN(this.viewportMinimum) || null === this.viewportMinimum ? c : this.viewportMinimum); var l = (isNaN(this.viewportMaximum) || null === this.viewportMaximum ? e : this.viewportMaximum) - (isNaN(this.viewportMinimum) || null === this.viewportMinimum ? c : this.viewportMinimum); this.intervalType = "number"; m = Math.pow( this.logarithmBase, z.getNiceNumber(Math.abs(Math.log(m) / d), !1) ); this.options && 0 < this.options.interval ? (this.interval = this.options.interval) : ((this.interval = z.getNiceExponent(Math.log(m) / d / (a - 1), !0)), (b = z.getNiceNumber(l / (a - 1), !0))); if (null === this.viewportMinimum || isNaN(this.viewportMinimum)) this.viewportMinimum = "axisX" === this.type ? c / Math.sqrt(g) : Math.pow( this.logarithmBase, this.interval * Math.floor(Math.log(c) / d / this.interval) ); if (null === this.viewportMaximum || isNaN(this.viewportMaximum)) this.viewportMaximum = "axisX" === this.type ? e * Math.sqrt(g) : Math.pow( this.logarithmBase, this.interval * Math.ceil(Math.log(e) / d / this.interval) ); 1 === this.viewportMaximum && 1 === this.viewportMinimum && (1 === this.options.viewportMinimum ? (this.viewportMaximum *= this.logarithmBase - 1 / this.logarithmBase) : 1 === this.options.viewportMaximum && (this.viewportMinimum /= this.logarithmBase - 1 / this.logarithmBase), this.options && "undefined" === typeof this.options.interval && ((this.interval = z.getNiceExponent( Math.ceil(Math.log(m) / d) / (a - 1) )), (b = z.getNiceNumber( (this.viewportMaximum - this.viewportMinimum) / (a - 1), !0 )))); if (null === this.minimum || null === this.maximum) "axisX" === this.type ? ((c = null !== this.minimum ? this.minimum : this.dataInfo.min), (e = null !== this.maximum ? this.maximum : this.dataInfo.max), 1 === e / c && ((m = Math.pow( this.logarithmBase, "undefined" === typeof this.options.interval ? 0.4 : this.options.interval )), (e *= m), (c /= m)), (g = Infinity !== this.dataInfo.minDiff ? this.dataInfo.minDiff : e / c > this.logarithmBase ? (e / c) * Math.pow(this.logarithmBase, 0.5) : this.logarithmBase)) : "axisY" === this.type && ((c = null !== this.minimum ? this.minimum : this.dataInfo.min), (e = null !== this.maximum ? this.maximum : this.dataInfo.max), isFinite(c) || isFinite(e) ? 1 === c && 1 === e ? ((e *= this.logarithmBase), (c /= this.logarithmBase)) : 1 === e / c ? ((m = Math.pow(this.logarithmBase, this.interval)), (e *= m), (c /= m)) : c > e ? ((m = Math.min(0.01 * (c / e), 5)), 1 <= e ? (c = e / m) : (e = c * m)) : ((m = Math.min( (e / c) * Math.pow(this.logarithmBase, 0.01), Math.pow(this.logarithmBase, 0.04) )), 1 !== e && (e *= m), 1 !== c && (c /= m)) : ((e = "undefined" === typeof this.options.interval ? 0 : this.options.interval), (c = 1)), (g = Infinity !== this.dataInfo.minDiff ? this.dataInfo.minDiff : e / c > this.logarithmBase ? (e / c) * Math.pow(this.logarithmBase, 0.5) : this.logarithmBase), this.includeZero && (null === this.minimum || isNaN(this.minimum)) && 1 < c && (c = 1), this.includeZero && (null === this.maximum || isNaN(this.maximum)) && 1 > e && (e = 1)), (this.intervalType = "number"), null === this.minimum && ((this.minimum = "axisX" === this.type ? c / Math.sqrt(g) : Math.pow( this.logarithmBase, this.interval * Math.floor(Math.log(c) / d / this.interval) )), (this.minimum = Math.min( this.minimum, null === this.sessionVariables.viewportMinimum || isNaN(this.sessionVariables.viewportMinimum) ? "undefined" === typeof this.sessionVariables.newViewportMinimum ? Infinity : this.sessionVariables.newViewportMinimum : this.sessionVariables.viewportMinimum ))), null === this.maximum && ((this.maximum = "axisX" === this.type ? e * Math.sqrt(g) : Math.pow( this.logarithmBase, this.interval * Math.ceil(Math.log(e) / d / this.interval) )), (this.maximum = Math.max( this.maximum, null === this.sessionVariables.viewportMaximum || isNaN(this.sessionVariables.viewportMaximum) ? "undefined" === typeof this.sessionVariables.newViewportMaximum ? 0 : this.sessionVariables.newViewportMaximum : this.sessionVariables.viewportMaximum ))), 1 === this.maximum && 1 === this.minimum && (1 === this.options.minimum ? (this.maximum *= this.logarithmBase - 1 / this.logarithmBase) : 1 === this.options.maximum && (this.minimum /= this.logarithmBase - 1 / this.logarithmBase)); this.viewportMinimum = Math.max(this.viewportMinimum, this.minimum); this.viewportMaximum = Math.min(this.viewportMaximum, this.maximum); this.viewportMinimum > this.viewportMaximum && ((!this.options.viewportMinimum && !this.options.minimum) || this.options.viewportMaximum || this.options.maximum ? this.options.viewportMinimum || this.options.minimum || (!this.options.viewportMaximum && !this.options.maximum) || (this.viewportMinimum = this.minimum = (this.options.viewportMaximum || this.options.maximum) / Math.pow(this.logarithmBase, 2 * Math.ceil(this.interval))) : (this.viewportMaximum = this.maximum = this.options.viewportMinimum || this.options.minimum)); c = Math.pow( this.logarithmBase, Math.floor(Math.log(this.viewportMinimum) / (d * this.interval) + 0.2) * this.interval ); this.range = this.viewportMaximum / this.viewportMinimum; this.noTicks = a; if ( !this.options.interval && this.range < Math.pow( this.logarithmBase, 8 > this.viewportMaximum || 3 > a ? 2 : 3 ) ) { for ( d = Math.floor(this.viewportMinimum / b + 0.5) * b; d < this.viewportMinimum; ) d += b; this.equidistantInterval = !1; this.intervalStartPosition = d; this.interval = b; } else this.options.interval || ((b = Math.ceil(this.interval)), this.range > this.interval && ((this.interval = b), (c = Math.pow( this.logarithmBase, Math.floor( Math.log(this.viewportMinimum) / (d * this.interval) + 0.2 ) * this.interval )))), (this.equidistantInterval = !0), (this.intervalStartPosition = c); if ( !this.valueFormatString && ((this.valueFormatString = "#,##0.##"), 1 > this.viewportMinimum) ) { d = Math.floor(Math.abs(Math.log(this.viewportMinimum) / Math.LN10)) + 2; if (isNaN(d) || !isFinite(d)) d = 2; if (2 < d) for (m = 0; m < d - 2; m++) this.valueFormatString += "#"; } }; z.generateValueFormatString = function (a, d) { var b = "#,##0.", c = d; 1 > a && ((c += Math.floor(Math.abs(Math.log(a) / Math.LN10))), isNaN(c) || !isFinite(c)) && (c = d); for (var e = 0; e < c; e++) b += "#"; return b; }; z.getNiceExponent = function (a, d) { var b = Math.floor(Math.log(a) / Math.LN10), c = a / Math.pow(10, b), c = 0 > b ? (1 >= c ? 1 : 5 >= c ? 5 : 10) : Math.max(Math.floor(c), 1); return -20 > b ? Number(c * Math.pow(10, b)) : Number((c * Math.pow(10, b)).toFixed(20)); }; z.getNiceNumber = function (a, d) { var b = Math.floor(Math.log(a) / Math.LN10), c = a / Math.pow(10, b), c = d ? 1.5 > c ? 1 : 3 > c ? 2 : 7 > c ? 5 : 10 : 1 >= c ? 1 : 2 >= c ? 2 : 5 >= c ? 5 : 10; return -20 > b ? Number(c * Math.pow(10, b)) : Number((c * Math.pow(10, b)).toFixed(20)); }; z.prototype.getLabelStartPoint = function () { var a = S[this.intervalType + "Duration"] * this.interval, a = new Date(Math.floor(this.viewportMinimum / a) * a); if ("millisecond" !== this.intervalType) if ("second" === this.intervalType) 0 < a.getMilliseconds() && (a.setSeconds(a.getSeconds() + 1), a.setMilliseconds(0)); else if ("minute" === this.intervalType) { if (0 < a.getSeconds() || 0 < a.getMilliseconds()) a.setMinutes(a.getMinutes() + 1), a.setSeconds(0), a.setMilliseconds(0); } else if ("hour" === this.intervalType) { if ( 0 < a.getMinutes() || 0 < a.getSeconds() || 0 < a.getMilliseconds() ) a.setHours(a.getHours() + 1), a.setMinutes(0), a.setSeconds(0), a.setMilliseconds(0); } else if ("day" === this.intervalType) { if ( 0 < a.getHours() || 0 < a.getMinutes() || 0 < a.getSeconds() || 0 < a.getMilliseconds() ) a.setDate(a.getDate() + 1), a.setHours(0), a.setMinutes(0), a.setSeconds(0), a.setMilliseconds(0); } else if ("week" === this.intervalType) { if ( 0 < a.getDay() || 0 < a.getHours() || 0 < a.getMinutes() || 0 < a.getSeconds() || 0 < a.getMilliseconds() ) a.setDate(a.getDate() + (7 - a.getDay())), a.setHours(0), a.setMinutes(0), a.setSeconds(0), a.setMilliseconds(0); } else if ("month" === this.intervalType) { if ( 1 < a.getDate() || 0 < a.getHours() || 0 < a.getMinutes() || 0 < a.getSeconds() || 0 < a.getMilliseconds() ) a.setMonth(a.getMonth() + 1), a.setDate(1), a.setHours(0), a.setMinutes(0), a.setSeconds(0), a.setMilliseconds(0); } else "year" === this.intervalType && (0 < a.getMonth() || 1 < a.getDate() || 0 < a.getHours() || 0 < a.getMinutes() || 0 < a.getSeconds() || 0 < a.getMilliseconds()) && (a.setFullYear(a.getFullYear() + 1), a.setMonth(0), a.setDate(1), a.setHours(0), a.setMinutes(0), a.setSeconds(0), a.setMilliseconds(0)); return a; }; qa(Q, V); qa(L, V); L.prototype.createUserOptions = function (a) { if ("undefined" !== typeof a || this.options._isPlaceholder) { var d = 0; this.parent.options._isPlaceholder && this.parent.createUserOptions(); this.options._isPlaceholder || (Fa(this.parent[this.optionsName]), (d = this.parent.options[this.optionsName].indexOf(this.options))); this.options = "undefined" === typeof a ? {} : a; this.parent.options[this.optionsName][d] = this.options; } }; L.prototype.render = function (a) { if ( 0 !== this.spacing || (0 !== this.options.lineThickness && ("undefined" !== typeof this.options.lineThickness || 0 !== this.parent.lineThickness)) ) { var d = this.ctx, b = this.ctx.globalAlpha; this.ctx = a || this.ctx; this.ctx.save(); this.ctx.beginPath(); this.ctx.rect( this.chart.plotArea.x1, this.chart.plotArea.y1, this.chart.plotArea.width, this.chart.plotArea.height ); this.ctx.clip(); var c = this.scaleBreaks.parent.getPixelCoordinatesOnAxis( this.startValue ), e = this.scaleBreaks.parent.getPixelCoordinatesOnAxis(this.endValue); this.ctx.strokeStyle = this.lineColor; this.ctx.fillStyle = this.color; this.ctx.beginPath(); this.ctx.globalAlpha = 1; N(this.id); var g, m, l, k, h, p; a = Math.max(this.spacing, 3); var q = Math.max(0, this.lineThickness); this.ctx.lineWidth = q; this.ctx.setLineDash && this.ctx.setLineDash(R(this.lineDashType, q)); if ( "bottom" === this.scaleBreaks.parent._position || "top" === this.scaleBreaks.parent._position ) if ( ((c = 1 === q % 2 ? (c.x << 0) + 0.5 : c.x << 0), (m = 1 === q % 2 ? (e.x << 0) + 0.5 : e.x << 0), "top" === this.scaleBreaks.parent._position ? ((e = this.chart.plotArea.y1), (l = (this.chart.plotArea.y2 + q / 2 + 0.5) << 0)) : ((e = this.chart.plotArea.y2), (l = (this.chart.plotArea.y1 - q / 2 + 0.5) << 0), (a *= -1)), (this.bounds = { x1: c - q / 2, y1: e, x2: m + q / 2, y2: l }), this.ctx.moveTo(c, e), "straight" === this.type || ("top" === this.scaleBreaks.parent._position && 0 >= a) || ("bottom" === this.scaleBreaks.parent._position && 0 <= a)) ) this.ctx.lineTo(c, l), this.ctx.lineTo(m, l), this.ctx.lineTo(m, e); else if ("wavy" === this.type) { k = c; h = e; g = 0.5; p = (l - h) / a / 3; for (var n = 0; n < p; n++) this.ctx.bezierCurveTo( k + g * a, h + a, k + g * a, h + 2 * a, k, h + 3 * a ), (h += 3 * a), (g *= -1); this.ctx.bezierCurveTo( k + g * a, h + a, k + g * a, h + 2 * a, k, h + 3 * a ); k = m; g *= -1; this.ctx.lineTo(k, h); for (n = 0; n < p; n++) this.ctx.bezierCurveTo( k + g * a, h - a, k + g * a, h - 2 * a, k, h - 3 * a ), (h -= 3 * a), (g *= -1); } else { if ("zigzag" === this.type) { g = -1; h = e + a; k = c + a; p = (l - h) / a / 2; for (n = 0; n < p; n++) this.ctx.lineTo(k, h), (k += 2 * g * a), (h += 2 * a), (g *= -1); this.ctx.lineTo(k, h); k += m - c; for (n = 0; n < p + 1; n++) this.ctx.lineTo(k, h), (k += 2 * g * a), (h -= 2 * a), (g *= -1); this.ctx.lineTo(k + g * a, h + a); } } else if ( "left" === this.scaleBreaks.parent._position || "right" === this.scaleBreaks.parent._position ) if ( ((e = 1 === q % 2 ? (e.y << 0) + 0.5 : e.y << 0), (l = 1 === q % 2 ? (c.y << 0) + 0.5 : c.y << 0), "left" === this.scaleBreaks.parent._position ? ((c = this.chart.plotArea.x1), (m = (this.chart.plotArea.x2 + q / 2 + 0.5) << 0)) : ((c = this.chart.plotArea.x2), (m = (this.chart.plotArea.x1 - q / 2 + 0.5) << 0), (a *= -1)), (this.bounds = { x1: c, y1: e - q / 2, x2: m, y2: l + q / 2 }), this.ctx.moveTo(c, e), "straight" === this.type || ("left" === this.scaleBreaks.parent._position && 0 >= a) || ("right" === this.scaleBreaks.parent._position && 0 <= a)) ) this.ctx.lineTo(m, e), this.ctx.lineTo(m, l), this.ctx.lineTo(c, l); else if ("wavy" === this.type) { k = c; h = e; g = 0.5; p = (m - k) / a / 3; for (n = 0; n < p; n++) this.ctx.bezierCurveTo( k + a, h + g * a, k + 2 * a, h + g * a, k + 3 * a, h ), (k += 3 * a), (g *= -1); this.ctx.bezierCurveTo( k + a, h + g * a, k + 2 * a, h + g * a, k + 3 * a, h ); h = l; g *= -1; this.ctx.lineTo(k, h); for (n = 0; n < p; n++) this.ctx.bezierCurveTo( k - a, h + g * a, k - 2 * a, h + g * a, k - 3 * a, h ), (k -= 3 * a), (g *= -1); } else if ("zigzag" === this.type) { g = 1; h = e - a; k = c + a; p = (m - k) / a / 2; for (n = 0; n < p; n++) this.ctx.lineTo(k, h), (h += 2 * g * a), (k += 2 * a), (g *= -1); this.ctx.lineTo(k, h); h += l - e; for (n = 0; n < p + 1; n++) this.ctx.lineTo(k, h), (h += 2 * g * a), (k -= 2 * a), (g *= -1); this.ctx.lineTo(k + a, h + g * a); } 0 < q && this.ctx.stroke(); this.ctx.closePath(); this.ctx.globalAlpha = this.fillOpacity; this.ctx.globalCompositeOperation = "destination-over"; this.ctx.fill(); this.ctx.restore(); this.ctx.globalAlpha = b; this.ctx = d; } }; qa(X, V); X.prototype.createUserOptions = function (a) { if ("undefined" !== typeof a || this.options._isPlaceholder) { var d = 0; this.parent.options._isPlaceholder && this.parent.createUserOptions(); this.options._isPlaceholder || (Fa(this.parent.stripLines), (d = this.parent.options.stripLines.indexOf(this.options))); this.options = "undefined" === typeof a ? {} : a; this.parent.options.stripLines[d] = this.options; } }; X.prototype.render = function () { this.ctx.save(); var a = this.parent.getPixelCoordinatesOnAxis(this.value), d = Math.abs( "pixel" === this._thicknessType ? this.thickness : this.parent.conversionParameters.pixelPerUnit * this.thickness ); if (0 < d) { var b = null === this.opacity ? 1 : this.opacity; this.ctx.strokeStyle = this.color; this.ctx.beginPath(); var c = this.ctx.globalAlpha; this.ctx.globalAlpha = b; N(this.id); var e, g, m, l; this.ctx.lineWidth = d; this.ctx.setLineDash && this.ctx.setLineDash(R(this.lineDashType, d)); if ( "bottom" === this.parent._position || "top" === this.parent._position ) (e = g = 1 === this.ctx.lineWidth % 2 ? (a.x << 0) + 0.5 : a.x << 0), (m = this.chart.plotArea.y1), (l = this.chart.plotArea.y2), (this.bounds = { x1: e - d / 2, y1: m, x2: g + d / 2, y2: l }); else if ( "left" === this.parent._position || "right" === this.parent._position ) (m = l = 1 === this.ctx.lineWidth % 2 ? (a.y << 0) + 0.5 : a.y << 0), (e = this.chart.plotArea.x1), (g = this.chart.plotArea.x2), (this.bounds = { x1: e, y1: m - d / 2, x2: g, y2: l + d / 2 }); this.ctx.moveTo(e, m); this.ctx.lineTo(g, l); this.ctx.stroke(); this.ctx.globalAlpha = c; } this.ctx.restore(); }; qa(fa, V); fa.prototype.render = function (a, d) { var b, c, e, g, m = null, l = (m = null), k = ""; if (!this.valueFormatString) if ("dateTime" === this.parent.valueType) this.valueFormatString = this.parent.valueFormatString; else { var h = 0, h = "xySwapped" === this.chart.plotInfo.axisPlacement ? 50 < this.parent.range ? 0 : 500 < this.chart.width && 25 > this.parent.range ? 2 : Math.floor( Math.abs(Math.log(this.parent.range) / Math.LN10) ) + (5 > this.parent.range ? 2 : 10 > this.parent.range ? 1 : 0) : 50 < this.parent.range ? 0 : Math.floor( Math.abs(Math.log(this.parent.range) / Math.LN10) ) + (5 > this.parent.range ? 2 : 10 > this.parent.range ? 1 : 0); this.valueFormatString = z.generateValueFormatString( this.parent.range, h ); } var l = null === this.opacity ? 1 : this.opacity, h = Math.abs( "pixel" === this._thicknessType ? this.thickness : this.parent.conversionParameters.pixelPerUnit * this.thickness ), p = this.chart.overlaidCanvasCtx, q = p.globalAlpha; p.globalAlpha = l; p.beginPath(); p.strokeStyle = this.color; p.lineWidth = h; p.save(); this.labelFontSize = u(this.options.labelFontSize) ? this.parent.labelFontSize : this.labelFontSize; if ("left" === this.parent._position || "right" === this.parent._position) (this.labelMaxWidth = u(this.options.labelMaxWidth) ? this.parent.bounds.x2 - this.parent.bounds.x1 : this.labelMaxWidth), (this.labelMaxHeight = u(this.options.labelWrap) || this.labelWrap ? 3 * this.chart.height : 2 * this.labelFontSize); else if ( "top" === this.parent._position || "bottom" === this.parent._position ) (this.labelMaxWidth = u(this.options.labelMaxWidth) ? 3 * this.chart.width : this.labelMaxWidth), (this.labelMaxHeight = u(this.options.labelWrap) || this.labelWrap ? this.parent.bounds.height : 2 * this.labelFontSize); 0 < h && p.setLineDash && p.setLineDash(R(this.lineDashType, h)); l = new ka(p, { x: 0, y: 0, padding: { top: 2, right: 3, bottom: 2, left: 4 }, backgroundColor: this.labelBackgroundColor, borderColor: this.labelBorderColor, borderThickness: this.labelBorderThickness, cornerRadius: this.labelCornerRadius, maxWidth: this.labelMaxWidth, maxHeight: this.labelMaxHeight, angle: this.labelAngle, text: k, horizontalAlign: "left", fontSize: this.labelFontSize, fontFamily: this.labelFontFamily, fontWeight: this.labelFontWeight, fontColor: this.labelFontColor, fontStyle: this.labelFontStyle, textBaseline: "middle", }); if (this.snapToDataPoint) { var n = 0, m = []; if ("xySwapped" === this.chart.plotInfo.axisPlacement) { var f = null; if ( "bottom" === this.parent._position || "top" === this.parent._position ) n = this.parent.dataSeries[0].axisX.convertPixelToValue({ y: d }); else if ( "left" === this.parent._position || "right" === this.parent._position ) n = this.parent.convertPixelToValue({ y: d }); for (var r = 0; r < this.parent.dataSeries.length; r++) (f = this.parent.dataSeries[r].getDataPointAtX(n, !0)) && 0 <= f.index && ((f.dataSeries = this.parent.dataSeries[r]), null !== f.dataPoint.y && m.push(f)); f = null; if (0 === m.length) return; m.sort(function (a, b) { return a.distance - b.distance; }); f = Math.abs(a - this.parent.convertValueToPixel(m[0].dataPoint.y)); r = 0; if ( "rangeBar" === m[0].dataSeries.type || "error" === m[0].dataSeries.type ) for ( var f = Math.abs( a - this.parent.convertValueToPixel(m[r].dataPoint.y[0]) ), v = 0, n = 0; n < m.length; n++ ) if (m[n].dataPoint.y && m[n].dataPoint.y.length) for (k = 0; k < m[n].dataPoint.y.length; k++) (v = Math.abs( a - this.parent.convertValueToPixel(m[n].dataPoint.y[k]) )), v < f && ((f = v), (r = n)); else (v = Math.abs( a - this.parent.convertValueToPixel(m[n].dataPoint.y) )), v < f && ((f = v), (r = n)); else if ("stackedBar" === m[0].dataSeries.type) for ( var f = Math.abs( a - this.parent.convertValueToPixel(m[0].dataPoint.y) ), D = (v = 0), n = (r = 0); n < m.length; n++ ) if (m[n].dataPoint.y && m[n].dataPoint.y.length) for (k = 0; k < m[n].dataPoint.y.length; k++) (v = Math.abs( a - this.parent.convertValueToPixel(m[n].dataPoint.y[k]) )), v < f && ((f = v), (r = n)); else (D += m[n].dataPoint.y), (v = Math.abs(a - this.parent.convertValueToPixel(D))), v < f && ((f = v), (r = n)); else if ("stackedBar100" === m[0].dataSeries.type) for ( var f = Math.abs( a - this.parent.convertValueToPixel(m[0].dataPoint.y) ), t = (D = v = 0), n = 0; n < m.length; n++ ) if (m[n].dataPoint.y && m[n].dataPoint.y.length) for (k = 0; k < m[n].dataPoint.y.length; k++) (v = Math.abs( a - this.parent.convertValueToPixel(m[n].dataPoint.y[k]) )), v < f && ((f = v), (r = n)); else (D += m[n].dataPoint.y), (t = m[n].dataPoint.x.getTime ? m[n].dataPoint.x.getTime() : m[n].dataPoint.x), (t = 100 * (D / m[n].dataSeries.plotUnit.dataPointYSums[t])), (v = Math.abs(a - this.parent.convertValueToPixel(t))), v < f && ((f = v), (r = n)); else for ( f = Math.abs( a - this.parent.convertValueToPixel(m[0].dataPoint.y) ), n = r = v = 0; n < m.length; n++ ) if (m[n].dataPoint.y && m[n].dataPoint.y.length) for (k = 0; k < m[n].dataPoint.y.length; k++) (v = Math.abs( a - this.parent.convertValueToPixel(m[n].dataPoint.y[k]) )), v < f && ((f = v), (r = n)); else (v = Math.abs( a - this.parent.convertValueToPixel(m[n].dataPoint.y) )), v < f && ((f = v), (r = n)); k = m[r]; if ( "bottom" === this.parent._position || "top" === this.parent._position ) { b = 0; if ( "rangeBar" === this.parent.dataSeries[r].type || "error" === this.parent.dataSeries[r].type ) { f = Math.abs( a - this.parent.convertValueToPixel(k.dataPoint.y[0]) ); for (n = v = 0; n < k.dataPoint.y.length; n++) (v = Math.abs( a - this.parent.convertValueToPixel(k.dataPoint.y[n]) )), v < f && ((f = v), (b = n)); m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(k.dataPoint.y[b]) << 0) + 0.5 : this.parent.convertValueToPixel(k.dataPoint.y[b]) << 0; l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.y[b], }) : u(this.options.label) ? ba( k.dataPoint.y[b], this.valueFormatString, this.chart._cultureInfo ) : this.label; } else if ("stackedBar" === this.parent.dataSeries[r].type) { f = Math.abs( a - this.parent.convertValueToPixel(m[0].dataPoint.y) ); D = v = 0; for (n = r; 0 <= n; n--) (D += m[n].dataPoint.y), (v = Math.abs(a - this.parent.convertValueToPixel(D))), v < f && ((f = v), (b = n)); m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(D) << 0) + 0.5 : this.parent.convertValueToPixel(D) << 0; l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.y, }) : u(this.options.label) ? ba( k.dataPoint.y, this.valueFormatString, this.chart._cultureInfo ) : this.label; } else if ("stackedBar100" === this.parent.dataSeries[r].type) { f = Math.abs( a - this.parent.convertValueToPixel(m[0].dataPoint.y) ); t = D = v = 0; for (n = r; 0 <= n; n--) (D += m[n].dataPoint.y), (t = m[n].dataPoint.x.getTime ? m[n].dataPoint.x.getTime() : m[n].dataPoint.x), (t = 100 * (D / m[n].dataSeries.plotUnit.dataPointYSums[t])), (v = Math.abs(a - this.parent.convertValueToPixel(t))), v < f && ((f = v), (b = n)); m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(t) << 0) + 0.5 : this.parent.convertValueToPixel(t) << 0; l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: t, }) : u(this.options.label) ? ba(t, this.valueFormatString, this.chart._cultureInfo) : this.label; } else (m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(k.dataPoint.y) << 0) + 0.5 : this.parent.convertValueToPixel(k.dataPoint.y) << 0), (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.y, }) : u(this.options.label) ? ba( k.dataPoint.y, this.valueFormatString, this.chart._cultureInfo ) : this.label); b = c = m; e = this.chart.plotArea.y1; g = this.chart.plotArea.y2; this.bounds = { x1: b - h / 2, y1: e, x2: c + h / 2, y2: g }; l.x = b - l.measureText().width / 2; l.x + l.width > this.chart.bounds.x2 ? (l.x = this.chart.bounds.x2 - l.width) : l.x < this.chart.bounds.x1 && (l.x = this.chart.bounds.x1); l.y = this.parent.lineCoordinates.y2 + l.fontSize / 2 + 2; } else if ( "left" === this.parent._position || "right" === this.parent._position ) { e = g = m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(k.dataPoint.x) << 0) + 0.5 : this.parent.convertValueToPixel(k.dataPoint.x) << 0; b = this.chart.plotArea.x1; c = this.chart.plotArea.x2; this.bounds = { x1: b, y1: e - h / 2, x2: c, y2: g + h / 2 }; t = !1; if (this.parent.labels) for ( m = Math.ceil(this.parent.interval), n = 0; n < this.parent.viewportMaximum; n += m ) if (this.parent.labels[n]) t = !0; else { t = !1; break; } if (t) { if ("axisX" === this.parent.type) for ( n = this.parent.convertPixelToValue({ y: d }), f = null, r = 0; r < this.parent.dataSeries.length; r++ ) (f = this.parent.dataSeries[r].getDataPointAtX(n, !0)) && 0 <= f.index && (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.x, }) : u(this.options.label) ? f.dataPoint.label : this.label); } else "dateTime" === this.parent.valueType ? (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.x, }) : u(this.options.label) ? Ca( k.dataPoint.x, this.valueFormatString, this.chart._cultureInfo ) : this.label) : "number" === this.parent.valueType && (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.x, }) : u(this.options.label) ? ba( k.dataPoint.x, this.valueFormatString, this.chart._cultureInfo ) : this.label); l.y = g + l.fontSize / 2 - l.measureText().height / 2 + 2; l.y - l.fontSize / 2 < this.chart.bounds.y1 ? (l.y = this.chart.bounds.y1 + l.fontSize / 2 + 2) : l.y + l.measureText().height - l.fontSize / 2 > this.chart.bounds.y2 && (l.y = this.chart.bounds.y2 - l.measureText().height + l.fontSize / 2); "left" === this.parent._position ? (l.x = this.parent.lineCoordinates.x2 - l.measureText().width) : "right" === this.parent._position && (l.x = this.parent.lineCoordinates.x2); } } else if ( "bottom" === this.parent._position || "top" === this.parent._position ) { n = this.parent.convertPixelToValue({ x: a }); for (r = 0; r < this.parent.dataSeries.length; r++) (f = this.parent.dataSeries[r].getDataPointAtX(n, !0)) && 0 <= f.index && ((f.dataSeries = this.parent.dataSeries[r]), null !== f.dataPoint.y && m.push(f)); if (0 === m.length) return; m.sort(function (a, b) { return a.distance - b.distance; }); k = m[0]; b = c = m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(k.dataPoint.x) << 0) + 0.5 : this.parent.convertValueToPixel(k.dataPoint.x) << 0; e = this.chart.plotArea.y1; g = this.chart.plotArea.y2; this.bounds = { x1: b - h / 2, y1: e, x2: c + h / 2, y2: g }; t = !1; if (this.parent.labels) for ( m = Math.ceil(this.parent.interval), n = 0; n < this.parent.viewportMaximum; n += m ) if (this.parent.labels[n]) t = !0; else { t = !1; break; } if (t) { if ("axisX" === this.parent.type) for ( n = this.parent.convertPixelToValue({ x: a }), f = null, r = 0; r < this.parent.dataSeries.length; r++ ) (f = this.parent.dataSeries[r].getDataPointAtX(n, !0)) && 0 <= f.index && (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.x, }) : u(this.options.label) ? f.dataPoint.label : this.label); } else "dateTime" === this.parent.valueType ? (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.x, }) : u(this.options.label) ? Ca( k.dataPoint.x, this.valueFormatString, this.chart._cultureInfo ) : this.label) : "number" === this.parent.valueType && (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.x, }) : u(this.options.label) ? ba( k.dataPoint.x, this.valueFormatString, this.chart._cultureInfo ) : this.label); l.x = b - l.measureText().width / 2; l.x + l.width > this.chart.bounds.x2 && (l.x = this.chart.bounds.x2 - l.width); l.x < this.chart.bounds.x1 && (l.x = this.chart.bounds.x1); "bottom" === this.parent._position ? (l.y = this.parent.lineCoordinates.y2 + l.fontSize / 2 + 2) : "top" === this.parent._position && (l.y = this.parent.lineCoordinates.y1 - l.height + l.fontSize / 2 + 2); } else if ( "left" === this.parent._position || "right" === this.parent._position ) { !u(this.parent.dataSeries) && 0 < this.parent.dataSeries.length && (n = this.parent.dataSeries[0].axisX.convertPixelToValue({ x: a })); for (r = 0; r < this.parent.dataSeries.length; r++) (f = this.parent.dataSeries[r].getDataPointAtX(n, !0)) && 0 <= f.index && ((f.dataSeries = this.parent.dataSeries[r]), null !== f.dataPoint.y && m.push(f)); if (0 === m.length) return; m.sort(function (a, b) { return a.distance - b.distance; }); r = 0; if ( "rangeColumn" === m[0].dataSeries.type || "rangeArea" === m[0].dataSeries.type || "error" === m[0].dataSeries.type || "rangeSplineArea" === m[0].dataSeries.type || "candlestick" === m[0].dataSeries.type || "ohlc" === m[0].dataSeries.type || "boxAndWhisker" === m[0].dataSeries.type ) for ( f = Math.abs( d - this.parent.convertValueToPixel(m[0].dataPoint.y[0]) ), n = v = 0; n < m.length; n++ ) if (m[n].dataPoint.y && m[n].dataPoint.y.length) for (k = 0; k < m[n].dataPoint.y.length; k++) (v = Math.abs( d - this.parent.convertValueToPixel(m[n].dataPoint.y[k]) )), v < f && ((f = v), (r = n)); else (v = Math.abs( d - this.parent.convertValueToPixel(m[n].dataPoint.y) )), v < f && ((f = v), (r = n)); else if ( "stackedColumn" === m[0].dataSeries.type || "stackedArea" === m[0].dataSeries.type ) for ( f = Math.abs( d - this.parent.convertValueToPixel(m[0].dataPoint.y) ), n = D = v = 0; n < m.length; n++ ) if (m[n].dataPoint.y && m[n].dataPoint.y.length) for (k = 0; k < m[n].dataPoint.y.length; k++) (v = Math.abs( d - this.parent.convertValueToPixel(m[n].dataPoint.y[k]) )), v < f && ((f = v), (r = n)); else (D += m[n].dataPoint.y), (v = Math.abs(d - this.parent.convertValueToPixel(D))), v < f && ((f = v), (r = n)); else if ( "stackedColumn100" === m[0].dataSeries.type || "stackedArea100" === m[0].dataSeries.type ) for ( f = Math.abs( d - this.parent.convertValueToPixel(m[0].dataPoint.y) ), n = t = D = v = 0; n < m.length; n++ ) if (m[n].dataPoint.y && m[n].dataPoint.y.length) for (k = 0; k < m[n].dataPoint.y.length; k++) (v = Math.abs( d - this.parent.convertValueToPixel(m[n].dataPoint.y[k]) )), v < f && ((f = v), (r = n)); else (D += m[n].dataPoint.y), (t = m[n].dataPoint.x.getTime ? m[n].dataPoint.x.getTime() : m[n].dataPoint.x), (t = 100 * (D / m[n].dataSeries.plotUnit.dataPointYSums[t])), (v = Math.abs(d - this.parent.convertValueToPixel(t))), v < f && ((f = v), (r = n)); else for ( f = Math.abs( d - this.parent.convertValueToPixel(m[0].dataPoint.y) ), n = v = 0; n < m.length; n++ ) if (m[n].dataPoint.y && m[n].dataPoint.y.length) for (k = 0; k < m[n].dataPoint.y.length; k++) (v = Math.abs( d - this.parent.convertValueToPixel(m[n].dataPoint.y[k]) )), v < f && ((f = v), (r = n)); else (v = Math.abs( d - this.parent.convertValueToPixel(m[n].dataPoint.y) )), v < f && ((f = v), (r = n)); k = m[r]; b = 0; if ( "rangeColumn" === this.parent.dataSeries[r].type || "rangeArea" === this.parent.dataSeries[r].type || "error" === this.parent.dataSeries[r].type || "rangeSplineArea" === this.parent.dataSeries[r].type || "candlestick" === this.parent.dataSeries[r].type || "ohlc" === this.parent.dataSeries[r].type || "boxAndWhisker" === this.parent.dataSeries[r].type ) { f = Math.abs(d - this.parent.convertValueToPixel(k.dataPoint.y[0])); for (n = v = 0; n < k.dataPoint.y.length; n++) (v = Math.abs( d - this.parent.convertValueToPixel(k.dataPoint.y[n]) )), v < f && ((f = v), (b = n)); m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(k.dataPoint.y[b]) << 0) + 0.5 : this.parent.convertValueToPixel(k.dataPoint.y[b]) << 0; l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.y[b], }) : u(this.options.label) ? ba( k.dataPoint.y[b], this.valueFormatString, this.chart._cultureInfo ) : this.label; } else if ( "stackedColumn" === this.parent.dataSeries[r].type || "stackedArea" === this.parent.dataSeries[r].type ) { f = Math.abs(d - this.parent.convertValueToPixel(m[0].dataPoint.y)); D = v = 0; for (n = r; 0 <= n; n--) (D += m[n].dataPoint.y), (v = Math.abs(d - this.parent.convertValueToPixel(D))), v < f && ((f = v), (b = n)); m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(D) << 0) + 0.5 : this.parent.convertValueToPixel(D) << 0; l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.y, }) : u(this.options.label) ? ba( k.dataPoint.y, this.valueFormatString, this.chart._cultureInfo ) : this.label; } else if ( "stackedColumn100" === this.parent.dataSeries[r].type || "stackedArea100" === this.parent.dataSeries[r].type ) { f = Math.abs(d - this.parent.convertValueToPixel(m[0].dataPoint.y)); D = v = 0; for (n = r; 0 <= n; n--) (D += m[n].dataPoint.y), (t = m[n].dataPoint.x.getTime ? m[n].dataPoint.x.getTime() : m[n].dataPoint.x), (t = 100 * (D / m[n].dataSeries.plotUnit.dataPointYSums[t])), (v = Math.abs(d - this.parent.convertValueToPixel(t))), v < f && ((f = v), (b = n)); m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(t) << 0) + 0.5 : this.parent.convertValueToPixel(t) << 0; l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: t, }) : u(this.options.label) ? ba(t, this.valueFormatString, this.chart._cultureInfo) : this.label; } else "waterfall" === this.parent.dataSeries[r].type ? ((m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel( k.dataSeries.dataPointEOs[k.index].cumulativeSum ) << 0) + 0.5 : this.parent.convertValueToPixel( k.dataSeries.dataPointEOs[k.index].cumulativeSum ) << 0), (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataSeries.dataPointEOs[k.index].cumulativeSum, }) : u(this.options.label) ? ba( k.dataSeries.dataPointEOs[k.index].cumulativeSum, this.valueFormatString, this.chart._cultureInfo ) : this.label)) : ((m = 1 === p.lineWidth % 2 ? (this.parent.convertValueToPixel(k.dataPoint.y) << 0) + 0.5 : this.parent.convertValueToPixel(k.dataPoint.y) << 0), (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: k.dataPoint.y, }) : u(this.options.label) ? ba( k.dataPoint.y, this.valueFormatString, this.chart._cultureInfo ) : this.label)); e = g = m; b = this.chart.plotArea.x1; c = this.chart.plotArea.x2; this.bounds = { x1: b, y1: e - h / 2, x2: c, y2: g + h / 2 }; l.y = g + l.fontSize / 2 - l.measureText().height / 2 + 2; l.y - l.fontSize / 2 < this.chart.bounds.y1 ? (l.y = this.chart.bounds.y1 + l.fontSize / 2 + 2) : l.y + l.measureText().height - l.fontSize / 2 > this.chart.bounds.y2 && (l.y = this.chart.bounds.y2 - l.measureText().height + l.fontSize / 2); "left" === this.parent._position ? (l.x = this.parent.lineCoordinates.x2 - l.measureText().width) : "right" === this.parent._position && (l.x = this.parent.lineCoordinates.x2); } m = null; ("bottom" === this.parent._position || "top" === this.parent._position) && b >= this.parent.convertValueToPixel(this.parent.viewportMinimum) && c <= this.parent.convertValueToPixel(this.parent.viewportMaximum) && (0 < h && (p.moveTo(b, e), p.lineTo(c, g), p.stroke()), p.restore(), !u(l.text) && ("number" === typeof l.text.valueOf() || 0 < l.text.length) && l.render(!0)); ("left" === this.parent._position || "right" === this.parent._position) && g >= this.parent.convertValueToPixel(this.parent.viewportMaximum) && e <= this.parent.convertValueToPixel(this.parent.viewportMinimum) && (0 < h && (p.moveTo(b, e), p.lineTo(c, g), p.stroke()), p.restore(), !u(l.text) && ("number" === typeof l.text.valueOf() || 0 < l.text.length) && l.render(!0)); } else { if ( "bottom" === this.parent._position || "top" === this.parent._position ) (b = c = m = 1 === p.lineWidth % 2 ? (a << 0) + 0.5 : a << 0), (e = this.chart.plotArea.y1), (g = this.chart.plotArea.y2), (this.bounds = { x1: b - h / 2, y1: e, x2: c + h / 2, y2: g }); else if ( "left" === this.parent._position || "right" === this.parent._position ) (e = g = m = 1 === p.lineWidth % 2 ? (d << 0) + 0.5 : d << 0), (b = this.chart.plotArea.x1), (c = this.chart.plotArea.x2), (this.bounds = { x1: b, y1: e - h / 2, x2: c, y2: g + h / 2 }); if ("xySwapped" === this.chart.plotInfo.axisPlacement) if ( "left" === this.parent._position || "right" === this.parent._position ) { t = !1; if (this.parent.labels) for ( m = Math.ceil(this.parent.interval), n = 0; n < this.parent.viewportMaximum; n += m ) if (this.parent.labels[n]) t = !0; else { t = !1; break; } if (t) { if ("axisX" === this.parent.type) for ( n = this.parent.convertPixelToValue({ y: d }), f = null, r = 0; r < this.parent.dataSeries.length; r++ ) (f = this.parent.dataSeries[r].getDataPointAtX(n, !0)) && 0 <= f.index && (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: this.parent.convertPixelToValue(a), }) : u(this.options.label) ? f.dataPoint.label : this.label); } else "dateTime" === this.parent.valueType ? (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: this.parent.convertPixelToValue(d), }) : u(this.options.label) ? Ca( this.parent.convertPixelToValue(d), this.valueFormatString, this.chart._cultureInfo ) : this.label) : "number" === this.parent.valueType && (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: this.parent.convertPixelToValue(d), }) : u(this.options.label) ? ba( this.parent.convertPixelToValue(d), this.valueFormatString, this.chart._cultureInfo ) : this.label); l.y = d + l.fontSize / 2 - l.measureText().height / 2 + 2; l.y - l.fontSize / 2 < this.chart.bounds.y1 ? (l.y = this.chart.bounds.y1 + l.fontSize / 2 + 2) : l.y + l.measureText().height - l.fontSize / 2 > this.chart.bounds.y2 && (l.y = this.chart.bounds.y2 - l.measureText().height + l.fontSize / 2); "left" === this.parent._position ? (l.x = this.parent.lineCoordinates.x1 - l.measureText().width) : "right" === this.parent._position && (l.x = this.parent.lineCoordinates.x2); } else { if ( "bottom" === this.parent._position || "top" === this.parent._position ) (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: this.parent.convertPixelToValue(a), }) : u(this.options.label) ? ba( this.parent.convertPixelToValue(a), this.valueFormatString, this.chart._cultureInfo ) : this.label), (l.x = b - l.measureText().width / 2), l.x + l.width > this.chart.bounds.x2 && (l.x = this.chart.bounds.x2 - l.width), l.x < this.chart.bounds.x1 && (l.x = this.chart.bounds.x1), "bottom" === this.parent._position && (l.y = this.parent.lineCoordinates.y2 + l.fontSize / 2 + 2), "top" === this.parent._position && (l.y = this.parent.lineCoordinates.y1 - l.height + l.fontSize / 2 + 2); } else if ( "bottom" === this.parent._position || "top" === this.parent._position ) { t = !1; k = ""; if (this.parent.labels) for ( m = Math.ceil(this.parent.interval), n = 0; n < this.parent.viewportMaximum; n += m ) if (this.parent.labels[n]) t = !0; else { t = !1; break; } if (t) { if ("axisX" === this.parent.type) for ( n = this.parent.convertPixelToValue({ x: a }), f = null, r = 0; r < this.parent.dataSeries.length; r++ ) (f = this.parent.dataSeries[r].getDataPointAtX(n, !0)) && 0 <= f.index && (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: this.parent.convertPixelToValue(a), }) : u(this.options.label) ? f.dataPoint.label : this.label); } else "dateTime" === this.parent.valueType ? (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: this.parent.convertPixelToValue(a), }) : u(this.options.label) ? Ca( this.parent.convertPixelToValue(a), this.valueFormatString, this.chart._cultureInfo ) : this.label) : "number" === this.parent.valueType && (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: 0 < this.parent.dataSeries.length ? this.parent.convertPixelToValue(a) : "", }) : u(this.options.label) ? ba( this.parent.convertPixelToValue(a), this.valueFormatString, this.chart._cultureInfo ) : this.label); l.x = b - l.measureText().width / 2; l.x + l.width > this.chart.bounds.x2 && (l.x = this.chart.bounds.x2 - l.width); l.x < this.chart.bounds.x1 && (l.x = this.chart.bounds.x1); "bottom" === this.parent._position ? (l.y = this.parent.lineCoordinates.y2 + l.fontSize / 2 + 2) : "top" === this.parent._position && (l.y = this.parent.lineCoordinates.y1 - l.height + l.fontSize / 2 + 2); } else if ( "left" === this.parent._position || "right" === this.parent._position ) (l.text = this.labelFormatter ? this.labelFormatter({ chart: this.chart, axis: this.parent.options, crosshair: this.options, value: this.parent.convertPixelToValue(d), }) : u(this.options.label) ? ba( this.parent.convertPixelToValue(d), this.valueFormatString, this.chart._cultureInfo ) : this.label), (l.y = d + l.fontSize / 2 - l.measureText().height / 2 + 2), l.y - l.fontSize / 2 < this.chart.bounds.y1 ? (l.y = this.chart.bounds.y1 + l.fontSize / 2 + 2) : l.y + l.measureText().height - l.fontSize / 2 > this.chart.bounds.y2 && (l.y = this.chart.bounds.y2 - l.measureText().height + l.fontSize / 2), "left" === this.parent._position ? (l.x = this.parent.lineCoordinates.x2 - l.measureText().width) : "right" === this.parent._position && (l.x = this.parent.lineCoordinates.x2); 0 < h && (p.moveTo(b, e), p.lineTo(c, g), p.stroke()); p.restore(); !u(l.text) && ("number" === typeof l.text.valueOf() || 0 < l.text.length) && l.render(!0); } p.globalAlpha = q; }; qa($, V); $.prototype._initialize = function () { if (this.enabled) { this.container = document.createElement("div"); this.container.setAttribute("class", "canvasjs-chart-tooltip"); this.container.style.position = "absolute"; this.container.style.height = "auto"; this.container.style.boxShadow = "1px 1px 2px 2px rgba(0,0,0,0.1)"; this.container.style.zIndex = "1000"; this.container.style.pointerEvents = "none"; this.container.style.display = "none"; var a; a = '
new Date().getTime() - this._lastUpdated) || ((this._lastUpdated = new Date().getTime()), this.chart.resetOverlayedCanvas(), this._updateToolTip(a, d)); }; $.prototype._updateToolTip = function (a, d, b) { b = "undefined" === typeof b ? !0 : b; this.container || this._initialize(); this.enabled || this.hide(); if (!this.chart.disableToolTip) { if ("undefined" === typeof a || "undefined" === typeof d) { if (isNaN(this._prevX) || isNaN(this._prevY)) return; a = this._prevX; d = this._prevY; } else (this._prevX = a), (this._prevY = d); var c = null, e = null, g = [], k = 0; if ( this.shared && this.enabled && "none" !== this.chart.plotInfo.axisPlacement ) { if ("xySwapped" === this.chart.plotInfo.axisPlacement) { var l = []; if (this.chart.axisX) for (var p = 0; p < this.chart.axisX.length; p++) { for ( var k = this.chart.axisX[p].convertPixelToValue({ y: d }), h = null, c = 0; c < this.chart.axisX[p].dataSeries.length; c++ ) (h = this.chart.axisX[p].dataSeries[c].getDataPointAtX( k, b )) && 0 <= h.index && ((h.dataSeries = this.chart.axisX[p].dataSeries[c]), null !== h.dataPoint.y && l.push(h)); h = null; } if (this.chart.axisX2) for (p = 0; p < this.chart.axisX2.length; p++) { k = this.chart.axisX2[p].convertPixelToValue({ y: d }); h = null; for (c = 0; c < this.chart.axisX2[p].dataSeries.length; c++) (h = this.chart.axisX2[p].dataSeries[c].getDataPointAtX( k, b )) && 0 <= h.index && ((h.dataSeries = this.chart.axisX2[p].dataSeries[c]), null !== h.dataPoint.y && l.push(h)); h = null; } } else { l = []; if (this.chart.axisX) for (p = 0; p < this.chart.axisX.length; p++) for ( k = this.chart.axisX[p].convertPixelToValue({ x: a }), h = null, c = 0; c < this.chart.axisX[p].dataSeries.length; c++ ) (h = this.chart.axisX[p].dataSeries[c].getDataPointAtX( k, b )) && 0 <= h.index && ((h.dataSeries = this.chart.axisX[p].dataSeries[c]), null !== h.dataPoint.y && l.push(h)); if (this.chart.axisX2) for (p = 0; p < this.chart.axisX2.length; p++) for ( k = this.chart.axisX2[p].convertPixelToValue({ x: a }), h = null, c = 0; c < this.chart.axisX2[p].dataSeries.length; c++ ) (h = this.chart.axisX2[p].dataSeries[c].getDataPointAtX( k, b )) && 0 <= h.index && ((h.dataSeries = this.chart.axisX2[p].dataSeries[c]), null !== h.dataPoint.y && l.push(h)); } if (0 === l.length) return; l.sort(function (a, b) { return a.distance - b.distance; }); b = l[0]; for (c = 0; c < l.length; c++) l[c].dataPoint.x.valueOf() === b.dataPoint.x.valueOf() && g.push(l[c]); l = null; } else { if ((h = this.chart.getDataPointAtXY(a, d, b))) (this.currentDataPointIndex = h.dataPointIndex), (this.currentSeriesIndex = h.dataSeries.index); else if (r) if ( ((h = ab(a, d, this.chart._eventManager.ghostCtx)), 0 < h && "undefined" !== typeof this.chart._eventManager.objectMap[h]) ) { h = this.chart._eventManager.objectMap[h]; if ("legendItem" === h.objectType) return; this.currentSeriesIndex = h.dataSeriesIndex; this.currentDataPointIndex = 0 <= h.dataPointIndex ? h.dataPointIndex : -1; } else this.currentDataPointIndex = -1; else this.currentDataPointIndex = -1; if (0 <= this.currentSeriesIndex) { e = this.chart.data[this.currentSeriesIndex]; h = {}; if (0 <= this.currentDataPointIndex) (c = e.dataPoints[this.currentDataPointIndex]), (h.dataSeries = e), (h.dataPoint = c), (h.index = this.currentDataPointIndex), (h.distance = Math.abs(c.x - k)), "waterfall" === e.type && ((h.cumulativeSumYStartValue = e.dataPointEOs[ this.currentDataPointIndex ].cumulativeSumYStartValue), (h.cumulativeSum = e.dataPointEOs[this.currentDataPointIndex].cumulativeSum)); else { if ( !this.enabled || ("line" !== e.type && "stepLine" !== e.type && "spline" !== e.type && "area" !== e.type && "stepArea" !== e.type && "splineArea" !== e.type && "stackedArea" !== e.type && "stackedArea100" !== e.type && "rangeArea" !== e.type && "rangeSplineArea" !== e.type && "candlestick" !== e.type && "ohlc" !== e.type && "boxAndWhisker" !== e.type) ) return; k = e.axisX.convertPixelToValue({ x: a }); h = e.getDataPointAtX(k, b); h.dataSeries = e; this.currentDataPointIndex = h.index; c = h.dataPoint; } if (!u(h.dataPoint.y)) if (h.dataSeries.axisY) if (0 < h.dataPoint.y.length) { for (c = b = 0; c < h.dataPoint.y.length; c++) h.dataPoint.y[c] < h.dataSeries.axisY.viewportMinimum ? b-- : h.dataPoint.y[c] > h.dataSeries.axisY.viewportMaximum && b++; b < h.dataPoint.y.length && b > -h.dataPoint.y.length && g.push(h); } else "column" === e.type || "bar" === e.type ? 0 > h.dataPoint.y ? 0 > h.dataSeries.axisY.viewportMinimum && h.dataSeries.axisY.viewportMaximum >= h.dataPoint.y && g.push(h) : h.dataSeries.axisY.viewportMinimum <= h.dataPoint.y && 0 <= h.dataSeries.axisY.viewportMaximum && g.push(h) : "bubble" === e.type ? ((b = this.chart._eventManager.objectMap[ e.dataPointIds[h.index] ].size / 2), h.dataPoint.y >= h.dataSeries.axisY.viewportMinimum - b && h.dataPoint.y <= h.dataSeries.axisY.viewportMaximum + b && g.push(h)) : "waterfall" === e.type ? ((b = 0), h.cumulativeSumYStartValue < h.dataSeries.axisY.viewportMinimum ? b-- : h.cumulativeSumYStartValue > h.dataSeries.axisY.viewportMaximum && b++, h.cumulativeSum < h.dataSeries.axisY.viewportMinimum ? b-- : h.cumulativeSum > h.dataSeries.axisY.viewportMaximum && b++, 2 > b && -2 < b && g.push(h)) : (0 <= h.dataSeries.type.indexOf("100") || "stackedColumn" === e.type || "stackedBar" === e.type || (h.dataPoint.y >= h.dataSeries.axisY.viewportMinimum && h.dataPoint.y <= h.dataSeries.axisY.viewportMaximum)) && g.push(h); else g.push(h); } } if (0 < g.length && (this.highlightObjects(g), this.enabled)) if ( ((b = ""), (b = this.getToolTipInnerHTML({ entries: g })), null !== b) ) { this.contentDiv.innerHTML = b; b = !1; "none" === this.container.style.display && ((b = !0), (this.container.style.display = "block")); try { (this.contentDiv.style.background = this.backgroundColor ? this.backgroundColor : r ? "rgba(255,255,255,.9)" : "rgb(255,255,255)"), (this.borderColor = "waterfall" === g[0].dataSeries.type ? (this.contentDiv.style.borderRightColor = this.contentDiv.style.borderLeftColor = this.contentDiv.style.borderColor = this.options.borderColor ? this.options.borderColor : g[0].dataPoint.color ? g[0].dataPoint.color : 0 < g[0].dataPoint.y ? g[0].dataSeries.risingColor : g[0].dataSeries.fallingColor) : "error" === g[0].dataSeries.type ? (this.contentDiv.style.borderRightColor = this.contentDiv.style.borderLeftColor = this.contentDiv.style.borderColor = this.options.borderColor ? this.options.borderColor : g[0].dataSeries.color ? g[0].dataSeries.color : g[0].dataSeries._colorSet[ e.index % g[0].dataSeries._colorSet.length ]) : (this.contentDiv.style.borderRightColor = this.contentDiv.style.borderLeftColor = this.contentDiv.style.borderColor = this.options.borderColor ? this.options.borderColor : g[0].dataPoint.color ? g[0].dataPoint.color : g[0].dataSeries.color ? g[0].dataSeries.color : g[0].dataSeries._colorSet[ g[0].index % g[0].dataSeries._colorSet.length ])), (this.contentDiv.style.borderWidth = this.borderThickness || 0 === this.borderThickness ? this.borderThickness + "px" : "2px"), (this.contentDiv.style.borderRadius = this.cornerRadius || 0 === this.cornerRadius ? this.cornerRadius + "px" : "5px"), (this.container.style.borderRadius = this.contentDiv.style.borderRadius), (this.contentDiv.style.fontSize = this.fontSize || 0 === this.fontSize ? this.fontSize + "px" : "14px"), (this.contentDiv.style.color = this.fontColor ? this.fontColor : "#000000"), (this.contentDiv.style.fontFamily = this.fontFamily ? this.fontFamily : "Calibri, Arial, Georgia, serif;"), (this.contentDiv.style.fontWeight = this.fontWeight ? this.fontWeight : "normal"), (this.contentDiv.style.fontStyle = this.fontStyle ? this.fontStyle : r ? "italic" : "normal"); } catch (s) {} "pie" === g[0].dataSeries.type || "doughnut" === g[0].dataSeries.type || "funnel" === g[0].dataSeries.type || "pyramid" === g[0].dataSeries.type || "bar" === g[0].dataSeries.type || "rangeBar" === g[0].dataSeries.type || "stackedBar" === g[0].dataSeries.type || "stackedBar100" === g[0].dataSeries.type ? (a = a - 10 - this.container.clientWidth) : ((a = (g[0].dataSeries.axisX.convertValueToPixel(g[0].dataPoint.x) - this.container.clientWidth) << 0), (a -= 10)); 0 > a && (a += this.container.clientWidth + 20); a + this.container.clientWidth > Math.max(this.chart.container.clientWidth, this.chart.width) && (a = Math.max( 0, Math.max(this.chart.container.clientWidth, this.chart.width) - this.container.clientWidth )); d = 1 !== g.length || this.shared || ("line" !== g[0].dataSeries.type && "stepLine" !== g[0].dataSeries.type && "spline" !== g[0].dataSeries.type && "area" !== g[0].dataSeries.type && "stepArea" !== g[0].dataSeries.type && "splineArea" !== g[0].dataSeries.type) ? "bar" === g[0].dataSeries.type || "rangeBar" === g[0].dataSeries.type || "stackedBar" === g[0].dataSeries.type || "stackedBar100" === g[0].dataSeries.type ? g[0].dataSeries.axisX.convertValueToPixel(g[0].dataPoint.x) : d : g[0].dataSeries.axisY.convertValueToPixel(g[0].dataPoint.y); d = -d + 10; 0 < d + this.container.clientHeight + 5 && (d -= d + this.container.clientHeight + 5 - 0); this.fixMozTransitionDelay(a, d); !this.animationEnabled || b ? this.disableAnimation() : (this.enableAnimation(), (this.container.style.MozTransition = this.mozContainerTransition)); this.container.style.left = a + "px"; this.container.style.bottom = d + "px"; } else this.hide(!1); } }; $.prototype.highlightObjects = function (a) { var d = this.chart.overlaidCanvasCtx; this.chart.resetOverlayedCanvas(); d.clearRect(0, 0, this.chart.width, this.chart.height); d.save(); var b = this.chart.plotArea, c = 0; d.beginPath(); d.rect(b.x1, b.y1, b.x2 - b.x1, b.y2 - b.y1); d.clip(); for (b = 0; b < a.length; b++) { var e = a[b]; if ( (e = this.chart._eventManager.objectMap[ e.dataSeries.dataPointIds[e.index] ]) && e.objectType && "dataPoint" === e.objectType ) { var c = this.chart.data[e.dataSeriesIndex], g = c.dataPoints[e.dataPointIndex], k = e.dataPointIndex; !1 === g.highlightEnabled || (!0 !== c.highlightEnabled && !0 !== g.highlightEnabled) || ("line" === c.type || "stepLine" === c.type || "spline" === c.type || "scatter" === c.type || "area" === c.type || "stepArea" === c.type || "splineArea" === c.type || "stackedArea" === c.type || "stackedArea100" === c.type || "rangeArea" === c.type || "rangeSplineArea" === c.type ? ((g = c.getMarkerProperties( k, e.x1, e.y1, this.chart.overlaidCanvasCtx )), (g.size = Math.max((1.5 * g.size) << 0, 10)), (g.borderColor = g.borderColor || "#FFFFFF"), (g.borderThickness = g.borderThickness || Math.ceil(0.1 * g.size)), ia.drawMarkers([g]), "undefined" !== typeof e.y2 && ((g = c.getMarkerProperties( k, e.x1, e.y2, this.chart.overlaidCanvasCtx )), (g.size = Math.max((1.5 * g.size) << 0, 10)), (g.borderColor = g.borderColor || "#FFFFFF"), (g.borderThickness = g.borderThickness || Math.ceil(0.1 * g.size)), ia.drawMarkers([g]))) : "bubble" === c.type ? ((g = c.getMarkerProperties( k, e.x1, e.y1, this.chart.overlaidCanvasCtx )), (g.size = e.size), (g.color = "white"), (g.borderColor = "white"), (d.globalAlpha = 0.3), ia.drawMarkers([g]), (d.globalAlpha = 1)) : "column" === c.type || "stackedColumn" === c.type || "stackedColumn100" === c.type || "bar" === c.type || "rangeBar" === c.type || "stackedBar" === c.type || "stackedBar100" === c.type || "rangeColumn" === c.type || "waterfall" === c.type ? ea( d, e.x1, e.y1, e.x2, e.y2, "white", 0, null, !1, !1, !1, !1, 0.3 ) : "pie" === c.type || "doughnut" === c.type ? ja( d, e.center, e.radius, "white", c.type, e.startAngle, e.endAngle, 0.3, e.percentInnerRadius ) : "funnel" === c.type || "pyramid" === c.type ? ra(d, e.funnelSection, 0.3, "white") : "candlestick" === c.type ? ((d.globalAlpha = 1), (d.strokeStyle = e.color), (d.lineWidth = 2 * e.borderThickness), (c = 0 === d.lineWidth % 2 ? 0 : 0.5), d.beginPath(), d.moveTo(e.x3 - c, Math.min(e.y2, e.y3)), d.lineTo(e.x3 - c, Math.min(e.y1, e.y4)), d.stroke(), d.beginPath(), d.moveTo(e.x3 - c, Math.max(e.y1, e.y4)), d.lineTo(e.x3 - c, Math.max(e.y2, e.y3)), d.stroke(), ea( d, e.x1, Math.min(e.y1, e.y4), e.x2, Math.max(e.y1, e.y4), "transparent", 2 * e.borderThickness, e.color, !1, !1, !1, !1 ), (d.globalAlpha = 1)) : "ohlc" === c.type ? ((d.globalAlpha = 1), (d.strokeStyle = e.color), (d.lineWidth = 2 * e.borderThickness), (c = 0 === d.lineWidth % 2 ? 0 : 0.5), d.beginPath(), d.moveTo(e.x3 - c, e.y2), d.lineTo(e.x3 - c, e.y3), d.stroke(), d.beginPath(), d.moveTo(e.x3, e.y1), d.lineTo(e.x1, e.y1), d.stroke(), d.beginPath(), d.moveTo(e.x3, e.y4), d.lineTo(e.x2, e.y4), d.stroke(), (d.globalAlpha = 1)) : "boxAndWhisker" === c.type ? (d.save(), (d.globalAlpha = 1), (d.strokeStyle = e.stemColor), (d.lineWidth = 2 * e.stemThickness), 0 < e.stemThickness && (d.beginPath(), d.moveTo(e.x3, e.y2 + e.borderThickness / 2), d.lineTo(e.x3, e.y1 + e.whiskerThickness / 2), d.stroke(), d.beginPath(), d.moveTo(e.x3, e.y4 - e.whiskerThickness / 2), d.lineTo(e.x3, e.y3 - e.borderThickness / 2), d.stroke()), d.beginPath(), ea( d, e.x1 - e.borderThickness / 2, Math.max( e.y2 + e.borderThickness / 2, e.y3 + e.borderThickness / 2 ), e.x2 + e.borderThickness / 2, Math.min( e.y2 - e.borderThickness / 2, e.y3 - e.borderThickness / 2 ), "transparent", e.borderThickness, e.color, !1, !1, !1, !1 ), (d.globalAlpha = 1), (d.strokeStyle = e.whiskerColor), (d.lineWidth = 2 * e.whiskerThickness), 0 < e.whiskerThickness && (d.beginPath(), d.moveTo(Math.floor(e.x3 - e.whiskerLength / 2), e.y4), d.lineTo(Math.ceil(e.x3 + e.whiskerLength / 2), e.y4), d.stroke(), d.beginPath(), d.moveTo(Math.floor(e.x3 - e.whiskerLength / 2), e.y1), d.lineTo(Math.ceil(e.x3 + e.whiskerLength / 2), e.y1), d.stroke()), (d.globalAlpha = 1), (d.strokeStyle = e.lineColor), (d.lineWidth = 2 * e.lineThickness), 0 < e.lineThickness && (d.beginPath(), d.moveTo(e.x1, e.y5), d.lineTo(e.x2, e.y5), d.stroke()), d.restore(), (d.globalAlpha = 1)) : "error" === c.type && E( d, e.x1, e.y1, e.x2, e.y2, "white", e.whiskerProperties, e.stemProperties, e.isXYSwapped, 0.3 )); } } d.restore(); d.globalAlpha = 1; d.beginPath(); }; $.prototype.getToolTipInnerHTML = function (a) { a = a.entries; for ( var d = null, b = null, c = null, e = 0, g = "", k = !0, l = 0; l < a.length; l++ ) if (a[l].dataSeries.toolTipContent || a[l].dataPoint.toolTipContent) { k = !1; break; } if ( k && ((this.content && "function" === typeof this.content) || this.contentFormatter) ) (a = { chart: this.chart, toolTip: this.options, entries: a }), (d = this.contentFormatter ? this.contentFormatter(a) : this.content(a)); else if (this.shared && "none" !== this.chart.plotInfo.axisPlacement) { for (var p = null, h = "", l = 0; l < a.length; l++) (b = a[l].dataSeries), (c = a[l].dataPoint), (e = a[l].index), (g = ""), 0 === l && k && !this.content && (this.chart.axisX && 0 < this.chart.axisX.length ? (h += "undefined" !== typeof this.chart.axisX[0].labels[c.x] ? this.chart.axisX[0].labels[c.x] : "{x}") : this.chart.axisX2 && 0 < this.chart.axisX2.length && (h += "undefined" !== typeof this.chart.axisX2[0].labels[c.x] ? this.chart.axisX2[0].labels[c.x] : "{x}"), (h += "
"), (h = this.chart.replaceKeywordsWithValue(h, c, b, e))), null === c.toolTipContent || ("undefined" === typeof c.toolTipContent && null === b.options.toolTipContent) || ("line" === b.type || "stepLine" === b.type || "spline" === b.type || "area" === b.type || "stepArea" === b.type || "splineArea" === b.type || "column" === b.type || "bar" === b.type || "scatter" === b.type || "stackedColumn" === b.type || "stackedColumn100" === b.type || "stackedBar" === b.type || "stackedBar100" === b.type || "stackedArea" === b.type || "stackedArea100" === b.type || "waterfall" === b.type ? (this.chart.axisX && 1 < this.chart.axisX.length && (g += p != b.axisXIndex ? b.axisX.title ? b.axisX.title + "
" : "X:{axisXIndex}
" : ""), (g += c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "{name}:  {y}"), (p = b.axisXIndex)) : "bubble" === b.type ? (this.chart.axisX && 1 < this.chart.axisX.length && (g += p != b.axisXIndex ? b.axisX.title ? b.axisX.title + "
" : "X:{axisXIndex}
" : ""), (g += c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "{name}:  {y},   {z}")) : "rangeColumn" === b.type || "rangeBar" === b.type || "rangeArea" === b.type || "rangeSplineArea" === b.type || "error" === b.type ? (this.chart.axisX && 1 < this.chart.axisX.length && (g += p != b.axisXIndex ? b.axisX.title ? b.axisX.title + "
" : "X:{axisXIndex}
" : ""), (g += c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "{name}:  {y[0]}, {y[1]}")) : "candlestick" === b.type || "ohlc" === b.type ? (this.chart.axisX && 1 < this.chart.axisX.length && (g += p != b.axisXIndex ? b.axisX.title ? b.axisX.title + "
" : "X:{axisXIndex}
" : ""), (g += c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "{name}:
Open:   {y[0]}
High:    {y[1]}
Low:   {y[2]}
Close:   {y[3]}")) : "boxAndWhisker" === b.type && (this.chart.axisX && 1 < this.chart.axisX.length && (g += p != b.axisXIndex ? b.axisX.title ? b.axisX.title + "
" : "X:{axisXIndex}
" : ""), (g += c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "{name}:
Minimum:   {y[0]}
Q1:               {y[1]}
Q2:               {y[4]}
Q3:               {y[2]}
Maximum:  {y[3]}")), null === d && (d = ""), !0 === this.reversed ? ((d = this.chart.replaceKeywordsWithValue(g, c, b, e) + d), l < a.length - 1 && (d = "
" + d)) : ((d += this.chart.replaceKeywordsWithValue(g, c, b, e)), l < a.length - 1 && (d += "
"))); null !== d && (d = h + d); } else { b = a[0].dataSeries; c = a[0].dataPoint; e = a[0].index; if ( null === c.toolTipContent || ("undefined" === typeof c.toolTipContent && null === b.options.toolTipContent) ) return null; "line" === b.type || "stepLine" === b.type || "spline" === b.type || "area" === b.type || "stepArea" === b.type || "splineArea" === b.type || "column" === b.type || "bar" === b.type || "scatter" === b.type || "stackedColumn" === b.type || "stackedColumn100" === b.type || "stackedBar" === b.type || "stackedBar100" === b.type || "stackedArea" === b.type || "stackedArea100" === b.type || "waterfall" === b.type ? (g = c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "" + (c.label ? "{label}" : "{x}") + ":  {y}") : "bubble" === b.type ? (g = c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "" + (c.label ? "{label}" : "{x}") + ":  {y},   {z}") : "pie" === b.type || "doughnut" === b.type || "funnel" === b.type || "pyramid" === b.type ? (g = c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "" + (c.name ? "{name}:  " : c.label ? "{label}:  " : "") + "{y}") : "rangeColumn" === b.type || "rangeBar" === b.type || "rangeArea" === b.type || "rangeSplineArea" === b.type || "error" === b.type ? (g = c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "" + (c.label ? "{label}" : "{x}") + " :  {y[0]},  {y[1]}") : "candlestick" === b.type || "ohlc" === b.type ? (g = c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "" + (c.label ? "{label}" : "{x}") + "
Open:   {y[0]}
High:    {y[1]}
Low:     {y[2]}
Close:   {y[3]}") : "boxAndWhisker" === b.type && (g = c.toolTipContent ? c.toolTipContent : b.toolTipContent ? b.toolTipContent : this.content && "function" !== typeof this.content ? this.content : "" + (c.label ? "{label}" : "{x}") + "
Minimum:   {y[0]}
Q1:               {y[1]}
Q2:               {y[4]}
Q3:               {y[2]}
Maximum:  {y[3]}"); null === d && (d = ""); d += this.chart.replaceKeywordsWithValue(g, c, b, e); } return d; }; $.prototype.enableAnimation = function () { if (!this.container.style.WebkitTransition) { var a = this.getContainerTransition(this.containerTransitionDuration); this.container.style.WebkitTransition = a; this.container.style.MsTransition = a; this.container.style.transition = a; this.container.style.MozTransition = this.mozContainerTransition; } }; $.prototype.disableAnimation = function () { this.container.style.WebkitTransition && ((this.container.style.WebkitTransition = ""), (this.container.style.MozTransition = ""), (this.container.style.MsTransition = ""), (this.container.style.transition = "")); }; $.prototype.hide = function (a) { this.container && ((this.container.style.display = "none"), (this.currentSeriesIndex = -1), (this._prevY = this._prevX = NaN), ("undefined" === typeof a || a) && this.chart.resetOverlayedCanvas()); }; $.prototype.show = function (a, d, b) { this._updateToolTip(a, d, "undefined" === typeof b ? !1 : b); }; $.prototype.fixMozTransitionDelay = function (a, d) { if (20 < this.chart._eventManager.lastObjectId) this.mozContainerTransition = this.getContainerTransition(0); else { var b = parseFloat(this.container.style.left), b = isNaN(b) ? 0 : b, c = parseFloat(this.container.style.bottom), c = isNaN(c) ? 0 : c; 10 < Math.sqrt(Math.pow(b - a, 2) + Math.pow(c - d, 2)) ? (this.mozContainerTransition = this.getContainerTransition(0.1)) : (this.mozContainerTransition = this.getContainerTransition(0)); } }; $.prototype.getContainerTransition = function (a) { return "left " + a + "s ease-out 0s, bottom " + a + "s ease-out 0s"; }; ha.prototype.reset = function () { this.lastObjectId = 0; this.objectMap = []; this.rectangularRegionEventSubscriptions = []; this.previousDataPointEventObject = null; this.eventObjects = []; r && (this.ghostCtx.clearRect(0, 0, this.chart.width, this.chart.height), this.ghostCtx.beginPath()); }; ha.prototype.getNewObjectTrackingId = function () { return ++this.lastObjectId; }; ha.prototype.mouseEventHandler = function (a) { if ("mousemove" === a.type || "click" === a.type) { var d = [], b = Ra(a), c = null; if ( (c = this.chart.getObjectAtXY(b.x, b.y, !1)) && "undefined" !== typeof this.objectMap[c] ) if (((c = this.objectMap[c]), "dataPoint" === c.objectType)) { var e = this.chart.data[c.dataSeriesIndex], g = e.dataPoints[c.dataPointIndex], k = c.dataPointIndex; c.eventParameter = { x: b.x, y: b.y, dataPoint: g, dataSeries: e.options, dataPointIndex: k, dataSeriesIndex: e.index, chart: this.chart, }; c.eventContext = { context: g, userContext: g, mouseover: "mouseover", mousemove: "mousemove", mouseout: "mouseout", click: "click", }; d.push(c); c = this.objectMap[e.id]; c.eventParameter = { x: b.x, y: b.y, dataPoint: g, dataSeries: e.options, dataPointIndex: k, dataSeriesIndex: e.index, chart: this.chart, }; c.eventContext = { context: e, userContext: e.options, mouseover: "mouseover", mousemove: "mousemove", mouseout: "mouseout", click: "click", }; d.push(this.objectMap[e.id]); } else "legendItem" === c.objectType && ((e = this.chart.data[c.dataSeriesIndex]), (g = null !== c.dataPointIndex ? e.dataPoints[c.dataPointIndex] : null), (c.eventParameter = { x: b.x, y: b.y, dataSeries: e.options, dataPoint: g, dataPointIndex: c.dataPointIndex, dataSeriesIndex: c.dataSeriesIndex, chart: this.chart, }), (c.eventContext = { context: this.chart.legend, userContext: this.chart.legend.options, mouseover: "itemmouseover", mousemove: "itemmousemove", mouseout: "itemmouseout", click: "itemclick", }), d.push(c)); e = []; for (b = 0; b < this.mouseoveredObjectMaps.length; b++) { g = !0; for (c = 0; c < d.length; c++) if (d[c].id === this.mouseoveredObjectMaps[b].id) { g = !1; break; } g ? this.fireEvent(this.mouseoveredObjectMaps[b], "mouseout", a) : e.push(this.mouseoveredObjectMaps[b]); } this.mouseoveredObjectMaps = e; for (b = 0; b < d.length; b++) { e = !1; for (c = 0; c < this.mouseoveredObjectMaps.length; c++) if (d[b].id === this.mouseoveredObjectMaps[c].id) { e = !0; break; } e || (this.fireEvent(d[b], "mouseover", a), this.mouseoveredObjectMaps.push(d[b])); "click" === a.type ? this.fireEvent(d[b], "click", a) : "mousemove" === a.type && this.fireEvent(d[b], "mousemove", a); } } }; ha.prototype.fireEvent = function (a, d, b) { if (a && d) { var c = a.eventParameter, e = a.eventContext, g = a.eventContext.userContext; g && e && g[e[d]] && g[e[d]].call(g, c); "mouseout" !== d ? g.cursor && g.cursor !== b.target.style.cursor && (b.target.style.cursor = g.cursor) : ((b.target.style.cursor = this.chart._defaultCursor), delete a.eventParameter, delete a.eventContext); "click" === d && "dataPoint" === a.objectType && this.chart.pieDoughnutClickHandler && this.chart.pieDoughnutClickHandler.call( this.chart.data[a.dataSeriesIndex], c ); "click" === d && "dataPoint" === a.objectType && this.chart.funnelPyramidClickHandler && this.chart.funnelPyramidClickHandler.call( this.chart.data[a.dataSeriesIndex], c ); } }; ga.prototype.animate = function (a, d, b, c, e) { var g = this; this.chart.isAnimating = !0; e = e || M.easing.linear; b && this.animations.push({ startTime: new Date().getTime() + (a ? a : 0), duration: d, animationCallback: b, onComplete: c, }); for (a = []; 0 < this.animations.length; ) if ( ((d = this.animations.shift()), (b = new Date().getTime()), (c = 0), d.startTime <= b && ((c = e(Math.min(b - d.startTime, d.duration), 0, 1, d.duration)), (c = Math.min(c, 1)), isNaN(c) || !isFinite(c)) && (c = 1), 1 > c && a.push(d), d.animationCallback(c), 1 <= c && d.onComplete) ) d.onComplete(); this.animations = a; 0 < this.animations.length ? (this.animationRequestId = this.chart.requestAnimFrame.call( window, function () { g.animate.call(g); } )) : (this.chart.isAnimating = !1); }; ga.prototype.cancelAllAnimations = function () { this.animations = []; this.animationRequestId && this.chart.cancelRequestAnimFrame.call(window, this.animationRequestId); this.animationRequestId = null; this.chart.isAnimating = !1; }; var M = { yScaleAnimation: function (a, d) { if (0 !== a) { var b = d.dest, c = d.source.canvas, e = d.animationBase; b.drawImage( c, 0, 0, c.width, c.height, 0, e - e * a, b.canvas.width / W, (a * b.canvas.height) / W ); } }, xScaleAnimation: function (a, d) { if (0 !== a) { var b = d.dest, c = d.source.canvas, e = d.animationBase; b.drawImage( c, 0, 0, c.width, c.height, e - e * a, 0, (a * b.canvas.width) / W, b.canvas.height / W ); } }, xClipAnimation: function (a, d) { if (0 !== a) { var b = d.dest, c = d.source.canvas; b.save(); 0 < a && b.drawImage( c, 0, 0, c.width * a, c.height, 0, 0, (c.width * a) / W, c.height / W ); b.restore(); } }, fadeInAnimation: function (a, d) { if (0 !== a) { var b = d.dest, c = d.source.canvas; b.save(); b.globalAlpha = a; b.drawImage( c, 0, 0, c.width, c.height, 0, 0, b.canvas.width / W, b.canvas.height / W ); b.restore(); } }, easing: { linear: function (a, d, b, c) { return (b * a) / c + d; }, easeOutQuad: function (a, d, b, c) { return -b * (a /= c) * (a - 2) + d; }, easeOutQuart: function (a, d, b, c) { return -b * ((a = a / c - 1) * a * a * a - 1) + d; }, easeInQuad: function (a, d, b, c) { return b * (a /= c) * a + d; }, easeInQuart: function (a, d, b, c) { return b * (a /= c) * a * a * a + d; }, }, }, ia = { drawMarker: function (a, d, b, c, e, g, k, l) { if (b) { var p = 1; b.fillStyle = g ? g : "#000000"; b.strokeStyle = k ? k : "#000000"; b.lineWidth = l ? l : 0; b.setLineDash && b.setLineDash(R("solid", l)); "circle" === c ? (b.moveTo(a, d), b.beginPath(), b.arc(a, d, e / 2, 0, 2 * Math.PI, !1), g && b.fill(), l && (k ? b.stroke() : ((p = b.globalAlpha), (b.globalAlpha = 0.15), (b.strokeStyle = "black"), b.stroke(), (b.globalAlpha = p)))) : "square" === c ? (b.beginPath(), b.rect(a - e / 2, d - e / 2, e, e), g && b.fill(), l && (k ? b.stroke() : ((p = b.globalAlpha), (b.globalAlpha = 0.15), (b.strokeStyle = "black"), b.stroke(), (b.globalAlpha = p)))) : "triangle" === c ? (b.beginPath(), b.moveTo(a - e / 2, d + e / 2), b.lineTo(a + e / 2, d + e / 2), b.lineTo(a, d - e / 2), b.closePath(), g && b.fill(), l && (k ? b.stroke() : ((p = b.globalAlpha), (b.globalAlpha = 0.15), (b.strokeStyle = "black"), b.stroke(), (b.globalAlpha = p))), b.beginPath()) : "cross" === c && ((b.strokeStyle = g), (b.lineWidth = e / 4), b.beginPath(), b.moveTo(a - e / 2, d - e / 2), b.lineTo(a + e / 2, d + e / 2), b.stroke(), b.moveTo(a + e / 2, d - e / 2), b.lineTo(a - e / 2, d + e / 2), b.stroke()); } }, drawMarkers: function (a) { for (var d = 0; d < a.length; d++) { var b = a[d]; ia.drawMarker( b.x, b.y, b.ctx, b.type, b.size, b.color, b.borderColor, b.borderThickness ); } }, }; return p; })(); Na.Chart.version = "v2.3.1 GA"; })(); /* excanvas is used to support IE678 which do not implement HTML5 Canvas Element. You can safely remove the following excanvas code if you don't need to support older browsers. Copyright 2006 Google Inc. https://code.google.com/p/explorercanvas/ Licensed under the Apache License, Version 2.0 */ document.createElement("canvas").getContext || (function () { function V() { return this.context_ || (this.context_ = new C(this)); } function W(a, b, c) { var g = M.call(arguments, 2); return function () { return a.apply(b, g.concat(M.call(arguments))); }; } function N(a) { return String(a).replace(/&/g, "&").replace(/"/g, """); } function O(a) { a.namespaces.g_vml_ || a.namespaces.add( "g_vml_", "urn:schemas-microsoft-com:vml", "#default#VML" ); a.namespaces.g_o_ || a.namespaces.add( "g_o_", "urn:schemas-microsoft-com:office:office", "#default#VML" ); a.styleSheets.ex_canvas_ || ((a = a.createStyleSheet()), (a.owningElement.id = "ex_canvas_"), (a.cssText = "canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}")); } function X(a) { var b = a.srcElement; switch (a.propertyName) { case "width": b.getContext().clearRect(); b.style.width = b.attributes.width.nodeValue + "px"; b.firstChild.style.width = b.clientWidth + "px"; break; case "height": b.getContext().clearRect(), (b.style.height = b.attributes.height.nodeValue + "px"), (b.firstChild.style.height = b.clientHeight + "px"); } } function Y(a) { a = a.srcElement; a.firstChild && ((a.firstChild.style.width = a.clientWidth + "px"), (a.firstChild.style.height = a.clientHeight + "px")); } function D() { return [ [1, 0, 0], [0, 1, 0], [0, 0, 1], ]; } function t(a, b) { for (var c = D(), g = 0; 3 > g; g++) for (var e = 0; 3 > e; e++) { for (var f = 0, d = 0; 3 > d; d++) f += a[g][d] * b[d][e]; c[g][e] = f; } return c; } function P(a, b) { b.fillStyle = a.fillStyle; b.lineCap = a.lineCap; b.lineJoin = a.lineJoin; b.lineWidth = a.lineWidth; b.miterLimit = a.miterLimit; b.shadowBlur = a.shadowBlur; b.shadowColor = a.shadowColor; b.shadowOffsetX = a.shadowOffsetX; b.shadowOffsetY = a.shadowOffsetY; b.strokeStyle = a.strokeStyle; b.globalAlpha = a.globalAlpha; b.font = a.font; b.textAlign = a.textAlign; b.textBaseline = a.textBaseline; b.arcScaleX_ = a.arcScaleX_; b.arcScaleY_ = a.arcScaleY_; b.lineScale_ = a.lineScale_; } function Q(a) { var b = a.indexOf("(", 3), c = a.indexOf(")", b + 1), b = a.substring(b + 1, c).split(","); if (4 != b.length || "a" != a.charAt(3)) b[3] = 1; return b; } function E(a, b, c) { return Math.min(c, Math.max(b, a)); } function F(a, b, c) { 0 > c && c++; 1 < c && c--; return 1 > 6 * c ? a + 6 * (b - a) * c : 1 > 2 * c ? b : 2 > 3 * c ? a + 6 * (b - a) * (2 / 3 - c) : a; } function G(a) { if (a in H) return H[a]; var b, c = 1; a = String(a); if ("#" == a.charAt(0)) b = a; else if (/^rgb/.test(a)) { c = Q(a); b = "#"; for (var g, e = 0; 3 > e; e++) (g = -1 != c[e].indexOf("%") ? Math.floor(255 * (parseFloat(c[e]) / 100)) : +c[e]), (b += v[E(g, 0, 255)]); c = +c[3]; } else if (/^hsl/.test(a)) { e = c = Q(a); b = (parseFloat(e[0]) / 360) % 360; 0 > b && b++; g = E(parseFloat(e[1]) / 100, 0, 1); e = E(parseFloat(e[2]) / 100, 0, 1); if (0 == g) g = e = b = e; else { var f = 0.5 > e ? e * (1 + g) : e + g - e * g, d = 2 * e - f; g = F(d, f, b + 1 / 3); e = F(d, f, b); b = F(d, f, b - 1 / 3); } b = "#" + v[Math.floor(255 * g)] + v[Math.floor(255 * e)] + v[Math.floor(255 * b)]; c = c[3]; } else b = Z[a] || a; return (H[a] = { color: b, alpha: c }); } function C(a) { this.m_ = D(); this.mStack_ = []; this.aStack_ = []; this.currentPath_ = []; this.fillStyle = this.strokeStyle = "#000"; this.lineWidth = 1; this.lineJoin = "miter"; this.lineCap = "butt"; this.miterLimit = 1 * q; this.globalAlpha = 1; this.font = "10px sans-serif"; this.textAlign = "left"; this.textBaseline = "alphabetic"; this.canvas = a; var b = "width:" + a.clientWidth + "px;height:" + a.clientHeight + "px;overflow:hidden;position:absolute", c = a.ownerDocument.createElement("div"); c.style.cssText = b; a.appendChild(c); b = c.cloneNode(!1); b.style.backgroundColor = "red"; b.style.filter = "alpha(opacity=0)"; a.appendChild(b); this.element_ = c; this.lineScale_ = this.arcScaleY_ = this.arcScaleX_ = 1; } function R(a, b, c, g) { a.currentPath_.push({ type: "bezierCurveTo", cp1x: b.x, cp1y: b.y, cp2x: c.x, cp2y: c.y, x: g.x, y: g.y, }); a.currentX_ = g.x; a.currentY_ = g.y; } function S(a, b) { var c = G(a.strokeStyle), g = c.color, c = c.alpha * a.globalAlpha, e = a.lineScale_ * a.lineWidth; 1 > e && (c *= e); b.push( "' ); } function T(a, b, c, g) { var e = a.fillStyle, f = a.arcScaleX_, d = a.arcScaleY_, k = g.x - c.x, n = g.y - c.y; if (e instanceof w) { var h = 0, l = (g = 0), u = 0, m = 1; if ("gradient" == e.type_) { h = e.x1_ / f; c = e.y1_ / d; var p = s(a, e.x0_ / f, e.y0_ / d), h = s(a, h, c), h = (180 * Math.atan2(h.x - p.x, h.y - p.y)) / Math.PI; 0 > h && (h += 360); 1e-6 > h && (h = 0); } else (p = s(a, e.x0_, e.y0_)), (g = (p.x - c.x) / k), (l = (p.y - c.y) / n), (k /= f * q), (n /= d * q), (m = x.max(k, n)), (u = (2 * e.r0_) / m), (m = (2 * e.r1_) / m - u); f = e.colors_; f.sort(function (a, b) { return a.offset - b.offset; }); d = f.length; p = f[0].color; c = f[d - 1].color; k = f[0].alpha * a.globalAlpha; a = f[d - 1].alpha * a.globalAlpha; for (var n = [], r = 0; r < d; r++) { var t = f[r]; n.push(t.offset * m + u + " " + t.color); } b.push( '' ); } else e instanceof I ? k && n && b.push( "' ) : ((e = G(a.fillStyle)), b.push( '' )); } function s(a, b, c) { a = a.m_; return { x: q * (b * a[0][0] + c * a[1][0] + a[2][0]) - r, y: q * (b * a[0][1] + c * a[1][1] + a[2][1]) - r, }; } function z(a, b, c) { isFinite(b[0][0]) && isFinite(b[0][1]) && isFinite(b[1][0]) && isFinite(b[1][1]) && isFinite(b[2][0]) && isFinite(b[2][1]) && ((a.m_ = b), c && (a.lineScale_ = aa(ba(b[0][0] * b[1][1] - b[0][1] * b[1][0])))); } function w(a) { this.type_ = a; this.r1_ = this.y1_ = this.x1_ = this.r0_ = this.y0_ = this.x0_ = 0; this.colors_ = []; } function I(a, b) { if (!a || 1 != a.nodeType || "IMG" != a.tagName) throw new A("TYPE_MISMATCH_ERR"); if ("complete" != a.readyState) throw new A("INVALID_STATE_ERR"); switch (b) { case "repeat": case null: case "": this.repetition_ = "repeat"; break; case "repeat-x": case "repeat-y": case "no-repeat": this.repetition_ = b; break; default: throw new A("SYNTAX_ERR"); } this.src_ = a.src; this.width_ = a.width; this.height_ = a.height; } function A(a) { this.code = this[a]; this.message = a + ": DOM Exception " + this.code; } var x = Math, k = x.round, J = x.sin, K = x.cos, ba = x.abs, aa = x.sqrt, q = 10, r = q / 2; navigator.userAgent.match(/MSIE ([\d.]+)?/); var M = Array.prototype.slice; O(document); var U = { init: function (a) { a = a || document; a.createElement("canvas"); a.attachEvent("onreadystatechange", W(this.init_, this, a)); }, init_: function (a) { a = a.getElementsByTagName("canvas"); for (var b = 0; b < a.length; b++) this.initElement(a[b]); }, initElement: function (a) { if (!a.getContext) { a.getContext = V; O(a.ownerDocument); a.innerHTML = ""; a.attachEvent("onpropertychange", X); a.attachEvent("onresize", Y); var b = a.attributes; b.width && b.width.specified ? (a.style.width = b.width.nodeValue + "px") : (a.width = a.clientWidth); b.height && b.height.specified ? (a.style.height = b.height.nodeValue + "px") : (a.height = a.clientHeight); } return a; }, }; U.init(); for (var v = [], d = 0; 16 > d; d++) for (var B = 0; 16 > B; B++) v[16 * d + B] = d.toString(16) + B.toString(16); var Z = { aliceblue: "#F0F8FF", antiquewhite: "#FAEBD7", aquamarine: "#7FFFD4", azure: "#F0FFFF", beige: "#F5F5DC", bisque: "#FFE4C4", black: "#000000", blanchedalmond: "#FFEBCD", blueviolet: "#8A2BE2", brown: "#A52A2A", burlywood: "#DEB887", cadetblue: "#5F9EA0", chartreuse: "#7FFF00", chocolate: "#D2691E", coral: "#FF7F50", cornflowerblue: "#6495ED", cornsilk: "#FFF8DC", crimson: "#DC143C", cyan: "#00FFFF", darkblue: "#00008B", darkcyan: "#008B8B", darkgoldenrod: "#B8860B", darkgray: "#A9A9A9", darkgreen: "#006400", darkgrey: "#A9A9A9", darkkhaki: "#BDB76B", darkmagenta: "#8B008B", darkolivegreen: "#556B2F", darkorange: "#FF8C00", darkorchid: "#9932CC", darkred: "#8B0000", darksalmon: "#E9967A", darkseagreen: "#8FBC8F", darkslateblue: "#483D8B", darkslategray: "#2F4F4F", darkslategrey: "#2F4F4F", darkturquoise: "#00CED1", darkviolet: "#9400D3", deeppink: "#FF1493", deepskyblue: "#00BFFF", dimgray: "#696969", dimgrey: "#696969", dodgerblue: "#1E90FF", firebrick: "#B22222", floralwhite: "#FFFAF0", forestgreen: "#228B22", gainsboro: "#DCDCDC", ghostwhite: "#F8F8FF", gold: "#FFD700", goldenrod: "#DAA520", grey: "#808080", greenyellow: "#ADFF2F", honeydew: "#F0FFF0", hotpink: "#FF69B4", indianred: "#CD5C5C", indigo: "#4B0082", ivory: "#FFFFF0", khaki: "#F0E68C", lavender: "#E6E6FA", lavenderblush: "#FFF0F5", lawngreen: "#7CFC00", lemonchiffon: "#FFFACD", lightblue: "#ADD8E6", lightcoral: "#F08080", lightcyan: "#E0FFFF", lightgoldenrodyellow: "#FAFAD2", lightgreen: "#90EE90", lightgrey: "#D3D3D3", lightpink: "#FFB6C1", lightsalmon: "#FFA07A", lightseagreen: "#20B2AA", lightskyblue: "#87CEFA", lightslategray: "#778899", lightslategrey: "#778899", lightsteelblue: "#B0C4DE", lightyellow: "#FFFFE0", limegreen: "#32CD32", linen: "#FAF0E6", magenta: "#FF00FF", mediumaquamarine: "#66CDAA", mediumblue: "#0000CD", mediumorchid: "#BA55D3", mediumpurple: "#9370DB", mediumseagreen: "#3CB371", mediumslateblue: "#7B68EE", mediumspringgreen: "#00FA9A", mediumturquoise: "#48D1CC", mediumvioletred: "#C71585", midnightblue: "#191970", mintcream: "#F5FFFA", mistyrose: "#FFE4E1", moccasin: "#FFE4B5", navajowhite: "#FFDEAD", oldlace: "#FDF5E6", olivedrab: "#6B8E23", orange: "#FFA500", orangered: "#FF4500", orchid: "#DA70D6", palegoldenrod: "#EEE8AA", palegreen: "#98FB98", paleturquoise: "#AFEEEE", palevioletred: "#DB7093", papayawhip: "#FFEFD5", peachpuff: "#FFDAB9", peru: "#CD853F", pink: "#FFC0CB", plum: "#DDA0DD", powderblue: "#B0E0E6", rosybrown: "#BC8F8F", royalblue: "#4169E1", saddlebrown: "#8B4513", salmon: "#FA8072", sandybrown: "#F4A460", seagreen: "#2E8B57", seashell: "#FFF5EE", sienna: "#A0522D", skyblue: "#87CEEB", slateblue: "#6A5ACD", slategray: "#708090", slategrey: "#708090", snow: "#FFFAFA", springgreen: "#00FF7F", steelblue: "#4682B4", tan: "#D2B48C", thistle: "#D8BFD8", tomato: "#FF6347", turquoise: "#40E0D0", violet: "#EE82EE", wheat: "#F5DEB3", whitesmoke: "#F5F5F5", yellowgreen: "#9ACD32", }, H = {}, L = {}, $ = { butt: "flat", round: "round" }, d = C.prototype; d.clearRect = function () { this.textMeasureEl_ && (this.textMeasureEl_.removeNode(!0), (this.textMeasureEl_ = null)); this.element_.innerHTML = ""; }; d.beginPath = function () { this.currentPath_ = []; }; d.moveTo = function (a, b) { var c = s(this, a, b); this.currentPath_.push({ type: "moveTo", x: c.x, y: c.y }); this.currentX_ = c.x; this.currentY_ = c.y; }; d.lineTo = function (a, b) { var c = s(this, a, b); this.currentPath_.push({ type: "lineTo", x: c.x, y: c.y }); this.currentX_ = c.x; this.currentY_ = c.y; }; d.bezierCurveTo = function (a, b, c, g, e, f) { e = s(this, e, f); a = s(this, a, b); c = s(this, c, g); R(this, a, c, e); }; d.quadraticCurveTo = function (a, b, c, g) { a = s(this, a, b); c = s(this, c, g); g = { x: this.currentX_ + (2 / 3) * (a.x - this.currentX_), y: this.currentY_ + (2 / 3) * (a.y - this.currentY_), }; R( this, g, { x: g.x + (c.x - this.currentX_) / 3, y: g.y + (c.y - this.currentY_) / 3, }, c ); }; d.arc = function (a, b, c, g, e, f) { c *= q; var d = f ? "at" : "wa", k = a + K(g) * c - r, n = b + J(g) * c - r; g = a + K(e) * c - r; e = b + J(e) * c - r; k != g || f || (k += 0.125); a = s(this, a, b); k = s(this, k, n); g = s(this, g, e); this.currentPath_.push({ type: d, x: a.x, y: a.y, radius: c, xStart: k.x, yStart: k.y, xEnd: g.x, yEnd: g.y, }); }; d.rect = function (a, b, c, g) { this.moveTo(a, b); this.lineTo(a + c, b); this.lineTo(a + c, b + g); this.lineTo(a, b + g); this.closePath(); }; d.strokeRect = function (a, b, c, g) { var e = this.currentPath_; this.beginPath(); this.moveTo(a, b); this.lineTo(a + c, b); this.lineTo(a + c, b + g); this.lineTo(a, b + g); this.closePath(); this.stroke(); this.currentPath_ = e; }; d.fillRect = function (a, b, c, g) { var e = this.currentPath_; this.beginPath(); this.moveTo(a, b); this.lineTo(a + c, b); this.lineTo(a + c, b + g); this.lineTo(a, b + g); this.closePath(); this.fill(); this.currentPath_ = e; }; d.createLinearGradient = function (a, b, c, g) { var e = new w("gradient"); e.x0_ = a; e.y0_ = b; e.x1_ = c; e.y1_ = g; return e; }; d.createRadialGradient = function (a, b, c, g, e, f) { var d = new w("gradientradial"); d.x0_ = a; d.y0_ = b; d.r0_ = c; d.x1_ = g; d.y1_ = e; d.r1_ = f; return d; }; d.drawImage = function (a, b) { var c, g, e, d, r, y, n, h; e = a.runtimeStyle.width; d = a.runtimeStyle.height; a.runtimeStyle.width = "auto"; a.runtimeStyle.height = "auto"; var l = a.width, u = a.height; a.runtimeStyle.width = e; a.runtimeStyle.height = d; if (3 == arguments.length) (c = arguments[1]), (g = arguments[2]), (r = y = 0), (n = e = l), (h = d = u); else if (5 == arguments.length) (c = arguments[1]), (g = arguments[2]), (e = arguments[3]), (d = arguments[4]), (r = y = 0), (n = l), (h = u); else if (9 == arguments.length) (r = arguments[1]), (y = arguments[2]), (n = arguments[3]), (h = arguments[4]), (c = arguments[5]), (g = arguments[6]), (e = arguments[7]), (d = arguments[8]); else throw Error("Invalid number of arguments"); var m = s(this, c, g), p = []; p.push( " ', '", "" ); this.element_.insertAdjacentHTML("BeforeEnd", p.join("")); }; d.stroke = function (a) { var b = []; b.push( " d.x) d.x = f.x; if (null == c.y || f.y < c.y) c.y = f.y; if (null == d.y || f.y > d.y) d.y = f.y; } } b.push(' ">'); a ? T(this, b, c, d) : S(this, b); b.push(""); this.element_.insertAdjacentHTML("beforeEnd", b.join("")); }; d.fill = function () { this.stroke(!0); }; d.closePath = function () { this.currentPath_.push({ type: "close" }); }; d.save = function () { var a = {}; P(this, a); this.aStack_.push(a); this.mStack_.push(this.m_); this.m_ = t(D(), this.m_); }; d.restore = function () { this.aStack_.length && (P(this.aStack_.pop(), this), (this.m_ = this.mStack_.pop())); }; d.translate = function (a, b) { z( this, t( [ [1, 0, 0], [0, 1, 0], [a, b, 1], ], this.m_ ), !1 ); }; d.rotate = function (a) { var b = K(a); a = J(a); z( this, t( [ [b, a, 0], [-a, b, 0], [0, 0, 1], ], this.m_ ), !1 ); }; d.scale = function (a, b) { this.arcScaleX_ *= a; this.arcScaleY_ *= b; z( this, t( [ [a, 0, 0], [0, b, 0], [0, 0, 1], ], this.m_ ), !0 ); }; d.transform = function (a, b, c, d, e, f) { z( this, t( [ [a, b, 0], [c, d, 0], [e, f, 1], ], this.m_ ), !0 ); }; d.setTransform = function (a, b, c, d, e, f) { z( this, [ [a, b, 0], [c, d, 0], [e, f, 1], ], !0 ); }; d.drawText_ = function (a, b, c, d, e) { var f = this.m_; d = 0; var r = 1e3, t = 0, n = [], h; h = this.font; if (L[h]) h = L[h]; else { var l = document.createElement("div").style; try { l.font = h; } catch (u) {} h = L[h] = { style: l.fontStyle || "normal", variant: l.fontVariant || "normal", weight: l.fontWeight || "normal", size: l.fontSize || 10, family: l.fontFamily || "sans-serif", }; } var l = h, m = this.element_; h = {}; for (var p in l) h[p] = l[p]; p = parseFloat(m.currentStyle.fontSize); m = parseFloat(l.size); "number" == typeof l.size ? (h.size = l.size) : -1 != l.size.indexOf("px") ? (h.size = m) : -1 != l.size.indexOf("em") ? (h.size = p * m) : -1 != l.size.indexOf("%") ? (h.size = (p / 100) * m) : -1 != l.size.indexOf("pt") ? (h.size = m / 0.75) : (h.size = p); h.size *= 0.981; p = h.style + " " + h.variant + " " + h.weight + " " + h.size + "px " + h.family; m = this.element_.currentStyle; l = this.textAlign.toLowerCase(); switch (l) { case "left": case "center": case "right": break; case "end": l = "ltr" == m.direction ? "right" : "left"; break; case "start": l = "rtl" == m.direction ? "right" : "left"; break; default: l = "left"; } switch (this.textBaseline) { case "hanging": case "top": t = h.size / 1.75; break; case "middle": break; default: case null: case "alphabetic": case "ideographic": case "bottom": t = -h.size / 2.25; } switch (l) { case "right": d = 1e3; r = 0.05; break; case "center": d = r = 500; } b = s(this, b + 0, c + t); n.push( '' ); e ? S(this, n) : T(this, n, { x: -d, y: 0 }, { x: r, y: h.size }); e = f[0][0].toFixed(3) + "," + f[1][0].toFixed(3) + "," + f[0][1].toFixed(3) + "," + f[1][1].toFixed(3) + ",0,0"; b = k(b.x / q) + "," + k(b.y / q); n.push( '', '', '' ); this.element_.insertAdjacentHTML("beforeEnd", n.join("")); }; d.fillText = function (a, b, c, d) { this.drawText_(a, b, c, d, !1); }; d.strokeText = function (a, b, c, d) { this.drawText_(a, b, c, d, !0); }; d.measureText = function (a) { this.textMeasureEl_ || (this.element_.insertAdjacentHTML( "beforeEnd", '' ), (this.textMeasureEl_ = this.element_.lastChild)); var b = this.element_.ownerDocument; this.textMeasureEl_.innerHTML = ""; this.textMeasureEl_.style.font = this.font; this.textMeasureEl_.appendChild(b.createTextNode(a)); return { width: this.textMeasureEl_.offsetWidth }; }; d.clip = function () {}; d.arcTo = function () {}; d.createPattern = function (a, b) { return new I(a, b); }; w.prototype.addColorStop = function (a, b) { b = G(b); this.colors_.push({ offset: a, color: b.color, alpha: b.alpha }); }; d = A.prototype = Error(); d.INDEX_SIZE_ERR = 1; d.DOMSTRING_SIZE_ERR = 2; d.HIERARCHY_REQUEST_ERR = 3; d.WRONG_DOCUMENT_ERR = 4; d.INVALID_CHARACTER_ERR = 5; d.NO_DATA_ALLOWED_ERR = 6; d.NO_MODIFICATION_ALLOWED_ERR = 7; d.NOT_FOUND_ERR = 8; d.NOT_SUPPORTED_ERR = 9; d.INUSE_ATTRIBUTE_ERR = 10; d.INVALID_STATE_ERR = 11; d.SYNTAX_ERR = 12; d.INVALID_MODIFICATION_ERR = 13; d.NAMESPACE_ERR = 14; d.INVALID_ACCESS_ERR = 15; d.VALIDATION_ERR = 16; d.TYPE_MISMATCH_ERR = 17; G_vmlCanvasManager = U; CanvasRenderingContext2D = C; CanvasGradient = w; CanvasPattern = I; DOMException = A; })(); /*eslint-enable*/ /*jshint ignore:end*/