From e9ead68e9458635101dcdb01d0bec8dc7ddd2af2 Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Fri, 4 Jan 2019 18:17:27 +1300 Subject: [PATCH] Revert "Auto corrected by following Format Javascript Code" This reverts commit 334b33c555e4d53f60c7c4c2be8ec1fa11209f6d. --- app/assets/javascripts/highcharts.js | 11651 +------------------------ 1 file changed, 382 insertions(+), 11269 deletions(-) diff --git a/app/assets/javascripts/highcharts.js b/app/assets/javascripts/highcharts.js index c7136bafe..9554ef58b 100644 --- a/app/assets/javascripts/highcharts.js +++ b/app/assets/javascripts/highcharts.js @@ -5,11272 +5,385 @@ License: www.highcharts.com/license */ -(function(S, M) { - 'object' === typeof module && module.exports - ? (module.exports = S.document ? M(S) : M) - : (S.Highcharts = M(S)); -})('undefined' !== typeof window ? window : this, function(S) { - var M = (function() { - var a = 'undefined' === typeof S ? window : S, - E = a.document, - D = (a.navigator && a.navigator.userAgent) || '', - H = - E && - E.createElementNS && - !!E.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect, - p = /(edge|msie|trident)/i.test(D) && !a.opera, - f = /Firefox/.test(D), - l = f && 4 > parseInt(D.split('Firefox/')[1], 10); - return a.Highcharts - ? a.Highcharts.error(16, !0) - : { - product: 'Highcharts', - version: '6.0.4', - deg2rad: (2 * Math.PI) / 360, - doc: E, - hasBidiBug: l, - hasTouch: E && void 0 !== E.documentElement.ontouchstart, - isMS: p, - isWebKit: /AppleWebKit/.test(D), - isFirefox: f, - isTouchDevice: /(Mobile|Android|Windows Phone)/.test(D), - SVG_NS: 'http://www.w3.org/2000/svg', - chartCount: 0, - seriesTypes: {}, - symbolSizes: {}, - svg: H, - win: a, - marginNames: ['plotTop', 'marginRight', 'marginBottom', 'plotLeft'], - noop: function() {}, - charts: [], - }; - })(); - (function(a) { - a.timers = []; - var E = a.charts, - D = a.doc, - H = a.win; - a.error = function(p, f) { - p = a.isNumber(p) - ? 'Highcharts error #' + p + ': www.highcharts.com/errors/' + p - : p; - if (f) throw Error(p); - H.console && console.log(p); - }; - a.Fx = function(a, f, l) { - this.options = f; - this.elem = a; - this.prop = l; - }; - a.Fx.prototype = { - dSetter: function() { - var a = this.paths[0], - f = this.paths[1], - l = [], - r = this.now, - n = a.length, - w; - if (1 === r) l = this.toD; - else if (n === f.length && 1 > r) - for (; n--; ) - (w = parseFloat(a[n])), - (l[n] = isNaN(w) ? f[n] : r * parseFloat(f[n] - w) + w); - else l = f; - this.elem.attr('d', l, null, !0); - }, - update: function() { - var a = this.elem, - f = this.prop, - l = this.now, - r = this.options.step; - if (this[f + 'Setter']) this[f + 'Setter'](); - else - a.attr - ? a.element && a.attr(f, l, null, !0) - : (a.style[f] = l + this.unit); - r && r.call(a, l, this); - }, - run: function(p, f, l) { - var r = this, - n = r.options, - w = function(a) { - return w.stopped ? !1 : r.step(a); - }, - u = - H.requestAnimationFrame || - function(a) { - setTimeout(a, 13); - }, - e = function() { - for (var h = 0; h < a.timers.length; h++) - a.timers[h]() || a.timers.splice(h--, 1); - a.timers.length && u(e); - }; - p === f - ? (delete n.curAnim[this.prop], - n.complete && - 0 === a.keys(n.curAnim).length && - n.complete.call(this.elem)) - : ((this.startTime = +new Date()), - (this.start = p), - (this.end = f), - (this.unit = l), - (this.now = this.start), - (this.pos = 0), - (w.elem = this.elem), - (w.prop = this.prop), - w() && 1 === a.timers.push(w) && u(e)); - }, - step: function(p) { - var f = +new Date(), - l, - r = this.options, - n = this.elem, - w = r.complete, - u = r.duration, - e = r.curAnim; - n.attr && !n.element - ? (p = !1) - : p || f >= u + this.startTime - ? ((this.now = this.end), - (this.pos = 1), - this.update(), - (l = e[this.prop] = !0), - a.objectEach(e, function(a) { - !0 !== a && (l = !1); - }), - l && w && w.call(n), - (p = !1)) - : ((this.pos = r.easing((f - this.startTime) / u)), - (this.now = this.start + (this.end - this.start) * this.pos), - this.update(), - (p = !0)); - return p; - }, - initPath: function(p, f, l) { - function r(a) { - var b, c; - for (k = a.length; k--; ) - (b = 'M' === a[k] || 'L' === a[k]), - (c = /[a-zA-Z]/.test(a[k + 3])), - b && - c && - a.splice(k + 1, 0, a[k + 1], a[k + 2], a[k + 1], a[k + 2]); - } - function n(a, b) { - for (; a.length < c; ) { - a[0] = b[c - a.length]; - var e = a.slice(0, d); - [].splice.apply(a, [0, 0].concat(e)); - z && - ((e = a.slice(a.length - d)), - [].splice.apply(a, [a.length, 0].concat(e)), - k--); - } - a[0] = 'M'; - } - function w(a, k) { - for (var e = (c - a.length) / d; 0 < e && e--; ) - (b = a.slice().splice(a.length / B - d, d * B)), - (b[0] = k[c - d - e * d]), - m && ((b[d - 6] = b[d - 2]), (b[d - 5] = b[d - 1])), - [].splice.apply(a, [a.length / B, 0].concat(b)), - z && e--; - } - f = f || ''; - var u, - e = p.startX, - h = p.endX, - m = -1 < f.indexOf('C'), - d = m ? 7 : 3, - c, - b, - k; - f = f.split(' '); - l = l.slice(); - var z = p.isArea, - B = z ? 2 : 1, - I; - m && (r(f), r(l)); - if (e && h) { - for (k = 0; k < e.length; k++) - if (e[k] === h[0]) { - u = k; - break; - } else if (e[0] === h[h.length - e.length + k]) { - u = k; - I = !0; - break; - } - void 0 === u && (f = []); - } - f.length && - a.isNumber(u) && - ((c = l.length + u * B * d), - I ? (n(f, l), w(l, f)) : (n(l, f), w(f, l))); - return [f, l]; - }, - }; - a.Fx.prototype.fillSetter = a.Fx.prototype.strokeSetter = function() { - this.elem.attr( - this.prop, - a.color(this.start).tweenTo(a.color(this.end), this.pos), - null, - !0, - ); - }; - a.extend = function(a, f) { - var l; - a || (a = {}); - for (l in f) a[l] = f[l]; - return a; - }; - a.merge = function() { - var p, - f = arguments, - l, - r = {}, - n = function(l, p) { - 'object' !== typeof l && (l = {}); - a.objectEach(p, function(e, h) { - !a.isObject(e, !0) || a.isClass(e) || a.isDOMElement(e) - ? (l[h] = p[h]) - : (l[h] = n(l[h] || {}, e)); - }); - return l; - }; - !0 === f[0] && ((r = f[1]), (f = Array.prototype.slice.call(f, 2))); - l = f.length; - for (p = 0; p < l; p++) r = n(r, f[p]); - return r; - }; - a.pInt = function(a, f) { - return parseInt(a, f || 10); - }; - a.isString = function(a) { - return 'string' === typeof a; - }; - a.isArray = function(a) { - a = Object.prototype.toString.call(a); - return '[object Array]' === a || '[object Array Iterator]' === a; - }; - a.isObject = function(p, f) { - return !!p && 'object' === typeof p && (!f || !a.isArray(p)); - }; - a.isDOMElement = function(p) { - return a.isObject(p) && 'number' === typeof p.nodeType; - }; - a.isClass = function(p) { - var f = p && p.constructor; - return !( - !a.isObject(p, !0) || - a.isDOMElement(p) || - !f || - !f.name || - 'Object' === f.name - ); - }; - a.isNumber = function(a) { - return ( - 'number' === typeof a && !isNaN(a) && Infinity > a && -Infinity < a - ); - }; - a.erase = function(a, f) { - for (var l = a.length; l--; ) - if (a[l] === f) { - a.splice(l, 1); - break; - } - }; - a.defined = function(a) { - return void 0 !== a && null !== a; - }; - a.attr = function(p, f, l) { - var r; - a.isString(f) - ? a.defined(l) - ? p.setAttribute(f, l) - : p && p.getAttribute && (r = p.getAttribute(f)) - : a.defined(f) && - a.isObject(f) && - a.objectEach(f, function(a, l) { - p.setAttribute(l, a); - }); - return r; - }; - a.splat = function(p) { - return a.isArray(p) ? p : [p]; - }; - a.syncTimeout = function(a, f, l) { - if (f) return setTimeout(a, f, l); - a.call(0, l); - }; - a.pick = function() { - var a = arguments, - f, - l, - r = a.length; - for (f = 0; f < r; f++) - if (((l = a[f]), void 0 !== l && null !== l)) return l; - }; - a.css = function(p, f) { - a.isMS && - !a.svg && - f && - void 0 !== f.opacity && - (f.filter = 'alpha(opacity\x3d' + 100 * f.opacity + ')'); - a.extend(p.style, f); - }; - a.createElement = function(p, f, l, r, n) { - p = D.createElement(p); - var w = a.css; - f && a.extend(p, f); - n && w(p, { padding: 0, border: 'none', margin: 0 }); - l && w(p, l); - r && r.appendChild(p); - return p; - }; - a.extendClass = function(p, f) { - var l = function() {}; - l.prototype = new p(); - a.extend(l.prototype, f); - return l; - }; - a.pad = function(a, f, l) { - return Array((f || 2) + 1 - String(a).length).join(l || 0) + a; - }; - a.relativeLength = function(a, f, l) { - return /%$/.test(a) - ? (f * parseFloat(a)) / 100 + (l || 0) - : parseFloat(a); - }; - a.wrap = function(a, f, l) { - var p = a[f]; - a[f] = function() { - var a = Array.prototype.slice.call(arguments), - f = arguments, - u = this; - u.proceed = function() { - p.apply(u, arguments.length ? arguments : f); - }; - a.unshift(p); - a = l.apply(this, a); - u.proceed = null; - return a; - }; - }; - a.getTZOffset = function(p) { - var f = a.Date; - return ( - 6e4 * - ((f.hcGetTimezoneOffset && f.hcGetTimezoneOffset(p)) || - f.hcTimezoneOffset || - 0) - ); - }; - a.dateFormat = function(p, f, l) { - if (!a.defined(f) || isNaN(f)) - return a.defaultOptions.lang.invalidDate || ''; - p = a.pick(p, '%Y-%m-%d %H:%M:%S'); - var r = a.Date, - n = new r(f - a.getTZOffset(f)), - w = n[r.hcGetHours](), - u = n[r.hcGetDay](), - e = n[r.hcGetDate](), - h = n[r.hcGetMonth](), - m = n[r.hcGetFullYear](), - d = a.defaultOptions.lang, - c = d.weekdays, - b = d.shortWeekdays, - k = a.pad, - r = a.extend( - { - a: b ? b[u] : c[u].substr(0, 3), - A: c[u], - d: k(e), - e: k(e, 2, ' '), - w: u, - b: d.shortMonths[h], - B: d.months[h], - m: k(h + 1), - y: m.toString().substr(2, 2), - Y: m, - H: k(w), - k: w, - I: k(w % 12 || 12), - l: w % 12 || 12, - M: k(n[r.hcGetMinutes]()), - p: 12 > w ? 'AM' : 'PM', - P: 12 > w ? 'am' : 'pm', - S: k(n.getSeconds()), - L: k(Math.round(f % 1e3), 3), - }, - a.dateFormats, - ); - a.objectEach(r, function(a, b) { - for (; -1 !== p.indexOf('%' + b); ) - p = p.replace('%' + b, 'function' === typeof a ? a(f) : a); - }); - return l ? p.substr(0, 1).toUpperCase() + p.substr(1) : p; - }; - a.formatSingle = function(p, f) { - var l = /\.([0-9])/, - r = a.defaultOptions.lang; - /f$/.test(p) - ? ((l = (l = p.match(l)) ? l[1] : -1), - null !== f && - (f = a.numberFormat( - f, - l, - r.decimalPoint, - -1 < p.indexOf(',') ? r.thousandsSep : '', - ))) - : (f = a.dateFormat(p, f)); - return f; - }; - a.format = function(p, f) { - for (var l = '{', r = !1, n, w, u, e, h = [], m; p; ) { - l = p.indexOf(l); - if (-1 === l) break; - n = p.slice(0, l); - if (r) { - n = n.split(':'); - w = n.shift().split('.'); - e = w.length; - m = f; - for (u = 0; u < e; u++) m && (m = m[w[u]]); - n.length && (m = a.formatSingle(n.join(':'), m)); - h.push(m); - } else h.push(n); - p = p.slice(l + 1); - l = (r = !r) ? '}' : '{'; - } - h.push(p); - return h.join(''); - }; - a.getMagnitude = function(a) { - return Math.pow(10, Math.floor(Math.log(a) / Math.LN10)); - }; - a.normalizeTickInterval = function(p, f, l, r, n) { - var w, - u = p; - l = a.pick(l, 1); - w = p / l; - f || - ((f = n - ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] - : [1, 2, 2.5, 5, 10]), - !1 === r && - (1 === l - ? (f = a.grep(f, function(a) { - return 0 === a % 1; - })) - : 0.1 >= l && (f = [1 / l]))); - for ( - r = 0; - r < f.length && - !((u = f[r]), - (n && u * l >= p) || (!n && w <= (f[r] + (f[r + 1] || f[r])) / 2)); - r++ - ); - return (u = a.correctFloat( - u * l, - -Math.round(Math.log(0.001) / Math.LN10), - )); - }; - a.stableSort = function(a, f) { - var l = a.length, - p, - n; - for (n = 0; n < l; n++) a[n].safeI = n; - a.sort(function(a, n) { - p = f(a, n); - return 0 === p ? a.safeI - n.safeI : p; - }); - for (n = 0; n < l; n++) delete a[n].safeI; - }; - a.arrayMin = function(a) { - for (var f = a.length, l = a[0]; f--; ) a[f] < l && (l = a[f]); - return l; - }; - a.arrayMax = function(a) { - for (var f = a.length, l = a[0]; f--; ) a[f] > l && (l = a[f]); - return l; - }; - a.destroyObjectProperties = function(p, f) { - a.objectEach(p, function(a, r) { - a && a !== f && a.destroy && a.destroy(); - delete p[r]; - }); - }; - a.discardElement = function(p) { - var f = a.garbageBin; - f || (f = a.createElement('div')); - p && f.appendChild(p); - f.innerHTML = ''; - }; - a.correctFloat = function(a, f) { - return parseFloat(a.toPrecision(f || 14)); - }; - a.setAnimation = function(p, f) { - f.renderer.globalAnimation = a.pick(p, f.options.chart.animation, !0); - }; - a.animObject = function(p) { - return a.isObject(p) ? a.merge(p) : { duration: p ? 500 : 0 }; - }; - a.timeUnits = { - millisecond: 1, - second: 1e3, - minute: 6e4, - hour: 36e5, - day: 864e5, - week: 6048e5, - month: 24192e5, - year: 314496e5, - }; - a.numberFormat = function(p, f, l, r) { - p = +p || 0; - f = +f; - var n = a.defaultOptions.lang, - w = (p.toString().split('.')[1] || '').split('e')[0].length, - u, - e, - h = p.toString().split('e'); - -1 === f - ? (f = Math.min(w, 20)) - : a.isNumber(f) - ? f && - h[1] && - 0 > h[1] && - ((u = f + +h[1]), - 0 <= u - ? ((h[0] = (+h[0]).toExponential(u).split('e')[0]), (f = u)) - : ((h[0] = h[0].split('.')[0] || 0), - (p = 20 > f ? (h[0] * Math.pow(10, h[1])).toFixed(f) : 0), - (h[1] = 0))) - : (f = 2); - e = ( - Math.abs(h[1] ? h[0] : p) + Math.pow(10, -Math.max(f, w) - 1) - ).toFixed(f); - w = String(a.pInt(e)); - u = 3 < w.length ? w.length % 3 : 0; - l = a.pick(l, n.decimalPoint); - r = a.pick(r, n.thousandsSep); - p = (0 > p ? '-' : '') + (u ? w.substr(0, u) + r : ''); - p += w.substr(u).replace(/(\d{3})(?=\d)/g, '$1' + r); - f && (p += l + e.slice(-f)); - h[1] && 0 !== +p && (p += 'e' + h[1]); - return p; - }; - Math.easeInOutSine = function(a) { - return -0.5 * (Math.cos(Math.PI * a) - 1); - }; - a.getStyle = function(p, f, l) { - if ('width' === f) - return ( - Math.min(p.offsetWidth, p.scrollWidth) - - a.getStyle(p, 'padding-left') - - a.getStyle(p, 'padding-right') - ); - if ('height' === f) - return ( - Math.min(p.offsetHeight, p.scrollHeight) - - a.getStyle(p, 'padding-top') - - a.getStyle(p, 'padding-bottom') - ); - H.getComputedStyle || a.error(27, !0); - if ((p = H.getComputedStyle(p, void 0))) - (p = p.getPropertyValue(f)), - a.pick(l, 'opacity' !== f) && (p = a.pInt(p)); - return p; - }; - a.inArray = function(p, f) { - return (a.indexOfPolyfill || Array.prototype.indexOf).call(f, p); - }; - a.grep = function(p, f) { - return (a.filterPolyfill || Array.prototype.filter).call(p, f); - }; - a.find = Array.prototype.find - ? function(a, f) { - return a.find(f); - } - : function(a, f) { - var l, - r = a.length; - for (l = 0; l < r; l++) if (f(a[l], l)) return a[l]; - }; - a.map = function(a, f) { - for (var l = [], r = 0, n = a.length; r < n; r++) - l[r] = f.call(a[r], a[r], r, a); - return l; - }; - a.keys = function(p) { - return (a.keysPolyfill || Object.keys).call(void 0, p); - }; - a.reduce = function(p, f, l) { - return (a.reducePolyfill || Array.prototype.reduce).call(p, f, l); - }; - a.offset = function(a) { - var f = D.documentElement; - a = a.parentElement ? a.getBoundingClientRect() : { top: 0, left: 0 }; - return { - top: a.top + (H.pageYOffset || f.scrollTop) - (f.clientTop || 0), - left: a.left + (H.pageXOffset || f.scrollLeft) - (f.clientLeft || 0), - }; - }; - a.stop = function(p, f) { - for (var l = a.timers.length; l--; ) - a.timers[l].elem !== p || - (f && f !== a.timers[l].prop) || - (a.timers[l].stopped = !0); - }; - a.each = function(p, f, l) { - return (a.forEachPolyfill || Array.prototype.forEach).call(p, f, l); - }; - a.objectEach = function(a, f, l) { - for (var r in a) a.hasOwnProperty(r) && f.call(l, a[r], r, a); - }; - a.addEvent = function(p, f, l) { - var r, - n, - w = p.addEventListener || a.addEventListenerPolyfill; - p.hcEvents && - !Object.prototype.hasOwnProperty.call(p, 'hcEvents') && - ((n = {}), - a.objectEach(p.hcEvents, function(a, e) { - n[e] = a.slice(0); - }), - (p.hcEvents = n)); - r = p.hcEvents = p.hcEvents || {}; - w && w.call(p, f, l, !1); - r[f] || (r[f] = []); - r[f].push(l); - return function() { - a.removeEvent(p, f, l); - }; - }; - a.removeEvent = function(p, f, l) { - function r(e, m) { - var d = p.removeEventListener || a.removeEventListenerPolyfill; - d && d.call(p, e, m, !1); - } - function n() { - var e, m; - p.nodeName && - (f ? ((e = {}), (e[f] = !0)) : (e = u), - a.objectEach(e, function(a, c) { - if (u[c]) for (m = u[c].length; m--; ) r(c, u[c][m]); - })); - } - var w, - u = p.hcEvents, - e; - u && - (f - ? ((w = u[f] || []), - l - ? ((e = a.inArray(l, w)), - -1 < e && (w.splice(e, 1), (u[f] = w)), - r(f, l)) - : (n(), (u[f] = []))) - : (n(), (p.hcEvents = {}))); - }; - a.fireEvent = function(p, f, l, r) { - var n; - n = p.hcEvents; - var w, u; - l = l || {}; - if (D.createEvent && (p.dispatchEvent || p.fireEvent)) - (n = D.createEvent('Events')), - n.initEvent(f, !0, !0), - a.extend(n, l), - p.dispatchEvent ? p.dispatchEvent(n) : p.fireEvent(f, n); - else if (n) - for ( - n = n[f] || [], - w = n.length, - l.target || - a.extend(l, { - preventDefault: function() { - l.defaultPrevented = !0; - }, - target: p, - type: f, - }), - f = 0; - f < w; - f++ - ) - (u = n[f]) && !1 === u.call(p, l) && l.preventDefault(); - r && !l.defaultPrevented && r(l); - }; - a.animate = function(p, f, l) { - var r, - n = '', - w, - u, - e; - a.isObject(l) || - ((e = arguments), - (l = { duration: e[2], easing: e[3], complete: e[4] })); - a.isNumber(l.duration) || (l.duration = 400); - l.easing = - 'function' === typeof l.easing - ? l.easing - : Math[l.easing] || Math.easeInOutSine; - l.curAnim = a.merge(f); - a.objectEach(f, function(e, m) { - a.stop(p, m); - u = new a.Fx(p, l, m); - w = null; - 'd' === m - ? ((u.paths = u.initPath(p, p.d, f.d)), - (u.toD = f.d), - (r = 0), - (w = 1)) - : p.attr - ? (r = p.attr(m)) - : ((r = parseFloat(a.getStyle(p, m)) || 0), - 'opacity' !== m && (n = 'px')); - w || (w = e); - w && w.match && w.match('px') && (w = w.replace(/px/g, '')); - u.run(r, w, n); - }); - }; - a.seriesType = function(p, f, l, r, n) { - var w = a.getOptions(), - u = a.seriesTypes; - w.plotOptions[p] = a.merge(w.plotOptions[f], l); - u[p] = a.extendClass(u[f] || function() {}, r); - u[p].prototype.type = p; - n && (u[p].prototype.pointClass = a.extendClass(a.Point, n)); - return u[p]; - }; - a.uniqueKey = (function() { - var a = Math.random() - .toString(36) - .substring(2, 9), - f = 0; - return function() { - return 'highcharts-' + a + '-' + f++; - }; - })(); - H.jQuery && - (H.jQuery.fn.highcharts = function() { - var p = [].slice.call(arguments); - if (this[0]) - return p[0] - ? (new a[a.isString(p[0]) ? p.shift() : 'Chart']( - this[0], - p[0], - p[1], - ), - this) - : E[a.attr(this[0], 'data-highcharts-chart')]; - }); - })(M); - (function(a) { - var E = a.each, - D = a.isNumber, - H = a.map, - p = a.merge, - f = a.pInt; - a.Color = function(l) { - if (!(this instanceof a.Color)) return new a.Color(l); - this.init(l); - }; - a.Color.prototype = { - parsers: [ - { - regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, - parse: function(a) { - return [f(a[1]), f(a[2]), f(a[3]), parseFloat(a[4], 10)]; - }, - }, - { - regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/, - parse: function(a) { - return [f(a[1]), f(a[2]), f(a[3]), 1]; - }, - }, - ], - names: { - none: 'rgba(255,255,255,0)', - white: '#ffffff', - black: '#000000', - }, - init: function(l) { - var f, n, w, u; - if ( - (this.input = l = - this.names[l && l.toLowerCase ? l.toLowerCase() : ''] || l) && - l.stops - ) - this.stops = H(l.stops, function(e) { - return new a.Color(e[1]); - }); - else if ( - (l && - l.charAt && - '#' === l.charAt() && - ((f = l.length), - (l = parseInt(l.substr(1), 16)), - 7 === f - ? (n = [(l & 16711680) >> 16, (l & 65280) >> 8, l & 255, 1]) - : 4 === f && - (n = [ - ((l & 3840) >> 4) | ((l & 3840) >> 8), - ((l & 240) >> 4) | (l & 240), - ((l & 15) << 4) | (l & 15), - 1, - ])), - !n) - ) - for (w = this.parsers.length; w-- && !n; ) - (u = this.parsers[w]), (f = u.regex.exec(l)) && (n = u.parse(f)); - this.rgba = n || []; - }, - get: function(a) { - var f = this.input, - n = this.rgba, - l; - this.stops - ? ((l = p(f)), - (l.stops = [].concat(l.stops)), - E(this.stops, function(n, e) { - l.stops[e] = [l.stops[e][0], n.get(a)]; - })) - : (l = - n && D(n[0]) - ? 'rgb' === a || (!a && 1 === n[3]) - ? 'rgb(' + n[0] + ',' + n[1] + ',' + n[2] + ')' - : 'a' === a - ? n[3] - : 'rgba(' + n.join(',') + ')' - : f); - return l; - }, - brighten: function(a) { - var l, - n = this.rgba; - if (this.stops) - E(this.stops, function(n) { - n.brighten(a); - }); - else if (D(a) && 0 !== a) - for (l = 0; 3 > l; l++) - (n[l] += f(255 * a)), - 0 > n[l] && (n[l] = 0), - 255 < n[l] && (n[l] = 255); - return this; - }, - setOpacity: function(a) { - this.rgba[3] = a; - return this; - }, - tweenTo: function(a, f) { - var n = this.rgba, - l = a.rgba; - l.length && n && n.length - ? ((a = 1 !== l[3] || 1 !== n[3]), - (f = - (a ? 'rgba(' : 'rgb(') + - Math.round(l[0] + (n[0] - l[0]) * (1 - f)) + - ',' + - Math.round(l[1] + (n[1] - l[1]) * (1 - f)) + - ',' + - Math.round(l[2] + (n[2] - l[2]) * (1 - f)) + - (a ? ',' + (l[3] + (n[3] - l[3]) * (1 - f)) : '') + - ')')) - : (f = a.input || 'none'); - return f; - }, - }; - a.color = function(l) { - return new a.Color(l); - }; - })(M); - (function(a) { - var E, - D, - H = a.addEvent, - p = a.animate, - f = a.attr, - l = a.charts, - r = a.color, - n = a.css, - w = a.createElement, - u = a.defined, - e = a.deg2rad, - h = a.destroyObjectProperties, - m = a.doc, - d = a.each, - c = a.extend, - b = a.erase, - k = a.grep, - z = a.hasTouch, - B = a.inArray, - I = a.isArray, - x = a.isFirefox, - K = a.isMS, - t = a.isObject, - C = a.isString, - N = a.isWebKit, - q = a.merge, - A = a.noop, - F = a.objectEach, - G = a.pick, - g = a.pInt, - v = a.removeEvent, - Q = a.stop, - L = a.svg, - P = a.SVG_NS, - J = a.symbolSizes, - R = a.win; - E = a.SVGElement = function() { - return this; - }; - c(E.prototype, { - opacity: 1, - SVG_NS: P, - textProps: 'direction fontSize fontWeight fontFamily fontStyle color lineHeight width textAlign textDecoration textOverflow textOutline'.split( - ' ', - ), - init: function(a, g) { - this.element = 'span' === g ? w(g) : m.createElementNS(this.SVG_NS, g); - this.renderer = a; - }, - animate: function(y, g, b) { - g = a.animObject(G(g, this.renderer.globalAnimation, !0)); - 0 !== g.duration - ? (b && (g.complete = b), p(this, y, g)) - : (this.attr(y, null, b), g.step && g.step.call(this)); - return this; - }, - colorGradient: function(y, g, b) { - var v = this.renderer, - c, - O, - k, - e, - z, - h, - m, - L, - A, - J, - t = [], - x; - y.radialGradient - ? (O = 'radialGradient') - : y.linearGradient && (O = 'linearGradient'); - O && - ((k = y[O]), - (z = v.gradients), - (m = y.stops), - (J = b.radialReference), - I(k) && - (y[O] = k = { - x1: k[0], - y1: k[1], - x2: k[2], - y2: k[3], - gradientUnits: 'userSpaceOnUse', - }), - 'radialGradient' === O && - J && - !u(k.gradientUnits) && - ((e = k), - (k = q(k, v.getRadialAttr(J, e), { - gradientUnits: 'userSpaceOnUse', - }))), - F(k, function(a, y) { - 'id' !== y && t.push(y, a); - }), - F(m, function(a) { - t.push(a); - }), - (t = t.join(',')), - z[t] - ? (J = z[t].attr('id')) - : ((k.id = J = a.uniqueKey()), - (z[t] = h = v - .createElement(O) - .attr(k) - .add(v.defs)), - (h.radAttr = e), - (h.stops = []), - d(m, function(y) { - 0 === y[1].indexOf('rgba') - ? ((c = a.color(y[1])), (L = c.get('rgb')), (A = c.get('a'))) - : ((L = y[1]), (A = 1)); - y = v - .createElement('stop') - .attr({ offset: y[0], 'stop-color': L, 'stop-opacity': A }) - .add(h); - h.stops.push(y); - })), - (x = 'url(' + v.url + '#' + J + ')'), - b.setAttribute(g, x), - (b.gradient = t), - (y.toString = function() { - return x; - })); - }, - applyTextOutline: function(y) { - var g = this.element, - v, - c, - k, - q, - e; - -1 !== y.indexOf('contrast') && - (y = y.replace(/contrast/g, this.renderer.getContrast(g.style.fill))); - y = y.split(' '); - c = y[y.length - 1]; - if ((k = y[0]) && 'none' !== k && a.svg) { - this.fakeTS = !0; - y = [].slice.call(g.getElementsByTagName('tspan')); - this.ySetter = this.xSetter; - k = k.replace(/(^[\d\.]+)(.*?)$/g, function(a, y, g) { - return 2 * y + g; - }); - for (e = y.length; e--; ) - (v = y[e]), - 'highcharts-text-outline' === v.getAttribute('class') && - b(y, g.removeChild(v)); - q = g.firstChild; - d(y, function(a, y) { - 0 === y && - (a.setAttribute('x', g.getAttribute('x')), - (y = g.getAttribute('y')), - a.setAttribute('y', y || 0), - null === y && g.setAttribute('y', 0)); - a = a.cloneNode(1); - f(a, { - class: 'highcharts-text-outline', - fill: c, - stroke: c, - 'stroke-width': k, - 'stroke-linejoin': 'round', - }); - g.insertBefore(a, q); - }); - } - }, - attr: function(a, g, b, v) { - var y, - c = this.element, - k, - d = this, - O, - q; - 'string' === typeof a && - void 0 !== g && - ((y = a), (a = {}), (a[y] = g)); - 'string' === typeof a - ? (d = (this[a + 'Getter'] || this._defaultGetter).call(this, a, c)) - : (F( - a, - function(y, g) { - O = !1; - v || Q(this, g); - this.symbolName && - /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)$/.test( - g, - ) && - (k || (this.symbolAttr(a), (k = !0)), (O = !0)); - !this.rotation || - ('x' !== g && 'y' !== g) || - (this.doTransform = !0); - O || - ((q = this[g + 'Setter'] || this._defaultSetter), - q.call(this, y, g, c), - this.shadows && - /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test( - g, - ) && - this.updateShadows(g, y, q)); - }, - this, - ), - this.afterSetters()); - b && b(); - return d; - }, - afterSetters: function() { - this.doTransform && (this.updateTransform(), (this.doTransform = !1)); - }, - updateShadows: function(a, g, b) { - for (var y = this.shadows, v = y.length; v--; ) - b.call( - y[v], - 'height' === a - ? Math.max(g - (y[v].cutHeight || 0), 0) - : 'd' === a - ? this.d - : g, - a, - y[v], - ); - }, - addClass: function(a, g) { - var y = this.attr('class') || ''; - -1 === y.indexOf(a) && - (g || (a = (y + (y ? ' ' : '') + a).replace(' ', ' ')), - this.attr('class', a)); - return this; - }, - hasClass: function(a) { - return -1 !== B(a, (this.attr('class') || '').split(' ')); - }, - removeClass: function(a) { - return this.attr('class', (this.attr('class') || '').replace(a, '')); - }, - symbolAttr: function(a) { - var y = this; - d( - 'x y r start end width height innerR anchorX anchorY'.split(' '), - function(g) { - y[g] = G(a[g], y[g]); - }, - ); - y.attr({ - d: y.renderer.symbols[y.symbolName](y.x, y.y, y.width, y.height, y), - }); - }, - clip: function(a) { - return this.attr( - 'clip-path', - a ? 'url(' + this.renderer.url + '#' + a.id + ')' : 'none', - ); - }, - crisp: function(a, g) { - var y; - g = g || a.strokeWidth || 0; - y = (Math.round(g) % 2) / 2; - a.x = Math.floor(a.x || this.x || 0) + y; - a.y = Math.floor(a.y || this.y || 0) + y; - a.width = Math.floor((a.width || this.width || 0) - 2 * y); - a.height = Math.floor((a.height || this.height || 0) - 2 * y); - u(a.strokeWidth) && (a.strokeWidth = g); - return a; - }, - css: function(a) { - var y = this.styles, - b = {}, - v = this.element, - k, - d = '', - q, - e = !y, - z = ['textOutline', 'textOverflow', 'width']; - a && a.color && (a.fill = a.color); - y && - F(a, function(a, g) { - a !== y[g] && ((b[g] = a), (e = !0)); - }); - e && - (y && (a = c(y, b)), - (k = this.textWidth = - a && - a.width && - 'auto' !== a.width && - 'text' === v.nodeName.toLowerCase() && - g(a.width)), - (this.styles = a), - k && !L && this.renderer.forExport && delete a.width, - K && !L - ? n(this.element, a) - : ((q = function(a, y) { - return '-' + y.toLowerCase(); - }), - F(a, function(a, y) { - -1 === B(y, z) && - (d += y.replace(/([A-Z])/g, q) + ':' + a + ';'); - }), - d && f(v, 'style', d)), - this.added && - ('text' === this.element.nodeName && this.renderer.buildText(this), - a && a.textOutline && this.applyTextOutline(a.textOutline))); - return this; - }, - strokeWidth: function() { - return this['stroke-width'] || 0; - }, - on: function(a, g) { - var y = this, - b = y.element; - z && 'click' === a - ? ((b.ontouchstart = function(a) { - y.touchEventFired = Date.now(); - a.preventDefault(); - g.call(b, a); - }), - (b.onclick = function(a) { - (-1 === R.navigator.userAgent.indexOf('Android') || - 1100 < Date.now() - (y.touchEventFired || 0)) && - g.call(b, a); - })) - : (b['on' + a] = g); - return this; - }, - setRadialReference: function(a) { - var y = this.renderer.gradients[this.element.gradient]; - this.element.radialReference = a; - y && y.radAttr && y.animate(this.renderer.getRadialAttr(a, y.radAttr)); - return this; - }, - translate: function(a, g) { - return this.attr({ translateX: a, translateY: g }); - }, - invert: function(a) { - this.inverted = a; - this.updateTransform(); - return this; - }, - updateTransform: function() { - var a = this.translateX || 0, - g = this.translateY || 0, - b = this.scaleX, - v = this.scaleY, - c = this.inverted, - k = this.rotation, - d = this.matrix, - q = this.element; - c && ((a += this.width), (g += this.height)); - a = ['translate(' + a + ',' + g + ')']; - u(d) && a.push('matrix(' + d.join(',') + ')'); - c - ? a.push('rotate(90) scale(-1,1)') - : k && - a.push( - 'rotate(' + - k + - ' ' + - G(this.rotationOriginX, q.getAttribute('x'), 0) + - ' ' + - G(this.rotationOriginY, q.getAttribute('y') || 0) + - ')', - ); - (u(b) || u(v)) && a.push('scale(' + G(b, 1) + ' ' + G(v, 1) + ')'); - a.length && q.setAttribute('transform', a.join(' ')); - }, - toFront: function() { - var a = this.element; - a.parentNode.appendChild(a); - return this; - }, - align: function(a, g, v) { - var y, - c, - k, - d, - q = {}; - c = this.renderer; - k = c.alignedObjects; - var e, O; - if (a) { - if ( - ((this.alignOptions = a), (this.alignByTranslate = g), !v || C(v)) - ) - (this.alignTo = y = v || 'renderer'), - b(k, this), - k.push(this), - (v = null); - } else - (a = this.alignOptions), - (g = this.alignByTranslate), - (y = this.alignTo); - v = G(v, c[y], c); - y = a.align; - c = a.verticalAlign; - k = (v.x || 0) + (a.x || 0); - d = (v.y || 0) + (a.y || 0); - 'right' === y ? (e = 1) : 'center' === y && (e = 2); - e && (k += (v.width - (a.width || 0)) / e); - q[g ? 'translateX' : 'x'] = Math.round(k); - 'bottom' === c ? (O = 1) : 'middle' === c && (O = 2); - O && (d += (v.height - (a.height || 0)) / O); - q[g ? 'translateY' : 'y'] = Math.round(d); - this[this.placed ? 'animate' : 'attr'](q); - this.placed = !0; - this.alignAttr = q; - return this; - }, - getBBox: function(a, g) { - var y, - b = this.renderer, - v, - k = this.element, - q = this.styles, - O, - z = this.textStr, - h, - m = b.cache, - L = b.cacheKeys, - A; - g = G(g, this.rotation); - v = g * e; - O = q && q.fontSize; - u(z) && - ((A = z.toString()), - -1 === A.indexOf('\x3c') && (A = A.replace(/[0-9]/g, '0')), - (A += ['', g || 0, O, q && q.width, q && q.textOverflow].join())); - A && !a && (y = m[A]); - if (!y) { - if (k.namespaceURI === this.SVG_NS || b.forExport) { - try { - (h = - this.fakeTS && - function(a) { - d(k.querySelectorAll('.highcharts-text-outline'), function( - y, - ) { - y.style.display = a; - }); - }) && h('none'), - (y = k.getBBox - ? c({}, k.getBBox()) - : { width: k.offsetWidth, height: k.offsetHeight }), - h && h(''); - } catch (W) {} - if (!y || 0 > y.width) y = { width: 0, height: 0 }; - } else y = this.htmlGetBBox(); - b.isSVG && - ((a = y.width), - (b = y.height), - q && - '11px' === q.fontSize && - 17 === Math.round(b) && - (y.height = b = 14), - g && - ((y.width = - Math.abs(b * Math.sin(v)) + Math.abs(a * Math.cos(v))), - (y.height = - Math.abs(b * Math.cos(v)) + Math.abs(a * Math.sin(v))))); - if (A && 0 < y.height) { - for (; 250 < L.length; ) delete m[L.shift()]; - m[A] || L.push(A); - m[A] = y; - } - } - return y; - }, - show: function(a) { - return this.attr({ visibility: a ? 'inherit' : 'visible' }); - }, - hide: function() { - return this.attr({ visibility: 'hidden' }); - }, - fadeOut: function(a) { - var y = this; - y.animate( - { opacity: 0 }, - { - duration: a || 150, - complete: function() { - y.attr({ y: -9999 }); - }, - }, - ); - }, - add: function(a) { - var y = this.renderer, - g = this.element, - b; - a && (this.parentGroup = a); - this.parentInverted = a && a.inverted; - void 0 !== this.textStr && y.buildText(this); - this.added = !0; - if (!a || a.handleZ || this.zIndex) b = this.zIndexSetter(); - b || (a ? a.element : y.box).appendChild(g); - if (this.onAdd) this.onAdd(); - return this; - }, - safeRemoveChild: function(a) { - var y = a.parentNode; - y && y.removeChild(a); - }, - destroy: function() { - var a = this, - g = a.element || {}, - v = a.renderer.isSVG && 'SPAN' === g.nodeName && a.parentGroup, - c = g.ownerSVGElement; - g.onclick = g.onmouseout = g.onmouseover = g.onmousemove = g.point = null; - Q(a); - a.clipPath && - c && - (d(c.querySelectorAll('[clip-path],[CLIP-PATH]'), function(g) { - g - .getAttribute('clip-path') - .match(RegExp('[("]#' + a.clipPath.element.id + '[)"]')) && - g.removeAttribute('clip-path'); - }), - (a.clipPath = a.clipPath.destroy())); - if (a.stops) { - for (c = 0; c < a.stops.length; c++) - a.stops[c] = a.stops[c].destroy(); - a.stops = null; - } - a.safeRemoveChild(g); - for (a.destroyShadows(); v && v.div && 0 === v.div.childNodes.length; ) - (g = v.parentGroup), a.safeRemoveChild(v.div), delete v.div, (v = g); - a.alignTo && b(a.renderer.alignedObjects, a); - F(a, function(g, y) { - delete a[y]; - }); - return null; - }, - shadow: function(a, g, b) { - var y = [], - v, - c, - k = this.element, - d, - q, - e, - z; - if (!a) this.destroyShadows(); - else if (!this.shadows) { - q = G(a.width, 3); - e = (a.opacity || 0.15) / q; - z = this.parentInverted - ? '(-1,-1)' - : '(' + G(a.offsetX, 1) + ', ' + G(a.offsetY, 1) + ')'; - for (v = 1; v <= q; v++) - (c = k.cloneNode(0)), - (d = 2 * q + 1 - 2 * v), - f(c, { - isShadow: 'true', - stroke: a.color || '#000000', - 'stroke-opacity': e * v, - 'stroke-width': d, - transform: 'translate' + z, - fill: 'none', - }), - b && - (f(c, 'height', Math.max(f(c, 'height') - d, 0)), - (c.cutHeight = d)), - g - ? g.element.appendChild(c) - : k.parentNode && k.parentNode.insertBefore(c, k), - y.push(c); - this.shadows = y; - } - return this; - }, - destroyShadows: function() { - d( - this.shadows || [], - function(a) { - this.safeRemoveChild(a); - }, - this, - ); - this.shadows = void 0; - }, - xGetter: function(a) { - 'circle' === this.element.nodeName && - ('x' === a ? (a = 'cx') : 'y' === a && (a = 'cy')); - return this._defaultGetter(a); - }, - _defaultGetter: function(a) { - a = G( - this[a + 'Value'], - this[a], - this.element ? this.element.getAttribute(a) : null, - 0, - ); - /^[\-0-9\.]+$/.test(a) && (a = parseFloat(a)); - return a; - }, - dSetter: function(a, g, b) { - a && a.join && (a = a.join(' ')); - /(NaN| {2}|^$)/.test(a) && (a = 'M 0 0'); - this[g] !== a && (b.setAttribute(g, a), (this[g] = a)); - }, - dashstyleSetter: function(a) { - var b, - v = this['stroke-width']; - 'inherit' === v && (v = 1); - if ((a = a && a.toLowerCase())) { - a = a - .replace('shortdashdotdot', '3,1,1,1,1,1,') - .replace('shortdashdot', '3,1,1,1') - .replace('shortdot', '1,1,') - .replace('shortdash', '3,1,') - .replace('longdash', '8,3,') - .replace(/dot/g, '1,3,') - .replace('dash', '4,3,') - .replace(/,$/, '') - .split(','); - for (b = a.length; b--; ) a[b] = g(a[b]) * v; - a = a.join(',').replace(/NaN/g, 'none'); - this.element.setAttribute('stroke-dasharray', a); - } - }, - alignSetter: function(a) { - this.alignValue = a; - this.element.setAttribute( - 'text-anchor', - { left: 'start', center: 'middle', right: 'end' }[a], - ); - }, - opacitySetter: function(a, g, b) { - this[g] = a; - b.setAttribute(g, a); - }, - titleSetter: function(a) { - var g = this.element.getElementsByTagName('title')[0]; - g || - ((g = m.createElementNS(this.SVG_NS, 'title')), - this.element.appendChild(g)); - g.firstChild && g.removeChild(g.firstChild); - g.appendChild( - m.createTextNode(String(G(a), '').replace(/<[^>]*>/g, '')), - ); - }, - textSetter: function(a) { - a !== this.textStr && - (delete this.bBox, - (this.textStr = a), - this.added && this.renderer.buildText(this)); - }, - fillSetter: function(a, g, b) { - 'string' === typeof a - ? b.setAttribute(g, a) - : a && this.colorGradient(a, g, b); - }, - visibilitySetter: function(a, g, b) { - 'inherit' === a - ? b.removeAttribute(g) - : this[g] !== a && b.setAttribute(g, a); - this[g] = a; - }, - zIndexSetter: function(a, b) { - var v = this.renderer, - y = this.parentGroup, - c = (y || v).element || v.box, - k, - d = this.element, - q, - e, - v = c === v.box; - k = this.added; - var z; - u(a) && - ((d.zIndex = a), (a = +a), this[b] === a && (k = !1), (this[b] = a)); - if (k) { - (a = this.zIndex) && y && (y.handleZ = !0); - b = c.childNodes; - for (z = b.length - 1; 0 <= z && !q; z--) - if (((y = b[z]), (k = y.zIndex), (e = !u(k)), y !== d)) - if (0 > a && e && !v && !z) c.insertBefore(d, b[z]), (q = !0); - else if (g(k) <= a || (e && (!u(a) || 0 <= a))) - c.insertBefore(d, b[z + 1] || null), (q = !0); - q || (c.insertBefore(d, b[v ? 3 : 0] || null), (q = !0)); - } - return q; - }, - _defaultSetter: function(a, g, b) { - b.setAttribute(g, a); - }, - }); - E.prototype.yGetter = E.prototype.xGetter; - E.prototype.translateXSetter = E.prototype.translateYSetter = E.prototype.rotationSetter = E.prototype.verticalAlignSetter = E.prototype.rotationOriginXSetter = E.prototype.rotationOriginYSetter = E.prototype.scaleXSetter = E.prototype.scaleYSetter = E.prototype.matrixSetter = function( - a, - g, - ) { - this[g] = a; - this.doTransform = !0; - }; - E.prototype['stroke-widthSetter'] = E.prototype.strokeSetter = function( - a, - g, - b, - ) { - this[g] = a; - this.stroke && this['stroke-width'] - ? (E.prototype.fillSetter.call(this, this.stroke, 'stroke', b), - b.setAttribute('stroke-width', this['stroke-width']), - (this.hasStroke = !0)) - : 'stroke-width' === g && - 0 === a && - this.hasStroke && - (b.removeAttribute('stroke'), (this.hasStroke = !1)); - }; - D = a.SVGRenderer = function() { - this.init.apply(this, arguments); - }; - c(D.prototype, { - Element: E, - SVG_NS: P, - init: function(a, g, b, v, c, k) { - var y; - v = this.createElement('svg') - .attr({ version: '1.1', class: 'highcharts-root' }) - .css(this.getStyle(v)); - y = v.element; - a.appendChild(y); - f(a, 'dir', 'ltr'); - -1 === a.innerHTML.indexOf('xmlns') && f(y, 'xmlns', this.SVG_NS); - this.isSVG = !0; - this.box = y; - this.boxWrapper = v; - this.alignedObjects = []; - this.url = - (x || N) && m.getElementsByTagName('base').length - ? R.location.href - .replace(/#.*?$/, '') - .replace(/<[^>]*>/g, '') - .replace(/([\('\)])/g, '\\$1') - .replace(/ /g, '%20') - : ''; - this.createElement('desc') - .add() - .element.appendChild( - m.createTextNode('Created with Highcharts 6.0.4'), - ); - this.defs = this.createElement('defs').add(); - this.allowHTML = k; - this.forExport = c; - this.gradients = {}; - this.cache = {}; - this.cacheKeys = []; - this.imgCount = 0; - this.setSize(g, b, !1); - var d; - x && - a.getBoundingClientRect && - ((g = function() { - n(a, { left: 0, top: 0 }); - d = a.getBoundingClientRect(); - n(a, { - left: Math.ceil(d.left) - d.left + 'px', - top: Math.ceil(d.top) - d.top + 'px', - }); - }), - g(), - (this.unSubPixelFix = H(R, 'resize', g))); - }, - getStyle: function(a) { - return (this.style = c( - { - fontFamily: - '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', - fontSize: '12px', - }, - a, - )); - }, - setStyle: function(a) { - this.boxWrapper.css(this.getStyle(a)); - }, - isHidden: function() { - return !this.boxWrapper.getBBox().width; - }, - destroy: function() { - var a = this.defs; - this.box = null; - this.boxWrapper = this.boxWrapper.destroy(); - h(this.gradients || {}); - this.gradients = null; - a && (this.defs = a.destroy()); - this.unSubPixelFix && this.unSubPixelFix(); - return (this.alignedObjects = null); - }, - createElement: function(a) { - var g = new this.Element(); - g.init(this, a); - return g; - }, - draw: A, - getRadialAttr: function(a, g) { - return { - cx: a[0] - a[2] / 2 + g.cx * a[2], - cy: a[1] - a[2] / 2 + g.cy * a[2], - r: g.r * a[2], - }; - }, - getSpanWidth: function(a, g) { - var b = a.getBBox(!0).width; - !L && - this.forExport && - (b = this.measureSpanWidth(g.firstChild.data, a.styles)); - return b; - }, - applyEllipsis: function(a, g, b, v) { - var c = a.rotation, - y = b, - k, - d = 0, - q = b.length, - e = function(a) { - g.removeChild(g.firstChild); - a && g.appendChild(m.createTextNode(a)); - }, - z; - a.rotation = 0; - y = this.getSpanWidth(a, g); - if ((z = y > v)) { - for (; d <= q; ) - (k = Math.ceil((d + q) / 2)), - (y = b.substring(0, k) + '\u2026'), - e(y), - (y = this.getSpanWidth(a, g)), - d === q ? (d = q + 1) : y > v ? (q = k - 1) : (d = k); - 0 === q && e(''); - } - a.rotation = c; - return z; - }, - escapes: { - '\x26': '\x26amp;', - '\x3c': '\x26lt;', - '\x3e': '\x26gt;', - "'": '\x26#39;', - '"': '\x26quot;', - }, - buildText: function(a) { - var b = a.element, - v = this, - c = v.forExport, - y = G(a.textStr, '').toString(), - q = -1 !== y.indexOf('\x3c'), - e = b.childNodes, - z, - h, - A, - J, - t = f(b, 'x'), - x = a.styles, - B = a.textWidth, - l = x && x.lineHeight, - C = x && x.textOutline, - u = x && 'ellipsis' === x.textOverflow, - Q = x && 'nowrap' === x.whiteSpace, - w = x && x.fontSize, - R, - I, - r = e.length, - x = B && !a.added && this.box, - p = function(a) { - var c; - c = /(px|em)$/.test(a && a.style.fontSize) - ? a.style.fontSize - : w || v.style.fontSize || 12; - return l - ? g(l) - : v.fontMetrics(c, a.getAttribute('style') ? a : b).h; - }, - K = function(a) { - F(v.escapes, function(g, b) { - a = a.replace(new RegExp(g, 'g'), b); - }); - return a; - }; - R = [y, u, Q, l, C, w, B].join(); - if (R !== a.textCache) { - for (a.textCache = R; r--; ) b.removeChild(e[r]); - q || C || u || B || -1 !== y.indexOf(' ') - ? ((z = /<.*class="([^"]+)".*>/), - (h = /<.*style="([^"]+)".*>/), - (A = /<.*href="([^"]+)".*>/), - x && x.appendChild(b), - (y = q - ? y - .replace( - /<(b|strong)>/g, - '\x3cspan style\x3d"font-weight:bold"\x3e', - ) - .replace( - /<(i|em)>/g, - '\x3cspan style\x3d"font-style:italic"\x3e', - ) - .replace(//g, '\x3c/span\x3e') - .split(//g) - : [y]), - (y = k(y, function(a) { - return '' !== a; - })), - d(y, function(g, y) { - var k, - q = 0; - g = g - .replace(/^\s+|\s+$/g, '') - .replace(//g, '\x3c/span\x3e|||'); - k = g.split('|||'); - d(k, function(g) { - if ('' !== g || 1 === k.length) { - var d = {}, - e = m.createElementNS(v.SVG_NS, 'tspan'), - x, - F; - z.test(g) && ((x = g.match(z)[1]), f(e, 'class', x)); - h.test(g) && - ((F = g - .match(h)[1] - .replace(/(;| |^)color([ :])/, '$1fill$2')), - f(e, 'style', F)); - A.test(g) && - !c && - (f( - e, - 'onclick', - 'location.href\x3d"' + g.match(A)[1] + '"', - ), - f(e, 'class', 'highcharts-anchor'), - n(e, { cursor: 'pointer' })); - g = K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g, '') || ' '); - if (' ' !== g) { - e.appendChild(m.createTextNode(g)); - q ? (d.dx = 0) : y && null !== t && (d.x = t); - f(e, d); - b.appendChild(e); - !q && - I && - (!L && c && n(e, { display: 'block' }), - f(e, 'dy', p(e))); - if (B) { - d = g.replace(/([^\^])-/g, '$1- ').split(' '); - x = 1 < k.length || y || (1 < d.length && !Q); - var O = [], - l, - C = p(e), - G = a.rotation; - for ( - u && (J = v.applyEllipsis(a, e, g, B)); - !u && x && (d.length || O.length); - - ) - (a.rotation = 0), - (l = v.getSpanWidth(a, e)), - (g = l > B), - void 0 === J && (J = g), - g && 1 !== d.length - ? (e.removeChild(e.firstChild), - O.unshift(d.pop())) - : ((d = O), - (O = []), - d.length && - !Q && - ((e = m.createElementNS(P, 'tspan')), - f(e, { dy: C, x: t }), - F && f(e, 'style', F), - b.appendChild(e)), - l > B && (B = l)), - d.length && - e.appendChild( - m.createTextNode( - d.join(' ').replace(/- /g, '-'), - ), - ); - a.rotation = G; - } - q++; - } - } - }); - I = I || b.childNodes.length; - }), - J && a.attr('title', a.textStr), - x && x.removeChild(b), - C && a.applyTextOutline && a.applyTextOutline(C)) - : b.appendChild(m.createTextNode(K(y))); - } - }, - getContrast: function(a) { - a = r(a).rgba; - return 510 < a[0] + a[1] + a[2] ? '#000000' : '#FFFFFF'; - }, - button: function(a, g, b, v, d, k, e, z, h) { - var y = this.label(a, g, b, h, null, null, null, null, 'button'), - m = 0; - y.attr(q({ padding: 8, r: 2 }, d)); - var A, L, J, t; - d = q( - { - fill: '#f7f7f7', - stroke: '#cccccc', - 'stroke-width': 1, - style: { - color: '#333333', - cursor: 'pointer', - fontWeight: 'normal', - }, - }, - d, - ); - A = d.style; - delete d.style; - k = q(d, { fill: '#e6e6e6' }, k); - L = k.style; - delete k.style; - e = q( - d, - { fill: '#e6ebf5', style: { color: '#000000', fontWeight: 'bold' } }, - e, - ); - J = e.style; - delete e.style; - z = q(d, { style: { color: '#cccccc' } }, z); - t = z.style; - delete z.style; - H(y.element, K ? 'mouseover' : 'mouseenter', function() { - 3 !== m && y.setState(1); - }); - H(y.element, K ? 'mouseout' : 'mouseleave', function() { - 3 !== m && y.setState(m); - }); - y.setState = function(a) { - 1 !== a && (y.state = m = a); - y.removeClass( - /highcharts-button-(normal|hover|pressed|disabled)/, - ).addClass( - 'highcharts-button-' + - ['normal', 'hover', 'pressed', 'disabled'][a || 0], - ); - y.attr([d, k, e, z][a || 0]).css([A, L, J, t][a || 0]); - }; - y.attr(d).css(c({ cursor: 'default' }, A)); - return y.on('click', function(a) { - 3 !== m && v.call(y, a); - }); - }, - crispLine: function(a, g) { - a[1] === a[4] && (a[1] = a[4] = Math.round(a[1]) - (g % 2) / 2); - a[2] === a[5] && (a[2] = a[5] = Math.round(a[2]) + (g % 2) / 2); - return a; - }, - path: function(a) { - var g = { fill: 'none' }; - I(a) ? (g.d = a) : t(a) && c(g, a); - return this.createElement('path').attr(g); - }, - circle: function(a, g, b) { - a = t(a) ? a : { x: a, y: g, r: b }; - g = this.createElement('circle'); - g.xSetter = g.ySetter = function(a, g, b) { - b.setAttribute('c' + g, a); - }; - return g.attr(a); - }, - arc: function(a, g, b, v, c, d) { - t(a) - ? ((v = a), (g = v.y), (b = v.r), (a = v.x)) - : (v = { innerR: v, start: c, end: d }); - a = this.symbol('arc', a, g, b, b, v); - a.r = b; - return a; - }, - rect: function(a, g, b, v, c, d) { - c = t(a) ? a.r : c; - var k = this.createElement('rect'); - a = t(a) - ? a - : void 0 === a - ? {} - : { x: a, y: g, width: Math.max(b, 0), height: Math.max(v, 0) }; - void 0 !== d && ((a.strokeWidth = d), (a = k.crisp(a))); - a.fill = 'none'; - c && (a.r = c); - k.rSetter = function(a, g, b) { - f(b, { rx: a, ry: a }); - }; - return k.attr(a); - }, - setSize: function(a, g, b) { - var v = this.alignedObjects, - c = v.length; - this.width = a; - this.height = g; - for ( - this.boxWrapper.animate( - { width: a, height: g }, - { - step: function() { - this.attr({ - viewBox: - '0 0 ' + this.attr('width') + ' ' + this.attr('height'), - }); - }, - duration: G(b, !0) ? void 0 : 0, - }, - ); - c--; - - ) - v[c].align(); - }, - g: function(a) { - var g = this.createElement('g'); - return a ? g.attr({ class: 'highcharts-' + a }) : g; - }, - image: function(a, g, b, v, d) { - var k = { preserveAspectRatio: 'none' }; - 1 < arguments.length && c(k, { x: g, y: b, width: v, height: d }); - k = this.createElement('image').attr(k); - k.element.setAttributeNS - ? k.element.setAttributeNS('http://www.w3.org/1999/xlink', 'href', a) - : k.element.setAttribute('hc-svg-href', a); - return k; - }, - symbol: function(a, g, b, v, k, q) { - var e = this, - y, - z = /^url\((.*?)\)$/, - h = z.test(a), - A = !h && (this.symbols[a] ? a : 'circle'), - L = A && this.symbols[A], - t = - u(g) && - L && - L.call(this.symbols, Math.round(g), Math.round(b), v, k, q), - x, - F; - L - ? ((y = this.path(t)), - y.attr('fill', 'none'), - c(y, { symbolName: A, x: g, y: b, width: v, height: k }), - q && c(y, q)) - : h && - ((x = a.match(z)[1]), - (y = this.image(x)), - (y.imgwidth = G(J[x] && J[x].width, q && q.width)), - (y.imgheight = G(J[x] && J[x].height, q && q.height)), - (F = function() { - y.attr({ width: y.width, height: y.height }); - }), - d(['width', 'height'], function(a) { - y[a + 'Setter'] = function(a, g) { - var b = {}, - v = this['img' + g], - c = 'width' === g ? 'translateX' : 'translateY'; - this[g] = a; - u(v) && - (this.element && this.element.setAttribute(g, v), - this.alignByTranslate || - ((b[c] = ((this[g] || 0) - v) / 2), this.attr(b))); - }; - }), - u(g) && y.attr({ x: g, y: b }), - (y.isImg = !0), - u(y.imgwidth) && u(y.imgheight) - ? F() - : (y.attr({ width: 0, height: 0 }), - w('img', { - onload: function() { - var a = l[e.chartIndex]; - 0 === this.width && - (n(this, { position: 'absolute', top: '-999em' }), - m.body.appendChild(this)); - J[x] = { width: this.width, height: this.height }; - y.imgwidth = this.width; - y.imgheight = this.height; - y.element && F(); - this.parentNode && this.parentNode.removeChild(this); - e.imgCount--; - if (!e.imgCount && a && a.onload) a.onload(); - }, - src: x, - }), - this.imgCount++)); - return y; - }, - symbols: { - circle: function(a, g, b, v) { - return this.arc(a + b / 2, g + v / 2, b / 2, v / 2, { - start: 0, - end: 2 * Math.PI, - open: !1, - }); - }, - square: function(a, g, b, v) { - return ['M', a, g, 'L', a + b, g, a + b, g + v, a, g + v, 'Z']; - }, - triangle: function(a, g, b, v) { - return ['M', a + b / 2, g, 'L', a + b, g + v, a, g + v, 'Z']; - }, - 'triangle-down': function(a, g, b, v) { - return ['M', a, g, 'L', a + b, g, a + b / 2, g + v, 'Z']; - }, - diamond: function(a, g, b, v) { - return [ - 'M', - a + b / 2, - g, - 'L', - a + b, - g + v / 2, - a + b / 2, - g + v, - a, - g + v / 2, - 'Z', - ]; - }, - arc: function(a, g, b, v, c) { - var k = c.start, - d = c.r || b, - q = c.r || v || b, - e = c.end - 0.001; - b = c.innerR; - v = G(c.open, 0.001 > Math.abs(c.end - c.start - 2 * Math.PI)); - var y = Math.cos(k), - z = Math.sin(k), - h = Math.cos(e), - e = Math.sin(e); - c = 0.001 > c.end - k - Math.PI ? 0 : 1; - d = [ - 'M', - a + d * y, - g + q * z, - 'A', - d, - q, - 0, - c, - 1, - a + d * h, - g + q * e, - ]; - u(b) && - d.push( - v ? 'M' : 'L', - a + b * h, - g + b * e, - 'A', - b, - b, - 0, - c, - 0, - a + b * y, - g + b * z, - ); - d.push(v ? '' : 'Z'); - return d; - }, - callout: function(a, g, b, v, c) { - var d = Math.min((c && c.r) || 0, b, v), - k = d + 6, - q = c && c.anchorX; - c = c && c.anchorY; - var e; - e = [ - 'M', - a + d, - g, - 'L', - a + b - d, - g, - 'C', - a + b, - g, - a + b, - g, - a + b, - g + d, - 'L', - a + b, - g + v - d, - 'C', - a + b, - g + v, - a + b, - g + v, - a + b - d, - g + v, - 'L', - a + d, - g + v, - 'C', - a, - g + v, - a, - g + v, - a, - g + v - d, - 'L', - a, - g + d, - 'C', - a, - g, - a, - g, - a + d, - g, - ]; - q && q > b - ? c > g + k && c < g + v - k - ? e.splice( - 13, - 3, - 'L', - a + b, - c - 6, - a + b + 6, - c, - a + b, - c + 6, - a + b, - g + v - d, - ) - : e.splice( - 13, - 3, - 'L', - a + b, - v / 2, - q, - c, - a + b, - v / 2, - a + b, - g + v - d, - ) - : q && 0 > q - ? c > g + k && c < g + v - k - ? e.splice(33, 3, 'L', a, c + 6, a - 6, c, a, c - 6, a, g + d) - : e.splice(33, 3, 'L', a, v / 2, q, c, a, v / 2, a, g + d) - : c && c > v && q > a + k && q < a + b - k - ? e.splice( - 23, - 3, - 'L', - q + 6, - g + v, - q, - g + v + 6, - q - 6, - g + v, - a + d, - g + v, - ) - : c && - 0 > c && - q > a + k && - q < a + b - k && - e.splice(3, 3, 'L', q - 6, g, q, g - 6, q + 6, g, b - d, g); - return e; - }, - }, - clipRect: function(g, b, v, c) { - var d = a.uniqueKey(), - k = this.createElement('clipPath') - .attr({ id: d }) - .add(this.defs); - g = this.rect(g, b, v, c, 0).add(k); - g.id = d; - g.clipPath = k; - g.count = 0; - return g; - }, - text: function(a, g, b, v) { - var c = {}; - if (v && (this.allowHTML || !this.forExport)) return this.html(a, g, b); - c.x = Math.round(g || 0); - b && (c.y = Math.round(b)); - if (a || 0 === a) c.text = a; - a = this.createElement('text').attr(c); - v || - (a.xSetter = function(a, g, b) { - var v = b.getElementsByTagName('tspan'), - c, - d = b.getAttribute(g), - k; - for (k = 0; k < v.length; k++) - (c = v[k]), c.getAttribute(g) === d && c.setAttribute(g, a); - b.setAttribute(g, a); - }); - return a; - }, - fontMetrics: function(a, b) { - a = - a || - (b && b.style && b.style.fontSize) || - (this.style && this.style.fontSize); - a = /px/.test(a) - ? g(a) - : /em/.test(a) - ? parseFloat(a) * (b ? this.fontMetrics(null, b.parentNode).f : 16) - : 12; - b = 24 > a ? a + 3 : Math.round(1.2 * a); - return { h: b, b: Math.round(0.8 * b), f: a }; - }, - rotCorr: function(a, g, b) { - var v = a; - g && b && (v = Math.max(v * Math.cos(g * e), 4)); - return { x: (-a / 3) * Math.sin(g * e), y: v }; - }, - label: function(g, b, k, e, z, h, m, A, L) { - var y = this, - J = y.g('button' !== L && 'label'), - t = (J.text = y.text('', 0, 0, m).attr({ zIndex: 1 })), - x, - F, - n = 0, - B = 3, - l = 0, - C, - f, - Q, - G, - w, - R = {}, - I, - P, - r = /^url\((.*?)\)$/.test(e), - p = r, - K, - O, - N, - T; - L && J.addClass('highcharts-' + L); - p = r; - K = function() { - return ((I || 0) % 2) / 2; - }; - O = function() { - var a = t.element.style, - g = {}; - F = - (void 0 === C || void 0 === f || w) && u(t.textStr) && t.getBBox(); - J.width = (C || F.width || 0) + 2 * B + l; - J.height = (f || F.height || 0) + 2 * B; - P = B + y.fontMetrics(a && a.fontSize, t).b; - p && - (x || - ((J.box = x = y.symbols[e] || r ? y.symbol(e) : y.rect()), - x.addClass( - ('button' === L ? '' : 'highcharts-label-box') + - (L ? ' highcharts-' + L + '-box' : ''), - ), - x.add(J), - (a = K()), - (g.x = a), - (g.y = (A ? -P : 0) + a)), - (g.width = Math.round(J.width)), - (g.height = Math.round(J.height)), - x.attr(c(g, R)), - (R = {})); - }; - N = function() { - var a = l + B, - g; - g = A ? 0 : P; - u(C) && - F && - ('center' === w || 'right' === w) && - (a += { center: 0.5, right: 1 }[w] * (C - F.width)); - if (a !== t.x || g !== t.y) - t.attr('x', a), void 0 !== g && t.attr('y', g); - t.x = a; - t.y = g; - }; - T = function(a, g) { - x ? x.attr(a, g) : (R[a] = g); - }; - J.onAdd = function() { - t.add(J); - J.attr({ text: g || 0 === g ? g : '', x: b, y: k }); - x && u(z) && J.attr({ anchorX: z, anchorY: h }); - }; - J.widthSetter = function(g) { - C = a.isNumber(g) ? g : null; - }; - J.heightSetter = function(a) { - f = a; - }; - J['text-alignSetter'] = function(a) { - w = a; - }; - J.paddingSetter = function(a) { - u(a) && a !== B && ((B = J.padding = a), N()); - }; - J.paddingLeftSetter = function(a) { - u(a) && a !== l && ((l = a), N()); - }; - J.alignSetter = function(a) { - a = { left: 0, center: 0.5, right: 1 }[a]; - a !== n && ((n = a), F && J.attr({ x: Q })); - }; - J.textSetter = function(a) { - void 0 !== a && t.textSetter(a); - O(); - N(); - }; - J['stroke-widthSetter'] = function(a, g) { - a && (p = !0); - I = this['stroke-width'] = a; - T(g, a); - }; - J.strokeSetter = J.fillSetter = J.rSetter = function(a, g) { - 'r' !== g && ('fill' === g && a && (p = !0), (J[g] = a)); - T(g, a); - }; - J.anchorXSetter = function(a, g) { - z = J.anchorX = a; - T(g, Math.round(a) - K() - Q); - }; - J.anchorYSetter = function(a, g) { - h = J.anchorY = a; - T(g, a - G); - }; - J.xSetter = function(a) { - J.x = a; - n && (a -= n * ((C || F.width) + 2 * B)); - Q = Math.round(a); - J.attr('translateX', Q); - }; - J.ySetter = function(a) { - G = J.y = Math.round(a); - J.attr('translateY', G); - }; - var U = J.css; - return c(J, { - css: function(a) { - if (a) { - var g = {}; - a = q(a); - d(J.textProps, function(b) { - void 0 !== a[b] && ((g[b] = a[b]), delete a[b]); - }); - t.css(g); - } - return U.call(J, a); - }, - getBBox: function() { - return { - width: F.width + 2 * B, - height: F.height + 2 * B, - x: F.x - B, - y: F.y - B, - }; - }, - shadow: function(a) { - a && (O(), x && x.shadow(a)); - return J; - }, - destroy: function() { - v(J.element, 'mouseenter'); - v(J.element, 'mouseleave'); - t && (t = t.destroy()); - x && (x = x.destroy()); - E.prototype.destroy.call(J); - J = y = O = N = T = null; - }, - }); - }, - }); - a.Renderer = D; - })(M); - (function(a) { - var E = a.attr, - D = a.createElement, - H = a.css, - p = a.defined, - f = a.each, - l = a.extend, - r = a.isFirefox, - n = a.isMS, - w = a.isWebKit, - u = a.pick, - e = a.pInt, - h = a.SVGRenderer, - m = a.win, - d = a.wrap; - l(a.SVGElement.prototype, { - htmlCss: function(a) { - var b = this.element; - if ((b = a && 'SPAN' === b.tagName && a.width)) - delete a.width, (this.textWidth = b), this.updateTransform(); - a && - 'ellipsis' === a.textOverflow && - ((a.whiteSpace = 'nowrap'), (a.overflow = 'hidden')); - this.styles = l(this.styles, a); - H(this.element, a); - return this; - }, - htmlGetBBox: function() { - var a = this.element; - return { - x: a.offsetLeft, - y: a.offsetTop, - width: a.offsetWidth, - height: a.offsetHeight, - }; - }, - htmlUpdateTransform: function() { - if (this.added) { - var a = this.renderer, - b = this.element, - d = this.translateX || 0, - z = this.translateY || 0, - h = this.x || 0, - m = this.y || 0, - x = this.textAlign || 'left', - n = { left: 0, center: 0.5, right: 1 }[x], - t = this.styles; - H(b, { marginLeft: d, marginTop: z }); - this.shadows && - f(this.shadows, function(a) { - H(a, { marginLeft: d + 1, marginTop: z + 1 }); - }); - this.inverted && - f(b.childNodes, function(c) { - a.invertChild(c, b); - }); - if ('SPAN' === b.tagName) { - var l = this.rotation, - u = e(this.textWidth), - q = t && t.whiteSpace, - A = [l, x, b.innerHTML, this.textWidth, this.textAlign].join(); - A !== this.cTT && - ((t = a.fontMetrics(b.style.fontSize).b), - p(l) && this.setSpanRotation(l, n, t), - H(b, { width: '', whiteSpace: q || 'nowrap' }), - b.offsetWidth > u && - /[ \-]/.test(b.textContent || b.innerText) && - H(b, { - width: u + 'px', - display: 'block', - whiteSpace: q || 'normal', - }), - this.getSpanCorrection(b.offsetWidth, t, n, l, x)); - H(b, { - left: h + (this.xCorr || 0) + 'px', - top: m + (this.yCorr || 0) + 'px', - }); - w && (t = b.offsetHeight); - this.cTT = A; - } - } else this.alignOnAdd = !0; - }, - setSpanRotation: function(a, b, d) { - var c = {}, - k = this.renderer.getTransformKey(); - c[k] = c.transform = 'rotate(' + a + 'deg)'; - c[k + (r ? 'Origin' : '-origin')] = c.transformOrigin = - 100 * b + '% ' + d + 'px'; - H(this.element, c); - }, - getSpanCorrection: function(a, b, d) { - this.xCorr = -a * d; - this.yCorr = -b; - }, - }); - l(h.prototype, { - getTransformKey: function() { - return n && !/Edge/.test(m.navigator.userAgent) - ? '-ms-transform' - : w - ? '-webkit-transform' - : r - ? 'MozTransform' - : m.opera - ? '-o-transform' - : ''; - }, - html: function(a, b, k) { - var c = this.createElement('span'), - e = c.element, - h = c.renderer, - m = h.isSVG, - w = function(a, b) { - f(['opacity', 'visibility'], function(c) { - d(a, c + 'Setter', function(a, c, d, k) { - a.call(this, c, d, k); - b[d] = c; - }); - }); - }; - c.textSetter = function(a) { - a !== e.innerHTML && delete this.bBox; - this.textStr = a; - e.innerHTML = u(a, ''); - c.htmlUpdateTransform(); - }; - m && w(c, c.element.style); - c.xSetter = c.ySetter = c.alignSetter = c.rotationSetter = function( - a, - b, - ) { - 'align' === b && (b = 'textAlign'); - c[b] = a; - c.htmlUpdateTransform(); - }; - c.attr({ text: a, x: Math.round(b), y: Math.round(k) }).css({ - fontFamily: this.style.fontFamily, - fontSize: this.style.fontSize, - position: 'absolute', - }); - e.style.whiteSpace = 'nowrap'; - c.css = c.htmlCss; - m && - (c.add = function(a) { - var b, - d = h.box.parentNode, - k = []; - if ((this.parentGroup = a)) { - if (((b = a.div), !b)) { - for (; a; ) k.push(a), (a = a.parentGroup); - f(k.reverse(), function(a) { - function e(g, b) { - a[b] = g; - n - ? (q[h.getTransformKey()] = - 'translate(' + - (a.x || a.translateX) + - 'px,' + - (a.y || a.translateY) + - 'px)') - : 'translateX' === b - ? (q.left = g + 'px') - : (q.top = g + 'px'); - a.doTransform = !0; - } - var q, - g = E(a.element, 'class'); - g && (g = { className: g }); - b = a.div = - a.div || - D( - 'div', - g, - { - position: 'absolute', - left: (a.translateX || 0) + 'px', - top: (a.translateY || 0) + 'px', - display: a.display, - opacity: a.opacity, - pointerEvents: a.styles && a.styles.pointerEvents, - }, - b || d, - ); - q = b.style; - l(a, { - classSetter: (function(a) { - return function(g) { - this.element.setAttribute('class', g); - a.className = g; - }; - })(b), - on: function() { - k[0].div && c.on.apply({ element: k[0].div }, arguments); - return a; - }, - translateXSetter: e, - translateYSetter: e, - }); - w(a, q); - }); - } - } else b = d; - b.appendChild(e); - c.added = !0; - c.alignOnAdd && c.htmlUpdateTransform(); - return c; - }); - return c; - }, - }); - })(M); - (function(a) { - function E() { - var n = a.defaultOptions.global, - l = r.moment; - if (n.timezone) { - if (l) - return function(a) { - return -l.tz(a, n.timezone).utcOffset(); - }; - a.error(25); - } - return n.useUTC && n.getTimezoneOffset; - } - function D() { - var n = a.defaultOptions.global, - f, - u = n.useUTC, - e = u ? 'getUTC' : 'get', - h = u ? 'setUTC' : 'set', - m = 'Minutes Hours Day Date Month FullYear'.split(' '), - d = m.concat(['Milliseconds', 'Seconds']); - a.Date = f = n.Date || r.Date; - f.hcTimezoneOffset = u && n.timezoneOffset; - f.hcGetTimezoneOffset = E(); - f.hcHasTimeZone = !(!f.hcTimezoneOffset && !f.hcGetTimezoneOffset); - f.hcMakeTime = function(a, b, d, e, h, m) { - var c; - u - ? ((c = f.UTC.apply(0, arguments)), (c += p(c))) - : (c = new f(a, b, l(d, 1), l(e, 0), l(h, 0), l(m, 0)).getTime()); - return c; - }; - for (n = 0; n < m.length; n++) f['hcGet' + m[n]] = e + m[n]; - for (n = 0; n < d.length; n++) f['hcSet' + d[n]] = h + d[n]; - } - var H = a.color, - p = a.getTZOffset, - f = a.merge, - l = a.pick, - r = a.win; - a.defaultOptions = { - colors: '#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1'.split( - ' ', - ), - symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], - lang: { - loading: 'Loading...', - 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( - ' ', - ), - weekdays: 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split( - ' ', - ), - decimalPoint: '.', - numericSymbols: 'kMGTPE'.split(''), - resetZoom: 'Reset zoom', - resetZoomTitle: 'Reset zoom level 1:1', - thousandsSep: ' ', - }, - global: { useUTC: !0 }, - chart: { - borderRadius: 0, - defaultSeriesType: 'line', - ignoreHiddenSeries: !0, - spacing: [10, 10, 15, 10], - resetZoomButton: { - theme: { zIndex: 6 }, - position: { align: 'right', x: -10, y: 10 }, - }, - width: null, - height: null, - borderColor: '#335cad', - backgroundColor: '#ffffff', - plotBorderColor: '#cccccc', - }, - title: { - text: 'Chart title', - align: 'center', - margin: 15, - widthAdjust: -44, - }, - subtitle: { text: '', align: 'center', widthAdjust: -44 }, - plotOptions: {}, - labels: { style: { position: 'absolute', color: '#333333' } }, - legend: { - enabled: !0, - align: 'center', - layout: 'horizontal', - labelFormatter: function() { - return this.name; - }, - borderColor: '#999999', - borderRadius: 0, - navigation: { activeColor: '#003399', inactiveColor: '#cccccc' }, - itemStyle: { - color: '#333333', - fontSize: '12px', - fontWeight: 'bold', - textOverflow: 'ellipsis', - }, - itemHoverStyle: { color: '#000000' }, - itemHiddenStyle: { color: '#cccccc' }, - shadow: !1, - itemCheckboxStyle: { - position: 'absolute', - width: '13px', - height: '13px', - }, - squareSymbol: !0, - symbolPadding: 5, - verticalAlign: 'bottom', - x: 0, - y: 0, - title: { style: { fontWeight: 'bold' } }, - }, - loading: { - labelStyle: { fontWeight: 'bold', position: 'relative', top: '45%' }, - style: { - position: 'absolute', - backgroundColor: '#ffffff', - opacity: 0.5, - textAlign: 'center', - }, - }, - tooltip: { - enabled: !0, - animation: a.svg, - borderRadius: 3, - dateTimeLabelFormats: { - millisecond: '%A, %b %e, %H:%M:%S.%L', - second: '%A, %b %e, %H:%M:%S', - minute: '%A, %b %e, %H:%M', - hour: '%A, %b %e, %H:%M', - day: '%A, %b %e, %Y', - week: 'Week from %A, %b %e, %Y', - month: '%B %Y', - year: '%Y', - }, - footerFormat: '', - padding: 8, - snap: a.isTouchDevice ? 25 : 10, - backgroundColor: H('#f7f7f7') - .setOpacity(0.85) - .get(), - borderWidth: 1, - headerFormat: - '\x3cspan style\x3d"font-size: 10px"\x3e{point.key}\x3c/span\x3e\x3cbr/\x3e', - pointFormat: - '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', - shadow: !0, - style: { - color: '#333333', - cursor: 'default', - fontSize: '12px', - pointerEvents: 'none', - whiteSpace: 'nowrap', - }, - }, - credits: { - enabled: !0, - href: 'http://www.highcharts.com', - position: { align: 'right', x: -10, verticalAlign: 'bottom', y: -5 }, - style: { cursor: 'pointer', color: '#999999', fontSize: '9px' }, - text: 'Highcharts.com', - }, - }; - a.setOptions = function(n) { - a.defaultOptions = f(!0, a.defaultOptions, n); - D(); - return a.defaultOptions; - }; - a.getOptions = function() { - return a.defaultOptions; - }; - a.defaultPlotOptions = a.defaultOptions.plotOptions; - D(); - })(M); - (function(a) { - var E = a.correctFloat, - D = a.defined, - H = a.destroyObjectProperties, - p = a.isNumber, - f = a.merge, - l = a.pick, - r = a.deg2rad; - a.Tick = function(a, l, f, e) { - this.axis = a; - this.pos = l; - this.type = f || ''; - this.isNewLabel = this.isNew = !0; - f || e || this.addLabel(); - }; - a.Tick.prototype = { - addLabel: function() { - var a = this.axis, - w = a.options, - u = a.chart, - e = a.categories, - h = a.names, - m = this.pos, - d = w.labels, - c = a.tickPositions, - b = m === c[0], - k = m === c[c.length - 1], - h = e ? l(e[m], h[m], m) : m, - e = this.label, - c = c.info, - z; - a.isDatetimeAxis && - c && - (z = w.dateTimeLabelFormats[c.higherRanks[m] || c.unitName]); - this.isFirst = b; - this.isLast = k; - w = a.labelFormatter.call({ - axis: a, - chart: u, - isFirst: b, - isLast: k, - dateTimeLabelFormat: z, - value: a.isLog ? E(a.lin2log(h)) : h, - pos: m, - }); - D(e) - ? e && e.attr({ text: w }) - : ((this.labelLength = - (this.label = e = - D(w) && d.enabled - ? u.renderer - .text(w, 0, 0, d.useHTML) - .css(f(d.style)) - .add(a.labelGroup) - : null) && e.getBBox().width), - (this.rotation = 0)); - }, - getLabelSize: function() { - return this.label - ? this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] - : 0; - }, - handleOverflow: function(a) { - var f = this.axis, - n = f.options.labels, - e = a.x, - h = f.chart.chartWidth, - m = f.chart.spacing, - d = l(f.labelLeft, Math.min(f.pos, m[3])), - m = l( - f.labelRight, - Math.max(f.isRadial ? 0 : f.pos + f.len, h - m[1]), - ), - c = this.label, - b = this.rotation, - k = { left: 0, center: 0.5, right: 1 }[ - f.labelAlign || c.attr('align') - ], - z = c.getBBox().width, - B = f.getSlotWidth(), - I = B, - x = 1, - p, - t = {}; - if (b || !1 === n.overflow) - 0 > b && e - k * z < d - ? (p = Math.round(e / Math.cos(b * r) - d)) - : 0 < b && - e + k * z > m && - (p = Math.round((h - e) / Math.cos(b * r))); - else if ( - ((h = e + (1 - k) * z), - e - k * z < d - ? (I = a.x + I * (1 - k) - d) - : h > m && ((I = m - a.x + I * k), (x = -1)), - (I = Math.min(B, I)), - I < B && - 'center' === f.labelAlign && - (a.x += x * (B - I - k * (B - Math.min(z, I)))), - z > I || (f.autoRotation && (c.styles || {}).width)) - ) - p = I; - p && - ((t.width = p), - (n.style || {}).textOverflow || (t.textOverflow = 'ellipsis'), - c.css(t)); - }, - getPosition: function(a, f, l, e) { - var h = this.axis, - m = h.chart, - d = (e && m.oldChartHeight) || m.chartHeight; - return { - x: a - ? h.translate(f + l, null, null, e) + h.transB - : h.left + - h.offset + - (h.opposite - ? ((e && m.oldChartWidth) || m.chartWidth) - h.right - h.left - : 0), - y: a - ? d - h.bottom + h.offset - (h.opposite ? h.height : 0) - : d - h.translate(f + l, null, null, e) - h.transB, - }; - }, - getLabelPosition: function(a, f, l, e, h, m, d, c) { - var b = this.axis, - k = b.transA, - z = b.reversed, - B = b.staggerLines, - n = b.tickRotCorr || { x: 0, y: 0 }, - x = h.y, - u = - e || b.reserveSpaceDefault - ? 0 - : -b.labelOffset * ('center' === b.labelAlign ? 0.5 : 1); - D(x) || - (x = - 0 === b.side - ? l.rotation - ? -8 - : -l.getBBox().height - : 2 === b.side - ? n.y + 8 - : Math.cos(l.rotation * r) * (n.y - l.getBBox(!1, 0).height / 2)); - a = a + h.x + u + n.x - (m && e ? m * k * (z ? -1 : 1) : 0); - f = f + x - (m && !e ? m * k * (z ? 1 : -1) : 0); - B && - ((l = (d / (c || 1)) % B), - b.opposite && (l = B - l - 1), - (f += (b.labelOffset / B) * l)); - return { x: a, y: Math.round(f) }; - }, - getMarkPath: function(a, f, l, e, h, m) { - return m.crispLine( - ['M', a, f, 'L', a + (h ? 0 : -l), f + (h ? l : 0)], - e, - ); - }, - renderGridLine: function(a, f, l) { - var e = this.axis, - h = e.options, - m = this.gridLine, - d = {}, - c = this.pos, - b = this.type, - k = e.tickmarkOffset, - z = e.chart.renderer, - B = b ? b + 'Grid' : 'grid', - n = h[B + 'LineWidth'], - x = h[B + 'LineColor'], - h = h[B + 'LineDashStyle']; - m || - ((d.stroke = x), - (d['stroke-width'] = n), - h && (d.dashstyle = h), - b || (d.zIndex = 1), - a && (d.opacity = 0), - (this.gridLine = m = z - .path() - .attr(d) - .addClass('highcharts-' + (b ? b + '-' : '') + 'grid-line') - .add(e.gridGroup))); - if ( - !a && - m && - (a = e.getPlotLinePath(c + k, m.strokeWidth() * l, a, !0)) - ) - m[this.isNew ? 'attr' : 'animate']({ d: a, opacity: f }); - }, - renderMark: function(a, f, u) { - var e = this.axis, - h = e.options, - m = e.chart.renderer, - d = this.type, - c = d ? d + 'Tick' : 'tick', - b = e.tickSize(c), - k = this.mark, - z = !k, - B = a.x; - a = a.y; - var n = l(h[c + 'Width'], !d && e.isXAxis ? 1 : 0), - h = h[c + 'Color']; - b && - (e.opposite && (b[0] = -b[0]), - z && - ((this.mark = k = m - .path() - .addClass('highcharts-' + (d ? d + '-' : '') + 'tick') - .add(e.axisGroup)), - k.attr({ stroke: h, 'stroke-width': n })), - k[z ? 'attr' : 'animate']({ - d: this.getMarkPath(B, a, b[0], k.strokeWidth() * u, e.horiz, m), - opacity: f, - })); - }, - renderLabel: function(a, f, u, e) { - var h = this.axis, - m = h.horiz, - d = h.options, - c = this.label, - b = d.labels, - k = b.step, - h = h.tickmarkOffset, - z = !0, - B = a.x; - a = a.y; - c && - p(B) && - ((c.xy = a = this.getLabelPosition(B, a, c, m, b, h, e, k)), - (this.isFirst && !this.isLast && !l(d.showFirstLabel, 1)) || - (this.isLast && !this.isFirst && !l(d.showLastLabel, 1)) - ? (z = !1) - : !m || - b.step || - b.rotation || - f || - 0 === u || - this.handleOverflow(a), - k && e % k && (z = !1), - z && p(a.y) - ? ((a.opacity = u), - c[this.isNewLabel ? 'attr' : 'animate'](a), - (this.isNewLabel = !1)) - : (c.attr('y', -9999), (this.isNewLabel = !0))); - }, - render: function(a, f, u) { - var e = this.axis, - h = e.horiz, - m = this.getPosition(h, this.pos, e.tickmarkOffset, f), - d = m.x, - c = m.y, - e = (h && d === e.pos + e.len) || (!h && c === e.pos) ? -1 : 1; - u = l(u, 1); - this.isActive = !0; - this.renderGridLine(f, u, e); - this.renderMark(m, u, e); - this.renderLabel(m, f, u, a); - this.isNew = !1; - }, - destroy: function() { - H(this, this.axis); - }, - }; - })(M); - var V = (function(a) { - var E = a.addEvent, - D = a.animObject, - H = a.arrayMax, - p = a.arrayMin, - f = a.color, - l = a.correctFloat, - r = a.defaultOptions, - n = a.defined, - w = a.deg2rad, - u = a.destroyObjectProperties, - e = a.each, - h = a.extend, - m = a.fireEvent, - d = a.format, - c = a.getMagnitude, - b = a.grep, - k = a.inArray, - z = a.isArray, - B = a.isNumber, - I = a.isString, - x = a.merge, - K = a.normalizeTickInterval, - t = a.objectEach, - C = a.pick, - N = a.removeEvent, - q = a.splat, - A = a.syncTimeout, - F = a.Tick, - G = function() { - this.init.apply(this, arguments); - }; - a.extend(G.prototype, { - defaultOptions: { - dateTimeLabelFormats: { - millisecond: '%H:%M:%S.%L', - second: '%H:%M:%S', - minute: '%H:%M', - hour: '%H:%M', - day: '%e. %b', - week: '%e. %b', - month: "%b '%y", - year: '%Y', - }, - endOnTick: !1, - labels: { - enabled: !0, - style: { color: '#666666', cursor: 'default', fontSize: '11px' }, - x: 0, - }, - maxPadding: 0.01, - minorTickLength: 2, - minorTickPosition: 'outside', - minPadding: 0.01, - startOfWeek: 1, - startOnTick: !1, - tickLength: 10, - tickmarkPlacement: 'between', - tickPixelInterval: 100, - tickPosition: 'outside', - title: { align: 'middle', style: { color: '#666666' } }, - type: 'linear', - minorGridLineColor: '#f2f2f2', - minorGridLineWidth: 1, - minorTickColor: '#999999', - lineColor: '#ccd6eb', - lineWidth: 1, - gridLineColor: '#e6e6e6', - tickColor: '#ccd6eb', - }, - defaultYAxisOptions: { - endOnTick: !0, - tickPixelInterval: 72, - showLastLabel: !0, - labels: { x: -8 }, - maxPadding: 0.05, - minPadding: 0.05, - startOnTick: !0, - title: { rotation: 270, text: 'Values' }, - stackLabels: { - allowOverlap: !1, - enabled: !1, - formatter: function() { - return a.numberFormat(this.total, -1); - }, - style: { - fontSize: '11px', - fontWeight: 'bold', - color: '#000000', - textOutline: '1px contrast', - }, - }, - gridLineWidth: 1, - lineWidth: 0, - }, - defaultLeftAxisOptions: { labels: { x: -15 }, title: { rotation: 270 } }, - defaultRightAxisOptions: { labels: { x: 15 }, title: { rotation: 90 } }, - defaultBottomAxisOptions: { - labels: { autoRotation: [-45], x: 0 }, - title: { rotation: 0 }, - }, - defaultTopAxisOptions: { - labels: { autoRotation: [-45], x: 0 }, - title: { rotation: 0 }, - }, - init: function(a, b) { - var g = b.isX, - v = this; - v.chart = a; - v.horiz = a.inverted && !v.isZAxis ? !g : g; - v.isXAxis = g; - v.coll = v.coll || (g ? 'xAxis' : 'yAxis'); - v.opposite = b.opposite; - v.side = - b.side || (v.horiz ? (v.opposite ? 0 : 2) : v.opposite ? 1 : 3); - v.setOptions(b); - var c = this.options, - d = c.type; - v.labelFormatter = c.labels.formatter || v.defaultLabelFormatter; - v.userOptions = b; - v.minPixelPadding = 0; - v.reversed = c.reversed; - v.visible = !1 !== c.visible; - v.zoomEnabled = !1 !== c.zoomEnabled; - v.hasNames = 'category' === d || !0 === c.categories; - v.categories = c.categories || v.hasNames; - v.names = v.names || []; - v.plotLinesAndBandsGroups = {}; - v.isLog = 'logarithmic' === d; - v.isDatetimeAxis = 'datetime' === d; - v.positiveValuesOnly = v.isLog && !v.allowNegativeLog; - v.isLinked = n(c.linkedTo); - v.ticks = {}; - v.labelEdge = []; - v.minorTicks = {}; - v.plotLinesAndBands = []; - v.alternateBands = {}; - v.len = 0; - v.minRange = v.userMinRange = c.minRange || c.maxZoom; - v.range = c.range; - v.offset = c.offset || 0; - v.stacks = {}; - v.oldStacks = {}; - v.stacksTouched = 0; - v.max = null; - v.min = null; - v.crosshair = C( - c.crosshair, - q(a.options.tooltip.crosshairs)[g ? 0 : 1], - !1, - ); - b = v.options.events; - -1 === k(v, a.axes) && - (g ? a.axes.splice(a.xAxis.length, 0, v) : a.axes.push(v), - a[v.coll].push(v)); - v.series = v.series || []; - a.inverted && - !v.isZAxis && - g && - void 0 === v.reversed && - (v.reversed = !0); - t(b, function(a, g) { - E(v, g, a); - }); - v.lin2log = c.linearToLogConverter || v.lin2log; - v.isLog && ((v.val2lin = v.log2lin), (v.lin2val = v.lin2log)); - }, - setOptions: function(a) { - this.options = x( - this.defaultOptions, - 'yAxis' === this.coll && this.defaultYAxisOptions, - [ - this.defaultTopAxisOptions, - this.defaultRightAxisOptions, - this.defaultBottomAxisOptions, - this.defaultLeftAxisOptions, - ][this.side], - x(r[this.coll], a), - ); - }, - defaultLabelFormatter: function() { - var g = this.axis, - b = this.value, - c = g.categories, - k = this.dateTimeLabelFormat, - e = r.lang, - q = e.numericSymbols, - e = e.numericSymbolMagnitude || 1e3, - h = q && q.length, - m, - z = g.options.labels.format, - g = g.isLog ? Math.abs(b) : g.tickInterval; - if (z) m = d(z, this); - else if (c) m = b; - else if (k) m = a.dateFormat(k, b); - else if (h && 1e3 <= g) - for (; h-- && void 0 === m; ) - (c = Math.pow(e, h + 1)), - g >= c && - 0 === (10 * b) % c && - null !== q[h] && - 0 !== b && - (m = a.numberFormat(b / c, -1) + q[h]); - void 0 === m && - (m = - 1e4 <= Math.abs(b) - ? a.numberFormat(b, -1) - : a.numberFormat(b, -1, void 0, '')); - return m; - }, - getSeriesExtremes: function() { - var a = this, - v = a.chart; - a.hasVisibleSeries = !1; - a.dataMin = a.dataMax = a.threshold = null; - a.softThreshold = !a.isXAxis; - a.buildStacks && a.buildStacks(); - e(a.series, function(g) { - if (g.visible || !v.options.chart.ignoreHiddenSeries) { - var c = g.options, - d = c.threshold, - k; - a.hasVisibleSeries = !0; - a.positiveValuesOnly && 0 >= d && (d = null); - if (a.isXAxis) - (c = g.xData), - c.length && - ((g = p(c)), - (k = H(c)), - B(g) || g instanceof Date || ((c = b(c, B)), (g = p(c))), - (a.dataMin = Math.min(C(a.dataMin, c[0], g), g)), - (a.dataMax = Math.max(C(a.dataMax, c[0], k), k))); - else if ( - (g.getExtremes(), - (k = g.dataMax), - (g = g.dataMin), - n(g) && - n(k) && - ((a.dataMin = Math.min(C(a.dataMin, g), g)), - (a.dataMax = Math.max(C(a.dataMax, k), k))), - n(d) && (a.threshold = d), - !c.softThreshold || a.positiveValuesOnly) - ) - a.softThreshold = !1; - } - }); - }, - translate: function(a, b, c, d, k, e) { - var g = this.linkedParent || this, - v = 1, - q = 0, - h = d ? g.oldTransA : g.transA; - d = d ? g.oldMin : g.min; - var m = g.minPixelPadding; - k = (g.isOrdinal || g.isBroken || (g.isLog && k)) && g.lin2val; - h || (h = g.transA); - c && ((v *= -1), (q = g.len)); - g.reversed && ((v *= -1), (q -= v * (g.sector || g.len))); - b - ? ((a = (a * v + q - m) / h + d), k && (a = g.lin2val(a))) - : (k && (a = g.val2lin(a)), - (a = B(d) - ? v * (a - d) * h + q + v * m + (B(e) ? h * e : 0) - : void 0)); - return a; - }, - toPixels: function(a, b) { - return ( - this.translate(a, !1, !this.horiz, null, !0) + (b ? 0 : this.pos) - ); - }, - toValue: function(a, b) { - return this.translate( - a - (b ? 0 : this.pos), - !0, - !this.horiz, - null, - !0, - ); - }, - getPlotLinePath: function(a, b, c, d, k) { - var g = this.chart, - v = this.left, - q = this.top, - e, - h, - m = (c && g.oldChartHeight) || g.chartHeight, - z = (c && g.oldChartWidth) || g.chartWidth, - A; - e = this.transB; - var t = function(a, g, b) { - if (a < g || a > b) d ? (a = Math.min(Math.max(g, a), b)) : (A = !0); - return a; - }; - k = C(k, this.translate(a, null, null, c)); - a = c = Math.round(k + e); - e = h = Math.round(m - k - e); - B(k) - ? this.horiz - ? ((e = q), - (h = m - this.bottom), - (a = c = t(a, v, v + this.width))) - : ((a = v), - (c = z - this.right), - (e = h = t(e, q, q + this.height))) - : ((A = !0), (d = !1)); - return A && !d - ? null - : g.renderer.crispLine(['M', a, e, 'L', c, h], b || 1); - }, - getLinearTickPositions: function(a, b, c) { - var g, - v = l(Math.floor(b / a) * a); - c = l(Math.ceil(c / a) * a); - var d = [], - k; - l(v + a) === v && (k = 20); - if (this.single) return [b]; - for (b = v; b <= c; ) { - d.push(b); - b = l(b + a, k); - if (b === g) break; - g = b; - } - return d; - }, - getMinorTickInterval: function() { - var a = this.options; - return !0 === a.minorTicks - ? C(a.minorTickInterval, 'auto') - : !1 === a.minorTicks - ? null - : a.minorTickInterval; - }, - getMinorTickPositions: function() { - var a = this, - b = a.options, - c = a.tickPositions, - d = a.minorTickInterval, - k = [], - q = a.pointRangePadding || 0, - h = a.min - q, - q = a.max + q, - m = q - h; - if (m && m / d < a.len / 3) - if (a.isLog) - e(this.paddedTicks, function(g, b, v) { - b && - k.push.apply(k, a.getLogTickPositions(d, v[b - 1], v[b], !0)); - }); - else if (a.isDatetimeAxis && 'auto' === this.getMinorTickInterval()) - k = k.concat( - a.getTimeTicks( - a.normalizeTimeTickInterval(d), - h, - q, - b.startOfWeek, - ), - ); - else - for (b = h + ((c[0] - h) % d); b <= q && b !== k[0]; b += d) - k.push(b); - 0 !== k.length && a.trimTicks(k); - return k; - }, - adjustForMinRange: function() { - var a = this.options, - b = this.min, - c = this.max, - d, - k, - q, - h, - m, - z, - A, - t; - this.isXAxis && - void 0 === this.minRange && - !this.isLog && - (n(a.min) || n(a.max) - ? (this.minRange = null) - : (e(this.series, function(a) { - z = a.xData; - for (h = A = a.xIncrement ? 1 : z.length - 1; 0 < h; h--) - if (((m = z[h] - z[h - 1]), void 0 === q || m < q)) q = m; - }), - (this.minRange = Math.min(5 * q, this.dataMax - this.dataMin)))); - c - b < this.minRange && - ((k = this.dataMax - this.dataMin >= this.minRange), - (t = this.minRange), - (d = (t - c + b) / 2), - (d = [b - d, C(a.min, b - d)]), - k && (d[2] = this.isLog ? this.log2lin(this.dataMin) : this.dataMin), - (b = H(d)), - (c = [b + t, C(a.max, b + t)]), - k && (c[2] = this.isLog ? this.log2lin(this.dataMax) : this.dataMax), - (c = p(c)), - c - b < t && ((d[0] = c - t), (d[1] = C(a.min, c - t)), (b = H(d)))); - this.min = b; - this.max = c; - }, - getClosest: function() { - var a; - this.categories - ? (a = 1) - : e(this.series, function(g) { - var b = g.closestPointRange, - v = g.visible || !g.chart.options.chart.ignoreHiddenSeries; - !g.noSharedTooltip && - n(b) && - v && - (a = n(a) ? Math.min(a, b) : b); - }); - return a; - }, - nameToX: function(a) { - var g = z(this.categories), - b = g ? this.categories : this.names, - c = a.options.x, - d; - a.series.requireSorting = !1; - n(c) || - (c = - !1 === this.options.uniqueNames - ? a.series.autoIncrement() - : k(a.name, b)); - -1 === c ? g || (d = b.length) : (d = c); - void 0 !== d && (this.names[d] = a.name); - return d; - }, - updateNames: function() { - var a = this; - 0 < this.names.length && - ((this.names.length = 0), - (this.minRange = this.userMinRange), - e(this.series || [], function(g) { - g.xIncrement = null; - if (!g.points || g.isDirtyData) g.processData(), g.generatePoints(); - e(g.points, function(b, v) { - var c; - b.options && - ((c = a.nameToX(b)), - void 0 !== c && c !== b.x && ((b.x = c), (g.xData[v] = c))); - }); - })); - }, - setAxisTranslation: function(a) { - var g = this, - b = g.max - g.min, - c = g.axisPointRange || 0, - d, - k = 0, - q = 0, - h = g.linkedParent, - m = !!g.categories, - z = g.transA, - A = g.isXAxis; - if (A || m || c) - (d = g.getClosest()), - h - ? ((k = h.minPointOffset), (q = h.pointRangePadding)) - : e(g.series, function(a) { - var b = m - ? 1 - : A - ? C(a.options.pointRange, d, 0) - : g.axisPointRange || 0; - a = a.options.pointPlacement; - c = Math.max(c, b); - g.single || - ((k = Math.max(k, I(a) ? 0 : b / 2)), - (q = Math.max(q, 'on' === a ? 0 : b))); - }), - (h = g.ordinalSlope && d ? g.ordinalSlope / d : 1), - (g.minPointOffset = k *= h), - (g.pointRangePadding = q *= h), - (g.pointRange = Math.min(c, b)), - A && (g.closestPointRange = d); - a && (g.oldTransA = z); - g.translationSlope = g.transA = z = - g.options.staticScale || g.len / (b + q || 1); - g.transB = g.horiz ? g.left : g.bottom; - g.minPixelPadding = z * k; - }, - minFromRange: function() { - return this.max - this.range; - }, - setTickInterval: function(g) { - var b = this, - d = b.chart, - k = b.options, - q = b.isLog, - h = b.log2lin, - z = b.isDatetimeAxis, - A = b.isXAxis, - t = b.isLinked, - x = k.maxPadding, - f = k.minPadding, - F = k.tickInterval, - u = k.tickPixelInterval, - G = b.categories, - p = b.threshold, - I = b.softThreshold, - r, - w, - N, - D; - z || G || t || this.getTickAmount(); - N = C(b.userMin, k.min); - D = C(b.userMax, k.max); - t - ? ((b.linkedParent = d[b.coll][k.linkedTo]), - (d = b.linkedParent.getExtremes()), - (b.min = C(d.min, d.dataMin)), - (b.max = C(d.max, d.dataMax)), - k.type !== b.linkedParent.options.type && a.error(11, 1)) - : (!I && - n(p) && - (b.dataMin >= p - ? ((r = p), (f = 0)) - : b.dataMax <= p && ((w = p), (x = 0))), - (b.min = C(N, r, b.dataMin)), - (b.max = C(D, w, b.dataMax))); - q && - (b.positiveValuesOnly && - !g && - 0 >= Math.min(b.min, C(b.dataMin, b.min)) && - a.error(10, 1), - (b.min = l(h(b.min), 15)), - (b.max = l(h(b.max), 15))); - b.range && - n(b.max) && - ((b.userMin = b.min = N = Math.max(b.dataMin, b.minFromRange())), - (b.userMax = D = b.max), - (b.range = null)); - m(b, 'foundExtremes'); - b.beforePadding && b.beforePadding(); - b.adjustForMinRange(); - !(G || b.axisPointRange || b.usePercentage || t) && - n(b.min) && - n(b.max) && - (h = b.max - b.min) && - (!n(N) && f && (b.min -= h * f), !n(D) && x && (b.max += h * x)); - B(k.softMin) && !B(b.userMin) && (b.min = Math.min(b.min, k.softMin)); - B(k.softMax) && !B(b.userMax) && (b.max = Math.max(b.max, k.softMax)); - B(k.floor) && (b.min = Math.max(b.min, k.floor)); - B(k.ceiling) && (b.max = Math.min(b.max, k.ceiling)); - I && - n(b.dataMin) && - ((p = p || 0), - !n(N) && b.min < p && b.dataMin >= p - ? (b.min = p) - : !n(D) && b.max > p && b.dataMax <= p && (b.max = p)); - b.tickInterval = - b.min === b.max || void 0 === b.min || void 0 === b.max - ? 1 - : t && !F && u === b.linkedParent.options.tickPixelInterval - ? (F = b.linkedParent.tickInterval) - : C( - F, - this.tickAmount - ? (b.max - b.min) / Math.max(this.tickAmount - 1, 1) - : void 0, - G ? 1 : ((b.max - b.min) * u) / Math.max(b.len, u), - ); - A && - !g && - e(b.series, function(a) { - a.processData(b.min !== b.oldMin || b.max !== b.oldMax); - }); - b.setAxisTranslation(!0); - b.beforeSetTickPositions && b.beforeSetTickPositions(); - b.postProcessTickInterval && - (b.tickInterval = b.postProcessTickInterval(b.tickInterval)); - b.pointRange && - !F && - (b.tickInterval = Math.max(b.pointRange, b.tickInterval)); - g = C(k.minTickInterval, b.isDatetimeAxis && b.closestPointRange); - !F && b.tickInterval < g && (b.tickInterval = g); - z || - q || - F || - (b.tickInterval = K( - b.tickInterval, - null, - c(b.tickInterval), - C( - k.allowDecimals, - !( - 0.5 < b.tickInterval && - 5 > b.tickInterval && - 1e3 < b.max && - 9999 > b.max - ), - ), - !!this.tickAmount, - )); - this.tickAmount || (b.tickInterval = b.unsquish()); - this.setTickPositions(); - }, - setTickPositions: function() { - var a = this.options, - b, - c = a.tickPositions; - b = this.getMinorTickInterval(); - var d = a.tickPositioner, - k = a.startOnTick, - q = a.endOnTick; - this.tickmarkOffset = - this.categories && - 'between' === a.tickmarkPlacement && - 1 === this.tickInterval - ? 0.5 - : 0; - this.minorTickInterval = - 'auto' === b && this.tickInterval ? this.tickInterval / 5 : b; - this.single = - this.min === this.max && - n(this.min) && - !this.tickAmount && - (parseInt(this.min, 10) === this.min || !1 !== a.allowDecimals); - this.tickPositions = b = c && c.slice(); - !b && - ((b = this.isDatetimeAxis - ? this.getTimeTicks( - this.normalizeTimeTickInterval(this.tickInterval, a.units), - this.min, - this.max, - a.startOfWeek, - this.ordinalPositions, - this.closestPointRange, - !0, - ) - : this.isLog - ? this.getLogTickPositions(this.tickInterval, this.min, this.max) - : this.getLinearTickPositions( - this.tickInterval, - this.min, - this.max, - )), - b.length > this.len && - ((b = [b[0], b.pop()]), b[0] === b[1] && (b.length = 1)), - (this.tickPositions = b), - d && (d = d.apply(this, [this.min, this.max]))) && - (this.tickPositions = b = d); - this.paddedTicks = b.slice(0); - this.trimTicks(b, k, q); - this.isLinked || - (this.single && - 2 > b.length && - ((this.min -= 0.5), (this.max += 0.5)), - c || d || this.adjustTickAmount()); - }, - trimTicks: function(a, b, c) { - var g = a[0], - d = a[a.length - 1], - k = this.minPointOffset || 0; - if (!this.isLinked) { - if (b && -Infinity !== g) this.min = g; - else for (; this.min - k > a[0]; ) a.shift(); - if (c) this.max = d; - else for (; this.max + k < a[a.length - 1]; ) a.pop(); - 0 === a.length && - n(g) && - !this.options.tickPositions && - a.push((d + g) / 2); - } - }, - alignToOthers: function() { - var a = {}, - b, - c = this.options; - !1 === this.chart.options.chart.alignTicks || - !1 === c.alignTicks || - this.isLog || - e(this.chart[this.coll], function(g) { - var c = g.options, - c = [g.horiz ? c.left : c.top, c.width, c.height, c.pane].join(); - g.series.length && (a[c] ? (b = !0) : (a[c] = 1)); - }); - return b; - }, - getTickAmount: function() { - var a = this.options, - b = a.tickAmount, - c = a.tickPixelInterval; - !n(a.tickInterval) && - this.len < c && - !this.isRadial && - !this.isLog && - a.startOnTick && - a.endOnTick && - (b = 2); - !b && this.alignToOthers() && (b = Math.ceil(this.len / c) + 1); - 4 > b && ((this.finalTickAmt = b), (b = 5)); - this.tickAmount = b; - }, - adjustTickAmount: function() { - var a = this.tickInterval, - b = this.tickPositions, - c = this.tickAmount, - d = this.finalTickAmt, - k = b && b.length, - q = C(this.threshold, this.softThreshold ? 0 : null); - if (this.hasData()) { - if (k < c) { - for (; b.length < c; ) - b.length % 2 || this.min === q - ? b.push(l(b[b.length - 1] + a)) - : b.unshift(l(b[0] - a)); - this.transA *= (k - 1) / (c - 1); - this.min = b[0]; - this.max = b[b.length - 1]; - } else k > c && ((this.tickInterval *= 2), this.setTickPositions()); - if (n(d)) { - for (a = c = b.length; a--; ) - ((3 === d && 1 === a % 2) || (2 >= d && 0 < a && a < c - 1)) && - b.splice(a, 1); - this.finalTickAmt = void 0; - } - } - }, - setScale: function() { - var a, b; - this.oldMin = this.min; - this.oldMax = this.max; - this.oldAxisLength = this.len; - this.setAxisSize(); - b = this.len !== this.oldAxisLength; - e(this.series, function(b) { - if (b.isDirtyData || b.isDirty || b.xAxis.isDirty) a = !0; - }); - b || - a || - this.isLinked || - this.forceRedraw || - this.userMin !== this.oldUserMin || - this.userMax !== this.oldUserMax || - this.alignToOthers() - ? (this.resetStacks && this.resetStacks(), - (this.forceRedraw = !1), - this.getSeriesExtremes(), - this.setTickInterval(), - (this.oldUserMin = this.userMin), - (this.oldUserMax = this.userMax), - this.isDirty || - (this.isDirty = - b || this.min !== this.oldMin || this.max !== this.oldMax)) - : this.cleanStacks && this.cleanStacks(); - }, - setExtremes: function(a, b, c, d, k) { - var g = this, - q = g.chart; - c = C(c, !0); - e(g.series, function(a) { - delete a.kdTree; - }); - k = h(k, { min: a, max: b }); - m(g, 'setExtremes', k, function() { - g.userMin = a; - g.userMax = b; - g.eventArgs = k; - c && q.redraw(d); - }); - }, - zoom: function(a, b) { - var g = this.dataMin, - c = this.dataMax, - d = this.options, - k = Math.min(g, C(d.min, g)), - d = Math.max(c, C(d.max, c)); - if (a !== this.min || b !== this.max) - this.allowZoomOutside || - (n(g) && (a < k && (a = k), a > d && (a = d)), - n(c) && (b < k && (b = k), b > d && (b = d))), - (this.displayBtn = void 0 !== a || void 0 !== b), - this.setExtremes(a, b, !1, void 0, { trigger: 'zoom' }); - return !0; - }, - setAxisSize: function() { - var b = this.chart, - c = this.options, - d = c.offsets || [0, 0, 0, 0], - k = this.horiz, - q = (this.width = Math.round( - a.relativeLength( - C(c.width, b.plotWidth - d[3] + d[1]), - b.plotWidth, - ), - )), - e = (this.height = Math.round( - a.relativeLength( - C(c.height, b.plotHeight - d[0] + d[2]), - b.plotHeight, - ), - )), - h = (this.top = Math.round( - a.relativeLength( - C(c.top, b.plotTop + d[0]), - b.plotHeight, - b.plotTop, - ), - )), - c = (this.left = Math.round( - a.relativeLength( - C(c.left, b.plotLeft + d[3]), - b.plotWidth, - b.plotLeft, - ), - )); - this.bottom = b.chartHeight - e - h; - this.right = b.chartWidth - q - c; - this.len = Math.max(k ? q : e, 0); - this.pos = k ? c : h; - }, - getExtremes: function() { - var a = this.isLog, - b = this.lin2log; - return { - min: a ? l(b(this.min)) : this.min, - max: a ? l(b(this.max)) : this.max, - dataMin: this.dataMin, - dataMax: this.dataMax, - userMin: this.userMin, - userMax: this.userMax, - }; - }, - getThreshold: function(a) { - var b = this.isLog, - g = this.lin2log, - c = b ? g(this.min) : this.min, - b = b ? g(this.max) : this.max; - null === a ? (a = c) : c > a ? (a = c) : b < a && (a = b); - return this.translate(a, 0, 1, 0, 1); - }, - autoLabelAlign: function(a) { - a = (C(a, 0) - 90 * this.side + 720) % 360; - return 15 < a && 165 > a - ? 'right' - : 195 < a && 345 > a - ? 'left' - : 'center'; - }, - tickSize: function(a) { - var b = this.options, - g = b[a + 'Length'], - c = C(b[a + 'Width'], 'tick' === a && this.isXAxis ? 1 : 0); - if (c && g) return 'inside' === b[a + 'Position'] && (g = -g), [g, c]; - }, - labelMetrics: function() { - var a = (this.tickPositions && this.tickPositions[0]) || 0; - return this.chart.renderer.fontMetrics( - this.options.labels.style && this.options.labels.style.fontSize, - this.ticks[a] && this.ticks[a].label, - ); - }, - unsquish: function() { - var a = this.options.labels, - b = this.horiz, - c = this.tickInterval, - d = c, - k = - this.len / (((this.categories ? 1 : 0) + this.max - this.min) / c), - q, - h = a.rotation, - m = this.labelMetrics(), - z, - A = Number.MAX_VALUE, - t, - x = function(a) { - a /= k || 1; - a = 1 < a ? Math.ceil(a) : 1; - return a * c; - }; - b - ? (t = - !a.staggerLines && - !a.step && - (n(h) - ? [h] - : k < C(a.autoRotationLimit, 80) && a.autoRotation)) && - e(t, function(a) { - var b; - if (a === h || (a && -90 <= a && 90 >= a)) - (z = x(Math.abs(m.h / Math.sin(w * a)))), - (b = z + Math.abs(a / 360)), - b < A && ((A = b), (q = a), (d = z)); - }) - : a.step || (d = x(m.h)); - this.autoRotation = t; - this.labelRotation = C(q, h); - return d; - }, - getSlotWidth: function() { - var a = this.chart, - b = this.horiz, - c = this.options.labels, - d = Math.max( - this.tickPositions.length - (this.categories ? 0 : 1), - 1, - ), - k = a.margin[3]; - return ( - (b && - 2 > (c.step || 0) && - !c.rotation && - ((this.staggerLines || 1) * this.len) / d) || - (!b && - ((c.style && parseInt(c.style.width, 10)) || - (k && k - a.spacing[3]) || - 0.33 * a.chartWidth)) - ); - }, - renderUnsquish: function() { - var a = this.chart, - b = a.renderer, - c = this.tickPositions, - d = this.ticks, - k = this.options.labels, - q = this.horiz, - h = this.getSlotWidth(), - m = Math.max(1, Math.round(h - 2 * (k.padding || 5))), - z = {}, - A = this.labelMetrics(), - t = k.style && k.style.textOverflow, - f, - F = 0, - l, - B; - I(k.rotation) || (z.rotation = k.rotation || 0); - e(c, function(a) { - (a = d[a]) && a.labelLength > F && (F = a.labelLength); - }); - this.maxLabelLength = F; - if (this.autoRotation) - F > m && F > A.h - ? (z.rotation = this.labelRotation) - : (this.labelRotation = 0); - else if (h && ((f = { width: m + 'px' }), !t)) - for (f.textOverflow = 'clip', l = c.length; !q && l--; ) - if (((B = c[l]), (m = d[B].label))) - m.styles && 'ellipsis' === m.styles.textOverflow - ? m.css({ textOverflow: 'clip' }) - : d[B].labelLength > h && m.css({ width: h + 'px' }), - m.getBBox().height > this.len / c.length - (A.h - A.f) && - (m.specCss = { textOverflow: 'ellipsis' }); - z.rotation && - ((f = { - width: - (F > 0.5 * a.chartHeight ? 0.33 * a.chartHeight : a.chartHeight) + - 'px', - }), - t || (f.textOverflow = 'ellipsis')); - if ( - (this.labelAlign = k.align || this.autoLabelAlign(this.labelRotation)) - ) - z.align = this.labelAlign; - e(c, function(a) { - var b = (a = d[a]) && a.label; - b && - (b.attr(z), - f && b.css(x(f, b.specCss)), - delete b.specCss, - (a.rotation = z.rotation)); - }); - this.tickRotCorr = b.rotCorr( - A.b, - this.labelRotation || 0, - 0 !== this.side, - ); - }, - hasData: function() { - return ( - this.hasVisibleSeries || - (n(this.min) && - n(this.max) && - this.tickPositions && - 0 < this.tickPositions.length) - ); - }, - addTitle: function(a) { - var b = this.chart.renderer, - g = this.horiz, - c = this.opposite, - d = this.options.title, - k; - this.axisTitle || - ((k = d.textAlign) || - (k = (g - ? { low: 'left', middle: 'center', high: 'right' } - : { - low: c ? 'right' : 'left', - middle: 'center', - high: c ? 'left' : 'right', - })[d.align]), - (this.axisTitle = b - .text(d.text, 0, 0, d.useHTML) - .attr({ zIndex: 7, rotation: d.rotation || 0, align: k }) - .addClass('highcharts-axis-title') - .css(d.style) - .add(this.axisGroup)), - (this.axisTitle.isNew = !0)); - d.style.width || - this.isRadial || - this.axisTitle.css({ width: this.len }); - this.axisTitle[a ? 'show' : 'hide'](!0); - }, - generateTick: function(a) { - var b = this.ticks; - b[a] ? b[a].addLabel() : (b[a] = new F(this, a)); - }, - getOffset: function() { - var a = this, - b = a.chart, - c = b.renderer, - d = a.options, - k = a.tickPositions, - q = a.ticks, - h = a.horiz, - m = a.side, - z = b.inverted && !a.isZAxis ? [1, 0, 3, 2][m] : m, - A, - x, - f = 0, - F, - l = 0, - B = d.title, - u = d.labels, - G = 0, - p = b.axisOffset, - b = b.clipOffset, - I = [-1, 1, 1, -1][m], - r = d.className, - w = a.axisParent, - K = this.tickSize('tick'); - A = a.hasData(); - a.showAxis = x = A || C(d.showEmpty, !0); - a.staggerLines = a.horiz && u.staggerLines; - a.axisGroup || - ((a.gridGroup = c - .g('grid') - .attr({ zIndex: d.gridZIndex || 1 }) - .addClass( - 'highcharts-' + this.coll.toLowerCase() + '-grid ' + (r || ''), - ) - .add(w)), - (a.axisGroup = c - .g('axis') - .attr({ zIndex: d.zIndex || 2 }) - .addClass('highcharts-' + this.coll.toLowerCase() + ' ' + (r || '')) - .add(w)), - (a.labelGroup = c - .g('axis-labels') - .attr({ zIndex: u.zIndex || 7 }) - .addClass( - 'highcharts-' + a.coll.toLowerCase() + '-labels ' + (r || ''), - ) - .add(w))); - A || a.isLinked - ? (e(k, function(b, c) { - a.generateTick(b, c); - }), - a.renderUnsquish(), - (a.reserveSpaceDefault = - 0 === m || - 2 === m || - { 1: 'left', 3: 'right' }[m] === a.labelAlign), - C( - u.reserveSpace, - 'center' === a.labelAlign ? !0 : null, - a.reserveSpaceDefault, - ) && - e(k, function(a) { - G = Math.max(q[a].getLabelSize(), G); - }), - a.staggerLines && (G *= a.staggerLines), - (a.labelOffset = G * (a.opposite ? -1 : 1))) - : t(q, function(a, b) { - a.destroy(); - delete q[b]; - }); - B && - B.text && - !1 !== B.enabled && - (a.addTitle(x), - x && - !1 !== B.reserveSpace && - ((a.titleOffset = f = a.axisTitle.getBBox()[ - h ? 'height' : 'width' - ]), - (F = B.offset), - (l = n(F) ? 0 : C(B.margin, h ? 5 : 10)))); - a.renderLine(); - a.offset = I * C(d.offset, p[m]); - a.tickRotCorr = a.tickRotCorr || { x: 0, y: 0 }; - c = 0 === m ? -a.labelMetrics().h : 2 === m ? a.tickRotCorr.y : 0; - l = Math.abs(G) + l; - G && (l = l - c + I * (h ? C(u.y, a.tickRotCorr.y + 8 * I) : u.x)); - a.axisTitleMargin = C(F, l); - p[m] = Math.max( - p[m], - a.axisTitleMargin + f + I * a.offset, - l, - A && k.length && K ? K[0] + I * a.offset : 0, - ); - d = d.offset ? 0 : 2 * Math.floor(a.axisLine.strokeWidth() / 2); - b[z] = Math.max(b[z], d); - }, - getLinePath: function(a) { - var b = this.chart, - c = this.opposite, - g = this.offset, - d = this.horiz, - k = this.left + (c ? this.width : 0) + g, - g = b.chartHeight - this.bottom - (c ? this.height : 0) + g; - c && (a *= -1); - return b.renderer.crispLine( - [ - 'M', - d ? this.left : k, - d ? g : this.top, - 'L', - d ? b.chartWidth - this.right : k, - d ? g : b.chartHeight - this.bottom, - ], - a, - ); - }, - renderLine: function() { - this.axisLine || - ((this.axisLine = this.chart.renderer - .path() - .addClass('highcharts-axis-line') - .add(this.axisGroup)), - this.axisLine.attr({ - stroke: this.options.lineColor, - 'stroke-width': this.options.lineWidth, - zIndex: 7, - })); - }, - getTitlePosition: function() { - var a = this.horiz, - b = this.left, - c = this.top, - d = this.len, - k = this.options.title, - q = a ? b : c, - e = this.opposite, - h = this.offset, - m = k.x || 0, - z = k.y || 0, - A = this.axisTitle, - t = this.chart.renderer.fontMetrics(k.style && k.style.fontSize, A), - A = Math.max(A.getBBox(null, 0).height - t.h - 1, 0), - d = { - low: q + (a ? 0 : d), - middle: q + d / 2, - high: q + (a ? d : 0), - }[k.align], - b = - (a ? c + this.height : b) + - (a ? 1 : -1) * (e ? -1 : 1) * this.axisTitleMargin + - [-A, A, t.f, -A][this.side]; - return { - x: a ? d + m : b + (e ? this.width : 0) + h + m, - y: a ? b + z - (e ? this.height : 0) + h : d + z, - }; - }, - renderMinorTick: function(a) { - var b = this.chart.hasRendered && B(this.oldMin), - c = this.minorTicks; - c[a] || (c[a] = new F(this, a, 'minor')); - b && c[a].isNew && c[a].render(null, !0); - c[a].render(null, !1, 1); - }, - renderTick: function(a, b) { - var c = this.isLinked, - g = this.ticks, - d = this.chart.hasRendered && B(this.oldMin); - if (!c || (a >= this.min && a <= this.max)) - g[a] || (g[a] = new F(this, a)), - d && g[a].isNew && g[a].render(b, !0, 0.1), - g[a].render(b); - }, - render: function() { - var b = this, - c = b.chart, - d = b.options, - k = b.isLog, - q = b.lin2log, - h = b.isLinked, - m = b.tickPositions, - z = b.axisTitle, - x = b.ticks, - f = b.minorTicks, - l = b.alternateBands, - C = d.stackLabels, - n = d.alternateGridColor, - u = b.tickmarkOffset, - G = b.axisLine, - p = b.showAxis, - I = D(c.renderer.globalAnimation), - r, - w; - b.labelEdge.length = 0; - b.overlap = !1; - e([x, f, l], function(a) { - t(a, function(a) { - a.isActive = !1; - }); - }); - if (b.hasData() || h) - b.minorTickInterval && - !b.categories && - e(b.getMinorTickPositions(), function(a) { - b.renderMinorTick(a); - }), - m.length && - (e(m, function(a, c) { - b.renderTick(a, c); - }), - u && - (0 === b.min || b.single) && - (x[-1] || (x[-1] = new F(b, -1, null, !0)), x[-1].render(-1))), - n && - e(m, function(d, g) { - w = void 0 !== m[g + 1] ? m[g + 1] + u : b.max - u; - 0 === g % 2 && - d < b.max && - w <= b.max + (c.polar ? -u : u) && - (l[d] || (l[d] = new a.PlotLineOrBand(b)), - (r = d + u), - (l[d].options = { - from: k ? q(r) : r, - to: k ? q(w) : w, - color: n, - }), - l[d].render(), - (l[d].isActive = !0)); - }), - b._addedPlotLB || - (e((d.plotLines || []).concat(d.plotBands || []), function(a) { - b.addPlotBandOrLine(a); - }), - (b._addedPlotLB = !0)); - e([x, f, l], function(a) { - var b, - d = [], - g = I.duration; - t(a, function(a, b) { - a.isActive || (a.render(b, !1, 0), (a.isActive = !1), d.push(b)); - }); - A( - function() { - for (b = d.length; b--; ) - a[d[b]] && - !a[d[b]].isActive && - (a[d[b]].destroy(), delete a[d[b]]); - }, - a !== l && c.hasRendered && g ? g : 0, - ); - }); - G && - (G[G.isPlaced ? 'animate' : 'attr']({ - d: this.getLinePath(G.strokeWidth()), - }), - (G.isPlaced = !0), - G[p ? 'show' : 'hide'](!0)); - z && - p && - ((d = b.getTitlePosition()), - B(d.y) - ? (z[z.isNew ? 'attr' : 'animate'](d), (z.isNew = !1)) - : (z.attr('y', -9999), (z.isNew = !0))); - C && C.enabled && b.renderStackTotals(); - b.isDirty = !1; - }, - redraw: function() { - this.visible && - (this.render(), - e(this.plotLinesAndBands, function(a) { - a.render(); - })); - e(this.series, function(a) { - a.isDirty = !0; - }); - }, - keepProps: 'extKey hcEvents names series userMax userMin'.split(' '), - destroy: function(a) { - var b = this, - c = b.stacks, - d = b.plotLinesAndBands, - g; - a || N(b); - t(c, function(a, b) { - u(a); - c[b] = null; - }); - e([b.ticks, b.minorTicks, b.alternateBands], function(a) { - u(a); - }); - if (d) for (a = d.length; a--; ) d[a].destroy(); - e( - 'stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross'.split( - ' ', - ), - function(a) { - b[a] && (b[a] = b[a].destroy()); - }, - ); - for (g in b.plotLinesAndBandsGroups) - b.plotLinesAndBandsGroups[g] = b.plotLinesAndBandsGroups[g].destroy(); - t(b, function(a, c) { - -1 === k(c, b.keepProps) && delete b[c]; - }); - }, - drawCrosshair: function(a, b) { - var c, - d = this.crosshair, - g = C(d.snap, !0), - k, - q = this.cross; - a || (a = this.cross && this.cross.e); - this.crosshair && !1 !== (n(b) || !g) - ? (g - ? n(b) && (k = this.isXAxis ? b.plotX : this.len - b.plotY) - : (k = - a && - (this.horiz - ? a.chartX - this.pos - : this.len - a.chartY + this.pos)), - n(k) && - (c = - this.getPlotLinePath( - b && (this.isXAxis ? b.x : C(b.stackY, b.y)), - null, - null, - null, - k, - ) || null), - n(c) - ? ((b = this.categories && !this.isRadial), - q || - ((this.cross = q = this.chart.renderer - .path() - .addClass( - 'highcharts-crosshair highcharts-crosshair-' + - (b ? 'category ' : 'thin ') + - d.className, - ) - .attr({ zIndex: C(d.zIndex, 2) }) - .add()), - q - .attr({ - stroke: - d.color || - (b - ? f('#ccd6eb') - .setOpacity(0.25) - .get() - : '#cccccc'), - 'stroke-width': C(d.width, 1), - }) - .css({ 'pointer-events': 'none' }), - d.dashStyle && q.attr({ dashstyle: d.dashStyle })), - q.show().attr({ d: c }), - b && !d.width && q.attr({ 'stroke-width': this.transA }), - (this.cross.e = a)) - : this.hideCrosshair()) - : this.hideCrosshair(); - }, - hideCrosshair: function() { - this.cross && this.cross.hide(); - }, - }); - return (a.Axis = G); - })(M); - (function(a) { - var E = a.Axis, - D = a.Date, - H = a.dateFormat, - p = a.defaultOptions, - f = a.defined, - l = a.each, - r = a.extend, - n = a.getMagnitude, - w = a.getTZOffset, - u = a.normalizeTickInterval, - e = a.pick, - h = a.timeUnits; - E.prototype.getTimeTicks = function(a, d, c, b) { - var k = [], - m = {}, - B = p.global.useUTC, - n, - x = new D(d - Math.max(w(d), w(c))), - u = D.hcMakeTime, - t = a.unitRange, - C = a.count, - N, - q; - if (f(d)) { - x[D.hcSetMilliseconds]( - t >= h.second ? 0 : C * Math.floor(x.getMilliseconds() / C), - ); - if (t >= h.second) - x[D.hcSetSeconds]( - t >= h.minute ? 0 : C * Math.floor(x.getSeconds() / C), - ); - if (t >= h.minute) - x[D.hcSetMinutes]( - t >= h.hour ? 0 : C * Math.floor(x[D.hcGetMinutes]() / C), - ); - if (t >= h.hour) - x[D.hcSetHours]( - t >= h.day ? 0 : C * Math.floor(x[D.hcGetHours]() / C), - ); - if (t >= h.day) - x[D.hcSetDate]( - t >= h.month ? 1 : C * Math.floor(x[D.hcGetDate]() / C), - ); - t >= h.month && - (x[D.hcSetMonth]( - t >= h.year ? 0 : C * Math.floor(x[D.hcGetMonth]() / C), - ), - (n = x[D.hcGetFullYear]())); - if (t >= h.year) x[D.hcSetFullYear](n - (n % C)); - if (t === h.week) - x[D.hcSetDate](x[D.hcGetDate]() - x[D.hcGetDay]() + e(b, 1)); - n = x[D.hcGetFullYear](); - b = x[D.hcGetMonth](); - var A = x[D.hcGetDate](), - F = x[D.hcGetHours](); - d = x.getTime(); - D.hcHasTimeZone && - ((q = - (!B || !!D.hcGetTimezoneOffset) && - (c - d > 4 * h.month || w(d) !== w(c))), - (N = w(x)), - (x = new D(d + N))); - B = x.getTime(); - for (d = 1; B < c; ) - k.push(B), - (B = - t === h.year - ? u(n + d * C, 0) - : t === h.month - ? u(n, b + d * C) - : !q || (t !== h.day && t !== h.week) - ? q && t === h.hour - ? u(n, b, A, F + d * C, 0, 0, N) - N - : B + t * C - : u(n, b, A + d * C * (t === h.day ? 1 : 7))), - d++; - k.push(B); - t <= h.hour && - 1e4 > k.length && - l(k, function(a) { - 0 === a % 18e5 && - '000000000' === H('%H%M%S%L', a) && - (m[a] = 'day'); - }); - } - k.info = r(a, { higherRanks: m, totalRange: t * C }); - return k; - }; - E.prototype.normalizeTimeTickInterval = function(a, d) { - var c = d || [ - ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], - ['second', [1, 2, 5, 10, 15, 30]], - ['minute', [1, 2, 5, 10, 15, 30]], - ['hour', [1, 2, 3, 4, 6, 8, 12]], - ['day', [1, 2]], - ['week', [1, 2]], - ['month', [1, 2, 3, 4, 6]], - ['year', null], - ]; - d = c[c.length - 1]; - var b = h[d[0]], - k = d[1], - e; - for ( - e = 0; - e < c.length && - !((d = c[e]), - (b = h[d[0]]), - (k = d[1]), - c[e + 1] && a <= (b * k[k.length - 1] + h[c[e + 1][0]]) / 2); - e++ - ); - b === h.year && a < 5 * b && (k = [1, 2, 5]); - a = u(a / b, k, 'year' === d[0] ? Math.max(n(a / b), 1) : 1); - return { unitRange: b, count: a, unitName: d[0] }; - }; - })(M); - (function(a) { - var E = a.Axis, - D = a.getMagnitude, - H = a.map, - p = a.normalizeTickInterval, - f = a.pick; - E.prototype.getLogTickPositions = function(a, r, n, w) { - var l = this.options, - e = this.len, - h = this.lin2log, - m = this.log2lin, - d = []; - w || (this._minorAutoInterval = null); - if (0.5 <= a) - (a = Math.round(a)), (d = this.getLinearTickPositions(a, r, n)); - else if (0.08 <= a) - for ( - var e = Math.floor(r), - c, - b, - k, - z, - B, - l = - 0.3 < a - ? [1, 2, 4] - : 0.15 < a - ? [1, 2, 4, 6, 8] - : [1, 2, 3, 4, 5, 6, 7, 8, 9]; - e < n + 1 && !B; - e++ - ) - for (b = l.length, c = 0; c < b && !B; c++) - (k = m(h(e) * l[c])), - k > r && (!w || z <= n) && void 0 !== z && d.push(z), - z > n && (B = !0), - (z = k); - else - (r = h(r)), - (n = h(n)), - (a = w ? this.getMinorTickInterval() : l.tickInterval), - (a = f( - 'auto' === a ? null : a, - this._minorAutoInterval, - ((l.tickPixelInterval / (w ? 5 : 1)) * (n - r)) / - ((w ? e / this.tickPositions.length : e) || 1), - )), - (a = p(a, null, D(a))), - (d = H(this.getLinearTickPositions(a, r, n), m)), - w || (this._minorAutoInterval = a / 5); - w || (this.tickInterval = a); - return d; - }; - E.prototype.log2lin = function(a) { - return Math.log(a) / Math.LN10; - }; - E.prototype.lin2log = function(a) { - return Math.pow(10, a); - }; - })(M); - (function(a, E) { - var D = a.arrayMax, - H = a.arrayMin, - p = a.defined, - f = a.destroyObjectProperties, - l = a.each, - r = a.erase, - n = a.merge, - w = a.pick; - a.PlotLineOrBand = function(a, e) { - this.axis = a; - e && ((this.options = e), (this.id = e.id)); - }; - a.PlotLineOrBand.prototype = { - render: function() { - var f = this, - e = f.axis, - h = e.horiz, - m = f.options, - d = m.label, - c = f.label, - b = m.to, - k = m.from, - z = m.value, - l = p(k) && p(b), - r = p(z), - x = f.svgElem, - K = !x, - t = [], - C = m.color, - N = w(m.zIndex, 0), - q = m.events, - t = { - class: - 'highcharts-plot-' + - (l ? 'band ' : 'line ') + - (m.className || ''), - }, - A = {}, - F = e.chart.renderer, - G = l ? 'bands' : 'lines', - g = e.log2lin; - e.isLog && ((k = g(k)), (b = g(b)), (z = g(z))); - r - ? ((t = { stroke: C, 'stroke-width': m.width }), - m.dashStyle && (t.dashstyle = m.dashStyle)) - : l && - (C && (t.fill = C), - m.borderWidth && - ((t.stroke = m.borderColor), - (t['stroke-width'] = m.borderWidth))); - A.zIndex = N; - G += '-' + N; - (C = e.plotLinesAndBandsGroups[G]) || - (e.plotLinesAndBandsGroups[G] = C = F.g('plot-' + G) - .attr(A) - .add()); - K && - (f.svgElem = x = F.path() - .attr(t) - .add(C)); - if (r) t = e.getPlotLinePath(z, x.strokeWidth()); - else if (l) t = e.getPlotBandPath(k, b, m); - else return; - K && t && t.length - ? (x.attr({ d: t }), - q && - a.objectEach(q, function(a, b) { - x.on(b, function(a) { - q[b].apply(f, [a]); - }); - })) - : x && - (t - ? (x.show(), x.animate({ d: t })) - : (x.hide(), c && (f.label = c = c.destroy()))); - d && - p(d.text) && - t && - t.length && - 0 < e.width && - 0 < e.height && - !t.flat - ? ((d = n( - { - align: h && l && 'center', - x: h ? !l && 4 : 10, - verticalAlign: !h && l && 'middle', - y: h ? (l ? 16 : 10) : l ? 6 : -4, - rotation: h && !l && 90, - }, - d, - )), - this.renderLabel(d, t, l, N)) - : c && c.hide(); - return f; - }, - renderLabel: function(a, e, h, m) { - var d = this.label, - c = this.axis.chart.renderer; - d || - ((d = { - align: a.textAlign || a.align, - rotation: a.rotation, - class: - 'highcharts-plot-' + - (h ? 'band' : 'line') + - '-label ' + - (a.className || ''), - }), - (d.zIndex = m), - (this.label = d = c - .text(a.text, 0, 0, a.useHTML) - .attr(d) - .add()), - d.css(a.style)); - m = e.xBounds || [e[1], e[4], h ? e[6] : e[1]]; - e = e.yBounds || [e[2], e[5], h ? e[7] : e[2]]; - h = H(m); - c = H(e); - d.align(a, !1, { x: h, y: c, width: D(m) - h, height: D(e) - c }); - d.show(); - }, - destroy: function() { - r(this.axis.plotLinesAndBands, this); - delete this.axis; - f(this); - }, - }; - a.extend(E.prototype, { - getPlotBandPath: function(a, e) { - var h = this.getPlotLinePath(e, null, null, !0), - m = this.getPlotLinePath(a, null, null, !0), - d = [], - c = this.horiz, - b = 1, - k; - a = (a < this.min && e < this.min) || (a > this.max && e > this.max); - if (m && h) - for ( - a && ((k = m.toString() === h.toString()), (b = 0)), a = 0; - a < m.length; - a += 6 - ) - c && h[a + 1] === m[a + 1] - ? ((h[a + 1] += b), (h[a + 4] += b)) - : c || - h[a + 2] !== m[a + 2] || - ((h[a + 2] += b), (h[a + 5] += b)), - d.push( - 'M', - m[a + 1], - m[a + 2], - 'L', - m[a + 4], - m[a + 5], - h[a + 4], - h[a + 5], - h[a + 1], - h[a + 2], - 'z', - ), - (d.flat = k); - return d; - }, - addPlotBand: function(a) { - return this.addPlotBandOrLine(a, 'plotBands'); - }, - addPlotLine: function(a) { - return this.addPlotBandOrLine(a, 'plotLines'); - }, - addPlotBandOrLine: function(f, e) { - var h = new a.PlotLineOrBand(this, f).render(), - m = this.userOptions; - h && - (e && ((m[e] = m[e] || []), m[e].push(f)), - this.plotLinesAndBands.push(h)); - return h; - }, - removePlotBandOrLine: function(a) { - for ( - var e = this.plotLinesAndBands, - h = this.options, - m = this.userOptions, - d = e.length; - d--; - - ) - e[d].id === a && e[d].destroy(); - l( - [ - h.plotLines || [], - m.plotLines || [], - h.plotBands || [], - m.plotBands || [], - ], - function(c) { - for (d = c.length; d--; ) c[d].id === a && r(c, c[d]); - }, - ); - }, - removePlotBand: function(a) { - this.removePlotBandOrLine(a); - }, - removePlotLine: function(a) { - this.removePlotBandOrLine(a); - }, - }); - })(M, V); - (function(a) { - var E = a.dateFormat, - D = a.each, - H = a.extend, - p = a.format, - f = a.isNumber, - l = a.map, - r = a.merge, - n = a.pick, - w = a.splat, - u = a.syncTimeout, - e = a.timeUnits; - a.Tooltip = function() { - this.init.apply(this, arguments); - }; - a.Tooltip.prototype = { - init: function(a, e) { - this.chart = a; - this.options = e; - this.crosshairs = []; - this.now = { x: 0, y: 0 }; - this.isHidden = !0; - this.split = e.split && !a.inverted; - this.shared = e.shared || this.split; - }, - cleanSplit: function(a) { - D(this.chart.series, function(e) { - var d = e && e.tt; - d && (!d.isActive || a ? (e.tt = d.destroy()) : (d.isActive = !1)); - }); - }, - getLabel: function() { - var a = this.chart.renderer, - e = this.options; - this.label || - (this.split - ? (this.label = a.g('tooltip')) - : ((this.label = a - .label( - '', - 0, - 0, - e.shape || 'callout', - null, - null, - e.useHTML, - null, - 'tooltip', - ) - .attr({ padding: e.padding, r: e.borderRadius })), - this.label - .attr({ - fill: e.backgroundColor, - 'stroke-width': e.borderWidth, - }) - .css(e.style) - .shadow(e.shadow)), - this.label.attr({ zIndex: 8 }).add()); - return this.label; - }, - update: function(a) { - this.destroy(); - r(!0, this.chart.options.tooltip.userOptions, a); - this.init(this.chart, r(!0, this.options, a)); - }, - destroy: function() { - this.label && (this.label = this.label.destroy()); - this.split && - this.tt && - (this.cleanSplit(this.chart, !0), (this.tt = this.tt.destroy())); - clearTimeout(this.hideTimer); - clearTimeout(this.tooltipTimeout); - }, - move: function(a, e, d, c) { - var b = this, - k = b.now, - h = - !1 !== b.options.animation && - !b.isHidden && - (1 < Math.abs(a - k.x) || 1 < Math.abs(e - k.y)), - m = b.followPointer || 1 < b.len; - H(k, { - x: h ? (2 * k.x + a) / 3 : a, - y: h ? (k.y + e) / 2 : e, - anchorX: m ? void 0 : h ? (2 * k.anchorX + d) / 3 : d, - anchorY: m ? void 0 : h ? (k.anchorY + c) / 2 : c, - }); - b.getLabel().attr(k); - h && - (clearTimeout(this.tooltipTimeout), - (this.tooltipTimeout = setTimeout(function() { - b && b.move(a, e, d, c); - }, 32))); - }, - hide: function(a) { - var e = this; - clearTimeout(this.hideTimer); - a = n(a, this.options.hideDelay, 500); - this.isHidden || - (this.hideTimer = u(function() { - e.getLabel()[a ? 'fadeOut' : 'hide'](); - e.isHidden = !0; - }, a)); - }, - getAnchor: function(a, e) { - var d, - c = this.chart, - b = c.inverted, - k = c.plotTop, - h = c.plotLeft, - m = 0, - f = 0, - x, - n; - a = w(a); - d = a[0].tooltipPos; - this.followPointer && - e && - (void 0 === e.chartX && (e = c.pointer.normalize(e)), - (d = [e.chartX - c.plotLeft, e.chartY - k])); - d || - (D(a, function(a) { - x = a.series.yAxis; - n = a.series.xAxis; - m += a.plotX + (!b && n ? n.left - h : 0); - f += - (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) + - (!b && x ? x.top - k : 0); - }), - (m /= a.length), - (f /= a.length), - (d = [ - b ? c.plotWidth - f : m, - this.shared && !b && 1 < a.length && e - ? e.chartY - k - : b - ? c.plotHeight - m - : f, - ])); - return l(d, Math.round); - }, - getPosition: function(a, e, d) { - var c = this.chart, - b = this.distance, - k = {}, - h = (c.inverted && d.h) || 0, - m, - f = [ - 'y', - c.chartHeight, - e, - d.plotY + c.plotTop, - c.plotTop, - c.plotTop + c.plotHeight, - ], - x = [ - 'x', - c.chartWidth, - a, - d.plotX + c.plotLeft, - c.plotLeft, - c.plotLeft + c.plotWidth, - ], - l = !this.followPointer && n(d.ttBelow, !c.inverted === !!d.negative), - t = function(a, c, d, g, e, q) { - var m = d < g - b, - z = g + b + d < c, - A = g - b - d; - g += b; - if (l && z) k[a] = g; - else if (!l && m) k[a] = A; - else if (m) k[a] = Math.min(q - d, 0 > A - h ? A : A - h); - else if (z) k[a] = Math.max(e, g + h + d > c ? g : g + h); - else return !1; - }, - C = function(a, c, d, g) { - var e; - g < b || g > c - b - ? (e = !1) - : (k[a] = g < d / 2 ? 1 : g > c - d / 2 ? c - d - 2 : g - d / 2); - return e; - }, - p = function(a) { - var b = f; - f = x; - x = b; - m = a; - }, - q = function() { - !1 !== t.apply(0, f) - ? !1 !== C.apply(0, x) || m || (p(!0), q()) - : m - ? (k.x = k.y = 0) - : (p(!0), q()); - }; - (c.inverted || 1 < this.len) && p(); - q(); - return k; - }, - defaultFormatter: function(a) { - var e = this.points || w(this), - d; - d = [a.tooltipFooterHeaderFormatter(e[0])]; - d = d.concat(a.bodyFormatter(e)); - d.push(a.tooltipFooterHeaderFormatter(e[0], !0)); - return d; - }, - refresh: function(a, e) { - var d, - c = this.options, - b, - k = a, - h, - m = {}, - f = []; - d = c.formatter || this.defaultFormatter; - var m = this.shared, - x; - c.enabled && - (clearTimeout(this.hideTimer), - (this.followPointer = w(k)[0].series.tooltipOptions.followPointer), - (h = this.getAnchor(k, e)), - (e = h[0]), - (b = h[1]), - !m || (k.series && k.series.noSharedTooltip) - ? (m = k.getLabelConfig()) - : (D(k, function(a) { - a.setState('hover'); - f.push(a.getLabelConfig()); - }), - (m = { x: k[0].category, y: k[0].y }), - (m.points = f), - (k = k[0])), - (this.len = f.length), - (m = d.call(m, this)), - (x = k.series), - (this.distance = n(x.tooltipOptions.distance, 16)), - !1 === m - ? this.hide() - : ((d = this.getLabel()), - this.isHidden && d.attr({ opacity: 1 }).show(), - this.split - ? this.renderSplit(m, w(a)) - : (c.style.width || - d.css({ width: this.chart.spacingBox.width }), - d.attr({ text: m && m.join ? m.join('') : m }), - d - .removeClass(/highcharts-color-[\d]+/g) - .addClass( - 'highcharts-color-' + n(k.colorIndex, x.colorIndex), - ), - d.attr({ - stroke: c.borderColor || k.color || x.color || '#666666', - }), - this.updatePosition({ - plotX: e, - plotY: b, - negative: k.negative, - ttBelow: k.ttBelow, - h: h[2] || 0, - })), - (this.isHidden = !1))); - }, - renderSplit: function(e, m) { - var d = this, - c = [], - b = this.chart, - k = b.renderer, - h = !0, - f = this.options, - l = 0, - x = this.getLabel(); - a.isString(e) && (e = [!1, e]); - D(e.slice(0, m.length + 1), function(a, e) { - if (!1 !== a) { - e = m[e - 1] || { isHeader: !0, plotX: m[0].plotX }; - var z = e.series || d, - t = z.tt, - q = e.series || {}, - A = 'highcharts-color-' + n(e.colorIndex, q.colorIndex, 'none'); - t || - (z.tt = t = k - .label(null, null, null, 'callout', null, null, f.useHTML) - .addClass('highcharts-tooltip-box ' + A) - .attr({ - padding: f.padding, - r: f.borderRadius, - fill: f.backgroundColor, - stroke: f.borderColor || e.color || q.color || '#333333', - 'stroke-width': f.borderWidth, - }) - .add(x)); - t.isActive = !0; - t.attr({ text: a }); - t.css(f.style).shadow(f.shadow); - a = t.getBBox(); - q = a.width + t.strokeWidth(); - e.isHeader - ? ((l = a.height), - (q = Math.max( - 0, - Math.min(e.plotX + b.plotLeft - q / 2, b.chartWidth - q), - ))) - : (q = e.plotX + b.plotLeft - n(f.distance, 16) - q); - 0 > q && (h = !1); - a = - (e.series && e.series.yAxis && e.series.yAxis.pos) + - (e.plotY || 0); - a -= b.plotTop; - c.push({ - target: e.isHeader ? b.plotHeight + l : a, - rank: e.isHeader ? 1 : 0, - size: z.tt.getBBox().height + 1, - point: e, - x: q, - tt: t, - }); - } - }); - this.cleanSplit(); - a.distribute(c, b.plotHeight + l); - D(c, function(a) { - var c = a.point, - d = c.series; - a.tt.attr({ - visibility: void 0 === a.pos ? 'hidden' : 'inherit', - x: h || c.isHeader ? a.x : c.plotX + b.plotLeft + n(f.distance, 16), - y: a.pos + b.plotTop, - anchorX: c.isHeader ? c.plotX + b.plotLeft : c.plotX + d.xAxis.pos, - anchorY: c.isHeader - ? a.pos + b.plotTop - 15 - : c.plotY + d.yAxis.pos, - }); - }); - }, - updatePosition: function(a) { - var e = this.chart, - d = this.getLabel(), - d = (this.options.positioner || this.getPosition).call( - this, - d.width, - d.height, - a, - ); - this.move( - Math.round(d.x), - Math.round(d.y || 0), - a.plotX + e.plotLeft, - a.plotY + e.plotTop, - ); - }, - getDateFormat: function(a, m, d, c) { - var b = E('%m-%d %H:%M:%S.%L', m), - k, - h, - f = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 }, - l = 'millisecond'; - for (h in e) { - if ( - a === e.week && - +E('%w', m) === d && - '00:00:00.000' === b.substr(6) - ) { - h = 'week'; - break; - } - if (e[h] > a) { - h = l; - break; - } - if (f[h] && b.substr(f[h]) !== '01-01 00:00:00.000'.substr(f[h])) - break; - 'week' !== h && (l = h); - } - h && (k = c[h]); - return k; - }, - getXDateFormat: function(a, e, d) { - e = e.dateTimeLabelFormats; - var c = d && d.closestPointRange; - return ( - (c ? this.getDateFormat(c, a.x, d.options.startOfWeek, e) : e.day) || - e.year - ); - }, - tooltipFooterHeaderFormatter: function(a, e) { - e = e ? 'footer' : 'header'; - var d = a.series, - c = d.tooltipOptions, - b = c.xDateFormat, - k = d.xAxis, - h = k && 'datetime' === k.options.type && f(a.key), - m = c[e + 'Format']; - h && !b && (b = this.getXDateFormat(a, c, k)); - h && - b && - D((a.point && a.point.tooltipDateKeys) || ['key'], function(a) { - m = m.replace('{point.' + a + '}', '{point.' + a + ':' + b + '}'); - }); - return p(m, { point: a, series: d }); - }, - bodyFormatter: function(a) { - return l(a, function(a) { - var d = a.series.tooltipOptions; - return ( - d[(a.point.formatPrefix || 'point') + 'Formatter'] || - a.point.tooltipFormatter - ).call(a.point, d[(a.point.formatPrefix || 'point') + 'Format']); - }); - }, - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.attr, - H = a.charts, - p = a.color, - f = a.css, - l = a.defined, - r = a.each, - n = a.extend, - w = a.find, - u = a.fireEvent, - e = a.isObject, - h = a.offset, - m = a.pick, - d = a.splat, - c = a.Tooltip; - a.Pointer = function(a, c) { - this.init(a, c); - }; - a.Pointer.prototype = { - init: function(a, d) { - this.options = d; - this.chart = a; - this.runChartClick = d.chart.events && !!d.chart.events.click; - this.pinchDown = []; - this.lastValidTouch = {}; - c && - ((a.tooltip = new c(a, d.tooltip)), - (this.followTouchMove = m(d.tooltip.followTouchMove, !0))); - this.setDOMEvents(); - }, - zoomOption: function(a) { - var b = this.chart, - c = b.options.chart, - d = c.zoomType || '', - b = b.inverted; - /touch/.test(a.type) && (d = m(c.pinchType, d)); - this.zoomX = a = /x/.test(d); - this.zoomY = d = /y/.test(d); - this.zoomHor = (a && !b) || (d && b); - this.zoomVert = (d && !b) || (a && b); - this.hasZoom = a || d; - }, - normalize: function(a, c) { - var b; - b = a.touches - ? a.touches.length - ? a.touches.item(0) - : a.changedTouches[0] - : a; - c || (this.chartPosition = c = h(this.chart.container)); - return n(a, { - chartX: Math.round(b.pageX - c.left), - chartY: Math.round(b.pageY - c.top), - }); - }, - getCoordinates: function(a) { - var b = { xAxis: [], yAxis: [] }; - r(this.chart.axes, function(c) { - b[c.isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: c, - value: c.toValue(a[c.horiz ? 'chartX' : 'chartY']), - }); - }); - return b; - }, - findNearestKDPoint: function(a, c, d) { - var b; - r(a, function(a) { - var k = - !(a.noSharedTooltip && c) && - 0 > a.options.findNearestPointBy.indexOf('y'); - a = a.searchPoint(d, k); - if ((k = e(a, !0)) && !(k = !e(b, !0))) - var k = b.distX - a.distX, - h = b.dist - a.dist, - m = - (a.series.group && a.series.group.zIndex) - - (b.series.group && b.series.group.zIndex), - k = - 0 < - (0 !== k && c - ? k - : 0 !== h - ? h - : 0 !== m - ? m - : b.series.index > a.series.index - ? -1 - : 1); - k && (b = a); - }); - return b; - }, - getPointFromEvent: function(a) { - a = a.target; - for (var b; a && !b; ) (b = a.point), (a = a.parentNode); - return b; - }, - getChartCoordinatesFromPoint: function(a, c) { - var b = a.series, - d = b.xAxis, - b = b.yAxis, - k = m(a.clientX, a.plotX); - if (d && b) - return c - ? { chartX: d.len + d.pos - k, chartY: b.len + b.pos - a.plotY } - : { chartX: k + d.pos, chartY: a.plotY + b.pos }; - }, - getHoverData: function(b, c, d, h, f, l, n) { - var k, - z = [], - x = n && n.isBoosting; - h = !(!h || !b); - n = - c && !c.stickyTracking - ? [c] - : a.grep(d, function(a) { - return ( - a.visible && - !(!f && a.directTouch) && - m(a.options.enableMouseTracking, !0) && - a.stickyTracking - ); - }); - c = (k = h ? b : this.findNearestKDPoint(n, f, l)) && k.series; - k && - (f && !c.noSharedTooltip - ? ((n = a.grep(d, function(a) { - return ( - a.visible && - !(!f && a.directTouch) && - m(a.options.enableMouseTracking, !0) && - !a.noSharedTooltip - ); - })), - r(n, function(a) { - var b = w(a.points, function(a) { - return a.x === k.x && !a.isNull; - }); - e(b) && (x && (b = a.getPoint(b)), z.push(b)); - })) - : z.push(k)); - return { hoverPoint: k, hoverSeries: c, hoverPoints: z }; - }, - runPointActions: function(b, c) { - var d = this.chart, - k = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0, - e = k ? k.shared : !1, - h = c || d.hoverPoint, - f = (h && h.series) || d.hoverSeries, - f = this.getHoverData( - h, - f, - d.series, - !!c || (f && f.directTouch && this.isDirectTouch), - e, - b, - { isBoosting: d.isBoosting }, - ), - l, - h = f.hoverPoint; - l = f.hoverPoints; - c = (f = f.hoverSeries) && f.tooltipOptions.followPointer; - e = e && f && !f.noSharedTooltip; - if (h && (h !== d.hoverPoint || (k && k.isHidden))) { - r(d.hoverPoints || [], function(b) { - -1 === a.inArray(b, l) && b.setState(); - }); - r(l || [], function(a) { - a.setState('hover'); - }); - if (d.hoverSeries !== f) f.onMouseOver(); - d.hoverPoint && d.hoverPoint.firePointEvent('mouseOut'); - if (!h.series) return; - h.firePointEvent('mouseOver'); - d.hoverPoints = l; - d.hoverPoint = h; - k && k.refresh(e ? l : h, b); - } else - c && - k && - !k.isHidden && - ((h = k.getAnchor([{}], b)), - k.updatePosition({ plotX: h[0], plotY: h[1] })); - this.unDocMouseMove || - (this.unDocMouseMove = E( - d.container.ownerDocument, - 'mousemove', - function(b) { - var c = H[a.hoverChartIndex]; - if (c) c.pointer.onDocumentMouseMove(b); - }, - )); - r(d.axes, function(c) { - var d = m(c.crosshair.snap, !0), - k = d - ? a.find(l, function(a) { - return a.series[c.coll] === c; - }) - : void 0; - k || !d ? c.drawCrosshair(b, k) : c.hideCrosshair(); - }); - }, - reset: function(a, c) { - var b = this.chart, - k = b.hoverSeries, - e = b.hoverPoint, - h = b.hoverPoints, - m = b.tooltip, - f = m && m.shared ? h : e; - a && - f && - r(d(f), function(b) { - b.series.isCartesian && void 0 === b.plotX && (a = !1); - }); - if (a) - m && - f && - (m.refresh(f), - e && - (e.setState(e.state, !0), - r(b.axes, function(a) { - a.crosshair && a.drawCrosshair(null, e); - }))); - else { - if (e) e.onMouseOut(); - h && - r(h, function(a) { - a.setState(); - }); - if (k) k.onMouseOut(); - m && m.hide(c); - this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove()); - r(b.axes, function(a) { - a.hideCrosshair(); - }); - this.hoverX = b.hoverPoints = b.hoverPoint = null; - } - }, - scaleGroups: function(a, c) { - var b = this.chart, - d; - r(b.series, function(k) { - d = a || k.getPlotBox(); - k.xAxis && - k.xAxis.zoomEnabled && - k.group && - (k.group.attr(d), - k.markerGroup && - (k.markerGroup.attr(d), - k.markerGroup.clip(c ? b.clipRect : null)), - k.dataLabelsGroup && k.dataLabelsGroup.attr(d)); - }); - b.clipRect.attr(c || b.clipBox); - }, - dragStart: function(a) { - var b = this.chart; - b.mouseIsDown = a.type; - b.cancelClick = !1; - b.mouseDownX = this.mouseDownX = a.chartX; - b.mouseDownY = this.mouseDownY = a.chartY; - }, - drag: function(a) { - var b = this.chart, - c = b.options.chart, - d = a.chartX, - e = a.chartY, - h = this.zoomHor, - m = this.zoomVert, - f = b.plotLeft, - l = b.plotTop, - n = b.plotWidth, - q = b.plotHeight, - A, - F = this.selectionMarker, - G = this.mouseDownX, - g = this.mouseDownY, - v = c.panKey && a[c.panKey + 'Key']; - (F && F.touch) || - (d < f ? (d = f) : d > f + n && (d = f + n), - e < l ? (e = l) : e > l + q && (e = l + q), - (this.hasDragged = Math.sqrt( - Math.pow(G - d, 2) + Math.pow(g - e, 2), - )), - 10 < this.hasDragged && - ((A = b.isInsidePlot(G - f, g - l)), - b.hasCartesianSeries && - (this.zoomX || this.zoomY) && - A && - !v && - !F && - (this.selectionMarker = F = b.renderer - .rect(f, l, h ? 1 : n, m ? 1 : q, 0) - .attr({ - fill: - c.selectionMarkerFill || - p('#335cad') - .setOpacity(0.25) - .get(), - class: 'highcharts-selection-marker', - zIndex: 7, - }) - .add()), - F && - h && - ((d -= G), - F.attr({ width: Math.abs(d), x: (0 < d ? 0 : d) + G })), - F && - m && - ((d = e - g), - F.attr({ height: Math.abs(d), y: (0 < d ? 0 : d) + g })), - A && !F && c.panning && b.pan(a, c.panning))); - }, - drop: function(a) { - var b = this, - c = this.chart, - d = this.hasPinched; - if (this.selectionMarker) { - var e = { originalEvent: a, xAxis: [], yAxis: [] }, - h = this.selectionMarker, - m = h.attr ? h.attr('x') : h.x, - t = h.attr ? h.attr('y') : h.y, - p = h.attr ? h.attr('width') : h.width, - w = h.attr ? h.attr('height') : h.height, - q; - if (this.hasDragged || d) - r(c.axes, function(c) { - if ( - c.zoomEnabled && - l(c.min) && - (d || b[{ xAxis: 'zoomX', yAxis: 'zoomY' }[c.coll]]) - ) { - var k = c.horiz, - h = 'touchend' === a.type ? c.minPixelPadding : 0, - g = c.toValue((k ? m : t) + h), - k = c.toValue((k ? m + p : t + w) - h); - e[c.coll].push({ - axis: c, - min: Math.min(g, k), - max: Math.max(g, k), - }); - q = !0; - } - }), - q && - u(c, 'selection', e, function(a) { - c.zoom(n(a, d ? { animation: !1 } : null)); - }); - this.selectionMarker = this.selectionMarker.destroy(); - d && this.scaleGroups(); - } - c && - (f(c.container, { cursor: c._cursor }), - (c.cancelClick = 10 < this.hasDragged), - (c.mouseIsDown = this.hasDragged = this.hasPinched = !1), - (this.pinchDown = [])); - }, - onContainerMouseDown: function(a) { - 2 !== a.button && - ((a = this.normalize(a)), - this.zoomOption(a), - a.preventDefault && a.preventDefault(), - this.dragStart(a)); - }, - onDocumentMouseUp: function(b) { - H[a.hoverChartIndex] && H[a.hoverChartIndex].pointer.drop(b); - }, - onDocumentMouseMove: function(a) { - var b = this.chart, - c = this.chartPosition; - a = this.normalize(a, c); - !c || - this.inClass(a.target, 'highcharts-tracker') || - b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) || - this.reset(); - }, - onContainerMouseLeave: function(b) { - var c = H[a.hoverChartIndex]; - c && - (b.relatedTarget || b.toElement) && - (c.pointer.reset(), (c.pointer.chartPosition = null)); - }, - onContainerMouseMove: function(b) { - var c = this.chart; - (l(a.hoverChartIndex) && - H[a.hoverChartIndex] && - H[a.hoverChartIndex].mouseIsDown) || - (a.hoverChartIndex = c.index); - b = this.normalize(b); - b.returnValue = !1; - 'mousedown' === c.mouseIsDown && this.drag(b); - (!this.inClass(b.target, 'highcharts-tracker') && - !c.isInsidePlot(b.chartX - c.plotLeft, b.chartY - c.plotTop)) || - c.openMenu || - this.runPointActions(b); - }, - inClass: function(a, c) { - for (var b; a; ) { - if ((b = D(a, 'class'))) { - if (-1 !== b.indexOf(c)) return !0; - if (-1 !== b.indexOf('highcharts-container')) return !1; - } - a = a.parentNode; - } - }, - onTrackerMouseOut: function(a) { - var b = this.chart.hoverSeries; - a = a.relatedTarget || a.toElement; - this.isDirectTouch = !1; - if ( - !( - !b || - !a || - b.stickyTracking || - this.inClass(a, 'highcharts-tooltip') || - (this.inClass(a, 'highcharts-series-' + b.index) && - this.inClass(a, 'highcharts-tracker')) - ) - ) - b.onMouseOut(); - }, - onContainerClick: function(a) { - var b = this.chart, - c = b.hoverPoint, - d = b.plotLeft, - e = b.plotTop; - a = this.normalize(a); - b.cancelClick || - (c && this.inClass(a.target, 'highcharts-tracker') - ? (u(c.series, 'click', n(a, { point: c })), - b.hoverPoint && c.firePointEvent('click', a)) - : (n(a, this.getCoordinates(a)), - b.isInsidePlot(a.chartX - d, a.chartY - e) && u(b, 'click', a))); - }, - setDOMEvents: function() { - var b = this, - c = b.chart.container, - d = c.ownerDocument; - c.onmousedown = function(a) { - b.onContainerMouseDown(a); - }; - c.onmousemove = function(a) { - b.onContainerMouseMove(a); - }; - c.onclick = function(a) { - b.onContainerClick(a); - }; - this.unbindContainerMouseLeave = E( - c, - 'mouseleave', - b.onContainerMouseLeave, - ); - a.unbindDocumentMouseUp || - (a.unbindDocumentMouseUp = E(d, 'mouseup', b.onDocumentMouseUp)); - a.hasTouch && - ((c.ontouchstart = function(a) { - b.onContainerTouchStart(a); - }), - (c.ontouchmove = function(a) { - b.onContainerTouchMove(a); - }), - a.unbindDocumentTouchEnd || - (a.unbindDocumentTouchEnd = E( - d, - 'touchend', - b.onDocumentTouchEnd, - ))); - }, - destroy: function() { - var b = this; - b.unDocMouseMove && b.unDocMouseMove(); - this.unbindContainerMouseLeave(); - a.chartCount || - (a.unbindDocumentMouseUp && - (a.unbindDocumentMouseUp = a.unbindDocumentMouseUp()), - a.unbindDocumentTouchEnd && - (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd())); - clearInterval(b.tooltipTimeout); - a.objectEach(b, function(a, c) { - b[c] = null; - }); - }, - }; - })(M); - (function(a) { - var E = a.charts, - D = a.each, - H = a.extend, - p = a.map, - f = a.noop, - l = a.pick; - H(a.Pointer.prototype, { - pinchTranslate: function(a, f, l, p, e, h) { - this.zoomHor && this.pinchTranslateDirection(!0, a, f, l, p, e, h); - this.zoomVert && this.pinchTranslateDirection(!1, a, f, l, p, e, h); - }, - pinchTranslateDirection: function(a, f, l, p, e, h, m, d) { - var c = this.chart, - b = a ? 'x' : 'y', - k = a ? 'X' : 'Y', - z = 'chart' + k, - n = a ? 'width' : 'height', - r = c['plot' + (a ? 'Left' : 'Top')], - x, - w, - t = d || 1, - C = c.inverted, - u = c.bounds[a ? 'h' : 'v'], - q = 1 === f.length, - A = f[0][z], - F = l[0][z], - G = !q && f[1][z], - g = !q && l[1][z], - v; - l = function() { - !q && - 20 < Math.abs(A - G) && - (t = d || Math.abs(F - g) / Math.abs(A - G)); - w = (r - F) / t + A; - x = c['plot' + (a ? 'Width' : 'Height')] / t; - }; - l(); - f = w; - f < u.min - ? ((f = u.min), (v = !0)) - : f + x > u.max && ((f = u.max - x), (v = !0)); - v - ? ((F -= 0.8 * (F - m[b][0])), q || (g -= 0.8 * (g - m[b][1])), l()) - : (m[b] = [F, g]); - C || ((h[b] = w - r), (h[n] = x)); - h = C ? 1 / t : t; - e[n] = x; - e[b] = f; - p[C ? (a ? 'scaleY' : 'scaleX') : 'scale' + k] = t; - p['translate' + k] = h * r + (F - h * A); - }, - pinch: function(a) { - var n = this, - r = n.chart, - u = n.pinchDown, - e = a.touches, - h = e.length, - m = n.lastValidTouch, - d = n.hasZoom, - c = n.selectionMarker, - b = {}, - k = - 1 === h && - ((n.inClass(a.target, 'highcharts-tracker') && r.runTrackerClick) || - n.runChartClick), - z = {}; - 1 < h && (n.initiated = !0); - d && n.initiated && !k && a.preventDefault(); - p(e, function(a) { - return n.normalize(a); - }); - 'touchstart' === a.type - ? (D(e, function(a, b) { - u[b] = { chartX: a.chartX, chartY: a.chartY }; - }), - (m.x = [u[0].chartX, u[1] && u[1].chartX]), - (m.y = [u[0].chartY, u[1] && u[1].chartY]), - D(r.axes, function(a) { - if (a.zoomEnabled) { - var b = r.bounds[a.horiz ? 'h' : 'v'], - c = a.minPixelPadding, - d = a.toPixels(l(a.options.min, a.dataMin)), - e = a.toPixels(l(a.options.max, a.dataMax)), - k = Math.max(d, e); - b.min = Math.min(a.pos, Math.min(d, e) - c); - b.max = Math.max(a.pos + a.len, k + c); - } - }), - (n.res = !0)) - : n.followTouchMove && 1 === h - ? this.runPointActions(n.normalize(a)) - : u.length && - (c || - (n.selectionMarker = c = H({ destroy: f, touch: !0 }, r.plotBox)), - n.pinchTranslate(u, e, b, c, z, m), - (n.hasPinched = d), - n.scaleGroups(b, z), - n.res && ((n.res = !1), this.reset(!1, 0))); - }, - touch: function(f, n) { - var p = this.chart, - r, - e; - if (p.index !== a.hoverChartIndex) - this.onContainerMouseLeave({ relatedTarget: !0 }); - a.hoverChartIndex = p.index; - 1 === f.touches.length - ? ((f = this.normalize(f)), - (e = p.isInsidePlot(f.chartX - p.plotLeft, f.chartY - p.plotTop)) && - !p.openMenu - ? (n && this.runPointActions(f), - 'touchmove' === f.type && - ((n = this.pinchDown), - (r = n[0] - ? 4 <= - Math.sqrt( - Math.pow(n[0].chartX - f.chartX, 2) + - Math.pow(n[0].chartY - f.chartY, 2), - ) - : !1)), - l(r, !0) && this.pinch(f)) - : n && this.reset()) - : 2 === f.touches.length && this.pinch(f); - }, - onContainerTouchStart: function(a) { - this.zoomOption(a); - this.touch(a, !0); - }, - onContainerTouchMove: function(a) { - this.touch(a); - }, - onDocumentTouchEnd: function(f) { - E[a.hoverChartIndex] && E[a.hoverChartIndex].pointer.drop(f); - }, - }); - })(M); - (function(a) { - var E = a.addEvent, - D = a.charts, - H = a.css, - p = a.doc, - f = a.extend, - l = a.noop, - r = a.Pointer, - n = a.removeEvent, - w = a.win, - u = a.wrap; - if (!a.hasTouch && (w.PointerEvent || w.MSPointerEvent)) { - var e = {}, - h = !!w.PointerEvent, - m = function() { - var c = []; - c.item = function(a) { - return this[a]; - }; - a.objectEach(e, function(a) { - c.push({ pageX: a.pageX, pageY: a.pageY, target: a.target }); - }); - return c; - }, - d = function(c, b, d, e) { - ('touch' !== c.pointerType && - c.pointerType !== c.MSPOINTER_TYPE_TOUCH) || - !D[a.hoverChartIndex] || - (e(c), - (e = D[a.hoverChartIndex].pointer), - e[b]({ - type: d, - target: c.currentTarget, - preventDefault: l, - touches: m(), - })); - }; - f(r.prototype, { - onContainerPointerDown: function(a) { - d(a, 'onContainerTouchStart', 'touchstart', function(a) { - e[a.pointerId] = { - pageX: a.pageX, - pageY: a.pageY, - target: a.currentTarget, - }; - }); - }, - onContainerPointerMove: function(a) { - d(a, 'onContainerTouchMove', 'touchmove', function(a) { - e[a.pointerId] = { pageX: a.pageX, pageY: a.pageY }; - e[a.pointerId].target || (e[a.pointerId].target = a.currentTarget); - }); - }, - onDocumentPointerUp: function(a) { - d(a, 'onDocumentTouchEnd', 'touchend', function(a) { - delete e[a.pointerId]; - }); - }, - batchMSEvents: function(a) { - a( - this.chart.container, - h ? 'pointerdown' : 'MSPointerDown', - this.onContainerPointerDown, - ); - a( - this.chart.container, - h ? 'pointermove' : 'MSPointerMove', - this.onContainerPointerMove, - ); - a(p, h ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); - }, - }); - u(r.prototype, 'init', function(a, b, d) { - a.call(this, b, d); - this.hasZoom && - H(b.container, { - '-ms-touch-action': 'none', - 'touch-action': 'none', - }); - }); - u(r.prototype, 'setDOMEvents', function(a) { - a.apply(this); - (this.hasZoom || this.followTouchMove) && this.batchMSEvents(E); - }); - u(r.prototype, 'destroy', function(a) { - this.batchMSEvents(n); - a.call(this); - }); - } - })(M); - (function(a) { - var E = a.addEvent, - D = a.css, - H = a.discardElement, - p = a.defined, - f = a.each, - l = a.isFirefox, - r = a.marginNames, - n = a.merge, - w = a.pick, - u = a.setAnimation, - e = a.stableSort, - h = a.win, - m = a.wrap; - a.Legend = function(a, c) { - this.init(a, c); - }; - a.Legend.prototype = { - init: function(a, c) { - this.chart = a; - this.setOptions(c); - c.enabled && - (this.render(), - E(this.chart, 'endResize', function() { - this.legend.positionCheckboxes(); - })); - }, - setOptions: function(a) { - var c = w(a.padding, 8); - this.options = a; - this.itemStyle = a.itemStyle; - this.itemHiddenStyle = n(this.itemStyle, a.itemHiddenStyle); - this.itemMarginTop = a.itemMarginTop || 0; - this.padding = c; - this.initialItemY = c - 5; - this.itemHeight = this.maxItemWidth = 0; - this.symbolWidth = w(a.symbolWidth, 16); - this.pages = []; - }, - update: function(a, c) { - var b = this.chart; - this.setOptions(n(!0, this.options, a)); - this.destroy(); - b.isDirtyLegend = b.isDirtyBox = !0; - w(c, !0) && b.redraw(); - }, - colorizeItem: function(a, c) { - a.legendGroup[c ? 'removeClass' : 'addClass']( - 'highcharts-legend-item-hidden', - ); - var b = this.options, - d = a.legendItem, - e = a.legendLine, - h = a.legendSymbol, - f = this.itemHiddenStyle.color, - b = c ? b.itemStyle.color : f, - m = c ? a.color || f : f, - l = a.options && a.options.marker, - t = { fill: m }; - d && d.css({ fill: b, color: b }); - e && e.attr({ stroke: m }); - h && - (l && - h.isMarker && - ((t = a.pointAttribs()), c || (t.stroke = t.fill = f)), - h.attr(t)); - }, - positionItem: function(a) { - var c = this.options, - b = c.symbolPadding, - c = !c.rtl, - d = a._legendItemPos, - e = d[0], - d = d[1], - h = a.checkbox; - (a = a.legendGroup) && - a.element && - a.translate(c ? e : this.legendWidth - e - 2 * b - 4, d); - h && ((h.x = e), (h.y = d)); - }, - destroyItem: function(a) { - var c = a.checkbox; - f(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function( - b, - ) { - a[b] && (a[b] = a[b].destroy()); - }); - c && H(a.checkbox); - }, - destroy: function() { - function a(a) { - this[a] && (this[a] = this[a].destroy()); - } - f(this.getAllItems(), function(c) { - f(['legendItem', 'legendGroup'], a, c); - }); - f('clipRect up down pager nav box title group'.split(' '), a, this); - this.display = null; - }, - positionCheckboxes: function() { - var a = this.group && this.group.alignAttr, - c, - b = this.clipHeight || this.legendHeight, - e = this.titleHeight; - a && - ((c = a.translateY), - f( - this.allItems, - function(d) { - var k = d.checkbox, - h; - k && - ((h = c + e + k.y + (this.scrollOffset || 0) + 3), - D(k, { - left: a.translateX + d.checkboxOffset + k.x - 20 + 'px', - top: h + 'px', - display: h > c - 6 && h < c + b - 6 ? '' : 'none', - })); - }, - this, - )); - }, - renderTitle: function() { - var a = this.options, - c = this.padding, - b = a.title, - e = 0; - b.text && - (this.title || - (this.title = this.chart.renderer - .label( - b.text, - c - 3, - c - 4, - null, - null, - null, - a.useHTML, - null, - 'legend-title', - ) - .attr({ zIndex: 1 }) - .css(b.style) - .add(this.group)), - (a = this.title.getBBox()), - (e = a.height), - (this.offsetWidth = a.width), - this.contentGroup.attr({ translateY: e })); - this.titleHeight = e; - }, - setText: function(d) { - var c = this.options; - d.legendItem.attr({ - text: c.labelFormat - ? a.format(c.labelFormat, d) - : c.labelFormatter.call(d), - }); - }, - renderItem: function(a) { - var c = this.chart, - b = c.renderer, - d = this.options, - e = 'horizontal' === d.layout, - h = this.symbolWidth, - f = d.symbolPadding, - m = this.itemStyle, - l = this.itemHiddenStyle, - t = this.padding, - p = e ? w(d.itemDistance, 20) : 0, - r = !d.rtl, - q = d.width, - A = d.itemMarginBottom || 0, - F = this.itemMarginTop, - G = a.legendItem, - g = !a.series, - v = !g && a.series.drawLegendSymbol ? a.series : a, - u = v.options, - L = this.createCheckboxForItem && u && u.showCheckbox, - u = h + f + p + (L ? 20 : 0), - P = d.useHTML, - J = a.options.className; - G || - ((a.legendGroup = b - .g('legend-item') - .addClass( - 'highcharts-' + - v.type + - '-series highcharts-color-' + - a.colorIndex + - (J ? ' ' + J : '') + - (g ? ' highcharts-series-' + a.index : ''), - ) - .attr({ zIndex: 1 }) - .add(this.scrollGroup)), - (a.legendItem = G = b - .text('', r ? h + f : -f, this.baseline || 0, P) - .css(n(a.visible ? m : l)) - .attr({ align: r ? 'left' : 'right', zIndex: 2 }) - .add(a.legendGroup)), - this.baseline || - ((h = m.fontSize), - (this.fontMetrics = b.fontMetrics(h, G)), - (this.baseline = this.fontMetrics.f + 3 + F), - G.attr('y', this.baseline)), - (this.symbolHeight = d.symbolHeight || this.fontMetrics.f), - v.drawLegendSymbol(this, a), - this.setItemEvents && this.setItemEvents(a, G, P), - L && this.createCheckboxForItem(a)); - this.colorizeItem(a, a.visible); - m.width || - G.css({ width: (d.itemWidth || d.width || c.spacingBox.width) - u }); - this.setText(a); - b = G.getBBox(); - m = a.checkboxOffset = d.itemWidth || a.legendItemWidth || b.width + u; - this.itemHeight = b = Math.round( - a.legendItemHeight || b.height || this.symbolHeight, - ); - e && - this.itemX - t + m > (q || c.spacingBox.width - 2 * t - d.x) && - ((this.itemX = t), - (this.itemY += F + this.lastLineHeight + A), - (this.lastLineHeight = 0)); - this.maxItemWidth = Math.max(this.maxItemWidth, m); - this.lastItemY = F + this.itemY + A; - this.lastLineHeight = Math.max(b, this.lastLineHeight); - a._legendItemPos = [this.itemX, this.itemY]; - e - ? (this.itemX += m) - : ((this.itemY += F + b + A), (this.lastLineHeight = b)); - this.offsetWidth = - q || - Math.max( - (e ? this.itemX - t - (a.checkbox ? 0 : p) : m) + t, - this.offsetWidth, - ); - }, - getAllItems: function() { - var a = []; - f(this.chart.series, function(c) { - var b = c && c.options; - c && - w(b.showInLegend, p(b.linkedTo) ? !1 : void 0, !0) && - (a = a.concat( - c.legendItems || ('point' === b.legendType ? c.data : c), - )); - }); - return a; - }, - getAlignment: function() { - var a = this.options; - return a.floating - ? '' - : a.align.charAt(0) + a.verticalAlign.charAt(0) + a.layout.charAt(0); - }, - adjustMargins: function(a, c) { - var b = this.chart, - d = this.options, - e = this.getAlignment(); - e && - f( - [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/], - function(k, h) { - k.test(e) && - !p(a[h]) && - (b[r[h]] = Math.max( - b[r[h]], - b.legend[(h + 1) % 2 ? 'legendHeight' : 'legendWidth'] + - [1, -1, -1, 1][h] * d[h % 2 ? 'x' : 'y'] + - w(d.margin, 12) + - c[h] + - (0 === h ? b.titleOffset + b.options.title.margin : 0), - )); - }, - ); - }, - render: function() { - var a = this, - c = a.chart, - b = c.renderer, - k = a.group, - h, - m, - l, - x, - p = a.box, - t = a.options, - C = a.padding; - a.itemX = C; - a.itemY = a.initialItemY; - a.offsetWidth = 0; - a.lastItemY = 0; - k || - ((a.group = k = b - .g('legend') - .attr({ zIndex: 7 }) - .add()), - (a.contentGroup = b - .g() - .attr({ zIndex: 1 }) - .add(k)), - (a.scrollGroup = b.g().add(a.contentGroup))); - a.renderTitle(); - h = a.getAllItems(); - e(h, function(a, b) { - return ( - ((a.options && a.options.legendIndex) || 0) - - ((b.options && b.options.legendIndex) || 0) - ); - }); - t.reversed && h.reverse(); - a.allItems = h; - a.display = m = !!h.length; - a.lastLineHeight = 0; - f(h, function(b) { - a.renderItem(b); - }); - l = (t.width || a.offsetWidth) + C; - x = a.lastItemY + a.lastLineHeight + a.titleHeight; - x = a.handleOverflow(x); - x += C; - p || - ((a.box = p = b - .rect() - .addClass('highcharts-legend-box') - .attr({ r: t.borderRadius }) - .add(k)), - (p.isNew = !0)); - p.attr({ - stroke: t.borderColor, - 'stroke-width': t.borderWidth || 0, - fill: t.backgroundColor || 'none', - }).shadow(t.shadow); - 0 < l && - 0 < x && - (p[p.isNew ? 'attr' : 'animate']( - p.crisp.call( - {}, - { x: 0, y: 0, width: l, height: x }, - p.strokeWidth(), - ), - ), - (p.isNew = !1)); - p[m ? 'show' : 'hide'](); - a.legendWidth = l; - a.legendHeight = x; - f(h, function(b) { - a.positionItem(b); - }); - m && - ((b = c.spacingBox), - /(lth|ct|rth)/.test(a.getAlignment()) && - (b = n(b, { y: b.y + c.titleOffset + c.options.title.margin })), - k.align(n(t, { width: l, height: x }), !0, b)); - c.isResizing || this.positionCheckboxes(); - }, - handleOverflow: function(a) { - var c = this, - b = this.chart, - d = b.renderer, - e = this.options, - h = e.y, - m = this.padding, - b = b.spacingBox.height + ('top' === e.verticalAlign ? -h : h) - m, - h = e.maxHeight, - l, - n = this.clipRect, - t = e.navigation, - p = w(t.animation, !0), - r = t.arrowSize || 12, - q = this.nav, - A = this.pages, - F, - G = this.allItems, - g = function(a) { - 'number' === typeof a - ? n.attr({ height: a }) - : n && ((c.clipRect = n.destroy()), c.contentGroup.clip()); - c.contentGroup.div && - (c.contentGroup.div.style.clip = a - ? 'rect(' + m + 'px,9999px,' + (m + a) + 'px,0)' - : 'auto'); - }; - 'horizontal' !== e.layout || - 'middle' === e.verticalAlign || - e.floating || - (b /= 2); - h && (b = Math.min(b, h)); - A.length = 0; - a > b && !1 !== t.enabled - ? ((this.clipHeight = l = Math.max(b - 20 - this.titleHeight - m, 0)), - (this.currentPage = w(this.currentPage, 1)), - (this.fullHeight = a), - f(G, function(a, b) { - var c = a._legendItemPos[1], - d = Math.round(a.legendItem.getBBox().height), - g = A.length; - if (!g || (c - A[g - 1] > l && (F || c) !== A[g - 1])) - A.push(F || c), g++; - a.pageIx = g - 1; - F && (G[b - 1].pageIx = g - 1); - b === G.length - 1 && - c + d - A[g - 1] > l && - (A.push(c), (a.pageIx = g)); - c !== F && (F = c); - }), - n || - ((n = c.clipRect = d.clipRect(0, m, 9999, 0)), - c.contentGroup.clip(n)), - g(l), - q || - ((this.nav = q = d - .g() - .attr({ zIndex: 1 }) - .add(this.group)), - (this.up = d - .symbol('triangle', 0, 0, r, r) - .on('click', function() { - c.scroll(-1, p); - }) - .add(q)), - (this.pager = d - .text('', 15, 10) - .addClass('highcharts-legend-navigation') - .css(t.style) - .add(q)), - (this.down = d - .symbol('triangle-down', 0, 0, r, r) - .on('click', function() { - c.scroll(1, p); - }) - .add(q))), - c.scroll(0), - (a = b)) - : q && - (g(), - (this.nav = q.destroy()), - this.scrollGroup.attr({ translateY: 1 }), - (this.clipHeight = 0)); - return a; - }, - scroll: function(a, c) { - var b = this.pages, - d = b.length; - a = this.currentPage + a; - var e = this.clipHeight, - h = this.options.navigation, - f = this.pager, - m = this.padding; - a > d && (a = d); - 0 < a && - (void 0 !== c && u(c, this.chart), - this.nav.attr({ - translateX: m, - translateY: e + this.padding + 7 + this.titleHeight, - visibility: 'visible', - }), - this.up.attr({ - class: - 1 === a - ? 'highcharts-legend-nav-inactive' - : 'highcharts-legend-nav-active', - }), - f.attr({ text: a + '/' + d }), - this.down.attr({ - x: 18 + this.pager.getBBox().width, - class: - a === d - ? 'highcharts-legend-nav-inactive' - : 'highcharts-legend-nav-active', - }), - this.up - .attr({ fill: 1 === a ? h.inactiveColor : h.activeColor }) - .css({ cursor: 1 === a ? 'default' : 'pointer' }), - this.down - .attr({ fill: a === d ? h.inactiveColor : h.activeColor }) - .css({ cursor: a === d ? 'default' : 'pointer' }), - (this.scrollOffset = -b[a - 1] + this.initialItemY), - this.scrollGroup.animate({ translateY: this.scrollOffset }), - (this.currentPage = a), - this.positionCheckboxes()); - }, - }; - a.LegendSymbolMixin = { - drawRectangle: function(a, c) { - var b = a.symbolHeight, - d = a.options.squareSymbol; - c.legendSymbol = this.chart.renderer - .rect( - d ? (a.symbolWidth - b) / 2 : 0, - a.baseline - b + 1, - d ? b : a.symbolWidth, - b, - w(a.options.symbolRadius, b / 2), - ) - .addClass('highcharts-point') - .attr({ zIndex: 3 }) - .add(c.legendGroup); - }, - drawLineMarker: function(a) { - var c = this.options, - b = c.marker, - d = a.symbolWidth, - e = a.symbolHeight, - h = e / 2, - f = this.chart.renderer, - m = this.legendGroup; - a = a.baseline - Math.round(0.3 * a.fontMetrics.b); - var l; - l = { 'stroke-width': c.lineWidth || 0 }; - c.dashStyle && (l.dashstyle = c.dashStyle); - this.legendLine = f - .path(['M', 0, a, 'L', d, a]) - .addClass('highcharts-graph') - .attr(l) - .add(m); - b && - !1 !== b.enabled && - ((c = Math.min(w(b.radius, h), h)), - 0 === this.symbol.indexOf('url') && - ((b = n(b, { width: e, height: e })), (c = 0)), - (this.legendSymbol = b = f - .symbol(this.symbol, d / 2 - c, a - c, 2 * c, 2 * c, b) - .addClass('highcharts-point') - .add(m)), - (b.isMarker = !0)); - }, - }; - (/Trident\/7\.0/.test(h.navigator.userAgent) || l) && - m(a.Legend.prototype, 'positionItem', function(a, c) { - var b = this, - d = function() { - c._legendItemPos && a.call(b, c); - }; - d(); - setTimeout(d); - }); - })(M); - (function(a) { - var E = a.addEvent, - D = a.animate, - H = a.animObject, - p = a.attr, - f = a.doc, - l = a.Axis, - r = a.createElement, - n = a.defaultOptions, - w = a.discardElement, - u = a.charts, - e = a.css, - h = a.defined, - m = a.each, - d = a.extend, - c = a.find, - b = a.fireEvent, - k = a.grep, - z = a.isNumber, - B = a.isObject, - I = a.isString, - x = a.Legend, - K = a.marginNames, - t = a.merge, - C = a.objectEach, - N = a.Pointer, - q = a.pick, - A = a.pInt, - F = a.removeEvent, - G = a.seriesTypes, - g = a.splat, - v = a.svg, - Q = a.syncTimeout, - L = a.win, - P = (a.Chart = function() { - this.getArgs.apply(this, arguments); - }); - a.chart = function(a, b, c) { - return new P(a, b, c); - }; - d(P.prototype, { - callbacks: [], - getArgs: function() { - var a = [].slice.call(arguments); - if (I(a[0]) || a[0].nodeName) this.renderTo = a.shift(); - this.init(a[0], a[1]); - }, - init: function(b, c) { - var d, - g, - e = b.series, - k = b.plotOptions || {}; - b.series = null; - d = t(n, b); - for (g in d.plotOptions) - d.plotOptions[g].tooltip = (k[g] && t(k[g].tooltip)) || void 0; - d.tooltip.userOptions = - (b.chart && b.chart.forExport && b.tooltip.userOptions) || b.tooltip; - d.series = b.series = e; - this.userOptions = b; - b = d.chart; - g = b.events; - this.margin = []; - this.spacing = []; - this.bounds = { h: {}, v: {} }; - this.labelCollectors = []; - this.callback = c; - this.isResizing = 0; - this.options = d; - this.axes = []; - this.series = []; - this.hasCartesianSeries = b.showAxes; - var q = this; - q.index = u.length; - u.push(q); - a.chartCount++; - g && - C(g, function(a, b) { - E(q, b, a); - }); - q.xAxis = []; - q.yAxis = []; - q.pointCount = q.colorCounter = q.symbolCounter = 0; - q.firstRender(); - }, - initSeries: function(b) { - var c = this.options.chart; - (c = G[b.type || c.type || c.defaultSeriesType]) || a.error(17, !0); - c = new c(); - c.init(this, b); - return c; - }, - orderSeries: function(a) { - var b = this.series; - for (a = a || 0; a < b.length; a++) - b[a] && - ((b[a].index = a), - (b[a].name = b[a].name || 'Series ' + (b[a].index + 1))); - }, - isInsidePlot: function(a, b, c) { - var d = c ? b : a; - a = c ? a : b; - return 0 <= d && d <= this.plotWidth && 0 <= a && a <= this.plotHeight; - }, - redraw: function(c) { - var g = this.axes, - e = this.series, - k = this.pointer, - q = this.legend, - h = this.isDirtyLegend, - f, - l, - v = this.hasCartesianSeries, - A = this.isDirtyBox, - F, - t = this.renderer, - x = t.isHidden(), - n = []; - this.setResponsive && this.setResponsive(!1); - a.setAnimation(c, this); - x && this.temporaryDisplay(); - this.layOutTitles(); - for (c = e.length; c--; ) - if (((F = e[c]), F.options.stacking && ((f = !0), F.isDirty))) { - l = !0; - break; - } - if (l) - for (c = e.length; c--; ) - (F = e[c]), F.options.stacking && (F.isDirty = !0); - m(e, function(a) { - a.isDirty && - 'point' === a.options.legendType && - (a.updateTotals && a.updateTotals(), (h = !0)); - a.isDirtyData && b(a, 'updatedData'); - }); - h && q.options.enabled && (q.render(), (this.isDirtyLegend = !1)); - f && this.getStacks(); - v && - m(g, function(a) { - a.updateNames(); - a.setScale(); - }); - this.getMargins(); - v && - (m(g, function(a) { - a.isDirty && (A = !0); - }), - m(g, function(a) { - var c = a.min + ',' + a.max; - a.extKey !== c && - ((a.extKey = c), - n.push(function() { - b(a, 'afterSetExtremes', d(a.eventArgs, a.getExtremes())); - delete a.eventArgs; - })); - (A || f) && a.redraw(); - })); - A && this.drawChartBox(); - b(this, 'predraw'); - m(e, function(a) { - (A || a.isDirty) && a.visible && a.redraw(); - a.isDirtyData = !1; - }); - k && k.reset(!0); - t.draw(); - b(this, 'redraw'); - b(this, 'render'); - x && this.temporaryDisplay(!0); - m(n, function(a) { - a.call(); - }); - }, - get: function(a) { - function b(b) { - return b.id === a || (b.options && b.options.id === a); - } - var d, - g = this.series, - e; - d = c(this.axes, b) || c(this.series, b); - for (e = 0; !d && e < g.length; e++) d = c(g[e].points || [], b); - return d; - }, - getAxes: function() { - var a = this, - b = this.options, - c = (b.xAxis = g(b.xAxis || {})), - b = (b.yAxis = g(b.yAxis || {})); - m(c, function(a, b) { - a.index = b; - a.isX = !0; - }); - m(b, function(a, b) { - a.index = b; - }); - c = c.concat(b); - m(c, function(b) { - new l(a, b); - }); - }, - getSelectedPoints: function() { - var a = []; - m(this.series, function(b) { - a = a.concat( - k(b.data || [], function(a) { - return a.selected; - }), - ); - }); - return a; - }, - getSelectedSeries: function() { - return k(this.series, function(a) { - return a.selected; - }); - }, - setTitle: function(a, b, c) { - var d = this, - g = d.options, - e; - e = g.title = t( - { - style: { color: '#333333', fontSize: g.isStock ? '16px' : '18px' }, - }, - g.title, - a, - ); - g = g.subtitle = t({ style: { color: '#666666' } }, g.subtitle, b); - m([['title', a, e], ['subtitle', b, g]], function(a, b) { - var c = a[0], - g = d[c], - e = a[1]; - a = a[2]; - g && e && (d[c] = g = g.destroy()); - a && - !g && - ((d[c] = d.renderer - .text(a.text, 0, 0, a.useHTML) - .attr({ - align: a.align, - class: 'highcharts-' + c, - zIndex: a.zIndex || 4, - }) - .add()), - (d[c].update = function(a) { - d.setTitle(!b && a, b && a); - }), - d[c].css(a.style)); - }); - d.layOutTitles(c); - }, - layOutTitles: function(a) { - var b = 0, - c, - g = this.renderer, - e = this.spacingBox; - m( - ['title', 'subtitle'], - function(a) { - var c = this[a], - k = this.options[a]; - a = 'title' === a ? -3 : k.verticalAlign ? 0 : b + 2; - var q; - c && - ((q = k.style.fontSize), - (q = g.fontMetrics(q, c).b), - c - .css({ width: (k.width || e.width + k.widthAdjust) + 'px' }) - .align(d({ y: a + q }, k), !1, 'spacingBox'), - k.floating || - k.verticalAlign || - (b = Math.ceil(b + c.getBBox(k.useHTML).height))); - }, - this, - ); - c = this.titleOffset !== b; - this.titleOffset = b; - !this.isDirtyBox && - c && - ((this.isDirtyBox = c), - this.hasRendered && q(a, !0) && this.isDirtyBox && this.redraw()); - }, - getChartSize: function() { - var b = this.options.chart, - c = b.width, - b = b.height, - d = this.renderTo; - h(c) || (this.containerWidth = a.getStyle(d, 'width')); - h(b) || (this.containerHeight = a.getStyle(d, 'height')); - this.chartWidth = Math.max(0, c || this.containerWidth || 600); - this.chartHeight = Math.max( - 0, - a.relativeLength(b, this.chartWidth) || - (1 < this.containerHeight ? this.containerHeight : 400), - ); - }, - temporaryDisplay: function(b) { - var c = this.renderTo; - if (b) - for (; c && c.style; ) - c.hcOrigStyle && (a.css(c, c.hcOrigStyle), delete c.hcOrigStyle), - c.hcOrigDetached && - (f.body.removeChild(c), (c.hcOrigDetached = !1)), - (c = c.parentNode); - else - for (; c && c.style; ) { - f.body.contains(c) || - c.parentNode || - ((c.hcOrigDetached = !0), f.body.appendChild(c)); - if ('none' === a.getStyle(c, 'display', !1) || c.hcOricDetached) - (c.hcOrigStyle = { - display: c.style.display, - height: c.style.height, - overflow: c.style.overflow, - }), - (b = { display: 'block', overflow: 'hidden' }), - c !== this.renderTo && (b.height = 0), - a.css(c, b), - c.offsetWidth || - c.style.setProperty('display', 'block', 'important'); - c = c.parentNode; - if (c === f.body) break; - } - }, - setClassName: function(a) { - this.container.className = 'highcharts-container ' + (a || ''); - }, - getContainer: function() { - var b, - c = this.options, - g = c.chart, - e, - k; - b = this.renderTo; - var q = a.uniqueKey(), - h; - b || (this.renderTo = b = g.renderTo); - I(b) && (this.renderTo = b = f.getElementById(b)); - b || a.error(13, !0); - e = A(p(b, 'data-highcharts-chart')); - z(e) && u[e] && u[e].hasRendered && u[e].destroy(); - p(b, 'data-highcharts-chart', this.index); - b.innerHTML = ''; - g.skipClone || b.offsetWidth || this.temporaryDisplay(); - this.getChartSize(); - e = this.chartWidth; - k = this.chartHeight; - h = d( - { - position: 'relative', - overflow: 'hidden', - width: e + 'px', - height: k + 'px', - textAlign: 'left', - lineHeight: 'normal', - zIndex: 0, - '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', - }, - g.style, - ); - this.container = b = r('div', { id: q }, h, b); - this._cursor = b.style.cursor; - this.renderer = new (a[g.renderer] || a.Renderer)( - b, - e, - k, - null, - g.forExport, - c.exporting && c.exporting.allowHTML, - ); - this.setClassName(g.className); - this.renderer.setStyle(g.style); - this.renderer.chartIndex = this.index; - }, - getMargins: function(a) { - var b = this.spacing, - c = this.margin, - d = this.titleOffset; - this.resetMargins(); - d && - !h(c[0]) && - (this.plotTop = Math.max( - this.plotTop, - d + this.options.title.margin + b[0], - )); - this.legend && this.legend.display && this.legend.adjustMargins(c, b); - this.extraMargin && - (this[this.extraMargin.type] = - (this[this.extraMargin.type] || 0) + this.extraMargin.value); - this.adjustPlotArea && this.adjustPlotArea(); - a || this.getAxisMargins(); - }, - getAxisMargins: function() { - var a = this, - b = (a.axisOffset = [0, 0, 0, 0]), - c = a.margin; - a.hasCartesianSeries && - m(a.axes, function(a) { - a.visible && a.getOffset(); - }); - m(K, function(d, g) { - h(c[g]) || (a[d] += b[g]); - }); - a.setChartSize(); - }, - reflow: function(b) { - var c = this, - d = c.options.chart, - g = c.renderTo, - e = h(d.width) && h(d.height), - k = d.width || a.getStyle(g, 'width'), - d = d.height || a.getStyle(g, 'height'), - g = b ? b.target : L; - if (!e && !c.isPrinting && k && d && (g === L || g === f)) { - if (k !== c.containerWidth || d !== c.containerHeight) - clearTimeout(c.reflowTimeout), - (c.reflowTimeout = Q( - function() { - c.container && c.setSize(void 0, void 0, !1); - }, - b ? 100 : 0, - )); - c.containerWidth = k; - c.containerHeight = d; - } - }, - initReflow: function() { - var a = this, - b; - b = E(L, 'resize', function(b) { - a.reflow(b); - }); - E(a, 'destroy', b); - }, - setSize: function(c, d, g) { - var k = this, - q = k.renderer; - k.isResizing += 1; - a.setAnimation(g, k); - k.oldChartHeight = k.chartHeight; - k.oldChartWidth = k.chartWidth; - void 0 !== c && (k.options.chart.width = c); - void 0 !== d && (k.options.chart.height = d); - k.getChartSize(); - c = q.globalAnimation; - (c ? D : e)( - k.container, - { width: k.chartWidth + 'px', height: k.chartHeight + 'px' }, - c, - ); - k.setChartSize(!0); - q.setSize(k.chartWidth, k.chartHeight, g); - m(k.axes, function(a) { - a.isDirty = !0; - a.setScale(); - }); - k.isDirtyLegend = !0; - k.isDirtyBox = !0; - k.layOutTitles(); - k.getMargins(); - k.redraw(g); - k.oldChartHeight = null; - b(k, 'resize'); - Q(function() { - k && - b(k, 'endResize', null, function() { - --k.isResizing; - }); - }, H(c).duration); - }, - setChartSize: function(a) { - var b = this.inverted, - c = this.renderer, - d = this.chartWidth, - g = this.chartHeight, - e = this.options.chart, - k = this.spacing, - q = this.clipOffset, - h, - f, - l, - v; - this.plotLeft = h = Math.round(this.plotLeft); - this.plotTop = f = Math.round(this.plotTop); - this.plotWidth = l = Math.max(0, Math.round(d - h - this.marginRight)); - this.plotHeight = v = Math.max( - 0, - Math.round(g - f - this.marginBottom), - ); - this.plotSizeX = b ? v : l; - this.plotSizeY = b ? l : v; - this.plotBorderWidth = e.plotBorderWidth || 0; - this.spacingBox = c.spacingBox = { - x: k[3], - y: k[0], - width: d - k[3] - k[1], - height: g - k[0] - k[2], - }; - this.plotBox = c.plotBox = { x: h, y: f, width: l, height: v }; - d = 2 * Math.floor(this.plotBorderWidth / 2); - b = Math.ceil(Math.max(d, q[3]) / 2); - c = Math.ceil(Math.max(d, q[0]) / 2); - this.clipBox = { - x: b, - y: c, - width: Math.floor(this.plotSizeX - Math.max(d, q[1]) / 2 - b), - height: Math.max( - 0, - Math.floor(this.plotSizeY - Math.max(d, q[2]) / 2 - c), - ), - }; - a || - m(this.axes, function(a) { - a.setAxisSize(); - a.setAxisTranslation(); - }); - }, - resetMargins: function() { - var a = this, - b = a.options.chart; - m(['margin', 'spacing'], function(c) { - var d = b[c], - g = B(d) ? d : [d, d, d, d]; - m(['Top', 'Right', 'Bottom', 'Left'], function(d, e) { - a[c][e] = q(b[c + d], g[e]); - }); - }); - m(K, function(b, c) { - a[b] = q(a.margin[c], a.spacing[c]); - }); - a.axisOffset = [0, 0, 0, 0]; - a.clipOffset = [0, 0, 0, 0]; - }, - drawChartBox: function() { - var a = this.options.chart, - b = this.renderer, - c = this.chartWidth, - d = this.chartHeight, - g = this.chartBackground, - e = this.plotBackground, - k = this.plotBorder, - q, - h = this.plotBGImage, - f = a.backgroundColor, - m = a.plotBackgroundColor, - l = a.plotBackgroundImage, - v, - A = this.plotLeft, - F = this.plotTop, - t = this.plotWidth, - x = this.plotHeight, - n = this.plotBox, - p = this.clipRect, - z = this.clipBox, - G = 'animate'; - g || - ((this.chartBackground = g = b - .rect() - .addClass('highcharts-background') - .add()), - (G = 'attr')); - q = a.borderWidth || 0; - v = q + (a.shadow ? 8 : 0); - f = { fill: f || 'none' }; - if (q || g['stroke-width']) - (f.stroke = a.borderColor), (f['stroke-width'] = q); - g.attr(f).shadow(a.shadow); - g[G]({ - x: v / 2, - y: v / 2, - width: c - v - (q % 2), - height: d - v - (q % 2), - r: a.borderRadius, - }); - G = 'animate'; - e || - ((G = 'attr'), - (this.plotBackground = e = b - .rect() - .addClass('highcharts-plot-background') - .add())); - e[G](n); - e.attr({ fill: m || 'none' }).shadow(a.plotShadow); - l && - (h - ? h.animate(n) - : (this.plotBGImage = b.image(l, A, F, t, x).add())); - p - ? p.animate({ width: z.width, height: z.height }) - : (this.clipRect = b.clipRect(z)); - G = 'animate'; - k || - ((G = 'attr'), - (this.plotBorder = k = b - .rect() - .addClass('highcharts-plot-border') - .attr({ zIndex: 1 }) - .add())); - k.attr({ - stroke: a.plotBorderColor, - 'stroke-width': a.plotBorderWidth || 0, - fill: 'none', - }); - k[G](k.crisp({ x: A, y: F, width: t, height: x }, -k.strokeWidth())); - this.isDirtyBox = !1; - }, - propFromSeries: function() { - var a = this, - b = a.options.chart, - c, - d = a.options.series, - g, - e; - m(['inverted', 'angular', 'polar'], function(k) { - c = G[b.type || b.defaultSeriesType]; - e = b[k] || (c && c.prototype[k]); - for (g = d && d.length; !e && g--; ) - (c = G[d[g].type]) && c.prototype[k] && (e = !0); - a[k] = e; - }); - }, - linkSeries: function() { - var a = this, - b = a.series; - m(b, function(a) { - a.linkedSeries.length = 0; - }); - m(b, function(b) { - var c = b.options.linkedTo; - I(c) && - (c = ':previous' === c ? a.series[b.index - 1] : a.get(c)) && - c.linkedParent !== b && - (c.linkedSeries.push(b), - (b.linkedParent = c), - (b.visible = q(b.options.visible, c.options.visible, b.visible))); - }); - }, - renderSeries: function() { - m(this.series, function(a) { - a.translate(); - a.render(); - }); - }, - renderLabels: function() { - var a = this, - b = a.options.labels; - b.items && - m(b.items, function(c) { - var g = d(b.style, c.style), - e = A(g.left) + a.plotLeft, - k = A(g.top) + a.plotTop + 12; - delete g.left; - delete g.top; - a.renderer - .text(c.html, e, k) - .attr({ zIndex: 2 }) - .css(g) - .add(); - }); - }, - render: function() { - var a = this.axes, - b = this.renderer, - c = this.options, - d, - g, - e; - this.setTitle(); - this.legend = new x(this, c.legend); - this.getStacks && this.getStacks(); - this.getMargins(!0); - this.setChartSize(); - c = this.plotWidth; - d = this.plotHeight = Math.max(this.plotHeight - 21, 0); - m(a, function(a) { - a.setScale(); - }); - this.getAxisMargins(); - g = 1.1 < c / this.plotWidth; - e = 1.05 < d / this.plotHeight; - if (g || e) - m(a, function(a) { - ((a.horiz && g) || (!a.horiz && e)) && a.setTickInterval(!0); - }), - this.getMargins(); - this.drawChartBox(); - this.hasCartesianSeries && - m(a, function(a) { - a.visible && a.render(); - }); - this.seriesGroup || - (this.seriesGroup = b - .g('series-group') - .attr({ zIndex: 3 }) - .add()); - this.renderSeries(); - this.renderLabels(); - this.addCredits(); - this.setResponsive && this.setResponsive(); - this.hasRendered = !0; - }, - addCredits: function(a) { - var b = this; - a = t(!0, this.options.credits, a); - a.enabled && - !this.credits && - ((this.credits = this.renderer - .text(a.text + (this.mapCredits || ''), 0, 0) - .addClass('highcharts-credits') - .on('click', function() { - a.href && (L.location.href = a.href); - }) - .attr({ align: a.position.align, zIndex: 8 }) - .css(a.style) - .add() - .align(a.position)), - (this.credits.update = function(a) { - b.credits = b.credits.destroy(); - b.addCredits(a); - })); - }, - destroy: function() { - var c = this, - d = c.axes, - g = c.series, - e = c.container, - k, - q = e && e.parentNode; - b(c, 'destroy'); - c.renderer.forExport ? a.erase(u, c) : (u[c.index] = void 0); - a.chartCount--; - c.renderTo.removeAttribute('data-highcharts-chart'); - F(c); - for (k = d.length; k--; ) d[k] = d[k].destroy(); - this.scroller && this.scroller.destroy && this.scroller.destroy(); - for (k = g.length; k--; ) g[k] = g[k].destroy(); - m( - 'title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer'.split( - ' ', - ), - function(a) { - var b = c[a]; - b && b.destroy && (c[a] = b.destroy()); - }, - ); - e && ((e.innerHTML = ''), F(e), q && w(e)); - C(c, function(a, b) { - delete c[b]; - }); - }, - isReadyToRender: function() { - var a = this; - return v || L != L.top || 'complete' === f.readyState - ? !0 - : (f.attachEvent('onreadystatechange', function() { - f.detachEvent('onreadystatechange', a.firstRender); - 'complete' === f.readyState && a.firstRender(); - }), - !1); - }, - firstRender: function() { - var a = this, - c = a.options; - if (a.isReadyToRender()) { - a.getContainer(); - b(a, 'init'); - a.resetMargins(); - a.setChartSize(); - a.propFromSeries(); - a.getAxes(); - m(c.series || [], function(b) { - a.initSeries(b); - }); - a.linkSeries(); - b(a, 'beforeRender'); - N && (a.pointer = new N(a, c)); - a.render(); - if (!a.renderer.imgCount && a.onload) a.onload(); - a.temporaryDisplay(!0); - } - }, - onload: function() { - m( - [this.callback].concat(this.callbacks), - function(a) { - a && void 0 !== this.index && a.apply(this, [this]); - }, - this, - ); - b(this, 'load'); - b(this, 'render'); - h(this.index) && !1 !== this.options.chart.reflow && this.initReflow(); - this.onload = null; - }, - }); - })(M); - (function(a) { - var E, - D = a.each, - H = a.extend, - p = a.erase, - f = a.fireEvent, - l = a.format, - r = a.isArray, - n = a.isNumber, - w = a.pick, - u = a.removeEvent; - a.Point = E = function() {}; - a.Point.prototype = { - init: function(a, h, f) { - this.series = a; - this.color = a.color; - this.applyOptions(h, f); - a.options.colorByPoint - ? ((h = a.options.colors || a.chart.options.colors), - (this.color = this.color || h[a.colorCounter]), - (h = h.length), - (f = a.colorCounter), - a.colorCounter++, - a.colorCounter === h && (a.colorCounter = 0)) - : (f = a.colorIndex); - this.colorIndex = w(this.colorIndex, f); - a.chart.pointCount++; - return this; - }, - applyOptions: function(a, h) { - var e = this.series, - d = e.options.pointValKey || e.pointValKey; - a = E.prototype.optionsToObject.call(this, a); - H(this, a); - this.options = this.options ? H(this.options, a) : a; - a.group && delete this.group; - d && (this.y = this[d]); - this.isNull = w( - this.isValid && !this.isValid(), - null === this.x || !n(this.y, !0), - ); - this.selected && (this.state = 'select'); - 'name' in this && - void 0 === h && - e.xAxis && - e.xAxis.hasNames && - (this.x = e.xAxis.nameToX(this)); - void 0 === this.x && - e && - (this.x = void 0 === h ? e.autoIncrement(this) : h); - return this; - }, - optionsToObject: function(a) { - var e = {}, - f = this.series, - d = f.options.keys, - c = d || f.pointArrayMap || ['y'], - b = c.length, - k = 0, - l = 0; - if (n(a) || null === a) e[c[0]] = a; - else if (r(a)) - for ( - !d && - a.length > b && - ((f = typeof a[0]), - 'string' === f ? (e.name = a[0]) : 'number' === f && (e.x = a[0]), - k++); - l < b; - - ) - (d && void 0 === a[k]) || (e[c[l]] = a[k]), k++, l++; - else - 'object' === typeof a && - ((e = a), - a.dataLabels && (f._hasPointLabels = !0), - a.marker && (f._hasPointMarkers = !0)); - return e; - }, - getClassName: function() { - return ( - 'highcharts-point' + - (this.selected ? ' highcharts-point-select' : '') + - (this.negative ? ' highcharts-negative' : '') + - (this.isNull ? ' highcharts-null-point' : '') + - (void 0 !== this.colorIndex - ? ' highcharts-color-' + this.colorIndex - : '') + - (this.options.className ? ' ' + this.options.className : '') + - (this.zone && this.zone.className - ? ' ' + this.zone.className.replace('highcharts-negative', '') - : '') - ); - }, - getZone: function() { - var a = this.series, - h = a.zones, - a = a.zoneAxis || 'y', - f = 0, - d; - for (d = h[f]; this[a] >= d.value; ) d = h[++f]; - d && d.color && !this.options.color && (this.color = d.color); - return d; - }, - destroy: function() { - var a = this.series.chart, - h = a.hoverPoints, - f; - a.pointCount--; - h && (this.setState(), p(h, this), h.length || (a.hoverPoints = null)); - if (this === a.hoverPoint) this.onMouseOut(); - if (this.graphic || this.dataLabel) u(this), this.destroyElements(); - this.legendItem && a.legend.destroyItem(this); - for (f in this) this[f] = null; - }, - destroyElements: function() { - for ( - var a = [ - 'graphic', - 'dataLabel', - 'dataLabelUpper', - 'connector', - 'shadowGroup', - ], - h, - f = 6; - f--; - - ) - (h = a[f]), this[h] && (this[h] = this[h].destroy()); - }, - getLabelConfig: function() { - return { - x: this.category, - y: this.y, - color: this.color, - colorIndex: this.colorIndex, - key: this.name || this.category, - series: this.series, - point: this, - percentage: this.percentage, - total: this.total || this.stackTotal, - }; - }, - tooltipFormatter: function(a) { - var e = this.series, - f = e.tooltipOptions, - d = w(f.valueDecimals, ''), - c = f.valuePrefix || '', - b = f.valueSuffix || ''; - D(e.pointArrayMap || ['y'], function(e) { - e = '{point.' + e; - if (c || b) a = a.replace(e + '}', c + e + '}' + b); - a = a.replace(e + '}', e + ':,.' + d + 'f}'); - }); - return l(a, { point: this, series: this.series }); - }, - firePointEvent: function(a, h, m) { - var d = this, - c = this.series.options; - (c.point.events[a] || - (d.options && d.options.events && d.options.events[a])) && - this.importEvents(); - 'click' === a && - c.allowPointSelect && - (m = function(a) { - d.select && d.select(null, a.ctrlKey || a.metaKey || a.shiftKey); - }); - f(this, a, h, m); - }, - visible: !0, - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.animObject, - H = a.arrayMax, - p = a.arrayMin, - f = a.correctFloat, - l = a.Date, - r = a.defaultOptions, - n = a.defaultPlotOptions, - w = a.defined, - u = a.each, - e = a.erase, - h = a.extend, - m = a.fireEvent, - d = a.grep, - c = a.isArray, - b = a.isNumber, - k = a.isString, - z = a.merge, - B = a.objectEach, - I = a.pick, - x = a.removeEvent, - K = a.splat, - t = a.SVGElement, - C = a.syncTimeout, - N = a.win; - a.Series = a.seriesType( - 'line', - null, - { - lineWidth: 2, - allowPointSelect: !1, - showCheckbox: !1, - animation: { duration: 1e3 }, - events: {}, - marker: { - lineWidth: 0, - lineColor: '#ffffff', - radius: 4, - states: { - hover: { - animation: { duration: 50 }, - enabled: !0, - radiusPlus: 2, - lineWidthPlus: 1, - }, - select: { - fillColor: '#cccccc', - lineColor: '#000000', - lineWidth: 2, - }, - }, - }, - point: { events: {} }, - dataLabels: { - align: 'center', - formatter: function() { - return null === this.y ? '' : a.numberFormat(this.y, -1); - }, - style: { - fontSize: '11px', - fontWeight: 'bold', - color: 'contrast', - textOutline: '1px contrast', - }, - verticalAlign: 'bottom', - x: 0, - y: 0, - padding: 5, - }, - cropThreshold: 300, - pointRange: 0, - softThreshold: !0, - states: { - hover: { - animation: { duration: 50 }, - lineWidthPlus: 1, - marker: {}, - halo: { size: 10, opacity: 0.25 }, - }, - select: { marker: {} }, - }, - stickyTracking: !0, - turboThreshold: 1e3, - findNearestPointBy: 'x', - }, - { - isCartesian: !0, - pointClass: a.Point, - sorted: !0, - requireSorting: !0, - directTouch: !1, - axisTypes: ['xAxis', 'yAxis'], - colorCounter: 0, - parallelArrays: ['x', 'y'], - coll: 'series', - init: function(a, b) { - var c = this, - d, - g = a.series, - e; - c.chart = a; - c.options = b = c.setOptions(b); - c.linkedSeries = []; - c.bindAxes(); - h(c, { - name: b.name, - state: '', - visible: !1 !== b.visible, - selected: !0 === b.selected, - }); - d = b.events; - B(d, function(a, b) { - E(c, b, a); - }); - if ( - (d && d.click) || - (b.point && b.point.events && b.point.events.click) || - b.allowPointSelect - ) - a.runTrackerClick = !0; - c.getColor(); - c.getSymbol(); - u(c.parallelArrays, function(a) { - c[a + 'Data'] = []; - }); - c.setData(b.data, !1); - c.isCartesian && (a.hasCartesianSeries = !0); - g.length && (e = g[g.length - 1]); - c._i = I(e && e._i, -1) + 1; - a.orderSeries(this.insert(g)); - }, - insert: function(a) { - var c = this.options.index, - d; - if (b(c)) { - for (d = a.length; d--; ) - if (c >= I(a[d].options.index, a[d]._i)) { - a.splice(d + 1, 0, this); - break; - } - -1 === d && a.unshift(this); - d += 1; - } else a.push(this); - return I(d, a.length - 1); - }, - bindAxes: function() { - var b = this, - c = b.options, - d = b.chart, - e; - u(b.axisTypes || [], function(g) { - u(d[g], function(a) { - e = a.options; - if ( - c[g] === e.index || - (void 0 !== c[g] && c[g] === e.id) || - (void 0 === c[g] && 0 === e.index) - ) - b.insert(a.series), (b[g] = a), (a.isDirty = !0); - }); - b[g] || b.optionalAxis === g || a.error(18, !0); - }); - }, - updateParallelArrays: function(a, c) { - var d = a.series, - e = arguments, - g = b(c) - ? function(b) { - var g = 'y' === b && d.toYData ? d.toYData(a) : a[b]; - d[b + 'Data'][c] = g; - } - : function(a) { - Array.prototype[c].apply( - d[a + 'Data'], - Array.prototype.slice.call(e, 2), - ); - }; - u(d.parallelArrays, g); - }, - autoIncrement: function() { - var b = this.options, - c = this.xIncrement, - d, - e = b.pointIntervalUnit, - g = 0, - c = I(c, b.pointStart, 0); - this.pointInterval = d = I(this.pointInterval, b.pointInterval, 1); - e && - ((b = new l(c)), - 'day' === e - ? (b = +b[l.hcSetDate](b[l.hcGetDate]() + d)) - : 'month' === e - ? (b = +b[l.hcSetMonth](b[l.hcGetMonth]() + d)) - : 'year' === e && - (b = +b[l.hcSetFullYear](b[l.hcGetFullYear]() + d)), - l.hcHasTimeZone && (g = a.getTZOffset(b) - a.getTZOffset(c)), - (d = b - c + g)); - this.xIncrement = c + d; - return c; - }, - setOptions: function(a) { - var b = this.chart, - c = b.options, - d = c.plotOptions, - g = (b.userOptions || {}).plotOptions || {}, - e = d[this.type]; - this.userOptions = a; - b = z(e, d.series, a); - this.tooltipOptions = z( - r.tooltip, - r.plotOptions.series && r.plotOptions.series.tooltip, - r.plotOptions[this.type].tooltip, - c.tooltip.userOptions, - d.series && d.series.tooltip, - d[this.type].tooltip, - a.tooltip, - ); - this.stickyTracking = I( - a.stickyTracking, - g[this.type] && g[this.type].stickyTracking, - g.series && g.series.stickyTracking, - this.tooltipOptions.shared && !this.noSharedTooltip - ? !0 - : b.stickyTracking, - ); - null === e.marker && delete b.marker; - this.zoneAxis = b.zoneAxis; - a = this.zones = (b.zones || []).slice(); - (!b.negativeColor && !b.negativeFillColor) || - b.zones || - a.push({ - value: b[this.zoneAxis + 'Threshold'] || b.threshold || 0, - className: 'highcharts-negative', - color: b.negativeColor, - fillColor: b.negativeFillColor, - }); - a.length && - w(a[a.length - 1].value) && - a.push({ color: this.color, fillColor: this.fillColor }); - return b; - }, - getCyclic: function(a, b, c) { - var d, - g = this.chart, - e = this.userOptions, - k = a + 'Index', - h = a + 'Counter', - q = c ? c.length : I(g.options.chart[a + 'Count'], g[a + 'Count']); - b || - ((d = I(e[k], e['_' + k])), - w(d) || - (g.series.length || (g[h] = 0), - (e['_' + k] = d = g[h] % q), - (g[h] += 1)), - c && (b = c[d])); - void 0 !== d && (this[k] = d); - this[a] = b; - }, - getColor: function() { - this.options.colorByPoint - ? (this.options.color = null) - : this.getCyclic( - 'color', - this.options.color || n[this.type].color, - this.chart.options.colors, - ); - }, - getSymbol: function() { - this.getCyclic( - 'symbol', - this.options.marker.symbol, - this.chart.options.symbols, - ); - }, - drawLegendSymbol: a.LegendSymbolMixin.drawLineMarker, - setData: function(d, e, h, f) { - var g = this, - q = g.points, - m = (q && q.length) || 0, - l, - A = g.options, - t = g.chart, - x = null, - n = g.xAxis, - p = A.turboThreshold, - z = this.xData, - F = this.yData, - C = (l = g.pointArrayMap) && l.length; - d = d || []; - l = d.length; - e = I(e, !0); - if ( - !1 !== f && - l && - m === l && - !g.cropped && - !g.hasGroupedData && - g.visible - ) - u(d, function(a, b) { - q[b].update && a !== A.data[b] && q[b].update(a, !1, null, !1); - }); - else { - g.xIncrement = null; - g.colorCounter = 0; - u(this.parallelArrays, function(a) { - g[a + 'Data'].length = 0; - }); - if (p && l > p) { - for (h = 0; null === x && h < l; ) (x = d[h]), h++; - if (b(x)) - for (h = 0; h < l; h++) - (z[h] = this.autoIncrement()), (F[h] = d[h]); - else if (c(x)) - if (C) - for (h = 0; h < l; h++) - (x = d[h]), (z[h] = x[0]), (F[h] = x.slice(1, C + 1)); - else - for (h = 0; h < l; h++) - (x = d[h]), (z[h] = x[0]), (F[h] = x[1]); - else a.error(12); - } else - for (h = 0; h < l; h++) - void 0 !== d[h] && - ((x = { series: g }), - g.pointClass.prototype.applyOptions.apply(x, [d[h]]), - g.updateParallelArrays(x, h)); - F && k(F[0]) && a.error(14, !0); - g.data = []; - g.options.data = g.userOptions.data = d; - for (h = m; h--; ) q[h] && q[h].destroy && q[h].destroy(); - n && (n.minRange = n.userMinRange); - g.isDirty = t.isDirtyBox = !0; - g.isDirtyData = !!q; - h = !1; - } - 'point' === A.legendType && - (this.processData(), this.generatePoints()); - e && t.redraw(h); - }, - processData: function(b) { - var c = this.xData, - d = this.yData, - e = c.length, - g; - g = 0; - var k, - h, - q = this.xAxis, - f, - m = this.options; - f = m.cropThreshold; - var l = this.getExtremesFromAll || m.getExtremesFromAll, - t = this.isCartesian, - m = q && q.val2lin, - x = q && q.isLog, - n = this.requireSorting, - p, - z; - if (t && !this.isDirty && !q.isDirty && !this.yAxis.isDirty && !b) - return !1; - q && ((b = q.getExtremes()), (p = b.min), (z = b.max)); - if (t && this.sorted && !l && (!f || e > f || this.forceCrop)) - if (c[e - 1] < p || c[0] > z) (c = []), (d = []); - else if (c[0] < p || c[e - 1] > z) - (g = this.cropData(this.xData, this.yData, p, z)), - (c = g.xData), - (d = g.yData), - (g = g.start), - (k = !0); - for (f = c.length || 1; --f; ) - (e = x ? m(c[f]) - m(c[f - 1]) : c[f] - c[f - 1]), - 0 < e && (void 0 === h || e < h) - ? (h = e) - : 0 > e && n && (a.error(15), (n = !1)); - this.cropped = k; - this.cropStart = g; - this.processedXData = c; - this.processedYData = d; - this.closestPointRange = h; - }, - cropData: function(a, b, c, d) { - var g = a.length, - e = 0, - k = g, - h = I(this.cropShoulder, 1), - f; - for (f = 0; f < g; f++) - if (a[f] >= c) { - e = Math.max(0, f - h); - break; - } - for (c = f; c < g; c++) - if (a[c] > d) { - k = c + h; - break; - } - return { - xData: a.slice(e, k), - yData: b.slice(e, k), - start: e, - end: k, - }; - }, - generatePoints: function() { - var a = this.options, - b = a.data, - c = this.data, - d, - g = this.processedXData, - e = this.processedYData, - k = this.pointClass, - h = g.length, - f = this.cropStart || 0, - m, - l = this.hasGroupedData, - a = a.keys, - t, - x = [], - n; - c || l || ((c = []), (c.length = b.length), (c = this.data = c)); - a && l && (this.options.keys = !1); - for (n = 0; n < h; n++) - (m = f + n), - l - ? ((t = new k().init(this, [g[n]].concat(K(e[n])))), - (t.dataGroup = this.groupMap[n])) - : (t = c[m]) || - void 0 === b[m] || - (c[m] = t = new k().init(this, b[m], g[n])), - t && ((t.index = m), (x[n] = t)); - this.options.keys = a; - if (c && (h !== (d = c.length) || l)) - for (n = 0; n < d; n++) - n !== f || l || (n += h), - c[n] && (c[n].destroyElements(), (c[n].plotX = void 0)); - this.data = c; - this.points = x; - }, - getExtremes: function(a) { - var d = this.yAxis, - e = this.processedXData, - k, - g = [], - h = 0; - k = this.xAxis.getExtremes(); - var f = k.min, - q = k.max, - m, - l, - t, - n; - a = a || this.stackedYData || this.processedYData || []; - k = a.length; - for (n = 0; n < k; n++) - if ( - ((l = e[n]), - (t = a[n]), - (m = - (b(t, !0) || c(t)) && - (!d.positiveValuesOnly || t.length || 0 < t)), - (l = - this.getExtremesFromAll || - this.options.getExtremesFromAll || - this.cropped || - ((e[n + 1] || l) >= f && (e[n - 1] || l) <= q)), - m && l) - ) - if ((m = t.length)) - for (; m--; ) 'number' === typeof t[m] && (g[h++] = t[m]); - else g[h++] = t; - this.dataMin = p(g); - this.dataMax = H(g); - }, - translate: function() { - this.processedXData || this.processData(); - this.generatePoints(); - var a = this.options, - c = a.stacking, - d = this.xAxis, - e = d.categories, - g = this.yAxis, - k = this.points, - h = k.length, - m = !!this.modifyValue, - l = a.pointPlacement, - t = 'between' === l || b(l), - n = a.threshold, - x = a.startFromThreshold ? n : 0, - p, - z, - C, - r, - u = Number.MAX_VALUE; - 'between' === l && (l = 0.5); - b(l) && (l *= I(a.pointRange || d.pointRange)); - for (a = 0; a < h; a++) { - var B = k[a], - N = B.x, - K = B.y; - z = B.low; - var D = - c && - g.stacks[ - (this.negStacks && K < (x ? 0 : n) ? '-' : '') + this.stackKey - ], - E; - g.positiveValuesOnly && null !== K && 0 >= K && (B.isNull = !0); - B.plotX = p = f( - Math.min( - Math.max( - -1e5, - d.translate(N, 0, 0, 0, 1, l, 'flags' === this.type), - ), - 1e5, - ), - ); - c && - this.visible && - !B.isNull && - D && - D[N] && - ((r = this.getStackIndicator(r, N, this.index)), - (E = D[N]), - (K = E.points[r.key]), - (z = K[0]), - (K = K[1]), - z === x && r.key === D[N].base && (z = I(n, g.min)), - g.positiveValuesOnly && 0 >= z && (z = null), - (B.total = B.stackTotal = E.total), - (B.percentage = E.total && (B.y / E.total) * 100), - (B.stackY = K), - E.setOffset(this.pointXOffset || 0, this.barW || 0)); - B.yBottom = w(z) ? g.translate(z, 0, 1, 0, 1) : null; - m && (K = this.modifyValue(K, B)); - B.plotY = z = - 'number' === typeof K && Infinity !== K - ? Math.min(Math.max(-1e5, g.translate(K, 0, 1, 0, 1)), 1e5) - : void 0; - B.isInside = - void 0 !== z && 0 <= z && z <= g.len && 0 <= p && p <= d.len; - B.clientX = t ? f(d.translate(N, 0, 0, 0, 1, l)) : p; - B.negative = B.y < (n || 0); - B.category = e && void 0 !== e[B.x] ? e[B.x] : B.x; - B.isNull || - (void 0 !== C && (u = Math.min(u, Math.abs(p - C))), (C = p)); - B.zone = this.zones.length && B.getZone(); - } - this.closestPointRangePx = u; - }, - getValidPoints: function(a, b) { - var c = this.chart; - return d(a || this.points || [], function(a) { - return b && !c.isInsidePlot(a.plotX, a.plotY, c.inverted) - ? !1 - : !a.isNull; - }); - }, - setClip: function(a) { - var b = this.chart, - c = this.options, - d = b.renderer, - g = b.inverted, - e = this.clipBox, - k = e || b.clipBox, - h = - this.sharedClipKey || - [ - '_sharedClip', - a && a.duration, - a && a.easing, - k.height, - c.xAxis, - c.yAxis, - ].join(), - f = b[h], - q = b[h + 'm']; - f || - (a && - ((k.width = 0), - g && (k.x = b.plotSizeX), - (b[h + 'm'] = q = d.clipRect( - g ? b.plotSizeX + 99 : -99, - g ? -b.plotLeft : -b.plotTop, - 99, - g ? b.chartWidth : b.chartHeight, - ))), - (b[h] = f = d.clipRect(k)), - (f.count = { length: 0 })); - a && - !f.count[this.index] && - ((f.count[this.index] = !0), (f.count.length += 1)); - !1 !== c.clip && - (this.group.clip(a || e ? f : b.clipRect), - this.markerGroup.clip(q), - (this.sharedClipKey = h)); - a || - (f.count[this.index] && - (delete f.count[this.index], --f.count.length), - 0 === f.count.length && - h && - b[h] && - (e || (b[h] = b[h].destroy()), - b[h + 'm'] && (b[h + 'm'] = b[h + 'm'].destroy()))); - }, - animate: function(a) { - var b = this.chart, - c = D(this.options.animation), - d; - a - ? this.setClip(c) - : ((d = this.sharedClipKey), - (a = b[d]) && a.animate({ width: b.plotSizeX, x: 0 }, c), - b[d + 'm'] && - b[d + 'm'].animate({ width: b.plotSizeX + 99, x: 0 }, c), - (this.animate = null)); - }, - afterAnimate: function() { - this.setClip(); - m(this, 'afterAnimate'); - this.finishedAnimating = !0; - }, - drawPoints: function() { - var a = this.points, - b = this.chart, - c, - d, - g, - e, - k = this.options.marker, - h, - f, - l, - m = this[this.specialGroup] || this.markerGroup, - t, - n = I( - k.enabled, - this.xAxis.isRadial ? !0 : null, - this.closestPointRangePx >= 2 * k.radius, - ); - if (!1 !== k.enabled || this._hasPointMarkers) - for (c = 0; c < a.length; c++) - (d = a[c]), - (e = d.graphic), - (h = d.marker || {}), - (f = !!d.marker), - (g = (n && void 0 === h.enabled) || h.enabled), - (l = d.isInside), - g && !d.isNull - ? ((g = I(h.symbol, this.symbol)), - (d.hasImage = 0 === g.indexOf('url')), - (t = this.markerAttribs(d, d.selected && 'select')), - e - ? e[l ? 'show' : 'hide'](!0).animate(t) - : l && - (0 < t.width || d.hasImage) && - (d.graphic = e = b.renderer - .symbol(g, t.x, t.y, t.width, t.height, f ? h : k) - .add(m)), - e && e.attr(this.pointAttribs(d, d.selected && 'select')), - e && e.addClass(d.getClassName(), !0)) - : e && (d.graphic = e.destroy()); - }, - markerAttribs: function(a, b) { - var c = this.options.marker, - d = a.marker || {}, - g = I(d.radius, c.radius); - b && - ((c = c.states[b]), - (b = d.states && d.states[b]), - (g = I( - b && b.radius, - c && c.radius, - g + ((c && c.radiusPlus) || 0), - ))); - a.hasImage && (g = 0); - a = { x: Math.floor(a.plotX) - g, y: a.plotY - g }; - g && (a.width = a.height = 2 * g); - return a; - }, - pointAttribs: function(a, b) { - var c = this.options.marker, - d = a && a.options, - g = (d && d.marker) || {}, - e = this.color, - k = d && d.color, - h = a && a.color, - d = I(g.lineWidth, c.lineWidth); - a = a && a.zone && a.zone.color; - e = k || a || h || e; - a = g.fillColor || c.fillColor || e; - e = g.lineColor || c.lineColor || e; - b && - ((c = c.states[b]), - (b = (g.states && g.states[b]) || {}), - (d = I( - b.lineWidth, - c.lineWidth, - d + I(b.lineWidthPlus, c.lineWidthPlus, 0), - )), - (a = b.fillColor || c.fillColor || a), - (e = b.lineColor || c.lineColor || e)); - return { stroke: e, 'stroke-width': d, fill: a }; - }, - destroy: function() { - var a = this, - b = a.chart, - c = /AppleWebKit\/533/.test(N.navigator.userAgent), - d, - g, - k = a.data || [], - h, - f; - m(a, 'destroy'); - x(a); - u(a.axisTypes || [], function(b) { - (f = a[b]) && - f.series && - (e(f.series, a), (f.isDirty = f.forceRedraw = !0)); - }); - a.legendItem && a.chart.legend.destroyItem(a); - for (g = k.length; g--; ) (h = k[g]) && h.destroy && h.destroy(); - a.points = null; - clearTimeout(a.animationTimeout); - B(a, function(a, b) { - a instanceof t && - !a.survive && - ((d = c && 'group' === b ? 'hide' : 'destroy'), a[d]()); - }); - b.hoverSeries === a && (b.hoverSeries = null); - e(b.series, a); - b.orderSeries(); - B(a, function(b, c) { - delete a[c]; - }); - }, - getGraphPath: function(a, b, c) { - var d = this, - g = d.options, - e = g.step, - k, - h = [], - f = [], - l; - a = a || d.points; - (k = a.reversed) && a.reverse(); - (e = { right: 1, center: 2 }[e] || (e && 3)) && k && (e = 4 - e); - !g.connectNulls || b || c || (a = this.getValidPoints(a)); - u(a, function(k, m) { - var q = k.plotX, - t = k.plotY, - n = a[m - 1]; - (k.leftCliff || (n && n.rightCliff)) && !c && (l = !0); - k.isNull && !w(b) && 0 < m - ? (l = !g.connectNulls) - : k.isNull && !b - ? (l = !0) - : (0 === m || l - ? (m = ['M', k.plotX, k.plotY]) - : d.getPointSpline - ? (m = d.getPointSpline(a, k, m)) - : e - ? ((m = - 1 === e - ? ['L', n.plotX, t] - : 2 === e - ? [ - 'L', - (n.plotX + q) / 2, - n.plotY, - 'L', - (n.plotX + q) / 2, - t, - ] - : ['L', q, n.plotY]), - m.push('L', q, t)) - : (m = ['L', q, t]), - f.push(k.x), - e && f.push(k.x), - h.push.apply(h, m), - (l = !1)); - }); - h.xMap = f; - return (d.graphPath = h); - }, - drawGraph: function() { - var a = this, - b = this.options, - c = (this.gappedPath || this.getGraphPath).call(this), - d = [ - [ - 'graph', - 'highcharts-graph', - b.lineColor || this.color, - b.dashStyle, - ], - ]; - u(this.zones, function(c, e) { - d.push([ - 'zone-graph-' + e, - 'highcharts-graph highcharts-zone-graph-' + - e + - ' ' + - (c.className || ''), - c.color || a.color, - c.dashStyle || b.dashStyle, - ]); - }); - u(d, function(d, e) { - var g = d[0], - k = a[g]; - k - ? ((k.endX = a.preventGraphAnimation ? null : c.xMap), - k.animate({ d: c })) - : c.length && - ((a[g] = a.chart.renderer - .path(c) - .addClass(d[1]) - .attr({ zIndex: 1 }) - .add(a.group)), - (k = { - stroke: d[2], - 'stroke-width': b.lineWidth, - fill: (a.fillGraph && a.color) || 'none', - }), - d[3] - ? (k.dashstyle = d[3]) - : 'square' !== b.linecap && - (k['stroke-linecap'] = k['stroke-linejoin'] = 'round'), - (k = a[g].attr(k).shadow(2 > e && b.shadow))); - k && ((k.startX = c.xMap), (k.isArea = c.isArea)); - }); - }, - applyZones: function() { - var a = this, - b = this.chart, - c = b.renderer, - d = this.zones, - e, - k, - h = this.clips || [], - f, - m = this.graph, - l = this.area, - t = Math.max(b.chartWidth, b.chartHeight), - n = this[(this.zoneAxis || 'y') + 'Axis'], - x, - p, - z = b.inverted, - C, - r, - w, - B, - K = !1; - d.length && - (m || l) && - n && - void 0 !== n.min && - ((p = n.reversed), - (C = n.horiz), - m && m.hide(), - l && l.hide(), - (x = n.getExtremes()), - u(d, function(d, g) { - e = p ? (C ? b.plotWidth : 0) : C ? 0 : n.toPixels(x.min); - e = Math.min(Math.max(I(k, e), 0), t); - k = Math.min( - Math.max(Math.round(n.toPixels(I(d.value, x.max), !0)), 0), - t, - ); - K && (e = k = n.toPixels(x.max)); - r = Math.abs(e - k); - w = Math.min(e, k); - B = Math.max(e, k); - n.isXAxis - ? ((f = { x: z ? B : w, y: 0, width: r, height: t }), - C || (f.x = b.plotHeight - f.x)) - : ((f = { x: 0, y: z ? B : w, width: t, height: r }), - C && (f.y = b.plotWidth - f.y)); - z && - c.isVML && - (f = n.isXAxis - ? { x: 0, y: p ? w : B, height: f.width, width: b.chartWidth } - : { - x: f.y - b.plotLeft - b.spacingBox.x, - y: 0, - width: f.height, - height: b.chartHeight, - }); - h[g] - ? h[g].animate(f) - : ((h[g] = c.clipRect(f)), - m && a['zone-graph-' + g].clip(h[g]), - l && a['zone-area-' + g].clip(h[g])); - K = d.value > x.max; - }), - (this.clips = h)); - }, - invertGroups: function(a) { - function b() { - u(['group', 'markerGroup'], function(b) { - c[b] && - (d.renderer.isVML && - c[b].attr({ width: c.yAxis.len, height: c.xAxis.len }), - (c[b].width = c.yAxis.len), - (c[b].height = c.xAxis.len), - c[b].invert(a)); - }); - } - var c = this, - d = c.chart, - e; - c.xAxis && - ((e = E(d, 'resize', b)), - E(c, 'destroy', e), - b(a), - (c.invertGroups = b)); - }, - plotGroup: function(a, b, c, d, e) { - var g = this[a], - k = !g; - k && - (this[a] = g = this.chart.renderer - .g() - .attr({ zIndex: d || 0.1 }) - .add(e)); - g.addClass( - 'highcharts-' + - b + - ' highcharts-series-' + - this.index + - ' highcharts-' + - this.type + - '-series ' + - (w(this.colorIndex) - ? 'highcharts-color-' + this.colorIndex + ' ' - : '') + - (this.options.className || '') + - (g.hasClass('highcharts-tracker') ? ' highcharts-tracker' : ''), - !0, - ); - g.attr({ visibility: c })[k ? 'attr' : 'animate'](this.getPlotBox()); - return g; - }, - getPlotBox: function() { - var a = this.chart, - b = this.xAxis, - c = this.yAxis; - a.inverted && ((b = c), (c = this.xAxis)); - return { - translateX: b ? b.left : a.plotLeft, - translateY: c ? c.top : a.plotTop, - scaleX: 1, - scaleY: 1, - }; - }, - render: function() { - var a = this, - b = a.chart, - c, - d = a.options, - e = !!a.animate && b.renderer.isSVG && D(d.animation).duration, - k = a.visible ? 'inherit' : 'hidden', - h = d.zIndex, - f = a.hasRendered, - m = b.seriesGroup, - l = b.inverted; - c = a.plotGroup('group', 'series', k, h, m); - a.markerGroup = a.plotGroup('markerGroup', 'markers', k, h, m); - e && a.animate(!0); - c.inverted = a.isCartesian ? l : !1; - a.drawGraph && (a.drawGraph(), a.applyZones()); - a.drawDataLabels && a.drawDataLabels(); - a.visible && a.drawPoints(); - a.drawTracker && - !1 !== a.options.enableMouseTracking && - a.drawTracker(); - a.invertGroups(l); - !1 === d.clip || a.sharedClipKey || f || c.clip(b.clipRect); - e && a.animate(); - f || - (a.animationTimeout = C(function() { - a.afterAnimate(); - }, e)); - a.isDirty = !1; - a.hasRendered = !0; - }, - redraw: function() { - var a = this.chart, - b = this.isDirty || this.isDirtyData, - c = this.group, - d = this.xAxis, - e = this.yAxis; - c && - (a.inverted && c.attr({ width: a.plotWidth, height: a.plotHeight }), - c.animate({ - translateX: I(d && d.left, a.plotLeft), - translateY: I(e && e.top, a.plotTop), - })); - this.translate(); - this.render(); - b && delete this.kdTree; - }, - kdAxisArray: ['clientX', 'plotY'], - searchPoint: function(a, b) { - var c = this.xAxis, - d = this.yAxis, - e = this.chart.inverted; - return this.searchKDTree( - { - clientX: e ? c.len - a.chartY + c.pos : a.chartX - c.pos, - plotY: e ? d.len - a.chartX + d.pos : a.chartY - d.pos, - }, - b, - ); - }, - buildKDTree: function() { - function a(c, d, e) { - var g, k; - if ((k = c && c.length)) - return ( - (g = b.kdAxisArray[d % e]), - c.sort(function(a, b) { - return a[g] - b[g]; - }), - (k = Math.floor(k / 2)), - { - point: c[k], - left: a(c.slice(0, k), d + 1, e), - right: a(c.slice(k + 1), d + 1, e), - } - ); - } - this.buildingKdTree = !0; - var b = this, - c = -1 < b.options.findNearestPointBy.indexOf('y') ? 2 : 1; - delete b.kdTree; - C( - function() { - b.kdTree = a(b.getValidPoints(null, !b.directTouch), c, c); - b.buildingKdTree = !1; - }, - b.options.kdNow ? 0 : 1, - ); - }, - searchKDTree: function(a, b) { - function c(a, b, g, f) { - var m = b.point, - l = d.kdAxisArray[g % f], - q, - t, - n = m; - t = w(a[e]) && w(m[e]) ? Math.pow(a[e] - m[e], 2) : null; - q = w(a[k]) && w(m[k]) ? Math.pow(a[k] - m[k], 2) : null; - q = (t || 0) + (q || 0); - m.dist = w(q) ? Math.sqrt(q) : Number.MAX_VALUE; - m.distX = w(t) ? Math.sqrt(t) : Number.MAX_VALUE; - l = a[l] - m[l]; - q = 0 > l ? 'left' : 'right'; - t = 0 > l ? 'right' : 'left'; - b[q] && ((q = c(a, b[q], g + 1, f)), (n = q[h] < n[h] ? q : m)); - b[t] && - Math.sqrt(l * l) < n[h] && - ((a = c(a, b[t], g + 1, f)), (n = a[h] < n[h] ? a : n)); - return n; - } - var d = this, - e = this.kdAxisArray[0], - k = this.kdAxisArray[1], - h = b ? 'distX' : 'dist'; - b = -1 < d.options.findNearestPointBy.indexOf('y') ? 2 : 1; - this.kdTree || this.buildingKdTree || this.buildKDTree(); - if (this.kdTree) return c(a, this.kdTree, b, b); - }, - }, - ); - })(M); - (function(a) { - var E = a.Axis, - D = a.Chart, - H = a.correctFloat, - p = a.defined, - f = a.destroyObjectProperties, - l = a.each, - r = a.format, - n = a.objectEach, - w = a.pick, - u = a.Series; - a.StackItem = function(a, h, f, d, c) { - var b = a.chart.inverted; - this.axis = a; - this.isNegative = f; - this.options = h; - this.x = d; - this.total = null; - this.points = {}; - this.stack = c; - this.rightCliff = this.leftCliff = 0; - this.alignOptions = { - align: h.align || (b ? (f ? 'left' : 'right') : 'center'), - verticalAlign: h.verticalAlign || (b ? 'middle' : f ? 'bottom' : 'top'), - y: w(h.y, b ? 4 : f ? 14 : -6), - x: w(h.x, b ? (f ? -6 : 6) : 0), - }; - this.textAlign = h.textAlign || (b ? (f ? 'right' : 'left') : 'center'); - }; - a.StackItem.prototype = { - destroy: function() { - f(this, this.axis); - }, - render: function(a) { - var e = this.options, - f = e.format, - f = f ? r(f, this) : e.formatter.call(this); - this.label - ? this.label.attr({ text: f, visibility: 'hidden' }) - : (this.label = this.axis.chart.renderer - .text(f, null, null, e.useHTML) - .css(e.style) - .attr({ - align: this.textAlign, - rotation: e.rotation, - visibility: 'hidden', - }) - .add(a)); - }, - setOffset: function(a, h) { - var e = this.axis, - d = e.chart, - c = e.translate(e.usePercentage ? 100 : this.total, 0, 0, 0, 1), - e = e.translate(0), - e = Math.abs(c - e); - a = d.xAxis[0].translate(this.x) + a; - c = this.getStackBox(d, this, a, c, h, e); - if ((h = this.label)) - h.align(this.alignOptions, null, c), - (c = h.alignAttr), - h[ - !1 === this.options.crop || d.isInsidePlot(c.x, c.y) - ? 'show' - : 'hide' - ](!0); - }, - getStackBox: function(a, h, f, d, c, b) { - var e = h.axis.reversed, - l = a.inverted; - a = a.plotHeight; - h = (h.isNegative && !e) || (!h.isNegative && e); - return { - x: l ? (h ? d : d - b) : f, - y: l ? a - f - c : h ? a - d - b : a - d, - width: l ? b : c, - height: l ? c : b, - }; - }, - }; - D.prototype.getStacks = function() { - var a = this; - l(a.yAxis, function(a) { - a.stacks && a.hasVisibleSeries && (a.oldStacks = a.stacks); - }); - l(a.series, function(e) { - !e.options.stacking || - (!0 !== e.visible && !1 !== a.options.chart.ignoreHiddenSeries) || - (e.stackKey = e.type + w(e.options.stack, '')); - }); - }; - E.prototype.buildStacks = function() { - var a = this.series, - h = w(this.options.reversedStacks, !0), - f = a.length, - d; - if (!this.isXAxis) { - this.usePercentage = !1; - for (d = f; d--; ) a[h ? d : f - d - 1].setStackedPoints(); - for (d = 0; d < f; d++) a[d].modifyStacks(); - } - }; - E.prototype.renderStackTotals = function() { - var a = this.chart, - h = a.renderer, - f = this.stacks, - d = this.stackTotalGroup; - d || - (this.stackTotalGroup = d = h - .g('stack-labels') - .attr({ visibility: 'visible', zIndex: 6 }) - .add()); - d.translate(a.plotLeft, a.plotTop); - n(f, function(a) { - n(a, function(a) { - a.render(d); - }); - }); - }; - E.prototype.resetStacks = function() { - var a = this, - h = a.stacks; - a.isXAxis || - n(h, function(e) { - n(e, function(d, c) { - d.touched < a.stacksTouched - ? (d.destroy(), delete e[c]) - : ((d.total = null), (d.cumulative = null)); - }); - }); - }; - E.prototype.cleanStacks = function() { - var a; - this.isXAxis || - (this.oldStacks && (a = this.stacks = this.oldStacks), - n(a, function(a) { - n(a, function(a) { - a.cumulative = a.total; - }); - })); - }; - u.prototype.setStackedPoints = function() { - if ( - this.options.stacking && - (!0 === this.visible || - !1 === this.chart.options.chart.ignoreHiddenSeries) - ) { - var e = this.processedXData, - h = this.processedYData, - f = [], - d = h.length, - c = this.options, - b = c.threshold, - k = w(c.startFromThreshold && b, 0), - l = c.stack, - c = c.stacking, - n = this.stackKey, - r = '-' + n, - x = this.negStacks, - u = this.yAxis, - t = u.stacks, - C = u.oldStacks, - N, - q, - A, - F, - G, - g, - v; - u.stacksTouched += 1; - for (G = 0; G < d; G++) - (g = e[G]), - (v = h[G]), - (N = this.getStackIndicator(N, g, this.index)), - (F = N.key), - (A = (q = x && v < (k ? 0 : b)) ? r : n), - t[A] || (t[A] = {}), - t[A][g] || - (C[A] && C[A][g] - ? ((t[A][g] = C[A][g]), (t[A][g].total = null)) - : (t[A][g] = new a.StackItem( - u, - u.options.stackLabels, - q, - g, - l, - ))), - (A = t[A][g]), - null !== v - ? ((A.points[F] = A.points[this.index] = [w(A.cumulative, k)]), - p(A.cumulative) || (A.base = F), - (A.touched = u.stacksTouched), - 0 < N.index && - !1 === this.singleStacks && - (A.points[F][0] = A.points[this.index + ',' + g + ',0'][0])) - : (A.points[F] = A.points[this.index] = null), - 'percent' === c - ? ((q = q ? n : r), - x && t[q] && t[q][g] - ? ((q = t[q][g]), - (A.total = q.total = - Math.max(q.total, A.total) + Math.abs(v) || 0)) - : (A.total = H(A.total + (Math.abs(v) || 0)))) - : (A.total = H(A.total + (v || 0))), - (A.cumulative = w(A.cumulative, k) + (v || 0)), - null !== v && - (A.points[F].push(A.cumulative), (f[G] = A.cumulative)); - 'percent' === c && (u.usePercentage = !0); - this.stackedYData = f; - u.oldStacks = {}; - } - }; - u.prototype.modifyStacks = function() { - var a = this, - h = a.stackKey, - f = a.yAxis.stacks, - d = a.processedXData, - c, - b = a.options.stacking; - a[b + 'Stacker'] && - l([h, '-' + h], function(e) { - for (var k = d.length, h, l; k--; ) - if ( - ((h = d[k]), - (c = a.getStackIndicator(c, h, a.index, e)), - (l = (h = f[e] && f[e][h]) && h.points[c.key])) - ) - a[b + 'Stacker'](l, h, k); - }); - }; - u.prototype.percentStacker = function(a, h, f) { - h = h.total ? 100 / h.total : 0; - a[0] = H(a[0] * h); - a[1] = H(a[1] * h); - this.stackedYData[f] = a[1]; - }; - u.prototype.getStackIndicator = function(a, h, f, d) { - !p(a) || a.x !== h || (d && a.key !== d) - ? (a = { x: h, index: 0, key: d }) - : a.index++; - a.key = [f, h, a.index].join(); - return a; - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.animate, - H = a.Axis, - p = a.createElement, - f = a.css, - l = a.defined, - r = a.each, - n = a.erase, - w = a.extend, - u = a.fireEvent, - e = a.inArray, - h = a.isNumber, - m = a.isObject, - d = a.isArray, - c = a.merge, - b = a.objectEach, - k = a.pick, - z = a.Point, - B = a.Series, - I = a.seriesTypes, - x = a.setAnimation, - K = a.splat; - w(a.Chart.prototype, { - addSeries: function(a, b, c) { - var d, - e = this; - a && - ((b = k(b, !0)), - u(e, 'addSeries', { options: a }, function() { - d = e.initSeries(a); - e.isDirtyLegend = !0; - e.linkSeries(); - b && e.redraw(c); - })); - return d; - }, - addAxis: function(a, b, d, e) { - var h = b ? 'xAxis' : 'yAxis', - f = this.options; - a = c(a, { index: this[h].length, isX: b }); - b = new H(this, a); - f[h] = K(f[h] || {}); - f[h].push(a); - k(d, !0) && this.redraw(e); - return b; - }, - showLoading: function(a) { - var b = this, - c = b.options, - d = b.loadingDiv, - e = c.loading, - k = function() { - d && - f(d, { - left: b.plotLeft + 'px', - top: b.plotTop + 'px', - width: b.plotWidth + 'px', - height: b.plotHeight + 'px', - }); - }; - d || - ((b.loadingDiv = d = p( - 'div', - { className: 'highcharts-loading highcharts-loading-hidden' }, - null, - b.container, - )), - (b.loadingSpan = p( - 'span', - { className: 'highcharts-loading-inner' }, - null, - d, - )), - E(b, 'redraw', k)); - d.className = 'highcharts-loading'; - b.loadingSpan.innerHTML = a || c.lang.loading; - f(d, w(e.style, { zIndex: 10 })); - f(b.loadingSpan, e.labelStyle); - b.loadingShown || - (f(d, { opacity: 0, display: '' }), - D( - d, - { opacity: e.style.opacity || 0.5 }, - { duration: e.showDuration || 0 }, - )); - b.loadingShown = !0; - k(); - }, - hideLoading: function() { - var a = this.options, - b = this.loadingDiv; - b && - ((b.className = 'highcharts-loading highcharts-loading-hidden'), - D( - b, - { opacity: 0 }, - { - duration: a.loading.hideDuration || 100, - complete: function() { - f(b, { display: 'none' }); - }, - }, - )); - this.loadingShown = !1; - }, - propsRequireDirtyBox: 'backgroundColor borderColor borderWidth margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow'.split( - ' ', - ), - propsRequireUpdateSeries: 'chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions tooltip'.split( - ' ', - ), - update: function(a, d, f) { - var m = this, - n = { - credits: 'addCredits', - title: 'setTitle', - subtitle: 'setSubtitle', - }, - t = a.chart, - x, - g, - p = []; - if (t) { - c(!0, m.options.chart, t); - 'className' in t && m.setClassName(t.className); - if ('inverted' in t || 'polar' in t) m.propFromSeries(), (x = !0); - 'alignTicks' in t && (x = !0); - b(t, function(a, b) { - -1 !== e('chart.' + b, m.propsRequireUpdateSeries) && (g = !0); - -1 !== e(b, m.propsRequireDirtyBox) && (m.isDirtyBox = !0); - }); - 'style' in t && m.renderer.setStyle(t.style); - } - a.colors && (this.options.colors = a.colors); - a.plotOptions && c(!0, this.options.plotOptions, a.plotOptions); - b(a, function(a, b) { - if (m[b] && 'function' === typeof m[b].update) m[b].update(a, !1); - else if ('function' === typeof m[n[b]]) m[n[b]](a); - 'chart' !== b && -1 !== e(b, m.propsRequireUpdateSeries) && (g = !0); - }); - r('xAxis yAxis zAxis series colorAxis pane'.split(' '), function(b) { - a[b] && - (r(K(a[b]), function(a, c) { - (c = (l(a.id) && m.get(a.id)) || m[b][c]) && - c.coll === b && - (c.update(a, !1), f && (c.touched = !0)); - if (!c && f) - if ('series' === b) m.addSeries(a, !1).touched = !0; - else if ('xAxis' === b || 'yAxis' === b) - m.addAxis(a, 'xAxis' === b, !1).touched = !0; - }), - f && - r(m[b], function(a) { - a.touched ? delete a.touched : p.push(a); - })); - }); - r(p, function(a) { - a.remove(!1); - }); - x && - r(m.axes, function(a) { - a.update({}, !1); - }); - g && - r(m.series, function(a) { - a.update({}, !1); - }); - a.loading && c(!0, m.options.loading, a.loading); - x = t && t.width; - t = t && t.height; - (h(x) && x !== m.chartWidth) || (h(t) && t !== m.chartHeight) - ? m.setSize(x, t) - : k(d, !0) && m.redraw(); - }, - setSubtitle: function(a) { - this.setTitle(void 0, a); - }, - }); - w(z.prototype, { - update: function(a, b, c, d) { - function e() { - h.applyOptions(a); - null === h.y && g && (h.graphic = g.destroy()); - m(a, !0) && - (g && - g.element && - a && - a.marker && - void 0 !== a.marker.symbol && - (h.graphic = g.destroy()), - a && - a.dataLabels && - h.dataLabel && - (h.dataLabel = h.dataLabel.destroy()), - h.connector && (h.connector = h.connector.destroy())); - l = h.index; - f.updateParallelArrays(h, l); - t.data[l] = m(t.data[l], !0) || m(a, !0) ? h.options : a; - f.isDirty = f.isDirtyData = !0; - !f.fixedBox && f.hasCartesianSeries && (n.isDirtyBox = !0); - 'point' === t.legendType && (n.isDirtyLegend = !0); - b && n.redraw(c); - } - var h = this, - f = h.series, - g = h.graphic, - l, - n = f.chart, - t = f.options; - b = k(b, !0); - !1 === d ? e() : h.firePointEvent('update', { options: a }, e); - }, - remove: function(a, b) { - this.series.removePoint(e(this, this.series.data), a, b); - }, - }); - w(B.prototype, { - addPoint: function(a, b, c, d) { - var e = this.options, - h = this.data, - f = this.chart, - g = this.xAxis, - g = g && g.hasNames && g.names, - l = e.data, - m, - n, - t = this.xData, - q, - x; - b = k(b, !0); - m = { series: this }; - this.pointClass.prototype.applyOptions.apply(m, [a]); - x = m.x; - q = t.length; - if (this.requireSorting && x < t[q - 1]) - for (n = !0; q && t[q - 1] > x; ) q--; - this.updateParallelArrays(m, 'splice', q, 0, 0); - this.updateParallelArrays(m, q); - g && m.name && (g[x] = m.name); - l.splice(q, 0, a); - n && (this.data.splice(q, 0, null), this.processData()); - 'point' === e.legendType && this.generatePoints(); - c && - (h[0] && h[0].remove - ? h[0].remove(!1) - : (h.shift(), this.updateParallelArrays(m, 'shift'), l.shift())); - this.isDirtyData = this.isDirty = !0; - b && f.redraw(d); - }, - removePoint: function(a, b, c) { - var d = this, - e = d.data, - h = e[a], - f = d.points, - g = d.chart, - l = function() { - f && f.length === e.length && f.splice(a, 1); - e.splice(a, 1); - d.options.data.splice(a, 1); - d.updateParallelArrays(h || { series: d }, 'splice', a, 1); - h && h.destroy(); - d.isDirty = !0; - d.isDirtyData = !0; - b && g.redraw(); - }; - x(c, g); - b = k(b, !0); - h ? h.firePointEvent('remove', null, l) : l(); - }, - remove: function(a, b, c) { - function d() { - e.destroy(); - h.isDirtyLegend = h.isDirtyBox = !0; - h.linkSeries(); - k(a, !0) && h.redraw(b); - } - var e = this, - h = e.chart; - !1 !== c ? u(e, 'remove', null, d) : d(); - }, - update: function(a, b) { - var d = this, - e = d.chart, - h = d.userOptions, - f = d.oldType || d.type, - l = a.type || h.type || e.options.chart.type, - g = I[f].prototype, - m, - n = ['group', 'markerGroup', 'dataLabelsGroup'], - t = ['navigatorSeries', 'baseSeries'], - x = d.finishedAnimating && { animation: !1 }; - if (Object.keys && 'data' === Object.keys(a).toString()) - return this.setData(a.data, b); - t = n.concat(t); - r(t, function(a) { - t[a] = d[a]; - delete d[a]; - }); - a = c( - h, - x, - { index: d.index, pointStart: d.xData[0] }, - { data: d.options.data }, - a, - ); - d.remove(!1, null, !1); - for (m in g) d[m] = void 0; - w(d, I[l || f].prototype); - r(t, function(a) { - d[a] = t[a]; - }); - d.init(e, a); - a.zIndex !== h.zIndex && - r(n, function(b) { - d[b] && d[b].attr({ zIndex: a.zIndex }); - }); - d.oldType = f; - e.linkSeries(); - k(b, !0) && e.redraw(!1); - }, - }); - w(H.prototype, { - update: function(a, b) { - var d = this.chart; - a = d.options[this.coll][this.options.index] = c(this.userOptions, a); - this.destroy(!0); - this.init(d, w(a, { events: void 0 })); - d.isDirtyBox = !0; - k(b, !0) && d.redraw(); - }, - remove: function(a) { - for ( - var b = this.chart, c = this.coll, e = this.series, h = e.length; - h--; - - ) - e[h] && e[h].remove(!1); - n(b.axes, this); - n(b[c], this); - d(b.options[c]) - ? b.options[c].splice(this.options.index, 1) - : delete b.options[c]; - r(b[c], function(a, b) { - a.options.index = b; - }); - this.destroy(); - b.isDirtyBox = !0; - k(a, !0) && b.redraw(); - }, - setTitle: function(a, b) { - this.update({ title: a }, b); - }, - setCategories: function(a, b) { - this.update({ categories: a }, b); - }, - }); - })(M); - (function(a) { - var E = a.color, - D = a.each, - H = a.map, - p = a.pick, - f = a.Series, - l = a.seriesType; - l( - 'area', - 'line', - { softThreshold: !1, threshold: 0 }, - { - singleStacks: !1, - getStackPoints: function(f) { - var l = [], - r = [], - u = this.xAxis, - e = this.yAxis, - h = e.stacks[this.stackKey], - m = {}, - d = this.index, - c = e.series, - b = c.length, - k, - z = p(e.options.reversedStacks, !0) ? 1 : -1, - B; - f = f || this.points; - if (this.options.stacking) { - for (B = 0; B < f.length; B++) - (f[B].leftNull = f[B].rightNull = null), (m[f[B].x] = f[B]); - a.objectEach(h, function(a, b) { - null !== a.total && r.push(b); - }); - r.sort(function(a, b) { - return a - b; - }); - k = H(c, function() { - return this.visible; - }); - D(r, function(a, c) { - var f = 0, - n, - x; - if (m[a] && !m[a].isNull) - l.push(m[a]), - D([-1, 1], function(e) { - var f = 1 === e ? 'rightNull' : 'leftNull', - l = 0, - t = h[r[c + e]]; - if (t) - for (B = d; 0 <= B && B < b; ) - (n = t.points[B]), - n || - (B === d - ? (m[a][f] = !0) - : k[B] && - (x = h[a].points[B]) && - (l -= x[1] - x[0])), - (B += z); - m[a][1 === e ? 'rightCliff' : 'leftCliff'] = l; - }); - else { - for (B = d; 0 <= B && B < b; ) { - if ((n = h[a].points[B])) { - f = n[1]; - break; - } - B += z; - } - f = e.translate(f, 0, 1, 0, 1); - l.push({ - isNull: !0, - plotX: u.translate(a, 0, 0, 0, 1), - x: a, - plotY: f, - yBottom: f, - }); - } - }); - } - return l; - }, - getGraphPath: function(a) { - var l = f.prototype.getGraphPath, - r = this.options, - u = r.stacking, - e = this.yAxis, - h, - m, - d = [], - c = [], - b = this.index, - k, - z = e.stacks[this.stackKey], - B = r.threshold, - I = e.getThreshold(r.threshold), - x, - r = r.connectNulls || 'percent' === u, - K = function(h, f, l) { - var m = a[h]; - h = u && z[m.x].points[b]; - var n = m[l + 'Null'] || 0; - l = m[l + 'Cliff'] || 0; - var x, - t, - m = !0; - l || n - ? ((x = (n ? h[0] : h[1]) + l), (t = h[0] + l), (m = !!n)) - : !u && a[f] && a[f].isNull && (x = t = B); - void 0 !== x && - (c.push({ - plotX: k, - plotY: null === x ? I : e.getThreshold(x), - isNull: m, - isCliff: !0, - }), - d.push({ - plotX: k, - plotY: null === t ? I : e.getThreshold(t), - doCurve: !1, - })); - }; - a = a || this.points; - u && (a = this.getStackPoints(a)); - for (h = 0; h < a.length; h++) - if ( - ((m = a[h].isNull), - (k = p(a[h].rectPlotX, a[h].plotX)), - (x = p(a[h].yBottom, I)), - !m || r) - ) - r || K(h, h - 1, 'left'), - (m && !u && r) || - (c.push(a[h]), d.push({ x: h, plotX: k, plotY: x })), - r || K(h, h + 1, 'right'); - h = l.call(this, c, !0, !0); - d.reversed = !0; - m = l.call(this, d, !0, !0); - m.length && (m[0] = 'L'); - m = h.concat(m); - l = l.call(this, c, !1, r); - m.xMap = h.xMap; - this.areaPath = m; - return l; - }, - drawGraph: function() { - this.areaPath = []; - f.prototype.drawGraph.apply(this); - var a = this, - l = this.areaPath, - w = this.options, - u = [['area', 'highcharts-area', this.color, w.fillColor]]; - D(this.zones, function(e, h) { - u.push([ - 'zone-area-' + h, - 'highcharts-area highcharts-zone-area-' + h + ' ' + e.className, - e.color || a.color, - e.fillColor || w.fillColor, - ]); - }); - D(u, function(e) { - var h = e[0], - f = a[h]; - f - ? ((f.endX = a.preventGraphAnimation ? null : l.xMap), - f.animate({ d: l })) - : ((f = a[h] = a.chart.renderer - .path(l) - .addClass(e[1]) - .attr({ - fill: p( - e[3], - E(e[2]) - .setOpacity(p(w.fillOpacity, 0.75)) - .get(), - ), - zIndex: 0, - }) - .add(a.group)), - (f.isArea = !0)); - f.startX = l.xMap; - f.shiftUnit = w.step ? 2 : 1; - }); - }, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - }, - ); - })(M); - (function(a) { - var E = a.pick; - a = a.seriesType; - a( - 'spline', - 'line', - {}, - { - getPointSpline: function(a, H, p) { - var f = H.plotX, - l = H.plotY, - r = a[p - 1]; - p = a[p + 1]; - var n, w, u, e; - if ( - r && - !r.isNull && - !1 !== r.doCurve && - !H.isCliff && - p && - !p.isNull && - !1 !== p.doCurve && - !H.isCliff - ) { - a = r.plotY; - u = p.plotX; - p = p.plotY; - var h = 0; - n = (1.5 * f + r.plotX) / 2.5; - w = (1.5 * l + a) / 2.5; - u = (1.5 * f + u) / 2.5; - e = (1.5 * l + p) / 2.5; - u !== n && (h = ((e - w) * (u - f)) / (u - n) + l - e); - w += h; - e += h; - w > a && w > l - ? ((w = Math.max(a, l)), (e = 2 * l - w)) - : w < a && w < l && ((w = Math.min(a, l)), (e = 2 * l - w)); - e > p && e > l - ? ((e = Math.max(p, l)), (w = 2 * l - e)) - : e < p && e < l && ((e = Math.min(p, l)), (w = 2 * l - e)); - H.rightContX = u; - H.rightContY = e; - } - H = [ - 'C', - E(r.rightContX, r.plotX), - E(r.rightContY, r.plotY), - E(n, f), - E(w, l), - f, - l, - ]; - r.rightContX = r.rightContY = null; - return H; - }, - }, - ); - })(M); - (function(a) { - var E = a.seriesTypes.area.prototype, - D = a.seriesType; - D('areaspline', 'spline', a.defaultPlotOptions.area, { - getStackPoints: E.getStackPoints, - getGraphPath: E.getGraphPath, - drawGraph: E.drawGraph, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - }); - })(M); - (function(a) { - var E = a.animObject, - D = a.color, - H = a.each, - p = a.extend, - f = a.isNumber, - l = a.merge, - r = a.pick, - n = a.Series, - w = a.seriesType, - u = a.svg; - w( - 'column', - 'line', - { - borderRadius: 0, - crisp: !0, - groupPadding: 0.2, - marker: null, - pointPadding: 0.1, - minPointLength: 0, - cropThreshold: 50, - pointRange: null, - states: { - hover: { halo: !1, brightness: 0.1 }, - select: { color: '#cccccc', borderColor: '#000000' }, - }, - dataLabels: { align: null, verticalAlign: null, y: null }, - softThreshold: !1, - startFromThreshold: !0, - stickyTracking: !1, - tooltip: { distance: 6 }, - threshold: 0, - borderColor: '#ffffff', - }, - { - cropShoulder: 0, - directTouch: !0, - trackerGroups: ['group', 'dataLabelsGroup'], - negStacks: !0, - init: function() { - n.prototype.init.apply(this, arguments); - var a = this, - h = a.chart; - h.hasRendered && - H(h.series, function(e) { - e.type === a.type && (e.isDirty = !0); - }); - }, - getColumnMetrics: function() { - var a = this, - h = a.options, - f = a.xAxis, - d = a.yAxis, - c = f.reversed, - b, - k = {}, - l = 0; - !1 === h.grouping - ? (l = 1) - : H(a.chart.series, function(c) { - var e = c.options, - h = c.yAxis, - f; - c.type !== a.type || - (!c.visible && a.chart.options.chart.ignoreHiddenSeries) || - d.len !== h.len || - d.pos !== h.pos || - (e.stacking - ? ((b = c.stackKey), - void 0 === k[b] && (k[b] = l++), - (f = k[b])) - : !1 !== e.grouping && (f = l++), - (c.columnIndex = f)); - }); - var n = Math.min( - Math.abs(f.transA) * - (f.ordinalSlope || - h.pointRange || - f.closestPointRange || - f.tickInterval || - 1), - f.len, - ), - p = n * h.groupPadding, - x = (n - 2 * p) / (l || 1), - h = Math.min( - h.maxPointWidth || f.len, - r(h.pointWidth, x * (1 - 2 * h.pointPadding)), - ); - a.columnMetrics = { - width: h, - offset: - (x - h) / 2 + - (p + ((a.columnIndex || 0) + (c ? 1 : 0)) * x - n / 2) * - (c ? -1 : 1), - }; - return a.columnMetrics; - }, - crispCol: function(a, h, f, d) { - var c = this.chart, - b = this.borderWidth, - e = -(b % 2 ? 0.5 : 0), - b = b % 2 ? 0.5 : 1; - c.inverted && c.renderer.isVML && (b += 1); - this.options.crisp && - ((f = Math.round(a + f) + e), (a = Math.round(a) + e), (f -= a)); - d = Math.round(h + d) + b; - e = 0.5 >= Math.abs(h) && 0.5 < d; - h = Math.round(h) + b; - d -= h; - e && d && (--h, (d += 1)); - return { x: a, y: h, width: f, height: d }; - }, - translate: function() { - var a = this, - h = a.chart, - f = a.options, - d = (a.dense = 2 > a.closestPointRange * a.xAxis.transA), - d = (a.borderWidth = r(f.borderWidth, d ? 0 : 1)), - c = a.yAxis, - b = f.threshold, - k = (a.translatedThreshold = c.getThreshold(b)), - l = r(f.minPointLength, 5), - p = a.getColumnMetrics(), - u = p.width, - x = (a.barW = Math.max(u, 1 + 2 * d)), - w = (a.pointXOffset = p.offset); - h.inverted && (k -= 0.5); - f.pointPadding && (x = Math.ceil(x)); - n.prototype.translate.apply(a); - H(a.points, function(d) { - var e = r(d.yBottom, k), - f = 999 + Math.abs(e), - f = Math.min(Math.max(-f, d.plotY), c.len + f), - m = d.plotX + w, - n = x, - t = Math.min(f, e), - p, - g = Math.max(f, e) - t; - l && - Math.abs(g) < l && - ((g = l), - (p = (!c.reversed && !d.negative) || (c.reversed && d.negative)), - d.y === b && a.dataMax <= b && c.min < b && (p = !p), - (t = Math.abs(t - k) > l ? e - l : k - (p ? l : 0))); - d.barX = m; - d.pointWidth = u; - d.tooltipPos = h.inverted - ? [c.len + c.pos - h.plotLeft - f, a.xAxis.len - m - n / 2, g] - : [m + n / 2, f + c.pos - h.plotTop, g]; - d.shapeType = 'rect'; - d.shapeArgs = a.crispCol.apply( - a, - d.isNull ? [m, k, n, 0] : [m, t, n, g], - ); - }); - }, - getSymbol: a.noop, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - drawGraph: function() { - this.group[this.dense ? 'addClass' : 'removeClass']( - 'highcharts-dense-data', - ); - }, - pointAttribs: function(a, f) { - var e = this.options, - d, - c = this.pointAttrToOptions || {}; - d = c.stroke || 'borderColor'; - var b = c['stroke-width'] || 'borderWidth', - k = (a && a.color) || this.color, - h = (a && a[d]) || e[d] || this.color || k, - n = (a && a[b]) || e[b] || this[b] || 0, - c = e.dashStyle; - a && - this.zones.length && - ((k = a.getZone()), - (k = a.options.color || (k && k.color) || this.color)); - f && - ((a = l( - e.states[f], - (a.options.states && a.options.states[f]) || {}, - )), - (f = a.brightness), - (k = - a.color || - (void 0 !== f && - D(k) - .brighten(a.brightness) - .get()) || - k), - (h = a[d] || h), - (n = a[b] || n), - (c = a.dashStyle || c)); - d = { fill: k, stroke: h, 'stroke-width': n }; - c && (d.dashstyle = c); - return d; - }, - drawPoints: function() { - var a = this, - h = this.chart, - m = a.options, - d = h.renderer, - c = m.animationLimit || 250, - b; - H(a.points, function(e) { - var k = e.graphic; - if (f(e.plotY) && null !== e.y) { - b = e.shapeArgs; - if (k) k[h.pointCount < c ? 'animate' : 'attr'](l(b)); - else e.graphic = k = d[e.shapeType](b).add(e.group || a.group); - m.borderRadius && k.attr({ r: m.borderRadius }); - k.attr(a.pointAttribs(e, e.selected && 'select')).shadow( - m.shadow, - null, - m.stacking && !m.borderRadius, - ); - k.addClass(e.getClassName(), !0); - } else k && (e.graphic = k.destroy()); - }); - }, - animate: function(a) { - var e = this, - f = this.yAxis, - d = e.options, - c = this.chart.inverted, - b = {}, - k = c ? 'translateX' : 'translateY', - l; - u && - (a - ? ((b.scaleY = 0.001), - (a = Math.min( - f.pos + f.len, - Math.max(f.pos, f.toPixels(d.threshold)), - )), - c ? (b.translateX = a - f.len) : (b.translateY = a), - e.group.attr(b)) - : ((l = e.group.attr(k)), - e.group.animate( - { scaleY: 1 }, - p(E(e.options.animation), { - step: function(a, c) { - b[k] = l + c.pos * (f.pos - l); - e.group.attr(b); - }, - }), - ), - (e.animate = null))); - }, - remove: function() { - var a = this, - f = a.chart; - f.hasRendered && - H(f.series, function(e) { - e.type === a.type && (e.isDirty = !0); - }); - n.prototype.remove.apply(a, arguments); - }, - }, - ); - })(M); - (function(a) { - a = a.seriesType; - a('bar', 'column', null, { inverted: !0 }); - })(M); - (function(a) { - var E = a.Series; - a = a.seriesType; - a( - 'scatter', - 'line', - { - lineWidth: 0, - findNearestPointBy: 'xy', - marker: { enabled: !0 }, - tooltip: { - headerFormat: - '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e \x3cspan style\x3d"font-size: 0.85em"\x3e {series.name}\x3c/span\x3e\x3cbr/\x3e', - pointFormat: - 'x: \x3cb\x3e{point.x}\x3c/b\x3e\x3cbr/\x3ey: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', - }, - }, - { - sorted: !1, - requireSorting: !1, - noSharedTooltip: !0, - trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], - takeOrdinalPosition: !1, - drawGraph: function() { - this.options.lineWidth && E.prototype.drawGraph.call(this); - }, - }, - ); - })(M); - (function(a) { - var E = a.deg2rad, - D = a.isNumber, - H = a.pick, - p = a.relativeLength; - a.CenteredSeriesMixin = { - getCenter: function() { - var a = this.options, - l = this.chart, - r = 2 * (a.slicedOffset || 0), - n = l.plotWidth - 2 * r, - l = l.plotHeight - 2 * r, - w = a.center, - w = [ - H(w[0], '50%'), - H(w[1], '50%'), - a.size || '100%', - a.innerSize || 0, - ], - u = Math.min(n, l), - e, - h; - for (e = 0; 4 > e; ++e) - (h = w[e]), - (a = 2 > e || (2 === e && /%$/.test(h))), - (w[e] = p(h, [n, l, u, w[2]][e]) + (a ? r : 0)); - w[3] > w[2] && (w[3] = w[2]); - return w; - }, - getStartAndEndRadians: function(a, l) { - a = D(a) ? a : 0; - l = D(l) && l > a && 360 > l - a ? l : a + 360; - return { start: E * (a + -90), end: E * (l + -90) }; - }, - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.CenteredSeriesMixin, - H = a.defined, - p = a.each, - f = a.extend, - l = D.getStartAndEndRadians, - r = a.inArray, - n = a.noop, - w = a.pick, - u = a.Point, - e = a.Series, - h = a.seriesType, - m = a.setAnimation; - h( - 'pie', - 'line', - { - center: [null, null], - clip: !1, - colorByPoint: !0, - dataLabels: { - distance: 30, - enabled: !0, - formatter: function() { - return this.point.isNull ? void 0 : this.point.name; - }, - x: 0, - }, - ignoreHiddenPoint: !0, - legendType: 'point', - marker: null, - size: null, - showInLegend: !1, - slicedOffset: 10, - stickyTracking: !1, - tooltip: { followPointer: !0 }, - borderColor: '#ffffff', - borderWidth: 1, - states: { hover: { brightness: 0.1, shadow: !1 } }, - }, - { - isCartesian: !1, - requireSorting: !1, - directTouch: !0, - noSharedTooltip: !0, - trackerGroups: ['group', 'dataLabelsGroup'], - axisTypes: [], - pointAttribs: a.seriesTypes.column.prototype.pointAttribs, - animate: function(a) { - var c = this, - b = c.points, - d = c.startAngleRad; - a || - (p(b, function(a) { - var b = a.graphic, - e = a.shapeArgs; - b && - (b.attr({ r: a.startR || c.center[3] / 2, start: d, end: d }), - b.animate( - { r: e.r, start: e.start, end: e.end }, - c.options.animation, - )); - }), - (c.animate = null)); - }, - updateTotals: function() { - var a, - c = 0, - b = this.points, - e = b.length, - f, - h = this.options.ignoreHiddenPoint; - for (a = 0; a < e; a++) - (f = b[a]), (c += h && !f.visible ? 0 : f.isNull ? 0 : f.y); - this.total = c; - for (a = 0; a < e; a++) - (f = b[a]), - (f.percentage = 0 < c && (f.visible || !h) ? (f.y / c) * 100 : 0), - (f.total = c); - }, - generatePoints: function() { - e.prototype.generatePoints.call(this); - this.updateTotals(); - }, - translate: function(a) { - this.generatePoints(); - var c = 0, - b = this.options, - d = b.slicedOffset, - e = d + (b.borderWidth || 0), - f, - h, - m, - n = l(b.startAngle, b.endAngle), - t = (this.startAngleRad = n.start), - n = (this.endAngleRad = n.end) - t, - p = this.points, - u, - q = b.dataLabels.distance, - b = b.ignoreHiddenPoint, - r, - F = p.length, - G; - a || (this.center = a = this.getCenter()); - this.getX = function(b, c, d) { - m = Math.asin( - Math.min((b - a[1]) / (a[2] / 2 + d.labelDistance), 1), - ); - return ( - a[0] + (c ? -1 : 1) * Math.cos(m) * (a[2] / 2 + d.labelDistance) - ); - }; - for (r = 0; r < F; r++) { - G = p[r]; - G.labelDistance = w( - G.options.dataLabels && G.options.dataLabels.distance, - q, - ); - this.maxLabelDistance = Math.max( - this.maxLabelDistance || 0, - G.labelDistance, - ); - f = t + c * n; - if (!b || G.visible) c += G.percentage / 100; - h = t + c * n; - G.shapeType = 'arc'; - G.shapeArgs = { - x: a[0], - y: a[1], - r: a[2] / 2, - innerR: a[3] / 2, - start: Math.round(1e3 * f) / 1e3, - end: Math.round(1e3 * h) / 1e3, - }; - m = (h + f) / 2; - m > 1.5 * Math.PI - ? (m -= 2 * Math.PI) - : m < -Math.PI / 2 && (m += 2 * Math.PI); - G.slicedTranslation = { - translateX: Math.round(Math.cos(m) * d), - translateY: Math.round(Math.sin(m) * d), - }; - h = (Math.cos(m) * a[2]) / 2; - u = (Math.sin(m) * a[2]) / 2; - G.tooltipPos = [a[0] + 0.7 * h, a[1] + 0.7 * u]; - G.half = m < -Math.PI / 2 || m > Math.PI / 2 ? 1 : 0; - G.angle = m; - f = Math.min(e, G.labelDistance / 5); - G.labelPos = [ - a[0] + h + Math.cos(m) * G.labelDistance, - a[1] + u + Math.sin(m) * G.labelDistance, - a[0] + h + Math.cos(m) * f, - a[1] + u + Math.sin(m) * f, - a[0] + h, - a[1] + u, - 0 > G.labelDistance ? 'center' : G.half ? 'right' : 'left', - m, - ]; - } - }, - drawGraph: null, - drawPoints: function() { - var a = this, - c = a.chart.renderer, - b, - e, - h, - l, - m = a.options.shadow; - m && !a.shadowGroup && (a.shadowGroup = c.g('shadow').add(a.group)); - p(a.points, function(d) { - e = d.graphic; - if (d.isNull) e && (d.graphic = e.destroy()); - else { - l = d.shapeArgs; - b = d.getTranslate(); - var k = d.shadowGroup; - m && !k && (k = d.shadowGroup = c.g('shadow').add(a.shadowGroup)); - k && k.attr(b); - h = a.pointAttribs(d, d.selected && 'select'); - e - ? e - .setRadialReference(a.center) - .attr(h) - .animate(f(l, b)) - : ((d.graphic = e = c[d.shapeType](l) - .setRadialReference(a.center) - .attr(b) - .add(a.group)), - d.visible || e.attr({ visibility: 'hidden' }), - e - .attr(h) - .attr({ 'stroke-linejoin': 'round' }) - .shadow(m, k)); - e.addClass(d.getClassName()); - } - }); - }, - searchPoint: n, - sortByAngle: function(a, c) { - a.sort(function(a, d) { - return void 0 !== a.angle && (d.angle - a.angle) * c; - }); - }, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - getCenter: D.getCenter, - getSymbol: n, - }, - { - init: function() { - u.prototype.init.apply(this, arguments); - var a = this, - c; - a.name = w(a.name, 'Slice'); - c = function(b) { - a.slice('select' === b.type); - }; - E(a, 'select', c); - E(a, 'unselect', c); - return a; - }, - isValid: function() { - return a.isNumber(this.y, !0) && 0 <= this.y; - }, - setVisible: function(a, c) { - var b = this, - d = b.series, - e = d.chart, - f = d.options.ignoreHiddenPoint; - c = w(c, f); - a !== b.visible && - ((b.visible = b.options.visible = a = - void 0 === a ? !b.visible : a), - (d.options.data[r(b, d.data)] = b.options), - p(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function( - c, - ) { - if (b[c]) b[c][a ? 'show' : 'hide'](!0); - }), - b.legendItem && e.legend.colorizeItem(b, a), - a || 'hover' !== b.state || b.setState(''), - f && (d.isDirty = !0), - c && e.redraw()); - }, - slice: function(a, c, b) { - var d = this.series; - m(b, d.chart); - w(c, !0); - this.sliced = this.options.sliced = H(a) ? a : !this.sliced; - d.options.data[r(this, d.data)] = this.options; - this.graphic.animate(this.getTranslate()); - this.shadowGroup && this.shadowGroup.animate(this.getTranslate()); - }, - getTranslate: function() { - return this.sliced - ? this.slicedTranslation - : { translateX: 0, translateY: 0 }; - }, - haloPath: function(a) { - var c = this.shapeArgs; - return this.sliced || !this.visible - ? [] - : this.series.chart.renderer.symbols.arc( - c.x, - c.y, - c.r + a, - c.r + a, - { innerR: this.shapeArgs.r - 1, start: c.start, end: c.end }, - ); - }, - }, - ); - })(M); - (function(a) { - var E = a.addEvent, - D = a.arrayMax, - H = a.defined, - p = a.each, - f = a.extend, - l = a.format, - r = a.map, - n = a.merge, - w = a.noop, - u = a.pick, - e = a.relativeLength, - h = a.Series, - m = a.seriesTypes, - d = a.stableSort; - a.distribute = function(a, b) { - function c(a, b) { - return a.target - b.target; - } - var e, - f = !0, - h = a, - l = [], - m; - m = 0; - for (e = a.length; e--; ) m += a[e].size; - if (m > b) { - d(a, function(a, b) { - return (b.rank || 0) - (a.rank || 0); - }); - for (m = e = 0; m <= b; ) (m += a[e].size), e++; - l = a.splice(e - 1, a.length); - } - d(a, c); - for ( - a = r(a, function(a) { - return { size: a.size, targets: [a.target], align: u(a.align, 0.5) }; - }); - f; - - ) { - for (e = a.length; e--; ) - (f = a[e]), - (m = - (Math.min.apply(0, f.targets) + Math.max.apply(0, f.targets)) / - 2), - (f.pos = Math.min(Math.max(0, m - f.size * f.align), b - f.size)); - e = a.length; - for (f = !1; e--; ) - 0 < e && - a[e - 1].pos + a[e - 1].size > a[e].pos && - ((a[e - 1].size += a[e].size), - (a[e - 1].targets = a[e - 1].targets.concat(a[e].targets)), - (a[e - 1].align = 0.5), - a[e - 1].pos + a[e - 1].size > b && - (a[e - 1].pos = b - a[e - 1].size), - a.splice(e, 1), - (f = !0)); - } - e = 0; - p(a, function(a) { - var b = 0; - p(a.targets, function() { - h[e].pos = a.pos + b; - b += h[e].size; - e++; - }); - }); - h.push.apply(h, l); - d(h, c); - }; - h.prototype.drawDataLabels = function() { - function c(a, b) { - var c = b.filter; - return c - ? ((b = c.operator), - (a = a[c.property]), - (c = c.value), - ('\x3e' === b && a > c) || - ('\x3c' === b && a < c) || - ('\x3e\x3d' === b && a >= c) || - ('\x3c\x3d' === b && a <= c) || - ('\x3d\x3d' === b && a == c) || - ('\x3d\x3d\x3d' === b && a === c) - ? !0 - : !1) - : !0; - } - var b = this, - d = b.options, - e = d.dataLabels, - f = b.points, - h, - m, - r = b.hasRendered || 0, - t, - w, - D = u(e.defer, !!d.animation), - q = b.chart.renderer; - if (e.enabled || b._hasPointLabels) - b.dlProcessOptions && b.dlProcessOptions(e), - (w = b.plotGroup( - 'dataLabelsGroup', - 'data-labels', - D && !r ? 'hidden' : 'visible', - e.zIndex || 6, - )), - D && - (w.attr({ opacity: +r }), - r || - E(b, 'afterAnimate', function() { - b.visible && w.show(!0); - w[d.animation ? 'animate' : 'attr']( - { opacity: 1 }, - { duration: 200 }, - ); - })), - (m = e), - p(f, function(f) { - var k, - p = f.dataLabel, - g, - x, - r = f.connector, - z = !p, - C; - h = f.dlOptions || (f.options && f.options.dataLabels); - (k = u(h && h.enabled, m.enabled) && !f.isNull) && - (k = !0 === c(f, h || e)); - k && - ((e = n(m, h)), - (g = f.getLabelConfig()), - (C = e[f.formatPrefix + 'Format'] || e.format), - (t = H(C) - ? l(C, g) - : (e[f.formatPrefix + 'Formatter'] || e.formatter).call(g, e)), - (C = e.style), - (g = e.rotation), - (C.color = u(e.color, C.color, b.color, '#000000')), - 'contrast' === C.color && - ((f.contrastColor = q.getContrast(f.color || b.color)), - (C.color = - e.inside || 0 > u(f.labelDistance, e.distance) || d.stacking - ? f.contrastColor - : '#000000')), - d.cursor && (C.cursor = d.cursor), - (x = { - fill: e.backgroundColor, - stroke: e.borderColor, - 'stroke-width': e.borderWidth, - r: e.borderRadius || 0, - rotation: g, - padding: e.padding, - zIndex: 1, - }), - a.objectEach(x, function(a, b) { - void 0 === a && delete x[b]; - })); - !p || (k && H(t)) - ? k && - H(t) && - (p - ? (x.text = t) - : ((p = f.dataLabel = g - ? q.text(t, 0, -9999).addClass('highcharts-data-label') - : q.label( - t, - 0, - -9999, - e.shape, - null, - null, - e.useHTML, - null, - 'data-label', - )), - p.addClass( - ' highcharts-data-label-color-' + - f.colorIndex + - ' ' + - (e.className || '') + - (e.useHTML ? 'highcharts-tracker' : ''), - )), - p.attr(x), - p.css(C).shadow(e.shadow), - p.added || p.add(w), - b.alignDataLabel(f, p, e, null, z)) - : ((f.dataLabel = p = p.destroy()), - r && (f.connector = r.destroy())); - }); - }; - h.prototype.alignDataLabel = function(a, b, d, e, h) { - var c = this.chart, - k = c.inverted, - l = u(a.dlBox && a.dlBox.centerX, a.plotX, -9999), - m = u(a.plotY, -9999), - n = b.getBBox(), - p, - q = d.rotation, - r = d.align, - w = - this.visible && - (a.series.forceDL || - c.isInsidePlot(l, Math.round(m), k) || - (e && c.isInsidePlot(l, k ? e.x + 1 : e.y + e.height - 1, k))), - z = 'justify' === u(d.overflow, 'justify'); - if ( - w && - ((p = d.style.fontSize), - (p = c.renderer.fontMetrics(p, b).b), - (e = f( - { - x: k ? this.yAxis.len - m : l, - y: Math.round(k ? this.xAxis.len - l : m), - width: 0, - height: 0, - }, - e, - )), - f(d, { width: n.width, height: n.height }), - q - ? ((z = !1), - (l = c.renderer.rotCorr(p, q)), - (l = { - x: e.x + d.x + e.width / 2 + l.x, - y: - e.y + - d.y + - { top: 0, middle: 0.5, bottom: 1 }[d.verticalAlign] * e.height, - }), - b[h ? 'attr' : 'animate'](l).attr({ align: r }), - (m = (q + 720) % 360), - (m = 180 < m && 360 > m), - 'left' === r - ? (l.y -= m ? n.height : 0) - : 'center' === r - ? ((l.x -= n.width / 2), (l.y -= n.height / 2)) - : 'right' === r && ((l.x -= n.width), (l.y -= m ? 0 : n.height))) - : (b.align(d, null, e), (l = b.alignAttr)), - z - ? (a.isLabelJustified = this.justifyDataLabel(b, d, l, n, e, h)) - : u(d.crop, !0) && - (w = - c.isInsidePlot(l.x, l.y) && - c.isInsidePlot(l.x + n.width, l.y + n.height)), - d.shape && !q) - ) - b[h ? 'attr' : 'animate']({ - anchorX: k ? c.plotWidth - a.plotY : a.plotX, - anchorY: k ? c.plotHeight - a.plotX : a.plotY, - }); - w || (b.attr({ y: -9999 }), (b.placed = !1)); - }; - h.prototype.justifyDataLabel = function(a, b, d, e, f, h) { - var c = this.chart, - k = b.align, - l = b.verticalAlign, - m, - n, - p = a.box ? 0 : a.padding || 0; - m = d.x + p; - 0 > m && ('right' === k ? (b.align = 'left') : (b.x = -m), (n = !0)); - m = d.x + e.width - p; - m > c.plotWidth && - ('left' === k ? (b.align = 'right') : (b.x = c.plotWidth - m), - (n = !0)); - m = d.y + p; - 0 > m && - ('bottom' === l ? (b.verticalAlign = 'top') : (b.y = -m), (n = !0)); - m = d.y + e.height - p; - m > c.plotHeight && - ('top' === l ? (b.verticalAlign = 'bottom') : (b.y = c.plotHeight - m), - (n = !0)); - n && ((a.placed = !h), a.align(b, null, f)); - return n; - }; - m.pie && - ((m.pie.prototype.drawDataLabels = function() { - var c = this, - b = c.data, - d, - e = c.chart, - f = c.options.dataLabels, - l = u(f.connectorPadding, 10), - m = u(f.connectorWidth, 1), - n = e.plotWidth, - t = e.plotHeight, - r, - w = c.center, - q = w[2] / 2, - A = w[1], - F, - G, - g, - v, - E = [[], []], - L, - P, - J, - M, - y = [0, 0, 0, 0]; - c.visible && - (f.enabled || c._hasPointLabels) && - (p(b, function(a) { - a.dataLabel && - a.visible && - a.dataLabel.shortened && - (a.dataLabel - .attr({ width: 'auto' }) - .css({ width: 'auto', textOverflow: 'clip' }), - (a.dataLabel.shortened = !1)); - }), - h.prototype.drawDataLabels.apply(c), - p(b, function(a) { - a.dataLabel && - a.visible && - (E[a.half].push(a), (a.dataLabel._pos = null)); - }), - p(E, function(b, h) { - var k, - m, - x = b.length, - r = [], - z; - if (x) - for ( - c.sortByAngle(b, h - 0.5), - 0 < c.maxLabelDistance && - ((k = Math.max(0, A - q - c.maxLabelDistance)), - (m = Math.min(A + q + c.maxLabelDistance, e.plotHeight)), - p(b, function(a) { - 0 < a.labelDistance && - a.dataLabel && - ((a.top = Math.max(0, A - q - a.labelDistance)), - (a.bottom = Math.min( - A + q + a.labelDistance, - e.plotHeight, - )), - (z = a.dataLabel.getBBox().height || 21), - (a.positionsIndex = - r.push({ - target: a.labelPos[1] - a.top + z / 2, - size: z, - rank: a.y, - }) - 1)); - }), - a.distribute(r, m + z - k)), - M = 0; - M < x; - M++ - ) - (d = b[M]), - (m = d.positionsIndex), - (g = d.labelPos), - (F = d.dataLabel), - (J = !1 === d.visible ? 'hidden' : 'inherit'), - (P = k = g[1]), - r && - H(r[m]) && - (void 0 === r[m].pos - ? (J = 'hidden') - : ((v = r[m].size), (P = d.top + r[m].pos))), - delete d.positionIndex, - (L = f.justify - ? w[0] + (h ? -1 : 1) * (q + d.labelDistance) - : c.getX(P < d.top + 2 || P > d.bottom - 2 ? k : P, h, d)), - (F._attr = { visibility: J, align: g[6] }), - (F._pos = { - x: L + f.x + ({ left: l, right: -l }[g[6]] || 0), - y: P + f.y - 10, - }), - (g.x = L), - (g.y = P), - u(f.crop, !0) && - ((G = F.getBBox().width), - (k = null), - L - G < l - ? ((k = Math.round(G - L + l)), - (y[3] = Math.max(k, y[3]))) - : L + G > n - l && - ((k = Math.round(L + G - n + l)), - (y[1] = Math.max(k, y[1]))), - 0 > P - v / 2 - ? (y[0] = Math.max(Math.round(-P + v / 2), y[0])) - : P + v / 2 > t && - (y[2] = Math.max(Math.round(P + v / 2 - t), y[2])), - (F.sideOverflow = k)); - }), - 0 === D(y) || this.verifyDataLabelOverflow(y)) && - (this.placeDataLabels(), - m && - p(this.points, function(a) { - var b; - r = a.connector; - if ( - (F = a.dataLabel) && - F._pos && - a.visible && - 0 < a.labelDistance - ) { - J = F._attr.visibility; - if ((b = !r)) - (a.connector = r = e.renderer - .path() - .addClass( - 'highcharts-data-label-connector highcharts-color-' + - a.colorIndex, - ) - .add(c.dataLabelsGroup)), - r.attr({ - 'stroke-width': m, - stroke: f.connectorColor || a.color || '#666666', - }); - r[b ? 'attr' : 'animate']({ d: c.connectorPath(a.labelPos) }); - r.attr('visibility', J); - } else r && (a.connector = r.destroy()); - })); - }), - (m.pie.prototype.connectorPath = function(a) { - var b = a.x, - c = a.y; - return u(this.options.dataLabels.softConnector, !0) - ? [ - 'M', - b + ('left' === a[6] ? 5 : -5), - c, - 'C', - b, - c, - 2 * a[2] - a[4], - 2 * a[3] - a[5], - a[2], - a[3], - 'L', - a[4], - a[5], - ] - : [ - 'M', - b + ('left' === a[6] ? 5 : -5), - c, - 'L', - a[2], - a[3], - 'L', - a[4], - a[5], - ]; - }), - (m.pie.prototype.placeDataLabels = function() { - p( - this.points, - function(a) { - var b = a.dataLabel; - b && - a.visible && - ((a = b._pos) - ? (b.sideOverflow && - ((b._attr.width = b.getBBox().width - b.sideOverflow), - b.css({ - width: b._attr.width + 'px', - textOverflow: 'ellipsis', - }), - (b.shortened = !0)), - b.attr(b._attr), - b[b.moved ? 'animate' : 'attr'](a), - (b.moved = !0)) - : b && b.attr({ y: -9999 })); - }, - this, - ); - }), - (m.pie.prototype.alignDataLabel = w), - (m.pie.prototype.verifyDataLabelOverflow = function(a) { - var b = this.center, - c = this.options, - d = c.center, - f = c.minSize || 80, - h, - l = null !== c.size; - l || - (null !== d[0] - ? (h = Math.max(b[2] - Math.max(a[1], a[3]), f)) - : ((h = Math.max(b[2] - a[1] - a[3], f)), - (b[0] += (a[3] - a[1]) / 2)), - null !== d[1] - ? (h = Math.max(Math.min(h, b[2] - Math.max(a[0], a[2])), f)) - : ((h = Math.max(Math.min(h, b[2] - a[0] - a[2]), f)), - (b[1] += (a[0] - a[2]) / 2)), - h < b[2] - ? ((b[2] = h), - (b[3] = Math.min(e(c.innerSize || 0, h), h)), - this.translate(b), - this.drawDataLabels && this.drawDataLabels()) - : (l = !0)); - return l; - })); - m.column && - (m.column.prototype.alignDataLabel = function(a, b, d, e, f) { - var c = this.chart.inverted, - k = a.series, - l = a.dlBox || a.shapeArgs, - m = u(a.below, a.plotY > u(this.translatedThreshold, k.yAxis.len)), - p = u(d.inside, !!this.options.stacking); - l && - ((e = n(l)), - 0 > e.y && ((e.height += e.y), (e.y = 0)), - (l = e.y + e.height - k.yAxis.len), - 0 < l && (e.height -= l), - c && - (e = { - x: k.yAxis.len - e.y - e.height, - y: k.xAxis.len - e.x - e.width, - width: e.height, - height: e.width, - }), - p || - (c - ? ((e.x += m ? 0 : e.width), (e.width = 0)) - : ((e.y += m ? e.height : 0), (e.height = 0)))); - d.align = u(d.align, !c || p ? 'center' : m ? 'right' : 'left'); - d.verticalAlign = u( - d.verticalAlign, - c || p ? 'middle' : m ? 'top' : 'bottom', - ); - h.prototype.alignDataLabel.call(this, a, b, d, e, f); - a.isLabelJustified && - a.contrastColor && - a.dataLabel.css({ color: a.contrastColor }); - }); - })(M); - (function(a) { - var E = a.Chart, - D = a.each, - H = a.objectEach, - p = a.pick; - a = a.addEvent; - a(E.prototype, 'render', function() { - var a = []; - D(this.labelCollectors || [], function(f) { - a = a.concat(f()); - }); - D(this.yAxis || [], function(f) { - f.options.stackLabels && - !f.options.stackLabels.allowOverlap && - H(f.stacks, function(f) { - H(f, function(f) { - a.push(f.label); - }); - }); - }); - D(this.series || [], function(f) { - var l = f.options.dataLabels, - n = f.dataLabelCollections || ['dataLabel']; - (l.enabled || f._hasPointLabels) && - !l.allowOverlap && - f.visible && - D(n, function(l) { - D(f.points, function(f) { - f[l] && - ((f[l].labelrank = p( - f.labelrank, - f.shapeArgs && f.shapeArgs.height, - )), - a.push(f[l])); - }); - }); - }); - this.hideOverlappingLabels(a); - }); - E.prototype.hideOverlappingLabels = function(a) { - var f = a.length, - p, - n, - w, - u, - e, - h, - m, - d, - c, - b = function(a, b, c, d, e, f, h, l) { - return !(e > a + c || e + h < a || f > b + d || f + l < b); - }; - for (n = 0; n < f; n++) - if ((p = a[n])) - (p.oldOpacity = p.opacity), - (p.newOpacity = 1), - p.width || - ((w = p.getBBox()), (p.width = w.width), (p.height = w.height)); - a.sort(function(a, b) { - return (b.labelrank || 0) - (a.labelrank || 0); - }); - for (n = 0; n < f; n++) - for (w = a[n], p = n + 1; p < f; ++p) - if ( - ((u = a[p]), - w && - u && - w !== u && - w.placed && - u.placed && - 0 !== w.newOpacity && - 0 !== u.newOpacity && - ((e = w.alignAttr), - (h = u.alignAttr), - (m = w.parentGroup), - (d = u.parentGroup), - (c = 2 * (w.box ? 0 : w.padding || 0)), - (e = b( - e.x + m.translateX, - e.y + m.translateY, - w.width - c, - w.height - c, - h.x + d.translateX, - h.y + d.translateY, - u.width - c, - u.height - c, - )))) - ) - (w.labelrank < u.labelrank ? w : u).newOpacity = 0; - D(a, function(a) { - var b, c; - a && - ((c = a.newOpacity), - a.oldOpacity !== c && - a.placed && - (c - ? a.show(!0) - : (b = function() { - a.hide(); - }), - (a.alignAttr.opacity = c), - a[a.isOld ? 'animate' : 'attr'](a.alignAttr, null, b)), - (a.isOld = !0)); - }); - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.Chart, - H = a.createElement, - p = a.css, - f = a.defaultOptions, - l = a.defaultPlotOptions, - r = a.each, - n = a.extend, - w = a.fireEvent, - u = a.hasTouch, - e = a.inArray, - h = a.isObject, - m = a.Legend, - d = a.merge, - c = a.pick, - b = a.Point, - k = a.Series, - z = a.seriesTypes, - B = a.svg, - I; - I = a.TrackerMixin = { - drawTrackerPoint: function() { - var a = this, - b = a.chart.pointer, - c = function(a) { - var c = b.getPointFromEvent(a); - void 0 !== c && ((b.isDirectTouch = !0), c.onMouseOver(a)); - }; - r(a.points, function(a) { - a.graphic && (a.graphic.element.point = a); - a.dataLabel && - (a.dataLabel.div - ? (a.dataLabel.div.point = a) - : (a.dataLabel.element.point = a)); - }); - a._hasTracking || - (r(a.trackerGroups, function(d) { - if (a[d]) { - a[d] - .addClass('highcharts-tracker') - .on('mouseover', c) - .on('mouseout', function(a) { - b.onTrackerMouseOut(a); - }); - if (u) a[d].on('touchstart', c); - a.options.cursor && a[d].css(p).css({ cursor: a.options.cursor }); - } - }), - (a._hasTracking = !0)); - }, - drawTrackerGraph: function() { - var a = this, - b = a.options, - c = b.trackByArea, - d = [].concat(c ? a.areaPath : a.graphPath), - e = d.length, - f = a.chart, - h = f.pointer, - k = f.renderer, - l = f.options.tooltip.snap, - g = a.tracker, - m, - n = function() { - if (f.hoverSeries !== a) a.onMouseOver(); - }, - p = 'rgba(192,192,192,' + (B ? 0.0001 : 0.002) + ')'; - if (e && !c) - for (m = e + 1; m--; ) - 'M' === d[m] && d.splice(m + 1, 0, d[m + 1] - l, d[m + 2], 'L'), - ((m && 'M' === d[m]) || m === e) && - d.splice(m, 0, 'L', d[m - 2] + l, d[m - 1]); - g - ? g.attr({ d: d }) - : a.graph && - ((a.tracker = k - .path(d) - .attr({ - 'stroke-linejoin': 'round', - visibility: a.visible ? 'visible' : 'hidden', - stroke: p, - fill: c ? p : 'none', - 'stroke-width': a.graph.strokeWidth() + (c ? 0 : 2 * l), - zIndex: 2, - }) - .add(a.group)), - r([a.tracker, a.markerGroup], function(a) { - a.addClass('highcharts-tracker') - .on('mouseover', n) - .on('mouseout', function(a) { - h.onTrackerMouseOut(a); - }); - b.cursor && a.css({ cursor: b.cursor }); - if (u) a.on('touchstart', n); - })); - }, - }; - z.column && (z.column.prototype.drawTracker = I.drawTrackerPoint); - z.pie && (z.pie.prototype.drawTracker = I.drawTrackerPoint); - z.scatter && (z.scatter.prototype.drawTracker = I.drawTrackerPoint); - n(m.prototype, { - setItemEvents: function(a, c, e) { - var f = this, - h = f.chart.renderer.boxWrapper, - k = - 'highcharts-legend-' + - (a instanceof b ? 'point' : 'series') + - '-active'; - (e ? c : a.legendGroup) - .on('mouseover', function() { - a.setState('hover'); - h.addClass(k); - c.css(f.options.itemHoverStyle); - }) - .on('mouseout', function() { - c.css(d(a.visible ? f.itemStyle : f.itemHiddenStyle)); - h.removeClass(k); - a.setState(); - }) - .on('click', function(b) { - var c = function() { - a.setVisible && a.setVisible(); - }; - h.removeClass(k); - b = { browserEvent: b }; - a.firePointEvent - ? a.firePointEvent('legendItemClick', b, c) - : w(a, 'legendItemClick', b, c); - }); - }, - createCheckboxForItem: function(a) { - a.checkbox = H( - 'input', - { type: 'checkbox', checked: a.selected, defaultChecked: a.selected }, - this.options.itemCheckboxStyle, - this.chart.container, - ); - E(a.checkbox, 'click', function(b) { - w( - a.series || a, - 'checkboxClick', - { checked: b.target.checked, item: a }, - function() { - a.select(); - }, - ); - }); - }, - }); - f.legend.itemStyle.cursor = 'pointer'; - n(D.prototype, { - showResetZoom: function() { - var a = this, - b = f.lang, - c = a.options.chart.resetZoomButton, - d = c.theme, - e = d.states, - h = 'chart' === c.relativeTo ? null : 'plotBox'; - this.resetZoomButton = a.renderer - .button( - b.resetZoom, - null, - null, - function() { - a.zoomOut(); - }, - d, - e && e.hover, - ) - .attr({ align: c.position.align, title: b.resetZoomTitle }) - .addClass('highcharts-reset-zoom') - .add() - .align(c.position, !1, h); - }, - zoomOut: function() { - var a = this; - w(a, 'selection', { resetSelection: !0 }, function() { - a.zoom(); - }); - }, - zoom: function(a) { - var b, - d = this.pointer, - e = !1, - f; - !a || a.resetSelection - ? (r(this.axes, function(a) { - b = a.zoom(); - }), - (d.initiated = !1)) - : r(a.xAxis.concat(a.yAxis), function(a) { - var c = a.axis; - d[c.isXAxis ? 'zoomX' : 'zoomY'] && - ((b = c.zoom(a.min, a.max)), c.displayBtn && (e = !0)); - }); - f = this.resetZoomButton; - e && !f - ? this.showResetZoom() - : !e && h(f) && (this.resetZoomButton = f.destroy()); - b && - this.redraw( - c( - this.options.chart.animation, - a && a.animation, - 100 > this.pointCount, - ), - ); - }, - pan: function(a, b) { - var c = this, - d = c.hoverPoints, - e; - d && - r(d, function(a) { - a.setState(); - }); - r('xy' === b ? [1, 0] : [1], function(b) { - b = c[b ? 'xAxis' : 'yAxis'][0]; - var d = b.horiz, - f = a[d ? 'chartX' : 'chartY'], - d = d ? 'mouseDownX' : 'mouseDownY', - h = c[d], - g = (b.pointRange || 0) / 2, - k = b.getExtremes(), - l = b.toValue(h - f, !0) + g, - m = b.toValue(h + b.len - f, !0) - g, - n = m < l, - h = n ? m : l, - l = n ? l : m, - m = Math.min( - k.dataMin, - g ? k.min : b.toValue(b.toPixels(k.min) - b.minPixelPadding), - ), - g = Math.max( - k.dataMax, - g ? k.max : b.toValue(b.toPixels(k.max) + b.minPixelPadding), - ), - n = m - h; - 0 < n && ((l += n), (h = m)); - n = l - g; - 0 < n && ((l = g), (h -= n)); - b.series.length && - h !== k.min && - l !== k.max && - (b.setExtremes(h, l, !1, !1, { trigger: 'pan' }), (e = !0)); - c[d] = f; - }); - e && c.redraw(!1); - p(c.container, { cursor: 'move' }); - }, - }); - n(b.prototype, { - select: function(a, b) { - var d = this, - f = d.series, - h = f.chart; - a = c(a, !d.selected); - d.firePointEvent( - a ? 'select' : 'unselect', - { accumulate: b }, - function() { - d.selected = d.options.selected = a; - f.options.data[e(d, f.data)] = d.options; - d.setState(a && 'select'); - b || - r(h.getSelectedPoints(), function(a) { - a.selected && - a !== d && - ((a.selected = a.options.selected = !1), - (f.options.data[e(a, f.data)] = a.options), - a.setState(''), - a.firePointEvent('unselect')); - }); - }, - ); - }, - onMouseOver: function(a) { - var b = this.series.chart, - c = b.pointer; - a = a - ? c.normalize(a) - : c.getChartCoordinatesFromPoint(this, b.inverted); - c.runPointActions(a, this); - }, - onMouseOut: function() { - var a = this.series.chart; - this.firePointEvent('mouseOut'); - r(a.hoverPoints || [], function(a) { - a.setState(); - }); - a.hoverPoints = a.hoverPoint = null; - }, - importEvents: function() { - if (!this.hasImportedEvents) { - var b = this, - c = d(b.series.options.point, b.options).events; - b.events = c; - a.objectEach(c, function(a, c) { - E(b, c, a); - }); - this.hasImportedEvents = !0; - } - }, - setState: function(a, b) { - var d = Math.floor(this.plotX), - e = this.plotY, - f = this.series, - h = f.options.states[a] || {}, - k = l[f.type].marker && f.options.marker, - m = k && !1 === k.enabled, - p = (k && k.states && k.states[a]) || {}, - g = !1 === p.enabled, - r = f.stateMarkerGraphic, - u = this.marker || {}, - w = f.chart, - x = f.halo, - z, - B = k && f.markerAttribs; - a = a || ''; - if ( - !( - (a === this.state && !b) || - (this.selected && 'select' !== a) || - !1 === h.enabled || - (a && (g || (m && !1 === p.enabled))) || - (a && u.states && u.states[a] && !1 === u.states[a].enabled) - ) - ) { - B && (z = f.markerAttribs(this, a)); - if (this.graphic) - this.state && - this.graphic.removeClass('highcharts-point-' + this.state), - a && this.graphic.addClass('highcharts-point-' + a), - this.graphic.animate( - f.pointAttribs(this, a), - c(w.options.chart.animation, h.animation), - ), - z && - this.graphic.animate( - z, - c(w.options.chart.animation, p.animation, k.animation), - ), - r && r.hide(); - else { - if (a && p) { - k = u.symbol || f.symbol; - r && r.currentSymbol !== k && (r = r.destroy()); - if (r) r[b ? 'animate' : 'attr']({ x: z.x, y: z.y }); - else - k && - ((f.stateMarkerGraphic = r = w.renderer - .symbol(k, z.x, z.y, z.width, z.height) - .add(f.markerGroup)), - (r.currentSymbol = k)); - r && r.attr(f.pointAttribs(this, a)); - } - r && - (r[a && w.isInsidePlot(d, e, w.inverted) ? 'show' : 'hide'](), - (r.element.point = this)); - } - (d = h.halo) && d.size - ? (x || - (f.halo = x = w.renderer - .path() - .add((this.graphic || r).parentGroup)), - x[b ? 'animate' : 'attr']({ d: this.haloPath(d.size) }), - x.attr({ - class: - 'highcharts-halo highcharts-color-' + - c(this.colorIndex, f.colorIndex), - }), - (x.point = this), - x.attr( - n( - { - fill: this.color || f.color, - 'fill-opacity': d.opacity, - zIndex: -1, - }, - d.attributes, - ), - )) - : x && - x.point && - x.point.haloPath && - x.animate({ d: x.point.haloPath(0) }); - this.state = a; - } - }, - haloPath: function(a) { - return this.series.chart.renderer.symbols.circle( - Math.floor(this.plotX) - a, - this.plotY - a, - 2 * a, - 2 * a, - ); - }, - }); - n(k.prototype, { - onMouseOver: function() { - var a = this.chart, - b = a.hoverSeries; - if (b && b !== this) b.onMouseOut(); - this.options.events.mouseOver && w(this, 'mouseOver'); - this.setState('hover'); - a.hoverSeries = this; - }, - onMouseOut: function() { - var a = this.options, - b = this.chart, - c = b.tooltip, - d = b.hoverPoint; - b.hoverSeries = null; - if (d) d.onMouseOut(); - this && a.events.mouseOut && w(this, 'mouseOut'); - !c || - this.stickyTracking || - (c.shared && !this.noSharedTooltip) || - c.hide(); - this.setState(); - }, - setState: function(a) { - var b = this, - d = b.options, - e = b.graph, - f = d.states, - h = d.lineWidth, - d = 0; - a = a || ''; - if ( - b.state !== a && - (r([b.group, b.markerGroup, b.dataLabelsGroup], function(c) { - c && - (b.state && c.removeClass('highcharts-series-' + b.state), - a && c.addClass('highcharts-series-' + a)); - }), - (b.state = a), - !f[a] || !1 !== f[a].enabled) && - (a && (h = f[a].lineWidth || h + (f[a].lineWidthPlus || 0)), - e && !e.dashstyle) - ) - for ( - h = { 'stroke-width': h }, - e.animate( - h, - c(b.chart.options.chart.animation, f[a] && f[a].animation), - ); - b['zone-graph-' + d]; - - ) - b['zone-graph-' + d].attr(h), (d += 1); - }, - setVisible: function(a, b) { - var c = this, - d = c.chart, - e = c.legendItem, - f, - h = d.options.chart.ignoreHiddenSeries, - k = c.visible; - f = (c.visible = a = c.options.visible = c.userOptions.visible = - void 0 === a ? !k : a) - ? 'show' - : 'hide'; - r( - ['group', 'dataLabelsGroup', 'markerGroup', 'tracker', 'tt'], - function(a) { - if (c[a]) c[a][f](); - }, - ); - if (d.hoverSeries === c || (d.hoverPoint && d.hoverPoint.series) === c) - c.onMouseOut(); - e && d.legend.colorizeItem(c, a); - c.isDirty = !0; - c.options.stacking && - r(d.series, function(a) { - a.options.stacking && a.visible && (a.isDirty = !0); - }); - r(c.linkedSeries, function(b) { - b.setVisible(a, !1); - }); - h && (d.isDirtyBox = !0); - !1 !== b && d.redraw(); - w(c, f); - }, - show: function() { - this.setVisible(!0); - }, - hide: function() { - this.setVisible(!1); - }, - select: function(a) { - this.selected = a = void 0 === a ? !this.selected : a; - this.checkbox && (this.checkbox.checked = a); - w(this, a ? 'select' : 'unselect'); - }, - drawTracker: I.drawTrackerGraph, - }); - })(M); - (function(a) { - var E = a.Chart, - D = a.each, - H = a.inArray, - p = a.isArray, - f = a.isObject, - l = a.pick, - r = a.splat; - E.prototype.setResponsive = function(f) { - var l = this.options.responsive, - n = [], - e = this.currentResponsive; - l && - l.rules && - D( - l.rules, - function(e) { - void 0 === e._id && (e._id = a.uniqueKey()); - this.matchResponsiveRule(e, n, f); - }, - this, - ); - var h = a.merge.apply( - 0, - a.map(n, function(e) { - return a.find(l.rules, function(a) { - return a._id === e; - }).chartOptions; - }), - ), - n = n.toString() || void 0; - n !== (e && e.ruleIds) && - (e && this.update(e.undoOptions, f), - n - ? ((this.currentResponsive = { - ruleIds: n, - mergedOptions: h, - undoOptions: this.currentOptions(h), - }), - this.update(h, f)) - : (this.currentResponsive = void 0)); - }; - E.prototype.matchResponsiveRule = function(a, f) { - var n = a.condition; - ( - n.callback || - function() { - return ( - this.chartWidth <= l(n.maxWidth, Number.MAX_VALUE) && - this.chartHeight <= l(n.maxHeight, Number.MAX_VALUE) && - this.chartWidth >= l(n.minWidth, 0) && - this.chartHeight >= l(n.minHeight, 0) - ); - } - ).call(this) && f.push(a._id); - }; - E.prototype.currentOptions = function(l) { - function n(e, h, l, d) { - var c; - a.objectEach(e, function(a, e) { - if (!d && -1 < H(e, ['series', 'xAxis', 'yAxis'])) - for (a = r(a), l[e] = [], c = 0; c < a.length; c++) - h[e][c] && ((l[e][c] = {}), n(a[c], h[e][c], l[e][c], d + 1)); - else - f(a) - ? ((l[e] = p(a) ? [] : {}), n(a, h[e] || {}, l[e], d + 1)) - : (l[e] = h[e] || null); - }); - } - var u = {}; - n(l, this.options, u, 0); - return u; - }; - })(M); - return M; -}); +(function(S,M){"object"===typeof module&&module.exports?module.exports=S.document?M(S):M:S.Highcharts=M(S)})("undefined"!==typeof window?window:this,function(S){var M=function(){var a="undefined"===typeof S?window:S,E=a.document,D=a.navigator&&a.navigator.userAgent||"",H=E&&E.createElementNS&&!!E.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,p=/(edge|msie|trident)/i.test(D)&&!a.opera,f=/Firefox/.test(D),l=f&&4>parseInt(D.split("Firefox/")[1],10);return a.Highcharts?a.Highcharts.error(16, +!0):{product:"Highcharts",version:"6.0.4",deg2rad:2*Math.PI/360,doc:E,hasBidiBug:l,hasTouch:E&&void 0!==E.documentElement.ontouchstart,isMS:p,isWebKit:/AppleWebKit/.test(D),isFirefox:f,isTouchDevice:/(Mobile|Android|Windows Phone)/.test(D),SVG_NS:"http://www.w3.org/2000/svg",chartCount:0,seriesTypes:{},symbolSizes:{},svg:H,win:a,marginNames:["plotTop","marginRight","marginBottom","plotLeft"],noop:function(){},charts:[]}}();(function(a){a.timers=[];var E=a.charts,D=a.doc,H=a.win;a.error=function(p, +f){p=a.isNumber(p)?"Highcharts error #"+p+": www.highcharts.com/errors/"+p:p;if(f)throw Error(p);H.console&&console.log(p)};a.Fx=function(a,f,l){this.options=f;this.elem=a;this.prop=l};a.Fx.prototype={dSetter:function(){var a=this.paths[0],f=this.paths[1],l=[],r=this.now,n=a.length,w;if(1===r)l=this.toD;else if(n===f.length&&1>r)for(;n--;)w=parseFloat(a[n]),l[n]=isNaN(w)?f[n]:r*parseFloat(f[n]-w)+w;else l=f;this.elem.attr("d",l,null,!0)},update:function(){var a=this.elem,f=this.prop,l=this.now,r= +this.options.step;if(this[f+"Setter"])this[f+"Setter"]();else a.attr?a.element&&a.attr(f,l,null,!0):a.style[f]=l+this.unit;r&&r.call(a,l,this)},run:function(p,f,l){var r=this,n=r.options,w=function(a){return w.stopped?!1:r.step(a)},u=H.requestAnimationFrame||function(a){setTimeout(a,13)},e=function(){for(var h=0;h=u+this.startTime?(this.now=this.end,this.pos=1,this.update(),l=e[this.prop]=!0,a.objectEach(e,function(a){!0!==a&&(l=!1)}),l&&w&&w.call(n),p=!1):(this.pos=r.easing((f-this.startTime)/u),this.now=this.start+(this.end- +this.start)*this.pos,this.update(),p=!0);return p},initPath:function(p,f,l){function r(a){var b,c;for(k=a.length;k--;)b="M"===a[k]||"L"===a[k],c=/[a-zA-Z]/.test(a[k+3]),b&&c&&a.splice(k+1,0,a[k+1],a[k+2],a[k+1],a[k+2])}function n(a,b){for(;a.lengtha&&-Infinityw?"AM":"PM",P:12>w?"am":"pm",S:k(n.getSeconds()),L:k(Math.round(f%1E3),3)},a.dateFormats);a.objectEach(r,function(a,b){for(;-1!==p.indexOf("%"+b);)p=p.replace("%"+b,"function"===typeof a?a(f):a)});return l?p.substr(0,1).toUpperCase()+p.substr(1):p};a.formatSingle=function(p,f){var l=/\.([0-9])/,r=a.defaultOptions.lang;/f$/.test(p)?(l=(l=p.match(l))?l[1]:-1,null!==f&&(f=a.numberFormat(f,l,r.decimalPoint,-1=l&&(f=[1/l])));for(r=0;r=p||!n&&w<=(f[r]+(f[r+1]||f[r]))/2);r++);return u=a.correctFloat(u*l,-Math.round(Math.log(.001)/Math.LN10))};a.stableSort=function(a,f){var l=a.length,p,n;for(n=0;nl&&(l=a[f]);return l};a.destroyObjectProperties=function(p,f){a.objectEach(p,function(a,r){a&&a!==f&&a.destroy&&a.destroy();delete p[r]})};a.discardElement=function(p){var f=a.garbageBin;f||(f=a.createElement("div"));p&&f.appendChild(p);f.innerHTML=""};a.correctFloat=function(a,f){return parseFloat(a.toPrecision(f||14))};a.setAnimation=function(p,f){f.renderer.globalAnimation=a.pick(p,f.options.chart.animation, +!0)};a.animObject=function(p){return a.isObject(p)?a.merge(p):{duration:p?500:0}};a.timeUnits={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};a.numberFormat=function(p,f,l,r){p=+p||0;f=+f;var n=a.defaultOptions.lang,w=(p.toString().split(".")[1]||"").split("e")[0].length,u,e,h=p.toString().split("e");-1===f?f=Math.min(w,20):a.isNumber(f)?f&&h[1]&&0>h[1]&&(u=f+ +h[1],0<=u?(h[0]=(+h[0]).toExponential(u).split("e")[0],f=u):(h[0]=h[0].split(".")[0]||0, +p=20>f?(h[0]*Math.pow(10,h[1])).toFixed(f):0,h[1]=0)):f=2;e=(Math.abs(h[1]?h[0]:p)+Math.pow(10,-Math.max(f,w)-1)).toFixed(f);w=String(a.pInt(e));u=3p?"-":"")+(u?w.substr(0,u)+r:"");p+=w.substr(u).replace(/(\d{3})(?=\d)/g,"$1"+r);f&&(p+=l+e.slice(-f));h[1]&&0!==+p&&(p+="e"+h[1]);return p};Math.easeInOutSine=function(a){return-.5*(Math.cos(Math.PI*a)-1)};a.getStyle=function(p,f,l){if("width"===f)return Math.min(p.offsetWidth, +p.scrollWidth)-a.getStyle(p,"padding-left")-a.getStyle(p,"padding-right");if("height"===f)return Math.min(p.offsetHeight,p.scrollHeight)-a.getStyle(p,"padding-top")-a.getStyle(p,"padding-bottom");H.getComputedStyle||a.error(27,!0);if(p=H.getComputedStyle(p,void 0))p=p.getPropertyValue(f),a.pick(l,"opacity"!==f)&&(p=a.pInt(p));return p};a.inArray=function(p,f){return(a.indexOfPolyfill||Array.prototype.indexOf).call(f,p)};a.grep=function(p,f){return(a.filterPolyfill||Array.prototype.filter).call(p, +f)};a.find=Array.prototype.find?function(a,f){return a.find(f)}:function(a,f){var l,r=a.length;for(l=0;l>16,(l&65280)>> +8,l&255,1]:4===f&&(n=[(l&3840)>>4|(l&3840)>>8,(l&240)>>4|l&240,(l&15)<<4|l&15,1])),!n)for(w=this.parsers.length;w--&&!n;)u=this.parsers[w],(f=u.regex.exec(l))&&(n=u.parse(f));this.rgba=n||[]},get:function(a){var f=this.input,n=this.rgba,l;this.stops?(l=p(f),l.stops=[].concat(l.stops),E(this.stops,function(n,e){l.stops[e]=[l.stops[e][0],n.get(a)]})):l=n&&D(n[0])?"rgb"===a||!a&&1===n[3]?"rgb("+n[0]+","+n[1]+","+n[2]+")":"a"===a?n[3]:"rgba("+n.join(",")+")":f;return l},brighten:function(a){var l,n=this.rgba; +if(this.stops)E(this.stops,function(n){n.brighten(a)});else if(D(a)&&0!==a)for(l=0;3>l;l++)n[l]+=f(255*a),0>n[l]&&(n[l]=0),255y.width)y={width:0,height:0}}else y=this.htmlGetBBox();b.isSVG&& +(a=y.width,b=y.height,q&&"11px"===q.fontSize&&17===Math.round(b)&&(y.height=b=14),g&&(y.width=Math.abs(b*Math.sin(v))+Math.abs(a*Math.cos(v)),y.height=Math.abs(b*Math.cos(v))+Math.abs(a*Math.sin(v))));if(A&&0]*>/g,"")))},textSetter:function(a){a!==this.textStr&&(delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this))},fillSetter:function(a,g,b){"string"===typeof a?b.setAttribute(g,a):a&&this.colorGradient(a,g,b)},visibilitySetter:function(a,g,b){"inherit"===a?b.removeAttribute(g):this[g]!==a&&b.setAttribute(g,a);this[g]=a},zIndexSetter:function(a,b){var v=this.renderer,y=this.parentGroup,c=(y||v).element||v.box,k,d=this.element,q,e,v=c===v.box;k=this.added;var z;u(a)&& +(d.zIndex=a,a=+a,this[b]===a&&(k=!1),this[b]=a);if(k){(a=this.zIndex)&&y&&(y.handleZ=!0);b=c.childNodes;for(z=b.length-1;0<=z&&!q;z--)if(y=b[z],k=y.zIndex,e=!u(k),y!==d)if(0>a&&e&&!v&&!z)c.insertBefore(d,b[z]),q=!0;else if(g(k)<=a||e&&(!u(a)||0<=a))c.insertBefore(d,b[z+1]||null),q=!0;q||(c.insertBefore(d,b[v?3:0]||null),q=!0)}return q},_defaultSetter:function(a,g,b){b.setAttribute(g,a)}});E.prototype.yGetter=E.prototype.xGetter;E.prototype.translateXSetter=E.prototype.translateYSetter=E.prototype.rotationSetter= +E.prototype.verticalAlignSetter=E.prototype.rotationOriginXSetter=E.prototype.rotationOriginYSetter=E.prototype.scaleXSetter=E.prototype.scaleYSetter=E.prototype.matrixSetter=function(a,g){this[g]=a;this.doTransform=!0};E.prototype["stroke-widthSetter"]=E.prototype.strokeSetter=function(a,g,b){this[g]=a;this.stroke&&this["stroke-width"]?(E.prototype.fillSetter.call(this,this.stroke,"stroke",b),b.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0):"stroke-width"===g&&0===a&&this.hasStroke&& +(b.removeAttribute("stroke"),this.hasStroke=!1)};D=a.SVGRenderer=function(){this.init.apply(this,arguments)};c(D.prototype,{Element:E,SVG_NS:P,init:function(a,g,b,v,c,k){var y;v=this.createElement("svg").attr({version:"1.1","class":"highcharts-root"}).css(this.getStyle(v));y=v.element;a.appendChild(y);f(a,"dir","ltr");-1===a.innerHTML.indexOf("xmlns")&&f(y,"xmlns",this.SVG_NS);this.isSVG=!0;this.box=y;this.boxWrapper=v;this.alignedObjects=[];this.url=(x||N)&&m.getElementsByTagName("base").length? +R.location.href.replace(/#.*?$/,"").replace(/<[^>]*>/g,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(m.createTextNode("Created with Highcharts 6.0.4"));this.defs=this.createElement("defs").add();this.allowHTML=k;this.forExport=c;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(g,b,!1);var d;x&&a.getBoundingClientRect&&(g=function(){n(a,{left:0,top:0});d=a.getBoundingClientRect();n(a,{left:Math.ceil(d.left)- +d.left+"px",top:Math.ceil(d.top)-d.top+"px"})},g(),this.unSubPixelFix=H(R,"resize",g))},getStyle:function(a){return this.style=c({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},a)},setStyle:function(a){this.boxWrapper.css(this.getStyle(a))},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();h(this.gradients||{});this.gradients=null;a&&(this.defs=a.destroy()); +this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null},createElement:function(a){var g=new this.Element;g.init(this,a);return g},draw:A,getRadialAttr:function(a,g){return{cx:a[0]-a[2]/2+g.cx*a[2],cy:a[1]-a[2]/2+g.cy*a[2],r:g.r*a[2]}},getSpanWidth:function(a,g){var b=a.getBBox(!0).width;!L&&this.forExport&&(b=this.measureSpanWidth(g.firstChild.data,a.styles));return b},applyEllipsis:function(a,g,b,v){var c=a.rotation,y=b,k,d=0,q=b.length,e=function(a){g.removeChild(g.firstChild); +a&&g.appendChild(m.createTextNode(a))},z;a.rotation=0;y=this.getSpanWidth(a,g);if(z=y>v){for(;d<=q;)k=Math.ceil((d+q)/2),y=b.substring(0,k)+"\u2026",e(y),y=this.getSpanWidth(a,g),d===q?d=q+1:y>v?q=k-1:d=k;0===q&&e("")}a.rotation=c;return z},escapes:{"\x26":"\x26amp;","\x3c":"\x26lt;","\x3e":"\x26gt;","'":"\x26#39;",'"':"\x26quot;"},buildText:function(a){var b=a.element,v=this,c=v.forExport,y=G(a.textStr,"").toString(),q=-1!==y.indexOf("\x3c"),e=b.childNodes,z,h,A,J,t=f(b,"x"),x=a.styles,B=a.textWidth, +l=x&&x.lineHeight,C=x&&x.textOutline,u=x&&"ellipsis"===x.textOverflow,Q=x&&"nowrap"===x.whiteSpace,w=x&&x.fontSize,R,I,r=e.length,x=B&&!a.added&&this.box,p=function(a){var c;c=/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:w||v.style.fontSize||12;return l?g(l):v.fontMetrics(c,a.getAttribute("style")?a:b).h},K=function(a){F(v.escapes,function(g,b){a=a.replace(new RegExp(g,"g"),b)});return a};R=[y,u,Q,l,C,w,B].join();if(R!==a.textCache){for(a.textCache=R;r--;)b.removeChild(e[r]);q||C||u||B|| +-1!==y.indexOf(" ")?(z=/<.*class="([^"]+)".*>/,h=/<.*style="([^"]+)".*>/,A=/<.*href="([^"]+)".*>/,x&&x.appendChild(b),y=q?y.replace(/<(b|strong)>/g,'\x3cspan style\x3d"font-weight:bold"\x3e').replace(/<(i|em)>/g,'\x3cspan style\x3d"font-style:italic"\x3e').replace(//g,"\x3c/span\x3e").split(//g):[y],y=k(y,function(a){return""!==a}),d(y,function(g,y){var k,q=0;g=g.replace(/^\s+|\s+$/g,"").replace(//g,"\x3c/span\x3e|||"); +k=g.split("|||");d(k,function(g){if(""!==g||1===k.length){var d={},e=m.createElementNS(v.SVG_NS,"tspan"),x,F;z.test(g)&&(x=g.match(z)[1],f(e,"class",x));h.test(g)&&(F=g.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),f(e,"style",F));A.test(g)&&!c&&(f(e,"onclick",'location.href\x3d"'+g.match(A)[1]+'"'),f(e,"class","highcharts-anchor"),n(e,{cursor:"pointer"}));g=K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g,"")||" ");if(" "!==g){e.appendChild(m.createTextNode(g));q?d.dx=0:y&&null!==t&&(d.x=t);f(e,d);b.appendChild(e); +!q&&I&&(!L&&c&&n(e,{display:"block"}),f(e,"dy",p(e)));if(B){d=g.replace(/([^\^])-/g,"$1- ").split(" ");x=1B,void 0===J&&(J=g),g&&1!==d.length?(e.removeChild(e.firstChild),O.unshift(d.pop())):(d=O,O=[],d.length&&!Q&&(e=m.createElementNS(P,"tspan"),f(e,{dy:C,x:t}),F&&f(e,"style",F),b.appendChild(e)),l>B&&(B=l)),d.length&&e.appendChild(m.createTextNode(d.join(" ").replace(/- /g, +"-")));a.rotation=G}q++}}});I=I||b.childNodes.length}),J&&a.attr("title",a.textStr),x&&x.removeChild(b),C&&a.applyTextOutline&&a.applyTextOutline(C)):b.appendChild(m.createTextNode(K(y)))}},getContrast:function(a){a=r(a).rgba;return 510Math.abs(c.end-c.start-2*Math.PI));var y=Math.cos(k),z=Math.sin(k),h=Math.cos(e),e=Math.sin(e);c=.001>c.end-k-Math.PI?0:1;d=["M",a+d*y,g+q*z,"A",d,q,0,c,1,a+d*h,g+q*e];u(b)&&d.push(v?"M":"L",a+b* +h,g+b*e,"A",b,b,0,c,0,a+b*y,g+b*z);d.push(v?"":"Z");return d},callout:function(a,g,b,v,c){var d=Math.min(c&&c.r||0,b,v),k=d+6,q=c&&c.anchorX;c=c&&c.anchorY;var e;e=["M",a+d,g,"L",a+b-d,g,"C",a+b,g,a+b,g,a+b,g+d,"L",a+b,g+v-d,"C",a+b,g+v,a+b,g+v,a+b-d,g+v,"L",a+d,g+v,"C",a,g+v,a,g+v,a,g+v-d,"L",a,g+d,"C",a,g,a,g,a+d,g];q&&q>b?c>g+k&&cq?c>g+k&&cv&&q>a+k&&qc&&q>a+k&&qa?a+3:Math.round(1.2*a);return{h:b,b:Math.round(.8* +b),f:a}},rotCorr:function(a,g,b){var v=a;g&&b&&(v=Math.max(v*Math.cos(g*e),4));return{x:-a/3*Math.sin(g*e),y:v}},label:function(g,b,k,e,z,h,m,A,L){var y=this,J=y.g("button"!==L&&"label"),t=J.text=y.text("",0,0,m).attr({zIndex:1}),x,F,n=0,B=3,l=0,C,f,Q,G,w,R={},I,P,r=/^url\((.*?)\)$/.test(e),p=r,K,O,N,T;L&&J.addClass("highcharts-"+L);p=r;K=function(){return(I||0)%2/2};O=function(){var a=t.element.style,g={};F=(void 0===C||void 0===f||w)&&u(t.textStr)&&t.getBBox();J.width=(C||F.width||0)+2*B+l;J.height= +(f||F.height||0)+2*B;P=B+y.fontMetrics(a&&a.fontSize,t).b;p&&(x||(J.box=x=y.symbols[e]||r?y.symbol(e):y.rect(),x.addClass(("button"===L?"":"highcharts-label-box")+(L?" highcharts-"+L+"-box":"")),x.add(J),a=K(),g.x=a,g.y=(A?-P:0)+a),g.width=Math.round(J.width),g.height=Math.round(J.height),x.attr(c(g,R)),R={})};N=function(){var a=l+B,g;g=A?0:P;u(C)&&F&&("center"===w||"right"===w)&&(a+={center:.5,right:1}[w]*(C-F.width));if(a!==t.x||g!==t.y)t.attr("x",a),void 0!==g&&t.attr("y",g);t.x=a;t.y=g};T=function(a, +g){x?x.attr(a,g):R[a]=g};J.onAdd=function(){t.add(J);J.attr({text:g||0===g?g:"",x:b,y:k});x&&u(z)&&J.attr({anchorX:z,anchorY:h})};J.widthSetter=function(g){C=a.isNumber(g)?g:null};J.heightSetter=function(a){f=a};J["text-alignSetter"]=function(a){w=a};J.paddingSetter=function(a){u(a)&&a!==B&&(B=J.padding=a,N())};J.paddingLeftSetter=function(a){u(a)&&a!==l&&(l=a,N())};J.alignSetter=function(a){a={left:0,center:.5,right:1}[a];a!==n&&(n=a,F&&J.attr({x:Q}))};J.textSetter=function(a){void 0!==a&&t.textSetter(a); +O();N()};J["stroke-widthSetter"]=function(a,g){a&&(p=!0);I=this["stroke-width"]=a;T(g,a)};J.strokeSetter=J.fillSetter=J.rSetter=function(a,g){"r"!==g&&("fill"===g&&a&&(p=!0),J[g]=a);T(g,a)};J.anchorXSetter=function(a,g){z=J.anchorX=a;T(g,Math.round(a)-K()-Q)};J.anchorYSetter=function(a,g){h=J.anchorY=a;T(g,a-G)};J.xSetter=function(a){J.x=a;n&&(a-=n*((C||F.width)+2*B));Q=Math.round(a);J.attr("translateX",Q)};J.ySetter=function(a){G=J.y=Math.round(a);J.attr("translateY",G)};var U=J.css;return c(J,{css:function(a){if(a){var g= +{};a=q(a);d(J.textProps,function(b){void 0!==a[b]&&(g[b]=a[b],delete a[b])});t.css(g)}return U.call(J,a)},getBBox:function(){return{width:F.width+2*B,height:F.height+2*B,x:F.x-B,y:F.y-B}},shadow:function(a){a&&(O(),x&&x.shadow(a));return J},destroy:function(){v(J.element,"mouseenter");v(J.element,"mouseleave");t&&(t=t.destroy());x&&(x=x.destroy());E.prototype.destroy.call(J);J=y=O=N=T=null}})}});a.Renderer=D})(M);(function(a){var E=a.attr,D=a.createElement,H=a.css,p=a.defined,f=a.each,l=a.extend, +r=a.isFirefox,n=a.isMS,w=a.isWebKit,u=a.pick,e=a.pInt,h=a.SVGRenderer,m=a.win,d=a.wrap;l(a.SVGElement.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&"SPAN"===b.tagName&&a.width)delete a.width,this.textWidth=b,this.updateTransform();a&&"ellipsis"===a.textOverflow&&(a.whiteSpace="nowrap",a.overflow="hidden");this.styles=l(this.styles,a);H(this.element,a);return this},htmlGetBBox:function(){var a=this.element;return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}, +htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,d=this.translateX||0,z=this.translateY||0,h=this.x||0,m=this.y||0,x=this.textAlign||"left",n={left:0,center:.5,right:1}[x],t=this.styles;H(b,{marginLeft:d,marginTop:z});this.shadows&&f(this.shadows,function(a){H(a,{marginLeft:d+1,marginTop:z+1})});this.inverted&&f(b.childNodes,function(c){a.invertChild(c,b)});if("SPAN"===b.tagName){var l=this.rotation,u=e(this.textWidth),q=t&&t.whiteSpace,A=[l,x,b.innerHTML,this.textWidth, +this.textAlign].join();A!==this.cTT&&(t=a.fontMetrics(b.style.fontSize).b,p(l)&&this.setSpanRotation(l,n,t),H(b,{width:"",whiteSpace:q||"nowrap"}),b.offsetWidth>u&&/[ \-]/.test(b.textContent||b.innerText)&&H(b,{width:u+"px",display:"block",whiteSpace:q||"normal"}),this.getSpanCorrection(b.offsetWidth,t,n,l,x));H(b,{left:h+(this.xCorr||0)+"px",top:m+(this.yCorr||0)+"px"});w&&(t=b.offsetHeight);this.cTT=A}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,d){var c={},k=this.renderer.getTransformKey(); +c[k]=c.transform="rotate("+a+"deg)";c[k+(r?"Origin":"-origin")]=c.transformOrigin=100*b+"% "+d+"px";H(this.element,c)},getSpanCorrection:function(a,b,d){this.xCorr=-a*d;this.yCorr=-b}});l(h.prototype,{getTransformKey:function(){return n&&!/Edge/.test(m.navigator.userAgent)?"-ms-transform":w?"-webkit-transform":r?"MozTransform":m.opera?"-o-transform":""},html:function(a,b,k){var c=this.createElement("span"),e=c.element,h=c.renderer,m=h.isSVG,w=function(a,b){f(["opacity","visibility"],function(c){d(a, +c+"Setter",function(a,c,d,k){a.call(this,c,d,k);b[d]=c})})};c.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;this.textStr=a;e.innerHTML=u(a,"");c.htmlUpdateTransform()};m&&w(c,c.element.style);c.xSetter=c.ySetter=c.alignSetter=c.rotationSetter=function(a,b){"align"===b&&(b="textAlign");c[b]=a;c.htmlUpdateTransform()};c.attr({text:a,x:Math.round(b),y:Math.round(k)}).css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize,position:"absolute"});e.style.whiteSpace="nowrap";c.css= +c.htmlCss;m&&(c.add=function(a){var b,d=h.box.parentNode,k=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)k.push(a),a=a.parentGroup;f(k.reverse(),function(a){function e(g,b){a[b]=g;n?q[h.getTransformKey()]="translate("+(a.x||a.translateX)+"px,"+(a.y||a.translateY)+"px)":"translateX"===b?q.left=g+"px":q.top=g+"px";a.doTransform=!0}var q,g=E(a.element,"class");g&&(g={className:g});b=a.div=a.div||D("div",g,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px",display:a.display, +opacity:a.opacity,pointerEvents:a.styles&&a.styles.pointerEvents},b||d);q=b.style;l(a,{classSetter:function(a){return function(g){this.element.setAttribute("class",g);a.className=g}}(b),on:function(){k[0].div&&c.on.apply({element:k[0].div},arguments);return a},translateXSetter:e,translateYSetter:e});w(a,q)})}}else b=d;b.appendChild(e);c.added=!0;c.alignOnAdd&&c.htmlUpdateTransform();return c});return c}})})(M);(function(a){function E(){var n=a.defaultOptions.global,l=r.moment;if(n.timezone){if(l)return function(a){return-l.tz(a, +n.timezone).utcOffset()};a.error(25)}return n.useUTC&&n.getTimezoneOffset}function D(){var n=a.defaultOptions.global,f,u=n.useUTC,e=u?"getUTC":"get",h=u?"setUTC":"set",m="Minutes Hours Day Date Month FullYear".split(" "),d=m.concat(["Milliseconds","Seconds"]);a.Date=f=n.Date||r.Date;f.hcTimezoneOffset=u&&n.timezoneOffset;f.hcGetTimezoneOffset=E();f.hcHasTimeZone=!(!f.hcTimezoneOffset&&!f.hcGetTimezoneOffset);f.hcMakeTime=function(a,b,d,e,h,m){var c;u?(c=f.UTC.apply(0,arguments),c+=p(c)):c=(new f(a, +b,l(d,1),l(e,0),l(h,0),l(m,0))).getTime();return c};for(n=0;nb&&e-k*zm&&(p=Math.round((h-e)/Math.cos(b*r)));else if(h=e+(1-k)*z,e-k*zm&&(I=m-a.x+I*k,x=-1),I=Math.min(B,I),II||f.autoRotation&&(c.styles||{}).width)p=I;p&&(t.width=p,(n.style||{}).textOverflow||(t.textOverflow="ellipsis"),c.css(t))},getPosition:function(a,f,l,e){var h=this.axis,m=h.chart,d=e&&m.oldChartHeight||m.chartHeight;return{x:a?h.translate(f+l,null,null,e)+h.transB:h.left+h.offset+(h.opposite?(e&&m.oldChartWidth||m.chartWidth)-h.right-h.left:0),y:a?d-h.bottom+h.offset-(h.opposite?h.height:0):d-h.translate(f+l,null,null,e)-h.transB}},getLabelPosition:function(a, +f,l,e,h,m,d,c){var b=this.axis,k=b.transA,z=b.reversed,B=b.staggerLines,n=b.tickRotCorr||{x:0,y:0},x=h.y,u=e||b.reserveSpaceDefault?0:-b.labelOffset*("center"===b.labelAlign?.5:1);D(x)||(x=0===b.side?l.rotation?-8:-l.getBBox().height:2===b.side?n.y+8:Math.cos(l.rotation*r)*(n.y-l.getBBox(!1,0).height/2));a=a+h.x+u+n.x-(m&&e?m*k*(z?-1:1):0);f=f+x-(m&&!e?m*k*(z?1:-1):0);B&&(l=d/(c||1)%B,b.opposite&&(l=B-l-1),f+=b.labelOffset/B*l);return{x:a,y:Math.round(f)}},getMarkPath:function(a,f,l,e,h,m){return m.crispLine(["M", +a,f,"L",a+(h?0:-l),f+(h?l:0)],e)},renderGridLine:function(a,f,l){var e=this.axis,h=e.options,m=this.gridLine,d={},c=this.pos,b=this.type,k=e.tickmarkOffset,z=e.chart.renderer,B=b?b+"Grid":"grid",n=h[B+"LineWidth"],x=h[B+"LineColor"],h=h[B+"LineDashStyle"];m||(d.stroke=x,d["stroke-width"]=n,h&&(d.dashstyle=h),b||(d.zIndex=1),a&&(d.opacity=0),this.gridLine=m=z.path().attr(d).addClass("highcharts-"+(b?b+"-":"")+"grid-line").add(e.gridGroup));if(!a&&m&&(a=e.getPlotLinePath(c+k,m.strokeWidth()*l,a,!0)))m[this.isNew? +"attr":"animate"]({d:a,opacity:f})},renderMark:function(a,f,u){var e=this.axis,h=e.options,m=e.chart.renderer,d=this.type,c=d?d+"Tick":"tick",b=e.tickSize(c),k=this.mark,z=!k,B=a.x;a=a.y;var n=l(h[c+"Width"],!d&&e.isXAxis?1:0),h=h[c+"Color"];b&&(e.opposite&&(b[0]=-b[0]),z&&(this.mark=k=m.path().addClass("highcharts-"+(d?d+"-":"")+"tick").add(e.axisGroup),k.attr({stroke:h,"stroke-width":n})),k[z?"attr":"animate"]({d:this.getMarkPath(B,a,b[0],k.strokeWidth()*u,e.horiz,m),opacity:f}))},renderLabel:function(a, +f,u,e){var h=this.axis,m=h.horiz,d=h.options,c=this.label,b=d.labels,k=b.step,h=h.tickmarkOffset,z=!0,B=a.x;a=a.y;c&&p(B)&&(c.xy=a=this.getLabelPosition(B,a,c,m,b,h,e,k),this.isFirst&&!this.isLast&&!l(d.showFirstLabel,1)||this.isLast&&!this.isFirst&&!l(d.showLastLabel,1)?z=!1:!m||b.step||b.rotation||f||0===u||this.handleOverflow(a),k&&e%k&&(z=!1),z&&p(a.y)?(a.opacity=u,c[this.isNewLabel?"attr":"animate"](a),this.isNewLabel=!1):(c.attr("y",-9999),this.isNewLabel=!0))},render:function(a,f,u){var e= +this.axis,h=e.horiz,m=this.getPosition(h,this.pos,e.tickmarkOffset,f),d=m.x,c=m.y,e=h&&d===e.pos+e.len||!h&&c===e.pos?-1:1;u=l(u,1);this.isActive=!0;this.renderGridLine(f,u,e);this.renderMark(m,u,e);this.renderLabel(m,f,u,a);this.isNew=!1},destroy:function(){H(this,this.axis)}}})(M);var V=function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.color,l=a.correctFloat,r=a.defaultOptions,n=a.defined,w=a.deg2rad,u=a.destroyObjectProperties,e=a.each,h=a.extend,m=a.fireEvent,d=a.format, +c=a.getMagnitude,b=a.grep,k=a.inArray,z=a.isArray,B=a.isNumber,I=a.isString,x=a.merge,K=a.normalizeTickInterval,t=a.objectEach,C=a.pick,N=a.removeEvent,q=a.splat,A=a.syncTimeout,F=a.Tick,G=function(){this.init.apply(this,arguments)};a.extend(G.prototype,{defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,labels:{enabled:!0,style:{color:"#666666",cursor:"default",fontSize:"11px"}, +x:0},maxPadding:.01,minorTickLength:2,minorTickPosition:"outside",minPadding:.01,startOfWeek:1,startOnTick:!1,tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",title:{align:"middle",style:{color:"#666666"}},type:"linear",minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#ccd6eb",lineWidth:1,gridLineColor:"#e6e6e6",tickColor:"#ccd6eb"},defaultYAxisOptions:{endOnTick:!0,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},maxPadding:.05, +minPadding:.05,startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{allowOverlap:!1,enabled:!1,formatter:function(){return a.numberFormat(this.total,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"#000000",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0},defaultLeftAxisOptions:{labels:{x:-15},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45], +x:0},title:{rotation:0}},init:function(a,b){var g=b.isX,v=this;v.chart=a;v.horiz=a.inverted&&!v.isZAxis?!g:g;v.isXAxis=g;v.coll=v.coll||(g?"xAxis":"yAxis");v.opposite=b.opposite;v.side=b.side||(v.horiz?v.opposite?0:2:v.opposite?1:3);v.setOptions(b);var c=this.options,d=c.type;v.labelFormatter=c.labels.formatter||v.defaultLabelFormatter;v.userOptions=b;v.minPixelPadding=0;v.reversed=c.reversed;v.visible=!1!==c.visible;v.zoomEnabled=!1!==c.zoomEnabled;v.hasNames="category"===d||!0===c.categories;v.categories= +c.categories||v.hasNames;v.names=v.names||[];v.plotLinesAndBandsGroups={};v.isLog="logarithmic"===d;v.isDatetimeAxis="datetime"===d;v.positiveValuesOnly=v.isLog&&!v.allowNegativeLog;v.isLinked=n(c.linkedTo);v.ticks={};v.labelEdge=[];v.minorTicks={};v.plotLinesAndBands=[];v.alternateBands={};v.len=0;v.minRange=v.userMinRange=c.minRange||c.maxZoom;v.range=c.range;v.offset=c.offset||0;v.stacks={};v.oldStacks={};v.stacksTouched=0;v.max=null;v.min=null;v.crosshair=C(c.crosshair,q(a.options.tooltip.crosshairs)[g? +0:1],!1);b=v.options.events;-1===k(v,a.axes)&&(g?a.axes.splice(a.xAxis.length,0,v):a.axes.push(v),a[v.coll].push(v));v.series=v.series||[];a.inverted&&!v.isZAxis&&g&&void 0===v.reversed&&(v.reversed=!0);t(b,function(a,g){E(v,g,a)});v.lin2log=c.linearToLogConverter||v.lin2log;v.isLog&&(v.val2lin=v.log2lin,v.lin2val=v.lin2log)},setOptions:function(a){this.options=x(this.defaultOptions,"yAxis"===this.coll&&this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions, +this.defaultLeftAxisOptions][this.side],x(r[this.coll],a))},defaultLabelFormatter:function(){var g=this.axis,b=this.value,c=g.categories,k=this.dateTimeLabelFormat,e=r.lang,q=e.numericSymbols,e=e.numericSymbolMagnitude||1E3,h=q&&q.length,m,z=g.options.labels.format,g=g.isLog?Math.abs(b):g.tickInterval;if(z)m=d(z,this);else if(c)m=b;else if(k)m=a.dateFormat(k,b);else if(h&&1E3<=g)for(;h--&&void 0===m;)c=Math.pow(e,h+1),g>=c&&0===10*b%c&&null!==q[h]&&0!==b&&(m=a.numberFormat(b/c,-1)+q[h]);void 0=== +m&&(m=1E4<=Math.abs(b)?a.numberFormat(b,-1):a.numberFormat(b,-1,void 0,""));return m},getSeriesExtremes:function(){var a=this,v=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();e(a.series,function(g){if(g.visible||!v.options.chart.ignoreHiddenSeries){var c=g.options,d=c.threshold,k;a.hasVisibleSeries=!0;a.positiveValuesOnly&&0>=d&&(d=null);if(a.isXAxis)c=g.xData,c.length&&(g=p(c),k=H(c),B(g)||g instanceof Date||(c=b(c,B), +g=p(c)),a.dataMin=Math.min(C(a.dataMin,c[0],g),g),a.dataMax=Math.max(C(a.dataMax,c[0],k),k));else if(g.getExtremes(),k=g.dataMax,g=g.dataMin,n(g)&&n(k)&&(a.dataMin=Math.min(C(a.dataMin,g),g),a.dataMax=Math.max(C(a.dataMax,k),k)),n(d)&&(a.threshold=d),!c.softThreshold||a.positiveValuesOnly)a.softThreshold=!1}})},translate:function(a,b,c,d,k,e){var g=this.linkedParent||this,v=1,q=0,h=d?g.oldTransA:g.transA;d=d?g.oldMin:g.min;var m=g.minPixelPadding;k=(g.isOrdinal||g.isBroken||g.isLog&&k)&&g.lin2val; +h||(h=g.transA);c&&(v*=-1,q=g.len);g.reversed&&(v*=-1,q-=v*(g.sector||g.len));b?(a=(a*v+q-m)/h+d,k&&(a=g.lin2val(a))):(k&&(a=g.val2lin(a)),a=B(d)?v*(a-d)*h+q+v*m+(B(e)?h*e:0):void 0);return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,k){var g=this.chart,v=this.left,q=this.top,e,h,m=c&&g.oldChartHeight||g.chartHeight,z=c&&g.oldChartWidth|| +g.chartWidth,A;e=this.transB;var t=function(a,g,b){if(ab)d?a=Math.min(Math.max(g,a),b):A=!0;return a};k=C(k,this.translate(a,null,null,c));a=c=Math.round(k+e);e=h=Math.round(m-k-e);B(k)?this.horiz?(e=q,h=m-this.bottom,a=c=t(a,v,v+this.width)):(a=v,c=z-this.right,e=h=t(e,q,q+this.height)):(A=!0,d=!1);return A&&!d?null:g.renderer.crispLine(["M",a,e,"L",c,h],b||1)},getLinearTickPositions:function(a,b,c){var g,v=l(Math.floor(b/a)*a);c=l(Math.ceil(c/a)*a);var d=[],k;l(v+a)===v&&(k=20);if(this.single)return[b]; +for(b=v;b<=c;){d.push(b);b=l(b+a,k);if(b===g)break;g=b}return d},getMinorTickInterval:function(){var a=this.options;return!0===a.minorTicks?C(a.minorTickInterval,"auto"):!1===a.minorTicks?null:a.minorTickInterval},getMinorTickPositions:function(){var a=this,b=a.options,c=a.tickPositions,d=a.minorTickInterval,k=[],q=a.pointRangePadding||0,h=a.min-q,q=a.max+q,m=q-h;if(m&&m/d=this.minRange,t=this.minRange,d=(t-c+b)/2,d=[b-d,C(a.min,b-d)],k&&(d[2]=this.isLog?this.log2lin(this.dataMin):this.dataMin),b=H(d),c=[b+t,C(a.max,b+t)],k&&(c[2]=this.isLog?this.log2lin(this.dataMax):this.dataMax),c=p(c),c-b=p?(r=p,f=0):b.dataMax<=p&&(w=p,x=0)),b.min= +C(N,r,b.dataMin),b.max=C(D,w,b.dataMax));q&&(b.positiveValuesOnly&&!g&&0>=Math.min(b.min,C(b.dataMin,b.min))&&a.error(10,1),b.min=l(h(b.min),15),b.max=l(h(b.max),15));b.range&&n(b.max)&&(b.userMin=b.min=N=Math.max(b.dataMin,b.minFromRange()),b.userMax=D=b.max,b.range=null);m(b,"foundExtremes");b.beforePadding&&b.beforePadding();b.adjustForMinRange();!(G||b.axisPointRange||b.usePercentage||t)&&n(b.min)&&n(b.max)&&(h=b.max-b.min)&&(!n(N)&&f&&(b.min-=h*f),!n(D)&&x&&(b.max+=h*x));B(k.softMin)&&!B(b.userMin)&& +(b.min=Math.min(b.min,k.softMin));B(k.softMax)&&!B(b.userMax)&&(b.max=Math.max(b.max,k.softMax));B(k.floor)&&(b.min=Math.max(b.min,k.floor));B(k.ceiling)&&(b.max=Math.min(b.max,k.ceiling));I&&n(b.dataMin)&&(p=p||0,!n(N)&&b.min=p?b.min=p:!n(D)&&b.max>p&&b.dataMax<=p&&(b.max=p));b.tickInterval=b.min===b.max||void 0===b.min||void 0===b.max?1:t&&!F&&u===b.linkedParent.options.tickPixelInterval?F=b.linkedParent.tickInterval:C(F,this.tickAmount?(b.max-b.min)/Math.max(this.tickAmount-1,1): +void 0,G?1:(b.max-b.min)*u/Math.max(b.len,u));A&&!g&&e(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();b.postProcessTickInterval&&(b.tickInterval=b.postProcessTickInterval(b.tickInterval));b.pointRange&&!F&&(b.tickInterval=Math.max(b.pointRange,b.tickInterval));g=C(k.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);!F&&b.tickIntervalb.tickInterval&&1E3b.max)),!!this.tickAmount));this.tickAmount||(b.tickInterval=b.unsquish());this.setTickPositions()},setTickPositions:function(){var a=this.options,b,c=a.tickPositions;b=this.getMinorTickInterval();var d=a.tickPositioner,k=a.startOnTick,q=a.endOnTick;this.tickmarkOffset=this.categories&&"between"===a.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval="auto"===b&&this.tickInterval?this.tickInterval/ +5:b;this.single=this.min===this.max&&n(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==a.allowDecimals);this.tickPositions=b=c&&c.slice();!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions,this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b= +[b[0],b.pop()],b[0]===b[1]&&(b.length=1)),this.tickPositions=b,d&&(d=d.apply(this,[this.min,this.max])))&&(this.tickPositions=b=d);this.paddedTicks=b.slice(0);this.trimTicks(b,k,q);this.isLinked||(this.single&&2>b.length&&(this.min-=.5,this.max+=.5),c||d||this.adjustTickAmount())},trimTicks:function(a,b,c){var g=a[0],d=a[a.length-1],k=this.minPointOffset||0;if(!this.isLinked){if(b&&-Infinity!==g)this.min=g;else for(;this.min-k>a[0];)a.shift();if(c)this.max=d;else for(;this.max+kb&&(this.finalTickAmt=b,b=5);this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,c=this.tickAmount,d=this.finalTickAmt,k=b&&b.length,q=C(this.threshold,this.softThreshold?0:null);if(this.hasData()){if(kc&&(this.tickInterval*= +2,this.setTickPositions());if(n(d)){for(a=c=b.length;a--;)(3===d&&1===a%2||2>=d&&0d&&(a=d)),n(c)&&(bd&&(b=d))),this.displayBtn=void 0!==a||void 0!==b,this.setExtremes(a,b,!1,void 0,{trigger:"zoom"});return!0},setAxisSize:function(){var b=this.chart,c=this.options,d=c.offsets||[0,0,0,0],k=this.horiz,q=this.width=Math.round(a.relativeLength(C(c.width,b.plotWidth-d[3]+d[1]),b.plotWidth)),e=this.height=Math.round(a.relativeLength(C(c.height, +b.plotHeight-d[0]+d[2]),b.plotHeight)),h=this.top=Math.round(a.relativeLength(C(c.top,b.plotTop+d[0]),b.plotHeight,b.plotTop)),c=this.left=Math.round(a.relativeLength(C(c.left,b.plotLeft+d[3]),b.plotWidth,b.plotLeft));this.bottom=b.chartHeight-e-h;this.right=b.chartWidth-q-c;this.len=Math.max(k?q:e,0);this.pos=k?c:h},getExtremes:function(){var a=this.isLog,b=this.lin2log;return{min:a?l(b(this.min)):this.min,max:a?l(b(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin, +userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,g=this.lin2log,c=b?g(this.min):this.min,b=b?g(this.max):this.max;null===a?a=c:c>a?a=c:ba?"right":195a?"left":"center"},tickSize:function(a){var b=this.options,g=b[a+"Length"],c=C(b[a+"Width"],"tick"===a&&this.isXAxis?1:0);if(c&&g)return"inside"===b[a+"Position"]&&(g=-g),[g,c]},labelMetrics:function(){var a= +this.tickPositions&&this.tickPositions[0]||0;return this.chart.renderer.fontMetrics(this.options.labels.style&&this.options.labels.style.fontSize,this.ticks[a]&&this.ticks[a].label)},unsquish:function(){var a=this.options.labels,b=this.horiz,c=this.tickInterval,d=c,k=this.len/(((this.categories?1:0)+this.max-this.min)/c),q,h=a.rotation,m=this.labelMetrics(),z,A=Number.MAX_VALUE,t,x=function(a){a/=k||1;a=1=a)z=x(Math.abs(m.h/Math.sin(w*a))),b=z+Math.abs(a/360),b(c.step||0)&&!c.rotation&&(this.staggerLines||1)*this.len/d||!b&&(c.style&&parseInt(c.style.width,10)||k&&k-a.spacing[3]|| +.33*a.chartWidth)},renderUnsquish:function(){var a=this.chart,b=a.renderer,c=this.tickPositions,d=this.ticks,k=this.options.labels,q=this.horiz,h=this.getSlotWidth(),m=Math.max(1,Math.round(h-2*(k.padding||5))),z={},A=this.labelMetrics(),t=k.style&&k.style.textOverflow,f,F=0,l,B;I(k.rotation)||(z.rotation=k.rotation||0);e(c,function(a){(a=d[a])&&a.labelLength>F&&(F=a.labelLength)});this.maxLabelLength=F;if(this.autoRotation)F>m&&F>A.h?z.rotation=this.labelRotation:this.labelRotation=0;else if(h&& +(f={width:m+"px"},!t))for(f.textOverflow="clip",l=c.length;!q&&l--;)if(B=c[l],m=d[B].label)m.styles&&"ellipsis"===m.styles.textOverflow?m.css({textOverflow:"clip"}):d[B].labelLength>h&&m.css({width:h+"px"}),m.getBBox().height>this.len/c.length-(A.h-A.f)&&(m.specCss={textOverflow:"ellipsis"});z.rotation&&(f={width:(F>.5*a.chartHeight?.33*a.chartHeight:a.chartHeight)+"px"},t||(f.textOverflow="ellipsis"));if(this.labelAlign=k.align||this.autoLabelAlign(this.labelRotation))z.align=this.labelAlign;e(c, +function(a){var b=(a=d[a])&&a.label;b&&(b.attr(z),f&&b.css(x(f,b.specCss)),delete b.specCss,a.rotation=z.rotation)});this.tickRotCorr=b.rotCorr(A.b,this.labelRotation||0,0!==this.side)},hasData:function(){return this.hasVisibleSeries||n(this.min)&&n(this.max)&&this.tickPositions&&0=this.min&&a<=this.max)g[a]||(g[a]=new F(this,a)),d&&g[a].isNew&&g[a].render(b,!0,.1),g[a].render(b)},render:function(){var b= +this,c=b.chart,d=b.options,k=b.isLog,q=b.lin2log,h=b.isLinked,m=b.tickPositions,z=b.axisTitle,x=b.ticks,f=b.minorTicks,l=b.alternateBands,C=d.stackLabels,n=d.alternateGridColor,u=b.tickmarkOffset,G=b.axisLine,p=b.showAxis,I=D(c.renderer.globalAnimation),r,w;b.labelEdge.length=0;b.overlap=!1;e([x,f,l],function(a){t(a,function(a){a.isActive=!1})});if(b.hasData()||h)b.minorTickInterval&&!b.categories&&e(b.getMinorTickPositions(),function(a){b.renderMinorTick(a)}),m.length&&(e(m,function(a,c){b.renderTick(a, +c)}),u&&(0===b.min||b.single)&&(x[-1]||(x[-1]=new F(b,-1,null,!0)),x[-1].render(-1))),n&&e(m,function(d,g){w=void 0!==m[g+1]?m[g+1]+u:b.max-u;0===g%2&&d=h.second?0:C*Math.floor(x.getMilliseconds()/C));if(t>=h.second)x[D.hcSetSeconds](t>=h.minute? +0:C*Math.floor(x.getSeconds()/C));if(t>=h.minute)x[D.hcSetMinutes](t>=h.hour?0:C*Math.floor(x[D.hcGetMinutes]()/C));if(t>=h.hour)x[D.hcSetHours](t>=h.day?0:C*Math.floor(x[D.hcGetHours]()/C));if(t>=h.day)x[D.hcSetDate](t>=h.month?1:C*Math.floor(x[D.hcGetDate]()/C));t>=h.month&&(x[D.hcSetMonth](t>=h.year?0:C*Math.floor(x[D.hcGetMonth]()/C)),n=x[D.hcGetFullYear]());if(t>=h.year)x[D.hcSetFullYear](n-n%C);if(t===h.week)x[D.hcSetDate](x[D.hcGetDate]()-x[D.hcGetDay]()+e(b,1));n=x[D.hcGetFullYear]();b=x[D.hcGetMonth](); +var A=x[D.hcGetDate](),F=x[D.hcGetHours]();d=x.getTime();D.hcHasTimeZone&&(q=(!B||!!D.hcGetTimezoneOffset)&&(c-d>4*h.month||w(d)!==w(c)),N=w(x),x=new D(d+N));B=x.getTime();for(d=1;Bk.length&&l(k,function(a){0===a%18E5&&"000000000"===H("%H%M%S%L",a)&&(m[a]="day")})}k.info=r(a,{higherRanks:m,totalRange:t*C});return k}; +E.prototype.normalizeTimeTickInterval=function(a,d){var c=d||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]];d=c[c.length-1];var b=h[d[0]],k=d[1],e;for(e=0;er&&(!w||z<=n)&&void 0!==z&&d.push(z),z>n&& +(B=!0),z=k;else r=h(r),n=h(n),a=w?this.getMinorTickInterval():l.tickInterval,a=f("auto"===a?null:a,this._minorAutoInterval,l.tickPixelInterval/(w?5:1)*(n-r)/((w?e/this.tickPositions.length:e)||1)),a=p(a,null,D(a)),d=H(this.getLinearTickPositions(a,r,n),m),w||(this._minorAutoInterval=a/5);w||(this.tickInterval=a);return d};E.prototype.log2lin=function(a){return Math.log(a)/Math.LN10};E.prototype.lin2log=function(a){return Math.pow(10,a)}})(M);(function(a,E){var D=a.arrayMax,H=a.arrayMin,p=a.defined, +f=a.destroyObjectProperties,l=a.each,r=a.erase,n=a.merge,w=a.pick;a.PlotLineOrBand=function(a,e){this.axis=a;e&&(this.options=e,this.id=e.id)};a.PlotLineOrBand.prototype={render:function(){var f=this,e=f.axis,h=e.horiz,m=f.options,d=m.label,c=f.label,b=m.to,k=m.from,z=m.value,l=p(k)&&p(b),r=p(z),x=f.svgElem,K=!x,t=[],C=m.color,N=w(m.zIndex,0),q=m.events,t={"class":"highcharts-plot-"+(l?"band ":"line ")+(m.className||"")},A={},F=e.chart.renderer,G=l?"bands":"lines",g=e.log2lin;e.isLog&&(k=g(k),b=g(b), +z=g(z));r?(t={stroke:C,"stroke-width":m.width},m.dashStyle&&(t.dashstyle=m.dashStyle)):l&&(C&&(t.fill=C),m.borderWidth&&(t.stroke=m.borderColor,t["stroke-width"]=m.borderWidth));A.zIndex=N;G+="-"+N;(C=e.plotLinesAndBandsGroups[G])||(e.plotLinesAndBandsGroups[G]=C=F.g("plot-"+G).attr(A).add());K&&(f.svgElem=x=F.path().attr(t).add(C));if(r)t=e.getPlotLinePath(z,x.strokeWidth());else if(l)t=e.getPlotBandPath(k,b,m);else return;K&&t&&t.length?(x.attr({d:t}),q&&a.objectEach(q,function(a,b){x.on(b,function(a){q[b].apply(f, +[a])})})):x&&(t?(x.show(),x.animate({d:t})):(x.hide(),c&&(f.label=c=c.destroy())));d&&p(d.text)&&t&&t.length&&0this.max&& +e>this.max;if(m&&h)for(a&&(k=m.toString()===h.toString(),b=0),a=0;aA-h?A:A-h);else if(z)k[a]=Math.max(e,g+h+d>c?g:g+h);else return!1},C=function(a,c,d,g){var e;gc-b?e=!1:k[a]=gc-d/2?c-d-2:g-d/2;return e},p=function(a){var b=f;f=x;x=b;m=a},q=function(){!1!==t.apply(0,f)?!1!==C.apply(0,x)||m||(p(!0),q()):m?k.x=k.y=0:(p(!0),q())};(c.inverted||1q&&(h=!1);a=(e.series&& +e.series.yAxis&&e.series.yAxis.pos)+(e.plotY||0);a-=b.plotTop;c.push({target:e.isHeader?b.plotHeight+l:a,rank:e.isHeader?1:0,size:z.tt.getBBox().height+1,point:e,x:q,tt:t})}});this.cleanSplit();a.distribute(c,b.plotHeight+l);D(c,function(a){var c=a.point,d=c.series;a.tt.attr({visibility:void 0===a.pos?"hidden":"inherit",x:h||c.isHeader?a.x:c.plotX+b.plotLeft+n(f.distance,16),y:a.pos+b.plotTop,anchorX:c.isHeader?c.plotX+b.plotLeft:c.plotX+d.xAxis.pos,anchorY:c.isHeader?a.pos+b.plotTop-15:c.plotY+d.yAxis.pos})})}, +updatePosition:function(a){var e=this.chart,d=this.getLabel(),d=(this.options.positioner||this.getPosition).call(this,d.width,d.height,a);this.move(Math.round(d.x),Math.round(d.y||0),a.plotX+e.plotLeft,a.plotY+e.plotTop)},getDateFormat:function(a,m,d,c){var b=E("%m-%d %H:%M:%S.%L",m),k,h,f={millisecond:15,second:12,minute:9,hour:6,day:3},l="millisecond";for(h in e){if(a===e.week&&+E("%w",m)===d&&"00:00:00.000"===b.substr(6)){h="week";break}if(e[h]>a){h=l;break}if(f[h]&&b.substr(f[h])!=="01-01 00:00:00.000".substr(f[h]))break; +"week"!==h&&(l=h)}h&&(k=c[h]);return k},getXDateFormat:function(a,e,d){e=e.dateTimeLabelFormats;var c=d&&d.closestPointRange;return(c?this.getDateFormat(c,a.x,d.options.startOfWeek,e):e.day)||e.year},tooltipFooterHeaderFormatter:function(a,e){e=e?"footer":"header";var d=a.series,c=d.tooltipOptions,b=c.xDateFormat,k=d.xAxis,h=k&&"datetime"===k.options.type&&f(a.key),m=c[e+"Format"];h&&!b&&(b=this.getXDateFormat(a,c,k));h&&b&&D(a.point&&a.point.tooltipDateKeys||["key"],function(a){m=m.replace("{point."+ +a+"}","{point."+a+":"+b+"}")});return p(m,{point:a,series:d})},bodyFormatter:function(a){return l(a,function(a){var d=a.series.tooltipOptions;return(d[(a.point.formatPrefix||"point")+"Formatter"]||a.point.tooltipFormatter).call(a.point,d[(a.point.formatPrefix||"point")+"Format"])})}}})(M);(function(a){var E=a.addEvent,D=a.attr,H=a.charts,p=a.color,f=a.css,l=a.defined,r=a.each,n=a.extend,w=a.find,u=a.fireEvent,e=a.isObject,h=a.offset,m=a.pick,d=a.splat,c=a.Tooltip;a.Pointer=function(a,c){this.init(a, +c)};a.Pointer.prototype={init:function(a,d){this.options=d;this.chart=a;this.runChartClick=d.chart.events&&!!d.chart.events.click;this.pinchDown=[];this.lastValidTouch={};c&&(a.tooltip=new c(a,d.tooltip),this.followTouchMove=m(d.tooltip.followTouchMove,!0));this.setDOMEvents()},zoomOption:function(a){var b=this.chart,c=b.options.chart,d=c.zoomType||"",b=b.inverted;/touch/.test(a.type)&&(d=m(c.pinchType,d));this.zoomX=a=/x/.test(d);this.zoomY=d=/y/.test(d);this.zoomHor=a&&!b||d&&b;this.zoomVert=d&& +!b||a&&b;this.hasZoom=a||d},normalize:function(a,c){var b;b=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;c||(this.chartPosition=c=h(this.chart.container));return n(a,{chartX:Math.round(b.pageX-c.left),chartY:Math.round(b.pageY-c.top)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};r(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},findNearestKDPoint:function(a,c,d){var b;r(a,function(a){var k= +!(a.noSharedTooltip&&c)&&0>a.options.findNearestPointBy.indexOf("y");a=a.searchPoint(d,k);if((k=e(a,!0))&&!(k=!e(b,!0)))var k=b.distX-a.distX,h=b.dist-a.dist,m=(a.series.group&&a.series.group.zIndex)-(b.series.group&&b.series.group.zIndex),k=0<(0!==k&&c?k:0!==h?h:0!==m?m:b.series.index>a.series.index?-1:1);k&&(b=a)});return b},getPointFromEvent:function(a){a=a.target;for(var b;a&&!b;)b=a.point,a=a.parentNode;return b},getChartCoordinatesFromPoint:function(a,c){var b=a.series,d=b.xAxis,b=b.yAxis,k= +m(a.clientX,a.plotX);if(d&&b)return c?{chartX:d.len+d.pos-k,chartY:b.len+b.pos-a.plotY}:{chartX:k+d.pos,chartY:a.plotY+b.pos}},getHoverData:function(b,c,d,h,f,l,n){var k,z=[],x=n&&n.isBoosting;h=!(!h||!b);n=c&&!c.stickyTracking?[c]:a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking,!0)&&a.stickyTracking});c=(k=h?b:this.findNearestKDPoint(n,f,l))&&k.series;k&&(f&&!c.noSharedTooltip?(n=a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking, +!0)&&!a.noSharedTooltip}),r(n,function(a){var b=w(a.points,function(a){return a.x===k.x&&!a.isNull});e(b)&&(x&&(b=a.getPoint(b)),z.push(b))})):z.push(k));return{hoverPoint:k,hoverSeries:c,hoverPoints:z}},runPointActions:function(b,c){var d=this.chart,k=d.tooltip&&d.tooltip.options.enabled?d.tooltip:void 0,e=k?k.shared:!1,h=c||d.hoverPoint,f=h&&h.series||d.hoverSeries,f=this.getHoverData(h,f,d.series,!!c||f&&f.directTouch&&this.isDirectTouch,e,b,{isBoosting:d.isBoosting}),l,h=f.hoverPoint;l=f.hoverPoints; +c=(f=f.hoverSeries)&&f.tooltipOptions.followPointer;e=e&&f&&!f.noSharedTooltip;if(h&&(h!==d.hoverPoint||k&&k.isHidden)){r(d.hoverPoints||[],function(b){-1===a.inArray(b,l)&&b.setState()});r(l||[],function(a){a.setState("hover")});if(d.hoverSeries!==f)f.onMouseOver();d.hoverPoint&&d.hoverPoint.firePointEvent("mouseOut");if(!h.series)return;h.firePointEvent("mouseOver");d.hoverPoints=l;d.hoverPoint=h;k&&k.refresh(e?l:h,b)}else c&&k&&!k.isHidden&&(h=k.getAnchor([{}],b),k.updatePosition({plotX:h[0],plotY:h[1]})); +this.unDocMouseMove||(this.unDocMouseMove=E(d.container.ownerDocument,"mousemove",function(b){var c=H[a.hoverChartIndex];if(c)c.pointer.onDocumentMouseMove(b)}));r(d.axes,function(c){var d=m(c.crosshair.snap,!0),k=d?a.find(l,function(a){return a.series[c.coll]===c}):void 0;k||!d?c.drawCrosshair(b,k):c.hideCrosshair()})},reset:function(a,c){var b=this.chart,k=b.hoverSeries,e=b.hoverPoint,h=b.hoverPoints,m=b.tooltip,f=m&&m.shared?h:e;a&&f&&r(d(f),function(b){b.series.isCartesian&&void 0===b.plotX&& +(a=!1)});if(a)m&&f&&(m.refresh(f),e&&(e.setState(e.state,!0),r(b.axes,function(a){a.crosshair&&a.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();h&&r(h,function(a){a.setState()});if(k)k.onMouseOut();m&&m.hide(c);this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove());r(b.axes,function(a){a.hideCrosshair()});this.hoverX=b.hoverPoints=b.hoverPoint=null}},scaleGroups:function(a,c){var b=this.chart,d;r(b.series,function(k){d=a||k.getPlotBox();k.xAxis&&k.xAxis.zoomEnabled&&k.group&&(k.group.attr(d), +k.markerGroup&&(k.markerGroup.attr(d),k.markerGroup.clip(c?b.clipRect:null)),k.dataLabelsGroup&&k.dataLabelsGroup.attr(d))});b.clipRect.attr(c||b.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,h=this.zoomHor,m=this.zoomVert,f=b.plotLeft,l=b.plotTop,n=b.plotWidth,q=b.plotHeight,A,F=this.selectionMarker,G=this.mouseDownX, +g=this.mouseDownY,v=c.panKey&&a[c.panKey+"Key"];F&&F.touch||(df+n&&(d=f+n),el+q&&(e=l+q),this.hasDragged=Math.sqrt(Math.pow(G-d,2)+Math.pow(g-e,2)),10u.max&&(f=u.max-x,v=!0);v?(F-=.8*(F-m[b][0]),q||(g-=.8*(g-m[b][1])),l()):m[b]=[F,g];C||(h[b]=w-r,h[n]=x);h=C?1/t:t;e[n]=x;e[b]=f;p[C?a?"scaleY":"scaleX":"scale"+k]=t;p["translate"+k]=h*r+(F-h*A)},pinch:function(a){var n=this,r=n.chart,u=n.pinchDown,e=a.touches,h=e.length,m=n.lastValidTouch, +d=n.hasZoom,c=n.selectionMarker,b={},k=1===h&&(n.inClass(a.target,"highcharts-tracker")&&r.runTrackerClick||n.runChartClick),z={};1c-6&&h(q||c.spacingBox.width-2*t-d.x)&&(this.itemX=t,this.itemY+=F+this.lastLineHeight+A,this.lastLineHeight=0);this.maxItemWidth=Math.max(this.maxItemWidth,m);this.lastItemY=F+this.itemY+A;this.lastLineHeight=Math.max(b,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=m:(this.itemY+=F+b+A,this.lastLineHeight=b);this.offsetWidth=q||Math.max((e?this.itemX-t-(a.checkbox?0:p):m)+t,this.offsetWidth)}, +getAllItems:function(){var a=[];f(this.chart.series,function(c){var b=c&&c.options;c&&w(b.showInLegend,p(b.linkedTo)?!1:void 0,!0)&&(a=a.concat(c.legendItems||("point"===b.legendType?c.data:c)))});return a},getAlignment:function(){var a=this.options;return a.floating?"":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)},adjustMargins:function(a,c){var b=this.chart,d=this.options,e=this.getAlignment();e&&f([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(k,h){k.test(e)&& +!p(a[h])&&(b[r[h]]=Math.max(b[r[h]],b.legend[(h+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][h]*d[h%2?"x":"y"]+w(d.margin,12)+c[h]+(0===h?b.titleOffset+b.options.title.margin:0)))})},render:function(){var a=this,c=a.chart,b=c.renderer,k=a.group,h,m,l,x,p=a.box,t=a.options,C=a.padding;a.itemX=C;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;k||(a.group=k=b.g("legend").attr({zIndex:7}).add(),a.contentGroup=b.g().attr({zIndex:1}).add(k),a.scrollGroup=b.g().add(a.contentGroup));a.renderTitle(); +h=a.getAllItems();e(h,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});t.reversed&&h.reverse();a.allItems=h;a.display=m=!!h.length;a.lastLineHeight=0;f(h,function(b){a.renderItem(b)});l=(t.width||a.offsetWidth)+C;x=a.lastItemY+a.lastLineHeight+a.titleHeight;x=a.handleOverflow(x);x+=C;p||(a.box=p=b.rect().addClass("highcharts-legend-box").attr({r:t.borderRadius}).add(k),p.isNew=!0);p.attr({stroke:t.borderColor,"stroke-width":t.borderWidth||0,fill:t.backgroundColor|| +"none"}).shadow(t.shadow);0b&&!1!==t.enabled?(this.clipHeight=l=Math.max(b-20-this.titleHeight-m,0),this.currentPage=w(this.currentPage,1),this.fullHeight=a,f(G,function(a,b){var c=a._legendItemPos[1],d=Math.round(a.legendItem.getBBox().height),g=A.length;if(!g||c-A[g-1]>l&&(F||c)!==A[g-1])A.push(F||c),g++;a.pageIx=g-1;F&&(G[b-1].pageIx=g-1);b===G.length-1&&c+d-A[g-1]>l&&(A.push(c),a.pageIx=g);c!==F&&(F=c)}),n||(n=c.clipRect=d.clipRect(0,m,9999,0),c.contentGroup.clip(n)),g(l),q||(this.nav=q=d.g().attr({zIndex:1}).add(this.group), +this.up=d.symbol("triangle",0,0,r,r).on("click",function(){c.scroll(-1,p)}).add(q),this.pager=d.text("",15,10).addClass("highcharts-legend-navigation").css(t.style).add(q),this.down=d.symbol("triangle-down",0,0,r,r).on("click",function(){c.scroll(1,p)}).add(q)),c.scroll(0),a=b):q&&(g(),this.nav=q.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a},scroll:function(a,c){var b=this.pages,d=b.length;a=this.currentPage+a;var e=this.clipHeight,h=this.options.navigation,f=this.pager, +m=this.padding;a>d&&(a=d);0b&&(f=typeof a[0],"string"===f?e.name=a[0]:"number"===f&&(e.x=a[0]),k++);l=d.value;)d=h[++f];d&&d.color&&!this.options.color&&(this.color=d.color);return d},destroy:function(){var a=this.series.chart,h=a.hoverPoints,f;a.pointCount--;h&&(this.setState(),p(h,this),h.length||(a.hoverPoints=null));if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)u(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(f in this)this[f]=null},destroyElements:function(){for(var a=["graphic","dataLabel", +"dataLabelUpper","connector","shadowGroup"],h,f=6;f--;)h=a[f],this[h]&&(this[h]=this[h].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var e=this.series,f=e.tooltipOptions,d=w(f.valueDecimals,""),c=f.valuePrefix||"",b=f.valueSuffix||"";D(e.pointArrayMap||["y"],function(e){e="{point."+ +e;if(c||b)a=a.replace(e+"}",c+e+"}"+b);a=a.replace(e+"}",e+":,."+d+"f}")});return l(a,{point:this,series:this.series})},firePointEvent:function(a,h,m){var d=this,c=this.series.options;(c.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();"click"===a&&c.allowPointSelect&&(m=function(a){d.select&&d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});f(this,a,h,m)},visible:!0}})(M);(function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.correctFloat, +l=a.Date,r=a.defaultOptions,n=a.defaultPlotOptions,w=a.defined,u=a.each,e=a.erase,h=a.extend,m=a.fireEvent,d=a.grep,c=a.isArray,b=a.isNumber,k=a.isString,z=a.merge,B=a.objectEach,I=a.pick,x=a.removeEvent,K=a.splat,t=a.SVGElement,C=a.syncTimeout,N=a.win;a.Series=a.seriesType("line",null,{lineWidth:2,allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{lineWidth:0,lineColor:"#ffffff",radius:4,states:{hover:{animation:{duration:50},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:"#cccccc", +lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{align:"center",formatter:function(){return null===this.y?"":a.numberFormat(this.y,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,softThreshold:!0,states:{hover:{animation:{duration:50},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3,findNearestPointBy:"x"}, +{isCartesian:!0,pointClass:a.Point,sorted:!0,requireSorting:!0,directTouch:!1,axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],coll:"series",init:function(a,b){var c=this,d,g=a.series,e;c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();h(c,{name:b.name,state:"",visible:!1!==b.visible,selected:!0===b.selected});d=b.events;B(d,function(a,b){E(c,b,a)});if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor(); +c.getSymbol();u(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);c.isCartesian&&(a.hasCartesianSeries=!0);g.length&&(e=g[g.length-1]);c._i=I(e&&e._i,-1)+1;a.orderSeries(this.insert(g))},insert:function(a){var c=this.options.index,d;if(b(c)){for(d=a.length;d--;)if(c>=I(a[d].options.index,a[d]._i)){a.splice(d+1,0,this);break}-1===d&&a.unshift(this);d+=1}else a.push(this);return I(d,a.length-1)},bindAxes:function(){var b=this,c=b.options,d=b.chart,e;u(b.axisTypes||[],function(g){u(d[g], +function(a){e=a.options;if(c[g]===e.index||void 0!==c[g]&&c[g]===e.id||void 0===c[g]&&0===e.index)b.insert(a.series),b[g]=a,a.isDirty=!0});b[g]||b.optionalAxis===g||a.error(18,!0)})},updateParallelArrays:function(a,c){var d=a.series,e=arguments,g=b(c)?function(b){var g="y"===b&&d.toYData?d.toYData(a):a[b];d[b+"Data"][c]=g}:function(a){Array.prototype[c].apply(d[a+"Data"],Array.prototype.slice.call(e,2))};u(d.parallelArrays,g)},autoIncrement:function(){var b=this.options,c=this.xIncrement,d,e=b.pointIntervalUnit, +g=0,c=I(c,b.pointStart,0);this.pointInterval=d=I(this.pointInterval,b.pointInterval,1);e&&(b=new l(c),"day"===e?b=+b[l.hcSetDate](b[l.hcGetDate]()+d):"month"===e?b=+b[l.hcSetMonth](b[l.hcGetMonth]()+d):"year"===e&&(b=+b[l.hcSetFullYear](b[l.hcGetFullYear]()+d)),l.hcHasTimeZone&&(g=a.getTZOffset(b)-a.getTZOffset(c)),d=b-c+g);this.xIncrement=c+d;return c},setOptions:function(a){var b=this.chart,c=b.options,d=c.plotOptions,g=(b.userOptions||{}).plotOptions||{},e=d[this.type];this.userOptions=a;b=z(e, +d.series,a);this.tooltipOptions=z(r.tooltip,r.plotOptions.series&&r.plotOptions.series.tooltip,r.plotOptions[this.type].tooltip,c.tooltip.userOptions,d.series&&d.series.tooltip,d[this.type].tooltip,a.tooltip);this.stickyTracking=I(a.stickyTracking,g[this.type]&&g[this.type].stickyTracking,g.series&&g.series.stickyTracking,this.tooltipOptions.shared&&!this.noSharedTooltip?!0:b.stickyTracking);null===e.marker&&delete b.marker;this.zoneAxis=b.zoneAxis;a=this.zones=(b.zones||[]).slice();!b.negativeColor&& +!b.negativeFillColor||b.zones||a.push({value:b[this.zoneAxis+"Threshold"]||b.threshold||0,className:"highcharts-negative",color:b.negativeColor,fillColor:b.negativeFillColor});a.length&&w(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return b},getCyclic:function(a,b,c){var d,g=this.chart,e=this.userOptions,k=a+"Index",h=a+"Counter",q=c?c.length:I(g.options.chart[a+"Count"],g[a+"Count"]);b||(d=I(e[k],e["_"+k]),w(d)||(g.series.length||(g[h]=0),e["_"+k]=d=g[h]%q,g[h]+=1), +c&&(b=c[d]));void 0!==d&&(this[k]=d);this[a]=b},getColor:function(){this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color||n[this.type].color,this.chart.options.colors)},getSymbol:function(){this.getCyclic("symbol",this.options.marker.symbol,this.chart.options.symbols)},drawLegendSymbol:a.LegendSymbolMixin.drawLineMarker,setData:function(d,e,h,f){var g=this,q=g.points,m=q&&q.length||0,l,A=g.options,t=g.chart,x=null,n=g.xAxis,p=A.turboThreshold,z=this.xData,F= +this.yData,C=(l=g.pointArrayMap)&&l.length;d=d||[];l=d.length;e=I(e,!0);if(!1!==f&&l&&m===l&&!g.cropped&&!g.hasGroupedData&&g.visible)u(d,function(a,b){q[b].update&&a!==A.data[b]&&q[b].update(a,!1,null,!1)});else{g.xIncrement=null;g.colorCounter=0;u(this.parallelArrays,function(a){g[a+"Data"].length=0});if(p&&l>p){for(h=0;null===x&&hf||this.forceCrop))if(c[e-1]z)c=[],d=[];else if(c[0]z)g=this.cropData(this.xData,this.yData,p,z),c=g.xData,d=g.yData,g=g.start,k=!0;for(f=c.length|| +1;--f;)e=x?m(c[f])-m(c[f-1]):c[f]-c[f-1],0e&&n&&(a.error(15),n=!1);this.cropped=k;this.cropStart=g;this.processedXData=c;this.processedYData=d;this.closestPointRange=h},cropData:function(a,b,c,d){var g=a.length,e=0,k=g,h=I(this.cropShoulder,1),f;for(f=0;f=c){e=Math.max(0,f-h);break}for(c=f;cd){k=c+h;break}return{xData:a.slice(e,k),yData:b.slice(e,k),start:e,end:k}},generatePoints:function(){var a=this.options,b=a.data,c=this.data,d,g=this.processedXData, +e=this.processedYData,k=this.pointClass,h=g.length,f=this.cropStart||0,m,l=this.hasGroupedData,a=a.keys,t,x=[],n;c||l||(c=[],c.length=b.length,c=this.data=c);a&&l&&(this.options.keys=!1);for(n=0;n=f&&(e[n-1]||l)<=q,m&&l)if(m=t.length)for(;m--;)"number"===typeof t[m]&&(g[h++]=t[m]);else g[h++]=t;this.dataMin= +p(g);this.dataMax=H(g)},translate:function(){this.processedXData||this.processData();this.generatePoints();var a=this.options,c=a.stacking,d=this.xAxis,e=d.categories,g=this.yAxis,k=this.points,h=k.length,m=!!this.modifyValue,l=a.pointPlacement,t="between"===l||b(l),n=a.threshold,x=a.startFromThreshold?n:0,p,z,C,r,u=Number.MAX_VALUE;"between"===l&&(l=.5);b(l)&&(l*=I(a.pointRange||d.pointRange));for(a=0;a=K&&(B.isNull=!0);B.plotX=p=f(Math.min(Math.max(-1E5,d.translate(N,0,0,0,1,l,"flags"===this.type)),1E5));c&&this.visible&&!B.isNull&&D&&D[N]&&(r=this.getStackIndicator(r,N,this.index),E=D[N],K=E.points[r.key],z=K[0],K=K[1],z===x&&r.key===D[N].base&&(z=I(n,g.min)),g.positiveValuesOnly&&0>=z&&(z=null),B.total=B.stackTotal=E.total,B.percentage=E.total&&B.y/E.total*100,B.stackY=K,E.setOffset(this.pointXOffset||0,this.barW||0));B.yBottom=w(z)?g.translate(z,0,1,0,1): +null;m&&(K=this.modifyValue(K,B));B.plotY=z="number"===typeof K&&Infinity!==K?Math.min(Math.max(-1E5,g.translate(K,0,1,0,1)),1E5):void 0;B.isInside=void 0!==z&&0<=z&&z<=g.len&&0<=p&&p<=d.len;B.clientX=t?f(d.translate(N,0,0,0,1,l)):p;B.negative=B.y<(n||0);B.category=e&&void 0!==e[B.x]?e[B.x]:B.x;B.isNull||(void 0!==C&&(u=Math.min(u,Math.abs(p-C))),C=p);B.zone=this.zones.length&&B.getZone()}this.closestPointRangePx=u},getValidPoints:function(a,b){var c=this.chart;return d(a||this.points||[],function(a){return b&& +!c.isInsidePlot(a.plotX,a.plotY,c.inverted)?!1:!a.isNull})},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,g=b.inverted,e=this.clipBox,k=e||b.clipBox,h=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,k.height,c.xAxis,c.yAxis].join(),f=b[h],q=b[h+"m"];f||(a&&(k.width=0,g&&(k.x=b.plotSizeX),b[h+"m"]=q=d.clipRect(g?b.plotSizeX+99:-99,g?-b.plotLeft:-b.plotTop,99,g?b.chartWidth:b.chartHeight)),b[h]=f=d.clipRect(k),f.count={length:0});a&&!f.count[this.index]&&(f.count[this.index]= +!0,f.count.length+=1);!1!==c.clip&&(this.group.clip(a||e?f:b.clipRect),this.markerGroup.clip(q),this.sharedClipKey=h);a||(f.count[this.index]&&(delete f.count[this.index],--f.count.length),0===f.count.length&&h&&b[h]&&(e||(b[h]=b[h].destroy()),b[h+"m"]&&(b[h+"m"]=b[h+"m"].destroy())))},animate:function(a){var b=this.chart,c=D(this.options.animation),d;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX,x:0},c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99,x:0},c),this.animate= +null)},afterAnimate:function(){this.setClip();m(this,"afterAnimate");this.finishedAnimating=!0},drawPoints:function(){var a=this.points,b=this.chart,c,d,g,e,k=this.options.marker,h,f,l,m=this[this.specialGroup]||this.markerGroup,t,n=I(k.enabled,this.xAxis.isRadial?!0:null,this.closestPointRangePx>=2*k.radius);if(!1!==k.enabled||this._hasPointMarkers)for(c=0;ce&&b.shadow));k&&(k.startX=c.xMap,k.isArea=c.isArea)})}, +applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,k,h=this.clips||[],f,m=this.graph,l=this.area,t=Math.max(b.chartWidth,b.chartHeight),n=this[(this.zoneAxis||"y")+"Axis"],x,p,z=b.inverted,C,r,w,B,K=!1;d.length&&(m||l)&&n&&void 0!==n.min&&(p=n.reversed,C=n.horiz,m&&m.hide(),l&&l.hide(),x=n.getExtremes(),u(d,function(d,g){e=p?C?b.plotWidth:0:C?0:n.toPixels(x.min);e=Math.min(Math.max(I(k,e),0),t);k=Math.min(Math.max(Math.round(n.toPixels(I(d.value,x.max),!0)),0),t);K&&(e=k=n.toPixels(x.max)); +r=Math.abs(e-k);w=Math.min(e,k);B=Math.max(e,k);n.isXAxis?(f={x:z?B:w,y:0,width:r,height:t},C||(f.x=b.plotHeight-f.x)):(f={x:0,y:z?B:w,width:t,height:r},C&&(f.y=b.plotWidth-f.y));z&&c.isVML&&(f=n.isXAxis?{x:0,y:p?w:B,height:f.width,width:b.chartWidth}:{x:f.y-b.plotLeft-b.spacingBox.x,y:0,width:f.height,height:b.chartHeight});h[g]?h[g].animate(f):(h[g]=c.clipRect(f),m&&a["zone-graph-"+g].clip(h[g]),l&&a["zone-area-"+g].clip(h[g]));K=d.value>x.max}),this.clips=h)},invertGroups:function(a){function b(){u(["group", +"markerGroup"],function(b){c[b]&&(d.renderer.isVML&&c[b].attr({width:c.yAxis.len,height:c.xAxis.len}),c[b].width=c.yAxis.len,c[b].height=c.xAxis.len,c[b].invert(a))})}var c=this,d=c.chart,e;c.xAxis&&(e=E(d,"resize",b),E(c,"destroy",e),b(a),c.invertGroups=b)},plotGroup:function(a,b,c,d,e){var g=this[a],k=!g;k&&(this[a]=g=this.chart.renderer.g().attr({zIndex:d||.1}).add(e));g.addClass("highcharts-"+b+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(w(this.colorIndex)?"highcharts-color-"+ +this.colorIndex+" ":"")+(this.options.className||"")+(g.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0);g.attr({visibility:c})[k?"attr":"animate"](this.getPlotBox());return g},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;a.inverted&&(b=c,c=this.xAxis);return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=!!a.animate&&b.renderer.isSVG&&D(d.animation).duration,k=a.visible?"inherit": +"hidden",h=d.zIndex,f=a.hasRendered,m=b.seriesGroup,l=b.inverted;c=a.plotGroup("group","series",k,h,m);a.markerGroup=a.plotGroup("markerGroup","markers",k,h,m);e&&a.animate(!0);c.inverted=a.isCartesian?l:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(l);!1===d.clip||a.sharedClipKey||f||c.clip(b.clipRect);e&&a.animate();f||(a.animationTimeout=C(function(){a.afterAnimate()}, +e));a.isDirty=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirty||this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:I(d&&d.left,a.plotLeft),translateY:I(e&&e.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree},kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?c.len-a.chartY+ +c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(c,d,e){var g,k;if(k=c&&c.length)return g=b.kdAxisArray[d%e],c.sort(function(a,b){return a[g]-b[g]}),k=Math.floor(k/2),{point:c[k],left:a(c.slice(0,k),d+1,e),right:a(c.slice(k+1),d+1,e)}}this.buildingKdTree=!0;var b=this,c=-1l?"left":"right";t=0>l?"right":"left";b[q]&&(q=c(a,b[q],g+1,f),n=q[h]x;)q--;this.updateParallelArrays(m,"splice",q,0,0);this.updateParallelArrays(m,q);g&&m.name&&(g[x]=m.name);l.splice(q,0,a);n&&(this.data.splice(q,0,null),this.processData());"point"===e.legendType&&this.generatePoints();c&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(m,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&f.redraw(d)},removePoint:function(a,b,c){var d=this,e=d.data,h=e[a],f=d.points,g=d.chart,l=function(){f&&f.length===e.length&& +f.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(h||{series:d},"splice",a,1);h&&h.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&g.redraw()};x(c,g);b=k(b,!0);h?h.firePointEvent("remove",null,l):l()},remove:function(a,b,c){function d(){e.destroy();h.isDirtyLegend=h.isDirtyBox=!0;h.linkSeries();k(a,!0)&&h.redraw(b)}var e=this,h=e.chart;!1!==c?u(e,"remove",null,d):d()},update:function(a,b){var d=this,e=d.chart,h=d.userOptions,f=d.oldType||d.type,l=a.type||h.type||e.options.chart.type, +g=I[f].prototype,m,n=["group","markerGroup","dataLabelsGroup"],t=["navigatorSeries","baseSeries"],x=d.finishedAnimating&&{animation:!1};if(Object.keys&&"data"===Object.keys(a).toString())return this.setData(a.data,b);t=n.concat(t);r(t,function(a){t[a]=d[a];delete d[a]});a=c(h,x,{index:d.index,pointStart:d.xData[0]},{data:d.options.data},a);d.remove(!1,null,!1);for(m in g)d[m]=void 0;w(d,I[l||f].prototype);r(t,function(a){d[a]=t[a]});d.init(e,a);a.zIndex!==h.zIndex&&r(n,function(b){d[b]&&d[b].attr({zIndex:a.zIndex})}); +d.oldType=f;e.linkSeries();k(b,!0)&&e.redraw(!1)}});w(H.prototype,{update:function(a,b){var d=this.chart;a=d.options[this.coll][this.options.index]=c(this.userOptions,a);this.destroy(!0);this.init(d,w(a,{events:void 0}));d.isDirtyBox=!0;k(b,!0)&&d.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,e=this.series,h=e.length;h--;)e[h]&&e[h].remove(!1);n(b.axes,this);n(b[c],this);d(b.options[c])?b.options[c].splice(this.options.index,1):delete b.options[c];r(b[c],function(a,b){a.options.index= +b});this.destroy();b.isDirtyBox=!0;k(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}})})(M);(function(a){var E=a.color,D=a.each,H=a.map,p=a.pick,f=a.Series,l=a.seriesType;l("area","line",{softThreshold:!1,threshold:0},{singleStacks:!1,getStackPoints:function(f){var l=[],r=[],u=this.xAxis,e=this.yAxis,h=e.stacks[this.stackKey],m={},d=this.index,c=e.series,b=c.length,k,z=p(e.options.reversedStacks,!0)?1:-1,B;f=f||this.points; +if(this.options.stacking){for(B=0;Ba&&w>l?(w=Math.max(a,l),e=2*l-w):wp&&e>l?(e=Math.max(p,l),w=2*l-e):e=Math.abs(h)&&.5a.closestPointRange*a.xAxis.transA,d=a.borderWidth=r(f.borderWidth,d?0:1),c=a.yAxis,b=f.threshold,k=a.translatedThreshold=c.getThreshold(b),l=r(f.minPointLength,5),p=a.getColumnMetrics(),u=p.width,x=a.barW=Math.max(u,1+2*d),w=a.pointXOffset=p.offset;h.inverted&&(k-=.5);f.pointPadding&&(x=Math.ceil(x));n.prototype.translate.apply(a);H(a.points,function(d){var e=r(d.yBottom,k),f=999+Math.abs(e),f=Math.min(Math.max(-f,d.plotY),c.len+f),m=d.plotX+w,n=x,t=Math.min(f,e),p,g=Math.max(f,e)-t;l&& +Math.abs(g)l?e-l:k-(p?l:0));d.barX=m;d.pointWidth=u;d.tooltipPos=h.inverted?[c.len+c.pos-h.plotLeft-f,a.xAxis.len-m-n/2,g]:[m+n/2,f+c.pos-h.plotTop,g];d.shapeType="rect";d.shapeArgs=a.crispCol.apply(a,d.isNull?[m,k,n,0]:[m,t,n,g])})},getSymbol:a.noop,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,drawGraph:function(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")}, +pointAttribs:function(a,f){var e=this.options,d,c=this.pointAttrToOptions||{};d=c.stroke||"borderColor";var b=c["stroke-width"]||"borderWidth",k=a&&a.color||this.color,h=a&&a[d]||e[d]||this.color||k,n=a&&a[b]||e[b]||this[b]||0,c=e.dashStyle;a&&this.zones.length&&(k=a.getZone(),k=a.options.color||k&&k.color||this.color);f&&(a=l(e.states[f],a.options.states&&a.options.states[f]||{}),f=a.brightness,k=a.color||void 0!==f&&D(k).brighten(a.brightness).get()||k,h=a[d]||h,n=a[b]||n,c=a.dashStyle||c);d={fill:k, +stroke:h,"stroke-width":n};c&&(d.dashstyle=c);return d},drawPoints:function(){var a=this,h=this.chart,m=a.options,d=h.renderer,c=m.animationLimit||250,b;H(a.points,function(e){var k=e.graphic;if(f(e.plotY)&&null!==e.y){b=e.shapeArgs;if(k)k[h.pointCounte;++e)h=w[e],a=2>e||2===e&&/%$/.test(h),w[e]=p(h,[n,l,u,w[2]][e])+(a?r:0);w[3]>w[2]&&(w[3]=w[2]);return w},getStartAndEndRadians:function(a,l){a=D(a)?a:0;l=D(l)&&l>a&&360>l-a?l:a+360;return{start:E*(a+-90),end:E*(l+-90)}}}})(M);(function(a){var E=a.addEvent,D=a.CenteredSeriesMixin,H=a.defined,p=a.each,f=a.extend,l=D.getStartAndEndRadians,r=a.inArray,n=a.noop,w=a.pick,u=a.Point,e=a.Series,h=a.seriesType,m=a.setAnimation;h("pie","line",{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30, +enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,states:{hover:{brightness:.1,shadow:!1}}},{isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttribs:a.seriesTypes.column.prototype.pointAttribs,animate:function(a){var c= +this,b=c.points,d=c.startAngleRad;a||(p(b,function(a){var b=a.graphic,e=a.shapeArgs;b&&(b.attr({r:a.startR||c.center[3]/2,start:d,end:d}),b.animate({r:e.r,start:e.start,end:e.end},c.options.animation))}),c.animate=null)},updateTotals:function(){var a,c=0,b=this.points,e=b.length,f,h=this.options.ignoreHiddenPoint;for(a=0;a1.5*Math.PI?m-=2*Math.PI:m<-Math.PI/2&&(m+=2*Math.PI);G.slicedTranslation={translateX:Math.round(Math.cos(m)*d),translateY:Math.round(Math.sin(m)*d)};h=Math.cos(m)*a[2]/ +2;u=Math.sin(m)*a[2]/2;G.tooltipPos=[a[0]+.7*h,a[1]+.7*u];G.half=m<-Math.PI/2||m>Math.PI/2?1:0;G.angle=m;f=Math.min(e,G.labelDistance/5);G.labelPos=[a[0]+h+Math.cos(m)*G.labelDistance,a[1]+u+Math.sin(m)*G.labelDistance,a[0]+h+Math.cos(m)*f,a[1]+u+Math.sin(m)*f,a[0]+h,a[1]+u,0>G.labelDistance?"center":G.half?"right":"left",m]}},drawGraph:null,drawPoints:function(){var a=this,c=a.chart.renderer,b,e,h,l,m=a.options.shadow;m&&!a.shadowGroup&&(a.shadowGroup=c.g("shadow").add(a.group));p(a.points,function(d){e= +d.graphic;if(d.isNull)e&&(d.graphic=e.destroy());else{l=d.shapeArgs;b=d.getTranslate();var k=d.shadowGroup;m&&!k&&(k=d.shadowGroup=c.g("shadow").add(a.shadowGroup));k&&k.attr(b);h=a.pointAttribs(d,d.selected&&"select");e?e.setRadialReference(a.center).attr(h).animate(f(l,b)):(d.graphic=e=c[d.shapeType](l).setRadialReference(a.center).attr(b).add(a.group),d.visible||e.attr({visibility:"hidden"}),e.attr(h).attr({"stroke-linejoin":"round"}).shadow(m,k));e.addClass(d.getClassName())}})},searchPoint:n, +sortByAngle:function(a,c){a.sort(function(a,d){return void 0!==a.angle&&(d.angle-a.angle)*c})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,getCenter:D.getCenter,getSymbol:n},{init:function(){u.prototype.init.apply(this,arguments);var a=this,c;a.name=w(a.name,"Slice");c=function(b){a.slice("select"===b.type)};E(a,"select",c);E(a,"unselect",c);return a},isValid:function(){return a.isNumber(this.y,!0)&&0<=this.y},setVisible:function(a,c){var b=this,d=b.series,e=d.chart,f=d.options.ignoreHiddenPoint; +c=w(c,f);a!==b.visible&&(b.visible=b.options.visible=a=void 0===a?!b.visible:a,d.options.data[r(b,d.data)]=b.options,p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)}),b.legendItem&&e.legend.colorizeItem(b,a),a||"hover"!==b.state||b.setState(""),f&&(d.isDirty=!0),c&&e.redraw())},slice:function(a,c,b){var d=this.series;m(b,d.chart);w(c,!0);this.sliced=this.options.sliced=H(a)?a:!this.sliced;d.options.data[r(this,d.data)]=this.options;this.graphic.animate(this.getTranslate()); +this.shadowGroup&&this.shadowGroup.animate(this.getTranslate())},getTranslate:function(){return this.sliced?this.slicedTranslation:{translateX:0,translateY:0}},haloPath:function(a){var c=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.x,c.y,c.r+a,c.r+a,{innerR:this.shapeArgs.r-1,start:c.start,end:c.end})}})})(M);(function(a){var E=a.addEvent,D=a.arrayMax,H=a.defined,p=a.each,f=a.extend,l=a.format,r=a.map,n=a.merge,w=a.noop,u=a.pick,e=a.relativeLength,h= +a.Series,m=a.seriesTypes,d=a.stableSort;a.distribute=function(a,b){function c(a,b){return a.target-b.target}var e,f=!0,h=a,l=[],m;m=0;for(e=a.length;e--;)m+=a[e].size;if(m>b){d(a,function(a,b){return(b.rank||0)-(a.rank||0)});for(m=e=0;m<=b;)m+=a[e].size,e++;l=a.splice(e-1,a.length)}d(a,c);for(a=r(a,function(a){return{size:a.size,targets:[a.target],align:u(a.align,.5)}});f;){for(e=a.length;e--;)f=a[e],m=(Math.min.apply(0,f.targets)+Math.max.apply(0,f.targets))/2,f.pos=Math.min(Math.max(0,m-f.size* +f.align),b-f.size);e=a.length;for(f=!1;e--;)0a[e].pos&&(a[e-1].size+=a[e].size,a[e-1].targets=a[e-1].targets.concat(a[e].targets),a[e-1].align=.5,a[e-1].pos+a[e-1].size>b&&(a[e-1].pos=b-a[e-1].size),a.splice(e,1),f=!0)}e=0;p(a,function(a){var b=0;p(a.targets,function(){h[e].pos=a.pos+b;b+=h[e].size;e++})});h.push.apply(h,l);d(h,c)};h.prototype.drawDataLabels=function(){function c(a,b){var c=b.filter;return c?(b=c.operator,a=a[c.property],c=c.value,"\x3e"===b&&a>c||"\x3c"=== +b&&a=c||"\x3c\x3d"===b&&a<=c||"\x3d\x3d"===b&&a==c||"\x3d\x3d\x3d"===b&&a===c?!0:!1):!0}var b=this,d=b.options,e=d.dataLabels,f=b.points,h,m,r=b.hasRendered||0,t,w,D=u(e.defer,!!d.animation),q=b.chart.renderer;if(e.enabled||b._hasPointLabels)b.dlProcessOptions&&b.dlProcessOptions(e),w=b.plotGroup("dataLabelsGroup","data-labels",D&&!r?"hidden":"visible",e.zIndex||6),D&&(w.attr({opacity:+r}),r||E(b,"afterAnimate",function(){b.visible&&w.show(!0);w[d.animation?"animate":"attr"]({opacity:1}, +{duration:200})})),m=e,p(f,function(f){var k,p=f.dataLabel,g,x,r=f.connector,z=!p,C;h=f.dlOptions||f.options&&f.options.dataLabels;(k=u(h&&h.enabled,m.enabled)&&!f.isNull)&&(k=!0===c(f,h||e));k&&(e=n(m,h),g=f.getLabelConfig(),C=e[f.formatPrefix+"Format"]||e.format,t=H(C)?l(C,g):(e[f.formatPrefix+"Formatter"]||e.formatter).call(g,e),C=e.style,g=e.rotation,C.color=u(e.color,C.color,b.color,"#000000"),"contrast"===C.color&&(f.contrastColor=q.getContrast(f.color||b.color),C.color=e.inside||0>u(f.labelDistance, +e.distance)||d.stacking?f.contrastColor:"#000000"),d.cursor&&(C.cursor=d.cursor),x={fill:e.backgroundColor,stroke:e.borderColor,"stroke-width":e.borderWidth,r:e.borderRadius||0,rotation:g,padding:e.padding,zIndex:1},a.objectEach(x,function(a,b){void 0===a&&delete x[b]}));!p||k&&H(t)?k&&H(t)&&(p?x.text=t:(p=f.dataLabel=g?q.text(t,0,-9999).addClass("highcharts-data-label"):q.label(t,0,-9999,e.shape,null,null,e.useHTML,null,"data-label"),p.addClass(" highcharts-data-label-color-"+f.colorIndex+" "+(e.className|| +"")+(e.useHTML?"highcharts-tracker":""))),p.attr(x),p.css(C).shadow(e.shadow),p.added||p.add(w),b.alignDataLabel(f,p,e,null,z)):(f.dataLabel=p=p.destroy(),r&&(f.connector=r.destroy()))})};h.prototype.alignDataLabel=function(a,b,d,e,h){var c=this.chart,k=c.inverted,l=u(a.dlBox&&a.dlBox.centerX,a.plotX,-9999),m=u(a.plotY,-9999),n=b.getBBox(),p,q=d.rotation,r=d.align,w=this.visible&&(a.series.forceDL||c.isInsidePlot(l,Math.round(m),k)||e&&c.isInsidePlot(l,k?e.x+1:e.y+e.height-1,k)),z="justify"===u(d.overflow, +"justify");if(w&&(p=d.style.fontSize,p=c.renderer.fontMetrics(p,b).b,e=f({x:k?this.yAxis.len-m:l,y:Math.round(k?this.xAxis.len-l:m),width:0,height:0},e),f(d,{width:n.width,height:n.height}),q?(z=!1,l=c.renderer.rotCorr(p,q),l={x:e.x+d.x+e.width/2+l.x,y:e.y+d.y+{top:0,middle:.5,bottom:1}[d.verticalAlign]*e.height},b[h?"attr":"animate"](l).attr({align:r}),m=(q+720)%360,m=180m,"left"===r?l.y-=m?n.height:0:"center"===r?(l.x-=n.width/2,l.y-=n.height/2):"right"===r&&(l.x-=n.width,l.y-=m?0:n.height)): +(b.align(d,null,e),l=b.alignAttr),z?a.isLabelJustified=this.justifyDataLabel(b,d,l,n,e,h):u(d.crop,!0)&&(w=c.isInsidePlot(l.x,l.y)&&c.isInsidePlot(l.x+n.width,l.y+n.height)),d.shape&&!q))b[h?"attr":"animate"]({anchorX:k?c.plotWidth-a.plotY:a.plotX,anchorY:k?c.plotHeight-a.plotX:a.plotY});w||(b.attr({y:-9999}),b.placed=!1)};h.prototype.justifyDataLabel=function(a,b,d,e,f,h){var c=this.chart,k=b.align,l=b.verticalAlign,m,n,p=a.box?0:a.padding||0;m=d.x+p;0>m&&("right"===k?b.align="left":b.x=-m,n=!0); +m=d.x+e.width-p;m>c.plotWidth&&("left"===k?b.align="right":b.x=c.plotWidth-m,n=!0);m=d.y+p;0>m&&("bottom"===l?b.verticalAlign="top":b.y=-m,n=!0);m=d.y+e.height-p;m>c.plotHeight&&("top"===l?b.verticalAlign="bottom":b.y=c.plotHeight-m,n=!0);n&&(a.placed=!h,a.align(b,null,f));return n};m.pie&&(m.pie.prototype.drawDataLabels=function(){var c=this,b=c.data,d,e=c.chart,f=c.options.dataLabels,l=u(f.connectorPadding,10),m=u(f.connectorWidth,1),n=e.plotWidth,t=e.plotHeight,r,w=c.center,q=w[2]/2,A=w[1],F,G, +g,v,E=[[],[]],L,P,J,M,y=[0,0,0,0];c.visible&&(f.enabled||c._hasPointLabels)&&(p(b,function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&&(a.dataLabel.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),a.dataLabel.shortened=!1)}),h.prototype.drawDataLabels.apply(c),p(b,function(a){a.dataLabel&&a.visible&&(E[a.half].push(a),a.dataLabel._pos=null)}),p(E,function(b,h){var k,m,x=b.length,r=[],z;if(x)for(c.sortByAngle(b,h-.5),0d.bottom-2?k:P,h,d),F._attr={visibility:J,align:g[6]},F._pos={x:L+f.x+({left:l,right:-l}[g[6]]||0),y:P+f.y-10},g.x=L,g.y=P,u(f.crop,!0)&&(G=F.getBBox().width,k=null,L-Gn-l&&(k=Math.round(L+G-n+l),y[1]=Math.max(k,y[1])),0>P-v/2?y[0]=Math.max(Math.round(-P+v/2),y[0]):P+v/2>t&&(y[2]=Math.max(Math.round(P+v/2-t),y[2])),F.sideOverflow=k)}),0===D(y)||this.verifyDataLabelOverflow(y))&&(this.placeDataLabels(), +m&&p(this.points,function(a){var b;r=a.connector;if((F=a.dataLabel)&&F._pos&&a.visible&&0u(this.translatedThreshold,k.yAxis.len)),p=u(d.inside,!!this.options.stacking);l&&(e=n(l),0>e.y&&(e.height+=e.y,e.y=0),l=e.y+e.height-k.yAxis.len,0a+c||e+hb+d||f+lthis.pointCount))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&r(d,function(a){a.setState()});r("xy"===b?[1,0]:[1],function(b){b= +c[b?"xAxis":"yAxis"][0];var d=b.horiz,f=a[d?"chartX":"chartY"],d=d?"mouseDownX":"mouseDownY",h=c[d],g=(b.pointRange||0)/2,k=b.getExtremes(),l=b.toValue(h-f,!0)+g,m=b.toValue(h+b.len-f,!0)-g,n=m=l(n.minWidth,0)&&this.chartHeight>=l(n.minHeight,0)}).call(this)&&f.push(a._id)};E.prototype.currentOptions=function(l){function n(e,h,l,d){var c;a.objectEach(e,function(a,e){if(!d&&-1