| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861 |
- /*
- Highstock JS v10.1.0 (2022-05-20)
- (c) 2009-2021 Torstein Honsi
- License: www.highcharts.com/license
- */
- (function (U, O) { "object" === typeof module && module.exports ? (O["default"] = O, module.exports = U.document ? O(U) : O) : "function" === typeof define && define.amd ? define("highcharts/highstock", function () { return O(U) }) : (U.Highcharts && U.Highcharts.error(16, !0), U.Highcharts = O(U)) })("undefined" !== typeof window ? window : this, function (U) {
- function O (C, a, A, G) { C.hasOwnProperty(a) || (C[a] = G.apply(null, A), "function" === typeof CustomEvent && U.dispatchEvent(new CustomEvent("HighchartsModuleLoaded", { detail: { path: a, module: C[a] } }))) } var a =
- {}; O(a, "Core/Globals.js", [], function () {
- var a; (function (a) {
- a.SVG_NS = "http://www.w3.org/2000/svg"; a.product = "Highcharts"; a.version = "10.1.0"; a.win = "undefined" !== typeof U ? U : {}; a.doc = a.win.document; a.svg = a.doc && a.doc.createElementNS && !!a.doc.createElementNS(a.SVG_NS, "svg").createSVGRect; a.userAgent = a.win.navigator && a.win.navigator.userAgent || ""; a.isChrome = -1 !== a.userAgent.indexOf("Chrome"); a.isFirefox = -1 !== a.userAgent.indexOf("Firefox"); a.isMS = /(edge|msie|trident)/i.test(a.userAgent) && !a.win.opera; a.isSafari =
- !a.isChrome && -1 !== a.userAgent.indexOf("Safari"); a.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(a.userAgent); a.isWebKit = -1 !== a.userAgent.indexOf("AppleWebKit"); a.deg2rad = 2 * Math.PI / 360; a.hasBidiBug = a.isFirefox && 4 > parseInt(a.userAgent.split("Firefox/")[1], 10); a.hasTouch = !!a.win.TouchEvent; a.marginNames = ["plotTop", "marginRight", "marginBottom", "plotLeft"]; a.noop = function () { }; a.supportsPassiveEvents = function () {
- var C = !1; if (!a.isMS) {
- var q = Object.defineProperty({}, "passive", { get: function () { C = !0 } });
- a.win.addEventListener && a.win.removeEventListener && (a.win.addEventListener("testPassive", a.noop, q), a.win.removeEventListener("testPassive", a.noop, q))
- } return C
- }(); a.charts = []; a.dateFormats = {}; a.seriesTypes = {}; a.symbolSizes = {}; a.chartCount = 0
- })(a || (a = {})); ""; return a
- }); O(a, "Core/Utilities.js", [a["Core/Globals.js"]], function (a) {
- function C (e, b, h, r) {
- var p = b ? "Highcharts error" : "Highcharts warning"; 32 === e && (e = "" + p + ": Deprecated member"); var y = l(e), L = y ? "" + p + " #" + e + ": www.highcharts.com/errors/" + e + "/" : e.toString();
- if ("undefined" !== typeof r) { var I = ""; y && (L += "?"); M(r, function (b, e) { I += "\n - ".concat(e, ": ").concat(b); y && (L += encodeURI(e) + "=" + encodeURI(b)) }); L += I } w(a, "displayError", { chart: h, code: e, message: L, params: r }, function () { if (b) throw Error(L); f.console && -1 === C.messages.indexOf(L) && console.warn(L) }); C.messages.push(L)
- } function A (e, b) { var f = {}; M(e, function (h, p) { if (J(e[p], !0) && !e.nodeType && b[p]) h = A(e[p], b[p]), Object.keys(h).length && (f[p] = h); else if (J(e[p]) || e[p] !== b[p] || p in e && !(p in b)) f[p] = e[p] }); return f }
- function G (e, b) { return parseInt(e, b || 10) } function x (e) { return "string" === typeof e } function H (e) { e = Object.prototype.toString.call(e); return "[object Array]" === e || "[object Array Iterator]" === e } function J (e, b) { return !!e && "object" === typeof e && (!b || !H(e)) } function D (e) { return J(e) && "number" === typeof e.nodeType } function m (e) { var b = e && e.constructor; return !(!J(e, !0) || D(e) || !b || !b.name || "Object" === b.name) } function l (e) { return "number" === typeof e && !isNaN(e) && Infinity > e && -Infinity < e } function d (e) {
- return "undefined" !==
- typeof e && null !== e
- } function g (e, b, f) { var h = x(b) && !d(f), p, y = function (b, f) { d(b) ? e.setAttribute(f, b) : h ? (p = e.getAttribute(f)) || "class" !== f || (p = e.getAttribute(f + "Name")) : e.removeAttribute(f) }; x(b) ? y(f, b) : M(b, y); return p } function c (e, b) { var f; e || (e = {}); for (f in b) e[f] = b[f]; return e } function t () { for (var e = arguments, b = e.length, f = 0; f < b; f++) { var h = e[f]; if ("undefined" !== typeof h && null !== h) return h } } function k (e, b) {
- a.isMS && !a.svg && b && d(b.opacity) && (b.filter = "alpha(opacity=".concat(100 * b.opacity, ")")); c(e.style,
- b)
- } function B (e) { return Math.pow(10, Math.floor(Math.log(e) / Math.LN10)) } function E (e, b) { return 1E14 < e ? e : parseFloat(e.toPrecision(b || 14)) } function F (e, b, h) {
- var y = a.getStyle || F; if ("width" === b) return b = Math.min(e.offsetWidth, e.scrollWidth), h = e.getBoundingClientRect && e.getBoundingClientRect().width, h < b && h >= b - 1 && (b = Math.floor(h)), Math.max(0, b - (y(e, "padding-left", !0) || 0) - (y(e, "padding-right", !0) || 0)); if ("height" === b) return Math.max(0, Math.min(e.offsetHeight, e.scrollHeight) - (y(e, "padding-top", !0) || 0) - (y(e,
- "padding-bottom", !0) || 0)); f.getComputedStyle || C(27, !0); if (e = f.getComputedStyle(e, void 0)) { var p = e.getPropertyValue(b); t(h, "opacity" !== b) && (p = G(p)) } return p
- } function M (e, b, f) { for (var h in e) Object.hasOwnProperty.call(e, h) && b.call(f || e[h], e[h], h, e) } function K (e, b, f) {
- function h (b, f) { var N = e.removeEventListener || a.removeEventListenerPolyfill; N && N.call(e, b, f, !1) } function p (f) { var N; if (e.nodeName) { if (b) { var p = {}; p[b] = !0 } else p = f; M(p, function (b, e) { if (f[e]) for (N = f[e].length; N--;)h(e, f[e][N].fn) }) } } var y =
- "function" === typeof e && e.prototype || e; if (Object.hasOwnProperty.call(y, "hcEvents")) { var L = y.hcEvents; b ? (y = L[b] || [], f ? (L[b] = y.filter(function (b) { return f !== b.fn }), h(b, f)) : (p(L), L[b] = [])) : (p(L), delete y.hcEvents) }
- } function w (e, b, f, h) {
- f = f || {}; if (n.createEvent && (e.dispatchEvent || e.fireEvent && e !== a)) { var p = n.createEvent("Events"); p.initEvent(b, !0, !0); f = c(p, f); e.dispatchEvent ? e.dispatchEvent(f) : e.fireEvent(b, f) } else if (e.hcEvents) {
- f.target || c(f, {
- preventDefault: function () { f.defaultPrevented = !0 }, target: e,
- type: b
- }); p = []; for (var y = e, L = !1; y.hcEvents;)Object.hasOwnProperty.call(y, "hcEvents") && y.hcEvents[b] && (p.length && (L = !0), p.unshift.apply(p, y.hcEvents[b])), y = Object.getPrototypeOf(y); L && p.sort(function (b, e) { return b.order - e.order }); p.forEach(function (b) { !1 === b.fn.call(e, f) && f.preventDefault() })
- } h && !f.defaultPrevented && h.call(e, f)
- } var z = a.charts, n = a.doc, f = a.win; (C || (C = {})).messages = []; Math.easeInOutSine = function (e) { return -.5 * (Math.cos(Math.PI * e) - 1) }; var u = Array.prototype.find ? function (e, b) { return e.find(b) } :
- function (e, b) { var f, h = e.length; for (f = 0; f < h; f++)if (b(e[f], f)) return e[f] }; M({ map: "map", each: "forEach", grep: "filter", reduce: "reduce", some: "some" }, function (e, b) { a[b] = function (f) { var h; C(32, !1, void 0, (h = {}, h["Highcharts.".concat(b)] = "use Array.".concat(e), h)); return Array.prototype[e].apply(f, [].slice.call(arguments, 1)) } }); var h, r = function () { var e = Math.random().toString(36).substring(2, 9) + "-", b = 0; return function () { return "highcharts-" + (h ? "" : e) + b++ } }(); f.jQuery && (f.jQuery.fn.highcharts = function () {
- var e =
- [].slice.call(arguments); if (this[0]) return e[0] ? (new (a[x(e[0]) ? e.shift() : "Chart"])(this[0], e[0], e[1]), this) : z[g(this[0], "data-highcharts-chart")]
- }); u = {
- addEvent: function (e, b, f, h) {
- void 0 === h && (h = {}); var p = "function" === typeof e && e.prototype || e; Object.hasOwnProperty.call(p, "hcEvents") || (p.hcEvents = {}); p = p.hcEvents; a.Point && e instanceof a.Point && e.series && e.series.chart && (e.series.chart.runTrackerClick = !0); var r = e.addEventListener || a.addEventListenerPolyfill; r && r.call(e, b, f, a.supportsPassiveEvents ? {
- passive: void 0 ===
- h.passive ? -1 !== b.indexOf("touch") : h.passive, capture: !1
- } : !1); p[b] || (p[b] = []); p[b].push({ fn: f, order: "number" === typeof h.order ? h.order : Infinity }); p[b].sort(function (b, e) { return b.order - e.order }); return function () { K(e, b, f) }
- }, arrayMax: function (e) { for (var b = e.length, f = e[0]; b--;)e[b] > f && (f = e[b]); return f }, arrayMin: function (e) { for (var b = e.length, f = e[0]; b--;)e[b] < f && (f = e[b]); return f }, attr: g, clamp: function (e, b, f) { return e > b ? e < f ? e : f : b }, cleanRecursively: A, clearTimeout: function (e) { d(e) && clearTimeout(e) }, correctFloat: E,
- createElement: function (e, b, f, h, p) { e = n.createElement(e); b && c(e, b); p && k(e, { padding: "0", border: "none", margin: "0" }); f && k(e, f); h && h.appendChild(e); return e }, css: k, defined: d, destroyObjectProperties: function (e, b) { M(e, function (f, h) { f && f !== b && f.destroy && f.destroy(); delete e[h] }) }, discardElement: function (e) { e && e.parentElement && e.parentElement.removeChild(e) }, erase: function (e, b) { for (var f = e.length; f--;)if (e[f] === b) { e.splice(f, 1); break } }, error: C, extend: c, extendClass: function (e, b) {
- var f = function () { }; f.prototype =
- new e; c(f.prototype, b); return f
- }, find: u, fireEvent: w, getMagnitude: B, getNestedProperty: function (e, b) { for (e = e.split("."); e.length && d(b);) { var h = e.shift(); if ("undefined" === typeof h || "__proto__" === h) return; b = b[h]; if (!d(b) || "function" === typeof b || "number" === typeof b.nodeType || b === f) return } return b }, getStyle: F, inArray: function (e, b, f) { C(32, !1, void 0, { "Highcharts.inArray": "use Array.indexOf" }); return b.indexOf(e, f) }, isArray: H, isClass: m, isDOMElement: D, isFunction: function (e) { return "function" === typeof e }, isNumber: l,
- isObject: J, isString: x, keys: function (e) { C(32, !1, void 0, { "Highcharts.keys": "use Object.keys" }); return Object.keys(e) }, merge: function () { var e, b = arguments, f = {}, h = function (b, e) { "object" !== typeof b && (b = {}); M(e, function (f, N) { "__proto__" !== N && "constructor" !== N && (!J(f, !0) || m(f) || D(f) ? b[N] = e[N] : b[N] = h(b[N] || {}, f)) }); return b }; !0 === b[0] && (f = b[1], b = Array.prototype.slice.call(b, 2)); var p = b.length; for (e = 0; e < p; e++)f = h(f, b[e]); return f }, normalizeTickInterval: function (e, b, f, h, p) {
- var r = e; f = t(f, B(e)); var L = e / f; b || (b =
- p ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] : [1, 2, 2.5, 5, 10], !1 === h && (1 === f ? b = b.filter(function (b) { return 0 === b % 1 }) : .1 >= f && (b = [1 / f]))); for (h = 0; h < b.length && !(r = b[h], p && r * f >= e || !p && L <= (b[h] + (b[h + 1] || b[h])) / 2); h++); return r = E(r * f, -Math.round(Math.log(.001) / Math.LN10))
- }, objectEach: M, offset: function (e) {
- var b = n.documentElement; e = e.parentElement || e.parentNode ? e.getBoundingClientRect() : { top: 0, left: 0, width: 0, height: 0 }; return {
- top: e.top + (f.pageYOffset || b.scrollTop) - (b.clientTop || 0), left: e.left + (f.pageXOffset || b.scrollLeft) -
- (b.clientLeft || 0), width: e.width, height: e.height
- }
- }, pad: function (e, b, f) { return Array((b || 2) + 1 - String(e).replace("-", "").length).join(f || "0") + e }, pick: t, pInt: G, relativeLength: function (e, b, f) { return /%$/.test(e) ? b * parseFloat(e) / 100 + (f || 0) : parseFloat(e) }, removeEvent: K, splat: function (e) { return H(e) ? e : [e] }, stableSort: function (e, b) { var f = e.length, h, p; for (p = 0; p < f; p++)e[p].safeI = p; e.sort(function (e, f) { h = b(e, f); return 0 === h ? e.safeI - f.safeI : h }); for (p = 0; p < f; p++)delete e[p].safeI }, syncTimeout: function (e, b, f) {
- if (0 <
- b) return setTimeout(e, b, f); e.call(0, f); return -1
- }, timeUnits: { millisecond: 1, second: 1E3, minute: 6E4, hour: 36E5, day: 864E5, week: 6048E5, month: 24192E5, year: 314496E5 }, uniqueKey: r, useSerialIds: function (e) { return h = t(e, h) }, wrap: function (e, b, f) { var h = e[b]; e[b] = function () { var b = Array.prototype.slice.call(arguments), e = arguments, L = this; L.proceed = function () { h.apply(L, arguments.length ? arguments : e) }; b.unshift(h); b = f.apply(this, b); L.proceed = null; return b } }
- }; ""; return u
- }); O(a, "Core/Chart/ChartDefaults.js", [], function () {
- return {
- alignThresholds: !1,
- panning: { enabled: !1, type: "x" }, styledMode: !1, borderRadius: 0, colorCount: 10, allowMutatingData: !0, defaultSeriesType: "line", ignoreHiddenSeries: !0, spacing: [10, 10, 15, 10], resetZoomButton: { theme: { zIndex: 6 }, position: { align: "right", x: -10, y: 10 } }, zoomBySingleTouch: !1, width: null, height: null, borderColor: "#335cad", backgroundColor: "#ffffff", plotBorderColor: "#cccccc"
- }
- }); O(a, "Core/Color/Color.js", [a["Core/Globals.js"], a["Core/Utilities.js"]], function (a, q) {
- var C = q.isNumber, G = q.merge, x = q.pInt; q = function () {
- function q (C) {
- this.rgba =
- [NaN, NaN, NaN, NaN]; this.input = C; var D = a.Color; if (D && D !== q) return new D(C); if (!(this instanceof q)) return new q(C); this.init(C)
- } q.parse = function (a) { return a ? new q(a) : q.None }; q.prototype.init = function (a) {
- var D; if ("object" === typeof a && "undefined" !== typeof a.stops) this.stops = a.stops.map(function (d) { return new q(d[1]) }); else if ("string" === typeof a) {
- this.input = a = q.names[a.toLowerCase()] || a; if ("#" === a.charAt(0)) {
- var m = a.length; var l = parseInt(a.substr(1), 16); 7 === m ? D = [(l & 16711680) >> 16, (l & 65280) >> 8, l & 255, 1] :
- 4 === m && (D = [(l & 3840) >> 4 | (l & 3840) >> 8, (l & 240) >> 4 | l & 240, (l & 15) << 4 | l & 15, 1])
- } if (!D) for (l = q.parsers.length; l-- && !D;) { var d = q.parsers[l]; (m = d.regex.exec(a)) && (D = d.parse(m)) }
- } D && (this.rgba = D)
- }; q.prototype.get = function (a) {
- var D = this.input, m = this.rgba; if ("object" === typeof D && "undefined" !== typeof this.stops) { var l = G(D); l.stops = [].slice.call(l.stops); this.stops.forEach(function (d, g) { l.stops[g] = [l.stops[g][0], d.get(a)] }); return l } return m && C(m[0]) ? "rgb" === a || !a && 1 === m[3] ? "rgb(" + m[0] + "," + m[1] + "," + m[2] + ")" : "a" ===
- a ? "".concat(m[3]) : "rgba(" + m.join(",") + ")" : D
- }; q.prototype.brighten = function (a) { var D = this.rgba; if (this.stops) this.stops.forEach(function (l) { l.brighten(a) }); else if (C(a) && 0 !== a) for (var m = 0; 3 > m; m++)D[m] += x(255 * a), 0 > D[m] && (D[m] = 0), 255 < D[m] && (D[m] = 255); return this }; q.prototype.setOpacity = function (a) { this.rgba[3] = a; return this }; q.prototype.tweenTo = function (a, D) {
- var m = this.rgba, l = a.rgba; if (!C(m[0]) || !C(l[0])) return a.input || "none"; a = 1 !== l[3] || 1 !== m[3]; return (a ? "rgba(" : "rgb(") + Math.round(l[0] + (m[0] - l[0]) *
- (1 - D)) + "," + Math.round(l[1] + (m[1] - l[1]) * (1 - D)) + "," + Math.round(l[2] + (m[2] - l[2]) * (1 - D)) + (a ? "," + (l[3] + (m[3] - l[3]) * (1 - D)) : "") + ")"
- }; q.names = { white: "#ffffff", black: "#000000" }; q.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 [x(a[1]), x(a[2]), x(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 [x(a[1]), x(a[2]), x(a[3]), 1] } }]; q.None = new q(""); return q
- }();
- ""; return q
- }); O(a, "Core/Color/Palettes.js", [], function () { return { colors: "#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1".split(" ") } }); O(a, "Core/Time.js", [a["Core/Globals.js"], a["Core/Utilities.js"]], function (a, q) {
- var C = a.win, G = q.defined, x = q.error, H = q.extend, J = q.isObject, D = q.merge, m = q.objectEach, l = q.pad, d = q.pick, g = q.splat, c = q.timeUnits, t = a.isSafari && C.Intl && C.Intl.DateTimeFormat.prototype.formatRange, k = a.isSafari && C.Intl && !C.Intl.DateTimeFormat.prototype.formatRange;
- q = function () {
- function B (c) { this.options = {}; this.variableTimezone = this.useUTC = !1; this.Date = C.Date; this.getTimezoneOffset = this.timezoneOffsetFunction(); this.update(c) } B.prototype.get = function (c, d) { if (this.variableTimezone || this.timezoneOffset) { var E = d.getTime(), g = E - this.getTimezoneOffset(d); d.setTime(g); c = d["getUTC" + c](); d.setTime(E); return c } return this.useUTC ? d["getUTC" + c]() : d["get" + c]() }; B.prototype.set = function (c, d, g) {
- if (this.variableTimezone || this.timezoneOffset) {
- if ("Milliseconds" === c || "Seconds" ===
- c || "Minutes" === c && 0 === this.getTimezoneOffset(d) % 36E5) return d["setUTC" + c](g); var E = this.getTimezoneOffset(d); E = d.getTime() - E; d.setTime(E); d["setUTC" + c](g); c = this.getTimezoneOffset(d); E = d.getTime() + c; return d.setTime(E)
- } return this.useUTC || t && "FullYear" === c ? d["setUTC" + c](g) : d["set" + c](g)
- }; B.prototype.update = function (c) {
- var g = d(c && c.useUTC, !0); this.options = c = D(!0, this.options || {}, c); this.Date = c.Date || C.Date || Date; this.timezoneOffset = (this.useUTC = g) && c.timezoneOffset || void 0; this.getTimezoneOffset = this.timezoneOffsetFunction();
- this.variableTimezone = g && !(!c.getTimezoneOffset && !c.timezone)
- }; B.prototype.makeTime = function (c, g, t, B, w, z) { if (this.useUTC) { var n = this.Date.UTC.apply(0, arguments); var f = this.getTimezoneOffset(n); n += f; var u = this.getTimezoneOffset(n); f !== u ? n += u - f : f - 36E5 !== this.getTimezoneOffset(n - 36E5) || k || (n -= 36E5) } else n = (new this.Date(c, g, d(t, 1), d(B, 0), d(w, 0), d(z, 0))).getTime(); return n }; B.prototype.timezoneOffsetFunction = function () {
- var c = this, d = this.options, g = d.getTimezoneOffset, t = d.moment || C.moment; if (!this.useUTC) return function (c) {
- return 6E4 *
- (new Date(c.toString())).getTimezoneOffset()
- }; if (d.timezone) { if (t) return function (c) { return 6E4 * -t.tz(c, d.timezone).utcOffset() }; x(25) } return this.useUTC && g ? function (c) { return 6E4 * g(c.valueOf()) } : function () { return 6E4 * (c.timezoneOffset || 0) }
- }; B.prototype.dateFormat = function (c, g, t) {
- if (!G(g) || isNaN(g)) return a.defaultOptions.lang && a.defaultOptions.lang.invalidDate || ""; c = d(c, "%Y-%m-%d %H:%M:%S"); var B = this, w = new this.Date(g), z = this.get("Hours", w), n = this.get("Day", w), f = this.get("Date", w), u = this.get("Month",
- w), h = this.get("FullYear", w), r = a.defaultOptions.lang, e = r && r.weekdays, b = r && r.shortWeekdays; w = H({ a: b ? b[n] : e[n].substr(0, 3), A: e[n], d: l(f), e: l(f, 2, " "), w: n, b: r.shortMonths[u], B: r.months[u], m: l(u + 1), o: u + 1, y: h.toString().substr(2, 2), Y: h, H: l(z), k: z, I: l(z % 12 || 12), l: z % 12 || 12, M: l(this.get("Minutes", w)), p: 12 > z ? "AM" : "PM", P: 12 > z ? "am" : "pm", S: l(w.getSeconds()), L: l(Math.floor(g % 1E3), 3) }, a.dateFormats); m(w, function (b, e) { for (; -1 !== c.indexOf("%" + e);)c = c.replace("%" + e, "function" === typeof b ? b.call(B, g) : b) }); return t ? c.substr(0,
- 1).toUpperCase() + c.substr(1) : c
- }; B.prototype.resolveDTLFormat = function (c) { return J(c, !0) ? c : (c = g(c), { main: c[0], from: c[1], to: c[2] }) }; B.prototype.getTimeTicks = function (g, t, B, k) {
- var w = this, z = [], n = {}, f = new w.Date(t), u = g.unitRange, h = g.count || 1, r; k = d(k, 1); if (G(t)) {
- w.set("Milliseconds", f, u >= c.second ? 0 : h * Math.floor(w.get("Milliseconds", f) / h)); u >= c.second && w.set("Seconds", f, u >= c.minute ? 0 : h * Math.floor(w.get("Seconds", f) / h)); u >= c.minute && w.set("Minutes", f, u >= c.hour ? 0 : h * Math.floor(w.get("Minutes", f) / h)); u >= c.hour &&
- w.set("Hours", f, u >= c.day ? 0 : h * Math.floor(w.get("Hours", f) / h)); u >= c.day && w.set("Date", f, u >= c.month ? 1 : Math.max(1, h * Math.floor(w.get("Date", f) / h))); if (u >= c.month) { w.set("Month", f, u >= c.year ? 0 : h * Math.floor(w.get("Month", f) / h)); var e = w.get("FullYear", f) } u >= c.year && w.set("FullYear", f, e - e % h); u === c.week && (e = w.get("Day", f), w.set("Date", f, w.get("Date", f) - e + k + (e < k ? -7 : 0))); e = w.get("FullYear", f); k = w.get("Month", f); var b = w.get("Date", f), y = w.get("Hours", f); t = f.getTime(); !w.variableTimezone && w.useUTC || !G(B) || (r = B -
- t > 4 * c.month || w.getTimezoneOffset(t) !== w.getTimezoneOffset(B)); t = f.getTime(); for (f = 1; t < B;)z.push(t), t = u === c.year ? w.makeTime(e + f * h, 0) : u === c.month ? w.makeTime(e, k + f * h) : !r || u !== c.day && u !== c.week ? r && u === c.hour && 1 < h ? w.makeTime(e, k, b, y + f * h) : t + u * h : w.makeTime(e, k, b + f * h * (u === c.day ? 1 : 7)), f++; z.push(t); u <= c.hour && 1E4 > z.length && z.forEach(function (b) { 0 === b % 18E5 && "000000000" === w.dateFormat("%H%M%S%L", b) && (n[b] = "day") })
- } z.info = H(g, { higherRanks: n, totalRange: u * h }); return z
- }; B.prototype.getDateFormat = function (d, g, t,
- B) { var w = this.dateFormat("%m-%d %H:%M:%S.%L", g), z = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 }, n = "millisecond"; for (f in c) { if (d === c.week && +this.dateFormat("%w", g) === t && "00:00:00.000" === w.substr(6)) { var f = "week"; break } if (c[f] > d) { f = n; break } if (z[f] && w.substr(z[f]) !== "01-01 00:00:00.000".substr(z[f])) break; "week" !== f && (n = f) } if (f) var u = this.resolveDTLFormat(B[f]).main; return u }; return B
- }(); ""; return q
- }); O(a, "Core/DefaultOptions.js", [a["Core/Chart/ChartDefaults.js"], a["Core/Color/Color.js"], a["Core/Globals.js"],
- a["Core/Color/Palettes.js"], a["Core/Time.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H) {
- q = q.parse; var C = H.merge, D = {
- colors: G.colors, 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: {}, time: { Date: void 0, getTimezoneOffset: void 0, timezone: void 0, timezoneOffset: 0, useUTC: !0 }, chart: a, title: { text: "Chart title", align: "center", margin: 15, widthAdjust: -44 }, subtitle: { text: "", align: "center", widthAdjust: -44 }, caption: { margin: 15, text: "", align: "left", verticalAlign: "bottom" }, plotOptions: {}, labels: { style: { position: "absolute", color: "#333333" } }, legend: {
- enabled: !0, align: "center",
- alignColumns: !0, className: "highcharts-no-tooltip", layout: "horizontal", labelFormatter: function () { return this.name }, borderColor: "#999999", borderRadius: 0, navigation: { activeColor: "#003399", inactiveColor: "#cccccc" }, itemStyle: { color: "#333333", cursor: "pointer", 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: .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: "", headerShape: "callout",
- hideDelay: 500, padding: 8, shape: "callout", shared: !1, snap: A.isTouchDevice ? 25 : 10, headerFormat: '<span style="font-size: 10px">{point.key}</span><br/>', pointFormat: '<span style="color:{point.color}">\u25cf</span> {series.name}: <b>{point.y}</b><br/>', backgroundColor: q("#f7f7f7").setOpacity(.85).get(), borderWidth: 1, shadow: !0, stickOnContact: !1, style: { color: "#333333", cursor: "default", fontSize: "12px", whiteSpace: "nowrap" }, useHTML: !1
- }, credits: {
- enabled: !0, href: "https://www.highcharts.com?credits", position: {
- align: "right",
- x: -10, verticalAlign: "bottom", y: -5
- }, style: { cursor: "pointer", color: "#999999", fontSize: "9px" }, text: "Highcharts.com"
- }
- }; D.chart.styledMode = !1; ""; var m = new x(C(D.global, D.time)); a = { defaultOptions: D, defaultTime: m, getOptions: function () { return D }, setOptions: function (l) { C(!0, D, l); if (l.time || l.global) A.time ? A.time.update(C(D.global, D.time, l.global, l.time)) : A.time = m; return D } }; ""; return a
- }); O(a, "Core/Animation/Fx.js", [a["Core/Color/Color.js"], a["Core/Globals.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C =
- a.parse, x = q.win, H = A.isNumber, J = A.objectEach; return function () {
- function a (a, l, d) { this.pos = NaN; this.options = l; this.elem = a; this.prop = d } a.prototype.dSetter = function () { var a = this.paths, l = a && a[0]; a = a && a[1]; var d = this.now || 0, g = []; if (1 !== d && l && a) if (l.length === a.length && 1 > d) for (var c = 0; c < a.length; c++) { for (var t = l[c], k = a[c], B = [], E = 0; E < k.length; E++) { var F = t[E], M = k[E]; H(F) && H(M) && ("A" !== k[0] || 4 !== E && 5 !== E) ? B[E] = F + d * (M - F) : B[E] = M } g.push(B) } else g = a; else g = this.toD || []; this.elem.attr("d", g, void 0, !0) }; a.prototype.update =
- function () { var a = this.elem, l = this.prop, d = this.now, g = this.options.step; if (this[l + "Setter"]) this[l + "Setter"](); else a.attr ? a.element && a.attr(l, d, null, !0) : a.style[l] = d + this.unit; g && g.call(a, d, this) }; a.prototype.run = function (m, l, d) {
- var g = this, c = g.options, t = function (c) { return t.stopped ? !1 : g.step(c) }, k = x.requestAnimationFrame || function (c) { setTimeout(c, 13) }, B = function () { for (var c = 0; c < a.timers.length; c++)a.timers[c]() || a.timers.splice(c--, 1); a.timers.length && k(B) }; m !== l || this.elem["forceAnimate:" + this.prop] ?
- (this.startTime = +new Date, this.start = m, this.end = l, this.unit = d, this.now = this.start, this.pos = 0, t.elem = this.elem, t.prop = this.prop, t() && 1 === a.timers.push(t) && k(B)) : (delete c.curAnim[this.prop], c.complete && 0 === Object.keys(c.curAnim).length && c.complete.call(this.elem))
- }; a.prototype.step = function (a) {
- var l = +new Date, d = this.options, g = this.elem, c = d.complete, t = d.duration, k = d.curAnim; if (g.attr && !g.element) a = !1; else if (a || l >= t + this.startTime) {
- this.now = this.end; this.pos = 1; this.update(); var B = k[this.prop] = !0; J(k,
- function (c) { !0 !== c && (B = !1) }); B && c && c.call(g); a = !1
- } else this.pos = d.easing((l - this.startTime) / t), this.now = this.start + (this.end - this.start) * this.pos, this.update(), a = !0; return a
- }; a.prototype.initPath = function (a, l, d) {
- function g (c, z) { for (; c.length < K;) { var n = c[0], f = z[K - c.length]; f && "M" === n[0] && (c[0] = "C" === f[0] ? ["C", n[1], n[2], n[1], n[2], n[1], n[2]] : ["L", n[1], n[2]]); c.unshift(n); B && (n = c.pop(), c.push(c[c.length - 1], n)) } } function c (c, z) {
- for (; c.length < K;)if (z = c[Math.floor(c.length / E) - 1].slice(), "C" === z[0] && (z[1] =
- z[5], z[2] = z[6]), B) { var n = c[Math.floor(c.length / E)].slice(); c.splice(c.length / 2, 0, z, n) } else c.push(z)
- } var t = a.startX, k = a.endX; d = d.slice(); var B = a.isArea, E = B ? 2 : 1; l = l && l.slice(); if (!l) return [d, d]; if (t && k && k.length) { for (a = 0; a < t.length; a++)if (t[a] === k[0]) { var F = a; break } else if (t[0] === k[k.length - t.length + a]) { F = a; var M = !0; break } else if (t[t.length - 1] === k[k.length - t.length + a]) { F = t.length - a; break } "undefined" === typeof F && (l = []) } if (l.length && H(F)) { var K = d.length + F * E; M ? (g(l, d), c(d, l)) : (g(d, l), c(l, d)) } return [l,
- d]
- }; a.prototype.fillSetter = function () { a.prototype.strokeSetter.apply(this, arguments) }; a.prototype.strokeSetter = function () { this.elem.attr(this.prop, C(this.start).tweenTo(C(this.end), this.pos), void 0, !0) }; a.timers = []; return a
- }()
- }); O(a, "Core/Animation/AnimationUtilities.js", [a["Core/Animation/Fx.js"], a["Core/Utilities.js"]], function (a, q) {
- function C (c) { return m(c) ? l({ duration: 500, defer: 0 }, c) : { duration: c ? 500 : 0, defer: 0 } } function G (c, d) {
- for (var g = a.timers.length; g--;)a.timers[g].elem !== c || d && d !== a.timers[g].prop ||
- (a.timers[g].stopped = !0)
- } var x = q.defined, H = q.getStyle, J = q.isArray, D = q.isNumber, m = q.isObject, l = q.merge, d = q.objectEach, g = q.pick; return {
- animate: function (c, g, k) {
- var t, E = "", F, M; if (!m(k)) { var K = arguments; k = { duration: K[2], easing: K[3], complete: K[4] } } D(k.duration) || (k.duration = 400); k.easing = "function" === typeof k.easing ? k.easing : Math[k.easing] || Math.easeInOutSine; k.curAnim = l(g); d(g, function (d, z) {
- G(c, z); M = new a(c, k, z); F = void 0; "d" === z && J(g.d) ? (M.paths = M.initPath(c, c.pathArray, g.d), M.toD = g.d, t = 0, F = 1) : c.attr ?
- t = c.attr(z) : (t = parseFloat(H(c, z)) || 0, "opacity" !== z && (E = "px")); F || (F = d); "string" === typeof F && F.match("px") && (F = F.replace(/px/g, "")); M.run(t, F, E)
- })
- }, animObject: C, getDeferredAnimation: function (c, d, g) { var t = C(d), k = 0, a = 0; (g ? [g] : c.series).forEach(function (c) { c = C(c.options.animation); k = d && x(d.defer) ? t.defer : Math.max(k, c.duration + c.defer); a = Math.min(t.duration, c.duration) }); c.renderer.forExport && (k = 0); return { defer: Math.max(0, k - a), duration: Math.min(k, a) } }, setAnimation: function (c, d) {
- d.renderer.globalAnimation =
- g(c, d.options.chart.animation, !0)
- }, stop: G
- }
- }); O(a, "Core/Renderer/HTML/AST.js", [a["Core/Globals.js"], a["Core/Utilities.js"]], function (a, q) {
- var C = a.SVG_NS, G = q.attr, x = q.createElement, H = q.css, J = q.error, D = q.isFunction, m = q.isString, l = q.objectEach, d = q.splat, g = (q = a.win.trustedTypes) && D(q.createPolicy) && q.createPolicy("highcharts", { createHTML: function (c) { return c } }), c = g ? g.createHTML("") : ""; try { var t = !!(new DOMParser).parseFromString(c, "text/html") } catch (k) { t = !1 } D = function () {
- function k (c) {
- this.nodes = "string" ===
- typeof c ? this.parseMarkup(c) : c
- } k.filterUserAttributes = function (c) { l(c, function (d, g) { var t = !0; -1 === k.allowedAttributes.indexOf(g) && (t = !1); -1 !== ["background", "dynsrc", "href", "lowsrc", "src"].indexOf(g) && (t = m(d) && k.allowedReferences.some(function (c) { return 0 === d.indexOf(c) })); t || (J(33, !1, void 0, { "Invalid attribute in config": "".concat(g) }), delete c[g]) }); return c }; k.parseStyle = function (c) {
- return c.split(";").reduce(function (c, d) {
- d = d.split(":").map(function (c) { return c.trim() }); var g = d.shift(); g && d.length &&
- (c[g.replace(/-([a-z])/g, function (c) { return c[1].toUpperCase() })] = d.join(":")); return c
- }, {})
- }; k.setElementHTML = function (c, d) { c.innerHTML = k.emptyHTML; d && (new k(d)).addToDOM(c) }; k.prototype.addToDOM = function (c) {
- function g (c, t) {
- var B; d(c).forEach(function (c) {
- var d = c.tagName, n = c.textContent ? a.doc.createTextNode(c.textContent) : void 0, f = k.bypassHTMLFiltering; if (d) if ("#text" === d) var u = n; else if (-1 !== k.allowedTags.indexOf(d) || f) {
- d = a.doc.createElementNS("svg" === d ? C : t.namespaceURI || C, d); var h = c.attributes ||
- {}; l(c, function (f, e) { "tagName" !== e && "attributes" !== e && "children" !== e && "style" !== e && "textContent" !== e && (h[e] = f) }); G(d, f ? h : k.filterUserAttributes(h)); c.style && H(d, c.style); n && d.appendChild(n); g(c.children || [], d); u = d
- } else J(33, !1, void 0, { "Invalid tagName in config": d }); u && t.appendChild(u); B = u
- }); return B
- } return g(this.nodes, c)
- }; k.prototype.parseMarkup = function (c) {
- var d = []; c = c.trim().replace(/ style="/g, ' data-style="'); if (t) c = (new DOMParser).parseFromString(g ? g.createHTML(c) : c, "text/html"); else {
- var B =
- x("div"); B.innerHTML = c; c = { body: B }
- } var a = function (c, d) { var g = c.nodeName.toLowerCase(), n = { tagName: g }; "#text" === g && (n.textContent = c.textContent || ""); if (g = c.attributes) { var f = {};[].forEach.call(g, function (h) { "data-style" === h.name ? n.style = k.parseStyle(h.value) : f[h.name] = h.value }); n.attributes = f } if (c.childNodes.length) { var u = [];[].forEach.call(c.childNodes, function (f) { a(f, u) }); u.length && (n.children = u) } d.push(n) };[].forEach.call(c.body.childNodes, function (c) { return a(c, d) }); return d
- }; k.allowedAttributes =
- "aria-controls aria-describedby aria-expanded aria-haspopup aria-hidden aria-label aria-labelledby aria-live aria-pressed aria-readonly aria-roledescription aria-selected class clip-path color colspan cx cy d dx dy disabled fill height href id in markerHeight markerWidth offset opacity orient padding paddingLeft paddingRight patternUnits r refX refY role scope slope src startOffset stdDeviation stroke stroke-linecap stroke-width style tableValues result rowspan summary target tabindex text-align textAnchor textLength title type valign width x x1 x2 y y1 y2 zIndex".split(" ");
- k.allowedReferences = "https:// http:// mailto: / ../ ./ #".split(" "); k.allowedTags = "a abbr b br button caption circle clipPath code dd defs div dl dt em feComponentTransfer feFuncA feFuncB feFuncG feFuncR feGaussianBlur feOffset feMerge feMergeNode filter h1 h2 h3 h4 h5 h6 hr i img li linearGradient marker ol p path pattern pre rect small span stop strong style sub sup svg table text thead tbody tspan td th tr u ul #text".split(" "); k.emptyHTML = c; k.bypassHTMLFiltering = !1; return k
- }(); ""; return D
- });
- O(a, "Core/FormatUtilities.js", [a["Core/DefaultOptions.js"], a["Core/Utilities.js"]], function (a, q) {
- function C (a, d, g, c) {
- a = +a || 0; d = +d; var t = G.lang, k = (a.toString().split(".")[1] || "").split("e")[0].length, B = a.toString().split("e"), E = d; if (-1 === d) d = Math.min(k, 20); else if (!J(d)) d = 2; else if (d && B[1] && 0 > B[1]) { var F = d + +B[1]; 0 <= F ? (B[0] = (+B[0]).toExponential(F).split("e")[0], d = F) : (B[0] = B[0].split(".")[0] || 0, a = 20 > d ? (B[0] * Math.pow(10, B[1])).toFixed(d) : 0, B[1] = 0) } F = (Math.abs(B[1] ? B[0] : a) + Math.pow(10, -Math.max(d, k) -
- 1)).toFixed(d); k = String(m(F)); var l = 3 < k.length ? k.length % 3 : 0; g = D(g, t.decimalPoint); c = D(c, t.thousandsSep); a = (0 > a ? "-" : "") + (l ? k.substr(0, l) + c : ""); a = 0 > +B[1] && !E ? "0" : a + k.substr(l).replace(/(\d{3})(?=\d)/g, "$1" + c); d && (a += g + F.slice(-d)); B[1] && 0 !== +a && (a += "e" + B[1]); return a
- } var G = a.defaultOptions, x = a.defaultTime, H = q.getNestedProperty, J = q.isNumber, D = q.pick, m = q.pInt; return {
- dateFormat: function (a, d, g) { return x.dateFormat(a, d, g) }, format: function (a, d, g) {
- var c = "{", t = !1, k = /f$/, B = /\.([0-9])/, E = G.lang, F = g && g.time ||
- x; g = g && g.numberFormatter || C; for (var l = []; a;) { var K = a.indexOf(c); if (-1 === K) break; var w = a.slice(0, K); if (t) { w = w.split(":"); c = H(w.shift() || "", d); if (w.length && "number" === typeof c) if (w = w.join(":"), k.test(w)) { var z = parseInt((w.match(B) || ["", "-1"])[1], 10); null !== c && (c = g(c, z, E.decimalPoint, -1 < w.indexOf(",") ? E.thousandsSep : "")) } else c = F.dateFormat(w, c); l.push(c) } else l.push(w); a = a.slice(K + 1); c = (t = !t) ? "}" : "{" } l.push(a); return l.join("")
- }, numberFormat: C
- }
- }); O(a, "Core/Renderer/RendererUtilities.js", [a["Core/Utilities.js"]],
- function (a) {
- var C = a.clamp, A = a.pick, G = a.stableSort, x; (function (a) {
- function q (a, m, l) {
- var d = a, g = d.reducedLen || m, c = function (c, d) { return (d.rank || 0) - (c.rank || 0) }, t = function (c, d) { return c.target - d.target }, k, B = !0, E = [], F = 0; for (k = a.length; k--;)F += a[k].size; if (F > g) { G(a, c); for (F = k = 0; F <= g;)F += a[k].size, k++; E = a.splice(k - 1, a.length) } G(a, t); for (a = a.map(function (c) { return { size: c.size, targets: [c.target], align: A(c.align, .5) } }); B;) {
- for (k = a.length; k--;)g = a[k], c = (Math.min.apply(0, g.targets) + Math.max.apply(0, g.targets)) /
- 2, g.pos = C(c - g.size * g.align, 0, m - g.size); k = a.length; for (B = !1; k--;)0 < k && a[k - 1].pos + a[k - 1].size > a[k].pos && (a[k - 1].size += a[k].size, a[k - 1].targets = a[k - 1].targets.concat(a[k].targets), a[k - 1].align = .5, a[k - 1].pos + a[k - 1].size > m && (a[k - 1].pos = m - a[k - 1].size), a.splice(k, 1), B = !0)
- } d.push.apply(d, E); k = 0; a.some(function (c) {
- var g = 0; return (c.targets || []).some(function () {
- d[k].pos = c.pos + g; if ("undefined" !== typeof l && Math.abs(d[k].pos - d[k].target) > l) return d.slice(0, k + 1).forEach(function (c) { return delete c.pos }), d.reducedLen =
- (d.reducedLen || m) - .1 * m, d.reducedLen > .1 * m && q(d, m, l), !0; g += d[k].size; k++; return !1
- })
- }); G(d, t); return d
- } a.distribute = q
- })(x || (x = {})); return x
- }); O(a, "Core/Renderer/SVG/SVGElement.js", [a["Core/Animation/AnimationUtilities.js"], a["Core/Renderer/HTML/AST.js"], a["Core/Color/Color.js"], a["Core/Globals.js"], a["Core/Utilities.js"]], function (a, q, A, G, x) {
- var C = a.animate, J = a.animObject, D = a.stop, m = G.deg2rad, l = G.doc, d = G.noop, g = G.svg, c = G.SVG_NS, t = G.win, k = x.addEvent, B = x.attr, E = x.createElement, F = x.css, M = x.defined, K = x.erase,
- w = x.extend, z = x.fireEvent, n = x.isArray, f = x.isFunction, u = x.isNumber, h = x.isString, r = x.merge, e = x.objectEach, b = x.pick, y = x.pInt, I = x.syncTimeout, p = x.uniqueKey; a = function () {
- function v () { this.element = void 0; this.onEvents = {}; this.opacity = 1; this.renderer = void 0; this.SVG_NS = c; this.symbolCustomAttribs = "x y width height r start end innerR anchorX anchorY rounded".split(" ") } v.prototype._defaultGetter = function (e) {
- e = b(this[e + "Value"], this[e], this.element ? this.element.getAttribute(e) : null, 0); /^[\-0-9\.]+$/.test(e) &&
- (e = parseFloat(e)); return e
- }; v.prototype._defaultSetter = function (b, e, f) { f.setAttribute(e, b) }; v.prototype.add = function (b) { var e = this.renderer, f = this.element; b && (this.parentGroup = b); this.parentInverted = b && b.inverted; "undefined" !== typeof this.textStr && "text" === this.element.nodeName && e.buildText(this); this.added = !0; if (!b || b.handleZ || this.zIndex) var h = this.zIndexSetter(); h || (b ? b.element : e.box).appendChild(f); if (this.onAdd) this.onAdd(); return this }; v.prototype.addClass = function (b, e) {
- var f = e ? "" : this.attr("class") ||
- ""; b = (b || "").split(/ /g).reduce(function (b, e) { -1 === f.indexOf(e) && b.push(e); return b }, f ? [f] : []).join(" "); b !== f && this.attr("class", b); return this
- }; v.prototype.afterSetters = function () { this.doTransform && (this.updateTransform(), this.doTransform = !1) }; v.prototype.align = function (e, f, N) {
- var p = {}, c = this.renderer, L = c.alignedObjects, r, v, P; if (e) { if (this.alignOptions = e, this.alignByTranslate = f, !N || h(N)) this.alignTo = r = N || "renderer", K(L, this), L.push(this), N = void 0 } else e = this.alignOptions, f = this.alignByTranslate,
- r = this.alignTo; N = b(N, c[r], "scrollablePlotBox" === r ? c.plotBox : void 0, c); r = e.align; var n = e.verticalAlign; c = (N.x || 0) + (e.x || 0); L = (N.y || 0) + (e.y || 0); "right" === r ? v = 1 : "center" === r && (v = 2); v && (c += (N.width - (e.width || 0)) / v); p[f ? "translateX" : "x"] = Math.round(c); "bottom" === n ? P = 1 : "middle" === n && (P = 2); P && (L += (N.height - (e.height || 0)) / P); p[f ? "translateY" : "y"] = Math.round(L); this[this.placed ? "animate" : "attr"](p); this.placed = !0; this.alignAttr = p; return this
- }; v.prototype.alignSetter = function (b) {
- var e = {
- left: "start", center: "middle",
- right: "end"
- }; e[b] && (this.alignValue = b, this.element.setAttribute("text-anchor", e[b]))
- }; v.prototype.animate = function (f, h, N) { var p = this, c = J(b(h, this.renderer.globalAnimation, !0)); h = c.defer; b(l.hidden, l.msHidden, l.webkitHidden, !1) && (c.duration = 0); 0 !== c.duration ? (N && (c.complete = N), I(function () { p.element && C(p, f, c) }, h)) : (this.attr(f, void 0, N || c.complete), e(f, function (b, e) { c.step && c.step.call(this, b, { prop: e, pos: 1, elem: this }) }, this)); return this }; v.prototype.applyTextOutline = function (b) {
- var e = this.element;
- -1 !== b.indexOf("contrast") && (b = b.replace(/contrast/g, this.renderer.getContrast(e.style.fill))); var f = b.split(" "); b = f[f.length - 1]; if ((f = f[0]) && "none" !== f && G.svg) {
- this.fakeTS = !0; this.ySetter = this.xSetter; f = f.replace(/(^[\d\.]+)(.*?)$/g, function (b, e, f) { return 2 * Number(e) + f }); this.removeTextOutline(); var h = l.createElementNS(c, "tspan"); B(h, { "class": "highcharts-text-outline", fill: b, stroke: b, "stroke-width": f, "stroke-linejoin": "round" });[].forEach.call(e.childNodes, function (b) {
- var e = b.cloneNode(!0); e.removeAttribute &&
- ["fill", "stroke", "stroke-width", "stroke"].forEach(function (b) { return e.removeAttribute(b) }); h.appendChild(e)
- }); var p = l.createElementNS(c, "tspan"); p.textContent = "\u200b";["x", "y"].forEach(function (b) { var f = e.getAttribute(b); f && p.setAttribute(b, f) }); h.appendChild(p); e.insertBefore(h, e.firstChild)
- }
- }; v.prototype.attr = function (b, f, h, p) {
- var N = this.element, c = this.symbolCustomAttribs, Q, r = this, L, v; if ("string" === typeof b && "undefined" !== typeof f) { var n = b; b = {}; b[n] = f } "string" === typeof b ? r = (this[b + "Getter"] ||
- this._defaultGetter).call(this, b, N) : (e(b, function (e, f) { L = !1; p || D(this, f); this.symbolName && -1 !== c.indexOf(f) && (Q || (this.symbolAttr(b), Q = !0), L = !0); !this.rotation || "x" !== f && "y" !== f || (this.doTransform = !0); L || (v = this[f + "Setter"] || this._defaultSetter, v.call(this, e, f, N), !this.styledMode && this.shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(f) && this.updateShadows(f, e, v)) }, this), this.afterSetters()); h && h.call(this); return r
- }; v.prototype.clip = function (b) {
- return this.attr("clip-path", b ? "url(" +
- this.renderer.url + "#" + b.id + ")" : "none")
- }; v.prototype.crisp = function (b, e) { e = e || b.strokeWidth || 0; var f = Math.round(e) % 2 / 2; b.x = Math.floor(b.x || this.x || 0) + f; b.y = Math.floor(b.y || this.y || 0) + f; b.width = Math.floor((b.width || this.width || 0) - 2 * f); b.height = Math.floor((b.height || this.height || 0) - 2 * f); M(b.strokeWidth) && (b.strokeWidth = e); return b }; v.prototype.complexColor = function (b, f, h) {
- var N = this.renderer, c, L, v, u, P, d, y, I, g, a, t = [], k; z(this.renderer, "complexColor", { args: arguments }, function () {
- b.radialGradient ? L = "radialGradient" :
- b.linearGradient && (L = "linearGradient"); if (L) {
- v = b[L]; P = N.gradients; d = b.stops; g = h.radialReference; n(v) && (b[L] = v = { x1: v[0], y1: v[1], x2: v[2], y2: v[3], gradientUnits: "userSpaceOnUse" }); "radialGradient" === L && g && !M(v.gradientUnits) && (u = v, v = r(v, N.getRadialAttr(g, u), { gradientUnits: "userSpaceOnUse" })); e(v, function (b, e) { "id" !== e && t.push(e, b) }); e(d, function (b) { t.push(b) }); t = t.join(","); if (P[t]) a = P[t].attr("id"); else {
- v.id = a = p(); var Q = P[t] = N.createElement(L).attr(v).add(N.defs); Q.radAttr = u; Q.stops = []; d.forEach(function (b) {
- 0 ===
- b[1].indexOf("rgba") ? (c = A.parse(b[1]), y = c.get("rgb"), I = c.get("a")) : (y = b[1], I = 1); b = N.createElement("stop").attr({ offset: b[0], "stop-color": y, "stop-opacity": I }).add(Q); Q.stops.push(b)
- })
- } k = "url(" + N.url + "#" + a + ")"; h.setAttribute(f, k); h.gradient = t; b.toString = function () { return k }
- }
- })
- }; v.prototype.css = function (b) {
- var f = this.styles, h = {}, p = this.element, c = !f; b.color && (b.fill = b.color); f && e(b, function (b, e) { f && f[e] !== b && (h[e] = b, c = !0) }); if (c) {
- f && (b = w(f, h)); if (null === b.width || "auto" === b.width) delete this.textWidth;
- else if ("text" === p.nodeName.toLowerCase() && b.width) var v = this.textWidth = y(b.width); this.styles = b; v && !g && this.renderer.forExport && delete b.width; var L = r(b); p.namespaceURI === this.SVG_NS && ["textOutline", "textOverflow", "width"].forEach(function (b) { return L && delete L[b] }); F(p, L); this.added && ("text" === this.element.nodeName && this.renderer.buildText(this), b.textOutline && this.applyTextOutline(b.textOutline))
- } return this
- }; v.prototype.dashstyleSetter = function (e) {
- var f = this["stroke-width"]; "inherit" === f && (f =
- 1); if (e = e && e.toLowerCase()) { var h = e.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 (e = h.length; e--;)h[e] = "" + y(h[e]) * b(f, NaN); e = h.join(",").replace(/NaN/g, "none"); this.element.setAttribute("stroke-dasharray", e) }
- }; v.prototype.destroy = function () {
- var b = this, f = b.element || {}, h = b.renderer, p = f.ownerSVGElement, c = h.isSVG &&
- "SPAN" === f.nodeName && b.parentGroup || void 0; f.onclick = f.onmouseout = f.onmouseover = f.onmousemove = f.point = null; D(b); if (b.clipPath && p) { var r = b.clipPath;[].forEach.call(p.querySelectorAll("[clip-path],[CLIP-PATH]"), function (b) { -1 < b.getAttribute("clip-path").indexOf(r.element.id) && b.removeAttribute("clip-path") }); b.clipPath = r.destroy() } if (b.stops) { for (p = 0; p < b.stops.length; p++)b.stops[p].destroy(); b.stops.length = 0; b.stops = void 0 } b.safeRemoveChild(f); for (h.styledMode || b.destroyShadows(); c && c.div && 0 === c.div.childNodes.length;)f =
- c.parentGroup, b.safeRemoveChild(c.div), delete c.div, c = f; b.alignTo && K(h.alignedObjects, b); e(b, function (e, f) { b[f] && b[f].parentGroup === b && b[f].destroy && b[f].destroy(); delete b[f] })
- }; v.prototype.destroyShadows = function () { (this.shadows || []).forEach(function (b) { this.safeRemoveChild(b) }, this); this.shadows = void 0 }; v.prototype.destroyTextPath = function (b, e) {
- var f = b.getElementsByTagName("text")[0]; if (f) {
- if (f.removeAttribute("dx"), f.removeAttribute("dy"), e.element.setAttribute("id", ""), this.textPathWrapper &&
- f.getElementsByTagName("textPath").length) { for (b = this.textPathWrapper.element.childNodes; b.length;)f.appendChild(b[0]); f.removeChild(this.textPathWrapper.element) }
- } else if (b.getAttribute("dx") || b.getAttribute("dy")) b.removeAttribute("dx"), b.removeAttribute("dy"); this.textPathWrapper && (this.textPathWrapper = this.textPathWrapper.destroy())
- }; v.prototype.dSetter = function (b, e, f) {
- n(b) && ("string" === typeof b[0] && (b = this.renderer.pathToSegments(b)), this.pathArray = b, b = b.reduce(function (b, e, f) {
- return e && e.join ?
- (f ? b + " " : "") + e.join(" ") : (e || "").toString()
- }, "")); /(NaN| {2}|^$)/.test(b) && (b = "M 0 0"); this[e] !== b && (f.setAttribute(e, b), this[e] = b)
- }; v.prototype.fadeOut = function (e) { var f = this; f.animate({ opacity: 0 }, { duration: b(e, 150), complete: function () { f.hide() } }) }; v.prototype.fillSetter = function (b, e, f) { "string" === typeof b ? f.setAttribute(e, b) : b && this.complexColor(b, e, f) }; v.prototype.getBBox = function (e, h) {
- var p = this.alignValue, c = this.element, r = this.renderer, n = this.styles, u = this.textStr, d = r.cache, P = r.cacheKeys, y = c.namespaceURI ===
- this.SVG_NS; h = b(h, this.rotation, 0); var I = r.styledMode ? c && v.prototype.getStyle.call(c, "font-size") : n && n.fontSize, g; if (M(u)) { var L = u.toString(); -1 === L.indexOf("<") && (L = L.replace(/[0-9]/g, "0")); L += ["", h, I, this.textWidth, p, n && n.textOverflow, n && n.fontWeight].join() } L && !e && (g = d[L]); if (!g) {
- if (y || r.forExport) {
- try {
- var a = this.fakeTS && function (b) { var e = c.querySelector(".highcharts-text-outline"); e && F(e, { display: b }) }; f(a) && a("none"); g = c.getBBox ? w({}, c.getBBox()) : { width: c.offsetWidth, height: c.offsetHeight }; f(a) &&
- a("")
- } catch (ea) { "" } if (!g || 0 > g.width) g = { x: 0, y: 0, width: 0, height: 0 }
- } else g = this.htmlGetBBox(); if (r.isSVG && (r = g.width, e = g.height, y && (g.height = e = { "11px,17": 14, "13px,20": 16 }["" + (I || "") + ",".concat(Math.round(e))] || e), h)) {
- y = Number(c.getAttribute("y") || 0) - g.y; p = { right: 1, center: .5 }[p || 0] || 0; n = h * m; I = (h - 90) * m; var z = r * Math.cos(n); h = r * Math.sin(n); a = Math.cos(I); n = Math.sin(I); r = g.x + p * (r - z) + y * a; I = r + z; a = I - e * a; z = a - z; y = g.y + y - p * h + y * n; p = y + h; e = p - e * n; h = e - h; g.x = Math.min(r, I, a, z); g.y = Math.min(y, p, e, h); g.width = Math.max(r, I,
- a, z) - g.x; g.height = Math.max(y, p, e, h) - g.y
- } if (L && ("" === u || 0 < g.height)) { for (; 250 < P.length;)delete d[P.shift()]; d[L] || P.push(L); d[L] = g }
- } return g
- }; v.prototype.getStyle = function (b) { return t.getComputedStyle(this.element || this, "").getPropertyValue(b) }; v.prototype.hasClass = function (b) { return -1 !== ("" + this.attr("class")).split(" ").indexOf(b) }; v.prototype.hide = function () { return this.attr({ visibility: "hidden" }) }; v.prototype.htmlGetBBox = function () { return { height: 0, width: 0, x: 0, y: 0 } }; v.prototype.init = function (b,
- e) { this.element = "span" === e ? E(e) : l.createElementNS(this.SVG_NS, e); this.renderer = b; z(this, "afterInit") }; v.prototype.invert = function (b) { this.inverted = b; this.updateTransform(); return this }; v.prototype.on = function (b, e) { var f = this.onEvents; if (f[b]) f[b](); f[b] = k(this.element, b, e); return this }; v.prototype.opacitySetter = function (b, e, f) { this.opacity = b = Number(Number(b).toFixed(3)); f.setAttribute(e, b) }; v.prototype.removeClass = function (b) {
- return this.attr("class", ("" + this.attr("class")).replace(h(b) ? new RegExp("(^| )".concat(b,
- "( |$)")) : b, " ").replace(/ +/g, " ").trim())
- }; v.prototype.removeTextOutline = function () { var b = this.element.querySelector("tspan.highcharts-text-outline"); b && this.safeRemoveChild(b) }; v.prototype.safeRemoveChild = function (b) { var e = b.parentNode; e && e.removeChild(b) }; v.prototype.setRadialReference = function (b) { var e = this.element.gradient && this.renderer.gradients[this.element.gradient]; this.element.radialReference = b; e && e.radAttr && e.animate(this.renderer.getRadialAttr(b, e.radAttr)); return this }; v.prototype.setTextPath =
- function (b, f) {
- var h = this.element, c = this.text ? this.text.element : h, v = { textAnchor: "text-anchor" }, n = !1, y = this.textPathWrapper, g = !y; f = r(!0, { enabled: !0, attributes: { dy: -5, startOffset: "50%", textAnchor: "middle" } }, f); var P = q.filterUserAttributes(f.attributes); if (b && f && f.enabled) {
- y && null === y.element.parentNode ? (g = !0, y = y.destroy()) : y && this.removeTextOutline.call(y.parentGroup); this.options && this.options.padding && (P.dx = -this.options.padding); y || (this.textPathWrapper = y = this.renderer.createElement("textPath"), n =
- !0); var I = y.element; (f = b.element.getAttribute("id")) || b.element.setAttribute("id", f = p()); if (g) for (c.setAttribute("y", 0), u(P.dx) && c.setAttribute("x", -P.dx), b = [].slice.call(c.childNodes), g = 0; g < b.length; g++) { var a = b[g]; a.nodeType !== t.Node.TEXT_NODE && "tspan" !== a.nodeName || I.appendChild(a) } n && y && y.add({ element: c }); I.setAttributeNS("http://www.w3.org/1999/xlink", "href", this.renderer.url + "#" + f); M(P.dy) && (I.parentNode.setAttribute("dy", P.dy), delete P.dy); M(P.dx) && (I.parentNode.setAttribute("dx", P.dx), delete P.dx);
- e(P, function (b, e) { I.setAttribute(v[e] || e, b) }); h.removeAttribute("transform"); this.removeTextOutline.call(y); this.text && !this.renderer.styledMode && this.attr({ fill: "none", "stroke-width": 0 }); this.applyTextOutline = this.updateTransform = d
- } else y && (delete this.updateTransform, delete this.applyTextOutline, this.destroyTextPath(h, b), this.updateTransform(), this.options && this.options.rotation && this.applyTextOutline(this.options.style.textOutline)); return this
- }; v.prototype.shadow = function (b, f, h) {
- var p = [], c = this.element,
- N = this.oldShadowOptions, r = { color: "#000000", offsetX: this.parentInverted ? -1 : 1, offsetY: this.parentInverted ? -1 : 1, opacity: .15, width: 3 }, v = !1, n; !0 === b ? n = r : "object" === typeof b && (n = w(r, b)); n && (n && N && e(n, function (b, e) { b !== N[e] && (v = !0) }), v && this.destroyShadows(), this.oldShadowOptions = n); if (!n) this.destroyShadows(); else if (!this.shadows) {
- var y = n.opacity / n.width; var u = this.parentInverted ? "translate(".concat(n.offsetY, ", ").concat(n.offsetX, ")") : "translate(".concat(n.offsetX, ", ").concat(n.offsetY, ")"); for (r = 1; r <=
- n.width; r++) { var g = c.cloneNode(!1); var d = 2 * n.width + 1 - 2 * r; B(g, { stroke: b.color || "#000000", "stroke-opacity": y * r, "stroke-width": d, transform: u, fill: "none" }); g.setAttribute("class", (g.getAttribute("class") || "") + " highcharts-shadow"); h && (B(g, "height", Math.max(B(g, "height") - d, 0)), g.cutHeight = d); f ? f.element.appendChild(g) : c.parentNode && c.parentNode.insertBefore(g, c); p.push(g) } this.shadows = p
- } return this
- }; v.prototype.show = function (b) { void 0 === b && (b = !0); return this.attr({ visibility: b ? "inherit" : "visible" }) }; v.prototype.strokeSetter =
- function (b, e, f) { this[e] = b; this.stroke && this["stroke-width"] ? (v.prototype.fillSetter.call(this, this.stroke, "stroke", f), f.setAttribute("stroke-width", this["stroke-width"]), this.hasStroke = !0) : "stroke-width" === e && 0 === b && this.hasStroke ? (f.removeAttribute("stroke"), this.hasStroke = !1) : this.renderer.styledMode && this["stroke-width"] && (f.setAttribute("stroke-width", this["stroke-width"]), this.hasStroke = !0) }; v.prototype.strokeWidth = function () {
- if (!this.renderer.styledMode) return this["stroke-width"] || 0; var b =
- this.getStyle("stroke-width"), e = 0; if (b.indexOf("px") === b.length - 2) e = y(b); else if ("" !== b) { var f = l.createElementNS(c, "rect"); B(f, { width: b, "stroke-width": 0 }); this.element.parentNode.appendChild(f); e = f.getBBox().width; f.parentNode.removeChild(f) } return e
- }; v.prototype.symbolAttr = function (e) { var f = this; "x y r start end width height innerR anchorX anchorY clockwise".split(" ").forEach(function (h) { f[h] = b(e[h], f[h]) }); f.attr({ d: f.renderer.symbols[f.symbolName](f.x, f.y, f.width, f.height, f) }) }; v.prototype.textSetter =
- function (b) { b !== this.textStr && (delete this.textPxLength, this.textStr = b, this.added && this.renderer.buildText(this)) }; v.prototype.titleSetter = function (e) { var f = this.element, h = f.getElementsByTagName("title")[0] || l.createElementNS(this.SVG_NS, "title"); f.insertBefore ? f.insertBefore(h, f.firstChild) : f.appendChild(h); h.textContent = String(b(e, "")).replace(/<[^>]*>/g, "").replace(/</g, "<").replace(/>/g, ">") }; v.prototype.toFront = function () { var b = this.element; b.parentNode.appendChild(b); return this }; v.prototype.translate =
- function (b, e) { return this.attr({ translateX: b, translateY: e }) }; v.prototype.updateShadows = function (b, e, f) { var h = this.shadows; if (h) for (var p = h.length; p--;)f.call(h[p], "height" === b ? Math.max(e - (h[p].cutHeight || 0), 0) : "d" === b ? this.d : e, b, h[p]) }; v.prototype.updateTransform = function () {
- var e = this.scaleX, f = this.scaleY, h = this.inverted, p = this.rotation, c = this.matrix, r = this.element, v = this.translateX || 0, n = this.translateY || 0; h && (v += this.width, n += this.height); v = ["translate(" + v + "," + n + ")"]; M(c) && v.push("matrix(" + c.join(",") +
- ")"); h ? v.push("rotate(90) scale(-1,1)") : p && v.push("rotate(" + p + " " + b(this.rotationOriginX, r.getAttribute("x"), 0) + " " + b(this.rotationOriginY, r.getAttribute("y") || 0) + ")"); (M(e) || M(f)) && v.push("scale(" + b(e, 1) + " " + b(f, 1) + ")"); v.length && r.setAttribute("transform", v.join(" "))
- }; v.prototype.visibilitySetter = function (b, e, f) { "inherit" === b ? f.removeAttribute(e) : this[e] !== b && f.setAttribute(e, b); this[e] = b }; v.prototype.xGetter = function (b) { "circle" === this.element.nodeName && ("x" === b ? b = "cx" : "y" === b && (b = "cy")); return this._defaultGetter(b) };
- v.prototype.zIndexSetter = function (b, e) {
- var f = this.renderer, h = this.parentGroup, p = (h || f).element || f.box, c = this.element; f = p === f.box; var r = !1; var v = this.added; var n; M(b) ? (c.setAttribute("data-z-index", b), b = +b, this[e] === b && (v = !1)) : M(this[e]) && c.removeAttribute("data-z-index"); this[e] = b; if (v) {
- (b = this.zIndex) && h && (h.handleZ = !0); e = p.childNodes; for (n = e.length - 1; 0 <= n && !r; n--) {
- h = e[n]; v = h.getAttribute("data-z-index"); var g = !M(v); if (h !== c) if (0 > b && g && !f && !n) p.insertBefore(c, e[n]), r = !0; else if (y(v) <= b || g && (!M(b) ||
- 0 <= b)) p.insertBefore(c, e[n + 1] || null), r = !0
- } r || (p.insertBefore(c, e[f ? 3 : 0] || null), r = !0)
- } return r
- }; return v
- }(); a.prototype["stroke-widthSetter"] = a.prototype.strokeSetter; a.prototype.yGetter = a.prototype.xGetter; a.prototype.matrixSetter = a.prototype.rotationOriginXSetter = a.prototype.rotationOriginYSetter = a.prototype.rotationSetter = a.prototype.scaleXSetter = a.prototype.scaleYSetter = a.prototype.translateXSetter = a.prototype.translateYSetter = a.prototype.verticalAlignSetter = function (b, e) {
- this[e] = b; this.doTransform =
- !0
- }; ""; return a
- }); O(a, "Core/Renderer/RendererRegistry.js", [a["Core/Globals.js"]], function (a) { var C; (function (C) { C.rendererTypes = {}; var q; C.getRendererType = function (a) { void 0 === a && (a = q); return C.rendererTypes[a] || C.rendererTypes[q] }; C.registerRendererType = function (x, A, J) { C.rendererTypes[x] = A; if (!q || J) q = x, a.Renderer = A } })(C || (C = {})); return C }); O(a, "Core/Renderer/SVG/SVGLabel.js", [a["Core/Renderer/SVG/SVGElement.js"], a["Core/Utilities.js"]], function (a, q) {
- var C = this && this.__extends || function () {
- var a = function (d,
- g) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (c, g) { c.__proto__ = g } || function (c, g) { for (var d in g) g.hasOwnProperty(d) && (c[d] = g[d]) }; return a(d, g) }; return function (d, g) { function c () { this.constructor = d } a(d, g); d.prototype = null === g ? Object.create(g) : (c.prototype = g.prototype, new c) }
- }(), G = q.defined, x = q.extend, H = q.isNumber, J = q.merge, D = q.pick, m = q.removeEvent; return function (l) {
- function d (g, c, a, k, B, E, F, M, K, w) {
- var z = l.call(this) || this; z.paddingLeftSetter = z.paddingSetter; z.paddingRightSetter =
- z.paddingSetter; z.init(g, "g"); z.textStr = c; z.x = a; z.y = k; z.anchorX = E; z.anchorY = F; z.baseline = K; z.className = w; z.addClass("button" === w ? "highcharts-no-tooltip" : "highcharts-label"); w && z.addClass("highcharts-" + w); z.text = g.text(void 0, 0, 0, M).attr({ zIndex: 1 }); var n; "string" === typeof B && ((n = /^url\((.*?)\)$/.test(B)) || z.renderer.symbols[B]) && (z.symbolKey = B); z.bBox = d.emptyBBox; z.padding = 3; z.baselineOffset = 0; z.needsBox = g.styledMode || n; z.deferredAttr = {}; z.alignFactor = 0; return z
- } C(d, l); d.prototype.alignSetter = function (g) {
- g =
- { left: 0, center: .5, right: 1 }[g]; g !== this.alignFactor && (this.alignFactor = g, this.bBox && H(this.xSetting) && this.attr({ x: this.xSetting }))
- }; d.prototype.anchorXSetter = function (g, c) { this.anchorX = g; this.boxAttr(c, Math.round(g) - this.getCrispAdjust() - this.xSetting) }; d.prototype.anchorYSetter = function (g, c) { this.anchorY = g; this.boxAttr(c, g - this.ySetting) }; d.prototype.boxAttr = function (g, c) { this.box ? this.box.attr(g, c) : this.deferredAttr[g] = c }; d.prototype.css = function (g) {
- if (g) {
- var c = {}; g = J(g); d.textProps.forEach(function (d) {
- "undefined" !==
- typeof g[d] && (c[d] = g[d], delete g[d])
- }); this.text.css(c); var t = "width" in c; "fontSize" in c || "fontWeight" in c ? this.updateTextPadding() : t && this.updateBoxSize()
- } return a.prototype.css.call(this, g)
- }; d.prototype.destroy = function () { m(this.element, "mouseenter"); m(this.element, "mouseleave"); this.text && this.text.destroy(); this.box && (this.box = this.box.destroy()); a.prototype.destroy.call(this) }; d.prototype.fillSetter = function (g, c) { g && (this.needsBox = !0); this.fill = g; this.boxAttr(c, g) }; d.prototype.getBBox = function () {
- this.textStr &&
- 0 === this.bBox.width && 0 === this.bBox.height && this.updateBoxSize(); var g = this.padding, c = D(this.paddingLeft, g); return { width: this.width, height: this.height, x: this.bBox.x - c, y: this.bBox.y - g }
- }; d.prototype.getCrispAdjust = function () { return this.renderer.styledMode && this.box ? this.box.strokeWidth() % 2 / 2 : (this["stroke-width"] ? parseInt(this["stroke-width"], 10) : 0) % 2 / 2 }; d.prototype.heightSetter = function (g) { this.heightSetting = g }; d.prototype.onAdd = function () {
- var g = this.textStr; this.text.add(this); this.attr({
- text: G(g) ?
- g : "", x: this.x, y: this.y
- }); this.box && G(this.anchorX) && this.attr({ anchorX: this.anchorX, anchorY: this.anchorY })
- }; d.prototype.paddingSetter = function (g, c) { H(g) ? g !== this[c] && (this[c] = g, this.updateTextPadding()) : this[c] = void 0 }; d.prototype.rSetter = function (g, c) { this.boxAttr(c, g) }; d.prototype.shadow = function (g) { g && !this.renderer.styledMode && (this.updateBoxSize(), this.box && this.box.shadow(g)); return this }; d.prototype.strokeSetter = function (g, c) { this.stroke = g; this.boxAttr(c, g) }; d.prototype["stroke-widthSetter"] =
- function (g, c) { g && (this.needsBox = !0); this["stroke-width"] = g; this.boxAttr(c, g) }; d.prototype["text-alignSetter"] = function (g) { this.textAlign = g }; d.prototype.textSetter = function (g) { "undefined" !== typeof g && this.text.attr({ text: g }); this.updateTextPadding() }; d.prototype.updateBoxSize = function () {
- var g = this.text.element.style, c = {}, a = this.padding, k = this.bBox = H(this.widthSetting) && H(this.heightSetting) && !this.textAlign || !G(this.text.textStr) ? d.emptyBBox : this.text.getBBox(); this.width = this.getPaddedWidth(); this.height =
- (this.heightSetting || k.height || 0) + 2 * a; g = this.renderer.fontMetrics(g && g.fontSize, this.text); this.baselineOffset = a + Math.min((this.text.firstLineMetrics || g).b, k.height || Infinity); this.heightSetting && (this.baselineOffset += (this.heightSetting - g.h) / 2); this.needsBox && (this.box || (a = this.box = this.symbolKey ? this.renderer.symbol(this.symbolKey) : this.renderer.rect(), a.addClass(("button" === this.className ? "" : "highcharts-label-box") + (this.className ? " highcharts-" + this.className + "-box" : "")), a.add(this)), a = this.getCrispAdjust(),
- c.x = a, c.y = (this.baseline ? -this.baselineOffset : 0) + a, c.width = Math.round(this.width), c.height = Math.round(this.height), this.box.attr(x(c, this.deferredAttr)), this.deferredAttr = {})
- }; d.prototype.updateTextPadding = function () {
- var g = this.text; this.updateBoxSize(); var c = this.baseline ? 0 : this.baselineOffset, d = D(this.paddingLeft, this.padding); G(this.widthSetting) && this.bBox && ("center" === this.textAlign || "right" === this.textAlign) && (d += { center: .5, right: 1 }[this.textAlign] * (this.widthSetting - this.bBox.width)); if (d !==
- g.x || c !== g.y) g.attr("x", d), g.hasBoxWidthChanged && (this.bBox = g.getBBox(!0)), "undefined" !== typeof c && g.attr("y", c); g.x = d; g.y = c
- }; d.prototype.widthSetter = function (g) { this.widthSetting = H(g) ? g : void 0 }; d.prototype.getPaddedWidth = function () { var g = this.padding, c = D(this.paddingLeft, g); g = D(this.paddingRight, g); return (this.widthSetting || this.bBox.width || 0) + c + g }; d.prototype.xSetter = function (g) {
- this.x = g; this.alignFactor && (g -= this.alignFactor * this.getPaddedWidth(), this["forceAnimate:x"] = !0); this.xSetting = Math.round(g);
- this.attr("translateX", this.xSetting)
- }; d.prototype.ySetter = function (g) { this.ySetting = this.y = Math.round(g); this.attr("translateY", this.ySetting) }; d.emptyBBox = { width: 0, height: 0, x: 0, y: 0 }; d.textProps = "color direction fontFamily fontSize fontStyle fontWeight lineHeight textAlign textDecoration textOutline textOverflow width".split(" "); return d
- }(a)
- }); O(a, "Core/Renderer/SVG/Symbols.js", [a["Core/Utilities.js"]], function (a) {
- function C (a, m, l, d, g) {
- var c = []; if (g) {
- var t = g.start || 0, k = J(g.r, l); l = J(g.r, d || l); var B =
- (g.end || 0) - .001; d = g.innerR; var E = J(g.open, .001 > Math.abs((g.end || 0) - t - 2 * Math.PI)), F = Math.cos(t), M = Math.sin(t), K = Math.cos(B), w = Math.sin(B); t = J(g.longArc, .001 > B - t - Math.PI ? 0 : 1); c.push(["M", a + k * F, m + l * M], ["A", k, l, 0, t, J(g.clockwise, 1), a + k * K, m + l * w]); x(d) && c.push(E ? ["M", a + d * K, m + d * w] : ["L", a + d * K, m + d * w], ["A", d, d, 0, t, x(g.clockwise) ? 1 - g.clockwise : 0, a + d * F, m + d * M]); E || c.push(["Z"])
- } return c
- } function A (a, m, l, d, g) { return g && g.r ? G(a, m, l, d, g) : [["M", a, m], ["L", a + l, m], ["L", a + l, m + d], ["L", a, m + d], ["Z"]] } function G (a, m, l, d,
- g) { g = g && g.r || 0; return [["M", a + g, m], ["L", a + l - g, m], ["C", a + l, m, a + l, m, a + l, m + g], ["L", a + l, m + d - g], ["C", a + l, m + d, a + l, m + d, a + l - g, m + d], ["L", a + g, m + d], ["C", a, m + d, a, m + d, a, m + d - g], ["L", a, m + g], ["C", a, m, a, m, a + g, m]] } var x = a.defined, H = a.isNumber, J = a.pick; return {
- arc: C, callout: function (a, m, l, d, g) {
- var c = Math.min(g && g.r || 0, l, d), t = c + 6, k = g && g.anchorX; g = g && g.anchorY || 0; var B = G(a, m, l, d, { r: c }); if (!H(k)) return B; a + k >= l ? g > m + t && g < m + d - t ? B.splice(3, 1, ["L", a + l, g - 6], ["L", a + l + 6, g], ["L", a + l, g + 6], ["L", a + l, m + d - c]) : B.splice(3, 1, ["L", a + l, d /
- 2], ["L", k, g], ["L", a + l, d / 2], ["L", a + l, m + d - c]) : 0 >= a + k ? g > m + t && g < m + d - t ? B.splice(7, 1, ["L", a, g + 6], ["L", a - 6, g], ["L", a, g - 6], ["L", a, m + c]) : B.splice(7, 1, ["L", a, d / 2], ["L", k, g], ["L", a, d / 2], ["L", a, m + c]) : g && g > d && k > a + t && k < a + l - t ? B.splice(5, 1, ["L", k + 6, m + d], ["L", k, m + d + 6], ["L", k - 6, m + d], ["L", a + c, m + d]) : g && 0 > g && k > a + t && k < a + l - t && B.splice(1, 1, ["L", k - 6, m], ["L", k, m - 6], ["L", k + 6, m], ["L", l - c, m]); return B
- }, circle: function (a, m, l, d) { return C(a + l / 2, m + d / 2, l / 2, d / 2, { start: .5 * Math.PI, end: 2.5 * Math.PI, open: !1 }) }, diamond: function (a, m, l, d) {
- return [["M",
- a + l / 2, m], ["L", a + l, m + d / 2], ["L", a + l / 2, m + d], ["L", a, m + d / 2], ["Z"]]
- }, rect: A, roundedRect: G, square: A, triangle: function (a, m, l, d) { return [["M", a + l / 2, m], ["L", a + l, m + d], ["L", a, m + d], ["Z"]] }, "triangle-down": function (a, m, l, d) { return [["M", a, m], ["L", a + l, m], ["L", a + l / 2, m + d], ["Z"]] }
- }
- }); O(a, "Core/Renderer/SVG/TextBuilder.js", [a["Core/Renderer/HTML/AST.js"], a["Core/Globals.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = q.doc, x = q.SVG_NS, H = q.win, J = A.attr, D = A.extend, m = A.isString, l = A.objectEach, d = A.pick; return function () {
- function g (c) {
- var a =
- c.styles; this.renderer = c.renderer; this.svgElement = c; this.width = c.textWidth; this.textLineHeight = a && a.lineHeight; this.textOutline = a && a.textOutline; this.ellipsis = !(!a || "ellipsis" !== a.textOverflow); this.noWrap = !(!a || "nowrap" !== a.whiteSpace); this.fontSize = a && a.fontSize
- } g.prototype.buildSVG = function () {
- var c = this.svgElement, g = c.element, k = c.renderer, B = d(c.textStr, "").toString(), E = -1 !== B.indexOf("<"), F = g.childNodes; k = this.width && !c.added && k.box; var l = /<br.*?>/g, K = [B, this.ellipsis, this.noWrap, this.textLineHeight,
- this.textOutline, this.fontSize, this.width].join(); if (K !== c.textCache) {
- c.textCache = K; delete c.actualWidth; for (K = F.length; K--;)g.removeChild(F[K]); E || this.ellipsis || this.width || -1 !== B.indexOf(" ") && (!this.noWrap || l.test(B)) ? "" !== B && (k && k.appendChild(g), B = new a(B), this.modifyTree(B.nodes), B.addToDOM(c.element), this.modifyDOM(), this.ellipsis && -1 !== (g.textContent || "").indexOf("\u2026") && c.attr("title", this.unescapeEntities(c.textStr || "", ["<", ">"])), k && k.removeChild(g)) : g.appendChild(C.createTextNode(this.unescapeEntities(B)));
- m(this.textOutline) && c.applyTextOutline && c.applyTextOutline(this.textOutline)
- }
- }; g.prototype.modifyDOM = function () {
- var c = this, a = this.svgElement, g = J(a.element, "x"); a.firstLineMetrics = void 0; for (var d; d = a.element.firstChild;)if (/^[\s\u200B]*$/.test(d.textContent || " ")) a.element.removeChild(d); else break;[].forEach.call(a.element.querySelectorAll("tspan.highcharts-br"), function (d, w) {
- d.nextSibling && d.previousSibling && (0 === w && 1 === d.previousSibling.nodeType && (a.firstLineMetrics = a.renderer.fontMetrics(void 0,
- d.previousSibling)), J(d, { dy: c.getLineHeight(d.nextSibling), x: g }))
- }); var E = this.width || 0; if (E) {
- var F = function (d, w) {
- var z = d.textContent || "", n = z.replace(/([^\^])-/g, "$1- ").split(" "), f = !c.noWrap && (1 < n.length || 1 < a.element.childNodes.length), u = c.getLineHeight(w), h = 0, r = a.actualWidth; if (c.ellipsis) z && c.truncate(d, z, void 0, 0, Math.max(0, E - parseInt(c.fontSize || 12, 10)), function (e, b) { return e.substring(0, b) + "\u2026" }); else if (f) {
- z = []; for (f = []; w.firstChild && w.firstChild !== d;)f.push(w.firstChild), w.removeChild(w.firstChild);
- for (; n.length;)n.length && !c.noWrap && 0 < h && (z.push(d.textContent || ""), d.textContent = n.join(" ").replace(/- /g, "-")), c.truncate(d, void 0, n, 0 === h ? r || 0 : 0, E, function (e, b) { return n.slice(0, b).join(" ").replace(/- /g, "-") }), r = a.actualWidth, h++; f.forEach(function (e) { w.insertBefore(e, d) }); z.forEach(function (e) { w.insertBefore(C.createTextNode(e), d); e = C.createElementNS(x, "tspan"); e.textContent = "\u200b"; J(e, { dy: u, x: g }); w.insertBefore(e, d) })
- }
- }, l = function (c) {
- [].slice.call(c.childNodes).forEach(function (d) {
- d.nodeType ===
- H.Node.TEXT_NODE ? F(d, c) : (-1 !== d.className.baseVal.indexOf("highcharts-br") && (a.actualWidth = 0), l(d))
- })
- }; l(a.element)
- }
- }; g.prototype.getLineHeight = function (c) { var a; c = c.nodeType === H.Node.TEXT_NODE ? c.parentElement : c; this.renderer.styledMode || (a = c && /(px|em)$/.test(c.style.fontSize) ? c.style.fontSize : this.fontSize || this.renderer.style.fontSize || 12); return this.textLineHeight ? parseInt(this.textLineHeight.toString(), 10) : this.renderer.fontMetrics(a, c || this.svgElement.element).h }; g.prototype.modifyTree = function (c) {
- var a =
- this, d = function (g, k) {
- var t = g.attributes; t = void 0 === t ? {} : t; var B = g.children, E = g.style; E = void 0 === E ? {} : E; var w = g.tagName, z = a.renderer.styledMode; if ("b" === w || "strong" === w) z ? t["class"] = "highcharts-strong" : E.fontWeight = "bold"; else if ("i" === w || "em" === w) z ? t["class"] = "highcharts-emphasized" : E.fontStyle = "italic"; E && E.color && (E.fill = E.color); "br" === w ? (t["class"] = "highcharts-br", g.textContent = "\u200b", (k = c[k + 1]) && k.textContent && (k.textContent = k.textContent.replace(/^ +/gm, ""))) : "a" === w && B && B.some(function (c) {
- return "#text" ===
- c.tagName
- }) && (g.children = [{ children: B, tagName: "tspan" }]); "#text" !== w && "a" !== w && (g.tagName = "tspan"); D(g, { attributes: t, style: E }); B && B.filter(function (c) { return "#text" !== c.tagName }).forEach(d)
- }; c.forEach(d)
- }; g.prototype.truncate = function (c, a, d, g, E, F) {
- var k = this.svgElement, t = k.renderer, w = k.rotation, z = [], n = d ? 1 : 0, f = (a || d || "").length, u = f, h, r = function (b, e) {
- e = e || b; var f = c.parentNode; if (f && "undefined" === typeof z[e]) if (f.getSubStringLength) try { z[e] = g + f.getSubStringLength(0, d ? e + 1 : e) } catch (p) { "" } else t.getSpanWidth &&
- (c.textContent = F(a || d, b), z[e] = g + t.getSpanWidth(k, c)); return z[e]
- }; k.rotation = 0; var e = r(c.textContent.length); if (g + e > E) { for (; n <= f;)u = Math.ceil((n + f) / 2), d && (h = F(d, u)), e = r(u, h && h.length - 1), n === f ? n = f + 1 : e > E ? f = u - 1 : n = u; 0 === f ? c.textContent = "" : a && f === a.length - 1 || (c.textContent = h || F(a || d, u)) } d && d.splice(0, u); k.actualWidth = e; k.rotation = w
- }; g.prototype.unescapeEntities = function (c, a) { l(this.renderer.escapes, function (d, g) { a && -1 !== a.indexOf(d) || (c = c.toString().replace(new RegExp(d, "g"), g)) }); return c }; return g
- }()
- });
- O(a, "Core/Renderer/SVG/SVGRenderer.js", [a["Core/Renderer/HTML/AST.js"], a["Core/Color/Color.js"], a["Core/Globals.js"], a["Core/Renderer/RendererRegistry.js"], a["Core/Renderer/SVG/SVGElement.js"], a["Core/Renderer/SVG/SVGLabel.js"], a["Core/Renderer/SVG/Symbols.js"], a["Core/Renderer/SVG/TextBuilder.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H, J, D, m) {
- var l = A.charts, d = A.deg2rad, g = A.doc, c = A.isFirefox, t = A.isMS, k = A.isWebKit, B = A.noop, E = A.SVG_NS, F = A.symbolSizes, M = A.win, K = m.addEvent, w = m.attr, z = m.createElement,
- n = m.css, f = m.defined, u = m.destroyObjectProperties, h = m.extend, r = m.isArray, e = m.isNumber, b = m.isObject, y = m.isString, I = m.merge, p = m.pick, v = m.pInt, L = m.uniqueKey, V; A = function () {
- function N (b, e, f, h, p, c, r) { this.width = this.url = this.style = this.isSVG = this.imgCount = this.height = this.gradients = this.globalAnimation = this.defs = this.chartIndex = this.cacheKeys = this.cache = this.boxWrapper = this.box = this.alignedObjects = void 0; this.init(b, e, f, h, p, c, r) } N.prototype.init = function (b, e, f, h, p, r, a) {
- var N = this.createElement("svg").attr({
- version: "1.1",
- "class": "highcharts-root"
- }), v = N.element; a || N.css(this.getStyle(h)); b.appendChild(v); w(b, "dir", "ltr"); -1 === b.innerHTML.indexOf("xmlns") && w(v, "xmlns", this.SVG_NS); this.isSVG = !0; this.box = v; this.boxWrapper = N; this.alignedObjects = []; this.url = this.getReferenceURL(); this.createElement("desc").add().element.appendChild(g.createTextNode("Created with Highcharts 10.1.0")); this.defs = this.createElement("defs").add(); this.allowHTML = r; this.forExport = p; this.styledMode = a; this.gradients = {}; this.cache = {}; this.cacheKeys =
- []; this.imgCount = 0; this.setSize(e, f, !1); var d; c && b.getBoundingClientRect && (e = function () { n(b, { left: 0, top: 0 }); d = b.getBoundingClientRect(); n(b, { left: Math.ceil(d.left) - d.left + "px", top: Math.ceil(d.top) - d.top + "px" }) }, e(), this.unSubPixelFix = K(M, "resize", e))
- }; N.prototype.definition = function (b) { return (new a([b])).addToDOM(this.defs.element) }; N.prototype.getReferenceURL = function () {
- if ((c || k) && g.getElementsByTagName("base").length) {
- if (!f(V)) {
- var b = L(); b = (new a([{
- tagName: "svg", attributes: { width: 8, height: 8 }, children: [{
- tagName: "defs",
- children: [{ tagName: "clipPath", attributes: { id: b }, children: [{ tagName: "rect", attributes: { width: 4, height: 4 } }] }]
- }, { tagName: "rect", attributes: { id: "hitme", width: 8, height: 8, "clip-path": "url(#".concat(b, ")"), fill: "rgba(0,0,0,0.001)" } }]
- }])).addToDOM(g.body); n(b, { position: "fixed", top: 0, left: 0, zIndex: 9E5 }); var e = g.elementFromPoint(6, 6); V = "hitme" === (e && e.id); g.body.removeChild(b)
- } if (V) return M.location.href.split("#")[0].replace(/<[^>]*>/g, "").replace(/([\('\)])/g, "\\$1").replace(/ /g, "%20")
- } return ""
- }; N.prototype.getStyle =
- function (b) { return this.style = h({ fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', fontSize: "12px" }, b) }; N.prototype.setStyle = function (b) { this.boxWrapper.css(this.getStyle(b)) }; N.prototype.isHidden = function () { return !this.boxWrapper.getBBox().width }; N.prototype.destroy = function () {
- var b = this.defs; this.box = null; this.boxWrapper = this.boxWrapper.destroy(); u(this.gradients || {}); this.gradients = null; b && (this.defs = b.destroy()); this.unSubPixelFix && this.unSubPixelFix(); return this.alignedObjects =
- null
- }; N.prototype.createElement = function (b) { var e = new this.Element; e.init(this, b); return e }; N.prototype.getRadialAttr = function (b, e) { return { cx: b[0] - b[2] / 2 + (e.cx || 0) * b[2], cy: b[1] - b[2] / 2 + (e.cy || 0) * b[2], r: (e.r || 0) * b[2] } }; N.prototype.buildText = function (b) { (new D(b)).buildSVG() }; N.prototype.getContrast = function (b) { b = q.parse(b).rgba; b[0] *= 1; b[1] *= 1.2; b[2] *= .5; return 459 < b[0] + b[1] + b[2] ? "#000000" : "#FFFFFF" }; N.prototype.button = function (e, f, p, c, r, N, v, d, g, n) {
- var y = this.label(e, f, p, g, void 0, void 0, n, void 0, "button"),
- u = this.styledMode; e = r && r.states || {}; r && delete r.states; var Q = 0, P = r ? I(r) : {}, z = I({ color: "#333333", cursor: "pointer", fontWeight: "normal" }, P.style); delete P.style; P = a.filterUserAttributes(P); y.attr(I({ padding: 8, r: 2 }, P)); if (!u) {
- P = I({ fill: "#f7f7f7", stroke: "#cccccc", "stroke-width": 1 }, P); N = I(P, { fill: "#e6e6e6" }, a.filterUserAttributes(N || e.hover || {})); var W = N.style; delete N.style; v = I(P, { fill: "#e6ebf5", style: { color: "#000000", fontWeight: "bold" } }, a.filterUserAttributes(v || e.select || {})); var w = v.style; delete v.style;
- d = I(P, { style: { color: "#cccccc" } }, a.filterUserAttributes(d || e.disabled || {})); var k = d.style; delete d.style
- } K(y.element, t ? "mouseover" : "mouseenter", function () { 3 !== Q && y.setState(1) }); K(y.element, t ? "mouseout" : "mouseleave", function () { 3 !== Q && y.setState(Q) }); y.setState = function (e) { 1 !== e && (y.state = Q = e); y.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass("highcharts-button-" + ["normal", "hover", "pressed", "disabled"][e || 0]); u || (y.attr([P, N, v, d][e || 0]), e = [z, W, w, k][e || 0], b(e) && y.css(e)) }; u ||
- y.attr(P).css(h({ cursor: "default" }, z)); return y.on("touchstart", function (b) { return b.stopPropagation() }).on("click", function (b) { 3 !== Q && c.call(y, b) })
- }; N.prototype.crispLine = function (b, e, h) { void 0 === h && (h = "round"); var p = b[0], c = b[1]; f(p[1]) && p[1] === c[1] && (p[1] = c[1] = Math[h](p[1]) - e % 2 / 2); f(p[2]) && p[2] === c[2] && (p[2] = c[2] = Math[h](p[2]) + e % 2 / 2); return b }; N.prototype.path = function (e) { var f = this.styledMode ? {} : { fill: "none" }; r(e) ? f.d = e : b(e) && h(f, e); return this.createElement("path").attr(f) }; N.prototype.circle =
- function (e, f, h) { e = b(e) ? e : "undefined" === typeof e ? {} : { x: e, y: f, r: h }; f = this.createElement("circle"); f.xSetter = f.ySetter = function (b, e, f) { f.setAttribute("c" + e, b) }; return f.attr(e) }; N.prototype.arc = function (e, f, h, p, c, r) { b(e) ? (p = e, f = p.y, h = p.r, e = p.x) : p = { innerR: p, start: c, end: r }; e = this.symbol("arc", e, f, h, h, p); e.r = h; return e }; N.prototype.rect = function (e, f, h, p, c, r) {
- c = b(e) ? e.r : c; var a = this.createElement("rect"); e = b(e) ? e : "undefined" === typeof e ? {} : { x: e, y: f, width: Math.max(h, 0), height: Math.max(p, 0) }; this.styledMode ||
- ("undefined" !== typeof r && (e["stroke-width"] = r, e = a.crisp(e)), e.fill = "none"); c && (e.r = c); a.rSetter = function (b, e, f) { a.r = b; w(f, { rx: b, ry: b }) }; a.rGetter = function () { return a.r || 0 }; return a.attr(e)
- }; N.prototype.setSize = function (b, e, f) { this.width = b; this.height = e; this.boxWrapper.animate({ width: b, height: e }, { step: function () { this.attr({ viewBox: "0 0 " + this.attr("width") + " " + this.attr("height") }) }, duration: p(f, !0) ? void 0 : 0 }); this.alignElements() }; N.prototype.g = function (b) {
- var e = this.createElement("g"); return b ? e.attr({
- "class": "highcharts-" +
- b
- }) : e
- }; N.prototype.image = function (b, f, h, p, c, r) {
- var a = { preserveAspectRatio: "none" }, N = function (b, e) { b.setAttributeNS ? b.setAttributeNS("http://www.w3.org/1999/xlink", "href", e) : b.setAttribute("hc-svg-href", e) }; e(f) && (a.x = f); e(h) && (a.y = h); e(p) && (a.width = p); e(c) && (a.height = c); var v = this.createElement("image").attr(a); f = function (e) { N(v.element, b); r.call(v, e) }; r ? (N(v.element, "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="), h = new M.Image, K(h, "load", f), h.src = b, h.complete && f({})) :
- N(v.element, b); return v
- }; N.prototype.symbol = function (b, e, c, r, a, N) {
- var v = this, d = /^url\((.*?)\)$/, y = d.test(b), u = !y && (this.symbols[b] ? b : "circle"), I = u && this.symbols[u], P; if (I) { "number" === typeof e && (P = I.call(this.symbols, Math.round(e || 0), Math.round(c || 0), r || 0, a || 0, N)); var Q = this.path(P); v.styledMode || Q.attr("fill", "none"); h(Q, { symbolName: u || void 0, x: e, y: c, width: r, height: a }); N && h(Q, N) } else if (y) {
- var w = b.match(d)[1]; var k = Q = this.image(w); k.imgwidth = p(F[w] && F[w].width, N && N.width); k.imgheight = p(F[w] && F[w].height,
- N && N.height); var t = function (b) { return b.attr({ width: b.width, height: b.height }) };["width", "height"].forEach(function (b) { k[b + "Setter"] = function (b, e) { var h = this["img" + e]; this[e] = b; f(h) && (N && "within" === N.backgroundSize && this.width && this.height && (h = Math.round(h * Math.min(this.width / this.imgwidth, this.height / this.imgheight))), this.element && this.element.setAttribute(e, h), this.alignByTranslate || (b = ((this[e] || 0) - h) / 2, this.attr("width" === e ? { translateX: b } : { translateY: b }))) } }); f(e) && k.attr({ x: e, y: c }); k.isImg = !0;
- f(k.imgwidth) && f(k.imgheight) ? t(k) : (k.attr({ width: 0, height: 0 }), z("img", { onload: function () { var b = l[v.chartIndex]; 0 === this.width && (n(this, { position: "absolute", top: "-999em" }), g.body.appendChild(this)); F[w] = { width: this.width, height: this.height }; k.imgwidth = this.width; k.imgheight = this.height; k.element && t(k); this.parentNode && this.parentNode.removeChild(this); v.imgCount--; if (!v.imgCount && b && !b.hasLoaded) b.onload() }, src: w }), this.imgCount++)
- } return Q
- }; N.prototype.clipRect = function (b, e, f, h) {
- var p = L() + "-", c =
- this.createElement("clipPath").attr({ id: p }).add(this.defs); b = this.rect(b, e, f, h, 0).add(c); b.id = p; b.clipPath = c; b.count = 0; return b
- }; N.prototype.text = function (b, e, h, p) {
- var c = {}; if (p && (this.allowHTML || !this.forExport)) return this.html(b, e, h); c.x = Math.round(e || 0); h && (c.y = Math.round(h)); f(b) && (c.text = b); b = this.createElement("text").attr(c); if (!p || this.forExport && !this.allowHTML) b.xSetter = function (b, e, f) {
- for (var h = f.getElementsByTagName("tspan"), p = f.getAttribute(e), c = 0, r; c < h.length; c++)r = h[c], r.getAttribute(e) ===
- p && r.setAttribute(e, b); f.setAttribute(e, b)
- }; return b
- }; N.prototype.fontMetrics = function (b, e) { b = !this.styledMode && /px/.test(b) || !M.getComputedStyle ? b || e && e.style && e.style.fontSize || this.style && this.style.fontSize : e && x.prototype.getStyle.call(e, "font-size"); b = /px/.test(b) ? v(b) : 12; e = 24 > b ? b + 3 : Math.round(1.2 * b); return { h: e, b: Math.round(.8 * e), f: b } }; N.prototype.rotCorr = function (b, e, f) { var h = b; e && f && (h = Math.max(h * Math.cos(e * d), 4)); return { x: -b / 3 * Math.sin(e * d), y: h } }; N.prototype.pathToSegments = function (b) {
- for (var f =
- [], h = [], p = { A: 8, C: 7, H: 2, L: 3, M: 3, Q: 5, S: 5, T: 3, V: 2 }, c = 0; c < b.length; c++)y(h[0]) && e(b[c]) && h.length === p[h[0].toUpperCase()] && b.splice(c, 0, h[0].replace("M", "L").replace("m", "l")), "string" === typeof b[c] && (h.length && f.push(h.slice(0)), h.length = 0), h.push(b[c]); f.push(h.slice(0)); return f
- }; N.prototype.label = function (b, e, f, h, p, c, r, a, N) { return new H(this, b, e, f, h, p, c, r, a, N) }; N.prototype.alignElements = function () { this.alignedObjects.forEach(function (b) { return b.align() }) }; return N
- }(); h(A.prototype, {
- Element: x, SVG_NS: E,
- escapes: { "&": "&", "<": "<", ">": ">", "'": "'", '"': """ }, symbols: J, draw: B
- }); G.registerRendererType("svg", A, !0); ""; return A
- }); O(a, "Core/Renderer/HTML/HTMLElement.js", [a["Core/Globals.js"], a["Core/Renderer/SVG/SVGElement.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = this && this.__extends || function () {
- var c = function (a, d) { c = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (c, a) { c.__proto__ = a } || function (c, a) { for (var d in a) a.hasOwnProperty(d) && (c[d] = a[d]) }; return c(a, d) }; return function (a,
- d) { function g () { this.constructor = a } c(a, d); a.prototype = null === d ? Object.create(d) : (g.prototype = d.prototype, new g) }
- }(), x = a.isFirefox, H = a.isMS, J = a.isWebKit, D = a.win, m = A.css, l = A.defined, d = A.extend, g = A.pick, c = A.pInt; return function (a) {
- function k () { return null !== a && a.apply(this, arguments) || this } C(k, a); k.compose = function (c) {
- if (-1 === k.composedClasses.indexOf(c)) {
- k.composedClasses.push(c); var a = k.prototype, d = c.prototype; d.getSpanCorrection = a.getSpanCorrection; d.htmlCss = a.htmlCss; d.htmlGetBBox = a.htmlGetBBox;
- d.htmlUpdateTransform = a.htmlUpdateTransform; d.setSpanRotation = a.setSpanRotation
- } return c
- }; k.prototype.getSpanCorrection = function (c, a, d) { this.xCorr = -c * d; this.yCorr = -a }; k.prototype.htmlCss = function (c) { var a = "SPAN" === this.element.tagName && c && "width" in c, k = g(a && c.width, void 0); if (a) { delete c.width; this.textWidth = k; var t = !0 } c && "ellipsis" === c.textOverflow && (c.whiteSpace = "nowrap", c.overflow = "hidden"); this.styles = d(this.styles, c); m(this.element, c); t && this.htmlUpdateTransform(); return this }; k.prototype.htmlGetBBox =
- function () { var c = this.element; return { x: c.offsetLeft, y: c.offsetTop, width: c.offsetWidth, height: c.offsetHeight } }; k.prototype.htmlUpdateTransform = function () {
- if (this.added) {
- var a = this.renderer, d = this.element, g = this.translateX || 0, k = this.translateY || 0, t = this.x || 0, w = this.y || 0, z = this.textAlign || "left", n = { left: 0, center: .5, right: 1 }[z], f = this.styles; f = f && f.whiteSpace; m(d, { marginLeft: g, marginTop: k }); !a.styledMode && this.shadows && this.shadows.forEach(function (b) { m(b, { marginLeft: g + 1, marginTop: k + 1 }) }); this.inverted &&
- [].forEach.call(d.childNodes, function (b) { a.invertChild(b, d) }); if ("SPAN" === d.tagName) {
- var u = this.rotation, h = this.textWidth && c(this.textWidth), r = [u, z, d.innerHTML, this.textWidth, this.textAlign].join(), e = void 0; e = !1; if (h !== this.oldTextWidth) {
- if (this.textPxLength) var b = this.textPxLength; else m(d, { width: "", whiteSpace: f || "nowrap" }), b = d.offsetWidth; (h > this.oldTextWidth || b > h) && (/[ \-]/.test(d.textContent || d.innerText) || "ellipsis" === d.style.textOverflow) && (m(d, {
- width: b > h || u ? h + "px" : "auto", display: "block", whiteSpace: f ||
- "normal"
- }), this.oldTextWidth = h, e = !0)
- } this.hasBoxWidthChanged = e; r !== this.cTT && (e = a.fontMetrics(d.style.fontSize, d).b, !l(u) || u === (this.oldRotation || 0) && z === this.oldAlign || this.setSpanRotation(u, n, e), this.getSpanCorrection(!l(u) && this.textPxLength || d.offsetWidth, e, n, u, z)); m(d, { left: t + (this.xCorr || 0) + "px", top: w + (this.yCorr || 0) + "px" }); this.cTT = r; this.oldRotation = u; this.oldAlign = z
- }
- } else this.alignOnAdd = !0
- }; k.prototype.setSpanRotation = function (c, a, d) {
- var g = {}, k = H && !/Edge/.test(D.navigator.userAgent) ? "-ms-transform" :
- J ? "-webkit-transform" : x ? "MozTransform" : D.opera ? "-o-transform" : void 0; k && (g[k] = g.transform = "rotate(" + c + "deg)", g[k + (x ? "Origin" : "-origin")] = g.transformOrigin = 100 * a + "% " + d + "px", m(this.element, g))
- }; k.composedClasses = []; return k
- }(q)
- }); O(a, "Core/Renderer/HTML/HTMLRenderer.js", [a["Core/Renderer/HTML/AST.js"], a["Core/Renderer/SVG/SVGElement.js"], a["Core/Renderer/SVG/SVGRenderer.js"], a["Core/Utilities.js"]], function (a, q, A, G) {
- var C = this && this.__extends || function () {
- var a = function (d, g) {
- a = Object.setPrototypeOf ||
- { __proto__: [] } instanceof Array && function (c, a) { c.__proto__ = a } || function (c, a) { for (var d in a) a.hasOwnProperty(d) && (c[d] = a[d]) }; return a(d, g)
- }; return function (d, g) { function c () { this.constructor = d } a(d, g); d.prototype = null === g ? Object.create(g) : (c.prototype = g.prototype, new c) }
- }(), H = G.attr, J = G.createElement, D = G.extend, m = G.pick; return function (l) {
- function d () { return null !== l && l.apply(this, arguments) || this } C(d, l); d.compose = function (a) {
- -1 === d.composedClasses.indexOf(a) && (d.composedClasses.push(a), a.prototype.html =
- d.prototype.html); return a
- }; d.prototype.html = function (d, c, t) {
- var g = this.createElement("span"), B = g.element, E = g.renderer, l = E.isSVG, M = function (c, a) { ["opacity", "visibility"].forEach(function (d) { c[d + "Setter"] = function (g, f, u) { var h = c.div ? c.div.style : a; q.prototype[d + "Setter"].call(this, g, f, u); h && (h[f] = g) } }); c.addedSetters = !0 }; g.textSetter = function (c) { c !== this.textStr && (delete this.bBox, delete this.oldTextWidth, a.setElementHTML(this.element, m(c, "")), this.textStr = c, g.doTransform = !0) }; l && M(g, g.element.style);
- g.xSetter = g.ySetter = g.alignSetter = g.rotationSetter = function (c, a) { "align" === a ? g.alignValue = g.textAlign = c : g[a] = c; g.doTransform = !0 }; g.afterSetters = function () { this.doTransform && (this.htmlUpdateTransform(), this.doTransform = !1) }; g.attr({ text: d, x: Math.round(c), y: Math.round(t) }).css({ position: "absolute" }); E.styledMode || g.css({ fontFamily: this.style.fontFamily, fontSize: this.style.fontSize }); B.style.whiteSpace = "nowrap"; g.css = g.htmlCss; l && (g.add = function (c) {
- var a = E.box.parentNode, d = []; if (this.parentGroup = c) {
- var n =
- c.div; if (!n) {
- for (; c;)d.push(c), c = c.parentGroup; d.reverse().forEach(function (f) {
- function c (b, h) { f[h] = b; "translateX" === h ? e.left = b + "px" : e.top = b + "px"; f.doTransform = !0 } var h = H(f.element, "class"), r = f.styles || {}; n = f.div = f.div || J("div", h ? { className: h } : void 0, { position: "absolute", left: (f.translateX || 0) + "px", top: (f.translateY || 0) + "px", display: f.display, opacity: f.opacity, cursor: r.cursor, pointerEvents: r.pointerEvents, visibility: f.visibility }, n || a); var e = n.style; D(f, {
- classSetter: function (b) {
- return function (e) {
- this.element.setAttribute("class",
- e); b.className = e
- }
- }(n), on: function () { d[0].div && g.on.apply({ element: d[0].div, onEvents: f.onEvents }, arguments); return f }, translateXSetter: c, translateYSetter: c
- }); f.addedSetters || M(f)
- })
- }
- } else n = a; n.appendChild(B); g.added = !0; g.alignOnAdd && g.htmlUpdateTransform(); return g
- }); return g
- }; d.composedClasses = []; return d
- }(A)
- }); O(a, "Core/Axis/AxisDefaults.js", [], function () {
- var a; (function (a) {
- a.defaultXAxisOptions = {
- alignTicks: !0, allowDecimals: void 0, panningEnabled: !0, zIndex: 2, zoomEnabled: !0, dateTimeLabelFormats: {
- millisecond: {
- main: "%H:%M:%S.%L",
- range: !1
- }, second: { main: "%H:%M:%S", range: !1 }, minute: { main: "%H:%M", range: !1 }, hour: { main: "%H:%M", range: !1 }, day: { main: "%e. %b" }, week: { main: "%e. %b" }, month: { main: "%b '%y" }, year: { main: "%Y" }
- }, endOnTick: !1, gridLineDashStyle: "Solid", gridZIndex: 1, labels: { autoRotation: void 0, autoRotationLimit: 80, distance: void 0, enabled: !0, indentation: 10, overflow: "justify", padding: 5, reserveSpace: void 0, rotation: void 0, staggerLines: 0, step: 0, useHTML: !1, x: 0, zIndex: 7, style: { color: "#666666", cursor: "default", fontSize: "11px" } }, maxPadding: .01,
- minorGridLineDashStyle: "Solid", minorTickLength: 2, minorTickPosition: "outside", minPadding: .01, offset: void 0, opposite: !1, reversed: void 0, reversedStacks: !1, showEmpty: !0, showFirstLabel: !0, showLastLabel: !0, startOfWeek: 1, startOnTick: !1, tickLength: 10, tickPixelInterval: 100, tickmarkPlacement: "between", tickPosition: "outside", title: { align: "middle", rotation: 0, useHTML: !1, x: 0, y: 0, style: { color: "#666666" } }, type: "linear", uniqueNames: !0, visible: !0, minorGridLineColor: "#f2f2f2", minorGridLineWidth: 1, minorTickColor: "#999999",
- lineColor: "#ccd6eb", lineWidth: 1, gridLineColor: "#e6e6e6", gridLineWidth: void 0, tickColor: "#ccd6eb"
- }; a.defaultYAxisOptions = {
- reversedStacks: !0, endOnTick: !0, maxPadding: .05, minPadding: .05, tickPixelInterval: 72, showLastLabel: !0, labels: { x: -8 }, startOnTick: !0, title: { rotation: 270, text: "Values" }, stackLabels: {
- animation: {}, allowOverlap: !1, enabled: !1, crop: !0, overflow: "justify", formatter: function () { var a = this.axis.chart.numberFormatter; return a(this.total, -1) }, style: {
- color: "#000000", fontSize: "11px", fontWeight: "bold",
- textOutline: "1px contrast"
- }
- }, gridLineWidth: 1, lineWidth: 0
- }; a.defaultLeftAxisOptions = { labels: { x: -15 }, title: { rotation: 270 } }; a.defaultRightAxisOptions = { labels: { x: 15 }, title: { rotation: 90 } }; a.defaultBottomAxisOptions = { labels: { autoRotation: [-45], x: 0 }, margin: 15, title: { rotation: 0 } }; a.defaultTopAxisOptions = { labels: { autoRotation: [-45], x: 0 }, margin: 15, title: { rotation: 0 } }
- })(a || (a = {})); return a
- }); O(a, "Core/Foundation.js", [a["Core/Utilities.js"]], function (a) {
- var C = a.addEvent, A = a.isFunction, G = a.objectEach, x = a.removeEvent,
- H; (function (a) { a.registerEventOptions = function (a, m) { a.eventOptions = a.eventOptions || {}; G(m.events, function (l, d) { a.eventOptions[d] !== l && (a.eventOptions[d] && (x(a, d, a.eventOptions[d]), delete a.eventOptions[d]), A(l) && (a.eventOptions[d] = l, C(a, d, l))) }) } })(H || (H = {})); return H
- }); O(a, "Core/Axis/Tick.js", [a["Core/FormatUtilities.js"], a["Core/Globals.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = q.deg2rad, x = A.clamp, H = A.correctFloat, J = A.defined, D = A.destroyObjectProperties, m = A.extend, l = A.fireEvent, d = A.isNumber,
- g = A.merge, c = A.objectEach, t = A.pick; q = function () {
- function k (c, a, d, g, k) { this.isNewLabel = this.isNew = !0; this.axis = c; this.pos = a; this.type = d || ""; this.parameters = k || {}; this.tickmarkOffset = this.parameters.tickmarkOffset; this.options = this.parameters.options; l(this, "init"); d || g || this.addLabel() } k.prototype.addLabel = function () {
- var c = this, g = c.axis, k = g.options, M = g.chart, K = g.categories, w = g.logarithmic, z = g.names, n = c.pos, f = t(c.options && c.options.labels, k.labels), u = g.tickPositions, h = n === u[0], r = n === u[u.length - 1], e =
- (!f.step || 1 === f.step) && 1 === g.tickInterval; u = u.info; var b = c.label, y; K = this.parameters.category || (K ? t(K[n], z[n], n) : n); w && d(K) && (K = H(w.lin2log(K))); if (g.dateTime) if (u) { var I = M.time.resolveDTLFormat(k.dateTimeLabelFormats[!k.grid && u.higherRanks[n] || u.unitName]); var p = I.main } else d(K) && (p = g.dateTime.getXDateFormat(K, k.dateTimeLabelFormats || {})); c.isFirst = h; c.isLast = r; var v = { axis: g, chart: M, dateTimeLabelFormat: p, isFirst: h, isLast: r, pos: n, tick: c, tickPositionInfo: u, value: K }; l(this, "labelFormat", v); var L = function (b) {
- return f.formatter ?
- f.formatter.call(b, b) : f.format ? (b.text = g.defaultLabelFormatter.call(b), a.format(f.format, b, M)) : g.defaultLabelFormatter.call(b, b)
- }; k = L.call(v, v); var V = I && I.list; c.shortenLabel = V ? function () { for (y = 0; y < V.length; y++)if (m(v, { dateTimeLabelFormat: V[y] }), b.attr({ text: L.call(v, v) }), b.getBBox().width < g.getSlotWidth(c) - 2 * f.padding) return; b.attr({ text: "" }) } : void 0; e && g._addedPlotLB && c.moveLabel(k, f); J(b) || c.movedLabel ? b && b.textStr !== k && !e && (!b.textWidth || f.style.width || b.styles.width || b.css({ width: null }), b.attr({ text: k }),
- b.textPxLength = b.getBBox().width) : (c.label = b = c.createLabel({ x: 0, y: 0 }, k, f), c.rotation = 0)
- }; k.prototype.createLabel = function (c, a, d) { var k = this.axis, t = k.chart; if (c = J(a) && d.enabled ? t.renderer.text(a, c.x, c.y, d.useHTML).add(k.labelGroup) : null) t.styledMode || c.css(g(d.style)), c.textPxLength = c.getBBox().width; return c }; k.prototype.destroy = function () { D(this, this.axis) }; k.prototype.getPosition = function (c, a, d, g) {
- var k = this.axis, w = k.chart, z = g && w.oldChartHeight || w.chartHeight; c = {
- x: c ? H(k.translate(a + d, null, null,
- g) + k.transB) : k.left + k.offset + (k.opposite ? (g && w.oldChartWidth || w.chartWidth) - k.right - k.left : 0), y: c ? z - k.bottom + k.offset - (k.opposite ? k.height : 0) : H(z - k.translate(a + d, null, null, g) - k.transB)
- }; c.y = x(c.y, -1E5, 1E5); l(this, "afterGetPosition", { pos: c }); return c
- }; k.prototype.getLabelPosition = function (c, a, d, g, k, w, z, n) {
- var f = this.axis, u = f.transA, h = f.isLinked && f.linkedParent ? f.linkedParent.reversed : f.reversed, r = f.staggerLines, e = f.tickRotCorr || { x: 0, y: 0 }, b = g || f.reserveSpaceDefault ? 0 : -f.labelOffset * ("center" === f.labelAlign ?
- .5 : 1), y = {}, I = k.y; J(I) || (I = 0 === f.side ? d.rotation ? -8 : -d.getBBox().height : 2 === f.side ? e.y + 8 : Math.cos(d.rotation * C) * (e.y - d.getBBox(!1, 0).height / 2)); c = c + k.x + b + e.x - (w && g ? w * u * (h ? -1 : 1) : 0); a = a + I - (w && !g ? w * u * (h ? 1 : -1) : 0); r && (d = z / (n || 1) % r, f.opposite && (d = r - d - 1), a += f.labelOffset / r * d); y.x = c; y.y = Math.round(a); l(this, "afterGetLabelPosition", { pos: y, tickmarkOffset: w, index: z }); return y
- }; k.prototype.getLabelSize = function () { return this.label ? this.label.getBBox()[this.axis.horiz ? "height" : "width"] : 0 }; k.prototype.getMarkPath =
- function (c, a, d, g, k, w) { return w.crispLine([["M", c, a], ["L", c + (k ? 0 : -d), a + (k ? d : 0)]], g) }; k.prototype.handleOverflow = function (c) {
- var a = this.axis, d = a.options.labels, g = c.x, k = a.chart.chartWidth, w = a.chart.spacing, z = t(a.labelLeft, Math.min(a.pos, w[3])); w = t(a.labelRight, Math.max(a.isRadial ? 0 : a.pos + a.len, k - w[1])); var n = this.label, f = this.rotation, u = { left: 0, center: .5, right: 1 }[a.labelAlign || n.attr("align")], h = n.getBBox().width, r = a.getSlotWidth(this), e = {}, b = r, y = 1, I; if (f || "justify" !== d.overflow) 0 > f && g - u * h < z ? I = Math.round(g /
- Math.cos(f * C) - z) : 0 < f && g + u * h > w && (I = Math.round((k - g) / Math.cos(f * C))); else if (k = g + (1 - u) * h, g - u * h < z ? b = c.x + b * (1 - u) - z : k > w && (b = w - c.x + b * u, y = -1), b = Math.min(r, b), b < r && "center" === a.labelAlign && (c.x += y * (r - b - u * (r - Math.min(h, b)))), h > b || a.autoRotation && (n.styles || {}).width) I = b; I && (this.shortenLabel ? this.shortenLabel() : (e.width = Math.floor(I) + "px", (d.style || {}).textOverflow || (e.textOverflow = "ellipsis"), n.css(e)))
- }; k.prototype.moveLabel = function (a, d) {
- var g = this, k = g.label, t = g.axis, w = t.reversed, z = !1; k && k.textStr === a ?
- (g.movedLabel = k, z = !0, delete g.label) : c(t.ticks, function (f) { z || f.isNew || f === g || !f.label || f.label.textStr !== a || (g.movedLabel = f.label, z = !0, f.labelPos = g.movedLabel.xy, delete f.label) }); if (!z && (g.labelPos || k)) { var n = g.labelPos || k.xy; k = t.horiz ? w ? 0 : t.width + t.left : n.x; t = t.horiz ? n.y : w ? t.width + t.left : 0; g.movedLabel = g.createLabel({ x: k, y: t }, a, d); g.movedLabel && g.movedLabel.attr({ opacity: 0 }) }
- }; k.prototype.render = function (c, a, d) {
- var g = this.axis, k = g.horiz, w = this.pos, z = t(this.tickmarkOffset, g.tickmarkOffset); w = this.getPosition(k,
- w, z, a); z = w.x; var n = w.y; g = k && z === g.pos + g.len || !k && n === g.pos ? -1 : 1; k = t(d, this.label && this.label.newOpacity, 1); d = t(d, 1); this.isActive = !0; this.renderGridLine(a, d, g); this.renderMark(w, d, g); this.renderLabel(w, a, k, c); this.isNew = !1; l(this, "afterRender")
- }; k.prototype.renderGridLine = function (c, a, d) {
- var g = this.axis, k = g.options, w = {}, z = this.pos, n = this.type, f = t(this.tickmarkOffset, g.tickmarkOffset), u = g.chart.renderer, h = this.gridLine, r = k.gridLineWidth, e = k.gridLineColor, b = k.gridLineDashStyle; "minor" === this.type &&
- (r = k.minorGridLineWidth, e = k.minorGridLineColor, b = k.minorGridLineDashStyle); h || (g.chart.styledMode || (w.stroke = e, w["stroke-width"] = r || 0, w.dashstyle = b), n || (w.zIndex = 1), c && (a = 0), this.gridLine = h = u.path().attr(w).addClass("highcharts-" + (n ? n + "-" : "") + "grid-line").add(g.gridGroup)); if (h && (d = g.getPlotLinePath({ value: z + f, lineWidth: h.strokeWidth() * d, force: "pass", old: c }))) h[c || this.isNew ? "attr" : "animate"]({ d: d, opacity: a })
- }; k.prototype.renderMark = function (c, a, d) {
- var g = this.axis, k = g.options, w = g.chart.renderer, z =
- this.type, n = g.tickSize(z ? z + "Tick" : "tick"), f = c.x; c = c.y; var u = t(k["minor" !== z ? "tickWidth" : "minorTickWidth"], !z && g.isXAxis ? 1 : 0); k = k["minor" !== z ? "tickColor" : "minorTickColor"]; var h = this.mark, r = !h; n && (g.opposite && (n[0] = -n[0]), h || (this.mark = h = w.path().addClass("highcharts-" + (z ? z + "-" : "") + "tick").add(g.axisGroup), g.chart.styledMode || h.attr({ stroke: k, "stroke-width": u })), h[r ? "attr" : "animate"]({ d: this.getMarkPath(f, c, n[0], h.strokeWidth() * d, g.horiz, w), opacity: a }))
- }; k.prototype.renderLabel = function (c, a, g, k) {
- var l =
- this.axis, w = l.horiz, z = l.options, n = this.label, f = z.labels, u = f.step; l = t(this.tickmarkOffset, l.tickmarkOffset); var h = c.x; c = c.y; var r = !0; n && d(h) && (n.xy = c = this.getLabelPosition(h, c, n, w, f, l, k, u), this.isFirst && !this.isLast && !z.showFirstLabel || this.isLast && !this.isFirst && !z.showLastLabel ? r = !1 : !w || f.step || f.rotation || a || 0 === g || this.handleOverflow(c), u && k % u && (r = !1), r && d(c.y) ? (c.opacity = g, n[this.isNewLabel ? "attr" : "animate"](c).show(!0), this.isNewLabel = !1) : (n.hide(), this.isNewLabel = !0))
- }; k.prototype.replaceMovedLabel =
- function () { var c = this.label, a = this.axis, d = a.reversed; if (c && !this.isNew) { var g = a.horiz ? d ? a.left : a.width + a.left : c.xy.x; d = a.horiz ? c.xy.y : d ? a.width + a.top : a.top; c.animate({ x: g, y: d, opacity: 0 }, void 0, c.destroy); delete this.label } a.isDirty = !0; this.label = this.movedLabel; delete this.movedLabel }; return k
- }(); ""; return q
- }); O(a, "Core/Axis/Axis.js", [a["Core/Animation/AnimationUtilities.js"], a["Core/Axis/AxisDefaults.js"], a["Core/Color/Color.js"], a["Core/DefaultOptions.js"], a["Core/Foundation.js"], a["Core/Globals.js"],
- a["Core/Axis/Tick.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H, J, D) {
- var m = a.animObject, l = G.defaultOptions, d = x.registerEventOptions, g = H.deg2rad, c = D.arrayMax, t = D.arrayMin, k = D.clamp, B = D.correctFloat, E = D.defined, F = D.destroyObjectProperties, M = D.erase, K = D.error, w = D.extend, z = D.fireEvent, n = D.isArray, f = D.isNumber, u = D.isString, h = D.merge, r = D.normalizeTickInterval, e = D.objectEach, b = D.pick, y = D.relativeLength, I = D.removeEvent, p = D.splat, v = D.syncTimeout, L = function (e, f) {
- return r(f, void 0, void 0, b(e.options.allowDecimals,
- .5 > f || void 0 !== e.tickAmount), !!e.tickAmount)
- }; a = function () {
- function a (b, e) {
- this.zoomEnabled = this.width = this.visible = this.userOptions = this.translationSlope = this.transB = this.transA = this.top = this.ticks = this.tickRotCorr = this.tickPositions = this.tickmarkOffset = this.tickInterval = this.tickAmount = this.side = this.series = this.right = this.positiveValuesOnly = this.pos = this.pointRangePadding = this.pointRange = this.plotLinesAndBandsGroups = this.plotLinesAndBands = this.paddedTicks = this.overlap = this.options = this.offset =
- this.names = this.minPixelPadding = this.minorTicks = this.minorTickInterval = this.min = this.maxLabelLength = this.max = this.len = this.left = this.labelFormatter = this.labelEdge = this.isLinked = this.height = this.hasVisibleSeries = this.hasNames = this.eventOptions = this.coll = this.closestPointRange = this.chart = this.bottom = this.alternateBands = void 0; this.init(b, e)
- } a.prototype.init = function (e, c) {
- var a = c.isX; this.chart = e; this.horiz = e.inverted && !this.isZAxis ? !a : a; this.isXAxis = a; this.coll = this.coll || (a ? "xAxis" : "yAxis"); z(this,
- "init", { userOptions: c }); this.opposite = b(c.opposite, this.opposite); this.side = b(c.side, this.side, this.horiz ? this.opposite ? 0 : 2 : this.opposite ? 1 : 3); this.setOptions(c); var h = this.options, g = h.labels, r = h.type; this.userOptions = c; this.minPixelPadding = 0; this.reversed = b(h.reversed, this.reversed); this.visible = h.visible; this.zoomEnabled = h.zoomEnabled; this.hasNames = "category" === r || !0 === h.categories; this.categories = h.categories || (this.hasNames ? [] : void 0); this.names || (this.names = [], this.names.keys = {}); this.plotLinesAndBandsGroups =
- {}; this.positiveValuesOnly = !!this.logarithmic; this.isLinked = E(h.linkedTo); this.ticks = {}; this.labelEdge = []; this.minorTicks = {}; this.plotLinesAndBands = []; this.alternateBands = {}; this.len = 0; this.minRange = this.userMinRange = h.minRange || h.maxZoom; this.range = h.range; this.offset = h.offset || 0; this.min = this.max = null; c = b(h.crosshair, p(e.options.tooltip.crosshairs)[a ? 0 : 1]); this.crosshair = !0 === c ? {} : c; -1 === e.axes.indexOf(this) && (a ? e.axes.splice(e.xAxis.length, 0, this) : e.axes.push(this), e[this.coll].push(this)); this.series =
- this.series || []; e.inverted && !this.isZAxis && a && "undefined" === typeof this.reversed && (this.reversed = !0); this.labelRotation = f(g.rotation) ? g.rotation : void 0; d(this, h); z(this, "afterInit")
- }; a.prototype.setOptions = function (b) { this.options = h(q.defaultXAxisOptions, "yAxis" === this.coll && q.defaultYAxisOptions, [q.defaultTopAxisOptions, q.defaultRightAxisOptions, q.defaultBottomAxisOptions, q.defaultLeftAxisOptions][this.side], h(l[this.coll], b)); z(this, "afterSetOptions", { userOptions: b }) }; a.prototype.defaultLabelFormatter =
- function (b) {
- var e = this.axis; b = this.chart.numberFormatter; var c = f(this.value) ? this.value : NaN, h = e.chart.time, a = this.dateTimeLabelFormat, p = l.lang, d = p.numericSymbols; p = p.numericSymbolMagnitude || 1E3; var g = e.logarithmic ? Math.abs(c) : e.tickInterval, r = d && d.length; if (e.categories) var v = "".concat(this.value); else if (a) v = h.dateFormat(a, c); else if (r && 1E3 <= g) for (; r-- && "undefined" === typeof v;)e = Math.pow(p, r + 1), g >= e && 0 === 10 * c % e && null !== d[r] && 0 !== c && (v = b(c / e, -1) + d[r]); "undefined" === typeof v && (v = 1E4 <= Math.abs(c) ? b(c,
- -1) : b(c, -1, void 0, "")); return v
- }; a.prototype.getSeriesExtremes = function () {
- var e = this, c = e.chart, h; z(this, "getSeriesExtremes", null, function () {
- e.hasVisibleSeries = !1; e.dataMin = e.dataMax = e.threshold = null; e.softThreshold = !e.isXAxis; e.stacking && e.stacking.buildStacks(); e.series.forEach(function (a) {
- if (a.visible || !c.options.chart.ignoreHiddenSeries) {
- var p = a.options, d = p.threshold; e.hasVisibleSeries = !0; e.positiveValuesOnly && 0 >= d && (d = null); if (e.isXAxis) {
- if (p = a.xData, p.length) {
- p = e.logarithmic ? p.filter(e.validatePositiveValue) :
- p; h = a.getXExtremes(p); var g = h.min; var r = h.max; f(g) || g instanceof Date || (p = p.filter(f), h = a.getXExtremes(p), g = h.min, r = h.max); p.length && (e.dataMin = Math.min(b(e.dataMin, g), g), e.dataMax = Math.max(b(e.dataMax, r), r))
- }
- } else if (a = a.applyExtremes(), f(a.dataMin) && (g = a.dataMin, e.dataMin = Math.min(b(e.dataMin, g), g)), f(a.dataMax) && (r = a.dataMax, e.dataMax = Math.max(b(e.dataMax, r), r)), E(d) && (e.threshold = d), !p.softThreshold || e.positiveValuesOnly) e.softThreshold = !1
- }
- })
- }); z(this, "afterGetSeriesExtremes")
- }; a.prototype.translate =
- function (b, e, c, a, h, p) { var d = this.linkedParent || this, g = a && d.old ? d.old.min : d.min, r = d.minPixelPadding; h = (d.isOrdinal || d.brokenAxis && d.brokenAxis.hasBreaks || d.logarithmic && h) && d.lin2val; var v = 1, n = 0; a = a && d.old ? d.old.transA : d.transA; a || (a = d.transA); c && (v *= -1, n = d.len); d.reversed && (v *= -1, n -= v * (d.sector || d.len)); e ? (p = (b * v + n - r) / a + g, h && (p = d.lin2val(p))) : (h && (b = d.val2lin(b)), b = v * (b - g) * a, p = f(g) ? (d.isRadial ? b : B(b)) + n + v * r + (f(p) ? a * p : 0) : void 0); return p }; a.prototype.toPixels = function (b, e) {
- return this.translate(b,
- !1, !this.horiz, null, !0) + (e ? 0 : this.pos)
- }; a.prototype.toValue = function (b, e) { return this.translate(b - (e ? 0 : this.pos), !0, !this.horiz, null, !0) }; a.prototype.getPlotLinePath = function (e) {
- function c (b, e, f) { if ("pass" !== I && b < e || b > f) I ? b = k(b, e, f) : m = !0; return b } var a = this, h = a.chart, p = a.left, d = a.top, g = e.old, r = e.value, v = e.lineWidth, n = g && h.oldChartHeight || h.chartHeight, y = g && h.oldChartWidth || h.chartWidth, N = a.transB, u = e.translatedValue, I = e.force, w, t, L, l, m; e = {
- value: r, lineWidth: v, old: g, force: I, acrossPanes: e.acrossPanes,
- translatedValue: u
- }; z(this, "getPlotLinePath", e, function (e) { u = b(u, a.translate(r, null, null, g)); u = k(u, -1E5, 1E5); w = L = Math.round(u + N); t = l = Math.round(n - u - N); f(u) ? a.horiz ? (t = d, l = n - a.bottom, w = L = c(w, p, p + a.width)) : (w = p, L = y - a.right, t = l = c(t, d, d + a.height)) : (m = !0, I = !1); e.path = m && !I ? null : h.renderer.crispLine([["M", w, t], ["L", L, l]], v || 1) }); return e.path
- }; a.prototype.getLinearTickPositions = function (b, e, f) {
- var a = B(Math.floor(e / b) * b); f = B(Math.ceil(f / b) * b); var c = [], h; B(a + b) === a && (h = 20); if (this.single) return [e]; for (e = a; e <=
- f;) { c.push(e); e = B(e + b, h); if (e === p) break; var p = e } return c
- }; a.prototype.getMinorTickInterval = function () { var e = this.options; return !0 === e.minorTicks ? b(e.minorTickInterval, "auto") : !1 === e.minorTicks ? null : e.minorTickInterval }; a.prototype.getMinorTickPositions = function () {
- var b = this.options, e = this.tickPositions, f = this.minorTickInterval, a = this.pointRangePadding || 0, c = this.min - a; a = this.max + a; var h = a - c, p = []; if (h && h / f < this.len / 3) {
- var d = this.logarithmic; if (d) this.paddedTicks.forEach(function (b, e, a) {
- e && p.push.apply(p,
- d.getLogTickPositions(f, a[e - 1], a[e], !0))
- }); else if (this.dateTime && "auto" === this.getMinorTickInterval()) p = p.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(f), c, a, b.startOfWeek)); else for (b = c + (e[0] - c) % f; b <= a && b !== p[0]; b += f)p.push(b)
- } 0 !== p.length && this.trimTicks(p); return p
- }; a.prototype.adjustForMinRange = function () {
- var e = this.options, f = this.logarithmic, a = this.min, h = this.max, p = 0, d, g, r, v; this.isXAxis && "undefined" === typeof this.minRange && !f && (E(e.min) || E(e.max) || E(e.floor) || E(e.ceiling) ?
- this.minRange = null : (this.series.forEach(function (b) { r = b.xData; v = b.xIncrement ? 1 : r.length - 1; if (1 < r.length) for (d = v; 0 < d; d--)if (g = r[d] - r[d - 1], !p || g < p) p = g }), this.minRange = Math.min(5 * p, this.dataMax - this.dataMin))); if (h - a < this.minRange) {
- var n = this.dataMax - this.dataMin >= this.minRange; var y = this.minRange; var u = (y - h + a) / 2; u = [a - u, b(e.min, a - u)]; n && (u[2] = this.logarithmic ? this.logarithmic.log2lin(this.dataMin) : this.dataMin); a = c(u); h = [a + y, b(e.max, a + y)]; n && (h[2] = f ? f.log2lin(this.dataMax) : this.dataMax); h = t(h); h - a < y &&
- (u[0] = h - y, u[1] = b(e.min, h - y), a = c(u))
- } this.min = a; this.max = h
- }; a.prototype.getClosest = function () { var b; this.categories ? b = 1 : this.series.forEach(function (e) { var f = e.closestPointRange, a = e.visible || !e.chart.options.chart.ignoreHiddenSeries; !e.noSharedTooltip && E(f) && a && (b = E(b) ? Math.min(b, f) : f) }); return b }; a.prototype.nameToX = function (e) {
- var f = n(this.options.categories), a = f ? this.categories : this.names, c = e.options.x; e.series.requireSorting = !1; E(c) || (c = this.options.uniqueNames && a ? f ? a.indexOf(e.name) : b(a.keys[e.name],
- -1) : e.series.autoIncrement()); if (-1 === c) { if (!f && a) var h = a.length } else h = c; "undefined" !== typeof h && (this.names[h] = e.name, this.names.keys[e.name] = h); return h
- }; a.prototype.updateNames = function () {
- var b = this, e = this.names; 0 < e.length && (Object.keys(e.keys).forEach(function (b) { delete e.keys[b] }), e.length = 0, this.minRange = this.userMinRange, (this.series || []).forEach(function (e) {
- e.xIncrement = null; if (!e.points || e.isDirtyData) b.max = Math.max(b.max, e.xData.length - 1), e.processData(), e.generatePoints(); e.data.forEach(function (f,
- a) { if (f && f.options && "undefined" !== typeof f.name) { var c = b.nameToX(f); "undefined" !== typeof c && c !== f.x && (f.x = c, e.xData[a] = c) } })
- }))
- }; a.prototype.setAxisTranslation = function () {
- var e = this, f = e.max - e.min, a = e.linkedParent, c = !!e.categories, h = e.isXAxis, p = e.axisPointRange || 0, d = 0, g = 0, r = e.transA; if (h || c || p) {
- var v = e.getClosest(); a ? (d = a.minPointOffset, g = a.pointRangePadding) : e.series.forEach(function (f) {
- var a = c ? 1 : h ? b(f.options.pointRange, v, 0) : e.axisPointRange || 0, r = f.options.pointPlacement; p = Math.max(p, a); if (!e.single ||
- c) f = f.is("xrange") ? !h : h, d = Math.max(d, f && u(r) ? 0 : a / 2), g = Math.max(g, f && "on" === r ? 0 : a)
- }); a = e.ordinal && e.ordinal.slope && v ? e.ordinal.slope / v : 1; e.minPointOffset = d *= a; e.pointRangePadding = g *= a; e.pointRange = Math.min(p, e.single && c ? 1 : f); h && (e.closestPointRange = v)
- } e.translationSlope = e.transA = r = e.staticScale || e.len / (f + g || 1); e.transB = e.horiz ? e.left : e.bottom; e.minPixelPadding = r * d; z(this, "afterSetAxisTranslation")
- }; a.prototype.minFromRange = function () { return this.max - this.range }; a.prototype.setTickInterval = function (e) {
- var a =
- this.chart, c = this.logarithmic, h = this.options, p = this.isXAxis, d = this.isLinked, g = h.tickPixelInterval, r = this.categories, v = this.softThreshold, n = h.maxPadding, u = h.minPadding, y = f(h.tickInterval) && 0 <= h.tickInterval ? h.tickInterval : void 0, I = f(this.threshold) ? this.threshold : null; this.dateTime || r || d || this.getTickAmount(); var N = b(this.userMin, h.min); var k = b(this.userMax, h.max); if (d) {
- this.linkedParent = a[this.coll][h.linkedTo]; var w = this.linkedParent.getExtremes(); this.min = b(w.min, w.dataMin); this.max = b(w.max, w.dataMax);
- h.type !== this.linkedParent.options.type && K(11, 1, a)
- } else { if (v && E(I)) if (this.dataMin >= I) w = I, u = 0; else if (this.dataMax <= I) { var t = I; n = 0 } this.min = b(N, w, this.dataMin); this.max = b(k, t, this.dataMax) } c && (this.positiveValuesOnly && !e && 0 >= Math.min(this.min, b(this.dataMin, this.min)) && K(10, 1, a), this.min = B(c.log2lin(this.min), 16), this.max = B(c.log2lin(this.max), 16)); this.range && E(this.max) && (this.userMin = this.min = N = Math.max(this.dataMin, this.minFromRange()), this.userMax = k = this.max, this.range = null); z(this, "foundExtremes");
- this.beforePadding && this.beforePadding(); this.adjustForMinRange(); !(r || this.axisPointRange || this.stacking && this.stacking.usePercentage || d) && E(this.min) && E(this.max) && (a = this.max - this.min) && (!E(N) && u && (this.min -= a * u), !E(k) && n && (this.max += a * n)); f(this.userMin) || (f(h.softMin) && h.softMin < this.min && (this.min = N = h.softMin), f(h.floor) && (this.min = Math.max(this.min, h.floor))); f(this.userMax) || (f(h.softMax) && h.softMax > this.max && (this.max = k = h.softMax), f(h.ceiling) && (this.max = Math.min(this.max, h.ceiling))); v &&
- E(this.dataMin) && (I = I || 0, !E(N) && this.min < I && this.dataMin >= I ? this.min = this.options.minRange ? Math.min(I, this.max - this.minRange) : I : !E(k) && this.max > I && this.dataMax <= I && (this.max = this.options.minRange ? Math.max(I, this.min + this.minRange) : I)); f(this.min) && f(this.max) && !this.chart.polar && this.min > this.max && (E(this.options.min) ? this.max = this.min : E(this.options.max) && (this.min = this.max)); this.tickInterval = this.min === this.max || "undefined" === typeof this.min || "undefined" === typeof this.max ? 1 : d && this.linkedParent &&
- !y && g === this.linkedParent.options.tickPixelInterval ? y = this.linkedParent.tickInterval : b(y, this.tickAmount ? (this.max - this.min) / Math.max(this.tickAmount - 1, 1) : void 0, r ? 1 : (this.max - this.min) * g / Math.max(this.len, g)); if (p && !e) { var l = this.min !== (this.old && this.old.min) || this.max !== (this.old && this.old.max); this.series.forEach(function (b) { b.forceCrop = b.forceCropping && b.forceCropping(); b.processData(l) }); z(this, "postProcessData", { hasExtemesChanged: l }) } this.setAxisTranslation(); z(this, "initialAxisTranslation");
- this.pointRange && !y && (this.tickInterval = Math.max(this.pointRange, this.tickInterval)); e = b(h.minTickInterval, this.dateTime && !this.series.some(function (b) { return b.noSharedTooltip }) ? this.closestPointRange : 0); !y && this.tickInterval < e && (this.tickInterval = e); this.dateTime || this.logarithmic || y || (this.tickInterval = L(this, this.tickInterval)); this.tickAmount || (this.tickInterval = this.unsquish()); this.setTickPositions()
- }; a.prototype.setTickPositions = function () {
- var b = this.options, e = b.tickPositions, f = this.getMinorTickInterval(),
- a = this.hasVerticalPanning(), h = "colorAxis" === this.coll, c = (h || !a) && b.startOnTick; a = (h || !a) && b.endOnTick; h = b.tickPositioner; this.tickmarkOffset = this.categories && "between" === b.tickmarkPlacement && 1 === this.tickInterval ? .5 : 0; this.minorTickInterval = "auto" === f && this.tickInterval ? this.tickInterval / 5 : f; this.single = this.min === this.max && E(this.min) && !this.tickAmount && (parseInt(this.min, 10) === this.min || !1 !== b.allowDecimals); this.tickPositions = f = e && e.slice(); if (!f) {
- if (this.ordinal && this.ordinal.positions || !((this.max -
- this.min) / this.tickInterval > Math.max(2 * this.len, 200))) if (this.dateTime) f = this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval, b.units), this.min, this.max, b.startOfWeek, this.ordinal && this.ordinal.positions, this.closestPointRange, !0); else if (this.logarithmic) f = this.logarithmic.getLogTickPositions(this.tickInterval, this.min, this.max); else for (var p = b = this.tickInterval; p <= 2 * b;)if (f = this.getLinearTickPositions(this.tickInterval, this.min, this.max), this.tickAmount && f.length > this.tickAmount) this.tickInterval =
- L(this, p *= 1.1); else break; else f = [this.min, this.max], K(19, !1, this.chart); f.length > this.len && (f = [f[0], f.pop()], f[0] === f[1] && (f.length = 1)); this.tickPositions = f; h && (h = h.apply(this, [this.min, this.max])) && (this.tickPositions = f = h)
- } this.paddedTicks = f.slice(0); this.trimTicks(f, c, a); this.isLinked || (this.single && 2 > f.length && !this.categories && !this.series.some(function (b) { return b.is("heatmap") && "between" === b.options.pointPlacement }) && (this.min -= .5, this.max += .5), e || h || this.adjustTickAmount()); z(this, "afterSetTickPositions")
- };
- a.prototype.trimTicks = function (b, e, f) { var a = b[0], h = b[b.length - 1], c = !this.isOrdinal && this.minPointOffset || 0; z(this, "trimTicks"); if (!this.isLinked) { if (e && -Infinity !== a) this.min = a; else for (; this.min - c > b[0];)b.shift(); if (f) this.max = h; else for (; this.max + c < b[b.length - 1];)b.pop(); 0 === b.length && E(a) && !this.options.tickPositions && b.push((h + a) / 2) } }; a.prototype.alignToOthers = function () {
- var b = this, e = [this], a = b.options, h = "yAxis" === this.coll && this.chart.options.chart.alignThresholds, c = [], p; b.thresholdAlignment =
- void 0; if ((!1 !== this.chart.options.chart.alignTicks && a.alignTicks || h) && !1 !== a.startOnTick && !1 !== a.endOnTick && !b.logarithmic) { var d = function (b) { var e = b.options; return [b.horiz ? e.left : e.top, e.width, e.height, e.pane].join() }, g = d(this); this.chart[this.coll].forEach(function (f) { var a = f.series; a.length && a.some(function (b) { return b.visible }) && f !== b && d(f) === g && (p = !0, e.push(f)) }) } if (p && h) {
- e.forEach(function (e) { e = e.getThresholdAlignment(b); f(e) && c.push(e) }); var r = 1 < c.length ? c.reduce(function (b, e) { return b + e },
- 0) / c.length : void 0; e.forEach(function (b) { b.thresholdAlignment = r })
- } return p
- }; a.prototype.getThresholdAlignment = function (b) { (!f(this.dataMin) || this !== b && this.series.some(function (b) { return b.isDirty || b.isDirtyData })) && this.getSeriesExtremes(); if (f(this.threshold)) return b = k((this.threshold - (this.dataMin || 0)) / ((this.dataMax || 0) - (this.dataMin || 0)), 0, 1), this.options.reversed && (b = 1 - b), b }; a.prototype.getTickAmount = function () {
- var b = this.options, e = b.tickPixelInterval, f = b.tickAmount; !E(b.tickInterval) && !f &&
- this.len < e && !this.isRadial && !this.logarithmic && b.startOnTick && b.endOnTick && (f = 2); !f && this.alignToOthers() && (f = Math.ceil(this.len / e) + 1); 4 > f && (this.finalTickAmt = f, f = 5); this.tickAmount = f
- }; a.prototype.adjustTickAmount = function () {
- var e = this, a = e.finalTickAmt, h = e.max, c = e.min, p = e.options, d = e.tickPositions, g = e.tickAmount, r = e.thresholdAlignment, v = d && d.length, n = b(e.threshold, e.softThreshold ? 0 : null); var y = e.tickInterval; if (f(r)) { var u = .5 > r ? Math.ceil(r * (g - 1)) : Math.floor(r * (g - 1)); p.reversed && (u = g - 1 - u) } if (e.hasData() &&
- f(c) && f(h)) {
- r = function () { e.transA *= (v - 1) / (g - 1); e.min = p.startOnTick ? d[0] : Math.min(c, d[0]); e.max = p.endOnTick ? d[d.length - 1] : Math.max(h, d[d.length - 1]) }; if (f(u) && f(e.threshold)) { for (; d[u] !== n || d.length !== g || d[0] > c || d[d.length - 1] < h;) { d.length = 0; for (d.push(e.threshold); d.length < g;)void 0 === d[u] || d[u] > e.threshold ? d.unshift(B(d[0] - y)) : d.push(B(d[d.length - 1] + y)); if (y > 8 * e.tickInterval) break; y *= 2 } r() } else if (v < g) { for (; d.length < g;)d.length % 2 || c === n ? d.push(B(d[d.length - 1] + y)) : d.unshift(B(d[0] - y)); r() } if (E(a)) {
- for (y =
- n = d.length; y--;)(3 === a && 1 === y % 2 || 2 >= a && 0 < y && y < n - 1) && d.splice(y, 1); e.finalTickAmt = void 0
- }
- }
- }; a.prototype.setScale = function () {
- var b = !1, e = !1; this.series.forEach(function (f) { b = b || f.isDirtyData || f.isDirty; e = e || f.xAxis && f.xAxis.isDirty || !1 }); this.setAxisSize(); var f = this.len !== (this.old && this.old.len); f || b || e || this.isLinked || this.forceRedraw || this.userMin !== (this.old && this.old.userMin) || this.userMax !== (this.old && this.old.userMax) || this.alignToOthers() ? (this.stacking && this.stacking.resetStacks(), this.forceRedraw =
- !1, this.getSeriesExtremes(), this.setTickInterval(), this.isDirty || (this.isDirty = f || this.min !== (this.old && this.old.min) || this.max !== (this.old && this.old.max))) : this.stacking && this.stacking.cleanStacks(); b && this.panningState && (this.panningState.isDirty = !0); z(this, "afterSetScale")
- }; a.prototype.setExtremes = function (e, f, a, h, c) { var p = this, d = p.chart; a = b(a, !0); p.series.forEach(function (b) { delete b.kdTree }); c = w(c, { min: e, max: f }); z(p, "setExtremes", c, function () { p.userMin = e; p.userMax = f; p.eventArgs = c; a && d.redraw(h) }) };
- a.prototype.zoom = function (e, f) { var a = this, h = this.dataMin, c = this.dataMax, p = this.options, d = Math.min(h, b(p.min, h)), g = Math.max(c, b(p.max, c)); e = { newMin: e, newMax: f }; z(this, "zoom", e, function (b) { var e = b.newMin, f = b.newMax; if (e !== a.min || f !== a.max) a.allowZoomOutside || (E(h) && (e < d && (e = d), e > g && (e = g)), E(c) && (f < d && (f = d), f > g && (f = g))), a.displayBtn = "undefined" !== typeof e || "undefined" !== typeof f, a.setExtremes(e, f, !1, void 0, { trigger: "zoom" }); b.zoomed = !0 }); return e.zoomed }; a.prototype.setAxisSize = function () {
- var e = this.chart,
- f = this.options, a = f.offsets || [0, 0, 0, 0], h = this.horiz, c = this.width = Math.round(y(b(f.width, e.plotWidth - a[3] + a[1]), e.plotWidth)), p = this.height = Math.round(y(b(f.height, e.plotHeight - a[0] + a[2]), e.plotHeight)), d = this.top = Math.round(y(b(f.top, e.plotTop + a[0]), e.plotHeight, e.plotTop)); f = this.left = Math.round(y(b(f.left, e.plotLeft + a[3]), e.plotWidth, e.plotLeft)); this.bottom = e.chartHeight - p - d; this.right = e.chartWidth - c - f; this.len = Math.max(h ? c : p, 0); this.pos = h ? f : d
- }; a.prototype.getExtremes = function () {
- var b = this.logarithmic;
- return { min: b ? B(b.lin2log(this.min)) : this.min, max: b ? B(b.lin2log(this.max)) : this.max, dataMin: this.dataMin, dataMax: this.dataMax, userMin: this.userMin, userMax: this.userMax }
- }; a.prototype.getThreshold = function (b) { var e = this.logarithmic, f = e ? e.lin2log(this.min) : this.min; e = e ? e.lin2log(this.max) : this.max; null === b || -Infinity === b ? b = f : Infinity === b ? b = e : f > b ? b = f : e < b && (b = e); return this.translate(b, 0, 1, 0, 1) }; a.prototype.autoLabelAlign = function (e) {
- var f = (b(e, 0) - 90 * this.side + 720) % 360; e = { align: "center" }; z(this, "autoLabelAlign",
- e, function (b) { 15 < f && 165 > f ? b.align = "right" : 195 < f && 345 > f && (b.align = "left") }); return e.align
- }; a.prototype.tickSize = function (e) { var f = this.options, a = b(f["tick" === e ? "tickWidth" : "minorTickWidth"], "tick" === e && this.isXAxis && !this.categories ? 1 : 0), h = f["tick" === e ? "tickLength" : "minorTickLength"]; if (a && h) { "inside" === f[e + "Position"] && (h = -h); var c = [h, a] } e = { tickSize: c }; z(this, "afterTickSize", e); return e.tickSize }; a.prototype.labelMetrics = function () {
- var b = this.tickPositions && this.tickPositions[0] || 0; return this.chart.renderer.fontMetrics(this.options.labels.style.fontSize,
- this.ticks[b] && this.ticks[b].label)
- }; a.prototype.unsquish = function () {
- var e = this.options.labels, a = this.horiz, h = this.tickInterval, c = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / h), p = e.rotation, d = this.labelMetrics(), r = Math.max(this.max - this.min, 0), v = function (b) { var e = b / (c || 1); e = 1 < e ? Math.ceil(e) : 1; e * h > r && Infinity !== b && Infinity !== c && r && (e = Math.ceil(r / h)); return B(e * h) }, n = h, y, u, I = Number.MAX_VALUE; if (a) {
- if (!e.staggerLines && !e.step) if (f(p)) var k = [p]; else c < e.autoRotationLimit && (k = e.autoRotation); k &&
- k.forEach(function (b) { if (b === p || b && -90 <= b && 90 >= b) { u = v(Math.abs(d.h / Math.sin(g * b))); var e = u + Math.abs(b / 360); e < I && (I = e, y = b, n = u) } })
- } else e.step || (n = v(d.h)); this.autoRotation = k; this.labelRotation = b(y, f(p) ? p : 0); return n
- }; a.prototype.getSlotWidth = function (b) {
- var e = this.chart, a = this.horiz, h = this.options.labels, c = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1), p = e.margin[3]; if (b && f(b.slotWidth)) return b.slotWidth; if (a && 2 > h.step) return h.rotation ? 0 : (this.staggerLines || 1) * this.len / c; if (!a) {
- b = h.style.width;
- if (void 0 !== b) return parseInt(String(b), 10); if (p) return p - e.spacing[3]
- } return .33 * e.chartWidth
- }; a.prototype.renderUnsquish = function () {
- var b = this.chart, e = b.renderer, f = this.tickPositions, a = this.ticks, h = this.options.labels, c = h.style, p = this.horiz, d = this.getSlotWidth(), g = Math.max(1, Math.round(d - 2 * h.padding)), r = {}, v = this.labelMetrics(), n = c.textOverflow, y = 0; u(h.rotation) || (r.rotation = h.rotation || 0); f.forEach(function (b) { b = a[b]; b.movedLabel && b.replaceMovedLabel(); b && b.label && b.label.textPxLength > y && (y = b.label.textPxLength) });
- this.maxLabelLength = y; if (this.autoRotation) y > g && y > v.h ? r.rotation = this.labelRotation : this.labelRotation = 0; else if (d) { var I = g; if (!n) { var k = "clip"; for (g = f.length; !p && g--;) { var z = f[g]; if (z = a[z].label) z.styles && "ellipsis" === z.styles.textOverflow ? z.css({ textOverflow: "clip" }) : z.textPxLength > d && z.css({ width: d + "px" }), z.getBBox().height > this.len / f.length - (v.h - v.f) && (z.specificTextOverflow = "ellipsis") } } } r.rotation && (I = y > .5 * b.chartHeight ? .33 * b.chartHeight : y, n || (k = "ellipsis")); if (this.labelAlign = h.align || this.autoLabelAlign(this.labelRotation)) r.align =
- this.labelAlign; f.forEach(function (b) { var e = (b = a[b]) && b.label, f = c.width, h = {}; e && (e.attr(r), b.shortenLabel ? b.shortenLabel() : I && !f && "nowrap" !== c.whiteSpace && (I < e.textPxLength || "SPAN" === e.element.tagName) ? (h.width = I + "px", n || (h.textOverflow = e.specificTextOverflow || k), e.css(h)) : e.styles && e.styles.width && !h.width && !f && e.css({ width: null }), delete e.specificTextOverflow, b.rotation = r.rotation) }, this); this.tickRotCorr = e.rotCorr(v.b, this.labelRotation || 0, 0 !== this.side)
- }; a.prototype.hasData = function () {
- return this.series.some(function (b) { return b.hasData() }) ||
- this.options.showEmpty && E(this.min) && E(this.max)
- }; a.prototype.addTitle = function (b) {
- var e = this.chart.renderer, f = this.horiz, a = this.opposite, c = this.options.title, p = this.chart.styledMode, d; this.axisTitle || ((d = c.textAlign) || (d = (f ? { low: "left", middle: "center", high: "right" } : { low: a ? "right" : "left", middle: "center", high: a ? "left" : "right" })[c.align]), this.axisTitle = e.text(c.text || "", 0, 0, c.useHTML).attr({ zIndex: 7, rotation: c.rotation, align: d }).addClass("highcharts-axis-title"), p || this.axisTitle.css(h(c.style)), this.axisTitle.add(this.axisGroup),
- this.axisTitle.isNew = !0); p || c.style.width || this.isRadial || this.axisTitle.css({ width: this.len + "px" }); this.axisTitle[b ? "show" : "hide"](b)
- }; a.prototype.generateTick = function (b) { var e = this.ticks; e[b] ? e[b].addLabel() : e[b] = new J(this, b) }; a.prototype.getOffset = function () {
- var f = this, a = this, h = a.chart, c = a.horiz, p = a.options, d = a.side, g = a.ticks, r = a.tickPositions, v = a.coll, n = a.axisParent, y = h.renderer, u = h.inverted && !a.isZAxis ? [1, 0, 3, 2][d] : d, I = a.hasData(), k = p.title, w = p.labels, t = h.axisOffset; h = h.clipOffset; var L = [-1,
- 1, 1, -1][d], l = p.className, m, B = 0, F = 0, M = 0; a.showAxis = m = I || p.showEmpty; a.staggerLines = a.horiz && w.staggerLines || void 0; if (!a.axisGroup) { var K = function (b, e, a) { return y.g(b).attr({ zIndex: a }).addClass("highcharts-".concat(v.toLowerCase()).concat(e, " ") + (f.isRadial ? "highcharts-radial-axis".concat(e, " ") : "") + (l || "")).add(n) }; a.gridGroup = K("grid", "-grid", p.gridZIndex); a.axisGroup = K("axis", "", p.zIndex); a.labelGroup = K("axis-labels", "-labels", w.zIndex) } I || a.isLinked ? (r.forEach(function (b) { a.generateTick(b) }), a.renderUnsquish(),
- a.reserveSpaceDefault = 0 === d || 2 === d || { 1: "left", 3: "right" }[d] === a.labelAlign, b(w.reserveSpace, "center" === a.labelAlign ? !0 : null, a.reserveSpaceDefault) && r.forEach(function (b) { M = Math.max(g[b].getLabelSize(), M) }), a.staggerLines && (M *= a.staggerLines), a.labelOffset = M * (a.opposite ? -1 : 1)) : e(g, function (b, e) { b.destroy(); delete g[e] }); if (k && k.text && !1 !== k.enabled && (a.addTitle(m), m && !1 !== k.reserveSpace)) { a.titleOffset = B = a.axisTitle.getBBox()[c ? "height" : "width"]; var V = k.offset; F = E(V) ? 0 : b(k.margin, c ? 5 : 10) } a.renderLine();
- a.offset = L * b(p.offset, t[d] ? t[d] + (p.margin || 0) : 0); a.tickRotCorr = a.tickRotCorr || { x: 0, y: 0 }; k = 0 === d ? -a.labelMetrics().h : 2 === d ? a.tickRotCorr.y : 0; I = Math.abs(M) + F; M && (I = I - k + L * (c ? b(w.y, a.tickRotCorr.y + 8 * L) : w.x)); a.axisTitleMargin = b(V, I); a.getMaxLabelDimensions && (a.maxLabelDimensions = a.getMaxLabelDimensions(g, r)); "colorAxis" !== v && (c = this.tickSize("tick"), t[d] = Math.max(t[d], (a.axisTitleMargin || 0) + B + L * a.offset, I, r && r.length && c ? c[0] + L * a.offset : 0), p = !a.axisLine || p.offset ? 0 : 2 * Math.floor(a.axisLine.strokeWidth() /
- 2), h[u] = Math.max(h[u], p)); z(this, "afterGetOffset")
- }; a.prototype.getLinePath = function (b) { var e = this.chart, f = this.opposite, a = this.offset, h = this.horiz, c = this.left + (f ? this.width : 0) + a; a = e.chartHeight - this.bottom - (f ? this.height : 0) + a; f && (b *= -1); return e.renderer.crispLine([["M", h ? this.left : c, h ? a : this.top], ["L", h ? e.chartWidth - this.right : c, h ? a : e.chartHeight - this.bottom]], b) }; a.prototype.renderLine = function () {
- this.axisLine || (this.axisLine = this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup),
- this.chart.styledMode || this.axisLine.attr({ stroke: this.options.lineColor, "stroke-width": this.options.lineWidth, zIndex: 7 }))
- }; a.prototype.getTitlePosition = function () {
- var b = this.horiz, e = this.left, f = this.top, a = this.len, h = this.options.title, c = b ? e : f, p = this.opposite, d = this.offset, g = h.x, r = h.y, v = this.axisTitle, n = this.chart.renderer.fontMetrics(h.style.fontSize, v); v = v ? Math.max(v.getBBox(!1, 0).height - n.h - 1, 0) : 0; a = { low: c + (b ? 0 : a), middle: c + a / 2, high: c + (b ? a : 0) }[h.align]; e = (b ? f + this.height : e) + (b ? 1 : -1) * (p ? -1 : 1) * (this.axisTitleMargin ||
- 0) + [-v, v, n.f, -v][this.side]; b = { x: b ? a + g : e + (p ? this.width : 0) + d + g, y: b ? e + r - (p ? this.height : 0) + d : a + r }; z(this, "afterGetTitlePosition", { titlePosition: b }); return b
- }; a.prototype.renderMinorTick = function (b, e) { var f = this.minorTicks; f[b] || (f[b] = new J(this, b, "minor")); e && f[b].isNew && f[b].render(null, !0); f[b].render(null, !1, 1) }; a.prototype.renderTick = function (b, e, f) {
- var a = this.ticks; if (!this.isLinked || b >= this.min && b <= this.max || this.grid && this.grid.isColumn) a[b] || (a[b] = new J(this, b)), f && a[b].isNew && a[b].render(e,
- !0, -1), a[b].render(e)
- }; a.prototype.render = function () {
- var b = this, a = b.chart, h = b.logarithmic, c = b.options, p = b.isLinked, d = b.tickPositions, g = b.axisTitle, r = b.ticks, n = b.minorTicks, y = b.alternateBands, u = c.stackLabels, I = c.alternateGridColor, k = b.tickmarkOffset, w = b.axisLine, t = b.showAxis, L = m(a.renderer.globalAnimation), l, B; b.labelEdge.length = 0; b.overlap = !1;[r, n, y].forEach(function (b) { e(b, function (b) { b.isActive = !1 }) }); if (b.hasData() || p) {
- var E = b.chart.hasRendered && b.old && f(b.old.min); b.minorTickInterval && !b.categories &&
- b.getMinorTickPositions().forEach(function (e) { b.renderMinorTick(e, E) }); d.length && (d.forEach(function (e, f) { b.renderTick(e, f, E) }), k && (0 === b.min || b.single) && (r[-1] || (r[-1] = new J(b, -1, null, !0)), r[-1].render(-1))); I && d.forEach(function (e, f) {
- B = "undefined" !== typeof d[f + 1] ? d[f + 1] + k : b.max - k; 0 === f % 2 && e < b.max && B <= b.max + (a.polar ? -k : k) && (y[e] || (y[e] = new H.PlotLineOrBand(b)), l = e + k, y[e].options = { from: h ? h.lin2log(l) : l, to: h ? h.lin2log(B) : B, color: I, className: "highcharts-alternate-grid" }, y[e].render(), y[e].isActive =
- !0)
- }); b._addedPlotLB || (b._addedPlotLB = !0, (c.plotLines || []).concat(c.plotBands || []).forEach(function (e) { b.addPlotBandOrLine(e) }))
- } [r, n, y].forEach(function (b) { var f = [], h = L.duration; e(b, function (b, e) { b.isActive || (b.render(e, !1, 0), b.isActive = !1, f.push(e)) }); v(function () { for (var e = f.length; e--;)b[f[e]] && !b[f[e]].isActive && (b[f[e]].destroy(), delete b[f[e]]) }, b !== y && a.hasRendered && h ? h : 0) }); w && (w[w.isPlaced ? "animate" : "attr"]({ d: this.getLinePath(w.strokeWidth()) }), w.isPlaced = !0, w[t ? "show" : "hide"](t)); g && t &&
- (c = b.getTitlePosition(), g[g.isNew ? "attr" : "animate"](c), g.isNew = !1); u && u.enabled && b.stacking && b.stacking.renderStackTotals(); b.old = { len: b.len, max: b.max, min: b.min, transA: b.transA, userMax: b.userMax, userMin: b.userMin }; b.isDirty = !1; z(this, "afterRender")
- }; a.prototype.redraw = function () { this.visible && (this.render(), this.plotLinesAndBands.forEach(function (b) { b.render() })); this.series.forEach(function (b) { b.isDirty = !0 }) }; a.prototype.getKeepProps = function () { return this.keepProps || a.keepProps }; a.prototype.destroy =
- function (b) {
- var f = this, a = f.plotLinesAndBands, h = this.eventOptions; z(this, "destroy", { keepEvents: b }); b || I(f);[f.ticks, f.minorTicks, f.alternateBands].forEach(function (b) { F(b) }); if (a) for (b = a.length; b--;)a[b].destroy(); "axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar".split(" ").forEach(function (b) { f[b] && (f[b] = f[b].destroy()) }); for (var c in f.plotLinesAndBandsGroups) f.plotLinesAndBandsGroups[c] = f.plotLinesAndBandsGroups[c].destroy(); e(f, function (b, e) {
- -1 === f.getKeepProps().indexOf(e) &&
- delete f[e]
- }); this.eventOptions = h
- }; a.prototype.drawCrosshair = function (e, f) {
- var a = this.crosshair, h = b(a && a.snap, !0), c = this.chart, p, d = this.cross; z(this, "drawCrosshair", { e: e, point: f }); e || (e = this.cross && this.cross.e); if (a && !1 !== (E(f) || !h)) {
- h ? E(f) && (p = b("colorAxis" !== this.coll ? f.crosshairPos : null, this.isXAxis ? f.plotX : this.len - f.plotY)) : p = e && (this.horiz ? e.chartX - this.pos : this.len - e.chartY + this.pos); if (E(p)) {
- var g = { value: f && (this.isXAxis ? f.x : b(f.stackY, f.y)), translatedValue: p }; c.polar && w(g, {
- isCrosshair: !0,
- chartX: e && e.chartX, chartY: e && e.chartY, point: f
- }); g = this.getPlotLinePath(g) || null
- } if (!E(g)) { this.hideCrosshair(); return } h = this.categories && !this.isRadial; d || (this.cross = d = c.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-" + (h ? "category " : "thin ") + (a.className || "")).attr({ zIndex: b(a.zIndex, 2) }).add(), c.styledMode || (d.attr({ stroke: a.color || (h ? A.parse("#ccd6eb").setOpacity(.25).get() : "#cccccc"), "stroke-width": b(a.width, 1) }).css({ "pointer-events": "none" }), a.dashStyle && d.attr({ dashstyle: a.dashStyle })));
- d.show().attr({ d: g }); h && !a.width && d.attr({ "stroke-width": this.transA }); this.cross.e = e
- } else this.hideCrosshair(); z(this, "afterDrawCrosshair", { e: e, point: f })
- }; a.prototype.hideCrosshair = function () { this.cross && this.cross.hide(); z(this, "afterHideCrosshair") }; a.prototype.hasVerticalPanning = function () { var b = this.chart.options.chart.panning; return !!(b && b.enabled && /y/.test(b.type)) }; a.prototype.validatePositiveValue = function (b) { return f(b) && 0 < b }; a.prototype.update = function (e, f) {
- var a = this.chart; e = h(this.userOptions,
- e); this.destroy(!0); this.init(a, e); a.isDirtyBox = !0; b(f, !0) && a.redraw()
- }; a.prototype.remove = function (e) { for (var f = this.chart, a = this.coll, h = this.series, c = h.length; c--;)h[c] && h[c].remove(!1); M(f.axes, this); M(f[a], this); f[a].forEach(function (b, e) { b.options.index = b.userOptions.index = e }); this.destroy(); f.isDirtyBox = !0; b(e, !0) && f.redraw() }; a.prototype.setTitle = function (b, e) { this.update({ title: b }, e) }; a.prototype.setCategories = function (b, e) { this.update({ categories: b }, e) }; a.defaultOptions = q.defaultXAxisOptions;
- a.keepProps = "extKey hcEvents names series userMax userMin".split(" "); return a
- }(); ""; return a
- }); O(a, "Core/Axis/DateTimeAxis.js", [a["Core/Utilities.js"]], function (a) {
- var C = a.addEvent, A = a.getMagnitude, G = a.normalizeTickInterval, x = a.timeUnits, H; (function (a) {
- function q () { return this.chart.time.getTimeTicks.apply(this.chart.time, arguments) } function m (a) { "datetime" !== a.userOptions.type ? this.dateTime = void 0 : this.dateTime || (this.dateTime = new d(this)) } var l = []; a.compose = function (a) {
- -1 === l.indexOf(a) && (l.push(a),
- a.keepProps.push("dateTime"), a.prototype.getTimeTicks = q, C(a, "init", m)); return a
- }; var d = function () {
- function a (a) { this.axis = a } a.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 g = x[d[0]], t = d[1], l; for (l = 0; l < c.length && !(d = c[l], g = x[d[0]], t = d[1], c[l + 1] && a <= (g * t[t.length - 1] + x[c[l +
- 1][0]]) / 2); l++); g === x.year && a < 5 * g && (t = [1, 2, 5]); a = G(a / g, t, "year" === d[0] ? Math.max(A(a / g), 1) : 1); return { unitRange: g, count: a, unitName: d[0] }
- }; a.prototype.getXDateFormat = function (a, d) { var c = this.axis; return c.closestPointRange ? c.chart.time.getDateFormat(c.closestPointRange, a, c.options.startOfWeek, d) || d.year : d.day }; return a
- }(); a.Additions = d
- })(H || (H = {})); return H
- }); O(a, "Core/Axis/LogarithmicAxis.js", [a["Core/Utilities.js"]], function (a) {
- var C = a.addEvent, A = a.normalizeTickInterval, G = a.pick, x; (function (a) {
- function q (a) {
- var d =
- this.logarithmic; "logarithmic" !== a.userOptions.type ? this.logarithmic = void 0 : d || (this.logarithmic = new l(this))
- } function x () { var a = this.logarithmic; a && (this.lin2val = function (d) { return a.lin2log(d) }, this.val2lin = function (d) { return a.log2lin(d) }) } var m = []; a.compose = function (a) { -1 === m.indexOf(a) && (m.push(a), a.keepProps.push("logarithmic"), C(a, "init", q), C(a, "afterInit", x)); return a }; var l = function () {
- function a (a) { this.axis = a } a.prototype.getLogTickPositions = function (a, c, d, k) {
- var g = this.axis, t = g.len, l = g.options,
- m = []; k || (this.minorAutoInterval = void 0); if (.5 <= a) a = Math.round(a), m = g.getLinearTickPositions(a, c, d); else if (.08 <= a) { var K = Math.floor(c), w, z = l = void 0; for (t = .3 < a ? [1, 2, 4] : .15 < a ? [1, 2, 4, 6, 8] : [1, 2, 3, 4, 5, 6, 7, 8, 9]; K < d + 1 && !z; K++) { var n = t.length; for (w = 0; w < n && !z; w++) { var f = this.log2lin(this.lin2log(K) * t[w]); f > c && (!k || l <= d) && "undefined" !== typeof l && m.push(l); l > d && (z = !0); l = f } } } else c = this.lin2log(c), d = this.lin2log(d), a = k ? g.getMinorTickInterval() : l.tickInterval, a = G("auto" === a ? null : a, this.minorAutoInterval, l.tickPixelInterval /
- (k ? 5 : 1) * (d - c) / ((k ? t / g.tickPositions.length : t) || 1)), a = A(a), m = g.getLinearTickPositions(a, c, d).map(this.log2lin), k || (this.minorAutoInterval = a / 5); k || (g.tickInterval = a); return m
- }; a.prototype.lin2log = function (a) { return Math.pow(10, a) }; a.prototype.log2lin = function (a) { return Math.log(a) / Math.LN10 }; return a
- }(); a.Additions = l
- })(x || (x = {})); return x
- }); O(a, "Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js", [a["Core/Utilities.js"]], function (a) {
- var C = a.erase, A = a.extend, G = a.isNumber, x; (function (a) {
- var q = [], x; a.compose =
- function (a, d) { x || (x = a); -1 === q.indexOf(d) && (q.push(d), A(d.prototype, m.prototype)); return d }; var m = function () {
- function a () { } a.prototype.getPlotBandPath = function (a, g, c) {
- void 0 === c && (c = this.options); var d = this.getPlotLinePath({ value: g, force: !0, acrossPanes: c.acrossPanes }), k = [], l = this.horiz; g = !G(this.min) || !G(this.max) || a < this.min && g < this.min || a > this.max && g > this.max; a = this.getPlotLinePath({ value: a, force: !0, acrossPanes: c.acrossPanes }); c = 1; if (a && d) {
- if (g) { var m = a.toString() === d.toString(); c = 0 } for (g = 0; g < a.length; g +=
- 2) { var F = a[g], M = a[g + 1], K = d[g], w = d[g + 1]; "M" !== F[0] && "L" !== F[0] || "M" !== M[0] && "L" !== M[0] || "M" !== K[0] && "L" !== K[0] || "M" !== w[0] && "L" !== w[0] || (l && K[1] === F[1] ? (K[1] += c, w[1] += c) : l || K[2] !== F[2] || (K[2] += c, w[2] += c), k.push(["M", F[1], F[2]], ["L", M[1], M[2]], ["L", w[1], w[2]], ["L", K[1], K[2]], ["Z"])); k.isFlat = m }
- } return k
- }; a.prototype.addPlotBand = function (a) { return this.addPlotBandOrLine(a, "plotBands") }; a.prototype.addPlotLine = function (a) { return this.addPlotBandOrLine(a, "plotLines") }; a.prototype.addPlotBandOrLine = function (a,
- g) { var c = this, d = this.userOptions, k = new x(this, a); this.visible && (k = k.render()); if (k) { this._addedPlotLB || (this._addedPlotLB = !0, (d.plotLines || []).concat(d.plotBands || []).forEach(function (a) { c.addPlotBandOrLine(a) })); if (g) { var l = d[g] || []; l.push(a); d[g] = l } this.plotLinesAndBands.push(k) } return k }; a.prototype.removePlotBandOrLine = function (a) {
- var d = this.plotLinesAndBands, c = this.options, t = this.userOptions; if (d) {
- for (var k = d.length; k--;)d[k].id === a && d[k].destroy();[c.plotLines || [], t.plotLines || [], c.plotBands ||
- [], t.plotBands || []].forEach(function (c) { for (k = c.length; k--;)(c[k] || {}).id === a && C(c, c[k]) })
- }
- }; a.prototype.removePlotBand = function (a) { this.removePlotBandOrLine(a) }; a.prototype.removePlotLine = function (a) { this.removePlotBandOrLine(a) }; return a
- }()
- })(x || (x = {})); return x
- }); O(a, "Core/Axis/PlotLineOrBand/PlotLineOrBand.js", [a["Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js"], a["Core/Utilities.js"]], function (a, q) {
- var C = q.arrayMax, G = q.arrayMin, x = q.defined, H = q.destroyObjectProperties, J = q.erase, D = q.fireEvent,
- m = q.merge, l = q.objectEach, d = q.pick; q = function () {
- function g (a, d) { this.axis = a; d && (this.options = d, this.id = d.id) } g.compose = function (c) { return a.compose(g, c) }; g.prototype.render = function () {
- D(this, "render"); var a = this, g = a.axis, k = g.horiz, B = g.logarithmic, E = a.options, F = E.color, M = d(E.zIndex, 0), K = E.events, w = {}, z = g.chart.renderer, n = E.label, f = a.label, u = E.to, h = E.from, r = E.value, e = a.svgElem, b = [], y = x(h) && x(u); b = x(r); var I = !e, p = { "class": "highcharts-plot-" + (y ? "band " : "line ") + (E.className || "") }, v = y ? "bands" : "lines"; B &&
- (h = B.log2lin(h), u = B.log2lin(u), r = B.log2lin(r)); g.chart.styledMode || (b ? (p.stroke = F || "#999999", p["stroke-width"] = d(E.width, 1), E.dashStyle && (p.dashstyle = E.dashStyle)) : y && (p.fill = F || "#e6ebf5", E.borderWidth && (p.stroke = E.borderColor, p["stroke-width"] = E.borderWidth))); w.zIndex = M; v += "-" + M; (B = g.plotLinesAndBandsGroups[v]) || (g.plotLinesAndBandsGroups[v] = B = z.g("plot-" + v).attr(w).add()); I && (a.svgElem = e = z.path().attr(p).add(B)); if (b) b = g.getPlotLinePath({ value: r, lineWidth: e.strokeWidth(), acrossPanes: E.acrossPanes });
- else if (y) b = g.getPlotBandPath(h, u, E); else return; !a.eventsAdded && K && (l(K, function (b, f) { e.on(f, function (b) { K[f].apply(a, [b]) }) }), a.eventsAdded = !0); (I || !e.d) && b && b.length ? e.attr({ d: b }) : e && (b ? (e.show(), e.animate({ d: b })) : e.d && (e.hide(), f && (a.label = f = f.destroy()))); n && (x(n.text) || x(n.formatter)) && b && b.length && 0 < g.width && 0 < g.height && !b.isFlat ? (n = m({ align: k && y && "center", x: k ? !y && 4 : 10, verticalAlign: !k && y && "middle", y: k ? y ? 16 : 10 : y ? 6 : -4, rotation: k && !y && 90 }, n), this.renderLabel(n, b, y, M)) : f && f.hide(); return a
- }; g.prototype.renderLabel =
- function (a, d, g, l) {
- var c = this.axis, k = c.chart.renderer, t = this.label; t || (this.label = t = k.text(this.getLabelText(a), 0, 0, a.useHTML).attr({ align: a.textAlign || a.align, rotation: a.rotation, "class": "highcharts-plot-" + (g ? "band" : "line") + "-label " + (a.className || ""), zIndex: l }).add(), c.chart.styledMode || t.css(m({ textOverflow: "ellipsis" }, a.style))); l = d.xBounds || [d[0][1], d[1][1], g ? d[2][1] : d[0][1]]; d = d.yBounds || [d[0][2], d[1][2], g ? d[2][2] : d[0][2]]; g = G(l); k = G(d); t.align(a, !1, { x: g, y: k, width: C(l) - g, height: C(d) - k }); t.alignValue &&
- "left" !== t.alignValue || t.css({ width: (90 === t.rotation ? c.height - (t.alignAttr.y - c.top) : c.width - (t.alignAttr.x - c.left)) + "px" }); t.show(!0)
- }; g.prototype.getLabelText = function (a) { return x(a.formatter) ? a.formatter.call(this) : a.text }; g.prototype.destroy = function () { J(this.axis.plotLinesAndBands, this); delete this.axis; H(this) }; return g
- }(); ""; ""; return q
- }); O(a, "Core/Tooltip.js", [a["Core/FormatUtilities.js"], a["Core/Globals.js"], a["Core/Renderer/RendererUtilities.js"], a["Core/Renderer/RendererRegistry.js"], a["Core/Utilities.js"]],
- function (a, q, A, G, x) {
- var C = a.format, J = q.doc, D = A.distribute, m = x.addEvent, l = x.clamp, d = x.css, g = x.defined, c = x.discardElement, t = x.extend, k = x.fireEvent, B = x.isArray, E = x.isNumber, F = x.isString, M = x.merge, K = x.pick, w = x.splat, z = x.syncTimeout; a = function () {
- function a (a, c) { this.allowShared = !0; this.container = void 0; this.crosshairs = []; this.distance = 0; this.isHidden = !0; this.isSticky = !1; this.now = {}; this.options = {}; this.outside = !1; this.chart = a; this.init(a, c) } a.prototype.applyFilter = function () {
- var a = this.chart; a.renderer.definition({
- tagName: "filter",
- attributes: { id: "drop-shadow-" + a.index, opacity: .5 }, children: [{ tagName: "feGaussianBlur", attributes: { "in": "SourceAlpha", stdDeviation: 1 } }, { tagName: "feOffset", attributes: { dx: 1, dy: 1 } }, { tagName: "feComponentTransfer", children: [{ tagName: "feFuncA", attributes: { type: "linear", slope: .3 } }] }, { tagName: "feMerge", children: [{ tagName: "feMergeNode" }, { tagName: "feMergeNode", attributes: { "in": "SourceGraphic" } }] }]
- })
- }; a.prototype.bodyFormatter = function (a) {
- return a.map(function (a) {
- var f = a.series.tooltipOptions; return (f[(a.point.formatPrefix ||
- "point") + "Formatter"] || a.point.tooltipFormatter).call(a.point, f[(a.point.formatPrefix || "point") + "Format"] || "")
- })
- }; a.prototype.cleanSplit = function (a) { this.chart.series.forEach(function (f) { var h = f && f.tt; h && (!h.isActive || a ? f.tt = h.destroy() : h.isActive = !1) }) }; a.prototype.defaultFormatter = function (a) { var f = this.points || w(this); var h = [a.tooltipFooterHeaderFormatter(f[0])]; h = h.concat(a.bodyFormatter(f)); h.push(a.tooltipFooterHeaderFormatter(f[0], !0)); return h }; a.prototype.destroy = function () {
- this.label && (this.label =
- this.label.destroy()); this.split && this.tt && (this.cleanSplit(!0), this.tt = this.tt.destroy()); this.renderer && (this.renderer = this.renderer.destroy(), c(this.container)); x.clearTimeout(this.hideTimer); x.clearTimeout(this.tooltipTimeout)
- }; a.prototype.getAnchor = function (a, c) {
- var f = this.chart, d = f.pointer, e = f.inverted, b = f.plotTop, g = f.plotLeft, n, p, v = 0, u = 0; a = w(a); this.followPointer && c ? ("undefined" === typeof c.chartX && (c = d.normalize(c)), d = [c.chartX - g, c.chartY - b]) : a[0].tooltipPos ? d = a[0].tooltipPos : (a.forEach(function (a) {
- n =
- a.series.yAxis; p = a.series.xAxis; v += a.plotX || 0; u += a.plotLow ? (a.plotLow + (a.plotHigh || 0)) / 2 : a.plotY || 0; p && n && (e ? (v += b + f.plotHeight - p.len - p.pos, u += g + f.plotWidth - n.len - n.pos) : (v += p.pos - g, u += n.pos - b))
- }), v /= a.length, u /= a.length, d = [e ? f.plotWidth - u : v, e ? f.plotHeight - v : u], this.shared && 1 < a.length && c && (e ? d[0] = c.chartX - g : d[1] = c.chartY - b)); return d.map(Math.round)
- }; a.prototype.getLabel = function () {
- var a = this, c = this.chart.styledMode, h = this.options, r = this.split && this.allowShared, e = "tooltip" + (g(h.className) ? " " + h.className :
- ""), b = h.style.pointerEvents || (!this.followPointer && h.stickOnContact ? "auto" : "none"), n = function () { a.inContact = !0 }, I = function (b) { var e = a.chart.hoverSeries; a.inContact = a.shouldStickOnContact() && a.chart.pointer.inClass(b.relatedTarget, "highcharts-tooltip"); if (!a.inContact && e && e.onMouseOut) e.onMouseOut() }, p, v = this.chart.renderer; if (a.label) { var k = !a.label.hasClass("highcharts-label"); (r && !k || !r && k) && a.destroy() } if (!this.label) {
- if (this.outside) {
- k = this.chart.options.chart.style; var z = G.getRendererType();
- this.container = p = q.doc.createElement("div"); p.className = "highcharts-tooltip-container"; d(p, { position: "absolute", top: "1px", pointerEvents: b, zIndex: Math.max(this.options.style.zIndex || 0, (k && k.zIndex || 0) + 3) }); m(p, "mouseenter", n); m(p, "mouseleave", I); q.doc.body.appendChild(p); this.renderer = v = new z(p, 0, 0, k, void 0, void 0, v.styledMode)
- } r ? this.label = v.g(e) : (this.label = v.label("", 0, 0, h.shape, void 0, void 0, h.useHTML, void 0, e).attr({ padding: h.padding, r: h.borderRadius }), c || this.label.attr({
- fill: h.backgroundColor,
- "stroke-width": h.borderWidth
- }).css(h.style).css({ pointerEvents: b }).shadow(h.shadow)); c && h.shadow && (this.applyFilter(), this.label.attr({ filter: "url(#drop-shadow-" + this.chart.index + ")" })); if (a.outside && !a.split) { var w = this.label, t = w.xSetter, l = w.ySetter; w.xSetter = function (b) { t.call(w, a.distance); p.style.left = b + "px" }; w.ySetter = function (b) { l.call(w, a.distance); p.style.top = b + "px" } } this.label.on("mouseenter", n).on("mouseleave", I).attr({ zIndex: 8 }).add()
- } return this.label
- }; a.prototype.getPosition = function (a,
- c, h) {
- var f = this.chart, e = this.distance, b = {}, d = f.inverted && h.h || 0, g = this.outside, p = g ? J.documentElement.clientWidth - 2 * e : f.chartWidth, v = g ? Math.max(J.body.scrollHeight, J.documentElement.scrollHeight, J.body.offsetHeight, J.documentElement.offsetHeight, J.documentElement.clientHeight) : f.chartHeight, n = f.pointer.getChartPosition(), u = function (b) {
- var d = "x" === b; return [b, d ? p : v, d ? a : c].concat(g ? [d ? a * n.scaleX : c * n.scaleY, d ? n.left - e + (h.plotX + f.plotLeft) * n.scaleX : n.top - e + (h.plotY + f.plotTop) * n.scaleY, 0, d ? p : v] : [d ? a : c, d ?
- h.plotX + f.plotLeft : h.plotY + f.plotTop, d ? f.plotLeft : f.plotTop, d ? f.plotLeft + f.plotWidth : f.plotTop + f.plotHeight])
- }, k = u("y"), z = u("x"), w; u = !!h.negative; !f.polar && f.hoverSeries && f.hoverSeries.yAxis && f.hoverSeries.yAxis.reversed && (u = !u); var t = !this.followPointer && K(h.ttBelow, !f.inverted === u), l = function (a, f, h, c, p, r, v) {
- var y = g ? "y" === a ? e * n.scaleY : e * n.scaleX : e, u = (h - c) / 2, I = c < p - e, k = p + e + c < f, z = p - y - h + u; p = p + y - u; if (t && k) b[a] = p; else if (!t && I) b[a] = z; else if (I) b[a] = Math.min(v - c, 0 > z - d ? z : z - d); else if (k) b[a] = Math.max(r, p +
- d + h > f ? p : p + d); else return !1
- }, m = function (a, f, h, c, p) { var d; p < e || p > f - e ? d = !1 : b[a] = p < h / 2 ? 1 : p > f - c / 2 ? f - c - 2 : p - h / 2; return d }, P = function (b) { var e = k; k = z; z = e; w = b }, B = function () { !1 !== l.apply(0, k) ? !1 !== m.apply(0, z) || w || (P(!0), B()) : w ? b.x = b.y = 0 : (P(!0), B()) }; (f.inverted || 1 < this.len) && P(); B(); return b
- }; a.prototype.hide = function (a) { var f = this; x.clearTimeout(this.hideTimer); a = K(a, this.options.hideDelay); this.isHidden || (this.hideTimer = z(function () { f.getLabel().fadeOut(a ? void 0 : a); f.isHidden = !0 }, a)) }; a.prototype.init = function (a,
- c) { this.chart = a; this.options = c; this.crosshairs = []; this.now = { x: 0, y: 0 }; this.isHidden = !0; this.split = c.split && !a.inverted && !a.polar; this.shared = c.shared || this.split; this.outside = K(c.outside, !(!a.scrollablePixelsX && !a.scrollablePixelsY)) }; a.prototype.shouldStickOnContact = function () { return !(this.followPointer || !this.options.stickOnContact) }; a.prototype.isStickyOnContact = function () { return !(!this.shouldStickOnContact() || !this.inContact) }; a.prototype.move = function (a, c, h, d) {
- var e = this, b = e.now, f = !1 !== e.options.animation &&
- !e.isHidden && (1 < Math.abs(a - b.x) || 1 < Math.abs(c - b.y)), g = e.followPointer || 1 < e.len; t(b, { x: f ? (2 * b.x + a) / 3 : a, y: f ? (b.y + c) / 2 : c, anchorX: g ? void 0 : f ? (2 * b.anchorX + h) / 3 : h, anchorY: g ? void 0 : f ? (b.anchorY + d) / 2 : d }); e.getLabel().attr(b); e.drawTracker(); f && (x.clearTimeout(this.tooltipTimeout), this.tooltipTimeout = setTimeout(function () { e && e.move(a, c, h, d) }, 32))
- }; a.prototype.refresh = function (a, c) {
- var f = this.chart, d = this.options, e = w(a), b = e[0], g = [], n = d.formatter || this.defaultFormatter, p = this.shared, v = f.styledMode, u = {}; if (d.enabled &&
- b.series) {
- x.clearTimeout(this.hideTimer); this.allowShared = !(!B(a) && a.series && a.series.noSharedTooltip); this.followPointer = !this.split && b.series.tooltipOptions.followPointer; a = this.getAnchor(a, c); var z = a[0], t = a[1]; p && this.allowShared ? (f.pointer.applyInactiveState(e), e.forEach(function (b) { b.setState("hover"); g.push(b.getLabelConfig()) }), u = { x: b.category, y: b.y }, u.points = g) : u = b.getLabelConfig(); this.len = g.length; n = n.call(u, this); p = b.series; this.distance = K(p.tooltipOptions.distance, 16); if (!1 === n) this.hide();
- else {
- if (this.split && this.allowShared) this.renderSplit(n, e); else {
- var l = z, m = t; c && f.pointer.isDirectTouch && (l = c.chartX - f.plotLeft, m = c.chartY - f.plotTop); if (f.polar || !1 === p.options.clip || e.some(function (b) { return b.series.shouldShowTooltip(l, m) })) c = this.getLabel(), d.style.width && !v || c.css({ width: this.chart.spacingBox.width + "px" }), c.attr({ text: n && n.join ? n.join("") : n }), c.removeClass(/highcharts-color-[\d]+/g).addClass("highcharts-color-" + K(b.colorIndex, p.colorIndex)), v || c.attr({
- stroke: d.borderColor || b.color ||
- p.color || "#666666"
- }), this.updatePosition({ plotX: z, plotY: t, negative: b.negative, ttBelow: b.ttBelow, h: a[2] || 0 }); else { this.hide(); return }
- } this.isHidden && this.label && this.label.attr({ opacity: 1 }).show(); this.isHidden = !1
- } k(this, "refresh")
- }
- }; a.prototype.renderSplit = function (a, c) {
- function f (b, e, a, f, c) { void 0 === c && (c = !0); a ? (e = x ? 0 : fa, b = l(b - f / 2, S.left, S.right - f - (d.outside ? A : 0))) : (e -= H, b = c ? b - f - M : b + M, b = l(b, c ? b : S.left, S.right)); return { x: b, y: e } } var d = this, e = d.chart, b = d.chart, g = b.chartWidth, n = b.chartHeight, p = b.plotHeight,
- v = b.plotLeft, u = b.plotTop, k = b.pointer, z = b.scrollablePixelsY; z = void 0 === z ? 0 : z; var w = b.scrollablePixelsX, m = b.scrollingContainer; m = void 0 === m ? { scrollLeft: 0, scrollTop: 0 } : m; var B = m.scrollLeft; m = m.scrollTop; var E = b.styledMode, M = d.distance, P = d.options, X = d.options.positioner, S = d.outside && "number" !== typeof w ? J.documentElement.getBoundingClientRect() : { left: B, right: B + g, top: m, bottom: m + n }, C = d.getLabel(), q = this.renderer || e.renderer, x = !(!e.xAxis[0] || !e.xAxis[0].opposite); e = k.getChartPosition(); var A = e.left; e = e.top;
- var H = u + m, G = 0, fa = p - z; F(a) && (a = [!1, a]); a = a.slice(0, c.length + 1).reduce(function (b, e, a) {
- if (!1 !== e && "" !== e) {
- a = c[a - 1] || { isHeader: !0, plotX: c[0].plotX, plotY: p, series: {} }; var h = a.isHeader, g = h ? d : a.series; e = e.toString(); var r = g.tt, n = a.isHeader; var y = a.series; var I = "highcharts-color-" + K(a.colorIndex, y.colorIndex, "none"); r || (r = { padding: P.padding, r: P.borderRadius }, E || (r.fill = P.backgroundColor, r["stroke-width"] = P.borderWidth), r = q.label("", 0, 0, P[n ? "headerShape" : "shape"], void 0, void 0, P.useHTML).addClass((n ? "highcharts-tooltip-header " :
- "") + "highcharts-tooltip-box " + I).attr(r).add(C)); r.isActive = !0; r.attr({ text: e }); E || r.css(P.style).shadow(P.shadow).attr({ stroke: P.borderColor || a.color || y.color || "#333333" }); g = g.tt = r; n = g.getBBox(); e = n.width + g.strokeWidth(); h && (G = n.height, fa += G, x && (H -= G)); y = a.plotX; y = void 0 === y ? 0 : y; I = a.plotY; I = void 0 === I ? 0 : I; r = a.series; if (a.isHeader) { y = v + y; var z = u + p / 2 } else { var k = r.xAxis, w = r.yAxis; y = k.pos + l(y, -M, k.len + M); r.shouldShowTooltip(0, w.pos - u + I, { ignoreX: !0 }) && (z = w.pos + I) } y = l(y, S.left - M, S.right + M); "number" ===
- typeof z ? (n = n.height + 1, I = X ? X.call(d, e, n, a) : f(y, z, h, e), b.push({ align: X ? 0 : void 0, anchorX: y, anchorY: z, boxWidth: e, point: a, rank: K(I.rank, h ? 1 : 0), size: n, target: I.y, tt: g, x: I.x })) : g.isActive = !1
- } return b
- }, []); !X && a.some(function (b) { var e = (d.outside ? A : 0) + b.anchorX; return e < S.left && e + b.boxWidth < S.right ? !0 : e < A - S.left + b.boxWidth && S.right - e > e }) && (a = a.map(function (b) { var e = f(b.anchorX, b.anchorY, b.point.isHeader, b.boxWidth, !1); return t(b, { target: e.y, x: e.x }) })); d.cleanSplit(); D(a, fa); var O = A, aa = A; a.forEach(function (b) {
- var e =
- b.x, a = b.boxWidth; b = b.isHeader; b || (d.outside && A + e < O && (O = A + e), !b && d.outside && O + a > aa && (aa = A + e))
- }); a.forEach(function (b) { var e = b.x, a = b.anchorX, f = b.pos, c = b.point.isHeader; f = { visibility: "undefined" === typeof f ? "hidden" : "inherit", x: e, y: f + H, anchorX: a, anchorY: b.anchorY }; if (d.outside && e < a) { var h = A - O; 0 < h && (c || (f.x = e + h, f.anchorX = a + h), c && (f.x = (aa - O) / 2, f.anchorX = a + h)) } b.tt.attr(f) }); a = d.container; z = d.renderer; d.outside && a && z && (b = C.getBBox(), z.setSize(b.width + b.x, b.height + b.y, !1), a.style.left = O + "px", a.style.top =
- e + "px")
- }; a.prototype.drawTracker = function () {
- if (this.followPointer || !this.options.stickOnContact) this.tracker && this.tracker.destroy(); else {
- var a = this.chart, c = this.label, h = this.shared ? a.hoverPoints : a.hoverPoint; if (c && h) {
- var d = { x: 0, y: 0, width: 0, height: 0 }; h = this.getAnchor(h); var e = c.getBBox(); h[0] += a.plotLeft - c.translateX; h[1] += a.plotTop - c.translateY; d.x = Math.min(0, h[0]); d.y = Math.min(0, h[1]); d.width = 0 > h[0] ? Math.max(Math.abs(h[0]), e.width - h[0]) : Math.max(Math.abs(h[0]), e.width); d.height = 0 > h[1] ? Math.max(Math.abs(h[1]),
- e.height - Math.abs(h[1])) : Math.max(Math.abs(h[1]), e.height); this.tracker ? this.tracker.attr(d) : (this.tracker = c.renderer.rect(d).addClass("highcharts-tracker").add(c), a.styledMode || this.tracker.attr({ fill: "rgba(0,0,0,0)" }))
- }
- }
- }; a.prototype.styledModeFormat = function (a) { return a.replace('style="font-size: 10px"', 'class="highcharts-header"').replace(/style="color:{(point|series)\.color}"/g, 'class="highcharts-color-{$1.colorIndex}"') }; a.prototype.tooltipFooterHeaderFormatter = function (a, c) {
- var f = a.series,
- d = f.tooltipOptions, e = f.xAxis, b = e && e.dateTime; e = { isFooter: c, labelConfig: a }; var g = d.xDateFormat, n = d[c ? "footerFormat" : "headerFormat"]; k(this, "headerFormatter", e, function (e) { b && !g && E(a.key) && (g = b.getXDateFormat(a.key, d.dateTimeLabelFormats)); b && g && (a.point && a.point.tooltipDateKeys || ["key"]).forEach(function (b) { n = n.replace("{point." + b + "}", "{point." + b + ":" + g + "}") }); f.chart.styledMode && (n = this.styledModeFormat(n)); e.text = C(n, { point: a, series: f }, this.chart) }); return e.text
- }; a.prototype.update = function (a) {
- this.destroy();
- M(!0, this.chart.options.tooltip.userOptions, a); this.init(this.chart, M(!0, this.options, a))
- }; a.prototype.updatePosition = function (a) {
- var f = this.chart, c = this.options, g = f.pointer, e = this.getLabel(); g = g.getChartPosition(); var b = (c.positioner || this.getPosition).call(this, e.width, e.height, a), n = a.plotX + f.plotLeft; a = a.plotY + f.plotTop; if (this.outside) {
- c = c.borderWidth + 2 * this.distance; this.renderer.setSize(e.width + c, e.height + c, !1); if (1 !== g.scaleX || 1 !== g.scaleY) d(this.container, {
- transform: "scale(".concat(g.scaleX,
- ", ").concat(g.scaleY, ")")
- }), n *= g.scaleX, a *= g.scaleY; n += g.left - b.x; a += g.top - b.y
- } this.move(Math.round(b.x), Math.round(b.y || 0), n, a)
- }; return a
- }(); ""; return a
- }); O(a, "Core/Series/Point.js", [a["Core/Renderer/HTML/AST.js"], a["Core/Animation/AnimationUtilities.js"], a["Core/DefaultOptions.js"], a["Core/FormatUtilities.js"], a["Core/Utilities.js"]], function (a, q, A, G, x) {
- var C = q.animObject, J = A.defaultOptions, D = G.format, m = x.addEvent, l = x.defined, d = x.erase, g = x.extend, c = x.fireEvent, t = x.getNestedProperty, k = x.isArray,
- B = x.isFunction, E = x.isNumber, F = x.isObject, M = x.merge, K = x.objectEach, w = x.pick, z = x.syncTimeout, n = x.removeEvent, f = x.uniqueKey; q = function () {
- function u () { this.colorIndex = this.category = void 0; this.formatPrefix = "point"; this.id = void 0; this.isNull = !1; this.percentage = this.options = this.name = void 0; this.selected = !1; this.total = this.shapeArgs = this.series = void 0; this.visible = !0; this.x = void 0 } u.prototype.animateBeforeDestroy = function () {
- var a = this, f = { x: a.startXPos, opacity: 0 }, e = a.getGraphicalProps(); e.singular.forEach(function (b) {
- a[b] =
- a[b].animate("dataLabel" === b ? { x: a[b].startXPos, y: a[b].startYPos, opacity: 0 } : f)
- }); e.plural.forEach(function (b) { a[b].forEach(function (b) { b.element && b.animate(g({ x: a.startXPos }, b.startYPos ? { x: b.startXPos, y: b.startYPos } : {})) }) })
- }; u.prototype.applyOptions = function (a, f) {
- var e = this.series, b = e.options.pointValKey || e.pointValKey; a = u.prototype.optionsToObject.call(this, a); g(this, a); this.options = this.options ? g(this.options, a) : a; a.group && delete this.group; a.dataLabels && delete this.dataLabels; b && (this.y = u.prototype.getNestedProperty.call(this,
- b)); this.formatPrefix = (this.isNull = w(this.isValid && !this.isValid(), null === this.x || !E(this.y))) ? "null" : "point"; this.selected && (this.state = "select"); "name" in this && "undefined" === typeof f && e.xAxis && e.xAxis.hasNames && (this.x = e.xAxis.nameToX(this)); "undefined" === typeof this.x && e ? this.x = "undefined" === typeof f ? e.autoIncrement() : f : E(a.x) && e.options.relativeXValue && (this.x = e.autoIncrement(a.x)); return this
- }; u.prototype.destroy = function () {
- function a () {
- if (f.graphic || f.dataLabel || f.dataLabels) n(f), f.destroyElements();
- for (p in f) f[p] = null
- } var f = this, e = f.series, b = e.chart; e = e.options.dataSorting; var c = b.hoverPoints, g = C(f.series.chart.renderer.globalAnimation), p; f.legendItem && b.legend.destroyItem(f); c && (f.setState(), d(c, f), c.length || (b.hoverPoints = null)); if (f === b.hoverPoint) f.onMouseOut(); e && e.enabled ? (this.animateBeforeDestroy(), z(a, g.duration)) : a(); b.pointCount--
- }; u.prototype.destroyElements = function (a) {
- var f = this; a = f.getGraphicalProps(a); a.singular.forEach(function (e) { f[e] = f[e].destroy() }); a.plural.forEach(function (e) {
- f[e].forEach(function (b) {
- b.element &&
- b.destroy()
- }); delete f[e]
- })
- }; u.prototype.firePointEvent = function (a, f, e) { var b = this, h = this.series.options; (h.point.events[a] || b.options && b.options.events && b.options.events[a]) && b.importEvents(); "click" === a && h.allowPointSelect && (e = function (e) { b.select && b.select(null, e.ctrlKey || e.metaKey || e.shiftKey) }); c(b, a, f, e) }; u.prototype.getClassName = function () {
- return "highcharts-point" + (this.selected ? " highcharts-point-select" : "") + (this.negative ? " highcharts-negative" : "") + (this.isNull ? " highcharts-null-point" : "") +
- ("undefined" !== typeof this.colorIndex ? " highcharts-color-" + this.colorIndex : "") + (this.options.className ? " " + this.options.className : "") + (this.zone && this.zone.className ? " " + this.zone.className.replace("highcharts-negative", "") : "")
- }; u.prototype.getGraphicalProps = function (a) {
- var f = this, e = [], b = { singular: [], plural: [] }, c; a = a || { graphic: 1, dataLabel: 1 }; a.graphic && e.push("graphic", "upperGraphic", "shadowGroup"); a.dataLabel && e.push("dataLabel", "dataLabelUpper", "connector"); for (c = e.length; c--;) {
- var h = e[c]; f[h] &&
- b.singular.push(h)
- } ["dataLabel", "connector"].forEach(function (e) { var c = e + "s"; a[e] && f[c] && b.plural.push(c) }); return b
- }; u.prototype.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 } }; u.prototype.getNestedProperty = function (a) { if (a) return 0 === a.indexOf("custom.") ? t(a, this.options) : this[a] }; u.prototype.getZone = function () {
- var a = this.series,
- f = a.zones; a = a.zoneAxis || "y"; var e, b = 0; for (e = f[b]; this[a] >= e.value;)e = f[++b]; this.nonZonedColor || (this.nonZonedColor = this.color); this.color = e && e.color && !this.options.color ? e.color : this.nonZonedColor; return e
- }; u.prototype.hasNewShapeType = function () { return (this.graphic && (this.graphic.symbolName || this.graphic.element.nodeName)) !== this.shapeType }; u.prototype.init = function (a, d, e) {
- this.series = a; this.applyOptions(d, e); this.id = l(this.id) ? this.id : f(); this.resolveColor(); a.chart.pointCount++; c(this, "afterInit");
- return this
- }; u.prototype.optionsToObject = function (a) { var f = this.series, e = f.options.keys, b = e || f.pointArrayMap || ["y"], c = b.length, h = {}, d = 0, g = 0; if (E(a) || null === a) h[b[0]] = a; else if (k(a)) for (!e && a.length > c && (f = typeof a[0], "string" === f ? h.name = a[0] : "number" === f && (h.x = a[0]), d++); g < c;)e && "undefined" === typeof a[d] || (0 < b[g].indexOf(".") ? u.prototype.setNestedProperty(h, a[d], b[g]) : h[b[g]] = a[d]), d++, g++; else "object" === typeof a && (h = a, a.dataLabels && (f._hasPointLabels = !0), a.marker && (f._hasPointMarkers = !0)); return h };
- u.prototype.resolveColor = function () { var a = this.series, f = a.chart.styledMode; var e = a.chart.options.chart.colorCount; delete this.nonZonedColor; if (a.options.colorByPoint) { if (!f) { e = a.options.colors || a.chart.options.colors; var b = e[a.colorCounter]; e = e.length } f = a.colorCounter; a.colorCounter++; a.colorCounter === e && (a.colorCounter = 0) } else f || (b = a.color), f = a.colorIndex; this.colorIndex = w(this.options.colorIndex, f); this.color = w(this.options.color, b) }; u.prototype.setNestedProperty = function (a, f, e) {
- e.split(".").reduce(function (b,
- e, a, c) { b[e] = c.length - 1 === a ? f : F(b[e], !0) ? b[e] : {}; return b[e] }, a); return a
- }; u.prototype.tooltipFormatter = function (a) { var f = this.series, e = f.tooltipOptions, b = w(e.valueDecimals, ""), c = e.valuePrefix || "", h = e.valueSuffix || ""; f.chart.styledMode && (a = f.chart.tooltip.styledModeFormat(a)); (f.pointArrayMap || ["y"]).forEach(function (e) { e = "{point." + e; if (c || h) a = a.replace(RegExp(e + "}", "g"), c + e + "}" + h); a = a.replace(RegExp(e + "}", "g"), e + ":,." + b + "f}") }); return D(a, { point: this, series: this.series }, f.chart) }; u.prototype.update =
- function (a, f, e, b) {
- function c () {
- h.applyOptions(a); var b = g && h.hasDummyGraphic; b = null === h.y ? !b : b; g && b && (h.graphic = g.destroy(), delete h.hasDummyGraphic); F(a, !0) && (g && g.element && a && a.marker && "undefined" !== typeof a.marker.symbol && (h.graphic = g.destroy()), a && a.dataLabels && h.dataLabel && (h.dataLabel = h.dataLabel.destroy()), h.connector && (h.connector = h.connector.destroy())); u = h.index; d.updateParallelArrays(h, u); r.data[u] = F(r.data[u], !0) || F(a, !0) ? h.options : w(a, r.data[u]); d.isDirty = d.isDirtyData = !0; !d.fixedBox &&
- d.hasCartesianSeries && (n.isDirtyBox = !0); "point" === r.legendType && (n.isDirtyLegend = !0); f && n.redraw(e)
- } var h = this, d = h.series, g = h.graphic, n = d.chart, r = d.options, u; f = w(f, !0); !1 === b ? c() : h.firePointEvent("update", { options: a }, c)
- }; u.prototype.remove = function (a, f) { this.series.removePoint(this.series.data.indexOf(this), a, f) }; u.prototype.select = function (a, f) {
- var e = this, b = e.series, c = b.chart; this.selectedStaging = a = w(a, !e.selected); e.firePointEvent(a ? "select" : "unselect", { accumulate: f }, function () {
- e.selected = e.options.selected =
- a; b.options.data[b.data.indexOf(e)] = e.options; e.setState(a && "select"); f || c.getSelectedPoints().forEach(function (b) { var a = b.series; b.selected && b !== e && (b.selected = b.options.selected = !1, a.options.data[a.data.indexOf(b)] = b.options, b.setState(c.hoverPoints && a.options.inactiveOtherPoints ? "inactive" : ""), b.firePointEvent("unselect")) })
- }); delete this.selectedStaging
- }; u.prototype.onMouseOver = function (a) {
- var f = this.series.chart, e = f.pointer; a = a ? e.normalize(a) : e.getChartCoordinatesFromPoint(this, f.inverted); e.runPointActions(a,
- this)
- }; u.prototype.onMouseOut = function () { var a = this.series.chart; this.firePointEvent("mouseOut"); this.series.options.inactiveOtherPoints || (a.hoverPoints || []).forEach(function (a) { a.setState() }); a.hoverPoints = a.hoverPoint = null }; u.prototype.importEvents = function () { if (!this.hasImportedEvents) { var a = this, f = M(a.series.options.point, a.options).events; a.events = f; K(f, function (e, b) { B(e) && m(a, b, e) }); this.hasImportedEvents = !0 } }; u.prototype.setState = function (f, d) {
- var e = this.series, b = this.state, h = e.options.states[f ||
- "normal"] || {}, n = J.plotOptions[e.type].marker && e.options.marker, p = n && !1 === n.enabled, v = n && n.states && n.states[f || "normal"] || {}, r = !1 === v.enabled, u = this.marker || {}, z = e.chart, k = n && e.markerAttribs, t = e.halo, l, m = e.stateMarkerGraphic; f = f || ""; if (!(f === this.state && !d || this.selected && "select" !== f || !1 === h.enabled || f && (r || p && !1 === v.enabled) || f && u.states && u.states[f] && !1 === u.states[f].enabled)) {
- this.state = f; k && (l = e.markerAttribs(this, f)); if (this.graphic && !this.hasDummyGraphic) {
- b && this.graphic.removeClass("highcharts-point-" +
- b); f && this.graphic.addClass("highcharts-point-" + f); if (!z.styledMode) { var B = e.pointAttribs(this, f); var P = w(z.options.chart.animation, h.animation); e.options.inactiveOtherPoints && E(B.opacity) && ((this.dataLabels || []).forEach(function (b) { b && b.animate({ opacity: B.opacity }, P) }), this.connector && this.connector.animate({ opacity: B.opacity }, P)); this.graphic.animate(B, P) } l && this.graphic.animate(l, w(z.options.chart.animation, v.animation, n.animation)); m && m.hide()
- } else {
- if (f && v) {
- b = u.symbol || e.symbol; m && m.currentSymbol !==
- b && (m = m.destroy()); if (l) if (m) m[d ? "animate" : "attr"]({ x: l.x, y: l.y }); else b && (e.stateMarkerGraphic = m = z.renderer.symbol(b, l.x, l.y, l.width, l.height).add(e.markerGroup), m.currentSymbol = b); !z.styledMode && m && "inactive" !== this.state && m.attr(e.pointAttribs(this, f))
- } m && (m[f && this.isInside ? "show" : "hide"](), m.element.point = this, m.addClass(this.getClassName(), !0))
- } h = h.halo; l = (m = this.graphic || m) && m.visibility || "inherit"; h && h.size && m && "hidden" !== l && !this.isCluster ? (t || (e.halo = t = z.renderer.path().add(m.parentGroup)),
- t.show()[d ? "animate" : "attr"]({ d: this.haloPath(h.size) }), t.attr({ "class": "highcharts-halo highcharts-color-" + w(this.colorIndex, e.colorIndex) + (this.className ? " " + this.className : ""), visibility: l, zIndex: -1 }), t.point = this, z.styledMode || t.attr(g({ fill: this.color || e.color, "fill-opacity": h.opacity }, a.filterUserAttributes(h.attributes || {})))) : t && t.point && t.point.haloPath && t.animate({ d: t.point.haloPath(0) }, null, t.hide); c(this, "afterSetState", { state: f })
- }
- }; u.prototype.haloPath = function (a) {
- return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX) -
- a, this.plotY - a, 2 * a, 2 * a)
- }; return u
- }(); ""; return q
- }); O(a, "Core/Pointer.js", [a["Core/Color/Color.js"], a["Core/Globals.js"], a["Core/Tooltip.js"], a["Core/Utilities.js"]], function (a, q, A, G) {
- var C = a.parse, H = q.charts, J = q.noop, D = G.addEvent, m = G.attr, l = G.css, d = G.defined, g = G.extend, c = G.find, t = G.fireEvent, k = G.isNumber, B = G.isObject, E = G.objectEach, F = G.offset, M = G.pick, K = G.splat; a = function () {
- function a (a, c) {
- this.lastValidTouch = {}; this.pinchDown = []; this.runChartClick = !1; this.eventsToUnbind = []; this.chart = a; this.hasDragged =
- !1; this.options = c; this.init(a, c)
- } a.prototype.applyInactiveState = function (a) { var c = [], f; (a || []).forEach(function (a) { f = a.series; c.push(f); f.linkedParent && c.push(f.linkedParent); f.linkedSeries && (c = c.concat(f.linkedSeries)); f.navigatorSeries && c.push(f.navigatorSeries) }); this.chart.series.forEach(function (a) { -1 === c.indexOf(a) ? a.setState("inactive", !0) : a.options.inactiveOtherPoints && a.setAllPointsToState("inactive") }) }; a.prototype.destroy = function () {
- var c = this; this.eventsToUnbind.forEach(function (a) { return a() });
- this.eventsToUnbind = []; q.chartCount || (a.unbindDocumentMouseUp && (a.unbindDocumentMouseUp = a.unbindDocumentMouseUp()), a.unbindDocumentTouchEnd && (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd())); clearInterval(c.tooltipTimeout); E(c, function (a, f) { c[f] = void 0 })
- }; a.prototype.drag = function (a) {
- var c = this.chart, f = c.options.chart, d = this.zoomHor, h = this.zoomVert, g = c.plotLeft, e = c.plotTop, b = c.plotWidth, y = c.plotHeight, k = this.mouseDownX || 0, p = this.mouseDownY || 0, v = B(f.panning) ? f.panning && f.panning.enabled : f.panning,
- z = f.panKey && a[f.panKey + "Key"], t = a.chartX, l = a.chartY, w = this.selectionMarker; if (!w || !w.touch) if (t < g ? t = g : t > g + b && (t = g + b), l < e ? l = e : l > e + y && (l = e + y), this.hasDragged = Math.sqrt(Math.pow(k - t, 2) + Math.pow(p - l, 2)), 10 < this.hasDragged) {
- var m = c.isInsidePlot(k - g, p - e, { visiblePlotOnly: !0 }); !c.hasCartesianSeries && !c.mapView || !this.zoomX && !this.zoomY || !m || z || w || (this.selectionMarker = w = c.renderer.rect(g, e, d ? 1 : b, h ? 1 : y, 0).attr({ "class": "highcharts-selection-marker", zIndex: 7 }).add(), c.styledMode || w.attr({
- fill: f.selectionMarkerFill ||
- C("#335cad").setOpacity(.25).get()
- })); w && d && (d = t - k, w.attr({ width: Math.abs(d), x: (0 < d ? 0 : d) + k })); w && h && (d = l - p, w.attr({ height: Math.abs(d), y: (0 < d ? 0 : d) + p })); m && !w && v && c.pan(a, f.panning)
- }
- }; a.prototype.dragStart = function (a) { var c = this.chart; c.mouseIsDown = a.type; c.cancelClick = !1; c.mouseDownX = this.mouseDownX = a.chartX; c.mouseDownY = this.mouseDownY = a.chartY }; a.prototype.drop = function (a) {
- var c = this, f = this.chart, u = this.hasPinched; if (this.selectionMarker) {
- var h = this.selectionMarker, r = h.attr ? h.attr("x") : h.x, e = h.attr ?
- h.attr("y") : h.y, b = h.attr ? h.attr("width") : h.width, y = h.attr ? h.attr("height") : h.height, z = { originalEvent: a, xAxis: [], yAxis: [], x: r, y: e, width: b, height: y }, p = !!f.mapView; if (this.hasDragged || u) f.axes.forEach(function (f) { if (f.zoomEnabled && d(f.min) && (u || c[{ xAxis: "zoomX", yAxis: "zoomY" }[f.coll]]) && k(r) && k(e)) { var h = f.horiz, g = "touchend" === a.type ? f.minPixelPadding : 0, v = f.toValue((h ? r : e) + g); h = f.toValue((h ? r + b : e + y) - g); z[f.coll].push({ axis: f, min: Math.min(v, h), max: Math.max(v, h) }); p = !0 } }), p && t(f, "selection", z, function (b) {
- f.zoom(g(b,
- u ? { animation: !1 } : null))
- }); k(f.index) && (this.selectionMarker = this.selectionMarker.destroy()); u && this.scaleGroups()
- } f && k(f.index) && (l(f.container, { cursor: f._cursor }), f.cancelClick = 10 < this.hasDragged, f.mouseIsDown = this.hasDragged = this.hasPinched = !1, this.pinchDown = [])
- }; a.prototype.findNearestKDPoint = function (a, c, f) {
- var d = this.chart, h = d.hoverPoint; d = d.tooltip; if (h && d && d.isStickyOnContact()) return h; var g; a.forEach(function (a) {
- var b = !(a.noSharedTooltip && c) && 0 > a.options.findNearestPointBy.indexOf("y"); a =
- a.searchPoint(f, b); if ((b = B(a, !0) && a.series) && !(b = !B(g, !0))) { b = g.distX - a.distX; var e = g.dist - a.dist, d = (a.series.group && a.series.group.zIndex) - (g.series.group && g.series.group.zIndex); b = 0 < (0 !== b && c ? b : 0 !== e ? e : 0 !== d ? d : g.series.index > a.series.index ? -1 : 1) } b && (g = a)
- }); return g
- }; a.prototype.getChartCoordinatesFromPoint = function (a, c) {
- var f = a.series, d = f.xAxis; f = f.yAxis; var h = a.shapeArgs; if (d && f) {
- var g = M(a.clientX, a.plotX), e = a.plotY || 0; a.isNode && h && k(h.x) && k(h.y) && (g = h.x, e = h.y); return c ? {
- chartX: f.len + f.pos - e, chartY: d.len +
- d.pos - g
- } : { chartX: g + d.pos, chartY: e + f.pos }
- } if (h && h.x && h.y) return { chartX: h.x, chartY: h.y }
- }; a.prototype.getChartPosition = function () { if (this.chartPosition) return this.chartPosition; var a = this.chart.container, c = F(a); this.chartPosition = { left: c.left, top: c.top, scaleX: 1, scaleY: 1 }; var f = a.offsetWidth; a = a.offsetHeight; 2 < f && 2 < a && (this.chartPosition.scaleX = c.width / f, this.chartPosition.scaleY = c.height / a); return this.chartPosition }; a.prototype.getCoordinates = function (a) {
- var c = { xAxis: [], yAxis: [] }; this.chart.axes.forEach(function (f) {
- c[f.isXAxis ?
- "xAxis" : "yAxis"].push({ axis: f, value: f.toValue(a[f.horiz ? "chartX" : "chartY"]) })
- }); return c
- }; a.prototype.getHoverData = function (a, d, f, g, h, r) {
- var e = []; g = !(!g || !a); var b = { chartX: r ? r.chartX : void 0, chartY: r ? r.chartY : void 0, shared: h }; t(this, "beforeGetHoverData", b); var n = d && !d.stickyTracking ? [d] : f.filter(function (a) { return b.filter ? b.filter(a) : a.visible && !(!h && a.directTouch) && M(a.options.enableMouseTracking, !0) && a.stickyTracking }); var u = g || !r ? a : this.findNearestKDPoint(n, h, r); d = u && u.series; u && (h && !d.noSharedTooltip ?
- (n = f.filter(function (a) { return b.filter ? b.filter(a) : a.visible && !(!h && a.directTouch) && M(a.options.enableMouseTracking, !0) && !a.noSharedTooltip }), n.forEach(function (b) { var a = c(b.points, function (b) { return b.x === u.x && !b.isNull }); B(a) && (b.chart.isBoosting && (a = b.getPoint(a)), e.push(a)) })) : e.push(u)); b = { hoverPoint: u }; t(this, "afterGetHoverData", b); return { hoverPoint: b.hoverPoint, hoverSeries: d, hoverPoints: e }
- }; a.prototype.getPointFromEvent = function (a) { a = a.target; for (var c; a && !c;)c = a.point, a = a.parentNode; return c };
- a.prototype.onTrackerMouseOut = function (a) { a = a.relatedTarget || a.toElement; var c = this.chart.hoverSeries; this.isDirectTouch = !1; if (!(!c || !a || c.stickyTracking || this.inClass(a, "highcharts-tooltip") || this.inClass(a, "highcharts-series-" + c.index) && this.inClass(a, "highcharts-tracker"))) c.onMouseOut() }; a.prototype.inClass = function (a, c) { for (var f; a;) { if (f = m(a, "class")) { if (-1 !== f.indexOf(c)) return !0; if (-1 !== f.indexOf("highcharts-container")) return !1 } a = a.parentElement } }; a.prototype.init = function (a, c) {
- this.options =
- c; this.chart = a; this.runChartClick = !(!c.chart.events || !c.chart.events.click); this.pinchDown = []; this.lastValidTouch = {}; A && (a.tooltip = new A(a, c.tooltip), this.followTouchMove = M(c.tooltip.followTouchMove, !0)); this.setDOMEvents()
- }; a.prototype.normalize = function (a, c) { var f = a.touches, d = f ? f.length ? f.item(0) : M(f.changedTouches, a.changedTouches)[0] : a; c || (c = this.getChartPosition()); f = d.pageX - c.left; d = d.pageY - c.top; f /= c.scaleX; d /= c.scaleY; return g(a, { chartX: Math.round(f), chartY: Math.round(d) }) }; a.prototype.onContainerClick =
- function (a) { var c = this.chart, f = c.hoverPoint; a = this.normalize(a); var d = c.plotLeft, h = c.plotTop; c.cancelClick || (f && this.inClass(a.target, "highcharts-tracker") ? (t(f.series, "click", g(a, { point: f })), c.hoverPoint && f.firePointEvent("click", a)) : (g(a, this.getCoordinates(a)), c.isInsidePlot(a.chartX - d, a.chartY - h, { visiblePlotOnly: !0 }) && t(c, "click", a))) }; a.prototype.onContainerMouseDown = function (a) {
- var c = 1 === ((a.buttons || a.button) & 1); a = this.normalize(a); if (q.isFirefox && 0 !== a.button) this.onContainerMouseMove(a);
- if ("undefined" === typeof a.button || c) this.zoomOption(a), c && a.preventDefault && a.preventDefault(), this.dragStart(a)
- }; a.prototype.onContainerMouseLeave = function (c) { var d = H[M(a.hoverChartIndex, -1)], f = this.chart.tooltip; f && f.shouldStickOnContact() && this.inClass(c.relatedTarget, "highcharts-tooltip-container") || (c = this.normalize(c), d && (c.relatedTarget || c.toElement) && (d.pointer.reset(), d.pointer.chartPosition = void 0), f && !f.isHidden && this.reset()) }; a.prototype.onContainerMouseEnter = function (a) { delete this.chartPosition };
- a.prototype.onContainerMouseMove = function (a) { var c = this.chart; a = this.normalize(a); this.setHoverChartIndex(); a.preventDefault || (a.returnValue = !1); ("mousedown" === c.mouseIsDown || this.touchSelect(a)) && this.drag(a); c.openMenu || !this.inClass(a.target, "highcharts-tracker") && !c.isInsidePlot(a.chartX - c.plotLeft, a.chartY - c.plotTop, { visiblePlotOnly: !0 }) || (this.inClass(a.target, "highcharts-no-tooltip") ? this.reset(!1, 0) : this.runPointActions(a)) }; a.prototype.onDocumentTouchEnd = function (c) {
- var d = H[M(a.hoverChartIndex,
- -1)]; d && d.pointer.drop(c)
- }; a.prototype.onContainerTouchMove = function (a) { if (this.touchSelect(a)) this.onContainerMouseMove(a); else this.touch(a) }; a.prototype.onContainerTouchStart = function (a) { if (this.touchSelect(a)) this.onContainerMouseDown(a); else this.zoomOption(a), this.touch(a, !0) }; a.prototype.onDocumentMouseMove = function (a) {
- var c = this.chart, f = this.chartPosition; a = this.normalize(a, f); var d = c.tooltip; !f || d && d.isStickyOnContact() || c.isInsidePlot(a.chartX - c.plotLeft, a.chartY - c.plotTop, { visiblePlotOnly: !0 }) ||
- this.inClass(a.target, "highcharts-tracker") || this.reset()
- }; a.prototype.onDocumentMouseUp = function (c) { var d = H[M(a.hoverChartIndex, -1)]; d && d.pointer.drop(c) }; a.prototype.pinch = function (a) {
- var c = this, f = c.chart, d = c.pinchDown, h = a.touches || [], r = h.length, e = c.lastValidTouch, b = c.hasZoom, y = {}, k = 1 === r && (c.inClass(a.target, "highcharts-tracker") && f.runTrackerClick || c.runChartClick), p = {}, v = c.selectionMarker; 1 < r ? c.initiated = !0 : 1 === r && this.followTouchMove && (c.initiated = !1); b && c.initiated && !k && !1 !== a.cancelable &&
- a.preventDefault();[].map.call(h, function (a) { return c.normalize(a) }); "touchstart" === a.type ? ([].forEach.call(h, function (a, b) { d[b] = { chartX: a.chartX, chartY: a.chartY } }), e.x = [d[0].chartX, d[1] && d[1].chartX], e.y = [d[0].chartY, d[1] && d[1].chartY], f.axes.forEach(function (a) {
- if (a.zoomEnabled) {
- var b = f.bounds[a.horiz ? "h" : "v"], e = a.minPixelPadding, c = a.toPixels(Math.min(M(a.options.min, a.dataMin), a.dataMin)), d = a.toPixels(Math.max(M(a.options.max, a.dataMax), a.dataMax)), h = Math.max(c, d); b.min = Math.min(a.pos, Math.min(c,
- d) - e); b.max = Math.max(a.pos + a.len, h + e)
- }
- }), c.res = !0) : c.followTouchMove && 1 === r ? this.runPointActions(c.normalize(a)) : d.length && (t(f, "touchpan", { originalEvent: a }, function () { v || (c.selectionMarker = v = g({ destroy: J, touch: !0 }, f.plotBox)); c.pinchTranslate(d, h, y, v, p, e); c.hasPinched = b; c.scaleGroups(y, p) }), c.res && (c.res = !1, this.reset(!1, 0)))
- }; a.prototype.pinchTranslate = function (a, c, f, d, h, g) { this.zoomHor && this.pinchTranslateDirection(!0, a, c, f, d, h, g); this.zoomVert && this.pinchTranslateDirection(!1, a, c, f, d, h, g) }; a.prototype.pinchTranslateDirection =
- function (a, c, f, d, h, g, e, b) {
- var r = this.chart, n = a ? "x" : "y", p = a ? "X" : "Y", v = "chart" + p, k = a ? "width" : "height", u = r["plot" + (a ? "Left" : "Top")], t = r.inverted, w = r.bounds[a ? "h" : "v"], l = 1 === c.length, z = c[0][v], m = !l && c[1][v]; c = function () { "number" === typeof F && 20 < Math.abs(z - m) && (E = b || Math.abs(S - F) / Math.abs(z - m)); P = (u - S) / E + z; B = r["plot" + (a ? "Width" : "Height")] / E }; var B, P, E = b || 1, S = f[0][v], F = !l && f[1][v]; c(); f = P; if (f < w.min) { f = w.min; var M = !0 } else f + B > w.max && (f = w.max - B, M = !0); M ? (S -= .8 * (S - e[n][0]), "number" === typeof F && (F -= .8 * (F - e[n][1])),
- c()) : e[n] = [S, F]; t || (g[n] = P - u, g[k] = B); g = t ? 1 / E : E; h[k] = B; h[n] = f; d[t ? a ? "scaleY" : "scaleX" : "scale" + p] = E; d["translate" + p] = g * u + (S - g * z)
- }; a.prototype.reset = function (a, c) {
- var f = this.chart, d = f.hoverSeries, h = f.hoverPoint, g = f.hoverPoints, e = f.tooltip, b = e && e.shared ? g : h; a && b && K(b).forEach(function (b) { b.series.isCartesian && "undefined" === typeof b.plotX && (a = !1) }); if (a) e && b && K(b).length && (e.refresh(b), e.shared && g ? g.forEach(function (a) {
- a.setState(a.state, !0); a.series.isCartesian && (a.series.xAxis.crosshair && a.series.xAxis.drawCrosshair(null,
- a), a.series.yAxis.crosshair && a.series.yAxis.drawCrosshair(null, a))
- }) : h && (h.setState(h.state, !0), f.axes.forEach(function (a) { a.crosshair && h.series[a.coll] === a && a.drawCrosshair(null, h) }))); else { if (h) h.onMouseOut(); g && g.forEach(function (a) { a.setState() }); if (d) d.onMouseOut(); e && e.hide(c); this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove()); f.axes.forEach(function (a) { a.hideCrosshair() }); this.hoverX = f.hoverPoints = f.hoverPoint = null }
- }; a.prototype.runPointActions = function (d, g) {
- var f = this.chart,
- n = f.tooltip && f.tooltip.options.enabled ? f.tooltip : void 0, h = n ? n.shared : !1, r = g || f.hoverPoint, e = r && r.series || f.hoverSeries; g = this.getHoverData(r, e, f.series, (!d || "touchmove" !== d.type) && (!!g || e && e.directTouch && this.isDirectTouch), h, d); r = g.hoverPoint; e = g.hoverSeries; var b = g.hoverPoints; g = e && e.tooltipOptions.followPointer && !e.tooltipOptions.split; var k = h && e && !e.noSharedTooltip; if (r && (r !== f.hoverPoint || n && n.isHidden)) {
- (f.hoverPoints || []).forEach(function (a) { -1 === b.indexOf(a) && a.setState() }); if (f.hoverSeries !==
- e) e.onMouseOver(); this.applyInactiveState(b); (b || []).forEach(function (a) { a.setState("hover") }); f.hoverPoint && f.hoverPoint.firePointEvent("mouseOut"); if (!r.series) return; f.hoverPoints = b; f.hoverPoint = r; r.firePointEvent("mouseOver", void 0, function () { n && r && n.refresh(k ? b : r, d) })
- } else g && n && !n.isHidden && (h = n.getAnchor([{}], d), f.isInsidePlot(h[0], h[1], { visiblePlotOnly: !0 }) && n.updatePosition({ plotX: h[0], plotY: h[1] })); this.unDocMouseMove || (this.unDocMouseMove = D(f.container.ownerDocument, "mousemove", function (b) {
- var e =
- H[a.hoverChartIndex]; if (e) e.pointer.onDocumentMouseMove(b)
- }), this.eventsToUnbind.push(this.unDocMouseMove)); f.axes.forEach(function (a) { var e = M((a.crosshair || {}).snap, !0), h; e && ((h = f.hoverPoint) && h.series[a.coll] === a || (h = c(b, function (b) { return b.series && b.series[a.coll] === a }))); h || !e ? a.drawCrosshair(d, h) : a.hideCrosshair() })
- }; a.prototype.scaleGroups = function (a, c) {
- var f = this.chart; f.series.forEach(function (d) {
- var h = a || d.getPlotBox(); d.group && (d.xAxis && d.xAxis.zoomEnabled || f.mapView) && (d.group.attr(h),
- d.markerGroup && (d.markerGroup.attr(h), d.markerGroup.clip(c ? f.clipRect : null)), d.dataLabelsGroup && d.dataLabelsGroup.attr(h))
- }); f.clipRect.attr(c || f.clipBox)
- }; a.prototype.setDOMEvents = function () {
- var c = this, d = this.chart.container, f = d.ownerDocument; d.onmousedown = this.onContainerMouseDown.bind(this); d.onmousemove = this.onContainerMouseMove.bind(this); d.onclick = this.onContainerClick.bind(this); this.eventsToUnbind.push(D(d, "mouseenter", this.onContainerMouseEnter.bind(this))); this.eventsToUnbind.push(D(d, "mouseleave",
- this.onContainerMouseLeave.bind(this))); a.unbindDocumentMouseUp || (a.unbindDocumentMouseUp = D(f, "mouseup", this.onDocumentMouseUp.bind(this))); for (var g = this.chart.renderTo.parentElement; g && "BODY" !== g.tagName;)this.eventsToUnbind.push(D(g, "scroll", function () { delete c.chartPosition })), g = g.parentElement; q.hasTouch && (this.eventsToUnbind.push(D(d, "touchstart", this.onContainerTouchStart.bind(this), { passive: !1 })), this.eventsToUnbind.push(D(d, "touchmove", this.onContainerTouchMove.bind(this), { passive: !1 })),
- a.unbindDocumentTouchEnd || (a.unbindDocumentTouchEnd = D(f, "touchend", this.onDocumentTouchEnd.bind(this), { passive: !1 })))
- }; a.prototype.setHoverChartIndex = function () { var c = this.chart, d = q.charts[M(a.hoverChartIndex, -1)]; if (d && d !== c) d.pointer.onContainerMouseLeave({ relatedTarget: c.container }); d && d.mouseIsDown || (a.hoverChartIndex = c.index) }; a.prototype.touch = function (a, c) {
- var f = this.chart, d; this.setHoverChartIndex(); if (1 === a.touches.length) if (a = this.normalize(a), (d = f.isInsidePlot(a.chartX - f.plotLeft, a.chartY -
- f.plotTop, { visiblePlotOnly: !0 })) && !f.openMenu) { c && this.runPointActions(a); if ("touchmove" === a.type) { c = this.pinchDown; var h = c[0] ? 4 <= Math.sqrt(Math.pow(c[0].chartX - a.chartX, 2) + Math.pow(c[0].chartY - a.chartY, 2)) : !1 } M(h, !0) && this.pinch(a) } else c && this.reset(); else 2 === a.touches.length && this.pinch(a)
- }; a.prototype.touchSelect = function (a) { return !(!this.chart.options.chart.zoomBySingleTouch || !a.touches || 1 !== a.touches.length) }; a.prototype.zoomOption = function (a) {
- var c = this.chart, f = c.options.chart; c = c.inverted;
- var d = f.zoomType || ""; /touch/.test(a.type) && (d = M(f.pinchType, d)); this.zoomX = a = /x/.test(d); this.zoomY = f = /y/.test(d); this.zoomHor = a && !c || f && c; this.zoomVert = f && !c || a && c; this.hasZoom = a || f
- }; return a
- }(); ""; return a
- }); O(a, "Core/MSPointer.js", [a["Core/Globals.js"], a["Core/Pointer.js"], a["Core/Utilities.js"]], function (a, q, A) {
- function C () { var a = []; a.item = function (a) { return this[a] }; c(k, function (c) { a.push({ pageX: c.pageX, pageY: c.pageY, target: c.target }) }); return a } function x (a, c, d, g) {
- var k = J[q.hoverChartIndex ||
- NaN]; "touch" !== a.pointerType && a.pointerType !== a.MSPOINTER_TYPE_TOUCH || !k || (k = k.pointer, g(a), k[c]({ type: d, target: a.currentTarget, preventDefault: m, touches: C() }))
- } var H = this && this.__extends || function () {
- var a = function (c, d) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d]) }; return a(c, d) }; return function (c, d) {
- function g () { this.constructor = c } a(c, d); c.prototype = null === d ? Object.create(d) : (g.prototype = d.prototype,
- new g)
- }
- }(), J = a.charts, D = a.doc, m = a.noop, l = a.win, d = A.addEvent, g = A.css, c = A.objectEach, t = A.removeEvent, k = {}, B = !!l.PointerEvent; return function (c) {
- function m () { return null !== c && c.apply(this, arguments) || this } H(m, c); m.isRequired = function () { return !(a.hasTouch || !l.PointerEvent && !l.MSPointerEvent) }; m.prototype.batchMSEvents = function (a) {
- a(this.chart.container, B ? "pointerdown" : "MSPointerDown", this.onContainerPointerDown); a(this.chart.container, B ? "pointermove" : "MSPointerMove", this.onContainerPointerMove); a(D, B ?
- "pointerup" : "MSPointerUp", this.onDocumentPointerUp)
- }; m.prototype.destroy = function () { this.batchMSEvents(t); c.prototype.destroy.call(this) }; m.prototype.init = function (a, d) { c.prototype.init.call(this, a, d); this.hasZoom && g(a.container, { "-ms-touch-action": "none", "touch-action": "none" }) }; m.prototype.onContainerPointerDown = function (a) { x(a, "onContainerTouchStart", "touchstart", function (a) { k[a.pointerId] = { pageX: a.pageX, pageY: a.pageY, target: a.currentTarget } }) }; m.prototype.onContainerPointerMove = function (a) {
- x(a,
- "onContainerTouchMove", "touchmove", function (a) { k[a.pointerId] = { pageX: a.pageX, pageY: a.pageY }; k[a.pointerId].target || (k[a.pointerId].target = a.currentTarget) })
- }; m.prototype.onDocumentPointerUp = function (a) { x(a, "onDocumentTouchEnd", "touchend", function (a) { delete k[a.pointerId] }) }; m.prototype.setDOMEvents = function () { c.prototype.setDOMEvents.call(this); (this.hasZoom || this.followTouchMove) && this.batchMSEvents(d) }; return m
- }(q)
- }); O(a, "Core/Legend/Legend.js", [a["Core/Animation/AnimationUtilities.js"], a["Core/FormatUtilities.js"],
- a["Core/Globals.js"], a["Core/Series/Point.js"], a["Core/Renderer/RendererUtilities.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H) {
- var C = a.animObject, D = a.setAnimation, m = q.format; a = A.isFirefox; var l = A.marginNames; A = A.win; var d = x.distribute, g = H.addEvent, c = H.createElement, t = H.css, k = H.defined, B = H.discardElement, E = H.find, F = H.fireEvent, M = H.isNumber, K = H.merge, w = H.pick, z = H.relativeLength, n = H.stableSort, f = H.syncTimeout; x = H.wrap; H = function () {
- function a (a, f) {
- this.allItems = []; this.contentGroup = this.box = void 0;
- this.display = !1; this.group = void 0; this.offsetWidth = this.maxLegendWidth = this.maxItemWidth = this.legendWidth = this.legendHeight = this.lastLineHeight = this.lastItemY = this.itemY = this.itemX = this.itemMarginTop = this.itemMarginBottom = this.itemHeight = this.initialItemY = 0; this.options = void 0; this.padding = 0; this.pages = []; this.proximate = !1; this.scrollGroup = void 0; this.widthOption = this.totalItemWidth = this.titleHeight = this.symbolWidth = this.symbolHeight = 0; this.chart = a; this.init(a, f)
- } a.prototype.init = function (a, f) {
- this.chart =
- a; this.setOptions(f); f.enabled && (this.render(), g(this.chart, "endResize", function () { this.legend.positionCheckboxes() }), this.proximate ? this.unchartrender = g(this.chart, "render", function () { this.legend.proximatePositions(); this.legend.positionItems() }) : this.unchartrender && this.unchartrender())
- }; a.prototype.setOptions = function (a) {
- var f = w(a.padding, 8); this.options = a; this.chart.styledMode || (this.itemStyle = a.itemStyle, this.itemHiddenStyle = K(this.itemStyle, a.itemHiddenStyle)); this.itemMarginTop = a.itemMarginTop ||
- 0; this.itemMarginBottom = a.itemMarginBottom || 0; this.padding = f; this.initialItemY = f - 5; this.symbolWidth = w(a.symbolWidth, 16); this.pages = []; this.proximate = "proximate" === a.layout && !this.chart.inverted; this.baseline = void 0
- }; a.prototype.update = function (a, f) { var e = this.chart; this.setOptions(K(!0, this.options, a)); this.destroy(); e.isDirtyLegend = e.isDirtyBox = !0; w(f, !0) && e.redraw(); F(this, "afterUpdate") }; a.prototype.colorizeItem = function (a, f) {
- a.legendGroup[f ? "removeClass" : "addClass"]("highcharts-legend-item-hidden");
- if (!this.chart.styledMode) { var e = this.options, b = a.legendItem, c = a.legendLine, d = a.legendSymbol, h = this.itemHiddenStyle.color; e = f ? e.itemStyle.color : h; var g = f ? a.color || h : h, r = a.options && a.options.marker, k = { fill: g }; b && b.css({ fill: e, color: e }); c && c.attr({ stroke: g }); d && (r && d.isMarker && (k = a.pointAttribs(), f || (k.stroke = k.fill = h)), d.attr(k)) } F(this, "afterColorizeItem", { item: a, visible: f })
- }; a.prototype.positionItems = function () { this.allItems.forEach(this.positionItem, this); this.chart.isResizing || this.positionCheckboxes() };
- a.prototype.positionItem = function (a) { var f = this, e = this.options, b = e.symbolPadding, c = !e.rtl, d = a._legendItemPos; e = d[0]; d = d[1]; var h = a.checkbox, g = a.legendGroup; g && g.element && (b = { translateX: c ? e : this.legendWidth - e - 2 * b - 4, translateY: d }, c = function () { F(f, "afterPositionItem", { item: a }) }, k(g.translateY) ? g.animate(b, void 0, c) : (g.attr(b), c())); h && (h.x = e, h.y = d) }; a.prototype.destroyItem = function (a) {
- var f = a.checkbox;["legendItem", "legendLine", "legendSymbol", "legendGroup"].forEach(function (e) { a[e] && (a[e] = a[e].destroy()) });
- f && B(a.checkbox)
- }; a.prototype.destroy = function () { function a (a) { this[a] && (this[a] = this[a].destroy()) } this.getAllItems().forEach(function (f) { ["legendItem", "legendGroup"].forEach(a, f) }); "clipRect up down pager nav box title group".split(" ").forEach(a, this); this.display = null }; a.prototype.positionCheckboxes = function () {
- var a = this.group && this.group.alignAttr, f = this.clipHeight || this.legendHeight, e = this.titleHeight; if (a) {
- var b = a.translateY; this.allItems.forEach(function (c) {
- var d = c.checkbox; if (d) {
- var h = b +
- e + d.y + (this.scrollOffset || 0) + 3; t(d, { left: a.translateX + c.checkboxOffset + d.x - 20 + "px", top: h + "px", display: this.proximate || h > b - 6 && h < b + f - 6 ? "" : "none" })
- }
- }, this)
- }
- }; a.prototype.renderTitle = function () {
- var a = this.options, f = this.padding, e = a.title, b = 0; e.text && (this.title || (this.title = this.chart.renderer.label(e.text, f - 3, f - 4, void 0, void 0, void 0, a.useHTML, void 0, "legend-title").attr({ zIndex: 1 }), this.chart.styledMode || this.title.css(e.style), this.title.add(this.group)), e.width || this.title.css({
- width: this.maxLegendWidth +
- "px"
- }), a = this.title.getBBox(), b = a.height, this.offsetWidth = a.width, this.contentGroup.attr({ translateY: b })); this.titleHeight = b
- }; a.prototype.setText = function (a) { var f = this.options; a.legendItem.attr({ text: f.labelFormat ? m(f.labelFormat, a, this.chart) : f.labelFormatter.call(a) }) }; a.prototype.renderItem = function (a) {
- var f = this.chart, e = f.renderer, b = this.options, c = this.symbolWidth, d = b.symbolPadding || 0, g = this.itemStyle, h = this.itemHiddenStyle, k = "horizontal" === b.layout ? w(b.itemDistance, 20) : 0, n = !b.rtl, u = !a.series,
- t = !u && a.series.drawLegendSymbol ? a.series : a, l = t.options, m = this.createCheckboxForItem && l && l.showCheckbox, z = b.useHTML, B = a.options.className, P = a.legendItem; l = c + d + k + (m ? 20 : 0); P || (a.legendGroup = e.g("legend-item").addClass("highcharts-" + t.type + "-series highcharts-color-" + a.colorIndex + (B ? " " + B : "") + (u ? " highcharts-series-" + a.index : "")).attr({ zIndex: 1 }).add(this.scrollGroup), a.legendItem = P = e.text("", n ? c + d : -d, this.baseline || 0, z), f.styledMode || P.css(K(a.visible ? g : h)), P.attr({ align: n ? "left" : "right", zIndex: 2 }).add(a.legendGroup),
- this.baseline || (this.fontMetrics = e.fontMetrics(f.styledMode ? 12 : g.fontSize, P), this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop, P.attr("y", this.baseline), this.symbolHeight = b.symbolHeight || this.fontMetrics.f, b.squareSymbol && (this.symbolWidth = w(b.symbolWidth, Math.max(this.symbolHeight, 16)), l = this.symbolWidth + d + k + (m ? 20 : 0), n && P.attr("x", this.symbolWidth + d))), t.drawLegendSymbol(this, a), this.setItemEvents && this.setItemEvents(a, P, z)); m && !a.checkbox && this.createCheckboxForItem && this.createCheckboxForItem(a);
- this.colorizeItem(a, a.visible); !f.styledMode && g.width || P.css({ width: (b.itemWidth || this.widthOption || f.spacingBox.width) - l + "px" }); this.setText(a); f = P.getBBox(); e = this.fontMetrics && this.fontMetrics.h || 0; a.itemWidth = a.checkboxOffset = b.itemWidth || a.legendItemWidth || f.width + l; this.maxItemWidth = Math.max(this.maxItemWidth, a.itemWidth); this.totalItemWidth += a.itemWidth; this.itemHeight = a.itemHeight = Math.round(a.legendItemHeight || (f.height > 1.5 * e ? f.height : e))
- }; a.prototype.layoutItem = function (a) {
- var f = this.options,
- e = this.padding, b = "horizontal" === f.layout, c = a.itemHeight, d = this.itemMarginBottom, g = this.itemMarginTop, h = b ? w(f.itemDistance, 20) : 0, k = this.maxLegendWidth; f = f.alignColumns && this.totalItemWidth > k ? this.maxItemWidth : a.itemWidth; b && this.itemX - e + f > k && (this.itemX = e, this.lastLineHeight && (this.itemY += g + this.lastLineHeight + d), this.lastLineHeight = 0); this.lastItemY = g + this.itemY + d; this.lastLineHeight = Math.max(c, this.lastLineHeight); a._legendItemPos = [this.itemX, this.itemY]; b ? this.itemX += f : (this.itemY += g + c + d, this.lastLineHeight =
- c); this.offsetWidth = this.widthOption || Math.max((b ? this.itemX - e - (a.checkbox ? 0 : h) : f) + e, this.offsetWidth)
- }; a.prototype.getAllItems = function () { var a = []; this.chart.series.forEach(function (f) { var e = f && f.options; f && w(e.showInLegend, k(e.linkedTo) ? !1 : void 0, !0) && (a = a.concat(f.legendItems || ("point" === e.legendType ? f.data : f))) }); F(this, "afterGetAllItems", { allItems: a }); return a }; a.prototype.getAlignment = function () {
- var a = this.options; return this.proximate ? a.align.charAt(0) + "tv" : a.floating ? "" : a.align.charAt(0) +
- a.verticalAlign.charAt(0) + a.layout.charAt(0)
- }; a.prototype.adjustMargins = function (a, f) { var e = this.chart, b = this.options, c = this.getAlignment(); c && [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/].forEach(function (d, g) { d.test(c) && !k(a[g]) && (e[l[g]] = Math.max(e[l[g]], e.legend[(g + 1) % 2 ? "legendHeight" : "legendWidth"] + [1, -1, -1, 1][g] * b[g % 2 ? "x" : "y"] + w(b.margin, 12) + f[g] + (e.titleOffset[g] || 0))) }) }; a.prototype.proximatePositions = function () {
- var a = this.chart, f = [], e = "left" === this.options.align; this.allItems.forEach(function (b) {
- var c;
- var d = e; if (b.yAxis) { b.xAxis.options.reversed && (d = !d); b.points && (c = E(d ? b.points : b.points.slice(0).reverse(), function (a) { return M(a.plotY) })); d = this.itemMarginTop + b.legendItem.getBBox().height + this.itemMarginBottom; var g = b.yAxis.top - a.plotTop; b.visible ? (c = c ? c.plotY : b.yAxis.height, c += g - .3 * d) : c = g + b.yAxis.height; f.push({ target: c, size: d, item: b }) }
- }, this); d(f, a.plotHeight).forEach(function (b) { b.item._legendItemPos && b.pos && (b.item._legendItemPos[1] = a.plotTop - a.spacing[0] + b.pos) })
- }; a.prototype.render = function () {
- var a =
- this.chart, f = a.renderer, e = this.options, b = this.padding, c = this.getAllItems(), d = this.group, g = this.box; this.itemX = b; this.itemY = this.initialItemY; this.lastItemY = this.offsetWidth = 0; this.widthOption = z(e.width, a.spacingBox.width - b); var v = a.spacingBox.width - 2 * b - e.x; -1 < ["rm", "lm"].indexOf(this.getAlignment().substring(0, 2)) && (v /= 2); this.maxLegendWidth = this.widthOption || v; d || (this.group = d = f.g("legend").addClass(e.className || "").attr({ zIndex: 7 }).add(), this.contentGroup = f.g().attr({ zIndex: 1 }).add(d), this.scrollGroup =
- f.g().add(this.contentGroup)); this.renderTitle(); n(c, function (a, b) { return (a.options && a.options.legendIndex || 0) - (b.options && b.options.legendIndex || 0) }); e.reversed && c.reverse(); this.allItems = c; this.display = v = !!c.length; this.itemHeight = this.totalItemWidth = this.maxItemWidth = this.lastLineHeight = 0; c.forEach(this.renderItem, this); c.forEach(this.layoutItem, this); c = (this.widthOption || this.offsetWidth) + b; var k = this.lastItemY + this.lastLineHeight + this.titleHeight; k = this.handleOverflow(k); k += b; g || (this.box = g =
- f.rect().addClass("highcharts-legend-box").attr({ r: e.borderRadius }).add(d)); a.styledMode || g.attr({ stroke: e.borderColor, "stroke-width": e.borderWidth || 0, fill: e.backgroundColor || "none" }).shadow(e.shadow); if (0 < c && 0 < k) g[g.placed ? "animate" : "attr"](g.crisp.call({}, { x: 0, y: 0, width: c, height: k }, g.strokeWidth())); g[v ? "show" : "hide"](); a.styledMode && "none" === d.getStyle("display") && (c = k = 0); this.legendWidth = c; this.legendHeight = k; v && this.align(); this.proximate || this.positionItems(); F(this, "afterRender")
- }; a.prototype.align =
- function (a) { void 0 === a && (a = this.chart.spacingBox); var f = this.chart, e = this.options, b = a.y; /(lth|ct|rth)/.test(this.getAlignment()) && 0 < f.titleOffset[0] ? b += f.titleOffset[0] : /(lbh|cb|rbh)/.test(this.getAlignment()) && 0 < f.titleOffset[2] && (b -= f.titleOffset[2]); b !== a.y && (a = K(a, { y: b })); f.hasRendered || (this.group.placed = !1); this.group.align(K(e, { width: this.legendWidth, height: this.legendHeight, verticalAlign: this.proximate ? "top" : e.verticalAlign }), !0, a) }; a.prototype.handleOverflow = function (a) {
- var f = this, e = this.chart,
- b = e.renderer, c = this.options, d = c.y, g = "top" === c.verticalAlign, h = this.padding, k = c.maxHeight, n = c.navigation, u = w(n.animation, !0), t = n.arrowSize || 12, l = this.pages, m = this.allItems, z = function (a) { "number" === typeof a ? F.attr({ height: a }) : F && (f.clipRect = F.destroy(), f.contentGroup.clip()); f.contentGroup.div && (f.contentGroup.div.style.clip = a ? "rect(" + h + "px,9999px," + (h + a) + "px,0)" : "auto") }, B = function (a) { f[a] = b.circle(0, 0, 1.3 * t).translate(t / 2, t / 2).add(S); e.styledMode || f[a].attr("fill", "rgba(0,0,0,0.0001)"); return f[a] },
- P, E; d = e.spacingBox.height + (g ? -d : d) - h; var S = this.nav, F = this.clipRect; "horizontal" !== c.layout || "middle" === c.verticalAlign || c.floating || (d /= 2); k && (d = Math.min(d, k)); l.length = 0; a && 0 < d && a > d && !1 !== n.enabled ? (this.clipHeight = P = Math.max(d - 20 - this.titleHeight - h, 0), this.currentPage = w(this.currentPage, 1), this.fullHeight = a, m.forEach(function (a, b) {
- var e = a._legendItemPos[1], f = Math.round(a.legendItem.getBBox().height), c = l.length; if (!c || e - l[c - 1] > P && (E || e) !== l[c - 1]) l.push(E || e), c++; a.pageIx = c - 1; E && (m[b - 1].pageIx = c -
- 1); b === m.length - 1 && e + f - l[c - 1] > P && f <= P && (l.push(e), a.pageIx = c); e !== E && (E = e)
- }), F || (F = f.clipRect = b.clipRect(0, h, 9999, 0), f.contentGroup.clip(F)), z(P), S || (this.nav = S = b.g().attr({ zIndex: 1 }).add(this.group), this.up = b.symbol("triangle", 0, 0, t, t).add(S), B("upTracker").on("click", function () { f.scroll(-1, u) }), this.pager = b.text("", 15, 10).addClass("highcharts-legend-navigation"), !e.styledMode && n.style && this.pager.css(n.style), this.pager.add(S), this.down = b.symbol("triangle-down", 0, 0, t, t).add(S), B("downTracker").on("click",
- function () { f.scroll(1, u) })), f.scroll(0), a = d) : S && (z(), this.nav = S.destroy(), this.scrollGroup.attr({ translateY: 1 }), this.clipHeight = 0); return a
- }; a.prototype.scroll = function (a, c) {
- var e = this, b = this.chart, d = this.pages, g = d.length, h = this.clipHeight, v = this.options.navigation, k = this.pager, n = this.padding, r = this.currentPage + a; r > g && (r = g); 0 < r && ("undefined" !== typeof c && D(c, b), this.nav.attr({ translateX: n, translateY: h + this.padding + 7 + this.titleHeight, visibility: "inherit" }), [this.up, this.upTracker].forEach(function (a) {
- a.attr({
- "class": 1 ===
- r ? "highcharts-legend-nav-inactive" : "highcharts-legend-nav-active"
- })
- }), k.attr({ text: r + "/" + g }), [this.down, this.downTracker].forEach(function (a) { a.attr({ x: 18 + this.pager.getBBox().width, "class": r === g ? "highcharts-legend-nav-inactive" : "highcharts-legend-nav-active" }) }, this), b.styledMode || (this.up.attr({ fill: 1 === r ? v.inactiveColor : v.activeColor }), this.upTracker.css({ cursor: 1 === r ? "default" : "pointer" }), this.down.attr({ fill: r === g ? v.inactiveColor : v.activeColor }), this.downTracker.css({ cursor: r === g ? "default" : "pointer" })),
- this.scrollOffset = -d[r - 1] + this.initialItemY, this.scrollGroup.animate({ translateY: this.scrollOffset }), this.currentPage = r, this.positionCheckboxes(), a = C(w(c, b.renderer.globalAnimation, !0)), f(function () { F(e, "afterScroll", { currentPage: r }) }, a.duration))
- }; a.prototype.setItemEvents = function (a, f, e) {
- var b = this, c = b.chart.renderer.boxWrapper, d = a instanceof G, g = "highcharts-legend-" + (d ? "point" : "series") + "-active", h = b.chart.styledMode, k = function (e) {
- b.allItems.forEach(function (b) {
- a !== b && [b].concat(b.linkedSeries ||
- []).forEach(function (a) { a.setState(e, !d) })
- })
- }; (e ? [f, a.legendSymbol] : [a.legendGroup]).forEach(function (e) {
- if (e) e.on("mouseover", function () { a.visible && k("inactive"); a.setState("hover"); a.visible && c.addClass(g); h || f.css(b.options.itemHoverStyle) }).on("mouseout", function () { b.chart.styledMode || f.css(K(a.visible ? b.itemStyle : b.itemHiddenStyle)); k(""); c.removeClass(g); a.setState() }).on("click", function (b) {
- var e = function () { a.setVisible && a.setVisible(); k(a.visible ? "inactive" : "") }; c.removeClass(g); b = { browserEvent: b };
- a.firePointEvent ? a.firePointEvent("legendItemClick", b, e) : F(a, "legendItemClick", b, e)
- })
- })
- }; a.prototype.createCheckboxForItem = function (a) { a.checkbox = c("input", { type: "checkbox", className: "highcharts-legend-checkbox", checked: a.selected, defaultChecked: a.selected }, this.options.itemCheckboxStyle, this.chart.container); g(a.checkbox, "click", function (f) { F(a.series || a, "checkboxClick", { checked: f.target.checked, item: a }, function () { a.select() }) }) }; return a
- }(); (/Trident\/7\.0/.test(A.navigator && A.navigator.userAgent) ||
- a) && x(H.prototype, "positionItem", function (a, f) { var c = this, e = function () { f._legendItemPos && a.call(c, f) }; e(); c.bubbleLegend || setTimeout(e) }); ""; return H
- }); O(a, "Core/Series/SeriesRegistry.js", [a["Core/Globals.js"], a["Core/DefaultOptions.js"], a["Core/Series/Point.js"], a["Core/Utilities.js"]], function (a, q, A, G) {
- var C = q.defaultOptions, H = G.error, J = G.extendClass, D = G.merge, m; (function (l) {
- function d (a, c) {
- var d = C.plotOptions || {}, g = c.defaultOptions; c.prototype.pointClass || (c.prototype.pointClass = A); c.prototype.type =
- a; g && (d[a] = g); l.seriesTypes[a] = c
- } l.seriesTypes = a.seriesTypes; l.getSeries = function (a, c) { void 0 === c && (c = {}); var d = a.options.chart; d = c.type || d.type || d.defaultSeriesType || ""; var g = l.seriesTypes[d]; l || H(17, !0, a, { missingModuleFor: d }); d = new g; "function" === typeof d.init && d.init(a, c); return d }; l.registerSeriesType = d; l.seriesType = function (a, c, t, k, m) {
- var g = C.plotOptions || {}; c = c || ""; g[a] = D(g[c], t); d(a, J(l.seriesTypes[c] || function () { }, k)); l.seriesTypes[a].prototype.type = a; m && (l.seriesTypes[a].prototype.pointClass =
- J(A, m)); return l.seriesTypes[a]
- }
- })(m || (m = {})); return m
- }); O(a, "Core/Chart/Chart.js", [a["Core/Animation/AnimationUtilities.js"], a["Core/Axis/Axis.js"], a["Core/FormatUtilities.js"], a["Core/Foundation.js"], a["Core/Globals.js"], a["Core/Legend/Legend.js"], a["Core/MSPointer.js"], a["Core/DefaultOptions.js"], a["Core/Pointer.js"], a["Core/Renderer/RendererRegistry.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Renderer/SVG/SVGRenderer.js"], a["Core/Time.js"], a["Core/Utilities.js"], a["Core/Renderer/HTML/AST.js"]],
- function (a, q, A, G, x, H, J, D, m, l, d, g, c, t, k) {
- var B = a.animate, E = a.animObject, F = a.setAnimation, M = A.numberFormat, K = G.registerEventOptions, w = x.charts, z = x.doc, n = x.marginNames, f = x.svg, u = x.win, h = D.defaultOptions, r = D.defaultTime, e = d.seriesTypes, b = t.addEvent, y = t.attr, I = t.cleanRecursively, p = t.createElement, v = t.css, L = t.defined, C = t.discardElement, N = t.erase, Q = t.error, W = t.extend, ba = t.find, R = t.fireEvent, ca = t.getStyle, P = t.isArray, X = t.isNumber, S = t.isObject, da = t.isString, Z = t.merge, Y = t.objectEach, T = t.pick, ea = t.pInt, ia = t.relativeLength,
- O = t.removeEvent, ha = t.splat, aa = t.syncTimeout, ja = t.uniqueKey; a = function () {
- function a (a, b, e) {
- this.series = this.renderTo = this.renderer = this.pointer = this.pointCount = this.plotWidth = this.plotTop = this.plotLeft = this.plotHeight = this.plotBox = this.options = this.numberFormatter = this.margin = this.legend = this.labelCollectors = this.isResizing = this.index = this.eventOptions = this.container = this.colorCounter = this.clipBox = this.chartWidth = this.chartHeight = this.bounds = this.axisOffset = this.axes = void 0; this.sharedClips = {}; this.yAxis =
- this.xAxis = this.userOptions = this.titleOffset = this.time = this.symbolCounter = this.spacingBox = this.spacing = void 0; this.getArgs(a, b, e)
- } a.chart = function (b, e, f) { return new a(b, e, f) }; a.prototype.getArgs = function (a, b, e) { da(a) || a.nodeName ? (this.renderTo = a, this.init(b, e)) : this.init(a, b) }; a.prototype.init = function (a, b) {
- var e = a.plotOptions || {}; R(this, "init", { args: arguments }, function () {
- var f = Z(h, a), d = f.chart; Y(f.plotOptions, function (a, b) { S(a) && (a.tooltip = e[b] && Z(e[b].tooltip) || void 0) }); f.tooltip.userOptions = a.chart &&
- a.chart.forExport && a.tooltip.userOptions || a.tooltip; this.userOptions = a; this.margin = []; this.spacing = []; this.bounds = { h: {}, v: {} }; this.labelCollectors = []; this.callback = b; this.isResizing = 0; this.options = f; this.axes = []; this.series = []; this.time = a.time && Object.keys(a.time).length ? new c(a.time) : x.time; this.numberFormatter = d.numberFormatter || M; this.styledMode = d.styledMode; this.hasCartesianSeries = d.showAxes; this.index = w.length; w.push(this); x.chartCount++; K(this, d); this.xAxis = []; this.yAxis = []; this.pointCount =
- this.colorCounter = this.symbolCounter = 0; R(this, "afterInit"); this.firstRender()
- })
- }; a.prototype.initSeries = function (a) { var b = this.options.chart; b = a.type || b.type || b.defaultSeriesType; var f = e[b]; f || Q(17, !0, this, { missingModuleFor: b }); b = new f; "function" === typeof b.init && b.init(this, a); return b }; a.prototype.setSeriesData = function () { this.getSeriesOrderByLinks().forEach(function (a) { a.points || a.data || !a.enabledDataSorting || a.setData(a.options.data, !1) }) }; a.prototype.getSeriesOrderByLinks = function () {
- return this.series.concat().sort(function (a,
- b) { return a.linkedSeries.length || b.linkedSeries.length ? b.linkedSeries.length - a.linkedSeries.length : 0 })
- }; a.prototype.orderSeries = function (a) { var b = this.series; a = a || 0; for (var e = b.length; a < e; ++a)b[a] && (b[a].index = a, b[a].name = b[a].getName()) }; a.prototype.isInsidePlot = function (a, b, e) {
- void 0 === e && (e = {}); var f = this.inverted, c = this.plotBox, d = this.plotLeft, g = this.plotTop, h = this.scrollablePlotBox, p = 0; var v = 0; e.visiblePlotOnly && this.scrollingContainer && (v = this.scrollingContainer, p = v.scrollLeft, v = v.scrollTop);
- var k = e.series; c = e.visiblePlotOnly && h || c; h = e.inverted ? b : a; b = e.inverted ? a : b; a = { x: h, y: b, isInsidePlot: !0 }; if (!e.ignoreX) { var n = k && (f ? k.yAxis : k.xAxis) || { pos: d, len: Infinity }; h = e.paneCoordinates ? n.pos + h : d + h; h >= Math.max(p + d, n.pos) && h <= Math.min(p + d + c.width, n.pos + n.len) || (a.isInsidePlot = !1) } !e.ignoreY && a.isInsidePlot && (f = k && (f ? k.xAxis : k.yAxis) || { pos: g, len: Infinity }, e = e.paneCoordinates ? f.pos + b : g + b, e >= Math.max(v + g, f.pos) && e <= Math.min(v + g + c.height, f.pos + f.len) || (a.isInsidePlot = !1)); R(this, "afterIsInsidePlot",
- a); return a.isInsidePlot
- }; a.prototype.redraw = function (a) {
- R(this, "beforeRedraw"); var b = this.hasCartesianSeries ? this.axes : this.colorAxis || [], e = this.series, f = this.pointer, c = this.legend, d = this.userOptions.legend, g = this.renderer, h = g.isHidden(), p = [], v = this.isDirtyBox, k = this.isDirtyLegend; this.setResponsive && this.setResponsive(!1); F(this.hasRendered ? a : !1, this); h && this.temporaryDisplay(); this.layOutTitles(); for (a = e.length; a--;) {
- var n = e[a]; if (n.options.stacking || n.options.centerInCategory) {
- var r = !0; if (n.isDirty) {
- var y =
- !0; break
- }
- }
- } if (y) for (a = e.length; a--;)n = e[a], n.options.stacking && (n.isDirty = !0); e.forEach(function (a) { a.isDirty && ("point" === a.options.legendType ? ("function" === typeof a.updateTotals && a.updateTotals(), k = !0) : d && (d.labelFormatter || d.labelFormat) && (k = !0)); a.isDirtyData && R(a, "updatedData") }); k && c && c.options.enabled && (c.render(), this.isDirtyLegend = !1); r && this.getStacks(); b.forEach(function (a) { a.updateNames(); a.setScale() }); this.getMargins(); b.forEach(function (a) { a.isDirty && (v = !0) }); b.forEach(function (a) {
- var b =
- a.min + "," + a.max; a.extKey !== b && (a.extKey = b, p.push(function () { R(a, "afterSetExtremes", W(a.eventArgs, a.getExtremes())); delete a.eventArgs })); (v || r) && a.redraw()
- }); v && this.drawChartBox(); R(this, "predraw"); e.forEach(function (a) { (v || a.isDirty) && a.visible && a.redraw(); a.isDirtyData = !1 }); f && f.reset(!0); g.draw(); R(this, "redraw"); R(this, "render"); h && this.temporaryDisplay(!0); p.forEach(function (a) { a.call() })
- }; a.prototype.get = function (a) {
- function b (b) { return b.id === a || b.options && b.options.id === a } for (var e = this.series,
- f = ba(this.axes, b) || ba(this.series, b), c = 0; !f && c < e.length; c++)f = ba(e[c].points || [], b); return f
- }; a.prototype.getAxes = function () { var a = this, b = this.options, e = b.xAxis = ha(b.xAxis || {}); b = b.yAxis = ha(b.yAxis || {}); R(this, "getAxes"); e.forEach(function (a, b) { a.index = b; a.isX = !0 }); b.forEach(function (a, b) { a.index = b }); e.concat(b).forEach(function (b) { new q(a, b) }); R(this, "afterGetAxes") }; a.prototype.getSelectedPoints = function () {
- return this.series.reduce(function (a, b) {
- b.getPointsCollection().forEach(function (b) {
- T(b.selectedStaging,
- b.selected) && a.push(b)
- }); return a
- }, [])
- }; a.prototype.getSelectedSeries = function () { return this.series.filter(function (a) { return a.selected }) }; a.prototype.setTitle = function (a, b, e) { this.applyDescription("title", a); this.applyDescription("subtitle", b); this.applyDescription("caption", void 0); this.layOutTitles(e) }; a.prototype.applyDescription = function (a, b) {
- var e = this, f = "title" === a ? { color: "#333333", fontSize: this.options.isStock ? "16px" : "18px" } : { color: "#666666" }; f = this.options[a] = Z(!this.styledMode && { style: f },
- this.options[a], b); var c = this[a]; c && b && (this[a] = c = c.destroy()); f && !c && (c = this.renderer.text(f.text, 0, 0, f.useHTML).attr({ align: f.align, "class": "highcharts-" + a, zIndex: f.zIndex || 4 }).add(), c.update = function (b) { e[{ title: "setTitle", subtitle: "setSubtitle", caption: "setCaption" }[a]](b) }, this.styledMode || c.css(f.style), this[a] = c)
- }; a.prototype.layOutTitles = function (a) {
- var b = [0, 0, 0], e = this.renderer, f = this.spacingBox;["title", "subtitle", "caption"].forEach(function (a) {
- var c = this[a], d = this.options[a], g = d.verticalAlign ||
- "top"; a = "title" === a ? "top" === g ? -3 : 0 : "top" === g ? b[0] + 2 : 0; var h; if (c) { this.styledMode || (h = d.style && d.style.fontSize); h = e.fontMetrics(h, c).b; c.css({ width: (d.width || f.width + (d.widthAdjust || 0)) + "px" }); var p = Math.round(c.getBBox(d.useHTML).height); c.align(W({ y: "bottom" === g ? h : a + h, height: p }, d), !1, "spacingBox"); d.floating || ("top" === g ? b[0] = Math.ceil(b[0] + p) : "bottom" === g && (b[2] = Math.ceil(b[2] + p))) }
- }, this); b[0] && "top" === (this.options.title.verticalAlign || "top") && (b[0] += this.options.title.margin); b[2] && "bottom" ===
- this.options.caption.verticalAlign && (b[2] += this.options.caption.margin); var c = !this.titleOffset || this.titleOffset.join(",") !== b.join(","); this.titleOffset = b; R(this, "afterLayOutTitles"); !this.isDirtyBox && c && (this.isDirtyBox = this.isDirtyLegend = c, this.hasRendered && T(a, !0) && this.isDirtyBox && this.redraw())
- }; a.prototype.getChartSize = function () {
- var a = this.options.chart, b = a.width; a = a.height; var e = this.renderTo; L(b) || (this.containerWidth = ca(e, "width")); L(a) || (this.containerHeight = ca(e, "height")); this.chartWidth =
- Math.max(0, b || this.containerWidth || 600); this.chartHeight = Math.max(0, ia(a, this.chartWidth) || (1 < this.containerHeight ? this.containerHeight : 400))
- }; a.prototype.temporaryDisplay = function (a) {
- var b = this.renderTo; if (a) for (; b && b.style;)b.hcOrigStyle && (v(b, b.hcOrigStyle), delete b.hcOrigStyle), b.hcOrigDetached && (z.body.removeChild(b), b.hcOrigDetached = !1), b = b.parentNode; else for (; b && b.style;) {
- z.body.contains(b) || b.parentNode || (b.hcOrigDetached = !0, z.body.appendChild(b)); if ("none" === ca(b, "display", !1) || b.hcOricDetached) b.hcOrigStyle =
- { display: b.style.display, height: b.style.height, overflow: b.style.overflow }, a = { display: "block", overflow: "hidden" }, b !== this.renderTo && (a.height = 0), v(b, a), b.offsetWidth || b.style.setProperty("display", "block", "important"); b = b.parentNode; if (b === z.body) break
- }
- }; a.prototype.setClassName = function (a) { this.container.className = "highcharts-container " + (a || "") }; a.prototype.getContainer = function () {
- var a = this.options, b = a.chart, e = ja(), c, d = this.renderTo; d || (this.renderTo = d = b.renderTo); da(d) && (this.renderTo = d = z.getElementById(d));
- d || Q(13, !0, this); var h = ea(y(d, "data-highcharts-chart")); X(h) && w[h] && w[h].hasRendered && w[h].destroy(); y(d, "data-highcharts-chart", this.index); d.innerHTML = k.emptyHTML; b.skipClone || d.offsetWidth || this.temporaryDisplay(); this.getChartSize(); h = this.chartWidth; var n = this.chartHeight; v(d, { overflow: "hidden" }); this.styledMode || (c = W({
- position: "relative", overflow: "hidden", width: h + "px", height: n + "px", textAlign: "left", lineHeight: "normal", zIndex: 0, "-webkit-tap-highlight-color": "rgba(0,0,0,0)", userSelect: "none",
- "touch-action": "manipulation", outline: "none"
- }, b.style || {})); this.container = e = p("div", { id: e }, c, d); this._cursor = e.style.cursor; this.renderer = new (b.renderer || !f ? l.getRendererType(b.renderer) : g)(e, h, n, void 0, b.forExport, a.exporting && a.exporting.allowHTML, this.styledMode); F(void 0, this); this.setClassName(b.className); if (this.styledMode) for (var r in a.defs) this.renderer.definition(a.defs[r]); else this.renderer.setStyle(b.style); this.renderer.chartIndex = this.index; R(this, "afterGetContainer")
- }; a.prototype.getMargins =
- function (a) { var b = this.spacing, e = this.margin, f = this.titleOffset; this.resetMargins(); f[0] && !L(e[0]) && (this.plotTop = Math.max(this.plotTop, f[0] + b[0])); f[2] && !L(e[2]) && (this.marginBottom = Math.max(this.marginBottom, f[2] + b[2])); this.legend && this.legend.display && this.legend.adjustMargins(e, b); R(this, "getMargins"); a || this.getAxisMargins() }; a.prototype.getAxisMargins = function () {
- var a = this, b = a.axisOffset = [0, 0, 0, 0], e = a.colorAxis, f = a.margin, c = function (a) { a.forEach(function (a) { a.visible && a.getOffset() }) }; a.hasCartesianSeries ?
- c(a.axes) : e && e.length && c(e); n.forEach(function (e, c) { L(f[c]) || (a[e] += b[c]) }); a.setChartSize()
- }; a.prototype.reflow = function (a) {
- var b = this, e = b.options.chart, f = b.renderTo, c = L(e.width) && L(e.height), d = e.width || ca(f, "width"); e = e.height || ca(f, "height"); f = a ? a.target : u; delete b.pointer.chartPosition; if (!c && !b.isPrinting && d && e && (f === u || f === z)) {
- if (d !== b.containerWidth || e !== b.containerHeight) t.clearTimeout(b.reflowTimeout), b.reflowTimeout = aa(function () { b.container && b.setSize(void 0, void 0, !1) }, a ? 100 : 0); b.containerWidth =
- d; b.containerHeight = e
- }
- }; a.prototype.setReflow = function (a) { var e = this; !1 === a || this.unbindReflow ? !1 === a && this.unbindReflow && (this.unbindReflow = this.unbindReflow()) : (this.unbindReflow = b(u, "resize", function (a) { e.options && e.reflow(a) }), b(this, "destroy", this.unbindReflow)) }; a.prototype.setSize = function (a, b, e) {
- var f = this, c = f.renderer; f.isResizing += 1; F(e, f); e = c.globalAnimation; f.oldChartHeight = f.chartHeight; f.oldChartWidth = f.chartWidth; "undefined" !== typeof a && (f.options.chart.width = a); "undefined" !== typeof b &&
- (f.options.chart.height = b); f.getChartSize(); f.styledMode || (e ? B : v)(f.container, { width: f.chartWidth + "px", height: f.chartHeight + "px" }, e); f.setChartSize(!0); c.setSize(f.chartWidth, f.chartHeight, e); f.axes.forEach(function (a) { a.isDirty = !0; a.setScale() }); f.isDirtyLegend = !0; f.isDirtyBox = !0; f.layOutTitles(); f.getMargins(); f.redraw(e); f.oldChartHeight = null; R(f, "resize"); aa(function () { f && R(f, "endResize", null, function () { --f.isResizing }) }, E(e).duration)
- }; a.prototype.setChartSize = function (a) {
- var b = this.inverted,
- e = this.renderer, f = this.chartWidth, c = this.chartHeight, d = this.options.chart, g = this.spacing, h = this.clipOffset, p, v, k, n; this.plotLeft = p = Math.round(this.plotLeft); this.plotTop = v = Math.round(this.plotTop); this.plotWidth = k = Math.max(0, Math.round(f - p - this.marginRight)); this.plotHeight = n = Math.max(0, Math.round(c - v - this.marginBottom)); this.plotSizeX = b ? n : k; this.plotSizeY = b ? k : n; this.plotBorderWidth = d.plotBorderWidth || 0; this.spacingBox = e.spacingBox = { x: g[3], y: g[0], width: f - g[3] - g[1], height: c - g[0] - g[2] }; this.plotBox =
- e.plotBox = { x: p, y: v, width: k, height: n }; b = 2 * Math.floor(this.plotBorderWidth / 2); f = Math.ceil(Math.max(b, h[3]) / 2); c = Math.ceil(Math.max(b, h[0]) / 2); this.clipBox = { x: f, y: c, width: Math.floor(this.plotSizeX - Math.max(b, h[1]) / 2 - f), height: Math.max(0, Math.floor(this.plotSizeY - Math.max(b, h[2]) / 2 - c)) }; a || (this.axes.forEach(function (a) { a.setAxisSize(); a.setAxisTranslation() }), e.alignElements()); R(this, "afterSetChartSize", { skipAxes: a })
- }; a.prototype.resetMargins = function () {
- R(this, "resetMargins"); var a = this, b = a.options.chart;
- ["margin", "spacing"].forEach(function (e) { var f = b[e], c = S(f) ? f : [f, f, f, f];["Top", "Right", "Bottom", "Left"].forEach(function (f, d) { a[e][d] = T(b[e + f], c[d]) }) }); n.forEach(function (b, e) { a[b] = T(a.margin[e], a.spacing[e]) }); a.axisOffset = [0, 0, 0, 0]; a.clipOffset = [0, 0, 0, 0]
- }; a.prototype.drawChartBox = function () {
- var a = this.options.chart, b = this.renderer, e = this.chartWidth, f = this.chartHeight, c = this.styledMode, d = this.plotBGImage, g = a.backgroundColor, h = a.plotBackgroundColor, p = a.plotBackgroundImage, v = this.plotLeft, k = this.plotTop,
- n = this.plotWidth, r = this.plotHeight, y = this.plotBox, u = this.clipRect, l = this.clipBox, t = this.chartBackground, w = this.plotBackground, I = this.plotBorder, P, m = "animate"; t || (this.chartBackground = t = b.rect().addClass("highcharts-background").add(), m = "attr"); if (c) var z = P = t.strokeWidth(); else { z = a.borderWidth || 0; P = z + (a.shadow ? 8 : 0); g = { fill: g || "none" }; if (z || t["stroke-width"]) g.stroke = a.borderColor, g["stroke-width"] = z; t.attr(g).shadow(a.shadow) } t[m]({ x: P / 2, y: P / 2, width: e - P - z % 2, height: f - P - z % 2, r: a.borderRadius }); m = "animate";
- w || (m = "attr", this.plotBackground = w = b.rect().addClass("highcharts-plot-background").add()); w[m](y); c || (w.attr({ fill: h || "none" }).shadow(a.plotShadow), p && (d ? (p !== d.attr("href") && d.attr("href", p), d.animate(y)) : this.plotBGImage = b.image(p, v, k, n, r).add())); u ? u.animate({ width: l.width, height: l.height }) : this.clipRect = b.clipRect(l); m = "animate"; I || (m = "attr", this.plotBorder = I = b.rect().addClass("highcharts-plot-border").attr({ zIndex: 1 }).add()); c || I.attr({
- stroke: a.plotBorderColor, "stroke-width": a.plotBorderWidth ||
- 0, fill: "none"
- }); I[m](I.crisp({ x: v, y: k, width: n, height: r }, -I.strokeWidth())); this.isDirtyBox = !1; R(this, "afterDrawChartBox")
- }; a.prototype.propFromSeries = function () { var a = this, b = a.options.chart, f = a.options.series, c, d, g;["inverted", "angular", "polar"].forEach(function (h) { d = e[b.type || b.defaultSeriesType]; g = b[h] || d && d.prototype[h]; for (c = f && f.length; !g && c--;)(d = e[f[c].type]) && d.prototype[h] && (g = !0); a[h] = g }) }; a.prototype.linkSeries = function () {
- var a = this, b = a.series; b.forEach(function (a) {
- a.linkedSeries.length =
- 0
- }); b.forEach(function (b) { var e = b.options.linkedTo; da(e) && (e = ":previous" === e ? a.series[b.index - 1] : a.get(e)) && e.linkedParent !== b && (e.linkedSeries.push(b), b.linkedParent = e, e.enabledDataSorting && b.setDataSortingOptions(), b.visible = T(b.options.visible, e.options.visible, b.visible)) }); R(this, "afterLinkSeries")
- }; a.prototype.renderSeries = function () { this.series.forEach(function (a) { a.translate(); a.render() }) }; a.prototype.renderLabels = function () {
- var a = this, b = a.options.labels; b.items && b.items.forEach(function (e) {
- var f =
- W(b.style, e.style), c = ea(f.left) + a.plotLeft, d = ea(f.top) + a.plotTop + 12; delete f.left; delete f.top; a.renderer.text(e.html, c, d).attr({ zIndex: 2 }).css(f).add()
- })
- }; a.prototype.render = function () {
- var a = this.axes, b = this.colorAxis, e = this.renderer, f = this.options, c = function (a) { a.forEach(function (a) { a.visible && a.render() }) }, d = 0; this.setTitle(); this.legend = new H(this, f.legend); this.getStacks && this.getStacks(); this.getMargins(!0); this.setChartSize(); f = this.plotWidth; a.some(function (a) {
- if (a.horiz && a.visible && a.options.labels.enabled &&
- a.series.length) return d = 21, !0
- }); var g = this.plotHeight = Math.max(this.plotHeight - d, 0); a.forEach(function (a) { a.setScale() }); this.getAxisMargins(); var h = 1.1 < f / this.plotWidth, p = 1.05 < g / this.plotHeight; if (h || p) a.forEach(function (a) { (a.horiz && h || !a.horiz && p) && a.setTickInterval(!0) }), this.getMargins(); this.drawChartBox(); this.hasCartesianSeries ? c(a) : b && b.length && c(b); this.seriesGroup || (this.seriesGroup = e.g("series-group").attr({ zIndex: 3 }).add()); this.renderSeries(); this.renderLabels(); this.addCredits(); this.setResponsive &&
- this.setResponsive(); this.hasRendered = !0
- }; a.prototype.addCredits = function (a) { var b = this, e = Z(!0, this.options.credits, a); e.enabled && !this.credits && (this.credits = this.renderer.text(e.text + (this.mapCredits || ""), 0, 0).addClass("highcharts-credits").on("click", function () { e.href && (u.location.href = e.href) }).attr({ align: e.position.align, zIndex: 8 }), b.styledMode || this.credits.css(e.style), this.credits.add().align(e.position), this.credits.update = function (a) { b.credits = b.credits.destroy(); b.addCredits(a) }) }; a.prototype.destroy =
- function () {
- var a = this, b = a.axes, e = a.series, f = a.container, c = f && f.parentNode, d; R(a, "destroy"); a.renderer.forExport ? N(w, a) : w[a.index] = void 0; x.chartCount--; a.renderTo.removeAttribute("data-highcharts-chart"); O(a); for (d = b.length; d--;)b[d] = b[d].destroy(); this.scroller && this.scroller.destroy && this.scroller.destroy(); for (d = e.length; d--;)e[d] = e[d].destroy(); "title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer".split(" ").forEach(function (b) {
- var e =
- a[b]; e && e.destroy && (a[b] = e.destroy())
- }); f && (f.innerHTML = k.emptyHTML, O(f), c && C(f)); Y(a, function (b, e) { delete a[e] })
- }; a.prototype.firstRender = function () {
- var a = this, b = a.options; if (!a.isReadyToRender || a.isReadyToRender()) {
- a.getContainer(); a.resetMargins(); a.setChartSize(); a.propFromSeries(); a.getAxes(); (P(b.series) ? b.series : []).forEach(function (b) { a.initSeries(b) }); a.linkSeries(); a.setSeriesData(); R(a, "beforeRender"); m && (J.isRequired() ? a.pointer = new J(a, b) : a.pointer = new m(a, b)); a.render(); a.pointer.getChartPosition();
- if (!a.renderer.imgCount && !a.hasLoaded) a.onload(); a.temporaryDisplay(!0)
- }
- }; a.prototype.onload = function () { this.callbacks.concat([this.callback]).forEach(function (a) { a && "undefined" !== typeof this.index && a.apply(this, [this]) }, this); R(this, "load"); R(this, "render"); L(this.index) && this.setReflow(this.options.chart.reflow); this.warnIfA11yModuleNotLoaded(); this.hasLoaded = !0 }; a.prototype.warnIfA11yModuleNotLoaded = function () {
- var a = this.options; a && !this.accessibility && (this.renderer.boxWrapper.attr({
- role: "img",
- "aria-label": a.title && a.title.text || ""
- }), a.accessibility && !1 === a.accessibility.enabled || Q('Highcharts warning: Consider including the "accessibility.js" module to make your chart more usable for people with disabilities. Set the "accessibility.enabled" option to false to remove this warning. See https://www.highcharts.com/docs/accessibility/accessibility-module.', !1, this))
- }; a.prototype.addSeries = function (a, b, e) {
- var f = this, c; a && (b = T(b, !0), R(f, "addSeries", { options: a }, function () {
- c = f.initSeries(a); f.isDirtyLegend =
- !0; f.linkSeries(); c.enabledDataSorting && c.setData(a.data, !1); R(f, "afterAddSeries", { series: c }); b && f.redraw(e)
- })); return c
- }; a.prototype.addAxis = function (a, b, e, f) { return this.createAxis(b ? "xAxis" : "yAxis", { axis: a, redraw: e, animation: f }) }; a.prototype.addColorAxis = function (a, b, e) { return this.createAxis("colorAxis", { axis: a, redraw: b, animation: e }) }; a.prototype.createAxis = function (a, b) { a = new q(this, Z(b.axis, { index: this[a].length, isX: "xAxis" === a })); T(b.redraw, !0) && this.redraw(b.animation); return a }; a.prototype.showLoading =
- function (a) {
- var e = this, f = e.options, c = f.loading, d = function () { g && v(g, { left: e.plotLeft + "px", top: e.plotTop + "px", width: e.plotWidth + "px", height: e.plotHeight + "px" }) }, g = e.loadingDiv, h = e.loadingSpan; g || (e.loadingDiv = g = p("div", { className: "highcharts-loading highcharts-loading-hidden" }, null, e.container)); h || (e.loadingSpan = h = p("span", { className: "highcharts-loading-inner" }, null, g), b(e, "redraw", d)); g.className = "highcharts-loading"; k.setElementHTML(h, T(a, f.lang.loading, "")); e.styledMode || (v(g, W(c.style, { zIndex: 10 })),
- v(h, c.labelStyle), e.loadingShown || (v(g, { opacity: 0, display: "" }), B(g, { opacity: c.style.opacity || .5 }, { duration: c.showDuration || 0 }))); e.loadingShown = !0; d()
- }; a.prototype.hideLoading = function () { var a = this.options, b = this.loadingDiv; b && (b.className = "highcharts-loading highcharts-loading-hidden", this.styledMode || B(b, { opacity: 0 }, { duration: a.loading.hideDuration || 100, complete: function () { v(b, { display: "none" }) } })); this.loadingShown = !1 }; a.prototype.update = function (a, b, e, f) {
- var d = this, g = {
- credits: "addCredits", title: "setTitle",
- subtitle: "setSubtitle", caption: "setCaption"
- }, h = a.isResponsiveOptions, p = [], v, k; R(d, "update", { options: a }); h || d.setResponsive(!1, !0); a = I(a, d.options); d.userOptions = Z(d.userOptions, a); var n = a.chart; if (n) {
- Z(!0, d.options.chart, n); "className" in n && d.setClassName(n.className); "reflow" in n && d.setReflow(n.reflow); if ("inverted" in n || "polar" in n || "type" in n) { d.propFromSeries(); var y = !0 } "alignTicks" in n && (y = !0); "events" in n && K(this, n); Y(n, function (a, b) {
- -1 !== d.propsRequireUpdateSeries.indexOf("chart." + b) && (v = !0);
- -1 !== d.propsRequireDirtyBox.indexOf(b) && (d.isDirtyBox = !0); -1 !== d.propsRequireReflow.indexOf(b) && (h ? d.isDirtyBox = !0 : k = !0)
- }); !d.styledMode && n.style && d.renderer.setStyle(d.options.chart.style || {})
- } !d.styledMode && a.colors && (this.options.colors = a.colors); a.time && (this.time === r && (this.time = new c(a.time)), Z(!0, d.options.time, a.time)); Y(a, function (b, e) {
- if (d[e] && "function" === typeof d[e].update) d[e].update(b, !1); else if ("function" === typeof d[g[e]]) d[g[e]](b); else "colors" !== e && -1 === d.collectionsWithUpdate.indexOf(e) &&
- Z(!0, d.options[e], a[e]); "chart" !== e && -1 !== d.propsRequireUpdateSeries.indexOf(e) && (v = !0)
- }); this.collectionsWithUpdate.forEach(function (b) {
- if (a[b]) {
- var f = []; d[b].forEach(function (a, b) { a.options.isInternal || f.push(T(a.options.index, b)) }); ha(a[b]).forEach(function (a, c) {
- var g = L(a.id), h; g && (h = d.get(a.id)); !h && d[b] && (h = d[b][f ? f[c] : c]) && g && L(h.options.id) && (h = void 0); h && h.coll === b && (h.update(a, !1), e && (h.touched = !0)); !h && e && d.collectionsWithInit[b] && (d.collectionsWithInit[b][0].apply(d, [a].concat(d.collectionsWithInit[b][1] ||
- []).concat([!1])).touched = !0)
- }); e && d[b].forEach(function (a) { a.touched || a.options.isInternal ? delete a.touched : p.push(a) })
- }
- }); p.forEach(function (a) { a.chart && a.remove && a.remove(!1) }); y && d.axes.forEach(function (a) { a.update({}, !1) }); v && d.getSeriesOrderByLinks().forEach(function (a) { a.chart && a.update({}, !1) }, this); y = n && n.width; n = n && (da(n.height) ? ia(n.height, y || d.chartWidth) : n.height); k || X(y) && y !== d.chartWidth || X(n) && n !== d.chartHeight ? d.setSize(y, n, f) : T(b, !0) && d.redraw(f); R(d, "afterUpdate", {
- options: a, redraw: b,
- animation: f
- })
- }; a.prototype.setSubtitle = function (a, b) { this.applyDescription("subtitle", a); this.layOutTitles(b) }; a.prototype.setCaption = function (a, b) { this.applyDescription("caption", a); this.layOutTitles(b) }; a.prototype.showResetZoom = function () {
- function a () { b.zoomOut() } var b = this, e = h.lang, f = b.options.chart.resetZoomButton, c = f.theme, d = "chart" === f.relativeTo || "spacingBox" === f.relativeTo ? null : "scrollablePlotBox"; R(this, "beforeShowResetZoom", null, function () {
- b.resetZoomButton = b.renderer.button(e.resetZoom,
- null, null, a, c).attr({ align: f.position.align, title: e.resetZoomTitle }).addClass("highcharts-reset-zoom").add().align(f.position, !1, d)
- }); R(this, "afterShowResetZoom")
- }; a.prototype.zoomOut = function () { R(this, "selection", { resetSelection: !0 }, this.zoom) }; a.prototype.zoom = function (a) {
- var b = this, e = b.pointer, f = b.inverted ? e.mouseDownX : e.mouseDownY, c = !1, d; !a || a.resetSelection ? (b.axes.forEach(function (a) { d = a.zoom() }), e.initiated = !1) : a.xAxis.concat(a.yAxis).forEach(function (a) {
- var g = a.axis, h = b.inverted ? g.left : g.top,
- p = b.inverted ? h + g.width : h + g.height, v = g.isXAxis, k = !1; if (!v && f >= h && f <= p || v || !L(f)) k = !0; e[v ? "zoomX" : "zoomY"] && k && (d = g.zoom(a.min, a.max), g.displayBtn && (c = !0))
- }); var g = b.resetZoomButton; c && !g ? b.showResetZoom() : !c && S(g) && (b.resetZoomButton = g.destroy()); d && b.redraw(T(b.options.chart.animation, a && a.animation, 100 > b.pointCount))
- }; a.prototype.pan = function (a, b) {
- var e = this, f = e.hoverPoints; b = "object" === typeof b ? b : { enabled: b, type: "x" }; var c = e.options.chart; c && c.panning && (c.panning = b); var d = b.type, g; R(this, "pan",
- { originalEvent: a }, function () {
- f && f.forEach(function (a) { a.setState() }); var b = e.xAxis; "xy" === d ? b = b.concat(e.yAxis) : "y" === d && (b = e.yAxis); var c = {}; b.forEach(function (b) {
- if (b.options.panningEnabled && !b.options.isInternal) {
- var f = b.horiz, h = a[f ? "chartX" : "chartY"]; f = f ? "mouseDownX" : "mouseDownY"; var p = e[f], v = b.minPointOffset || 0, k = b.reversed && !e.inverted || !b.reversed && e.inverted ? -1 : 1, n = b.getExtremes(), r = b.toValue(p - h, !0) + v * k, y = b.toValue(p + b.len - h, !0) - (v * k || b.isXAxis && b.pointRangePadding || 0), u = y < r; k = b.hasVerticalPanning();
- p = u ? y : r; r = u ? r : y; var l = b.panningState; !k || b.isXAxis || l && !l.isDirty || b.series.forEach(function (a) { var b = a.getProcessedData(!0); b = a.getExtremes(b.yData, !0); l || (l = { startMin: Number.MAX_VALUE, startMax: -Number.MAX_VALUE }); X(b.dataMin) && X(b.dataMax) && (l.startMin = Math.min(T(a.options.threshold, Infinity), b.dataMin, l.startMin), l.startMax = Math.max(T(a.options.threshold, -Infinity), b.dataMax, l.startMax)) }); k = Math.min(T(l && l.startMin, n.dataMin), v ? n.min : b.toValue(b.toPixels(n.min) - b.minPixelPadding)); y = Math.max(T(l &&
- l.startMax, n.dataMax), v ? n.max : b.toValue(b.toPixels(n.max) + b.minPixelPadding)); b.panningState = l; b.isOrdinal || (v = k - p, 0 < v && (r += v, p = k), v = r - y, 0 < v && (r = y, p -= v), b.series.length && p !== n.min && r !== n.max && p >= k && r <= y && (b.setExtremes(p, r, !1, !1, { trigger: "pan" }), !e.resetZoomButton && p !== k && r !== y && d.match("y") && (e.showResetZoom(), b.displayBtn = !1), g = !0), c[f] = h)
- }
- }); Y(c, function (a, b) { e[b] = a }); g && e.redraw(!1); v(e.container, { cursor: "move" })
- })
- }; return a
- }(); W(a.prototype, {
- callbacks: [], collectionsWithInit: {
- xAxis: [a.prototype.addAxis,
- [!0]], yAxis: [a.prototype.addAxis, [!1]], series: [a.prototype.addSeries]
- }, collectionsWithUpdate: ["xAxis", "yAxis", "series"], propsRequireDirtyBox: "backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow".split(" "), propsRequireReflow: "margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft".split(" "), propsRequireUpdateSeries: "chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip".split(" ")
- });
- ""; return a
- }); O(a, "Core/Legend/LegendSymbol.js", [a["Core/Utilities.js"]], function (a) {
- var C = a.merge, A = a.pick, G; (function (a) {
- a.drawLineMarker = function (a) {
- var q = this.options, x = a.symbolWidth, m = a.symbolHeight, l = m / 2, d = this.chart.renderer, g = this.legendGroup; a = a.baseline - Math.round(.3 * a.fontMetrics.b); var c = {}, t = q.marker; this.chart.styledMode || (c = { "stroke-width": q.lineWidth || 0 }, q.dashStyle && (c.dashstyle = q.dashStyle)); this.legendLine = d.path([["M", 0, a], ["L", x, a]]).addClass("highcharts-graph").attr(c).add(g);
- t && !1 !== t.enabled && x && (q = Math.min(A(t.radius, l), l), 0 === this.symbol.indexOf("url") && (t = C(t, { width: m, height: m }), q = 0), this.legendSymbol = x = d.symbol(this.symbol, x / 2 - q, a - q, 2 * q, 2 * q, t).addClass("highcharts-point").add(g), x.isMarker = !0)
- }; a.drawRectangle = function (a, q) { var C = a.symbolHeight, m = a.options.squareSymbol; q.legendSymbol = this.chart.renderer.rect(m ? (a.symbolWidth - C) / 2 : 0, a.baseline - C + 1, m ? C : a.symbolWidth, C, A(a.options.symbolRadius, C / 2)).addClass("highcharts-point").attr({ zIndex: 3 }).add(q.legendGroup) }
- })(G ||
- (G = {})); return G
- }); O(a, "Core/Series/SeriesDefaults.js", [], function () {
- return {
- lineWidth: 2, allowPointSelect: !1, crisp: !0, showCheckbox: !1, animation: { duration: 1E3 }, events: {}, marker: { enabledThreshold: 2, lineColor: "#ffffff", lineWidth: 0, radius: 4, states: { normal: { animation: !0 }, hover: { animation: { duration: 50 }, enabled: !0, radiusPlus: 2, lineWidthPlus: 1 }, select: { fillColor: "#cccccc", lineColor: "#000000", lineWidth: 2 } } }, point: { events: {} }, dataLabels: {
- animation: {}, align: "center", defer: !0, formatter: function () {
- var a = this.series.chart.numberFormatter;
- return "number" !== typeof this.y ? "" : a(this.y, -1)
- }, padding: 5, style: { fontSize: "11px", fontWeight: "bold", color: "contrast", textOutline: "1px contrast" }, verticalAlign: "bottom", x: 0, y: 0
- }, cropThreshold: 300, opacity: 1, pointRange: 0, softThreshold: !0, states: { normal: { animation: !0 }, hover: { animation: { duration: 50 }, lineWidthPlus: 1, marker: {}, halo: { size: 10, opacity: .25 } }, select: { animation: { duration: 0 } }, inactive: { animation: { duration: 50 }, opacity: .2 } }, stickyTracking: !0, turboThreshold: 1E3, findNearestPointBy: "x"
- }
- }); O(a, "Core/Series/Series.js",
- [a["Core/Animation/AnimationUtilities.js"], a["Core/DefaultOptions.js"], a["Core/Foundation.js"], a["Core/Globals.js"], a["Core/Legend/LegendSymbol.js"], a["Core/Series/Point.js"], a["Core/Series/SeriesDefaults.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Renderer/SVG/SVGElement.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H, J, D, m, l) {
- var d = a.animObject, g = a.setAnimation, c = q.defaultOptions, t = A.registerEventOptions, k = G.hasTouch, B = G.svg, E = G.win, F = D.seriesTypes, M = l.addEvent, K = l.arrayMax, w = l.arrayMin, z =
- l.clamp, n = l.cleanRecursively, f = l.correctFloat, u = l.defined, h = l.erase, r = l.error, e = l.extend, b = l.find, y = l.fireEvent, I = l.getNestedProperty, p = l.isArray, v = l.isNumber, L = l.isString, C = l.merge, N = l.objectEach, Q = l.pick, W = l.removeEvent, ba = l.splat, R = l.syncTimeout; a = function () {
- function a () {
- this.zones = this.yAxis = this.xAxis = this.userOptions = this.tooltipOptions = this.processedYData = this.processedXData = this.points = this.options = this.linkedSeries = this.index = this.eventsToUnbind = this.eventOptions = this.data = this.chart = this._i =
- void 0
- } a.prototype.init = function (a, b) {
- y(this, "init", { options: b }); var f = this, c = a.series; this.eventsToUnbind = []; f.chart = a; f.options = f.setOptions(b); b = f.options; f.linkedSeries = []; f.bindAxes(); e(f, { name: b.name, state: "", visible: !1 !== b.visible, selected: !0 === b.selected }); t(this, b); var d = b.events; if (d && d.click || b.point && b.point.events && b.point.events.click || b.allowPointSelect) a.runTrackerClick = !0; f.getColor(); f.getSymbol(); f.parallelArrays.forEach(function (a) { f[a + "Data"] || (f[a + "Data"] = []) }); f.isCartesian &&
- (a.hasCartesianSeries = !0); var g; c.length && (g = c[c.length - 1]); f._i = Q(g && g._i, -1) + 1; f.opacity = f.options.opacity; a.orderSeries(this.insert(c)); b.dataSorting && b.dataSorting.enabled ? f.setDataSortingOptions() : f.points || f.data || f.setData(b.data, !1); y(this, "afterInit")
- }; a.prototype.is = function (a) { return F[a] && this instanceof F[a] }; a.prototype.insert = function (a) {
- var b = this.options.index, e; if (v(b)) {
- for (e = a.length; e--;)if (b >= Q(a[e].options.index, a[e]._i)) { a.splice(e + 1, 0, this); break } -1 === e && a.unshift(this); e +=
- 1
- } else a.push(this); return Q(e, a.length - 1)
- }; a.prototype.bindAxes = function () { var a = this, b = a.options, e = a.chart, f; y(this, "bindAxes", null, function () { (a.axisTypes || []).forEach(function (c) { var d = 0; e[c].forEach(function (e) { f = e.options; if (b[c] === d && !f.isInternal || "undefined" !== typeof b[c] && b[c] === f.id || "undefined" === typeof b[c] && 0 === f.index) a.insert(e.series), a[c] = e, e.isDirty = !0; f.isInternal || d++ }); a[c] || a.optionalAxis === c || r(18, !0, e) }) }); y(this, "afterBindAxes") }; a.prototype.updateParallelArrays = function (a,
- b) { var e = a.series, f = arguments, c = v(b) ? function (f) { var c = "y" === f && e.toYData ? e.toYData(a) : a[f]; e[f + "Data"][b] = c } : function (a) { Array.prototype[b].apply(e[a + "Data"], Array.prototype.slice.call(f, 2)) }; e.parallelArrays.forEach(c) }; a.prototype.hasData = function () { return this.visible && "undefined" !== typeof this.dataMax && "undefined" !== typeof this.dataMin || this.visible && this.yData && 0 < this.yData.length }; a.prototype.autoIncrement = function (a) {
- var b = this.options, e = b.pointIntervalUnit, f = b.relativeXValue, c = this.chart.time,
- d = this.xIncrement, g; d = Q(d, b.pointStart, 0); this.pointInterval = g = Q(this.pointInterval, b.pointInterval, 1); f && v(a) && (g *= a); e && (b = new c.Date(d), "day" === e ? c.set("Date", b, c.get("Date", b) + g) : "month" === e ? c.set("Month", b, c.get("Month", b) + g) : "year" === e && c.set("FullYear", b, c.get("FullYear", b) + g), g = b.getTime() - d); if (f && v(a)) return d + g; this.xIncrement = d + g; return d
- }; a.prototype.setDataSortingOptions = function () {
- var a = this.options; e(this, { requireSorting: !1, sorted: !1, enabledDataSorting: !0, allowDG: !1 }); u(a.pointRange) ||
- (a.pointRange = 1)
- }; a.prototype.setOptions = function (a) {
- var b = this.chart, e = b.options, f = e.plotOptions, d = b.userOptions || {}; a = C(a); b = b.styledMode; var g = { plotOptions: f, userOptions: a }; y(this, "setOptions", g); var h = g.plotOptions[this.type], p = d.plotOptions || {}; this.userOptions = g.userOptions; d = C(h, f.series, d.plotOptions && d.plotOptions[this.type], a); this.tooltipOptions = C(c.tooltip, c.plotOptions.series && c.plotOptions.series.tooltip, c.plotOptions[this.type].tooltip, e.tooltip.userOptions, f.series && f.series.tooltip,
- f[this.type].tooltip, a.tooltip); this.stickyTracking = Q(a.stickyTracking, p[this.type] && p[this.type].stickyTracking, p.series && p.series.stickyTracking, this.tooltipOptions.shared && !this.noSharedTooltip ? !0 : d.stickyTracking); null === h.marker && delete d.marker; this.zoneAxis = d.zoneAxis; f = this.zones = (d.zones || []).slice(); !d.negativeColor && !d.negativeFillColor || d.zones || (e = { value: d[this.zoneAxis + "Threshold"] || d.threshold || 0, className: "highcharts-negative" }, b || (e.color = d.negativeColor, e.fillColor = d.negativeFillColor),
- f.push(e)); f.length && u(f[f.length - 1].value) && f.push(b ? {} : { color: this.color, fillColor: this.fillColor }); y(this, "afterSetOptions", { options: d }); return d
- }; a.prototype.getName = function () { return Q(this.options.name, "Series " + (this.index + 1)) }; a.prototype.getCyclic = function (a, b, e) {
- var f = this.chart, c = this.userOptions, d = a + "Index", g = a + "Counter", h = e ? e.length : Q(f.options.chart[a + "Count"], f[a + "Count"]); if (!b) { var p = Q(c[d], c["_" + d]); u(p) || (f.series.length || (f[g] = 0), c["_" + d] = p = f[g] % h, f[g] += 1); e && (b = e[p]) } "undefined" !==
- typeof p && (this[d] = p); this[a] = b
- }; a.prototype.getColor = function () { this.chart.styledMode ? this.getCyclic("color") : this.options.colorByPoint ? this.color = "#cccccc" : this.getCyclic("color", this.options.color || c.plotOptions[this.type].color, this.chart.options.colors) }; a.prototype.getPointsCollection = function () { return (this.hasGroupedData ? this.points : this.data) || [] }; a.prototype.getSymbol = function () { this.getCyclic("symbol", this.options.marker.symbol, this.chart.options.symbols) }; a.prototype.findPointIndex = function (a,
- e) {
- var f = a.id, c = a.x, d = this.points, g = this.options.dataSorting, h, p; if (f) g = this.chart.get(f), g instanceof H && (h = g); else if (this.linkedParent || this.enabledDataSorting || this.options.relativeXValue) if (h = function (b) { return !b.touched && b.index === a.index }, g && g.matchByName ? h = function (b) { return !b.touched && b.name === a.name } : this.options.relativeXValue && (h = function (b) { return !b.touched && b.options.x === a.x }), h = b(d, h), !h) return; if (h) { var k = h && h.index; "undefined" !== typeof k && (p = !0) } "undefined" === typeof k && v(c) && (k = this.xData.indexOf(c,
- e)); -1 !== k && "undefined" !== typeof k && this.cropped && (k = k >= this.cropStart ? k - this.cropStart : k); !p && v(k) && d[k] && d[k].touched && (k = void 0); return k
- }; a.prototype.updateData = function (a, b) {
- var e = this.options, f = e.dataSorting, c = this.points, d = [], g = this.requireSorting, h = a.length === c.length, p, k, n, r = !0; this.xIncrement = null; a.forEach(function (a, b) {
- var k = u(a) && this.pointClass.prototype.optionsToObject.call({ series: this }, a) || {}, r = k.x; if (k.id || v(r)) {
- if (k = this.findPointIndex(k, n), -1 === k || "undefined" === typeof k ? d.push(a) :
- c[k] && a !== e.data[k] ? (c[k].update(a, !1, null, !1), c[k].touched = !0, g && (n = k + 1)) : c[k] && (c[k].touched = !0), !h || b !== k || f && f.enabled || this.hasDerivedData) p = !0
- } else d.push(a)
- }, this); if (p) for (a = c.length; a--;)(k = c[a]) && !k.touched && k.remove && k.remove(!1, b); else !h || f && f.enabled ? r = !1 : (a.forEach(function (a, b) { a !== c[b].y && c[b].update && c[b].update(a, !1, null, !1) }), d.length = 0); c.forEach(function (a) { a && (a.touched = !1) }); if (!r) return !1; d.forEach(function (a) { this.addPoint(a, !1, null, null, !1) }, this); null === this.xIncrement &&
- this.xData && this.xData.length && (this.xIncrement = K(this.xData), this.autoIncrement()); return !0
- }; a.prototype.setData = function (a, b, e, f) {
- var c = this, d = c.points, g = d && d.length || 0, h = c.options, k = c.chart, n = h.dataSorting, y = c.xAxis, u = h.turboThreshold, l = this.xData, t = this.yData, w = c.pointArrayMap; w = w && w.length; var I = h.keys, m, z = 0, P = 1, B = null; if (!k.options.chart.allowMutatingData) { h.data && delete c.options.data; c.userOptions.data && delete c.userOptions.data; var E = C(!0, a) } a = E || a || []; E = a.length; b = Q(b, !0); n && n.enabled &&
- (a = this.sortData(a)); k.options.chart.allowMutatingData && !1 !== f && E && g && !c.cropped && !c.hasGroupedData && c.visible && !c.isSeriesBoosting && (m = this.updateData(a, e)); if (!m) {
- c.xIncrement = null; c.colorCounter = 0; this.parallelArrays.forEach(function (a) { c[a + "Data"].length = 0 }); if (u && E > u) if (B = c.getFirstValidPoint(a), v(B)) for (e = 0; e < E; e++)l[e] = this.autoIncrement(), t[e] = a[e]; else if (p(B)) if (w) if (B.length === w) for (e = 0; e < E; e++)l[e] = this.autoIncrement(), t[e] = a[e]; else for (e = 0; e < E; e++)f = a[e], l[e] = f[0], t[e] = f.slice(1, w + 1);
- else if (I && (z = I.indexOf("x"), P = I.indexOf("y"), z = 0 <= z ? z : 0, P = 0 <= P ? P : 1), 1 === B.length && (P = 0), z === P) for (e = 0; e < E; e++)l[e] = this.autoIncrement(), t[e] = a[e][P]; else for (e = 0; e < E; e++)f = a[e], l[e] = f[z], t[e] = f[P]; else r(12, !1, k); else for (e = 0; e < E; e++)"undefined" !== typeof a[e] && (f = { series: c }, c.pointClass.prototype.applyOptions.apply(f, [a[e]]), c.updateParallelArrays(f, e)); t && L(t[0]) && r(14, !0, k); c.data = []; c.options.data = c.userOptions.data = a; for (e = g; e--;)d[e] && d[e].destroy && d[e].destroy(); y && (y.minRange = y.userMinRange);
- c.isDirty = k.isDirtyBox = !0; c.isDirtyData = !!d; e = !1
- } "point" === h.legendType && (this.processData(), this.generatePoints()); b && k.redraw(e)
- }; a.prototype.sortData = function (a) {
- var b = this, e = b.options.dataSorting.sortKey || "y", f = function (a, b) { return u(b) && a.pointClass.prototype.optionsToObject.call({ series: a }, b) || {} }; a.forEach(function (e, c) { a[c] = f(b, e); a[c].index = c }, this); a.concat().sort(function (a, b) { a = I(e, a); b = I(e, b); return b < a ? -1 : b > a ? 1 : 0 }).forEach(function (a, b) { a.x = b }, this); b.linkedSeries && b.linkedSeries.forEach(function (b) {
- var e =
- b.options, c = e.data; e.dataSorting && e.dataSorting.enabled || !c || (c.forEach(function (e, d) { c[d] = f(b, e); a[d] && (c[d].x = a[d].x, c[d].index = d) }), b.setData(c, !1))
- }); return a
- }; a.prototype.getProcessedData = function (a) {
- var b = this.xAxis, e = this.options, f = e.cropThreshold, c = a || this.getExtremesFromAll || e.getExtremesFromAll, d = this.isCartesian; a = b && b.val2lin; e = !(!b || !b.logarithmic); var g = 0, h = this.xData, p = this.yData, v = this.requireSorting; var k = !1; var n = h.length; if (b) {
- k = b.getExtremes(); var y = k.min; var l = k.max; k = !(!b.categories ||
- b.names.length)
- } if (d && this.sorted && !c && (!f || n > f || this.forceCrop)) if (h[n - 1] < y || h[0] > l) h = [], p = []; else if (this.yData && (h[0] < y || h[n - 1] > l)) { var u = this.cropData(this.xData, this.yData, y, l); h = u.xData; p = u.yData; g = u.start; u = !0 } for (f = h.length || 1; --f;)if (b = e ? a(h[f]) - a(h[f - 1]) : h[f] - h[f - 1], 0 < b && ("undefined" === typeof t || b < t)) var t = b; else 0 > b && v && !k && (r(15, !1, this.chart), v = !1); return { xData: h, yData: p, cropped: u, cropStart: g, closestPointRange: t }
- }; a.prototype.processData = function (a) {
- var b = this.xAxis; if (this.isCartesian &&
- !this.isDirty && !b.isDirty && !this.yAxis.isDirty && !a) return !1; a = this.getProcessedData(); this.cropped = a.cropped; this.cropStart = a.cropStart; this.processedXData = a.xData; this.processedYData = a.yData; this.closestPointRange = this.basePointRange = a.closestPointRange; y(this, "afterProcessData")
- }; a.prototype.cropData = function (a, b, e, f, c) {
- var d = a.length, g, h = 0, p = d; c = Q(c, this.cropShoulder); for (g = 0; g < d; g++)if (a[g] >= e) { h = Math.max(0, g - c); break } for (e = g; e < d; e++)if (a[e] > f) { p = e + c; break } return {
- xData: a.slice(h, p), yData: b.slice(h,
- p), start: h, end: p
- }
- }; a.prototype.generatePoints = function () {
- var a = this.options, b = this.processedData || a.data, f = this.processedXData, c = this.processedYData, d = this.pointClass, g = f.length, h = this.cropStart || 0, p = this.hasGroupedData, v = a.keys, k = []; a = a.dataGrouping && a.dataGrouping.groupAll ? h : 0; var n, r, l = this.data; if (!l && !p) { var u = []; u.length = b.length; l = this.data = u } v && p && (this.options.keys = !1); for (r = 0; r < g; r++) {
- u = h + r; if (p) {
- var t = (new d).init(this, [f[r]].concat(ba(c[r]))); t.dataGroup = this.groupMap[a + r]; t.dataGroup.options &&
- (t.options = t.dataGroup.options, e(t, t.dataGroup.options), delete t.dataLabels)
- } else (t = l[u]) || "undefined" === typeof b[u] || (l[u] = t = (new d).init(this, b[u], f[r])); t && (t.index = p ? a + r : u, k[r] = t)
- } this.options.keys = v; if (l && (g !== (n = l.length) || p)) for (r = 0; r < n; r++)r !== h || p || (r += g), l[r] && (l[r].destroyElements(), l[r].plotX = void 0); this.data = l; this.points = k; y(this, "afterGeneratePoints")
- }; a.prototype.getXExtremes = function (a) { return { min: w(a), max: K(a) } }; a.prototype.getExtremes = function (a, b) {
- var e = this.xAxis, f = this.yAxis,
- c = this.processedXData || this.xData, d = [], g = this.requireSorting ? this.cropShoulder : 0; f = f ? f.positiveValuesOnly : !1; var h, k = 0, n = 0, r = 0; a = a || this.stackedYData || this.processedYData || []; var l = a.length; if (e) { var u = e.getExtremes(); k = u.min; n = u.max } for (h = 0; h < l; h++) { var t = c[h]; u = a[h]; var I = (v(u) || p(u)) && (u.length || 0 < u || !f); t = b || this.getExtremesFromAll || this.options.getExtremesFromAll || this.cropped || !e || (c[h + g] || t) >= k && (c[h - g] || t) <= n; if (I && t) if (I = u.length) for (; I--;)v(u[I]) && (d[r++] = u[I]); else d[r++] = u } a = {
- activeYData: d,
- dataMin: w(d), dataMax: K(d)
- }; y(this, "afterGetExtremes", { dataExtremes: a }); return a
- }; a.prototype.applyExtremes = function () { var a = this.getExtremes(); this.dataMin = a.dataMin; this.dataMax = a.dataMax; return a }; a.prototype.getFirstValidPoint = function (a) { for (var b = a.length, e = 0, f = null; null === f && e < b;)f = a[e], e++; return f }; a.prototype.translate = function () {
- this.processedXData || this.processData(); this.generatePoints(); var a = this.options, b = a.stacking, e = this.xAxis, c = e.categories, d = this.enabledDataSorting, g = this.yAxis,
- h = this.points, k = h.length, n = this.pointPlacementToXValue(), r = !!n, l = a.threshold, t = a.startFromThreshold ? l : 0, w = this.zoneAxis || "y", I, m, L = Number.MAX_VALUE; for (I = 0; I < k; I++) {
- var B = h[I], E = B.x, F = void 0, M = void 0, K = B.y, q = B.low, C = b && g.stacking && g.stacking.stacks[(this.negStacks && K < (t ? 0 : l) ? "-" : "") + this.stackKey]; if (g.positiveValuesOnly && !g.validatePositiveValue(K) || e.positiveValuesOnly && !e.validatePositiveValue(E)) B.isNull = !0; B.plotX = m = f(z(e.translate(E, 0, 0, 0, 1, n, "flags" === this.type), -1E5, 1E5)); if (b && this.visible &&
- C && C[E]) { var N = this.getStackIndicator(N, E, this.index); B.isNull || (F = C[E], M = F.points[N.key]) } p(M) && (q = M[0], K = M[1], q === t && N.key === C[E].base && (q = Q(v(l) && l, g.min)), g.positiveValuesOnly && 0 >= q && (q = null), B.total = B.stackTotal = F.total, B.percentage = F.total && B.y / F.total * 100, B.stackY = K, this.irregularWidths || F.setOffset(this.pointXOffset || 0, this.barW || 0)); B.yBottom = u(q) ? z(g.translate(q, 0, 1, 0, 1), -1E5, 1E5) : null; this.dataModify && (K = this.dataModify.modifyValue(K, I)); B.plotY = void 0; v(K) && (F = g.translate(K, !1, !0, !1, !0),
- "undefined" !== typeof F && (B.plotY = z(F, -1E5, 1E5))); B.isInside = this.isPointInside(B); B.clientX = r ? f(e.translate(E, 0, 0, 0, 1, n)) : m; B.negative = B[w] < (a[w + "Threshold"] || l || 0); B.category = Q(c && c[B.x], B.x); if (!B.isNull && !1 !== B.visible) { "undefined" !== typeof x && (L = Math.min(L, Math.abs(m - x))); var x = m } B.zone = this.zones.length ? B.getZone() : void 0; !B.graphic && this.group && d && (B.isNew = !0)
- } this.closestPointRangePx = L; y(this, "afterTranslate")
- }; a.prototype.getValidPoints = function (a, b, e) {
- var f = this.chart; return (a || this.points ||
- []).filter(function (a) { return b && !f.isInsidePlot(a.plotX, a.plotY, { inverted: f.inverted }) ? !1 : !1 !== a.visible && (e || !a.isNull) })
- }; a.prototype.getClipBox = function () { var a = this.chart, b = this.xAxis, e = this.yAxis, f = C(a.clipBox); b && b.len !== a.plotSizeX && (f.width = b.len); e && e.len !== a.plotSizeY && (f.height = e.len); return f }; a.prototype.getSharedClipKey = function () { return this.sharedClipKey = (this.options.xAxis || 0) + "," + (this.options.yAxis || 0) }; a.prototype.setClip = function () {
- var a = this.chart, b = this.group, e = this.markerGroup,
- f = a.sharedClips; a = a.renderer; var c = this.getClipBox(), d = this.getSharedClipKey(), g = f[d]; g ? g.animate(c) : f[d] = g = a.clipRect(c); b && b.clip(!1 === this.options.clip ? void 0 : g); e && e.clip()
- }; a.prototype.animate = function (a) {
- var b = this.chart, e = this.group, f = this.markerGroup, c = b.inverted, g = d(this.options.animation), h = [this.getSharedClipKey(), g.duration, g.easing, g.defer].join(), p = b.sharedClips[h], v = b.sharedClips[h + "m"]; if (a && e) g = this.getClipBox(), p ? p.attr("height", g.height) : (g.width = 0, c && (g.x = b.plotHeight), p = b.renderer.clipRect(g),
- b.sharedClips[h] = p, v = b.renderer.clipRect({ x: c ? (b.plotSizeX || 0) + 99 : -99, y: c ? -b.plotLeft : -b.plotTop, width: 99, height: c ? b.chartWidth : b.chartHeight }), b.sharedClips[h + "m"] = v), e.clip(p), f && f.clip(v); else if (p && !p.hasClass("highcharts-animating")) { b = this.getClipBox(); var k = g.step; f && f.element.childNodes.length && (g.step = function (a, b) { k && k.apply(b, arguments); v && v.element && v.attr(b.prop, "width" === b.prop ? a + 99 : a) }); p.addClass("highcharts-animating").animate(b, g) }
- }; a.prototype.afterAnimate = function () {
- var a = this;
- this.setClip(); N(this.chart.sharedClips, function (b, e, f) { b && !a.chart.container.querySelector('[clip-path="url(#'.concat(b.id, ')"]')) && (b.destroy(), delete f[e]) }); this.finishedAnimating = !0; y(this, "afterAnimate")
- }; a.prototype.drawPoints = function () {
- var a = this.points, b = this.chart, e = this.options.marker, f = this[this.specialGroup] || this.markerGroup, c = this.xAxis, d = Q(e.enabled, !c || c.isRadial ? !0 : null, this.closestPointRangePx >= e.enabledThreshold * e.radius), g, h; if (!1 !== e.enabled || this._hasPointMarkers) for (g = 0; g <
- a.length; g++) {
- var p = a[g]; var v = (h = p.graphic) ? "animate" : "attr"; var k = p.marker || {}; var n = !!p.marker; if ((d && "undefined" === typeof k.enabled || k.enabled) && !p.isNull && !1 !== p.visible) {
- var r = Q(k.symbol, this.symbol, "rect"); var y = this.markerAttribs(p, p.selected && "select"); this.enabledDataSorting && (p.startXPos = c.reversed ? -(y.width || 0) : c.width); var u = !1 !== p.isInside; h ? h[u ? "show" : "hide"](u).animate(y) : u && (0 < (y.width || 0) || p.hasImage) && (p.graphic = h = b.renderer.symbol(r, y.x, y.y, y.width, y.height, n ? k : e).add(f), this.enabledDataSorting &&
- b.hasRendered && (h.attr({ x: p.startXPos }), v = "animate")); h && "animate" === v && h[u ? "show" : "hide"](u).animate(y); if (h && !b.styledMode) h[v](this.pointAttribs(p, p.selected && "select")); h && h.addClass(p.getClassName(), !0)
- } else h && (p.graphic = h.destroy())
- }
- }; a.prototype.markerAttribs = function (a, b) {
- var e = this.options, f = e.marker, c = a.marker || {}, d = c.symbol || f.symbol, g = Q(c.radius, f && f.radius); b && (f = f.states[b], b = c.states && c.states[b], g = Q(b && b.radius, f && f.radius, g && g + (f && f.radiusPlus || 0))); a.hasImage = d && 0 === d.indexOf("url");
- a.hasImage && (g = 0); a = v(g) ? { x: e.crisp ? Math.floor(a.plotX - g) : a.plotX - g, y: a.plotY - g } : {}; g && (a.width = a.height = 2 * g); return a
- }; a.prototype.pointAttribs = function (a, b) {
- var e = this.options.marker, f = a && a.options, c = f && f.marker || {}, d = f && f.color, g = a && a.color, h = a && a.zone && a.zone.color, p = this.color; a = Q(c.lineWidth, e.lineWidth); f = 1; p = d || h || g || p; d = c.fillColor || e.fillColor || p; g = c.lineColor || e.lineColor || p; b = b || "normal"; e = e.states[b] || {}; b = c.states && c.states[b] || {}; a = Q(b.lineWidth, e.lineWidth, a + Q(b.lineWidthPlus, e.lineWidthPlus,
- 0)); d = b.fillColor || e.fillColor || d; g = b.lineColor || e.lineColor || g; f = Q(b.opacity, e.opacity, f); return { stroke: g, "stroke-width": a, fill: d, opacity: f }
- }; a.prototype.destroy = function (a) {
- var b = this, e = b.chart, f = /AppleWebKit\/533/.test(E.navigator.userAgent), c = b.data || [], d, g, p, v; y(b, "destroy", { keepEventsForUpdate: a }); this.removeEvents(a); (b.axisTypes || []).forEach(function (a) { (v = b[a]) && v.series && (h(v.series, b), v.isDirty = v.forceRedraw = !0) }); b.legendItem && b.chart.legend.destroyItem(b); for (g = c.length; g--;)(p = c[g]) &&
- p.destroy && p.destroy(); b.clips && b.clips.forEach(function (a) { return a.destroy() }); l.clearTimeout(b.animationTimeout); N(b, function (a, b) { a instanceof m && !a.survive && (d = f && "group" === b ? "hide" : "destroy", a[d]()) }); e.hoverSeries === b && (e.hoverSeries = void 0); h(e.series, b); e.orderSeries(); N(b, function (e, f) { a && "hcEvents" === f || delete b[f] })
- }; a.prototype.applyZones = function () {
- var a = this, b = this.chart, e = b.renderer, f = this.zones, c = this.clips || [], d = this.graph, g = this.area, h = Math.max(b.chartWidth, b.chartHeight), p = this[(this.zoneAxis ||
- "y") + "Axis"], v = b.inverted, k, n, r, y, u, l, t, w, I = !1; if (f.length && (d || g) && p && "undefined" !== typeof p.min) {
- var m = p.reversed; var L = p.horiz; d && !this.showLine && d.hide(); g && g.hide(); var B = p.getExtremes(); f.forEach(function (f, E) {
- k = m ? L ? b.plotWidth : 0 : L ? 0 : p.toPixels(B.min) || 0; k = z(Q(n, k), 0, h); n = z(Math.round(p.toPixels(Q(f.value, B.max), !0) || 0), 0, h); I && (k = n = p.toPixels(B.max)); y = Math.abs(k - n); u = Math.min(k, n); l = Math.max(k, n); p.isXAxis ? (r = { x: v ? l : u, y: 0, width: y, height: h }, L || (r.x = b.plotHeight - r.x)) : (r = {
- x: 0, y: v ? l : u, width: h,
- height: y
- }, L && (r.y = b.plotWidth - r.y)); v && e.isVML && (r = p.isXAxis ? { x: 0, y: m ? u : l, height: r.width, width: b.chartWidth } : { x: r.y - b.plotLeft - b.spacingBox.x, y: 0, width: r.height, height: b.chartHeight }); c[E] ? c[E].animate(r) : c[E] = e.clipRect(r); t = a["zone-area-" + E]; w = a["zone-graph-" + E]; d && w && w.clip(c[E]); g && t && t.clip(c[E]); I = f.value > B.max; a.resetZones && 0 === n && (n = void 0)
- }); this.clips = c
- } else a.visible && (d && d.show(), g && g.show())
- }; a.prototype.invertGroups = function (a) {
- function b () {
- ["group", "markerGroup"].forEach(function (b) {
- e[b] &&
- (f.renderer.isVML && e[b].attr({ width: e.yAxis.len, height: e.xAxis.len }), e[b].width = e.yAxis.len, e[b].height = e.xAxis.len, e[b].invert(e.isRadialSeries ? !1 : a))
- })
- } var e = this, f = e.chart; e.xAxis && (e.eventsToUnbind.push(M(f, "resize", b)), b(), e.invertGroups = b)
- }; a.prototype.plotGroup = function (a, b, e, f, c) {
- var d = this[a], g = !d; e = { visibility: e, zIndex: f || .1 }; "undefined" === typeof this.opacity || this.chart.styledMode || "inactive" === this.state || (e.opacity = this.opacity); g && (this[a] = d = this.chart.renderer.g().add(c)); d.addClass("highcharts-" +
- b + " highcharts-series-" + this.index + " highcharts-" + this.type + "-series " + (u(this.colorIndex) ? "highcharts-color-" + this.colorIndex + " " : "") + (this.options.className || "") + (d.hasClass("highcharts-tracker") ? " highcharts-tracker" : ""), !0); d.attr(e)[g ? "attr" : "animate"](this.getPlotBox()); return d
- }; a.prototype.getPlotBox = function () { var a = this.chart, b = this.xAxis, e = this.yAxis; a.inverted && (b = e, e = this.xAxis); return { translateX: b ? b.left : a.plotLeft, translateY: e ? e.top : a.plotTop, scaleX: 1, scaleY: 1 } }; a.prototype.removeEvents =
- function (a) { a || W(this); this.eventsToUnbind.length && (this.eventsToUnbind.forEach(function (a) { a() }), this.eventsToUnbind.length = 0) }; a.prototype.render = function () {
- var a = this, b = a.chart, e = a.options, f = d(e.animation), c = a.visible ? "inherit" : "hidden", g = e.zIndex, h = a.hasRendered, p = b.seriesGroup, v = b.inverted; b = !a.finishedAnimating && b.renderer.isSVG ? f.duration : 0; y(this, "render"); var k = a.plotGroup("group", "series", c, g, p); a.markerGroup = a.plotGroup("markerGroup", "markers", c, g, p); !1 !== e.clip && a.setClip(); a.animate &&
- b && a.animate(!0); k.inverted = Q(a.invertible, a.isCartesian) ? v : !1; a.drawGraph && (a.drawGraph(), a.applyZones()); a.visible && a.drawPoints(); a.drawDataLabels && a.drawDataLabels(); a.redrawPoints && a.redrawPoints(); a.drawTracker && !1 !== a.options.enableMouseTracking && a.drawTracker(); a.invertGroups(v); a.animate && b && a.animate(); h || (b && f.defer && (b += f.defer), a.animationTimeout = R(function () { a.afterAnimate() }, b || 0)); a.isDirty = !1; a.hasRendered = !0; y(a, "afterRender")
- }; a.prototype.redraw = function () {
- var a = this.chart, b = this.isDirty ||
- this.isDirtyData, e = this.group, f = this.xAxis, c = this.yAxis; e && (a.inverted && e.attr({ width: a.plotWidth, height: a.plotHeight }), e.animate({ translateX: Q(f && f.left, a.plotLeft), translateY: Q(c && c.top, a.plotTop) })); this.translate(); this.render(); b && delete this.kdTree
- }; a.prototype.searchPoint = function (a, b) { var e = this.xAxis, f = this.yAxis, c = this.chart.inverted; return this.searchKDTree({ clientX: c ? e.len - a.chartY + e.pos : a.chartX - e.pos, plotY: c ? f.len - a.chartX + f.pos : a.chartY - f.pos }, b, a) }; a.prototype.buildKDTree = function (a) {
- function b (a,
- f, c) { var d = a && a.length; if (d) { var g = e.kdAxisArray[f % c]; a.sort(function (a, b) { return a[g] - b[g] }); d = Math.floor(d / 2); return { point: a[d], left: b(a.slice(0, d), f + 1, c), right: b(a.slice(d + 1), f + 1, c) } } } this.buildingKdTree = !0; var e = this, f = -1 < e.options.findNearestPointBy.indexOf("y") ? 2 : 1; delete e.kdTree; R(function () { e.kdTree = b(e.getValidPoints(null, !e.directTouch), f, f); e.buildingKdTree = !1 }, e.options.kdNow || a && "touchstart" === a.type ? 0 : 1)
- }; a.prototype.searchKDTree = function (a, b, e) {
- function f (a, b, e, p) {
- var v = b.point, k =
- c.kdAxisArray[e % p], n = v, r = u(a[d]) && u(v[d]) ? Math.pow(a[d] - v[d], 2) : null; var y = u(a[g]) && u(v[g]) ? Math.pow(a[g] - v[g], 2) : null; y = (r || 0) + (y || 0); v.dist = u(y) ? Math.sqrt(y) : Number.MAX_VALUE; v.distX = u(r) ? Math.sqrt(r) : Number.MAX_VALUE; k = a[k] - v[k]; y = 0 > k ? "left" : "right"; r = 0 > k ? "right" : "left"; b[y] && (y = f(a, b[y], e + 1, p), n = y[h] < n[h] ? y : v); b[r] && Math.sqrt(k * k) < n[h] && (a = f(a, b[r], e + 1, p), n = a[h] < n[h] ? a : n); return n
- } var c = this, d = this.kdAxisArray[0], g = this.kdAxisArray[1], h = b ? "distX" : "dist"; b = -1 < c.options.findNearestPointBy.indexOf("y") ?
- 2 : 1; this.kdTree || this.buildingKdTree || this.buildKDTree(e); if (this.kdTree) return f(a, this.kdTree, b, b)
- }; a.prototype.pointPlacementToXValue = function () { var a = this.options, b = a.pointRange, e = this.xAxis; a = a.pointPlacement; "between" === a && (a = e.reversed ? -.5 : .5); return v(a) ? a * (b || e.pointRange) : 0 }; a.prototype.isPointInside = function (a) {
- var b = this.chart, e = this.xAxis, f = this.yAxis; return "undefined" !== typeof a.plotY && "undefined" !== typeof a.plotX && 0 <= a.plotY && a.plotY <= (f ? f.len : b.plotHeight) && 0 <= a.plotX && a.plotX <= (e ?
- e.len : b.plotWidth)
- }; a.prototype.drawTracker = function () {
- var a = this, b = a.options, e = b.trackByArea, f = [].concat(e ? a.areaPath : a.graphPath), c = a.chart, d = c.pointer, g = c.renderer, h = c.options.tooltip.snap, p = a.tracker, v = function (b) { if (c.hoverSeries !== a) a.onMouseOver() }, n = "rgba(192,192,192," + (B ? .0001 : .002) + ")"; p ? p.attr({ d: f }) : a.graph && (a.tracker = g.path(f).attr({ visibility: a.visible ? "inherit" : "hidden", zIndex: 2 }).addClass(e ? "highcharts-tracker-area" : "highcharts-tracker-line").add(a.group), c.styledMode || a.tracker.attr({
- "stroke-linecap": "round",
- "stroke-linejoin": "round", stroke: n, fill: e ? n : "none", "stroke-width": a.graph.strokeWidth() + (e ? 0 : 2 * h)
- }), [a.tracker, a.markerGroup, a.dataLabelsGroup].forEach(function (a) { if (a && (a.addClass("highcharts-tracker").on("mouseover", v).on("mouseout", function (a) { d.onTrackerMouseOut(a) }), b.cursor && !c.styledMode && a.css({ cursor: b.cursor }), k)) a.on("touchstart", v) })); y(this, "afterDrawTracker")
- }; a.prototype.addPoint = function (a, b, e, f, c) {
- var d = this.options, g = this.data, h = this.chart, p = this.xAxis; p = p && p.hasNames && p.names;
- var v = d.data, k = this.xData, n; b = Q(b, !0); var r = { series: this }; this.pointClass.prototype.applyOptions.apply(r, [a]); var u = r.x; var l = k.length; if (this.requireSorting && u < k[l - 1]) for (n = !0; l && k[l - 1] > u;)l--; this.updateParallelArrays(r, "splice", l, 0, 0); this.updateParallelArrays(r, l); p && r.name && (p[u] = r.name); v.splice(l, 0, a); if (n || this.processedData) this.data.splice(l, 0, null), this.processData(); "point" === d.legendType && this.generatePoints(); e && (g[0] && g[0].remove ? g[0].remove(!1) : (g.shift(), this.updateParallelArrays(r,
- "shift"), v.shift())); !1 !== c && y(this, "addPoint", { point: r }); this.isDirtyData = this.isDirty = !0; b && h.redraw(f)
- }; a.prototype.removePoint = function (a, b, e) { var f = this, c = f.data, d = c[a], h = f.points, p = f.chart, v = function () { h && h.length === c.length && h.splice(a, 1); c.splice(a, 1); f.options.data.splice(a, 1); f.updateParallelArrays(d || { series: f }, "splice", a, 1); d && d.destroy(); f.isDirty = !0; f.isDirtyData = !0; b && p.redraw() }; g(e, p); b = Q(b, !0); d ? d.firePointEvent("remove", null, v) : v() }; a.prototype.remove = function (a, b, e, f) {
- function c () {
- d.destroy(f);
- g.isDirtyLegend = g.isDirtyBox = !0; g.linkSeries(); Q(a, !0) && g.redraw(b)
- } var d = this, g = d.chart; !1 !== e ? y(d, "remove", null, c) : c()
- }; a.prototype.update = function (a, b) {
- a = n(a, this.userOptions); y(this, "update", { options: a }); var f = this, c = f.chart, d = f.userOptions, g = f.initialType || f.type, h = c.options.plotOptions, p = F[g].prototype, v = f.finishedAnimating && { animation: !1 }, k = {}, u, l = ["eventOptions", "navigatorSeries", "baseSeries"], t = a.type || d.type || c.options.chart.type, w = !(this.hasDerivedData || t && t !== this.type || "undefined" !==
- typeof a.pointStart || "undefined" !== typeof a.pointInterval || "undefined" !== typeof a.relativeXValue || a.joinBy || a.mapData || f.hasOptionChanged("dataGrouping") || f.hasOptionChanged("pointStart") || f.hasOptionChanged("pointInterval") || f.hasOptionChanged("pointIntervalUnit") || f.hasOptionChanged("keys")); t = t || g; w && (l.push("data", "isDirtyData", "points", "processedData", "processedXData", "processedYData", "xIncrement", "cropped", "_hasPointMarkers", "_hasPointLabels", "clips", "nodes", "layout", "level", "mapMap", "mapData",
- "minY", "maxY", "minX", "maxX"), !1 !== a.visible && l.push("area", "graph"), f.parallelArrays.forEach(function (a) { l.push(a + "Data") }), a.data && (a.dataSorting && e(f.options.dataSorting, a.dataSorting), this.setData(a.data, !1))); a = C(d, v, { index: "undefined" === typeof d.index ? f.index : d.index, pointStart: Q(h && h.series && h.series.pointStart, d.pointStart, f.xData[0]) }, !w && { data: f.options.data }, a); w && a.data && (a.data = f.options.data); l = ["group", "markerGroup", "dataLabelsGroup", "transformGroup"].concat(l); l.forEach(function (a) {
- l[a] =
- f[a]; delete f[a]
- }); h = !1; if (F[t]) { if (h = t !== f.type, f.remove(!1, !1, !1, !0), h) if (Object.setPrototypeOf) Object.setPrototypeOf(f, F[t].prototype); else { v = Object.hasOwnProperty.call(f, "hcEvents") && f.hcEvents; for (u in p) f[u] = void 0; e(f, F[t].prototype); v ? f.hcEvents = v : delete f.hcEvents } } else r(17, !0, c, { missingModuleFor: t }); l.forEach(function (a) { f[a] = l[a] }); f.init(c, a); if (w && this.points) {
- var I = f.options; !1 === I.visible ? (k.graphic = 1, k.dataLabel = 1) : f._hasPointLabels || (a = I.marker, p = I.dataLabels, !a || !1 !== a.enabled &&
- (d.marker && d.marker.symbol) === a.symbol || (k.graphic = 1), p && !1 === p.enabled && (k.dataLabel = 1)); this.points.forEach(function (a) { a && a.series && (a.resolveColor(), Object.keys(k).length && a.destroyElements(k), !1 === I.showInLegend && a.legendItem && c.legend.destroyItem(a)) }, this)
- } f.initialType = g; c.linkSeries(); h && f.linkedSeries.length && (f.isDirtyData = !0); y(this, "afterUpdate"); Q(b, !0) && c.redraw(w ? void 0 : !1)
- }; a.prototype.setName = function (a) {
- this.name = this.options.name = this.userOptions.name = a; this.chart.isDirtyLegend =
- !0
- }; a.prototype.hasOptionChanged = function (a) { var b = this.options[a], e = this.chart.options.plotOptions, f = this.userOptions[a]; return f ? b !== f : b !== Q(e && e[this.type] && e[this.type][a], e && e.series && e.series[a], b) }; a.prototype.onMouseOver = function () { var a = this.chart, b = a.hoverSeries; a.pointer.setHoverChartIndex(); if (b && b !== this) b.onMouseOut(); this.options.events.mouseOver && y(this, "mouseOver"); this.setState("hover"); a.hoverSeries = this }; a.prototype.onMouseOut = function () {
- var a = this.options, b = this.chart, e = b.tooltip,
- f = b.hoverPoint; b.hoverSeries = null; if (f) f.onMouseOut(); this && a.events.mouseOut && y(this, "mouseOut"); !e || this.stickyTracking || e.shared && !this.noSharedTooltip || e.hide(); b.series.forEach(function (a) { a.setState("", !0) })
- }; a.prototype.setState = function (a, b) {
- var e = this, f = e.options, c = e.graph, d = f.inactiveOtherPoints, g = f.states, h = Q(g[a || "normal"] && g[a || "normal"].animation, e.chart.options.chart.animation), p = f.lineWidth, v = 0, k = f.opacity; a = a || ""; if (e.state !== a && ([e.group, e.markerGroup, e.dataLabelsGroup].forEach(function (b) {
- b &&
- (e.state && b.removeClass("highcharts-series-" + e.state), a && b.addClass("highcharts-series-" + a))
- }), e.state = a, !e.chart.styledMode)) { if (g[a] && !1 === g[a].enabled) return; a && (p = g[a].lineWidth || p + (g[a].lineWidthPlus || 0), k = Q(g[a].opacity, k)); if (c && !c.dashstyle) for (f = { "stroke-width": p }, c.animate(f, h); e["zone-graph-" + v];)e["zone-graph-" + v].animate(f, h), v += 1; d || [e.group, e.markerGroup, e.dataLabelsGroup, e.labelBySeries].forEach(function (a) { a && a.animate({ opacity: k }, h) }) } b && d && e.points && e.setAllPointsToState(a || void 0)
- };
- a.prototype.setAllPointsToState = function (a) { this.points.forEach(function (b) { b.setState && b.setState(a) }) }; a.prototype.setVisible = function (a, b) {
- var e = this, f = e.chart, c = e.legendItem, d = f.options.chart.ignoreHiddenSeries, g = e.visible, h = (e.visible = a = e.options.visible = e.userOptions.visible = "undefined" === typeof a ? !g : a) ? "show" : "hide";["group", "dataLabelsGroup", "markerGroup", "tracker", "tt"].forEach(function (a) { if (e[a]) e[a][h]() }); if (f.hoverSeries === e || (f.hoverPoint && f.hoverPoint.series) === e) e.onMouseOut(); c &&
- f.legend.colorizeItem(e, a); e.isDirty = !0; e.options.stacking && f.series.forEach(function (a) { a.options.stacking && a.visible && (a.isDirty = !0) }); e.linkedSeries.forEach(function (b) { b.setVisible(a, !1) }); d && (f.isDirtyBox = !0); y(e, h); !1 !== b && f.redraw()
- }; a.prototype.show = function () { this.setVisible(!0) }; a.prototype.hide = function () { this.setVisible(!1) }; a.prototype.select = function (a) {
- this.selected = a = this.options.selected = "undefined" === typeof a ? !this.selected : a; this.checkbox && (this.checkbox.checked = a); y(this, a ? "select" :
- "unselect")
- }; a.prototype.shouldShowTooltip = function (a, b, e) { void 0 === e && (e = {}); e.series = this; e.visiblePlotOnly = !0; return this.chart.isInsidePlot(a, b, e) }; a.defaultOptions = J; return a
- }(); e(a.prototype, { axisTypes: ["xAxis", "yAxis"], coll: "series", colorCounter: 0, cropShoulder: 1, directTouch: !1, drawLegendSymbol: x.drawLineMarker, isCartesian: !0, kdAxisArray: ["clientX", "plotY"], parallelArrays: ["x", "y"], pointClass: H, requireSorting: !0, sorted: !0 }); D.series = a; ""; ""; return a
- }); O(a, "Extensions/ScrollablePlotArea.js",
- [a["Core/Animation/AnimationUtilities.js"], a["Core/Axis/Axis.js"], a["Core/Chart/Chart.js"], a["Core/Series/Series.js"], a["Core/Renderer/RendererRegistry.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H) {
- var C = a.stop, D = H.addEvent, m = H.createElement, l = H.merge, d = H.pick; D(A, "afterSetChartSize", function (a) {
- var c = this.options.chart.scrollablePlotArea, d = c && c.minWidth; c = c && c.minHeight; if (!this.renderer.forExport) {
- if (d) {
- if (this.scrollablePixelsX = d = Math.max(0, d - this.chartWidth)) {
- this.scrollablePlotBox = this.renderer.scrollablePlotBox =
- l(this.plotBox); this.plotBox.width = this.plotWidth += d; this.inverted ? this.clipBox.height += d : this.clipBox.width += d; var g = { 1: { name: "right", value: d } }
- }
- } else c && (this.scrollablePixelsY = d = Math.max(0, c - this.chartHeight)) && (this.scrollablePlotBox = this.renderer.scrollablePlotBox = l(this.plotBox), this.plotBox.height = this.plotHeight += d, this.inverted ? this.clipBox.width += d : this.clipBox.height += d, g = { 2: { name: "bottom", value: d } }); g && !a.skipAxes && this.axes.forEach(function (a) {
- g[a.side] ? a.getPlotLinePath = function () {
- var c =
- g[a.side].name, d = this[c]; this[c] = d - g[a.side].value; var k = q.prototype.getPlotLinePath.apply(this, arguments); this[c] = d; return k
- } : (a.setAxisSize(), a.setAxisTranslation())
- })
- }
- }); D(A, "render", function () { this.scrollablePixelsX || this.scrollablePixelsY ? (this.setUpScrolling && this.setUpScrolling(), this.applyFixed()) : this.fixedDiv && this.applyFixed() }); A.prototype.setUpScrolling = function () {
- var a = this, c = { WebkitOverflowScrolling: "touch", overflowX: "hidden", overflowY: "hidden" }; this.scrollablePixelsX && (c.overflowX =
- "auto"); this.scrollablePixelsY && (c.overflowY = "auto"); this.scrollingParent = m("div", { className: "highcharts-scrolling-parent" }, { position: "relative" }, this.renderTo); this.scrollingContainer = m("div", { className: "highcharts-scrolling" }, c, this.scrollingParent); D(this.scrollingContainer, "scroll", function () { a.pointer && delete a.pointer.chartPosition }); this.innerContainer = m("div", { className: "highcharts-inner-container" }, null, this.scrollingContainer); this.innerContainer.appendChild(this.container); this.setUpScrolling =
- null
- }; A.prototype.moveFixedElements = function () {
- var a = this.container, c = this.fixedRenderer, d = ".highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-legend-checkbox .highcharts-navigator-series .highcharts-navigator-xaxis .highcharts-navigator-yaxis .highcharts-navigator .highcharts-reset-zoom .highcharts-drillup-button .highcharts-scrollbar .highcharts-subtitle .highcharts-title".split(" "), k; this.scrollablePixelsX && !this.inverted ? k = ".highcharts-yaxis" : this.scrollablePixelsX &&
- this.inverted ? k = ".highcharts-xaxis" : this.scrollablePixelsY && !this.inverted ? k = ".highcharts-xaxis" : this.scrollablePixelsY && this.inverted && (k = ".highcharts-yaxis"); k && d.push("" + k + ":not(.highcharts-radial-axis)", "" + k + "-labels:not(.highcharts-radial-axis-labels)"); d.forEach(function (d) { [].forEach.call(a.querySelectorAll(d), function (a) { (a.namespaceURI === c.SVG_NS ? c.box : c.box.parentNode).appendChild(a); a.style.pointerEvents = "auto" }) })
- }; A.prototype.applyFixed = function () {
- var a = !this.fixedDiv, c = this.options.chart,
- l = c.scrollablePlotArea, k = x.getRendererType(); a ? (this.fixedDiv = m("div", { className: "highcharts-fixed" }, { position: "absolute", overflow: "hidden", pointerEvents: "none", zIndex: (c.style && c.style.zIndex || 0) + 2, top: 0 }, null, !0), this.scrollingContainer && this.scrollingContainer.parentNode.insertBefore(this.fixedDiv, this.scrollingContainer), this.renderTo.style.overflow = "visible", this.fixedRenderer = c = new k(this.fixedDiv, this.chartWidth, this.chartHeight, this.options.chart.style), this.scrollableMask = c.path().attr({
- fill: this.options.chart.backgroundColor ||
- "#fff", "fill-opacity": d(l.opacity, .85), zIndex: -1
- }).addClass("highcharts-scrollable-mask").add(), D(this, "afterShowResetZoom", this.moveFixedElements), D(this, "afterApplyDrilldown", this.moveFixedElements), D(this, "afterLayOutTitles", this.moveFixedElements)) : this.fixedRenderer.setSize(this.chartWidth, this.chartHeight); if (this.scrollableDirty || a) this.scrollableDirty = !1, this.moveFixedElements(); c = this.chartWidth + (this.scrollablePixelsX || 0); k = this.chartHeight + (this.scrollablePixelsY || 0); C(this.container);
- this.container.style.width = c + "px"; this.container.style.height = k + "px"; this.renderer.boxWrapper.attr({ width: c, height: k, viewBox: [0, 0, c, k].join(" ") }); this.chartBackground.attr({ width: c, height: k }); this.scrollingContainer.style.height = this.chartHeight + "px"; a && (l.scrollPositionX && (this.scrollingContainer.scrollLeft = this.scrollablePixelsX * l.scrollPositionX), l.scrollPositionY && (this.scrollingContainer.scrollTop = this.scrollablePixelsY * l.scrollPositionY)); k = this.axisOffset; a = this.plotTop - k[0] - 1; l = this.plotLeft -
- k[3] - 1; c = this.plotTop + this.plotHeight + k[2] + 1; k = this.plotLeft + this.plotWidth + k[1] + 1; var B = this.plotLeft + this.plotWidth - (this.scrollablePixelsX || 0), E = this.plotTop + this.plotHeight - (this.scrollablePixelsY || 0); a = this.scrollablePixelsX ? [["M", 0, a], ["L", this.plotLeft - 1, a], ["L", this.plotLeft - 1, c], ["L", 0, c], ["Z"], ["M", B, a], ["L", this.chartWidth, a], ["L", this.chartWidth, c], ["L", B, c], ["Z"]] : this.scrollablePixelsY ? [["M", l, 0], ["L", l, this.plotTop - 1], ["L", k, this.plotTop - 1], ["L", k, 0], ["Z"], ["M", l, E], ["L", l, this.chartHeight],
- ["L", k, this.chartHeight], ["L", k, E], ["Z"]] : [["M", 0, 0]]; "adjustHeight" !== this.redrawTrigger && this.scrollableMask.attr({ d: a })
- }; D(q, "afterInit", function () { this.chart.scrollableDirty = !0 }); D(G, "show", function () { this.chart.scrollableDirty = !0 }); ""
- }); O(a, "Core/Axis/StackingAxis.js", [a["Core/Animation/AnimationUtilities.js"], a["Core/Axis/Axis.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = a.getDeferredAnimation, x = A.addEvent, H = A.destroyObjectProperties, J = A.fireEvent, D = A.isNumber, m = A.objectEach, l; (function (a) {
- function d () {
- var a =
- this.stacking; if (a) { var c = a.stacks; m(c, function (a, d) { H(a); c[d] = null }); a && a.stackTotalGroup && a.stackTotalGroup.destroy() }
- } function c () { this.stacking || (this.stacking = new k(this)) } var l = []; a.compose = function (a) { -1 === l.indexOf(a) && (l.push(a), x(a, "init", c), x(a, "destroy", d)); return a }; var k = function () {
- function a (a) { this.oldStacks = {}; this.stacks = {}; this.stacksTouched = 0; this.axis = a } a.prototype.buildStacks = function () {
- var a = this.axis, c = a.series, d = a.options.reversedStacks, g = c.length, k; if (!a.isXAxis) {
- this.usePercentage =
- !1; for (k = g; k--;) { var l = c[d ? k : g - k - 1]; l.setStackedPoints(); l.setGroupedPoints() } for (k = 0; k < g; k++)c[k].modifyStacks(); J(a, "afterBuildStacks")
- }
- }; a.prototype.cleanStacks = function () { if (!this.axis.isXAxis) { if (this.oldStacks) var a = this.stacks = this.oldStacks; m(a, function (a) { m(a, function (a) { a.cumulative = a.total }) }) } }; a.prototype.resetStacks = function () {
- var a = this, c = a.stacks; a.axis.isXAxis || m(c, function (c) {
- m(c, function (d, g) {
- D(d.touched) && d.touched < a.stacksTouched ? (d.destroy(), delete c[g]) : (d.total = null, d.cumulative =
- null)
- })
- })
- }; a.prototype.renderStackTotals = function () { var a = this.axis, c = a.chart, d = c.renderer, g = this.stacks; a = C(c, a.options.stackLabels && a.options.stackLabels.animation || !1); var k = this.stackTotalGroup = this.stackTotalGroup || d.g("stack-labels").attr({ zIndex: 6, opacity: 0 }).add(); k.translate(c.plotLeft, c.plotTop); m(g, function (a) { m(a, function (a) { a.render(k) }) }); k.animate({ opacity: 1 }, a) }; return a
- }(); a.Additions = k
- })(l || (l = {})); return l
- }); O(a, "Extensions/Stacking.js", [a["Core/Axis/Axis.js"], a["Core/Chart/Chart.js"],
- a["Core/FormatUtilities.js"], a["Core/Globals.js"], a["Core/Series/Series.js"], a["Core/Axis/StackingAxis.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H, J) {
- var C = A.format, m = J.correctFloat, l = J.defined, d = J.destroyObjectProperties, g = J.isArray, c = J.isNumber, t = J.objectEach, k = J.pick, B = function () {
- function a (a, c, d, g, k) {
- var n = a.chart.inverted; this.axis = a; this.isNegative = d; this.options = c = c || {}; this.x = g; this.total = null; this.points = {}; this.hasValidPoints = !1; this.stack = k; this.rightCliff = this.leftCliff = 0; this.alignOptions =
- { align: c.align || (n ? d ? "left" : "right" : "center"), verticalAlign: c.verticalAlign || (n ? "middle" : d ? "bottom" : "top"), y: c.y, x: c.x }; this.textAlign = c.textAlign || (n ? d ? "right" : "left" : "center")
- } a.prototype.destroy = function () { d(this, this.axis) }; a.prototype.render = function (a) {
- var c = this.axis.chart, d = this.options, g = d.format; g = g ? C(g, this, c) : d.formatter.call(this); this.label ? this.label.attr({ text: g, visibility: "hidden" }) : (this.label = c.renderer.label(g, null, null, d.shape, null, null, d.useHTML, !1, "stack-labels"), g = {
- r: d.borderRadius ||
- 0, text: g, rotation: d.rotation, padding: k(d.padding, 5), visibility: "hidden"
- }, c.styledMode || (g.fill = d.backgroundColor, g.stroke = d.borderColor, g["stroke-width"] = d.borderWidth, this.label.css(d.style)), this.label.attr(g), this.label.added || this.label.add(a)); this.label.labelrank = c.plotSizeY
- }; a.prototype.setOffset = function (a, d, g, t, m) {
- var n = this.axis, f = n.chart; t = n.translate(n.stacking.usePercentage ? 100 : t ? t : this.total, 0, 0, 0, 1); g = n.translate(g ? g : 0); g = l(t) && Math.abs(t - g); a = k(m, f.xAxis[0].translate(this.x)) + a; n =
- l(t) && this.getStackBox(f, this, a, t, d, g, n); d = this.label; g = this.isNegative; a = "justify" === k(this.options.overflow, "justify"); var u = this.textAlign; d && n && (m = d.getBBox(), t = d.padding, u = "left" === u ? f.inverted ? -t : t : "right" === u ? m.width : f.inverted && "center" === u ? m.width / 2 : f.inverted ? g ? m.width + t : -t : m.width / 2, g = f.inverted ? m.height / 2 : g ? -t : m.height, this.alignOptions.x = k(this.options.x, 0), this.alignOptions.y = k(this.options.y, 0), n.x -= u, n.y -= g, d.align(this.alignOptions, null, n), f.isInsidePlot(d.alignAttr.x + u - this.alignOptions.x,
- d.alignAttr.y + g - this.alignOptions.y) ? d.show() : (d.hide(), a = !1), a && x.prototype.justifyDataLabel.call(this.axis, d, this.alignOptions, d.alignAttr, m, n), d.attr({ x: d.alignAttr.x, y: d.alignAttr.y }), k(!a && this.options.crop, !0) && ((f = c(d.x) && c(d.y) && f.isInsidePlot(d.x - t + d.width, d.y) && f.isInsidePlot(d.x + t, d.y)) || d.hide()))
- }; a.prototype.getStackBox = function (a, c, d, g, k, n, f) {
- var l = c.axis.reversed, h = a.inverted, r = f.height + f.pos - (h ? a.plotLeft : a.plotTop); c = c.isNegative && !l || !c.isNegative && l; return {
- x: h ? c ? g - f.right : g - n +
- f.pos - a.plotLeft : d + a.xAxis[0].transB - a.plotLeft, y: h ? f.height - d - k : c ? r - g - n : r - g, width: h ? n : k, height: h ? k : n
- }
- }; return a
- }(); q.prototype.getStacks = function () {
- var a = this, c = a.inverted; a.yAxis.forEach(function (a) { a.stacking && a.stacking.stacks && a.hasVisibleSeries && (a.stacking.oldStacks = a.stacking.stacks) }); a.series.forEach(function (d) {
- var g = d.xAxis && d.xAxis.options || {}; !d.options.stacking || !0 !== d.visible && !1 !== a.options.chart.ignoreHiddenSeries || (d.stackKey = [d.type, k(d.options.stack, ""), c ? g.top : g.left, c ? g.height :
- g.width].join())
- })
- }; H.compose(a); x.prototype.setGroupedPoints = function () { var a = this.yAxis.stacking; this.options.centerInCategory && (this.is("column") || this.is("columnrange")) && !this.options.stacking && 1 < this.chart.series.length ? x.prototype.setStackedPoints.call(this, "group") : a && t(a.stacks, function (c, d) { "group" === d.slice(-5) && (t(c, function (a) { return a.destroy() }), delete a.stacks[d]) }) }; x.prototype.setStackedPoints = function (a) {
- var c = a || this.options.stacking; if (c && (!0 === this.visible || !1 === this.chart.options.chart.ignoreHiddenSeries)) {
- var d =
- this.processedXData, t = this.processedYData, w = [], z = t.length, n = this.options, f = n.threshold, u = k(n.startFromThreshold && f, 0); n = n.stack; a = a ? "" + this.type + ",".concat(c) : this.stackKey; var h = "-" + a, r = this.negStacks, e = this.yAxis, b = e.stacking.stacks, y = e.stacking.oldStacks, I, p; e.stacking.stacksTouched += 1; for (p = 0; p < z; p++) {
- var v = d[p]; var L = t[p]; var E = this.getStackIndicator(E, v, this.index); var q = E.key; var Q = (I = r && L < (u ? 0 : f)) ? h : a; b[Q] || (b[Q] = {}); b[Q][v] || (y[Q] && y[Q][v] ? (b[Q][v] = y[Q][v], b[Q][v].total = null) : b[Q][v] = new B(e,
- e.options.stackLabels, I, v, n)); Q = b[Q][v]; null !== L ? (Q.points[q] = Q.points[this.index] = [k(Q.cumulative, u)], l(Q.cumulative) || (Q.base = q), Q.touched = e.stacking.stacksTouched, 0 < E.index && !1 === this.singleStacks && (Q.points[q][0] = Q.points[this.index + "," + v + ",0"][0])) : Q.points[q] = Q.points[this.index] = null; "percent" === c ? (I = I ? a : h, r && b[I] && b[I][v] ? (I = b[I][v], Q.total = I.total = Math.max(I.total, Q.total) + Math.abs(L) || 0) : Q.total = m(Q.total + (Math.abs(L) || 0))) : "group" === c ? (g(L) && (L = L[0]), null !== L && (Q.total = (Q.total || 0) + 1)) :
- Q.total = m(Q.total + (L || 0)); Q.cumulative = "group" === c ? (Q.total || 1) - 1 : k(Q.cumulative, u) + (L || 0); null !== L && (Q.points[q].push(Q.cumulative), w[p] = Q.cumulative, Q.hasValidPoints = !0)
- } "percent" === c && (e.stacking.usePercentage = !0); "group" !== c && (this.stackedYData = w); e.stacking.oldStacks = {}
- }
- }; x.prototype.modifyStacks = function () {
- var a = this, c = a.stackKey, d = a.yAxis.stacking.stacks, g = a.processedXData, k, l = a.options.stacking; a[l + "Stacker"] && [c, "-" + c].forEach(function (c) {
- for (var f = g.length, n, h; f--;)if (n = g[f], k = a.getStackIndicator(k,
- n, a.index, c), h = (n = d[c] && d[c][n]) && n.points[k.key]) a[l + "Stacker"](h, n, f)
- })
- }; x.prototype.percentStacker = function (a, c, d) { c = c.total ? 100 / c.total : 0; a[0] = m(a[0] * c); a[1] = m(a[1] * c); this.stackedYData[d] = a[1] }; x.prototype.getStackIndicator = function (a, c, d, g) { !l(a) || a.x !== c || g && a.stackKey !== g ? a = { x: c, index: 0, key: g, stackKey: g } : a.index++; a.key = [d, c, a.index].join(); return a }; G.StackItem = B; ""; return G.StackItem
- }); O(a, "Series/Line/LineSeries.js", [a["Core/Series/Series.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]],
- function (a, q, A) {
- var C = this && this.__extends || function () { var a = function (q, m) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, d) { a.__proto__ = d } || function (a, d) { for (var g in d) d.hasOwnProperty(g) && (a[g] = d[g]) }; return a(q, m) }; return function (q, m) { function l () { this.constructor = q } a(q, m); q.prototype = null === m ? Object.create(m) : (l.prototype = m.prototype, new l) } }(), x = A.defined, H = A.merge; A = function (q) {
- function D () {
- var a = null !== q && q.apply(this, arguments) || this; a.data = void 0; a.options = void 0; a.points =
- void 0; return a
- } C(D, q); D.prototype.drawGraph = function () {
- var a = this, l = this.options, d = (this.gappedPath || this.getGraphPath).call(this), g = this.chart.styledMode, c = [["graph", "highcharts-graph"]]; g || c[0].push(l.lineColor || this.color || "#cccccc", l.dashStyle); c = a.getZonesGraphs(c); c.forEach(function (c, k) {
- var t = c[0], m = a[t], F = m ? "animate" : "attr"; m ? (m.endX = a.preventGraphAnimation ? null : d.xMap, m.animate({ d: d })) : d.length && (a[t] = m = a.chart.renderer.path(d).addClass(c[1]).attr({ zIndex: 1 }).add(a.group)); m && !g && (t = {
- stroke: c[2],
- "stroke-width": l.lineWidth, fill: a.fillGraph && a.color || "none"
- }, c[3] ? t.dashstyle = c[3] : "square" !== l.linecap && (t["stroke-linecap"] = t["stroke-linejoin"] = "round"), m[F](t).shadow(2 > k && l.shadow)); m && (m.startX = d.xMap, m.isArea = d.isArea)
- })
- }; D.prototype.getGraphPath = function (a, l, d) {
- var g = this, c = g.options, t = [], k = [], m, E = c.step; a = a || g.points; var F = a.reversed; F && a.reverse(); (E = { right: 1, center: 2 }[E] || E && 3) && F && (E = 4 - E); a = this.getValidPoints(a, !1, !(c.connectNulls && !l && !d)); a.forEach(function (B, F) {
- var w = B.plotX, z = B.plotY,
- n = a[F - 1]; (B.leftCliff || n && n.rightCliff) && !d && (m = !0); B.isNull && !x(l) && 0 < F ? m = !c.connectNulls : B.isNull && !l ? m = !0 : (0 === F || m ? F = [["M", B.plotX, B.plotY]] : g.getPointSpline ? F = [g.getPointSpline(a, B, F)] : E ? (F = 1 === E ? [["L", n.plotX, z]] : 2 === E ? [["L", (n.plotX + w) / 2, n.plotY], ["L", (n.plotX + w) / 2, z]] : [["L", w, n.plotY]], F.push(["L", w, z])) : F = [["L", w, z]], k.push(B.x), E && (k.push(B.x), 2 === E && k.push(B.x)), t.push.apply(t, F), m = !1)
- }); t.xMap = k; return g.graphPath = t
- }; D.prototype.getZonesGraphs = function (a) {
- this.zones.forEach(function (l,
- d) { d = ["zone-graph-" + d, "highcharts-graph highcharts-zone-graph-" + d + " " + (l.className || "")]; this.chart.styledMode || d.push(l.color || this.color, l.dashStyle || this.options.dashStyle); a.push(d) }, this); return a
- }; D.defaultOptions = H(a.defaultOptions, {}); return D
- }(a); q.registerSeriesType("line", A); ""; return A
- }); O(a, "Series/Area/AreaSeries.js", [a["Core/Color/Color.js"], a["Core/Legend/LegendSymbol.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]], function (a, q, A, G) {
- var C = this && this.__extends || function () {
- var a =
- function (d, c) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d]) }; return a(d, c) }; return function (d, c) { function g () { this.constructor = d } a(d, c); d.prototype = null === c ? Object.create(c) : (g.prototype = c.prototype, new g) }
- }(), H = a.parse, J = A.seriesTypes.line; a = G.extend; var D = G.merge, m = G.objectEach, l = G.pick; G = function (a) {
- function d () {
- var c = null !== a && a.apply(this, arguments) || this; c.data = void 0; c.options = void 0; c.points =
- void 0; return c
- } C(d, a); d.prototype.drawGraph = function () {
- this.areaPath = []; a.prototype.drawGraph.apply(this); var c = this, d = this.areaPath, g = this.options, m = [["area", "highcharts-area", this.color, g.fillColor]]; this.zones.forEach(function (a, d) { m.push(["zone-area-" + d, "highcharts-area highcharts-zone-area-" + d + " " + a.className, a.color || c.color, a.fillColor || g.fillColor]) }); m.forEach(function (a) {
- var k = a[0], t = c[k], m = t ? "animate" : "attr", w = {}; t ? (t.endX = c.preventGraphAnimation ? null : d.xMap, t.animate({ d: d })) : (w.zIndex =
- 0, t = c[k] = c.chart.renderer.path(d).addClass(a[1]).add(c.group), t.isArea = !0); c.chart.styledMode || (w.fill = l(a[3], H(a[2]).setOpacity(l(g.fillOpacity, .75)).get())); t[m](w); t.startX = d.xMap; t.shiftUnit = g.step ? 2 : 1
- })
- }; d.prototype.getGraphPath = function (a) {
- var c = J.prototype.getGraphPath, d = this.options, g = d.stacking, m = this.yAxis, F, q = [], C = [], w = this.index, z = m.stacking.stacks[this.stackKey], n = d.threshold, f = Math.round(m.getThreshold(d.threshold)); d = l(d.connectNulls, "percent" === g); var u = function (b, e, c) {
- var d = a[b];
- b = g && z[d.x].points[w]; var h = d[c + "Null"] || 0; c = d[c + "Cliff"] || 0; d = !0; if (c || h) { var k = (h ? b[0] : b[1]) + c; var l = b[0] + c; d = !!h } else !g && a[e] && a[e].isNull && (k = l = n); "undefined" !== typeof k && (C.push({ plotX: r, plotY: null === k ? f : m.getThreshold(k), isNull: d, isCliff: !0 }), q.push({ plotX: r, plotY: null === l ? f : m.getThreshold(l), doCurve: !1 }))
- }; a = a || this.points; g && (a = this.getStackPoints(a)); for (F = 0; F < a.length; F++) {
- g || (a[F].leftCliff = a[F].rightCliff = a[F].leftNull = a[F].rightNull = void 0); var h = a[F].isNull; var r = l(a[F].rectPlotX, a[F].plotX);
- var e = g ? l(a[F].yBottom, f) : f; if (!h || d) d || u(F, F - 1, "left"), h && !g && d || (C.push(a[F]), q.push({ x: F, plotX: r, plotY: e })), d || u(F, F + 1, "right")
- } F = c.call(this, C, !0, !0); q.reversed = !0; h = c.call(this, q, !0, !0); (e = h[0]) && "M" === e[0] && (h[0] = ["L", e[1], e[2]]); h = F.concat(h); h.length && h.push(["Z"]); c = c.call(this, C, !1, d); h.xMap = F.xMap; this.areaPath = h; return c
- }; d.prototype.getStackPoints = function (a) {
- var c = this, d = [], g = [], E = this.xAxis, F = this.yAxis, q = F.stacking.stacks[this.stackKey], C = {}, w = F.series, z = w.length, n = F.options.reversedStacks ?
- 1 : -1, f = w.indexOf(c); a = a || this.points; if (this.options.stacking) {
- for (var u = 0; u < a.length; u++)a[u].leftNull = a[u].rightNull = void 0, C[a[u].x] = a[u]; m(q, function (a, e) { null !== a.total && g.push(e) }); g.sort(function (a, e) { return a - e }); var h = w.map(function (a) { return a.visible }); g.forEach(function (a, e) {
- var b = 0, k, r; if (C[a] && !C[a].isNull) d.push(C[a]), [-1, 1].forEach(function (b) {
- var d = 1 === b ? "rightNull" : "leftNull", p = 0, v = q[g[e + b]]; if (v) for (var l = f; 0 <= l && l < z;) {
- var y = w[l].index; k = v.points[y]; k || (y === c.index ? C[a][d] = !0 : h[l] &&
- (r = q[a].points[y]) && (p -= r[1] - r[0])); l += n
- } C[a][1 === b ? "rightCliff" : "leftCliff"] = p
- }); else { for (var p = f; 0 <= p && p < z;) { if (k = q[a].points[w[p].index]) { b = k[1]; break } p += n } b = l(b, 0); b = F.translate(b, 0, 1, 0, 1); d.push({ isNull: !0, plotX: E.translate(a, 0, 0, 0, 1), x: a, plotY: b, yBottom: b }) }
- })
- } return d
- }; d.defaultOptions = D(J.defaultOptions, { threshold: 0 }); return d
- }(J); a(G.prototype, { singleStacks: !1, drawLegendSymbol: q.drawRectangle }); A.registerSeriesType("area", G); ""; return G
- }); O(a, "Series/Spline/SplineSeries.js", [a["Core/Series/SeriesRegistry.js"],
- a["Core/Utilities.js"]], function (a, q) {
- var C = this && this.__extends || function () { var a = function (q, m) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, d) { a.__proto__ = d } || function (a, d) { for (var g in d) d.hasOwnProperty(g) && (a[g] = d[g]) }; return a(q, m) }; return function (q, m) { function l () { this.constructor = q } a(q, m); q.prototype = null === m ? Object.create(m) : (l.prototype = m.prototype, new l) } }(), G = a.seriesTypes.line, x = q.merge, H = q.pick; q = function (a) {
- function q () {
- var m = null !== a && a.apply(this, arguments) ||
- this; m.data = void 0; m.options = void 0; m.points = void 0; return m
- } C(q, a); q.prototype.getPointSpline = function (a, l, d) {
- var g = l.plotX || 0, c = l.plotY || 0, t = a[d - 1]; d = a[d + 1]; if (t && !t.isNull && !1 !== t.doCurve && !l.isCliff && d && !d.isNull && !1 !== d.doCurve && !l.isCliff) {
- a = t.plotY || 0; var k = d.plotX || 0; d = d.plotY || 0; var m = 0; var q = (1.5 * g + (t.plotX || 0)) / 2.5; var F = (1.5 * c + a) / 2.5; k = (1.5 * g + k) / 2.5; var C = (1.5 * c + d) / 2.5; k !== q && (m = (C - F) * (k - g) / (k - q) + c - C); F += m; C += m; F > a && F > c ? (F = Math.max(a, c), C = 2 * c - F) : F < a && F < c && (F = Math.min(a, c), C = 2 * c - F); C > d &&
- C > c ? (C = Math.max(d, c), F = 2 * c - C) : C < d && C < c && (C = Math.min(d, c), F = 2 * c - C); l.rightContX = k; l.rightContY = C
- } l = ["C", H(t.rightContX, t.plotX, 0), H(t.rightContY, t.plotY, 0), H(q, g, 0), H(F, c, 0), g, c]; t.rightContX = t.rightContY = void 0; return l
- }; q.defaultOptions = x(G.defaultOptions); return q
- }(G); a.registerSeriesType("spline", q); ""; return q
- }); O(a, "Series/AreaSpline/AreaSplineSeries.js", [a["Series/Area/AreaSeries.js"], a["Series/Spline/SplineSeries.js"], a["Core/Legend/LegendSymbol.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]],
- function (a, q, A, G, x) {
- var C = this && this.__extends || function () { var a = function (d, g) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, d) { a.__proto__ = d } || function (a, d) { for (var c in d) d.hasOwnProperty(c) && (a[c] = d[c]) }; return a(d, g) }; return function (d, g) { function c () { this.constructor = d } a(d, g); d.prototype = null === g ? Object.create(g) : (c.prototype = g.prototype, new c) } }(), J = a.prototype, D = x.extend, m = x.merge; x = function (l) {
- function d () {
- var a = null !== l && l.apply(this, arguments) || this; a.data = void 0; a.points =
- void 0; a.options = void 0; return a
- } C(d, l); d.defaultOptions = m(q.defaultOptions, a.defaultOptions); return d
- }(q); D(x.prototype, { getGraphPath: J.getGraphPath, getStackPoints: J.getStackPoints, drawGraph: J.drawGraph, drawLegendSymbol: A.drawRectangle }); G.registerSeriesType("areaspline", x); ""; return x
- }); O(a, "Series/Column/ColumnSeries.js", [a["Core/Animation/AnimationUtilities.js"], a["Core/Color/Color.js"], a["Core/Globals.js"], a["Core/Legend/LegendSymbol.js"], a["Core/Series/Series.js"], a["Core/Series/SeriesRegistry.js"],
- a["Core/Utilities.js"]], function (a, q, A, G, x, H, J) {
- var C = this && this.__extends || function () { var a = function (c, f) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, f) { a.__proto__ = f } || function (a, f) { for (var c in f) f.hasOwnProperty(c) && (a[c] = f[c]) }; return a(c, f) }; return function (c, f) { function d () { this.constructor = c } a(c, f); c.prototype = null === f ? Object.create(f) : (d.prototype = f.prototype, new d) } }(), m = a.animObject, l = q.parse, d = A.hasTouch; a = A.noop; var g = J.clamp, c = J.css, t = J.defined, k = J.extend, B = J.fireEvent,
- E = J.isArray, F = J.isNumber, M = J.merge, K = J.pick, w = J.objectEach; J = function (a) {
- function n () { var f = null !== a && a.apply(this, arguments) || this; f.borderWidth = void 0; f.data = void 0; f.group = void 0; f.options = void 0; f.points = void 0; return f } C(n, a); n.prototype.animate = function (a) {
- var f = this, c = this.yAxis, d = f.options, e = this.chart.inverted, b = {}, n = e ? "translateX" : "translateY"; if (a) b.scaleY = .001, a = g(c.toPixels(d.threshold), c.pos, c.pos + c.len), e ? b.translateX = a - c.len : b.translateY = a, f.clipBox && f.setClip(), f.group.attr(b); else {
- var l =
- Number(f.group.attr(n)); f.group.animate({ scaleY: 1 }, k(m(f.options.animation), { step: function (a, e) { f.group && (b[n] = l + e.pos * (c.pos - l), f.group.attr(b)) } }))
- }
- }; n.prototype.init = function (f, c) { a.prototype.init.apply(this, arguments); var d = this; f = d.chart; f.hasRendered && f.series.forEach(function (a) { a.type === d.type && (a.isDirty = !0) }) }; n.prototype.getColumnMetrics = function () {
- var a = this, c = a.options, d = a.xAxis, g = a.yAxis, e = d.options.reversedStacks; e = d.reversed && !e || !d.reversed && e; var b = {}, k, n = 0; !1 === c.grouping ? n = 1 : a.chart.series.forEach(function (e) {
- var f =
- e.yAxis, c = e.options; if (e.type === a.type && (e.visible || !a.chart.options.chart.ignoreHiddenSeries) && g.len === f.len && g.pos === f.pos) { if (c.stacking && "group" !== c.stacking) { k = e.stackKey; "undefined" === typeof b[k] && (b[k] = n++); var d = b[k] } else !1 !== c.grouping && (d = n++); e.columnIndex = d }
- }); var p = Math.min(Math.abs(d.transA) * (d.ordinal && d.ordinal.slope || c.pointRange || d.closestPointRange || d.tickInterval || 1), d.len), v = p * c.groupPadding, l = (p - 2 * v) / (n || 1); c = Math.min(c.maxPointWidth || d.len, K(c.pointWidth, l * (1 - 2 * c.pointPadding)));
- a.columnMetrics = { width: c, offset: (l - c) / 2 + (v + ((a.columnIndex || 0) + (e ? 1 : 0)) * l - p / 2) * (e ? -1 : 1), paddedWidth: l, columnCount: n }; return a.columnMetrics
- }; n.prototype.crispCol = function (a, c, d, g) { var e = this.chart, b = this.borderWidth, f = -(b % 2 ? .5 : 0); b = b % 2 ? .5 : 1; e.inverted && e.renderer.isVML && (b += 1); this.options.crisp && (d = Math.round(a + d) + f, a = Math.round(a) + f, d -= a); g = Math.round(c + g) + b; f = .5 >= Math.abs(c) && .5 < g; c = Math.round(c) + b; g -= c; f && g && (--c, g += 1); return { x: a, y: c, width: d, height: g } }; n.prototype.adjustForMissingColumns = function (a,
- c, d, g) { var e = this, b = this.options.stacking; if (!d.isNull && 1 < g.columnCount) { var f = this.yAxis.options.reversedStacks, h = 0, p = f ? 0 : -g.columnCount; w(this.yAxis.stacking && this.yAxis.stacking.stacks, function (a) { if ("number" === typeof d.x && (a = a[d.x.toString()])) { var c = a.points[e.index], g = a.total; b ? (c && (h = p), a.hasValidPoints && (f ? p++ : p--)) : E(c) && (h = c[1], p = g || 0) } }); a = (d.plotX || 0) + ((p - 1) * g.paddedWidth + c) / 2 - c - h * g.paddedWidth } return a }; n.prototype.translate = function () {
- var a = this, c = a.chart, d = a.options, k = a.dense = 2 > a.closestPointRange *
- a.xAxis.transA; k = a.borderWidth = K(d.borderWidth, k ? 0 : 1); var e = a.xAxis, b = a.yAxis, n = d.threshold, l = a.translatedThreshold = b.getThreshold(n), p = K(d.minPointLength, 5), v = a.getColumnMetrics(), m = v.width, w = a.pointXOffset = v.offset, z = a.dataMin, B = a.dataMax, q = a.barW = Math.max(m, 1 + 2 * k); c.inverted && (l -= .5); d.pointPadding && (q = Math.ceil(q)); x.prototype.translate.apply(a); a.points.forEach(function (f) {
- var h = K(f.yBottom, l), k = 999 + Math.abs(h), r = f.plotX || 0; k = g(f.plotY, -k, b.len + k); var y = Math.min(k, h), u = Math.max(k, h) - y, I = m, L =
- r + w, E = q; p && Math.abs(u) < p && (u = p, r = !b.reversed && !f.negative || b.reversed && f.negative, F(n) && F(B) && f.y === n && B <= n && (b.min || 0) < n && (z !== B || (b.max || 0) <= n) && (r = !r), y = Math.abs(y - l) > p ? h - p : l - (r ? p : 0)); t(f.options.pointWidth) && (I = E = Math.ceil(f.options.pointWidth), L -= Math.round((I - m) / 2)); d.centerInCategory && (L = a.adjustForMissingColumns(L, I, f, v)); f.barX = L; f.pointWidth = I; f.tooltipPos = c.inverted ? [g(b.len + b.pos - c.plotLeft - k, b.pos - c.plotLeft, b.len + b.pos - c.plotLeft), e.len + e.pos - c.plotTop - L - E / 2, u] : [e.left - c.plotLeft + L +
- E / 2, g(k + b.pos - c.plotTop, b.pos - c.plotTop, b.len + b.pos - c.plotTop), u]; f.shapeType = a.pointClass.prototype.shapeType || "rect"; f.shapeArgs = a.crispCol.apply(a, f.isNull ? [L, l, E, 0] : [L, y, E, u])
- })
- }; n.prototype.drawGraph = function () { this.group[this.dense ? "addClass" : "removeClass"]("highcharts-dense-data") }; n.prototype.pointAttribs = function (a, c) {
- var f = this.options, d = this.pointAttrToOptions || {}, e = d.stroke || "borderColor", b = d["stroke-width"] || "borderWidth", g = a && a.color || this.color, k = a && a[e] || f[e] || g; d = a && a.options.dashStyle ||
- f.dashStyle; var p = a && a[b] || f[b] || this[b] || 0, v = K(a && a.opacity, f.opacity, 1); if (a && this.zones.length) { var n = a.getZone(); g = a.options.color || n && (n.color || a.nonZonedColor) || this.color; n && (k = n.borderColor || k, d = n.dashStyle || d, p = n.borderWidth || p) } c && a && (a = M(f.states[c], a.options.states && a.options.states[c] || {}), c = a.brightness, g = a.color || "undefined" !== typeof c && l(g).brighten(a.brightness).get() || g, k = a[e] || k, p = a[b] || p, d = a.dashStyle || d, v = K(a.opacity, v)); e = { fill: g, stroke: k, "stroke-width": p, opacity: v }; d && (e.dashstyle =
- d); return e
- }; n.prototype.drawPoints = function () {
- var a = this, c = this.chart, d = a.options, g = c.renderer, e = d.animationLimit || 250, b; a.points.forEach(function (f) {
- var h = f.graphic, p = !!h, k = h && c.pointCount < e ? "animate" : "attr"; if (F(f.plotY) && null !== f.y) {
- b = f.shapeArgs; h && f.hasNewShapeType() && (h = h.destroy()); a.enabledDataSorting && (f.startXPos = a.xAxis.reversed ? -(b ? b.width || 0 : 0) : a.xAxis.width); h || (f.graphic = h = g[f.shapeType](b).add(f.group || a.group)) && a.enabledDataSorting && c.hasRendered && c.pointCount < e && (h.attr({ x: f.startXPos }),
- p = !0, k = "animate"); if (h && p) h[k](M(b)); if (d.borderRadius) h[k]({ r: d.borderRadius }); c.styledMode || h[k](a.pointAttribs(f, f.selected && "select")).shadow(!1 !== f.allowShadow && d.shadow, null, d.stacking && !d.borderRadius); h && (h.addClass(f.getClassName(), !0), h.attr({ visibility: f.visible ? "inherit" : "hidden" }))
- } else h && (f.graphic = h.destroy())
- })
- }; n.prototype.drawTracker = function () {
- var a = this, g = a.chart, h = g.pointer, k = function (a) { var b = h.getPointFromEvent(a); "undefined" !== typeof b && (h.isDirectTouch = !0, b.onMouseOver(a)) },
- e; a.points.forEach(function (a) { e = E(a.dataLabels) ? a.dataLabels : a.dataLabel ? [a.dataLabel] : []; a.graphic && (a.graphic.element.point = a); e.forEach(function (b) { b.div ? b.div.point = a : b.element.point = a }) }); a._hasTracking || (a.trackerGroups.forEach(function (b) { if (a[b]) { a[b].addClass("highcharts-tracker").on("mouseover", k).on("mouseout", function (a) { h.onTrackerMouseOut(a) }); if (d) a[b].on("touchstart", k); !g.styledMode && a.options.cursor && a[b].css(c).css({ cursor: a.options.cursor }) } }), a._hasTracking = !0); B(this, "afterDrawTracker")
- };
- n.prototype.remove = function () { var a = this, c = a.chart; c.hasRendered && c.series.forEach(function (f) { f.type === a.type && (f.isDirty = !0) }); x.prototype.remove.apply(a, arguments) }; n.defaultOptions = M(x.defaultOptions, {
- borderRadius: 0, centerInCategory: !1, groupPadding: .2, marker: null, pointPadding: .1, minPointLength: 0, cropThreshold: 50, pointRange: null, states: { hover: { halo: !1, brightness: .1 }, select: { color: "#cccccc", borderColor: "#000000" } }, dataLabels: { align: void 0, verticalAlign: void 0, y: void 0 }, startFromThreshold: !0, stickyTracking: !1,
- tooltip: { distance: 6 }, threshold: 0, borderColor: "#ffffff"
- }); return n
- }(x); k(J.prototype, { cropShoulder: 0, directTouch: !0, drawLegendSymbol: G.drawRectangle, getSymbol: a, negStacks: !0, trackerGroups: ["group", "dataLabelsGroup"] }); H.registerSeriesType("column", J); ""; ""; return J
- }); O(a, "Core/Series/DataLabel.js", [a["Core/Animation/AnimationUtilities.js"], a["Core/FormatUtilities.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = a.getDeferredAnimation, x = q.format, H = A.defined, J = A.extend, D = A.fireEvent, m = A.isArray, l =
- A.merge, d = A.objectEach, g = A.pick, c = A.splat, t; (function (a) {
- function k (a, f, c, d, k) {
- var e = this, b = this.chart, h = this.isCartesian && b.inverted, n = this.enabledDataSorting, p = g(a.dlBox && a.dlBox.centerX, a.plotX), v = a.plotY, l = c.rotation, r = c.align, t = H(p) && H(v) && b.isInsidePlot(p, Math.round(v), { inverted: h, paneCoordinates: !0, series: e }), u = function (b) { n && e.xAxis && !m && e.setDataLabelStartPos(a, f, k, t, b) }, m = "justify" === g(c.overflow, n ? "none" : "justify"), w = this.visible && !1 !== a.visible && (a.series.forceDL || n && !m || t || g(c.inside,
- !!this.options.stacking) && d && b.isInsidePlot(p, h ? d.x + 1 : d.y + d.height - 1, { inverted: h, paneCoordinates: !0, series: e })); if (w && H(p) && H(v)) {
- l && f.attr({ align: r }); r = f.getBBox(!0); var z = [0, 0]; var B = b.renderer.fontMetrics(b.styledMode ? void 0 : c.style.fontSize, f).b; d = J({ x: h ? this.yAxis.len - v : p, y: Math.round(h ? this.xAxis.len - p : v), width: 0, height: 0 }, d); J(c, { width: r.width, height: r.height }); l ? (m = !1, z = b.renderer.rotCorr(B, l), p = { x: d.x + (c.x || 0) + d.width / 2 + z.x, y: d.y + (c.y || 0) + { top: 0, middle: .5, bottom: 1 }[c.verticalAlign] * d.height },
- z = [r.x - Number(f.attr("x")), r.y - Number(f.attr("y"))], u(p), f[k ? "attr" : "animate"](p)) : (u(d), f.align(c, void 0, d), p = f.alignAttr); m && 0 <= d.height ? this.justifyDataLabel(f, c, p, r, d, k) : g(c.crop, !0) && (d = p.x, u = p.y, d += z[0], u += z[1], w = b.isInsidePlot(d, u, { paneCoordinates: !0, series: e }) && b.isInsidePlot(d + r.width, u + r.height, { paneCoordinates: !0, series: e })); if (c.shape && !l) f[k ? "attr" : "animate"]({ anchorX: h ? b.plotWidth - a.plotY : a.plotX, anchorY: h ? b.plotHeight - a.plotX : a.plotY })
- } k && n && (f.placed = !1); w || n && !m ? f.show() : (f.hide(),
- f.placed = !1)
- } function t (a, f) { var c = f.filter; return c ? (f = c.operator, a = a[c.property], c = c.value, ">" === f && a > c || "<" === f && a < c || ">=" === f && a >= c || "<=" === f && a <= c || "==" === f && a == c || "===" === f && a === c ? !0 : !1) : !0 } function q () {
- var a = this, f = a.chart, k = a.options, h = a.points, l = a.hasRendered || 0, e = f.renderer, b = k.dataLabels, y, w = b.animation; w = b.defer ? C(f, w, a) : { defer: 0, duration: 0 }; b = K(K(f.options.plotOptions && f.options.plotOptions.series && f.options.plotOptions.series.dataLabels, f.options.plotOptions && f.options.plotOptions[a.type] &&
- f.options.plotOptions[a.type].dataLabels), b); D(this, "drawDataLabels"); if (m(b) || b.enabled || a._hasPointLabels) {
- var p = a.plotGroup("dataLabelsGroup", "data-labels", l ? "inherit" : "hidden", b.zIndex || 6); p.attr({ opacity: +l }); !l && (l = a.dataLabelsGroup) && (a.visible && p.show(), l[k.animation ? "animate" : "attr"]({ opacity: 1 }, w)); h.forEach(function (h) {
- y = c(K(b, h.dlOptions || h.options && h.options.dataLabels)); y.forEach(function (b, c) {
- var v = b.enabled && (!h.isNull || h.dataLabelOnNull) && t(h, b), n = h.connectors ? h.connectors[c] : h.connector,
- l = h.dataLabels ? h.dataLabels[c] : h.dataLabel, r = !l, y = g(b.distance, h.labelDistance); if (v) {
- var m = h.getLabelConfig(); var u = g(b[h.formatPrefix + "Format"], b.format); m = H(u) ? x(u, m, f) : (b[h.formatPrefix + "Formatter"] || b.formatter).call(m, b); u = b.style; var w = b.rotation; f.styledMode || (u.color = g(b.color, u.color, a.color, "#000000"), "contrast" === u.color ? (h.contrastColor = e.getContrast(h.color || a.color), u.color = !H(y) && b.inside || 0 > y || k.stacking ? h.contrastColor : "#000000") : delete h.contrastColor, k.cursor && (u.cursor = k.cursor));
- var I = { r: b.borderRadius || 0, rotation: w, padding: b.padding, zIndex: 1 }; f.styledMode || (I.fill = b.backgroundColor, I.stroke = b.borderColor, I["stroke-width"] = b.borderWidth); d(I, function (a, b) { "undefined" === typeof a && delete I[b] })
- } !l || v && H(m) && !!l.div === !!b.useHTML && (l.rotation && b.rotation || l.rotation === b.rotation) || (r = !0, h.dataLabel = l = h.dataLabel && h.dataLabel.destroy(), h.dataLabels && (1 === h.dataLabels.length ? delete h.dataLabels : delete h.dataLabels[c]), c || delete h.dataLabel, n && (h.connector = h.connector.destroy(),
- h.connectors && (1 === h.connectors.length ? delete h.connectors : delete h.connectors[c]))); v && H(m) ? (l ? I.text = m : (h.dataLabels = h.dataLabels || [], l = h.dataLabels[c] = w ? e.text(m, 0, 0, b.useHTML).addClass("highcharts-data-label") : e.label(m, 0, 0, b.shape, null, null, b.useHTML, null, "data-label"), c || (h.dataLabel = l), l.addClass(" highcharts-data-label-color-" + h.colorIndex + " " + (b.className || "") + (b.useHTML ? " highcharts-tracker" : ""))), l.options = b, l.attr(I), f.styledMode || l.css(u).shadow(b.shadow), l.added || l.add(p), b.textPath &&
- !b.useHTML && (l.setTextPath(h.getDataLabelPath && h.getDataLabelPath(l) || h.graphic, b.textPath), h.dataLabelPath && !b.textPath.enabled && (h.dataLabelPath = h.dataLabelPath.destroy())), a.alignDataLabel(h, l, b, null, r)) : l && l.hide()
- })
- })
- } D(this, "afterDrawDataLabels")
- } function A (a, c, d, g, k, e) {
- var b = this.chart, f = c.align, h = c.verticalAlign, p = a.box ? 0 : a.padding || 0, v = c.x; v = void 0 === v ? 0 : v; var n = c.y; n = void 0 === n ? 0 : n; var l = (d.x || 0) + p; if (0 > l) { "right" === f && 0 <= v ? (c.align = "left", c.inside = !0) : v -= l; var r = !0 } l = (d.x || 0) + g.width - p;
- l > b.plotWidth && ("left" === f && 0 >= v ? (c.align = "right", c.inside = !0) : v += b.plotWidth - l, r = !0); l = d.y + p; 0 > l && ("bottom" === h && 0 <= n ? (c.verticalAlign = "top", c.inside = !0) : n -= l, r = !0); l = (d.y || 0) + g.height - p; l > b.plotHeight && ("top" === h && 0 >= n ? (c.verticalAlign = "bottom", c.inside = !0) : n += b.plotHeight - l, r = !0); r && (c.x = v, c.y = n, a.placed = !e, a.align(c, void 0, k)); return r
- } function K (a, c) {
- var f = [], d; if (m(a) && !m(c)) f = a.map(function (a) { return l(a, c) }); else if (m(c) && !m(a)) f = c.map(function (c) { return l(a, c) }); else if (m(a) || m(c)) for (d =
- Math.max(a.length, c.length); d--;)f[d] = l(a[d], c[d]); else f = l(a, c); return f
- } function w (a, c, d, g, k) { var e = this.chart, b = e.inverted, f = this.xAxis, h = f.reversed, p = b ? c.height / 2 : c.width / 2; a = (a = a.pointWidth) ? a / 2 : 0; c.startXPos = b ? k.x : h ? -p - a : f.width - p + a; c.startYPos = b ? h ? this.yAxis.height - p + a : -p - a : k.y; g ? "hidden" === c.visibility && (c.show(), c.attr({ opacity: 0 }).animate({ opacity: 1 })) : c.attr({ opacity: 1 }).animate({ opacity: 0 }, void 0, c.hide); e.hasRendered && (d && c.attr({ x: c.startXPos, y: c.startYPos }), c.placed = !0) } var z = []; a.compose =
- function (a) { if (-1 === z.indexOf(a)) { var c = a.prototype; z.push(a); c.alignDataLabel = k; c.drawDataLabels = q; c.justifyDataLabel = A; c.setDataLabelStartPos = w } }
- })(t || (t = {})); ""; return t
- }); O(a, "Series/Column/ColumnDataLabel.js", [a["Core/Series/DataLabel.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = q.series, x = A.merge, H = A.pick, J; (function (q) {
- function m (a, g, c, l, k) {
- var d = this.chart.inverted, t = a.series, m = (t.xAxis ? t.xAxis.len : this.chart.plotSizeX) || 0; t = (t.yAxis ? t.yAxis.len : this.chart.plotSizeY) ||
- 0; var q = a.dlBox || a.shapeArgs, K = H(a.below, a.plotY > H(this.translatedThreshold, t)), w = H(c.inside, !!this.options.stacking); q && (l = x(q), 0 > l.y && (l.height += l.y, l.y = 0), q = l.y + l.height - t, 0 < q && q < l.height && (l.height -= q), d && (l = { x: t - l.y - l.height, y: m - l.x - l.width, width: l.height, height: l.width }), w || (d ? (l.x += K ? 0 : l.width, l.width = 0) : (l.y += K ? l.height : 0, l.height = 0))); c.align = H(c.align, !d || w ? "center" : K ? "right" : "left"); c.verticalAlign = H(c.verticalAlign, d || w ? "middle" : K ? "top" : "bottom"); C.prototype.alignDataLabel.call(this, a,
- g, c, l, k); c.inside && a.contrastColor && g.css({ color: a.contrastColor })
- } var l = []; q.compose = function (d) { a.compose(C); -1 === l.indexOf(d) && (l.push(d), d.prototype.alignDataLabel = m) }
- })(J || (J = {})); return J
- }); O(a, "Series/Bar/BarSeries.js", [a["Series/Column/ColumnSeries.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = this && this.__extends || function () {
- var a = function (q, m) {
- a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, d) { a.__proto__ = d } || function (a, d) {
- for (var g in d) d.hasOwnProperty(g) &&
- (a[g] = d[g])
- }; return a(q, m)
- }; return function (q, m) { function l () { this.constructor = q } a(q, m); q.prototype = null === m ? Object.create(m) : (l.prototype = m.prototype, new l) }
- }(), x = A.extend, H = A.merge; A = function (q) { function x () { var a = null !== q && q.apply(this, arguments) || this; a.data = void 0; a.options = void 0; a.points = void 0; return a } C(x, q); x.defaultOptions = H(a.defaultOptions, {}); return x }(a); x(A.prototype, { inverted: !0 }); q.registerSeriesType("bar", A); ""; return A
- }); O(a, "Series/Scatter/ScatterSeries.js", [a["Series/Column/ColumnSeries.js"],
- a["Series/Line/LineSeries.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]], function (a, q, A, G) {
- var C = this && this.__extends || function () { var a = function (l, d) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d]) }; return a(l, d) }; return function (l, d) { function g () { this.constructor = l } a(l, d); l.prototype = null === d ? Object.create(d) : (g.prototype = d.prototype, new g) } }(), H = G.addEvent, J = G.extend, D = G.merge; G =
- function (a) {
- function l () { var d = null !== a && a.apply(this, arguments) || this; d.data = void 0; d.options = void 0; d.points = void 0; return d } C(l, a); l.prototype.applyJitter = function () {
- var a = this, g = this.options.jitter, c = this.points.length; g && this.points.forEach(function (d, k) {
- ["x", "y"].forEach(function (l, t) {
- var m = "plot" + l.toUpperCase(); if (g[l] && !d.isNull) {
- var B = a[l + "Axis"]; var q = g[l] * B.transA; if (B && !B.isLog) {
- var w = Math.max(0, d[m] - q); B = Math.min(B.len, d[m] + q); t = 1E4 * Math.sin(k + t * c); d[m] = w + (B - w) * (t - Math.floor(t)); "x" ===
- l && (d.clientX = d.plotX)
- }
- }
- })
- })
- }; l.prototype.drawGraph = function () { this.options.lineWidth ? a.prototype.drawGraph.call(this) : this.graph && (this.graph = this.graph.destroy()) }; l.defaultOptions = D(q.defaultOptions, { lineWidth: 0, findNearestPointBy: "xy", jitter: { x: 0, y: 0 }, marker: { enabled: !0 }, tooltip: { headerFormat: '<span style="color:{point.color}">\u25cf</span> <span style="font-size: 10px"> {series.name}</span><br/>', pointFormat: "x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>" } }); return l
- }(q); J(G.prototype, {
- drawTracker: a.prototype.drawTracker,
- sorted: !1, requireSorting: !1, noSharedTooltip: !0, trackerGroups: ["group", "markerGroup", "dataLabelsGroup"], takeOrdinalPosition: !1
- }); H(G, "afterTranslate", function () { this.applyJitter() }); A.registerSeriesType("scatter", G); ""; return G
- }); O(a, "Series/CenteredUtilities.js", [a["Core/Globals.js"], a["Core/Series/Series.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = a.deg2rad, x = A.fireEvent, H = A.isNumber, J = A.pick, D = A.relativeLength, m; (function (a) {
- a.getCenter = function () {
- var a = this.options, g = this.chart, c = 2 * (a.slicedOffset ||
- 0), l = g.plotWidth - 2 * c, k = g.plotHeight - 2 * c, m = a.center, C = Math.min(l, k), F = a.thickness, A = a.size, K = a.innerSize || 0; "string" === typeof A && (A = parseFloat(A)); "string" === typeof K && (K = parseFloat(K)); a = [J(m[0], "50%"), J(m[1], "50%"), J(A && 0 > A ? void 0 : a.size, "100%"), J(K && 0 > K ? void 0 : a.innerSize || 0, "0%")]; !g.angular || this instanceof q || (a[3] = 0); for (m = 0; 4 > m; ++m)A = a[m], g = 2 > m || 2 === m && /%$/.test(A), a[m] = D(A, [l, k, C, a[2]][m]) + (g ? c : 0); a[3] > a[2] && (a[3] = a[2]); H(F) && 2 * F < a[2] && 0 < F && (a[3] = a[2] - 2 * F); x(this, "afterGetCenter", { positions: a });
- return a
- }; a.getStartAndEndRadians = function (a, g) { a = H(a) ? a : 0; g = H(g) && g > a && 360 > g - a ? g : a + 360; return { start: C * (a + -90), end: C * (g + -90) } }
- })(m || (m = {})); ""; return m
- }); O(a, "Series/Pie/PiePoint.js", [a["Core/Animation/AnimationUtilities.js"], a["Core/Series/Point.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = this && this.__extends || function () {
- var a = function (d, c) {
- a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d]) };
- return a(d, c)
- }; return function (d, c) { function g () { this.constructor = d } a(d, c); d.prototype = null === c ? Object.create(c) : (g.prototype = c.prototype, new g) }
- }(), x = a.setAnimation, H = A.addEvent, J = A.defined; a = A.extend; var D = A.isNumber, m = A.pick, l = A.relativeLength; q = function (a) {
- function d () { var c = null !== a && a.apply(this, arguments) || this; c.labelDistance = void 0; c.options = void 0; c.series = void 0; return c } C(d, a); d.prototype.getConnectorPath = function () {
- var a = this.labelPosition, d = this.series.options.dataLabels, g = this.connectorShapes,
- l = d.connectorShape; g[l] && (l = g[l]); return l.call(this, { x: a.final.x, y: a.final.y, alignment: a.alignment }, a.connectorPosition, d)
- }; d.prototype.getTranslate = function () { return this.sliced ? this.slicedTranslation : { translateX: 0, translateY: 0 } }; d.prototype.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: c.r - 1, start: c.start, end: c.end }) }; d.prototype.init = function () {
- var c = this; a.prototype.init.apply(this, arguments);
- this.name = m(this.name, "Slice"); var d = function (a) { c.slice("select" === a.type) }; H(this, "select", d); H(this, "unselect", d); return this
- }; d.prototype.isValid = function () { return D(this.y) && 0 <= this.y }; d.prototype.setVisible = function (a, d) {
- var c = this, g = this.series, l = g.chart, t = g.options.ignoreHiddenPoint; d = m(d, t); a !== this.visible && (this.visible = this.options.visible = a = "undefined" === typeof a ? !this.visible : a, g.options.data[g.data.indexOf(this)] = this.options, ["graphic", "dataLabel", "connector", "shadowGroup"].forEach(function (d) {
- if (c[d]) c[d][a ?
- "show" : "hide"](a)
- }), this.legendItem && l.legend.colorizeItem(this, a), a || "hover" !== this.state || this.setState(""), t && (g.isDirty = !0), d && l.redraw())
- }; d.prototype.slice = function (a, d, g) { var c = this.series; x(g, c.chart); m(d, !0); this.sliced = this.options.sliced = J(a) ? a : !this.sliced; c.options.data[c.data.indexOf(this)] = this.options; this.graphic && this.graphic.animate(this.getTranslate()); this.shadowGroup && this.shadowGroup.animate(this.getTranslate()) }; return d
- }(q); a(q.prototype, {
- connectorShapes: {
- fixedOffset: function (a,
- g, c) { var d = g.breakAt; g = g.touchingSliceAt; return [["M", a.x, a.y], c.softConnector ? ["C", a.x + ("left" === a.alignment ? -5 : 5), a.y, 2 * d.x - g.x, 2 * d.y - g.y, d.x, d.y] : ["L", d.x, d.y], ["L", g.x, g.y]] }, straight: function (a, g) { g = g.touchingSliceAt; return [["M", a.x, a.y], ["L", g.x, g.y]] }, crookedLine: function (a, g, c) {
- g = g.touchingSliceAt; var d = this.series, k = d.center[0], m = d.chart.plotWidth, q = d.chart.plotLeft; d = a.alignment; var F = this.shapeArgs.r; c = l(c.crookDistance, 1); m = "left" === d ? k + F + (m + q - k - F) * (1 - c) : q + (k - F) * c; c = ["L", m, a.y]; k = !0; if ("left" ===
- d ? m > a.x || m < g.x : m < a.x || m > g.x) k = !1; a = [["M", a.x, a.y]]; k && a.push(c); a.push(["L", g.x, g.y]); return a
- }
- }
- }); return q
- }); O(a, "Series/Pie/PieSeries.js", [a["Series/CenteredUtilities.js"], a["Series/Column/ColumnSeries.js"], a["Core/Globals.js"], a["Core/Legend/LegendSymbol.js"], a["Series/Pie/PiePoint.js"], a["Core/Series/Series.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Renderer/SVG/Symbols.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H, J, D, m) {
- var l = this && this.__extends || function () {
- var a = function (c, d) {
- a = Object.setPrototypeOf ||
- { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d]) }; return a(c, d)
- }; return function (c, d) { function g () { this.constructor = c } a(c, d); c.prototype = null === d ? Object.create(d) : (g.prototype = d.prototype, new g) }
- }(), d = a.getStartAndEndRadians; A = A.noop; var g = m.clamp, c = m.extend, t = m.fireEvent, k = m.merge, B = m.pick, C = m.relativeLength; m = function (a) {
- function c () {
- var c = null !== a && a.apply(this, arguments) || this; c.center = void 0; c.data = void 0; c.maxLabelDistance =
- void 0; c.options = void 0; c.points = void 0; return c
- } l(c, a); c.prototype.animate = function (a) { var c = this, d = c.points, g = c.startAngleRad; a || d.forEach(function (a) { var f = a.graphic, d = a.shapeArgs; f && d && (f.attr({ r: B(a.startR, c.center && c.center[3] / 2), start: g, end: g }), f.animate({ r: d.r, start: d.start, end: d.end }, c.options.animation)) }) }; c.prototype.drawEmpty = function () {
- var a = this.startAngleRad, c = this.endAngleRad, d = this.options; if (0 === this.total && this.center) {
- var g = this.center[0]; var f = this.center[1]; this.graph || (this.graph =
- this.chart.renderer.arc(g, f, this.center[1] / 2, 0, a, c).addClass("highcharts-empty-series").add(this.group)); this.graph.attr({ d: D.arc(g, f, this.center[2] / 2, 0, { start: a, end: c, innerR: this.center[3] / 2 }) }); this.chart.styledMode || this.graph.attr({ "stroke-width": d.borderWidth, fill: d.fillColor || "none", stroke: d.color || "#cccccc" })
- } else this.graph && (this.graph = this.graph.destroy())
- }; c.prototype.drawPoints = function () {
- var a = this.chart.renderer; this.points.forEach(function (c) {
- c.graphic && c.hasNewShapeType() && (c.graphic =
- c.graphic.destroy()); c.graphic || (c.graphic = a[c.shapeType](c.shapeArgs).add(c.series.group), c.delayedRendering = !0)
- })
- }; c.prototype.generatePoints = function () { a.prototype.generatePoints.call(this); this.updateTotals() }; c.prototype.getX = function (a, c, d) { var k = this.center, f = this.radii ? this.radii[d.index] || 0 : k[2] / 2; a = Math.asin(g((a - k[1]) / (f + d.labelDistance), -1, 1)); return k[0] + (c ? -1 : 1) * Math.cos(a) * (f + d.labelDistance) + (0 < d.labelDistance ? (c ? -1 : 1) * this.options.dataLabels.padding : 0) }; c.prototype.hasData = function () { return !!this.processedXData.length };
- c.prototype.redrawPoints = function () {
- var a = this, c = a.chart, d = c.renderer, g = a.options.shadow, f, l, h, r; this.drawEmpty(); !g || a.shadowGroup || c.styledMode || (a.shadowGroup = d.g("shadow").attr({ zIndex: -1 }).add(a.group)); a.points.forEach(function (e) {
- var b = {}; l = e.graphic; if (!e.isNull && l) {
- var n = void 0; r = e.shapeArgs; f = e.getTranslate(); c.styledMode || (n = e.shadowGroup, g && !n && (n = e.shadowGroup = d.g("shadow").add(a.shadowGroup)), n && n.attr(f), h = a.pointAttribs(e, e.selected && "select")); e.delayedRendering ? (l.setRadialReference(a.center).attr(r).attr(f),
- c.styledMode || l.attr(h).attr({ "stroke-linejoin": "round" }).shadow(g, n), e.delayedRendering = !1) : (l.setRadialReference(a.center), c.styledMode || k(!0, b, h), k(!0, b, r, f), l.animate(b)); l.attr({ visibility: e.visible ? "inherit" : "hidden" }); l.addClass(e.getClassName(), !0)
- } else l && (e.graphic = l.destroy())
- })
- }; c.prototype.sortByAngle = function (a, c) { a.sort(function (a, d) { return "undefined" !== typeof a.angle && (d.angle - a.angle) * c }) }; c.prototype.translate = function (a) {
- t(this, "translate"); this.generatePoints(); var c = this.options,
- g = c.slicedOffset, k = g + (c.borderWidth || 0), f = d(c.startAngle, c.endAngle), l = this.startAngleRad = f.start; f = (this.endAngleRad = f.end) - l; var h = this.points, r = c.dataLabels.distance; c = c.ignoreHiddenPoint; var e = h.length, b, y = 0; a || (this.center = a = this.getCenter()); for (b = 0; b < e; b++) {
- var m = h[b]; var p = l + y * f; !m.isValid() || c && !m.visible || (y += m.percentage / 100); var v = l + y * f; var L = { x: a[0], y: a[1], r: a[2] / 2, innerR: a[3] / 2, start: Math.round(1E3 * p) / 1E3, end: Math.round(1E3 * v) / 1E3 }; m.shapeType = "arc"; m.shapeArgs = L; m.labelDistance = B(m.options.dataLabels &&
- m.options.dataLabels.distance, r); m.labelDistance = C(m.labelDistance, L.r); this.maxLabelDistance = Math.max(this.maxLabelDistance || 0, m.labelDistance); v = (v + p) / 2; v > 1.5 * Math.PI ? v -= 2 * Math.PI : v < -Math.PI / 2 && (v += 2 * Math.PI); m.slicedTranslation = { translateX: Math.round(Math.cos(v) * g), translateY: Math.round(Math.sin(v) * g) }; L = Math.cos(v) * a[2] / 2; var q = Math.sin(v) * a[2] / 2; m.tooltipPos = [a[0] + .7 * L, a[1] + .7 * q]; m.half = v < -Math.PI / 2 || v > Math.PI / 2 ? 1 : 0; m.angle = v; p = Math.min(k, m.labelDistance / 5); m.labelPosition = {
- natural: {
- x: a[0] + L +
- Math.cos(v) * m.labelDistance, y: a[1] + q + Math.sin(v) * m.labelDistance
- }, "final": {}, alignment: 0 > m.labelDistance ? "center" : m.half ? "right" : "left", connectorPosition: { breakAt: { x: a[0] + L + Math.cos(v) * p, y: a[1] + q + Math.sin(v) * p }, touchingSliceAt: { x: a[0] + L, y: a[1] + q } }
- }
- } t(this, "afterTranslate")
- }; c.prototype.updateTotals = function () {
- var a = this.points, c = a.length, d = this.options.ignoreHiddenPoint, g, f = 0; for (g = 0; g < c; g++) { var k = a[g]; !k.isValid() || d && !k.visible || (f += k.y) } this.total = f; for (g = 0; g < c; g++)k = a[g], k.percentage = 0 < f && (k.visible ||
- !d) ? k.y / f * 100 : 0, k.total = f
- }; c.defaultOptions = k(H.defaultOptions, {
- center: [null, null], clip: !1, colorByPoint: !0, dataLabels: { allowOverlap: !0, connectorPadding: 5, connectorShape: "fixedOffset", crookDistance: "70%", distance: 30, enabled: !0, formatter: function () { return this.point.isNull ? void 0 : this.point.name }, softConnector: !0, x: 0 }, fillColor: void 0, ignoreHiddenPoint: !0, inactiveOtherPoints: !0, legendType: "point", marker: null, size: null, showInLegend: !1, slicedOffset: 10, stickyTracking: !1, tooltip: { followPointer: !0 }, borderColor: "#ffffff",
- borderWidth: 1, lineWidth: void 0, states: { hover: { brightness: .1 } }
- }); return c
- }(H); c(m.prototype, { axisTypes: [], directTouch: !0, drawGraph: void 0, drawLegendSymbol: G.drawRectangle, drawTracker: q.prototype.drawTracker, getCenter: a.getCenter, getSymbol: A, isCartesian: !1, noSharedTooltip: !0, pointAttribs: q.prototype.pointAttribs, pointClass: x, requireSorting: !1, searchPoint: A, trackerGroups: ["group", "dataLabelsGroup"] }); J.registerSeriesType("pie", m); ""; return m
- }); O(a, "Series/Pie/PieDataLabel.js", [a["Core/Series/DataLabel.js"],
- a["Core/Globals.js"], a["Core/Renderer/RendererUtilities.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]], function (a, q, A, G, x) {
- var C = q.noop, J = A.distribute, D = G.series, m = x.arrayMax, l = x.clamp, d = x.defined, g = x.merge, c = x.pick, t = x.relativeLength, k; (function (k) {
- function q () {
- var a = this, k = a.data, f = a.chart, l = a.options.dataLabels || {}, h = l.connectorPadding, r = f.plotWidth, e = f.plotHeight, b = f.plotLeft, y = Math.round(f.chartWidth / 3), t = a.center, p = t[2] / 2, v = t[1], w = [[], []], q = [0, 0, 0, 0], B = a.dataLabelPositioners,
- C, F, E, x, A, K, H, G, M, O, Y, T; a.visible && (l.enabled || a._hasPointLabels) && (k.forEach(function (a) { a.dataLabel && a.visible && a.dataLabel.shortened && (a.dataLabel.attr({ width: "auto" }).css({ width: "auto", textOverflow: "clip" }), a.dataLabel.shortened = !1) }), D.prototype.drawDataLabels.apply(a), k.forEach(function (a) {
- a.dataLabel && (a.visible ? (w[a.half].push(a), a.dataLabel._pos = null, !d(l.style.width) && !d(a.options.dataLabels && a.options.dataLabels.style && a.options.dataLabels.style.width) && a.dataLabel.getBBox().width > y && (a.dataLabel.css({
- width: Math.round(.7 *
- y) + "px"
- }), a.dataLabel.shortened = !0)) : (a.dataLabel = a.dataLabel.destroy(), a.dataLabels && 1 === a.dataLabels.length && delete a.dataLabels))
- }), w.forEach(function (g, k) {
- var n = g.length, m = [], y; if (n) {
- a.sortByAngle(g, k - .5); if (0 < a.maxLabelDistance) {
- var u = Math.max(0, v - p - a.maxLabelDistance); var I = Math.min(v + p + a.maxLabelDistance, f.plotHeight); g.forEach(function (a) {
- 0 < a.labelDistance && a.dataLabel && (a.top = Math.max(0, v - p - a.labelDistance), a.bottom = Math.min(v + p + a.labelDistance, f.plotHeight), y = a.dataLabel.getBBox().height ||
- 21, a.distributeBox = { target: a.labelPosition.natural.y - a.top + y / 2, size: y, rank: a.y }, m.push(a.distributeBox))
- }); u = I + y - u; J(m, u, u / 5)
- } for (Y = 0; Y < n; Y++) {
- C = g[Y]; K = C.labelPosition; x = C.dataLabel; O = !1 === C.visible ? "hidden" : "inherit"; M = u = K.natural.y; m && d(C.distributeBox) && ("undefined" === typeof C.distributeBox.pos ? O = "hidden" : (H = C.distributeBox.size, M = B.radialDistributionY(C))); delete C.positionIndex; if (l.justify) G = B.justify(C, p, t); else switch (l.alignTo) {
- case "connectors": G = B.alignToConnectors(g, k, r, b); break; case "plotEdges": G =
- B.alignToPlotEdges(x, k, r, b); break; default: G = B.radialDistributionX(a, C, M, u)
- }x._attr = { visibility: O, align: K.alignment }; T = C.options.dataLabels || {}; x._pos = { x: G + c(T.x, l.x) + ({ left: h, right: -h }[K.alignment] || 0), y: M + c(T.y, l.y) - 10 }; K.final.x = G; K.final.y = M; c(l.crop, !0) && (A = x.getBBox().width, u = null, G - A < h && 1 === k ? (u = Math.round(A - G + h), q[3] = Math.max(u, q[3])) : G + A > r - h && 0 === k && (u = Math.round(G + A - r + h), q[1] = Math.max(u, q[1])), 0 > M - H / 2 ? q[0] = Math.max(Math.round(-M + H / 2), q[0]) : M + H / 2 > e && (q[2] = Math.max(Math.round(M + H / 2 - e), q[2])),
- x.sideOverflow = u)
- }
- }
- }), 0 === m(q) || this.verifyDataLabelOverflow(q)) && (this.placeDataLabels(), this.points.forEach(function (b) {
- T = g(l, b.options.dataLabels); if (F = c(T.connectorWidth, 1)) {
- var e; E = b.connector; if ((x = b.dataLabel) && x._pos && b.visible && 0 < b.labelDistance) {
- O = x._attr.visibility; if (e = !E) b.connector = E = f.renderer.path().addClass("highcharts-data-label-connector highcharts-color-" + b.colorIndex + (b.className ? " " + b.className : "")).add(a.dataLabelsGroup), f.styledMode || E.attr({
- "stroke-width": F, stroke: T.connectorColor ||
- b.color || "#666666"
- }); E[e ? "attr" : "animate"]({ d: b.getConnectorPath() }); E.attr("visibility", O)
- } else E && (b.connector = E.destroy())
- }
- }))
- } function B () {
- this.points.forEach(function (a) {
- var c = a.dataLabel, f; c && a.visible && ((f = c._pos) ? (c.sideOverflow && (c._attr.width = Math.max(c.getBBox().width - c.sideOverflow, 0), c.css({ width: c._attr.width + "px", textOverflow: (this.options.dataLabels.style || {}).textOverflow || "ellipsis" }), c.shortened = !0), c.attr(c._attr), c[c.moved ? "animate" : "attr"](f), c.moved = !0) : c && c.attr({ y: -9999 }));
- delete a.distributeBox
- }, this)
- } function x (a) { var c = this.center, f = this.options, d = f.center, g = f.minSize || 80, k = null !== f.size; if (!k) { if (null !== d[0]) var e = Math.max(c[2] - Math.max(a[1], a[3]), g); else e = Math.max(c[2] - a[1] - a[3], g), c[0] += (a[3] - a[1]) / 2; null !== d[1] ? e = l(e, g, c[2] - Math.max(a[0], a[2])) : (e = l(e, g, c[2] - a[0] - a[2]), c[1] += (a[0] - a[2]) / 2); e < c[2] ? (c[2] = e, c[3] = Math.min(f.thickness ? Math.max(0, e - 2 * f.thickness) : Math.max(0, t(f.innerSize || 0, e)), e), this.translate(c), this.drawDataLabels && this.drawDataLabels()) : k = !0 } return k }
- var A = [], w = { radialDistributionY: function (a) { return a.top + a.distributeBox.pos }, radialDistributionX: function (a, c, f, d) { return a.getX(f < c.top + 2 || f > c.bottom - 2 ? d : f, c.half, c) }, justify: function (a, c, f) { return f[0] + (a.half ? -1 : 1) * (c + a.labelDistance) }, alignToPlotEdges: function (a, c, f, d) { a = a.getBBox().width; return c ? a + d : f - a - d }, alignToConnectors: function (a, c, f, d) { var g = 0, k; a.forEach(function (a) { k = a.dataLabel.getBBox().width; k > g && (g = k) }); return c ? g + d : f - g - d } }; k.compose = function (c) {
- a.compose(D); -1 === A.indexOf(c) &&
- (A.push(c), c = c.prototype, c.dataLabelPositioners = w, c.alignDataLabel = C, c.drawDataLabels = q, c.placeDataLabels = B, c.verifyDataLabelOverflow = x)
- }
- })(k || (k = {})); return k
- }); O(a, "Extensions/OverlappingDataLabels.js", [a["Core/Chart/Chart.js"], a["Core/Utilities.js"]], function (a, q) {
- function C (a, d) {
- var g = !1; if (a) {
- var c = a.newOpacity; a.oldOpacity !== c && (a.alignAttr && a.placed ? (a[c ? "removeClass" : "addClass"]("highcharts-data-label-hidden"), g = !0, a.alignAttr.opacity = c, a[a.isOld ? "animate" : "attr"](a.alignAttr, null, function () {
- d.styledMode ||
- a.css({ pointerEvents: c ? "auto" : "none" })
- }), x(d, "afterHideOverlappingLabel")) : a.attr({ opacity: c })); a.isOld = !0
- } return g
- } var G = q.addEvent, x = q.fireEvent, H = q.isArray, J = q.isNumber, D = q.objectEach, m = q.pick; G(a, "render", function () {
- var a = this, d = []; (this.labelCollectors || []).forEach(function (a) { d = d.concat(a()) }); (this.yAxis || []).forEach(function (a) { a.stacking && a.options.stackLabels && !a.options.stackLabels.allowOverlap && D(a.stacking.stacks, function (a) { D(a, function (a) { a.label && d.push(a.label) }) }) }); (this.series ||
- []).forEach(function (g) { var c = g.options.dataLabels; g.visible && (!1 !== c.enabled || g._hasPointLabels) && (c = function (c) { return c.forEach(function (c) { c.visible && (H(c.dataLabels) ? c.dataLabels : c.dataLabel ? [c.dataLabel] : []).forEach(function (g) { var k = g.options; g.labelrank = m(k.labelrank, c.labelrank, c.shapeArgs && c.shapeArgs.height); k.allowOverlap ? (g.oldOpacity = g.opacity, g.newOpacity = 1, C(g, a)) : d.push(g) }) }) }, c(g.nodes || []), c(g.points)) }); this.hideOverlappingLabels(d)
- }); a.prototype.hideOverlappingLabels = function (a) {
- var d =
- this, g = a.length, c = d.renderer, l, k, m, q = !1; var F = function (a) {
- var d, g = a.box ? 0 : a.padding || 0, f = d = 0, k; if (a && (!a.alignAttr || a.placed)) {
- var h = a.alignAttr || { x: a.attr("x"), y: a.attr("y") }; var l = a.parentGroup; a.width || (d = a.getBBox(), a.width = d.width, a.height = d.height, d = c.fontMetrics(null, a.element).h); var e = a.width - 2 * g; (k = { left: "0", center: "0.5", right: "1" }[a.alignValue]) ? f = +k * e : J(a.x) && Math.round(a.x) !== a.translateX && (f = a.x - a.translateX); return {
- x: h.x + (l.translateX || 0) + g - (f || 0), y: h.y + (l.translateY || 0) + g - d, width: a.width -
- 2 * g, height: a.height - 2 * g
- }
- }
- }; for (k = 0; k < g; k++)if (l = a[k]) l.oldOpacity = l.opacity, l.newOpacity = 1, l.absoluteBox = F(l); a.sort(function (a, c) { return (c.labelrank || 0) - (a.labelrank || 0) }); for (k = 0; k < g; k++) { var A = (F = a[k]) && F.absoluteBox; for (l = k + 1; l < g; ++l) { var D = (m = a[l]) && m.absoluteBox; !A || !D || F === m || 0 === F.newOpacity || 0 === m.newOpacity || "hidden" === F.visibility || "hidden" === m.visibility || D.x >= A.x + A.width || D.x + D.width <= A.x || D.y >= A.y + A.height || D.y + D.height <= A.y || ((F.labelrank < m.labelrank ? F : m).newOpacity = 0) } } a.forEach(function (a) {
- C(a,
- d) && (q = !0)
- }); q && x(d, "afterHideAllOverlappingLabels")
- }
- }); O(a, "Core/Responsive.js", [a["Core/Utilities.js"]], function (a) {
- var q = a.extend, C = a.find, G = a.isArray, x = a.isObject, H = a.merge, J = a.objectEach, D = a.pick, m = a.splat, l = a.uniqueKey, d; (function (a) {
- var c = []; a.compose = function (a) { -1 === c.indexOf(a) && (c.push(a), q(a.prototype, d.prototype)); return a }; var d = function () {
- function a () { } a.prototype.currentOptions = function (a) {
- function c (a, g, k, l) {
- var f; J(a, function (a, h) {
- if (!l && -1 < d.collectionsWithUpdate.indexOf(h) && g[h]) for (a =
- m(a), k[h] = [], f = 0; f < Math.max(a.length, g[h].length); f++)g[h][f] && (void 0 === a[f] ? k[h][f] = g[h][f] : (k[h][f] = {}, c(a[f], g[h][f], k[h][f], l + 1))); else x(a) ? (k[h] = G(a) ? [] : {}, c(a, g[h] || {}, k[h], l + 1)) : k[h] = "undefined" === typeof g[h] ? null : g[h]
- })
- } var d = this, g = {}; c(a, this.options, g, 0); return g
- }; a.prototype.matchResponsiveRule = function (a, c) {
- var d = a.condition; (d.callback || function () {
- return this.chartWidth <= D(d.maxWidth, Number.MAX_VALUE) && this.chartHeight <= D(d.maxHeight, Number.MAX_VALUE) && this.chartWidth >= D(d.minWidth,
- 0) && this.chartHeight >= D(d.minHeight, 0)
- }).call(this) && c.push(a._id)
- }; a.prototype.setResponsive = function (a, c) {
- var d = this, g = this.options.responsive, k = this.currentResponsive, m = []; !c && g && g.rules && g.rules.forEach(function (a) { "undefined" === typeof a._id && (a._id = l()); d.matchResponsiveRule(a, m) }, this); c = H.apply(void 0, m.map(function (a) { return C((g || {}).rules || [], function (c) { return c._id === a }) }).map(function (a) { return a && a.chartOptions })); c.isResponsiveOptions = !0; m = m.toString() || void 0; m !== (k && k.ruleIds) && (k &&
- this.update(k.undoOptions, a, !0), m ? (k = this.currentOptions(c), k.isResponsiveOptions = !0, this.currentResponsive = { ruleIds: m, mergedOptions: c, undoOptions: k }, this.update(c, a, !0)) : this.currentResponsive = void 0)
- }; return a
- }()
- })(d || (d = {})); ""; ""; return d
- }); O(a, "masters/highcharts.src.js", [a["Core/Globals.js"], a["Core/Utilities.js"], a["Core/DefaultOptions.js"], a["Core/Animation/Fx.js"], a["Core/Animation/AnimationUtilities.js"], a["Core/Renderer/HTML/AST.js"], a["Core/FormatUtilities.js"], a["Core/Renderer/RendererUtilities.js"],
- a["Core/Renderer/SVG/SVGElement.js"], a["Core/Renderer/SVG/SVGRenderer.js"], a["Core/Renderer/HTML/HTMLElement.js"], a["Core/Renderer/HTML/HTMLRenderer.js"], a["Core/Axis/Axis.js"], a["Core/Axis/DateTimeAxis.js"], a["Core/Axis/LogarithmicAxis.js"], a["Core/Axis/PlotLineOrBand/PlotLineOrBand.js"], a["Core/Axis/Tick.js"], a["Core/Tooltip.js"], a["Core/Series/Point.js"], a["Core/Pointer.js"], a["Core/MSPointer.js"], a["Core/Legend/Legend.js"], a["Core/Chart/Chart.js"], a["Core/Series/Series.js"], a["Core/Series/SeriesRegistry.js"],
- a["Series/Column/ColumnSeries.js"], a["Series/Column/ColumnDataLabel.js"], a["Series/Pie/PieSeries.js"], a["Series/Pie/PieDataLabel.js"], a["Core/Series/DataLabel.js"], a["Core/Responsive.js"], a["Core/Color/Color.js"], a["Core/Time.js"]], function (a, q, A, G, x, H, J, D, m, l, d, g, c, t, k, B, E, F, M, K, w, z, n, f, u, h, r, e, b, y, I, p, v) {
- a.animate = x.animate; a.animObject = x.animObject; a.getDeferredAnimation = x.getDeferredAnimation; a.setAnimation = x.setAnimation; a.stop = x.stop; a.timers = G.timers; a.AST = H; a.Axis = c; a.Chart = n; a.chart = n.chart;
- a.Fx = G; a.Legend = z; a.PlotLineOrBand = B; a.Point = M; a.Pointer = w.isRequired() ? w : K; a.Series = f; a.SVGElement = m; a.SVGRenderer = l; a.Tick = E; a.Time = v; a.Tooltip = F; a.Color = p; a.color = p.parse; g.compose(l); d.compose(m); a.defaultOptions = A.defaultOptions; a.getOptions = A.getOptions; a.time = A.defaultTime; a.setOptions = A.setOptions; a.dateFormat = J.dateFormat; a.format = J.format; a.numberFormat = J.numberFormat; a.addEvent = q.addEvent; a.arrayMax = q.arrayMax; a.arrayMin = q.arrayMin; a.attr = q.attr; a.clearTimeout = q.clearTimeout; a.correctFloat =
- q.correctFloat; a.createElement = q.createElement; a.css = q.css; a.defined = q.defined; a.destroyObjectProperties = q.destroyObjectProperties; a.discardElement = q.discardElement; a.distribute = D.distribute; a.erase = q.erase; a.error = q.error; a.extend = q.extend; a.extendClass = q.extendClass; a.find = q.find; a.fireEvent = q.fireEvent; a.getMagnitude = q.getMagnitude; a.getStyle = q.getStyle; a.inArray = q.inArray; a.isArray = q.isArray; a.isClass = q.isClass; a.isDOMElement = q.isDOMElement; a.isFunction = q.isFunction; a.isNumber = q.isNumber; a.isObject =
- q.isObject; a.isString = q.isString; a.keys = q.keys; a.merge = q.merge; a.normalizeTickInterval = q.normalizeTickInterval; a.objectEach = q.objectEach; a.offset = q.offset; a.pad = q.pad; a.pick = q.pick; a.pInt = q.pInt; a.relativeLength = q.relativeLength; a.removeEvent = q.removeEvent; a.seriesType = u.seriesType; a.splat = q.splat; a.stableSort = q.stableSort; a.syncTimeout = q.syncTimeout; a.timeUnits = q.timeUnits; a.uniqueKey = q.uniqueKey; a.useSerialIds = q.useSerialIds; a.wrap = q.wrap; r.compose(h); y.compose(f); t.compose(c); k.compose(c); b.compose(e);
- B.compose(c); I.compose(n); return a
- }); O(a, "Core/Axis/OrdinalAxis.js", [a["Core/Axis/Axis.js"], a["Core/Globals.js"], a["Core/Series/Series.js"], a["Core/Utilities.js"]], function (a, q, A, G) {
- var x = G.addEvent, C = G.correctFloat, J = G.css, D = G.defined, m = G.error, l = G.pick, d = G.timeUnits, g = [], c; (function (a) {
- function c (a, e, b, c, f, g, h) {
- void 0 === f && (f = []); void 0 === g && (g = 0); var p = {}, k = this.options.tickPixelInterval, v = this.chart.time, l = [], r, n, y = 0, t = [], u = -Number.MAX_VALUE; if (!this.options.ordinal && !this.options.breaks || !f ||
- 3 > f.length || "undefined" === typeof e) return v.getTimeTicks.apply(v, arguments); var I = f.length; for (r = 0; r < I; r++) { var w = r && f[r - 1] > b; f[r] < e && (y = r); if (r === I - 1 || f[r + 1] - f[r] > 5 * g || w) { if (f[r] > u) { for (n = v.getTimeTicks(a, f[y], f[r], c); n.length && n[0] <= u;)n.shift(); n.length && (u = n[n.length - 1]); l.push(t.length); t = t.concat(n) } y = r + 1 } if (w) break } if (n) {
- n = n.info; if (h && n.unitRange <= d.hour) {
- r = t.length - 1; for (y = 1; y < r; y++)if (v.dateFormat("%d", t[y]) !== v.dateFormat("%d", t[y - 1])) { p[t[y]] = "day"; var q = !0 } q && (p[t[0]] = "day"); n.higherRanks =
- p
- } n.segmentStarts = l; t.info = n
- } else m(12, !1, this.chart); if (h && D(k)) { n = t.length; v = []; y = []; r = void 0; for (q = n; q--;)l = this.translate(t[q]), r && (y[q] = r - l), v[q] = r = l; y.sort(); y = y[Math.floor(y.length / 2)]; y < .6 * k && (y = null); q = t[n - 1] > b ? n - 1 : n; for (r = void 0; q--;)l = v[q], n = Math.abs(r - l), r && n < .8 * k && (null === y || n < .8 * y) ? (p[t[q]] && !p[t[q + 1]] ? (n = q + 1, r = l) : n = q, t.splice(n, 1)) : r = l } return t
- } function t (a) {
- var e = this.ordinal.positions; if (!e) return a; var b = e.length - 1; if (0 > a) a = e[0]; else if (a > b) a = e[b]; else { b = Math.floor(a); var c = a - b } return "undefined" !==
- typeof c && "undefined" !== typeof e[b] ? e[b] + (c ? c * (e[b + 1] - e[b]) : 0) : a
- } function E (a) {
- var e = this.ordinal, b = e.positions; if (!b) return a; var c = (a - (this.old ? this.old.min : this.min)) * (this.old ? this.old.transA : this.transA) + this.minPixelPadding; 0 < c && c < this.left + this.len || (e.extendedOrdinalPositions || (e.extendedOrdinalPositions = e.getExtendedPositions()), b = e.extendedOrdinalPositions); if (b && b.length) {
- a = e.getIndexOfPoint(c, b); e = C(a % 1); if (0 <= a && a < b.length - 1) return b[Math.floor(a)] + e * (b[Math.ceil(a)] - b[Math.floor(a)]);
- e = b.length; c = b[0]; b = b[e - 1]; var f = (b - c) / (e - 1); return 0 > a ? c + f * a : b + f * (a - e)
- } return a
- } function F (c, e) { var b = a.Additions.findIndexOf(c, e, !0); return c[b] === e ? b : b + (e - c[b]) / (c[b + 1] - c[b]) } function G () { this.ordinal || (this.ordinal = new a.Additions(this)) } function H () {
- this.isXAxis && D(this.options.overscroll) && this.max === this.dataMax && (!this.chart.mouseIsDown || this.isInternal) && (!this.eventArgs || this.eventArgs && "navigator" !== this.eventArgs.trigger) && (this.max += this.options.overscroll, !this.isInternal && D(this.userMin) &&
- (this.min += this.options.overscroll))
- } function w () { this.horiz && !this.isDirty && (this.isDirty = this.isOrdinal && this.chart.navigator && !this.chart.navigator.adaptToUpdatedData) } function z () { this.ordinal && (this.ordinal.beforeSetTickPositions(), this.tickInterval = this.ordinal.postProcessTickInterval(this.tickInterval)) } function n (a) {
- var e = this.xAxis[0], b = e.options.overscroll, c = a.originalEvent.chartX, f = this.options.chart.panning, d = !1; if (f && "y" !== f.type && e.options.ordinal && e.series.length) {
- var g = this.mouseDownX,
- h = e.getExtremes(), k = h.dataMax, l = h.min, n = h.max, r = this.hoverPoints, m = e.closestPointRange || e.ordinal && e.ordinal.overscrollPointsRange; g = (g - c) / (e.translationSlope * (e.ordinal.slope || m)); m = e.ordinal.getExtendedPositions(); m = { ordinal: { positions: m, extendedOrdinalPositions: m } }; var t = e.index2val, u = e.val2lin, w = void 0, q = w = void 0, z = void 0; m.ordinal.positions ? 1 < Math.abs(g) && (r && r.forEach(function (a) { a.setState() }), 0 > g ? (q = m, z = e.ordinal.positions ? e : m) : (q = e.ordinal.positions ? e : m, z = m), w = z.ordinal.positions, k > w[w.length -
- 1] && w.push(k), this.fixedRange = n - l, w = e.navigatorAxis.toFixedRange(void 0, void 0, t.apply(q, [u.apply(q, [l, !0]) + g]), t.apply(z, [u.apply(z, [n, !0]) + g])), w.min >= Math.min(h.dataMin, l) && w.max <= Math.max(k, n) + b && e.setExtremes(w.min, w.max, !0, !1, { trigger: "pan" }), this.mouseDownX = c, J(this.container, { cursor: "move" })) : d = !0
- } else d = !0; d || f && /y/.test(f.type) ? b && (e.max = e.dataMax + b) : a.preventDefault()
- } function f () { var a = this.xAxis; a && a.options.ordinal && (delete a.ordinal.index, delete a.ordinal.extendedOrdinalPositions) }
- function u (a, e) { var b = this.ordinal, c = b.positions, f = b.slope, d = b.extendedOrdinalPositions; if (!c) return a; var g = c.length; if (c[0] <= a && c[g - 1] >= a) a = F(c, a); else { d || (d = b.getExtendedPositions && b.getExtendedPositions(), b.extendedOrdinalPositions = d); if (!d || !d.length) return a; g = d.length; f || (f = (d[g - 1] - d[0]) / g); c = F(d, c[0]); a >= d[0] && a <= d[g - 1] ? a = F(d, a) - c : a < d[0] ? (a = d[0] - a, a = -c - a / f) : (a -= d[g - 1], a = a / f + g - c) } return e ? a : f * (a || 0) + b.offset } a.compose = function (a, e, b) {
- if (-1 === g.indexOf(a)) {
- g.push(a); var d = a.prototype; d.getTimeTicks =
- c; d.index2val = t; d.lin2val = E; d.val2lin = u; d.ordinal2lin = d.val2lin; x(a, "afterInit", G); x(a, "foundExtremes", H); x(a, "afterSetScale", w); x(a, "initialAxisTranslation", z)
- } -1 === g.indexOf(b) && (g.push(b), x(b, "pan", n)); -1 === g.indexOf(e) && (g.push(e), x(e, "updatedData", f)); return a
- }; var h = function () {
- function a (a) { this.index = {}; this.axis = a } a.prototype.beforeSetTickPositions = function () {
- var a = this.axis, b = a.ordinal, c = a.getExtremes(), f = c.min, d = c.max, g = a.isXAxis && !!a.options.breaks; c = a.options.ordinal; var h = a.chart.options.chart.ignoreHiddenSeries,
- k, n, m = [], r = Number.MAX_VALUE, t = !1; if (c || g) {
- a.series.forEach(function (a, b) { k = []; if (!(h && !1 === a.visible || !1 === a.takeOrdinalPosition && !g) && (m = m.concat(a.processedXData), u = m.length, m.sort(function (a, b) { return a - b }), r = Math.min(r, l(a.closestPointRange, r)), u)) { for (b = 0; b < u - 1;)m[b] !== m[b + 1] && k.push(m[b + 1]), b++; k[0] !== m[0] && k.unshift(m[0]); m = k } }); var u = m.length; if (2 < u) { var w = m[1] - m[0]; for (n = u - 1; n-- && !t;)m[n + 1] - m[n] !== w && (t = !0); !a.options.keepOrdinalPadding && (m[0] - f > w || d - m[m.length - 1] > w) && (t = !0) } else a.options.overscroll &&
- (2 === u ? r = m[1] - m[0] : 1 === u ? (r = a.options.overscroll, m = [m[0], m[0] + r]) : r = b.overscrollPointsRange); t || a.forceOrdinal ? (a.options.overscroll && (b.overscrollPointsRange = r, m = m.concat(b.getOverscrollPositions())), b.positions = m, w = a.ordinal2lin(Math.max(f, m[0]), !0), n = Math.max(a.ordinal2lin(Math.min(d, m[m.length - 1]), !0), 1), b.slope = d = (d - f) / (n - w), b.offset = f - w * d) : (b.overscrollPointsRange = l(a.closestPointRange, b.overscrollPointsRange), b.positions = a.ordinal.slope = b.offset = void 0)
- } a.isOrdinal = c && t; b.groupIntervalFactor =
- null
- }; a.findIndexOf = function (a, b, c) { for (var e = 0, f = a.length - 1, d; e < f;)d = Math.ceil((e + f) / 2), a[d] <= b ? e = d : f = d - 1; return a[e] === b ? e : c ? e : -1 }; a.prototype.getExtendedPositions = function () {
- var a = this, b = a.axis, c = b.constructor.prototype, f = b.chart, d = b.series[0].currentDataGrouping, g = d ? d.count + d.unitName : "raw", h = b.options.overscroll, k = b.getExtremes(), l = void 0, n = a.index; n || (n = a.index = {}); if (!n[g]) {
- var m = {
- series: [], chart: f, forceOrdinal: !1, getExtremes: function () { return { min: k.dataMin, max: k.dataMax + h } }, getGroupPixelWidth: c.getGroupPixelWidth,
- getTimeTicks: c.getTimeTicks, options: { ordinal: !0 }, ordinal: { getGroupIntervalFactor: this.getGroupIntervalFactor }, ordinal2lin: c.ordinal2lin, getIndexOfPoint: c.getIndexOfPoint, val2lin: c.val2lin
- }; m.ordinal.axis = m; b.series.forEach(function (b) {
- l = { xAxis: m, xData: b.xData.slice(), chart: f, destroyGroupedData: q.noop, getProcessedData: A.prototype.getProcessedData, applyGrouping: A.prototype.applyGrouping }; l.xData = l.xData.concat(a.getOverscrollPositions()); l.options = {
- dataGrouping: d ? {
- firstAnchor: "firstPoint", anchor: "middle",
- lastAnchor: "lastPoint", enabled: !0, forced: !0, approximation: "open", units: [[d.unitName, [d.count]]]
- } : { enabled: !1 }
- }; m.series.push(l); b.processData.apply(l)
- }); l.closestPointRange !== l.basePointRange && l.currentDataGrouping && (m.forceOrdinal = !0); b.ordinal.beforeSetTickPositions.apply({ axis: m }); n[g] = m.ordinal.positions
- } return n[g]
- }; a.prototype.getGroupIntervalFactor = function (a, b, c) {
- c = c.processedXData; var e = c.length, f = []; var d = this.groupIntervalFactor; if (!d) {
- for (d = 0; d < e - 1; d++)f[d] = c[d + 1] - c[d]; f.sort(function (a,
- b) { return a - b }); f = f[Math.floor(e / 2)]; a = Math.max(a, c[0]); b = Math.min(b, c[e - 1]); this.groupIntervalFactor = d = e * f / (b - a)
- } return d
- }; a.prototype.getIndexOfPoint = function (e, b) {
- var c = this.axis, f = this.positions ? this.positions[0] : 0, d = c.series[0].points && c.series[0].points[0] && c.series[0].points[0].plotX || c.minPixelPadding; 1 < c.series.length && c.series.forEach(function (a) { a.points && D(a.points[0]) && D(a.points[0].plotX) && a.points[0].plotX < d && (d = a.points[0].plotX) }); e = (e - d) / (c.translationSlope * (this.slope || c.closestPointRange ||
- this.overscrollPointsRange)); return a.findIndexOf(b, f) + e
- }; a.prototype.getOverscrollPositions = function () { var a = this.axis, b = a.options.overscroll, c = this.overscrollPointsRange, f = [], d = a.dataMax; if (D(c)) for (; d <= a.dataMax + b;)d += c, f.push(d); return f }; a.prototype.postProcessTickInterval = function (a) { var b = this.axis, e = this.slope; return e ? b.options.breaks ? b.closestPointRange || a : a / (e / b.closestPointRange) : a }; return a
- }(); a.Additions = h
- })(c || (c = {})); return c
- }); O(a, "Series/DataModifyComposition.js", [a["Core/Axis/Axis.js"],
- a["Core/Series/Point.js"], a["Core/Series/Series.js"], a["Core/Utilities.js"]], function (a, q, A, G) {
- var x = q.prototype.tooltipFormatter, C = G.addEvent, J = G.arrayMax, D = G.arrayMin, m = G.correctFloat, l = G.defined, d = G.isArray, g = G.isNumber, c = G.isString, t = G.pick, k; (function (a) {
- function k (a, b, f) { this.isXAxis || (this.series.forEach(function (e) { "compare" === a && "boolean" !== typeof b ? e.setCompare(b, !1) : "cumulative" !== a || c(b) || e.setCumulative(b, !1) }), t(f, !0) && this.chart.redraw()) } function q (a) {
- var b = this, e = b.series.chart.numberFormatter,
- c = function (c) { a = a.replace("{point." + c + "}", (0 < b[c] && "change" === c ? "+" : "") + e(b[c], t(b.series.tooltipOptions.changeDecimals, 2))) }; l(b.change) && c("change"); l(b.cumulativeSum) && c("cumulativeSum"); return x.apply(this, [a])
- } function B () { var a = this.options.compare; if ("percent" === a || "value" === a || this.options.cumulative) { var b = new r(this); "percent" === a || "value" === a ? b.initCompare(a) : b.initCumulative() } this.dataModify = b } function A (a) {
- a = a.dataExtremes; var b = a.activeYData; if (this.dataModify && a) {
- var e = void 0; this.options.compare ?
- e = [this.dataModify.modifyValue(a.dataMin), this.dataModify.modifyValue(a.dataMax)] : this.options.cumulative && d(b) && 2 <= b.length && (e = r.getCumulativeExtremes(b)); e && (a.dataMin = D(e), a.dataMax = J(e))
- }
- } function w (a, b) { this.options.compare = this.userOptions.compare = a; this.update({}, t(b, !0)); !this.dataModify || "value" !== a && "percent" !== a ? this.points.forEach(function (a) { delete a.change }) : this.dataModify.initCompare(a) } function z () {
- if (this.xAxis && this.processedYData && this.dataModify) {
- var a = this.processedXData, b =
- this.processedYData, c = b.length, f = !0 === this.options.compareStart ? 0 : 1, d = -1, h; this.pointArrayMap && (d = this.pointArrayMap.indexOf(this.options.pointValKey || this.pointValKey || "y")); for (h = 0; h < c - f; h++) { var k = b[h] && -1 < d ? b[h][d] : b[h]; if (g(k) && 0 !== k && a[h + f] >= (this.xAxis.min || 0)) { this.dataModify.compareValue = k; break } }
- }
- } function n (a, b) { this.setModifier("compare", a, b) } function f (a, b) {
- a = t(a, !1); this.options.cumulative = this.userOptions.cumulative = a; this.update({}, t(b, !0)); this.dataModify ? this.dataModify.initCumulative() :
- this.points.forEach(function (a) { delete a.cumulativeSum })
- } function u (a, b) { this.setModifier("cumulative", a, b) } var h = []; a.compose = function (a, b, c) { if (-1 === h.indexOf(a)) { h.push(a); var e = a.prototype; e.setCompare = w; e.setCumulative = f; C(a, "afterInit", B); C(a, "afterGetExtremes", A); C(a, "afterProcessData", z) } -1 === h.indexOf(b) && (h.push(b), b = b.prototype, b.setCompare = n, b.setModifier = k, b.setCumulative = u); -1 === h.indexOf(c) && (h.push(c), c.prototype.tooltipFormatter = q); return a }; var r = function () {
- function a (a) {
- this.series =
- a
- } a.prototype.modifyValue = function () { return 0 }; a.getCumulativeExtremes = function (a) { var b = Infinity, c = -Infinity; a.reduce(function (a, e) { e = a + e; b = Math.min(b, e, a); c = Math.max(c, e, a); return e }); return [b, c] }; a.prototype.initCompare = function (a) { this.modifyValue = function (b, c) { null === b && (b = 0); var e = this.compareValue; return "undefined" !== typeof b && "undefined" !== typeof e ? (b = "value" === a ? b - e : b / e * 100 - (100 === this.series.options.compareBase ? 0 : 100), "undefined" !== typeof c && (c = this.series.points[c]) && (c.change = b), b) : 0 } };
- a.prototype.initCumulative = function () { this.modifyValue = function (a, c) { null === a && (a = 0); if (void 0 !== a && void 0 !== c) { var b = 0 < c ? this.series.points[c - 1] : null; b && b.cumulativeSum && (a = m(b.cumulativeSum + a)); if (c = this.series.points[c]) c.cumulativeSum = a; return a } return 0 } }; return a
- }(); a.Additions = r
- })(k || (k = {})); ""; return k
- }); O(a, "Core/Axis/BrokenAxis.js", [a["Extensions/Stacking.js"], a["Core/Utilities.js"]], function (a, q) {
- var A = q.addEvent, C = q.find, x = q.fireEvent, H = q.isArray, J = q.isNumber, D = q.pick, m; (function (l) {
- function d () {
- "undefined" !==
- typeof this.brokenAxis && this.brokenAxis.setBreaks(this.options.breaks, !1)
- } function g () { this.brokenAxis && this.brokenAxis.hasBreaks && (this.options.ordinal = !1) } function c () { var a = this.brokenAxis; if (a && a.hasBreaks) { for (var c = this.tickPositions, d = this.tickPositions.info, f = [], g = 0; g < c.length; g++)a.isInAnyBreak(c[g]) || f.push(c[g]); this.tickPositions = f; this.tickPositions.info = d } } function m () { this.brokenAxis || (this.brokenAxis = new K(this)) } function k () {
- var a = this.options.connectNulls, c = this.points, d = this.xAxis,
- f = this.yAxis; if (this.isDirty) for (var g = c.length; g--;) { var h = c[g], k = !(null === h.y && !1 === a) && (d && d.brokenAxis && d.brokenAxis.isInAnyBreak(h.x, !0) || f && f.brokenAxis && f.brokenAxis.isInAnyBreak(h.y, !0)); h.visible = k ? !1 : !1 !== h.options.visible }
- } function q () { this.drawBreaks(this.xAxis, ["x"]); this.drawBreaks(this.yAxis, D(this.pointArrayMap, ["y"])) } function E (a, c) {
- var d = this, f = d.points, g, h, k, e; if (a && a.brokenAxis && a.brokenAxis.hasBreaks) {
- var b = a.brokenAxis; c.forEach(function (c) {
- g = b && b.breakArray || []; h = a.isXAxis ?
- a.min : D(d.options.threshold, a.min); f.forEach(function (b) { e = D(b["stack" + c.toUpperCase()], b[c]); g.forEach(function (c) { if (J(h) && J(e)) { k = !1; if (h < c.from && e > c.to || h > c.from && e < c.from) k = "pointBreak"; else if (h < c.from && e > c.from && e < c.to || h > c.from && e > c.to && e < c.from) k = "pointInBreak"; k && x(a, k, { point: b, brk: c }) } }) })
- })
- }
- } function F () {
- var c = this.currentDataGrouping, d = c && c.gapSize; c = this.points.slice(); var g = this.yAxis, f = this.options.gapSize, k = c.length - 1, h; if (f && 0 < k) for ("value" !== this.options.gapUnit && (f *= this.basePointRange),
- d && d > f && d >= this.basePointRange && (f = d), h = void 0; k--;)h && !1 !== h.visible || (h = c[k + 1]), d = c[k], !1 !== h.visible && !1 !== d.visible && (h.x - d.x > f && (h = (d.x + h.x) / 2, c.splice(k + 1, 0, { isNull: !0, x: h }), g.stacking && this.options.stacking && (h = g.stacking.stacks[this.stackKey][h] = new a(g, g.options.stackLabels, !1, h, this.stack), h.total = 0)), h = d); return this.getGraphPath(c)
- } var G = []; l.compose = function (a, l) {
- -1 === G.indexOf(a) && (G.push(a), a.keepProps.push("brokenAxis"), A(a, "init", m), A(a, "afterInit", d), A(a, "afterSetTickPositions",
- c), A(a, "afterSetOptions", g)); if (-1 === G.indexOf(l)) { G.push(l); var n = l.prototype; n.drawBreaks = E; n.gappedPath = F; A(l, "afterGeneratePoints", k); A(l, "afterRender", q) } return a
- }; var K = function () {
- function a (a) { this.hasBreaks = !1; this.axis = a } a.isInBreak = function (a, c) { var f = a.repeat || Infinity, d = a.from, g = a.to - a.from; c = c >= d ? (c - d) % f : f - (d - c) % f; return a.inclusive ? c <= g : c < g && 0 !== c }; a.lin2Val = function (c) {
- var d = this.brokenAxis; d = d && d.breakArray; if (!d || !J(c)) return c; var f; for (f = 0; f < d.length; f++) {
- var g = d[f]; if (g.from >=
- c) break; else g.to < c ? c += g.len : a.isInBreak(g, c) && (c += g.len)
- } return c
- }; a.val2Lin = function (c) { var d = this.brokenAxis; d = d && d.breakArray; if (!d || !J(c)) return c; var f = c, g; for (g = 0; g < d.length; g++) { var h = d[g]; if (h.to <= c) f -= h.len; else if (h.from >= c) break; else if (a.isInBreak(h, c)) { f -= c - h.from; break } } return f }; a.prototype.findBreakAt = function (a, c) { return C(c, function (c) { return c.from < a && a < c.to }) }; a.prototype.isInAnyBreak = function (c, d) {
- var f = this.axis, g = f.options.breaks || [], h = g.length, k; if (h && J(c)) {
- for (; h--;)if (a.isInBreak(g[h],
- c)) { var e = !0; k || (k = D(g[h].showPoints, !f.isXAxis)) } var b = e && d ? e && !k : e
- } return b
- }; a.prototype.setBreaks = function (c, d) {
- var f = this, g = f.axis, h = H(c) && !!c.length; g.isDirty = f.hasBreaks !== h; f.hasBreaks = h; g.options.breaks = g.userOptions.breaks = c; g.forceRedraw = !0; g.series.forEach(function (a) { a.isDirty = !0 }); h || g.val2lin !== a.val2Lin || (delete g.val2lin, delete g.lin2val); h && (g.userOptions.ordinal = !1, g.lin2val = a.lin2Val, g.val2lin = a.val2Lin, g.setExtremes = function (a, c, b, d, h) {
- if (f.hasBreaks) {
- for (var e = this.options.breaks ||
- [], k; k = f.findBreakAt(a, e);)a = k.to; for (; k = f.findBreakAt(c, e);)c = k.from; c < a && (c = a)
- } g.constructor.prototype.setExtremes.call(this, a, c, b, d, h)
- }, g.setAxisTranslation = function () {
- g.constructor.prototype.setAxisTranslation.call(this); f.unitLength = void 0; if (f.hasBreaks) {
- var c = g.options.breaks || [], e = [], b = [], d = D(g.pointRangePadding, 0), h = 0, p, k = g.userMin || g.min, l = g.userMax || g.max, m; c.forEach(function (b) { p = b.repeat || Infinity; J(k) && J(l) && (a.isInBreak(b, k) && (k += b.to % p - k % p), a.isInBreak(b, l) && (l -= l % p - b.from % p)) }); c.forEach(function (a) {
- t =
- a.from; p = a.repeat || Infinity; if (J(k) && J(l)) { for (; t - p > k;)t -= p; for (; t < k;)t += p; for (m = t; m < l; m += p)e.push({ value: m, move: "in" }), e.push({ value: m + a.to - a.from, move: "out", size: a.breakSize }) }
- }); e.sort(function (a, b) { return a.value === b.value ? ("in" === a.move ? 0 : 1) - ("in" === b.move ? 0 : 1) : a.value - b.value }); var n = 0; var t = k; e.forEach(function (a) { n += "in" === a.move ? 1 : -1; 1 === n && "in" === a.move && (t = a.value); 0 === n && J(t) && (b.push({ from: t, to: a.value, len: a.value - t - (a.size || 0) }), h += a.value - t - (a.size || 0)) }); f.breakArray = b; J(k) && J(l) &&
- J(g.min) && (f.unitLength = l - k - h + d, x(g, "afterBreaks"), g.staticScale ? g.transA = g.staticScale : f.unitLength && (g.transA *= (l - g.min + d) / f.unitLength), d && (g.minPixelPadding = g.transA * (g.minPointOffset || 0)), g.min = k, g.max = l)
- }
- }); D(d, !0) && g.chart.redraw()
- }; return a
- }(); l.Additions = K
- })(m || (m = {})); return m
- }); O(a, "masters/modules/broken-axis.src.js", [a["Core/Globals.js"], a["Core/Axis/BrokenAxis.js"]], function (a, q) { q.compose(a.Axis, a.Series) }); O(a, "Extensions/DataGrouping.js", [a["Core/Axis/Axis.js"], a["Core/Axis/DateTimeAxis.js"],
- a["Core/FormatUtilities.js"], a["Core/Globals.js"], a["Core/Series/Point.js"], a["Core/Series/Series.js"], a["Core/Tooltip.js"], a["Core/DefaultOptions.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H, J, D, m) {
- var l = A.format, d = H.prototype; A = m.addEvent; var g = m.arrayMax, c = m.arrayMin, t = m.correctFloat, k = m.defined, B = m.error, E = m.extend, F = m.isNumber, C = m.merge, K = m.pick; ""; var w = G.approximations = {
- sum: function (a) { var c = a.length; if (!c && a.hasNulls) var b = null; else if (c) for (b = 0; c--;)b += a[c]; return b }, average: function (a) {
- var c =
- a.length; a = w.sum(a); F(a) && c && (a = t(a / c)); return a
- }, averages: function () { var a = [];[].forEach.call(arguments, function (c) { a.push(w.average(c)) }); return "undefined" === typeof a[0] ? void 0 : a }, open: function (a) { return a.length ? a[0] : a.hasNulls ? null : void 0 }, high: function (a) { return a.length ? g(a) : a.hasNulls ? null : void 0 }, low: function (a) { return a.length ? c(a) : a.hasNulls ? null : void 0 }, close: function (a) { return a.length ? a[a.length - 1] : a.hasNulls ? null : void 0 }, hlc: function (a, c, b) {
- a = w.high(a); c = w.low(c); b = w.close(b); if (F(a) ||
- F(c) || F(b)) return [a, c, b]
- }, ohlc: function (a, c, b, d) { a = w.open(a); c = w.high(c); b = w.low(b); d = w.close(d); if (F(a) || F(c) || F(b) || F(d)) return [a, c, b, d] }, range: function (a, c) { a = w.low(a); c = w.high(c); if (F(a) || F(c)) return [a, c]; if (null === a && null === c) return null }
- }; m = function (a, c, b, d) {
- var e = this, f = e.data, g = e.options && e.options.data, h = [], l = [], m = [], n = a.length, t = !!c, r = [], y = e.pointArrayMap, u = y && y.length, q = ["x"].concat(y || ["y"]), B = this.options.dataGrouping && this.options.dataGrouping.groupAll, z = 0, x = 0, E; d = "function" === typeof d ?
- d : w[d] ? w[d] : w[e.getDGApproximation && e.getDGApproximation() || "average"]; u ? y.forEach(function () { r.push([]) }) : r.push([]); var A = u || 1; for (E = 0; E <= n && !(a[E] >= b[0]); E++); for (E; E <= n; E++) {
- for (; "undefined" !== typeof b[z + 1] && a[E] >= b[z + 1] || E === n;) {
- var D = b[z]; e.dataGroupInfo = { start: B ? x : e.cropStart + x, length: r[0].length }; var G = d.apply(e, r); e.pointClass && !k(e.dataGroupInfo.options) && (e.dataGroupInfo.options = C(e.pointClass.prototype.optionsToObject.call({ series: e }, e.options.data[e.cropStart + x])), q.forEach(function (a) { delete e.dataGroupInfo.options[a] }));
- "undefined" !== typeof G && (h.push(D), l.push(G), m.push(e.dataGroupInfo)); x = E; for (D = 0; D < A; D++)r[D].length = 0, r[D].hasNulls = !1; z += 1; if (E === n) break
- } if (E === n) break; if (y) { D = e.options.dataGrouping && e.options.dataGrouping.groupAll ? E : e.cropStart + E; G = f && f[D] || e.pointClass.prototype.applyOptions.apply({ series: e }, [g[D]]); var H = void 0; for (D = 0; D < u; D++)H = G[y[D]], F(H) ? r[D].push(H) : null === H && (r[D].hasNulls = !0) } else D = t ? c[E] : null, F(D) ? r[0].push(D) : null === D && (r[0].hasNulls = !0)
- } return { groupedXData: h, groupedYData: l, groupMap: m }
- };
- var z = { approximations: w, groupData: m }, n = d.generatePoints, f = {
- groupPixelWidth: 2, dateTimeLabelFormats: {
- millisecond: ["%A, %b %e, %H:%M:%S.%L", "%A, %b %e, %H:%M:%S.%L", "-%H:%M:%S.%L"], second: ["%A, %b %e, %H:%M:%S", "%A, %b %e, %H:%M:%S", "-%H:%M:%S"], minute: ["%A, %b %e, %H:%M", "%A, %b %e, %H:%M", "-%H:%M"], hour: ["%A, %b %e, %H:%M", "%A, %b %e, %H:%M", "-%H:%M"], day: ["%A, %b %e, %Y", "%A, %b %e", "-%A, %b %e, %Y"], week: ["Week from %A, %b %e, %Y", "%A, %b %e", "-%A, %b %e, %Y"], month: ["%B %Y", "%B", "-%B %Y"], year: ["%Y",
- "%Y", "-%Y"]
- }
- }, u = { line: {}, spline: {}, area: {}, areaspline: {}, arearange: {}, column: { groupPixelWidth: 10 }, columnrange: { groupPixelWidth: 10 }, candlestick: { groupPixelWidth: 10 }, ohlc: { groupPixelWidth: 5 }, hlc: { groupPixelWidth: 5 }, heikinashi: { groupPixelWidth: 10 } }, h = G.defaultDataGroupingUnits = [["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]], ["week", [1]], ["month", [1, 3, 6]], ["year", null]]; d.getDGApproximation = function () {
- return this.is("arearange") ?
- "range" : this.is("ohlc") ? "ohlc" : this.is("hlc") ? "hlc" : this.is("column") ? "sum" : "average"
- }; d.groupData = m; d.applyGrouping = function (a) {
- var c = this.chart, b = this.options.dataGrouping, f = !1 !== this.allowDG && b && K(b.enabled, c.options.isStock), g = this.visible || !c.options.chart.ignoreHiddenSeries, p, l = this.currentDataGrouping, m = !1; f && !this.requireSorting && (this.requireSorting = m = !0); a = !1 === !(this.isCartesian && !this.isDirty && !this.xAxis.isDirty && !this.yAxis.isDirty && !a) || !f; m && (this.requireSorting = !1); if (!a) {
- this.destroyGroupedData();
- f = b.groupAll ? this.xData : this.processedXData; var n = b.groupAll ? this.yData : this.processedYData; a = c.plotSizeX; m = this.xAxis; var t = m.options.ordinal, r = this.groupPixelWidth; if (r && f && f.length) {
- this.isDirty = p = !0; this.points = null; var u = m.getExtremes(); var w = u.min; u = u.max; t = t && m.ordinal && m.ordinal.getGroupIntervalFactor(w, u, this) || 1; a = m.getTimeTicks(q.Additions.prototype.normalizeTimeTickInterval(r * (u - w) / a * t, b.units || h), Math.min(w, f[0]), Math.max(u, f[f.length - 1]), m.options.startOfWeek, f, this.closestPointRange);
- r = d.groupData.apply(this, [f, n, a, b.approximation]); f = r.groupedXData; n = r.groupedYData; t = 0; b && b.smoothed && f.length && (b.firstAnchor = "firstPoint", b.anchor = "middle", b.lastAnchor = "lastPoint", B(32, !1, c, { "dataGrouping.smoothed": "use dataGrouping.anchor" })); c = f; var z = this.options.dataGrouping; w = this.currentDataGrouping && this.currentDataGrouping.gapSize; if (z && this.xData && w && this.groupMap) {
- var E = c.length - 1; var x = z.anchor; var A = K(z.firstAnchor, x); z = K(z.lastAnchor, x); if (x && "start" !== x) {
- var D = w * { middle: .5, end: 1 }[x];
- for (x = c.length - 1; x-- && 0 < x;)c[x] += D
- } if (A && "start" !== A && this.xData[0] >= c[0]) { x = this.groupMap[0].start; D = this.groupMap[0].length; var C = void 0; F(x) && F(D) && (C = x + (D - 1)); c[0] = { middle: c[0] + .5 * w, end: c[0] + w, firstPoint: this.xData[0], lastPoint: C && this.xData[C] }[A] } z && "start" !== z && w && c[E] >= u - w && (u = this.groupMap[this.groupMap.length - 1].start, c[E] = { middle: c[E] + .5 * w, end: c[E] + w, firstPoint: u && this.xData[u], lastPoint: this.xData[this.xData.length - 1] }[z])
- } for (u = 1; u < a.length; u++)a.info.segmentStarts && -1 !== a.info.segmentStarts.indexOf(u) ||
- (t = Math.max(a[u] - a[u - 1], t)); u = a.info; u.gapSize = t; this.closestPointRange = a.info.totalRange; this.groupMap = r.groupMap; if (g) { g = f; if (k(g[0]) && F(m.min) && F(m.dataMin) && g[0] < m.min) { if (!k(m.options.min) && m.min <= m.dataMin || m.min === m.dataMin) m.min = Math.min(g[0], m.min); m.dataMin = Math.min(g[0], m.dataMin) } if (k(g[g.length - 1]) && F(m.max) && F(m.dataMax) && g[g.length - 1] > m.max) { if (!k(m.options.max) && F(m.dataMax) && m.max >= m.dataMax || m.max === m.dataMax) m.max = Math.max(g[g.length - 1], m.max); m.dataMax = Math.max(g[g.length - 1], m.dataMax) } } b.groupAll &&
- (this.allGroupedData = n, b = this.cropData(f, n, m.min, m.max, 1), f = b.xData, n = b.yData, this.cropStart = b.start); this.processedXData = f; this.processedYData = n
- } else this.groupMap = null; this.hasGroupedData = p; this.currentDataGrouping = u; this.preventGraphAnimation = (l && l.totalRange) !== (u && u.totalRange)
- }
- }; d.destroyGroupedData = function () { this.groupedData && (this.groupedData.forEach(function (a, c) { a && (this.groupedData[c] = a.destroy ? a.destroy() : null) }, this), this.groupedData.length = 0) }; d.generatePoints = function () {
- n.apply(this);
- this.destroyGroupedData(); this.groupedData = this.hasGroupedData ? this.points : null
- }; a.prototype.applyGrouping = function (a) { var c = this, b = c.series; b.forEach(function (a) { a.groupPixelWidth = void 0 }); b.forEach(function (b) { b.groupPixelWidth = c.getGroupPixelWidth && c.getGroupPixelWidth(); b.groupPixelWidth && (b.hasProcessed = !0); b.applyGrouping(!!a.hasExtemesChanged) }) }; a.prototype.getGroupPixelWidth = function () {
- var a = this.series, c = a.length, b, d = 0, g = !1, h; for (b = c; b--;)(h = a[b].options.dataGrouping) && (d = Math.max(d, K(h.groupPixelWidth,
- f.groupPixelWidth))); for (b = c; b--;)if (h = a[b].options.dataGrouping) if (c = (a[b].processedXData || a[b].data).length, a[b].groupPixelWidth || c > this.chart.plotSizeX / d || c && h.forced) g = !0; return g ? d : 0
- }; a.prototype.setDataGrouping = function (c, e) {
- var b; e = K(e, !0); c || (c = { forced: !1, units: null }); if (this instanceof a) for (b = this.series.length; b--;)this.series[b].update({ dataGrouping: c }, !1); else this.chart.options.series.forEach(function (a) { a.dataGrouping = "boolean" === typeof c ? c : C(c, a.dataGrouping) }); this.ordinal && (this.ordinal.slope =
- void 0); e && this.chart.redraw()
- }; A(a, "postProcessData", a.prototype.applyGrouping); A(x, "update", function () { if (this.dataGroup) return B(24, !1, this.series.chart), !1 }); A(J, "headerFormatter", function (a) {
- var c = this.chart, b = c.time, d = a.labelConfig, g = d.series, h = g.tooltipOptions, k = g.options.dataGrouping, m = h.xDateFormat, n = g.xAxis, t = h[a.isFooter ? "footerFormat" : "headerFormat"]; if (n && "datetime" === n.options.type && k && F(d.key)) {
- var r = g.currentDataGrouping; k = k.dateTimeLabelFormats || f.dateTimeLabelFormats; if (r) if (h = k[r.unitName],
- 1 === r.count) m = h[0]; else { m = h[1]; var u = h[2] } else !m && k && n.dateTime && (m = n.dateTime.getXDateFormat(d.x, h.dateTimeLabelFormats)); m = b.dateFormat(m, d.key); u && (m += b.dateFormat(u, d.key + r.totalRange - 1)); g.chart.styledMode && (t = this.styledModeFormat(t)); a.text = l(t, { point: E(d.point, { key: m }), series: g }, c); a.preventDefault()
- }
- }); A(H, "destroy", d.destroyGroupedData); A(H, "afterSetOptions", function (a) {
- a = a.options; var c = this.type, b = this.chart.options.plotOptions, d = D.defaultOptions.plotOptions[c].dataGrouping, g = this.useCommonDataGrouping &&
- f; if (b && (u[c] || g)) { d || (d = C(f, u[c])); var h = this.chart.rangeSelector; a.dataGrouping = C(g, d, b.series && b.series.dataGrouping, b[c].dataGrouping, this.userOptions.dataGrouping, !a.isInternal && h && F(h.selected) && h.buttonOptions[h.selected].dataGrouping) }
- }); A(a, "afterSetScale", function () { this.series.forEach(function (a) { a.hasProcessed = !1 }) }); G.dataGrouping = z; ""; return z
- }); O(a, "Series/HLC/HLCPoint.js", [a["Core/Series/SeriesRegistry.js"]], function (a) {
- var q = this && this.__extends || function () {
- var a = function (q, x) {
- a =
- Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, q) { a.__proto__ = q } || function (a, q) { for (var x in q) q.hasOwnProperty(x) && (a[x] = q[x]) }; return a(q, x)
- }; return function (q, x) { function A () { this.constructor = q } a(q, x); q.prototype = null === x ? Object.create(x) : (A.prototype = x.prototype, new A) }
- }(); return function (a) { function A () { var q = null !== a && a.apply(this, arguments) || this; q.close = void 0; q.high = void 0; q.low = void 0; q.options = void 0; q.plotClose = void 0; q.series = void 0; return q } q(A, a); return A }(a.seriesTypes.column.prototype.pointClass)
- });
- O(a, "Series/HLC/HLCSeries.js", [a["Series/HLC/HLCPoint.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = this && this.__extends || function () { var a = function (m, l) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, g) { a.__proto__ = g } || function (a, g) { for (var c in g) g.hasOwnProperty(c) && (a[c] = g[c]) }; return a(m, l) }; return function (m, l) { function d () { this.constructor = m } a(m, l); m.prototype = null === l ? Object.create(l) : (d.prototype = l.prototype, new d) } }(), x = q.seriesTypes.column,
- H = A.extend, J = A.merge; A = function (a) {
- function m () { var l = null !== a && a.apply(this, arguments) || this; l.data = void 0; l.options = void 0; l.points = void 0; l.yData = void 0; return l } C(m, a); m.prototype.extendStem = function (a, d, g) { var c = a[0]; a = a[1]; "number" === typeof c[2] && (c[2] = Math.max(g + d, c[2])); "number" === typeof a[2] && (a[2] = Math.min(g - d, a[2])) }; m.prototype.getPointPath = function (a, d) {
- d = d.strokeWidth(); var g = a.series, c = d % 2 / 2, l = Math.round(a.plotX) - c, k = Math.round(a.shapeArgs.width / 2); var m = [["M", l, Math.round(a.yBottom)],
- ["L", l, Math.round(a.plotHigh)]]; null !== a.close && (a = Math.round(a.plotClose) + c, m.push(["M", l, a], ["L", l + k, a]), g.extendStem(m, d / 2, a)); return m
- }; m.prototype.drawSinglePoint = function (a) { var d = a.series, g = d.chart, c = a.graphic, l = !c; "undefined" !== typeof a.plotY && (c || (a.graphic = c = g.renderer.path().add(d.group)), g.styledMode || c.attr(d.pointAttribs(a, a.selected && "select")), d = d.getPointPath(a, c), c[l ? "attr" : "animate"]({ d: d }).addClass(a.getClassName(), !0)) }; m.prototype.drawPoints = function () { this.points.forEach(this.drawSinglePoint) };
- m.prototype.init = function () { a.prototype.init.apply(this, arguments); this.options.stacking = void 0 }; m.prototype.pointAttribs = function (l, d) { l = a.prototype.pointAttribs.call(this, l, d); delete l.fill; return l }; m.prototype.toYData = function (a) { return [a.high, a.low, a.close] }; m.prototype.translate = function () {
- var l = this, d = l.yAxis, g = this.pointArrayMap && this.pointArrayMap.slice() || [], c = g.map(function (a) { return "plot".concat(a.charAt(0).toUpperCase() + a.slice(1)) }); c.push("yBottom"); g.push("low"); a.prototype.translate.apply(l);
- l.points.forEach(function (a) { g.forEach(function (g, m) { g = a[g]; null !== g && (l.dataModify && (g = l.dataModify.modifyValue(g)), a[c[m]] = d.toPixels(g, !0)) }); a.tooltipPos[1] = a.plotHigh + d.pos - l.chart.plotTop })
- }; m.defaultOptions = J(x.defaultOptions, { lineWidth: 1, tooltip: { pointFormat: '<span style="color:{point.color}">\u25cf</span> <b> {series.name}</b><br/>High: {point.high}<br/>Low: {point.low}<br/>Close: {point.close}<br/>' }, threshold: null, states: { hover: { lineWidth: 3 } }, stickyTracking: !0 }); return m
- }(x); H(A.prototype,
- { animate: null, directTouch: !1, pointArrayMap: ["high", "low", "close"], pointAttrToOptions: { stroke: "color", "stroke-width": "lineWidth" }, pointValKey: "close" }); A.prototype.pointClass = a; q.registerSeriesType("hlc", A); ""; return A
- }); O(a, "Series/OHLC/OHLCPoint.js", [a["Core/Series/SeriesRegistry.js"]], function (a) {
- var q = this && this.__extends || function () {
- var a = function (q, x) {
- a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, q) { a.__proto__ = q } || function (a, q) {
- for (var x in q) q.hasOwnProperty(x) && (a[x] =
- q[x])
- }; return a(q, x)
- }; return function (q, x) { function A () { this.constructor = q } a(q, x); q.prototype = null === x ? Object.create(x) : (A.prototype = x.prototype, new A) }
- }(); return function (a) {
- function A () { var q = null !== a && a.apply(this, arguments) || this; q.open = void 0; q.options = void 0; q.plotOpen = void 0; q.series = void 0; return q } q(A, a); A.prototype.getClassName = function () { return a.prototype.getClassName.call(this) + (this.open < this.close ? " highcharts-point-up" : " highcharts-point-down") }; A.prototype.resolveUpColor = function () {
- this.open <
- this.close && !this.options.color && this.series.options.upColor && (this.color = this.series.options.upColor)
- }; A.prototype.resolveColor = function () { a.prototype.resolveColor.call(this); this.resolveUpColor() }; A.prototype.getZone = function () { var q = a.prototype.getZone.call(this); this.resolveUpColor(); return q }; A.prototype.applyOptions = function () { a.prototype.applyOptions.apply(this, arguments); this.resolveColor && this.resolveColor(); return this }; return A
- }(a.seriesTypes.hlc.prototype.pointClass)
- }); O(a, "Series/OHLC/OHLCSeries.js",
- [a["Series/OHLC/OHLCPoint.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = this && this.__extends || function () { var a = function (d, c) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d]) }; return a(d, c) }; return function (d, c) { function g () { this.constructor = d } a(d, c); d.prototype = null === c ? Object.create(c) : (g.prototype = c.prototype, new g) } }(), x = q.series, H = q.seriesTypes.hlc, J = A.addEvent,
- D = A.extend, m = A.merge, l = function (a) {
- function d () { var c = null !== a && a.apply(this, arguments) || this; c.data = void 0; c.options = void 0; c.points = void 0; return c } C(d, a); d.prototype.getPointPath = function (c, d) { var g = a.prototype.getPointPath.call(this, c, d); d = d.strokeWidth(); var l = d % 2 / 2, m = Math.round(c.plotX) - l, t = Math.round(c.shapeArgs.width / 2); null !== c.open && (c = Math.round(c.plotOpen) + l, g.push(["M", m, c], ["L", m - t, c]), a.prototype.extendStem.call(this, g, d / 2, c)); return g }; d.prototype.pointAttribs = function (c, d) {
- d = a.prototype.pointAttribs.call(this,
- c, d); var g = this.options; delete d.fill; !c.options.color && g.upColor && c.open < c.close && (d.stroke = g.upColor); return d
- }; d.prototype.toYData = function (a) { return [a.open, a.high, a.low, a.close] }; d.defaultOptions = m(H.defaultOptions, { tooltip: { pointFormat: '<span style="color:{point.color}">\u25cf</span> <b> {series.name}</b><br/>Open: {point.open}<br/>High: {point.high}<br/>Low: {point.low}<br/>Close: {point.close}<br/>' } }); return d
- }(H); D(l.prototype, { pointArrayMap: ["open", "high", "low", "close"] }); l.prototype.pointClass =
- a; q.registerSeriesType("ohlc", l); J(x, "init", function (a) { a = a.options; a.useOhlcData && "highcharts-navigator-series" !== a.id && D(this, { pointValKey: l.prototype.pointValKey, pointArrayMap: l.prototype.pointArrayMap, toYData: l.prototype.toYData }) }); J(x, "afterSetOptions", function (a) { a = a.options; var d = a.dataGrouping; d && a.useOhlcData && "highcharts-navigator-series" !== a.id && (d.approximation = "ohlc") }); ""; return l
- }); O(a, "Series/Candlestick/CandlestickSeries.js", [a["Core/DefaultOptions.js"], a["Core/Series/SeriesRegistry.js"],
- a["Core/Utilities.js"]], function (a, q, A) {
- var C = this && this.__extends || function () { var a = function (l, d) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d]) }; return a(l, d) }; return function (l, d) { function g () { this.constructor = l } a(l, d); l.prototype = null === d ? Object.create(d) : (g.prototype = d.prototype, new g) } }(), x = a.defaultOptions; a = q.seriesTypes; var H = a.column, J = a.ohlc, D = A.merge; A = function (a) {
- function l () {
- var d = null !==
- a && a.apply(this, arguments) || this; d.data = void 0; d.options = void 0; d.points = void 0; return d
- } C(l, a); l.prototype.pointAttribs = function (a, g) {
- var c = H.prototype.pointAttribs.call(this, a, g), d = this.options, k = a.open < a.close, l = d.lineColor || this.color, m = a.color || this.color; c["stroke-width"] = d.lineWidth; c.fill = a.options.color || (k ? d.upColor || m : m); c.stroke = a.options.lineColor || (k ? d.upLineColor || l : l); g && (a = d.states[g], c.fill = a.color || c.fill, c.stroke = a.lineColor || c.stroke, c["stroke-width"] = a.lineWidth || c["stroke-width"]);
- return c
- }; l.prototype.drawPoints = function () {
- var a = this, g = a.chart, c = a.yAxis.reversed; a.points.forEach(function (d) {
- var k = d.graphic, l = !k; if ("undefined" !== typeof d.plotY) {
- k || (d.graphic = k = g.renderer.path().add(a.group)); a.chart.styledMode || k.attr(a.pointAttribs(d, d.selected && "select")).shadow(a.options.shadow); var m = k.strokeWidth() % 2 / 2; var t = Math.round(d.plotX) - m; var q = d.plotOpen; var x = d.plotClose; var w = Math.min(q, x); q = Math.max(q, x); var z = Math.round(d.shapeArgs.width / 2); x = c ? q !== d.yBottom : Math.round(w) !==
- Math.round(d.plotHigh); var n = c ? Math.round(w) !== Math.round(d.plotHigh) : q !== d.yBottom; w = Math.round(w) + m; q = Math.round(q) + m; m = []; m.push(["M", t - z, q], ["L", t - z, w], ["L", t + z, w], ["L", t + z, q], ["Z"], ["M", t, w], ["L", t, x ? Math.round(c ? d.yBottom : d.plotHigh) : w], ["M", t, q], ["L", t, n ? Math.round(c ? d.plotHigh : d.yBottom) : q]); k[l ? "attr" : "animate"]({ d: m }).addClass(d.getClassName(), !0)
- }
- })
- }; l.defaultOptions = D(J.defaultOptions, x.plotOptions, {
- states: { hover: { lineWidth: 2 } }, tooltip: x.plotOptions.ohlc.tooltip, threshold: null, lineColor: "#000000",
- lineWidth: 1, upColor: "#ffffff", stickyTracking: !0
- }); return l
- }(J); q.registerSeriesType("candlestick", A); ""; return A
- }); O(a, "Series/Flags/FlagsPoint.js", [a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]], function (a, q) {
- var A = this && this.__extends || function () {
- var a = function (q, x) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, m) { a.__proto__ = m } || function (a, m) { for (var l in m) m.hasOwnProperty(l) && (a[l] = m[l]) }; return a(q, x) }; return function (q, x) {
- function A () { this.constructor = q } a(q,
- x); q.prototype = null === x ? Object.create(x) : (A.prototype = x.prototype, new A)
- }
- }(), C = q.isNumber; return function (a) { function q () { var q = null !== a && a.apply(this, arguments) || this; q.options = void 0; q.series = void 0; return q } A(q, a); q.prototype.isValid = function () { return C(this.y) || "undefined" === typeof this.y }; q.prototype.hasNewShapeType = function () { var a = this.options.shape || this.series.options.shape; return this.graphic && a && a !== this.graphic.symbolKey }; return q }(a.seriesTypes.column.prototype.pointClass)
- }); O(a, "Series/OnSeriesComposition.js",
- [a["Series/Column/ColumnSeries.js"], a["Core/Series/Series.js"], a["Core/Utilities.js"]], function (a, q, A) {
- var C = a.prototype, x = q.prototype, H = A.defined, J = A.stableSort, D; (function (a) {
- function l () { return x.getPlotBox.call(this.options.onSeries && this.chart.get(this.options.onSeries) || this) } function d () {
- C.translate.apply(this); var a = this, d = a.options, g = a.chart, l = a.points, m = d.onSeries, q = (m = m && g.get(m)) && m.options.step, x = m && m.points, A = g.inverted, w = a.xAxis, z = a.yAxis; g = l.length - 1; var n; d = d.onKey || "y"; var f = x &&
- x.length, u = 0, h; if (m && m.visible && f) { u = (m.pointXOffset || 0) + (m.barW || 0) / 2; var r = m.currentDataGrouping; var e = x[f - 1].x + (r ? r.totalRange : 0); J(l, function (a, b) { return a.x - b.x }); for (d = "plot" + d[0].toUpperCase() + d.substr(1); f-- && l[g];) { var b = x[f]; r = l[g]; r.y = b.y; if (b.x <= r.x && "undefined" !== typeof b[d]) { if (r.x <= e && (r.plotY = b[d], b.x < r.x && !q && (h = x[f + 1]) && "undefined" !== typeof h[d])) { var y = (r.x - b.x) / (h.x - b.x); r.plotY += y * (h[d] - b[d]); r.y += y * (h.y - b.y) } g--; f++; if (0 > g) break } } } l.forEach(function (b, c) {
- b.plotX += u; if ("undefined" ===
- typeof b.plotY || A) 0 <= b.plotX && b.plotX <= w.len ? A ? (b.plotY = w.translate(b.x, 0, 1, 0, 1), b.plotX = H(b.y) ? z.translate(b.y, 0, 0, 0, 1) : 0) : b.plotY = (w.opposite ? 0 : a.yAxis.len) + w.offset : b.shapeArgs = {}; if ((n = l[c - 1]) && n.plotX === b.plotX) { "undefined" === typeof n.stackIndex && (n.stackIndex = 0); var e = n.stackIndex + 1 } b.stackIndex = e
- }); this.onSeries = m
- } var g = []; a.compose = function (a) { if (-1 === g.indexOf(a)) { g.push(a); var c = a.prototype; c.getPlotBox = l; c.translate = d } return a }; a.getPlotBox = l; a.translate = d
- })(D || (D = {})); return D
- }); O(a, "Series/Flags/FlagsSymbols.js",
- [a["Core/Renderer/RendererRegistry.js"], a["Core/Renderer/SVG/SVGRenderer.js"]], function (a, q) {
- function A (a) { C[a + "pin"] = function (q, x, A, m, l) { var d = l && l.anchorX; l = l && l.anchorY; "circle" === a && m > A && (q -= Math.round((m - A) / 2), A = m); var g = C[a](q, x, A, m); if (d && l) { var c = d; "circle" === a ? c = q + A / 2 : (q = g[0], A = g[1], "M" === q[0] && "L" === A[0] && (c = (q[1] + A[1]) / 2)); g.push(["M", c, x > l ? x : x + m], ["L", d, l]); g = g.concat(C.circle(d - 1, l - 1, 2, 2)) } return g } } var C = q.prototype.symbols; C.flag = function (a, q, A, D, m) {
- var l = m && m.anchorX || a; m = m && m.anchorY ||
- q; var d = C.circle(l - 1, m - 1, 2, 2); d.push(["M", l, m], ["L", a, q + D], ["L", a, q], ["L", a + A, q], ["L", a + A, q + D], ["L", a, q + D], ["Z"]); return d
- }; A("circle"); A("square"); a = a.getRendererType(); a !== q && (a.prototype.symbols.circlepin = C.circlepin, a.prototype.symbols.flag = C.flag, a.prototype.symbols.squarepin = C.squarepin); return C
- }); O(a, "Series/Flags/FlagsSeries.js", [a["Series/Flags/FlagsPoint.js"], a["Core/Globals.js"], a["Series/OnSeriesComposition.js"], a["Core/Renderer/RendererUtilities.js"], a["Core/Series/SeriesRegistry.js"],
- a["Core/Renderer/SVG/SVGElement.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H, J) {
- var C = this && this.__extends || function () { var a = function (c, d) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d]) }; return a(c, d) }; return function (c, d) { function g () { this.constructor = c } a(c, d); c.prototype = null === d ? Object.create(d) : (g.prototype = d.prototype, new g) } }(); q = q.noop; var m = G.distribute, l = x.series, d = x.seriesTypes.column,
- g = J.addEvent, c = J.defined; G = J.extend; var t = J.merge, k = J.objectEach, B = J.wrap; J = function (a) {
- function q () { var c = null !== a && a.apply(this, arguments) || this; c.data = void 0; c.options = void 0; c.points = void 0; return c } C(q, a); q.prototype.animate = function (a) { a && this.setClip() }; q.prototype.drawPoints = function () {
- var a = this.points, d = this.chart, g = d.renderer, l = d.inverted, n = this.options, f = n.y, q, h = this.yAxis, r = {}, e = []; for (q = a.length; q--;) {
- var b = a[q]; var y = (l ? b.plotY : b.plotX) > this.xAxis.len; var I = b.plotX; var p = b.stackIndex;
- var v = b.options.shape || n.shape; var L = b.plotY; "undefined" !== typeof L && (L = b.plotY + f - ("undefined" !== typeof p && p * n.stackDistance)); b.anchorX = p ? void 0 : b.plotX; var x = p ? void 0 : b.plotY; var A = "flag" !== v; p = b.graphic; "undefined" !== typeof L && 0 <= I && !y ? (p && b.hasNewShapeType() && (p = p.destroy()), p || (p = b.graphic = g.label("", null, null, v, null, null, n.useHTML).addClass("highcharts-point").add(this.markerGroup), b.graphic.div && (b.graphic.div.point = b), p.isNew = !0), p.attr({
- align: A ? "center" : "left", width: n.width, height: n.height,
- "text-align": n.textAlign
- }), d.styledMode || p.attr(this.pointAttribs(b)).css(t(n.style, b.style)).shadow(n.shadow), 0 < I && (I -= p.strokeWidth() % 2), v = { y: L, anchorY: x }, n.allowOverlapX && (v.x = I, v.anchorX = b.anchorX), p.attr({ text: b.options.title || n.title || "A" })[p.isNew ? "attr" : "animate"](v), n.allowOverlapX || (r[b.plotX] ? r[b.plotX].size = Math.max(r[b.plotX].size, p.width) : r[b.plotX] = { align: A ? .5 : 0, size: p.width, target: I, anchorX: I }), b.tooltipPos = [I, L + h.pos - d.plotTop]) : p && (b.graphic = p.destroy())
- } if (!n.allowOverlapX) {
- var E =
- 100; k(r, function (a) { a.plotX = a.anchorX; e.push(a); E = Math.max(a.size, E) }); m(e, l ? h.len : this.xAxis.len, E); a.forEach(function (a) { var b = a.plotX, e = a.graphic; (b = e && r[b]) && e && (c(b.pos) ? e[e.isNew ? "attr" : "animate"]({ x: b.pos + (b.align || 0) * b.size, anchorX: a.anchorX }).show().isNew = !1 : e.hide().isNew = !0) })
- } n.useHTML && B(this.markerGroup, "on", function (a) { return H.prototype.on.apply(a.apply(this, [].slice.call(arguments, 1)), [].slice.call(arguments, 1)) })
- }; q.prototype.drawTracker = function () {
- var c = this.points; a.prototype.drawTracker.call(this);
- c.forEach(function (a) { var d = a.graphic; d && (a.unbindMouseOver && a.unbindMouseOver(), a.unbindMouseOver = g(d.element, "mouseover", function () { 0 < a.stackIndex && !a.raised && (a._y = d.y, d.attr({ y: a._y - 8 }), a.raised = !0); c.forEach(function (c) { c !== a && c.raised && c.graphic && (c.graphic.attr({ y: c._y }), c.raised = !1) }) })) })
- }; q.prototype.pointAttribs = function (a, c) {
- var d = this.options, g = a && a.color || this.color, k = d.lineColor, f = a && a.lineWidth; a = a && a.fillColor || d.fillColor; c && (a = d.states[c].fillColor, k = d.states[c].lineColor, f = d.states[c].lineWidth);
- return { fill: a || g, stroke: k || g, "stroke-width": f || d.lineWidth || 0 }
- }; q.prototype.setClip = function () { l.prototype.setClip.apply(this, arguments); !1 !== this.options.clip && this.sharedClipKey && this.markerGroup && this.markerGroup.clip(this.chart.sharedClips[this.sharedClipKey]) }; q.defaultOptions = t(d.defaultOptions, {
- pointRange: 0, allowOverlapX: !1, shape: "flag", stackDistance: 12, textAlign: "center", tooltip: { pointFormat: "{point.text}" }, threshold: null, y: -30, fillColor: "#ffffff", lineWidth: 1, states: {
- hover: {
- lineColor: "#000000",
- fillColor: "#ccd6eb"
- }
- }, style: { fontSize: "11px", fontWeight: "bold" }
- }); return q
- }(d); A.compose(J); G(J.prototype, { allowDG: !1, forceCrop: !0, invertible: !1, noSharedTooltip: !0, pointClass: a, sorted: !1, takeOrdinalPosition: !1, trackerGroups: ["markerGroup"], buildKDTree: q, init: l.prototype.init, invertGroups: q }); x.registerSeriesType("flags", J); ""; ""; return J
- }); O(a, "Core/Axis/ScrollbarAxis.js", [a["Core/Utilities.js"]], function (a) {
- var q = a.addEvent, A = a.defined, C = a.pick; return function () {
- function a () { } a.compose = function (x,
- G) {
- if (-1 === a.composed.indexOf(x)) a.composed.push(x); else return x; var D = function (a) { var l = C(a.options && a.options.min, a.min), d = C(a.options && a.options.max, a.max); return { axisMin: l, axisMax: d, scrollMin: A(a.dataMin) ? Math.min(l, a.min, a.dataMin, C(a.threshold, Infinity)) : l, scrollMax: A(a.dataMax) ? Math.max(d, a.max, a.dataMax, C(a.threshold, -Infinity)) : d } }; q(x, "afterInit", function () {
- var a = this; a.options && a.options.scrollbar && a.options.scrollbar.enabled && (a.options.scrollbar.vertical = !a.horiz, a.options.startOnTick =
- a.options.endOnTick = !1, a.scrollbar = new G(a.chart.renderer, a.options.scrollbar, a.chart), q(a.scrollbar, "changed", function (l) { var d = D(a), g = d.axisMax, c = d.scrollMin, m = d.scrollMax - c; A(d.axisMin) && A(g) && (a.horiz && !a.reversed || !a.horiz && a.reversed ? (d = c + m * this.to, c += m * this.from) : (d = c + m * (1 - this.from), c += m * (1 - this.to)), this.shouldUpdateExtremes(l.DOMType) ? a.setExtremes(c, d, !0, "mousemove" !== l.DOMType && "touchmove" !== l.DOMType, l) : this.setRange(this.from, this.to)) }))
- }); q(x, "afterRender", function () {
- var a = D(this),
- l = a.scrollMin, d = a.scrollMax; a = this.scrollbar; var g = this.axisTitleMargin + (this.titleOffset || 0), c = this.chart.scrollbarsOffsets, q = this.options.margin || 0; a && (this.horiz ? (this.opposite || (c[1] += g), a.position(this.left, this.top + this.height + 2 + c[1] - (this.opposite ? q : 0), this.width, this.height), this.opposite || (c[1] += q), g = 1) : (this.opposite && (c[0] += g), a.position(a.options.opposite ? this.left + this.width + 2 + c[0] - (this.opposite ? 0 : q) : this.opposite ? 0 : q, this.top, this.width, this.height), this.opposite && (c[0] += q), g = 0), c[g] +=
- a.size + a.options.margin, isNaN(l) || isNaN(d) || !A(this.min) || !A(this.max) || this.min === this.max ? a.setRange(0, 1) : (c = (this.min - l) / (d - l), l = (this.max - l) / (d - l), this.horiz && !this.reversed || !this.horiz && this.reversed ? a.setRange(c, l) : a.setRange(1 - l, 1 - c)))
- }); q(x, "afterGetOffset", function () { var a = this.scrollbar && !this.scrollbar.options.opposite; a = this.horiz ? 2 : a ? 3 : 1; var l = this.scrollbar; l && (this.chart.scrollbarsOffsets = [0, 0], this.chart.axisOffset[a] += l.size + l.options.margin) }); return x
- }; a.composed = []; return a
- }()
- });
- O(a, "Core/ScrollbarDefaults.js", [a["Core/Globals.js"]], function (a) { return { height: a.isTouchDevice ? 20 : 14, barBorderRadius: 0, buttonBorderRadius: 0, liveRedraw: void 0, margin: 10, minWidth: 6, opposite: !0, step: .2, zIndex: 3, barBackgroundColor: "#cccccc", barBorderWidth: 1, barBorderColor: "#cccccc", buttonArrowColor: "#333333", buttonBackgroundColor: "#e6e6e6", buttonBorderColor: "#cccccc", buttonBorderWidth: 1, rifleColor: "#333333", trackBackgroundColor: "#f2f2f2", trackBorderColor: "#f2f2f2", trackBorderWidth: 1 } }); O(a, "Core/Scrollbar.js",
- [a["Core/DefaultOptions.js"], a["Core/Globals.js"], a["Core/Axis/ScrollbarAxis.js"], a["Core/ScrollbarDefaults.js"], a["Core/Utilities.js"]], function (a, q, A, G, x) {
- var C = a.defaultOptions, J = x.addEvent, D = x.correctFloat, m = x.defined, l = x.destroyObjectProperties, d = x.fireEvent, g = x.merge, c = x.pick, t = x.removeEvent; a = function () {
- function a (a, c, d) {
- this._events = []; this.chart = void 0; this.from = this.chartY = this.chartX = 0; this.scrollbar = this.renderer = this.options = this.group = void 0; this.scrollbarButtons = []; this.scrollbarGroup =
- void 0; this.scrollbarLeft = 0; this.scrollbarRifles = void 0; this.scrollbarStrokeWidth = 1; this.to = this.size = this.scrollbarTop = 0; this.track = void 0; this.trackBorderWidth = 1; this.userOptions = void 0; this.y = this.x = 0; this.init(a, c, d)
- } a.compose = function (c) { A.compose(c, a) }; a.swapXY = function (a, c) { c && a.forEach(function (a) { for (var c = a.length, d, g = 0; g < c; g += 2)d = a[g + 1], "number" === typeof d && (a[g + 1] = a[g + 2], a[g + 2] = d) }); return a }; a.prototype.addEvents = function () {
- var a = this.options.inverted ? [1, 0] : [0, 1], c = this.scrollbarButtons,
- d = this.scrollbarGroup.element, g = this.track.element, k = this.mouseDownHandler.bind(this), l = this.mouseMoveHandler.bind(this), m = this.mouseUpHandler.bind(this); a = [[c[a[0]].element, "click", this.buttonToMinClick.bind(this)], [c[a[1]].element, "click", this.buttonToMaxClick.bind(this)], [g, "click", this.trackClick.bind(this)], [d, "mousedown", k], [d.ownerDocument, "mousemove", l], [d.ownerDocument, "mouseup", m]]; q.hasTouch && a.push([d, "touchstart", k], [d.ownerDocument, "touchmove", l], [d.ownerDocument, "touchend", m]); a.forEach(function (a) {
- J.apply(null,
- a)
- }); this._events = a
- }; a.prototype.buttonToMaxClick = function (a) { var g = (this.to - this.from) * c(this.options.step, .2); this.updatePosition(this.from + g, this.to + g); d(this, "changed", { from: this.from, to: this.to, trigger: "scrollbar", DOMEvent: a }) }; a.prototype.buttonToMinClick = function (a) { var g = D(this.to - this.from) * c(this.options.step, .2); this.updatePosition(D(this.from - g), D(this.to - g)); d(this, "changed", { from: this.from, to: this.to, trigger: "scrollbar", DOMEvent: a }) }; a.prototype.cursorToScrollbarPosition = function (a) {
- var c =
- this.options; c = c.minWidth > this.calculatedWidth ? c.minWidth : 0; return { chartX: (a.chartX - this.x - this.xOffset) / (this.barWidth - c), chartY: (a.chartY - this.y - this.yOffset) / (this.barWidth - c) }
- }; a.prototype.destroy = function () { var a = this, c = a.chart.scroller; a.removeEvents();["track", "scrollbarRifles", "scrollbar", "scrollbarGroup", "group"].forEach(function (c) { a[c] && a[c].destroy && (a[c] = a[c].destroy()) }); c && a === c.scrollbar && (c.scrollbar = null, l(c.scrollbarButtons)) }; a.prototype.drawScrollbarButton = function (c) {
- var d = this.renderer,
- g = this.scrollbarButtons, k = this.options, l = this.size, m = d.g().add(this.group); g.push(m); m = d.rect().addClass("highcharts-scrollbar-button").add(m); this.chart.styledMode || m.attr({ stroke: k.buttonBorderColor, "stroke-width": k.buttonBorderWidth, fill: k.buttonBackgroundColor }); m.attr(m.crisp({ x: -.5, y: -.5, width: l + 1, height: l + 1, r: k.buttonBorderRadius }, m.strokeWidth())); m = d.path(a.swapXY([["M", l / 2 + (c ? -1 : 1), l / 2 - 3], ["L", l / 2 + (c ? -1 : 1), l / 2 + 3], ["L", l / 2 + (c ? 2 : -2), l / 2]], k.vertical)).addClass("highcharts-scrollbar-arrow").add(g[c]);
- this.chart.styledMode || m.attr({ fill: k.buttonArrowColor })
- }; a.prototype.init = function (a, d, k) { this.scrollbarButtons = []; this.renderer = a; this.userOptions = d; this.options = g(G, C.scrollbar, d); this.chart = k; this.size = c(this.options.size, this.options.height); d.enabled && (this.render(), this.addEvents()) }; a.prototype.mouseDownHandler = function (a) {
- a = this.chart.pointer.normalize(a); a = this.cursorToScrollbarPosition(a); this.chartX = a.chartX; this.chartY = a.chartY; this.initPositions = [this.from, this.to]; this.grabbedCenter =
- !0
- }; a.prototype.mouseMoveHandler = function (a) { var c = this.chart.pointer.normalize(a), g = this.options.vertical ? "chartY" : "chartX", k = this.initPositions || []; !this.grabbedCenter || a.touches && 0 === a.touches[0][g] || (c = this.cursorToScrollbarPosition(c)[g], g = this[g], g = c - g, this.hasDragged = !0, this.updatePosition(k[0] + g, k[1] + g), this.hasDragged && d(this, "changed", { from: this.from, to: this.to, trigger: "scrollbar", DOMType: a.type, DOMEvent: a })) }; a.prototype.mouseUpHandler = function (a) {
- this.hasDragged && d(this, "changed", {
- from: this.from,
- to: this.to, trigger: "scrollbar", DOMType: a.type, DOMEvent: a
- }); this.grabbedCenter = this.hasDragged = this.chartX = this.chartY = null
- }; a.prototype.position = function (a, c, d, g) {
- var k = this.options.vertical, l = this.rendered ? "animate" : "attr", m = g, n = 0; this.group.show(); this.x = a; this.y = c + this.trackBorderWidth; this.width = d; this.height = g; this.xOffset = m; this.yOffset = n; k ? (this.width = this.yOffset = d = n = this.size, this.xOffset = m = 0, this.barWidth = g - 2 * d, this.x = a += this.options.margin) : (this.height = this.xOffset = g = m = this.size, this.barWidth =
- d - 2 * g, this.y += this.options.margin); this.group[l]({ translateX: a, translateY: this.y }); this.track[l]({ width: d, height: g }); this.scrollbarButtons[1][l]({ translateX: k ? 0 : d - m, translateY: k ? g - n : 0 })
- }; a.prototype.removeEvents = function () { this._events.forEach(function (a) { t.apply(null, a) }); this._events.length = 0 }; a.prototype.render = function () {
- var c = this.renderer, d = this.options, g = this.size, k = this.chart.styledMode, l = c.g("scrollbar").attr({ zIndex: d.zIndex }).hide().add(); this.group = l; this.track = c.rect().addClass("highcharts-scrollbar-track").attr({
- x: 0,
- r: d.trackBorderRadius || 0, height: g, width: g
- }).add(l); k || this.track.attr({ fill: d.trackBackgroundColor, stroke: d.trackBorderColor, "stroke-width": d.trackBorderWidth }); this.trackBorderWidth = this.track.strokeWidth(); this.track.attr({ y: -this.trackBorderWidth % 2 / 2 }); this.scrollbarGroup = c.g().add(l); this.scrollbar = c.rect().addClass("highcharts-scrollbar-thumb").attr({ height: g, width: g, r: d.barBorderRadius || 0 }).add(this.scrollbarGroup); this.scrollbarRifles = c.path(a.swapXY([["M", -3, g / 4], ["L", -3, 2 * g / 3], ["M", 0, g / 4],
- ["L", 0, 2 * g / 3], ["M", 3, g / 4], ["L", 3, 2 * g / 3]], d.vertical)).addClass("highcharts-scrollbar-rifles").add(this.scrollbarGroup); k || (this.scrollbar.attr({ fill: d.barBackgroundColor, stroke: d.barBorderColor, "stroke-width": d.barBorderWidth }), this.scrollbarRifles.attr({ stroke: d.rifleColor, "stroke-width": 1 })); this.scrollbarStrokeWidth = this.scrollbar.strokeWidth(); this.scrollbarGroup.translate(-this.scrollbarStrokeWidth % 2 / 2, -this.scrollbarStrokeWidth % 2 / 2); this.drawScrollbarButton(0); this.drawScrollbarButton(1)
- }; a.prototype.setRange =
- function (a, c) {
- var d = this.options, g = d.vertical, k = d.minWidth, l = this.barWidth, q = !this.rendered || this.hasDragged || this.chart.navigator && this.chart.navigator.hasDragged ? "attr" : "animate"; if (m(l)) {
- var n = l * Math.min(c, 1); a = Math.max(a, 0); var f = Math.ceil(l * a); this.calculatedWidth = n = D(n - f); n < k && (f = (l - k + n) * a, n = k); k = Math.floor(f + this.xOffset + this.yOffset); l = n / 2 - .5; this.from = a; this.to = c; g ? (this.scrollbarGroup[q]({ translateY: k }), this.scrollbar[q]({ height: n }), this.scrollbarRifles[q]({ translateY: l }), this.scrollbarTop =
- k, this.scrollbarLeft = 0) : (this.scrollbarGroup[q]({ translateX: k }), this.scrollbar[q]({ width: n }), this.scrollbarRifles[q]({ translateX: l }), this.scrollbarLeft = k, this.scrollbarTop = 0); 12 >= n ? this.scrollbarRifles.hide() : this.scrollbarRifles.show(); !1 === d.showFull && (0 >= a && 1 <= c ? this.group.hide() : this.group.show()); this.rendered = !0
- }
- }; a.prototype.shouldUpdateExtremes = function (a) { return c(this.options.liveRedraw, q.svg && !q.isTouchDevice && !this.chart.isBoosting) || "mouseup" === a || "touchend" === a || !m(a) }; a.prototype.trackClick =
- function (a) { var c = this.chart.pointer.normalize(a), g = this.to - this.from, k = this.y + this.scrollbarTop, l = this.x + this.scrollbarLeft; this.options.vertical && c.chartY > k || !this.options.vertical && c.chartX > l ? this.updatePosition(this.from + g, this.to + g) : this.updatePosition(this.from - g, this.to - g); d(this, "changed", { from: this.from, to: this.to, trigger: "scrollbar", DOMEvent: a }) }; a.prototype.update = function (a) { this.destroy(); this.init(this.chart.renderer, g(!0, this.options, a), this.chart) }; a.prototype.updatePosition = function (a,
- c) { 1 < c && (a = D(1 - D(c - a)), c = 1); 0 > a && (c = D(c - a), a = 0); this.from = a; this.to = c }; a.defaultOptions = G; return a
- }(); C.scrollbar = g(!0, a.defaultOptions, C.scrollbar); return a
- }); O(a, "Core/Axis/NavigatorAxis.js", [a["Core/Globals.js"], a["Core/Utilities.js"]], function (a, q) {
- var A = a.isTouchDevice, C = q.addEvent, x = q.correctFloat, H = q.defined, J = q.isNumber, D = q.pick, m = function () {
- function a (a) { this.axis = a } a.prototype.destroy = function () { this.axis = void 0 }; a.prototype.toFixedRange = function (a, g, c, l) {
- var d = this.axis, m = d.chart; m = m &&
- m.fixedRange; var q = (d.pointRange || 0) / 2; a = D(c, d.translate(a, !0, !d.horiz)); g = D(l, d.translate(g, !0, !d.horiz)); d = m && (g - a) / m; H(c) || (a = x(a + q)); H(l) || (g = x(g - q)); .7 < d && 1.3 > d && (l ? a = g - m : g = a + m); J(a) && J(g) || (a = g = void 0); return { min: a, max: g }
- }; return a
- }(); return function () {
- function a () { } a.compose = function (a) {
- a.keepProps.push("navigatorAxis"); C(a, "init", function () { this.navigatorAxis || (this.navigatorAxis = new m(this)) }); C(a, "zoom", function (a) {
- var c = this.chart.options, d = c.navigator, g = this.navigatorAxis, l = c.chart.pinchType,
- m = c.rangeSelector; c = c.chart.zoomType; this.isXAxis && (d && d.enabled || m && m.enabled) && ("y" === c ? a.zoomed = !1 : (!A && "xy" === c || A && "xy" === l) && this.options.range && (d = g.previousZoom, H(a.newMin) ? g.previousZoom = [this.min, this.max] : d && (a.newMin = d[0], a.newMax = d[1], g.previousZoom = void 0))); "undefined" !== typeof a.zoomed && a.preventDefault()
- })
- }; a.AdditionsClass = m; return a
- }()
- }); O(a, "Core/Navigator.js", [a["Core/Axis/Axis.js"], a["Core/Chart/Chart.js"], a["Core/Color/Color.js"], a["Core/Globals.js"], a["Core/Axis/NavigatorAxis.js"],
- a["Core/DefaultOptions.js"], a["Core/Renderer/RendererRegistry.js"], a["Core/Scrollbar.js"], a["Core/Series/Series.js"], a["Core/Series/SeriesRegistry.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H, J, D, m, l, d) {
- A = A.parse; var g = G.hasTouch, c = G.isTouchDevice, t = H.defaultOptions, k = d.addEvent, C = d.clamp, E = d.correctFloat, F = d.defined, M = d.destroyObjectProperties, K = d.erase, w = d.extend, z = d.find, n = d.isArray, f = d.isNumber, u = d.merge, h = d.pick, r = d.removeEvent, e = d.splat, b = function (a) {
- for (var b = [], c = 1; c < arguments.length; c++)b[c -
- 1] = arguments[c]; b = [].filter.call(b, f); if (b.length) return Math[a].apply(0, b)
- }; H = "undefined" === typeof l.seriesTypes.areaspline ? "line" : "areaspline"; w(t, {
- navigator: {
- height: 40, margin: 25, maskInside: !0, handles: { width: 7, height: 15, symbols: ["navigator-handle", "navigator-handle"], enabled: !0, lineWidth: 1, backgroundColor: "#f2f2f2", borderColor: "#999999" }, maskFill: A("#6685c2").setOpacity(.3).get(), outlineColor: "#cccccc", outlineWidth: 1, series: {
- type: H, fillOpacity: .05, lineWidth: 1, compare: null, dataGrouping: {
- approximation: "average",
- enabled: !0, groupPixelWidth: 2, firstAnchor: "firstPoint", anchor: "middle", lastAnchor: "lastPoint", units: [["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, 3, 4]], ["week", [1, 2, 3]], ["month", [1, 3, 6]], ["year", null]]
- }, dataLabels: { enabled: !1, zIndex: 2 }, id: "highcharts-navigator-series", className: "highcharts-navigator-series", lineColor: null, marker: { enabled: !1 }, threshold: null
- }, xAxis: {
- overscroll: 0, className: "highcharts-navigator-xaxis",
- tickLength: 0, lineWidth: 0, gridLineColor: "#e6e6e6", gridLineWidth: 1, tickPixelInterval: 200, labels: { align: "left", style: { color: "#999999" }, x: 3, y: -4 }, crosshair: !1
- }, yAxis: { className: "highcharts-navigator-yaxis", gridLineWidth: 0, startOnTick: !1, endOnTick: !1, minPadding: .1, maxPadding: .1, labels: { enabled: !1 }, crosshair: !1, title: { text: null }, tickLength: 0, tickWidth: 0 }
- }
- }); J.getRendererType().prototype.symbols["navigator-handle"] = function (a, b, c, e, d) {
- a = (d && d.width || 0) / 2; b = Math.round(a / 3) + .5; d = d && d.height || 0; return [["M",
- -a - 1, .5], ["L", a, .5], ["L", a, d + .5], ["L", -a - 1, d + .5], ["L", -a - 1, .5], ["M", -b, 4], ["L", -b, d - 3], ["M", b - 1, 4], ["L", b - 1, d - 3]]
- }; var y = function () {
- function d (a) { this.zoomedMin = this.zoomedMax = this.yAxis = this.xAxis = this.top = this.size = this.shades = this.rendered = this.range = this.outlineHeight = this.outline = this.opposite = this.navigatorSize = this.navigatorSeries = this.navigatorOptions = this.navigatorGroup = this.navigatorEnabled = this.left = this.height = this.handles = this.chart = this.baseSeries = void 0; this.init(a) } d.prototype.drawHandle =
- function (a, b, c, e) { var d = this.navigatorOptions.handles.height; this.handles[b][e](c ? { translateX: Math.round(this.left + this.height / 2), translateY: Math.round(this.top + parseInt(a, 10) + .5 - d) } : { translateX: Math.round(this.left + parseInt(a, 10)), translateY: Math.round(this.top + this.height / 2 - d / 2 - 1) }) }; d.prototype.drawOutline = function (a, b, c, e) {
- var d = this.navigatorOptions.maskInside, f = this.outline.strokeWidth(), g = f / 2, h = f % 2 / 2; f = this.outlineHeight; var p = this.scrollbarHeight || 0, k = this.size, l = this.left - p, m = this.top; c ?
- (l -= g, c = m + b + h, b = m + a + h, h = [["M", l + f, m - p - h], ["L", l + f, c], ["L", l, c], ["L", l, b], ["L", l + f, b], ["L", l + f, m + k + p]], d && h.push(["M", l + f, c - g], ["L", l + f, b + g])) : (a += l + p - h, b += l + p - h, m += g, h = [["M", l, m], ["L", a, m], ["L", a, m + f], ["L", b, m + f], ["L", b, m], ["L", l + k + 2 * p, m]], d && h.push(["M", a - g, m], ["L", b + g, m])); this.outline[e]({ d: h })
- }; d.prototype.drawMasks = function (a, b, c, e) {
- var d = this.left, f = this.top, g = this.height; if (c) { var h = [d, d, d]; var p = [f, f + a, f + b]; var k = [g, g, g]; var l = [a, b - a, this.size - b] } else h = [d, d + a, d + b], p = [f, f, f], k = [a, b - a, this.size -
- b], l = [g, g, g]; this.shades.forEach(function (a, b) { a[e]({ x: h[b], y: p[b], width: k[b], height: l[b] }) })
- }; d.prototype.renderElements = function () {
- var a = this, b = a.navigatorOptions, c = b.maskInside, e = a.chart, d = e.renderer, f, g = { cursor: e.inverted ? "ns-resize" : "ew-resize" }; a.navigatorGroup = f = d.g("navigator").attr({ zIndex: 8, visibility: "hidden" }).add();[!c, c, !c].forEach(function (c, h) {
- var p = d.rect().addClass("highcharts-navigator-mask" + (1 === h ? "-inside" : "-outside")).add(f); e.styledMode || (p.attr({ fill: c ? b.maskFill : "rgba(0,0,0,0)" }),
- 1 === h && p.css(g)); a.shades[h] = p
- }); a.outline = d.path().addClass("highcharts-navigator-outline").add(f); e.styledMode || a.outline.attr({ "stroke-width": b.outlineWidth, stroke: b.outlineColor }); b.handles.enabled && [0, 1].forEach(function (c) {
- b.handles.inverted = e.inverted; a.handles[c] = d.symbol(b.handles.symbols[c], -b.handles.width / 2 - 1, 0, b.handles.width, b.handles.height, b.handles); a.handles[c].attr({ zIndex: 7 - c }).addClass("highcharts-navigator-handle highcharts-navigator-handle-" + ["left", "right"][c]).add(f); if (!e.styledMode) {
- var h =
- b.handles; a.handles[c].attr({ fill: h.backgroundColor, stroke: h.borderColor, "stroke-width": h.lineWidth }).css(g)
- }
- })
- }; d.prototype.update = function (a) { (this.series || []).forEach(function (a) { a.baseSeries && delete a.baseSeries.navigatorSeries }); this.destroy(); u(!0, this.chart.options.navigator, this.options, a); this.init(this.chart) }; d.prototype.render = function (a, b, c, e) {
- var d = this.chart, g = this.scrollbarHeight, p, k = this.xAxis, l = k.pointRange || 0; var m = k.navigatorAxis.fake ? d.xAxis[0] : k; var n = this.navigatorEnabled, v,
- q = this.rendered; var r = d.inverted; var t = d.xAxis[0].minRange, u = d.xAxis[0].options.maxRange; if (!this.hasDragged || F(c)) {
- a = E(a - l / 2); b = E(b + l / 2); if (!f(a) || !f(b)) if (q) c = 0, e = h(k.width, m.width); else return; this.left = h(k.left, d.plotLeft + g + (r ? d.plotWidth : 0)); this.size = v = p = h(k.len, (r ? d.plotHeight : d.plotWidth) - 2 * g); d = r ? g : p + 2 * g; c = h(c, k.toPixels(a, !0)); e = h(e, k.toPixels(b, !0)); f(c) && Infinity !== Math.abs(c) || (c = 0, e = d); a = k.toValue(c, !0); b = k.toValue(e, !0); var y = Math.abs(E(b - a)); y < t ? this.grabbedLeft ? c = k.toPixels(b - t - l,
- !0) : this.grabbedRight && (e = k.toPixels(a + t + l, !0)) : F(u) && E(y - l) > u && (this.grabbedLeft ? c = k.toPixels(b - u - l, !0) : this.grabbedRight && (e = k.toPixels(a + u + l, !0))); this.zoomedMax = C(Math.max(c, e), 0, v); this.zoomedMin = C(this.fixedWidth ? this.zoomedMax - this.fixedWidth : Math.min(c, e), 0, v); this.range = this.zoomedMax - this.zoomedMin; v = Math.round(this.zoomedMax); c = Math.round(this.zoomedMin); n && (this.navigatorGroup.attr({ visibility: "inherit" }), q = q && !this.hasDragged ? "animate" : "attr", this.drawMasks(c, v, r, q), this.drawOutline(c,
- v, r, q), this.navigatorOptions.handles.enabled && (this.drawHandle(c, 0, r, q), this.drawHandle(v, 1, r, q))); this.scrollbar && (r ? (r = this.top - g, m = this.left - g + (n || !m.opposite ? 0 : (m.titleOffset || 0) + m.axisTitleMargin), g = p + 2 * g) : (r = this.top + (n ? this.height : -g), m = this.left - g), this.scrollbar.position(m, r, d, g), this.scrollbar.setRange(this.zoomedMin / (p || 1), this.zoomedMax / (p || 1))); this.rendered = !0
- }
- }; d.prototype.addMouseEvents = function () {
- var a = this, b = a.chart, c = b.container, e = [], d, f; a.mouseMoveHandler = d = function (b) { a.onMouseMove(b) };
- a.mouseUpHandler = f = function (b) { a.onMouseUp(b) }; e = a.getPartsEvents("mousedown"); e.push(k(b.renderTo, "mousemove", d), k(c.ownerDocument, "mouseup", f)); g && (e.push(k(b.renderTo, "touchmove", d), k(c.ownerDocument, "touchend", f)), e.concat(a.getPartsEvents("touchstart"))); a.eventsToUnbind = e; a.series && a.series[0] && e.push(k(a.series[0].xAxis, "foundExtremes", function () { b.navigator.modifyNavigatorAxisExtremes() }))
- }; d.prototype.getPartsEvents = function (a) {
- var b = this, c = [];["shades", "handles"].forEach(function (e) {
- b[e].forEach(function (d,
- f) { c.push(k(d.element, a, function (a) { b[e + "Mousedown"](a, f) })) })
- }); return c
- }; d.prototype.shadesMousedown = function (a, b) {
- a = this.chart.pointer.normalize(a); var c = this.chart, e = this.xAxis, d = this.zoomedMin, f = this.left, g = this.size, h = this.range, k = a.chartX; c.inverted && (k = a.chartY, f = this.top); if (1 === b) this.grabbedCenter = k, this.fixedWidth = h, this.dragOffset = k - d; else {
- a = k - f - h / 2; if (0 === b) a = Math.max(0, a); else if (2 === b && a + h >= g) if (a = g - h, this.reversedExtremes) { a -= h; var p = this.getUnionExtremes().dataMin } else var l = this.getUnionExtremes().dataMax;
- a !== d && (this.fixedWidth = h, b = e.navigatorAxis.toFixedRange(a, a + h, p, l), F(b.min) && c.xAxis[0].setExtremes(Math.min(b.min, b.max), Math.max(b.min, b.max), !0, null, { trigger: "navigator" }))
- }
- }; d.prototype.handlesMousedown = function (a, b) {
- this.chart.pointer.normalize(a); a = this.chart; var c = a.xAxis[0], e = this.reversedExtremes; 0 === b ? (this.grabbedLeft = !0, this.otherHandlePos = this.zoomedMax, this.fixedExtreme = e ? c.min : c.max) : (this.grabbedRight = !0, this.otherHandlePos = this.zoomedMin, this.fixedExtreme = e ? c.max : c.min); a.fixedRange =
- null
- }; d.prototype.onMouseMove = function (a) {
- var b = this, e = b.chart, d = b.left, f = b.navigatorSize, g = b.range, k = b.dragOffset, p = e.inverted; a.touches && 0 === a.touches[0].pageX || (a = e.pointer.normalize(a), e = a.chartX, p && (d = b.top, e = a.chartY), b.grabbedLeft ? (b.hasDragged = !0, b.render(0, 0, e - d, b.otherHandlePos)) : b.grabbedRight ? (b.hasDragged = !0, b.render(0, 0, b.otherHandlePos, e - d)) : b.grabbedCenter && (b.hasDragged = !0, e < k ? e = k : e > f + k - g && (e = f + k - g), b.render(0, 0, e - k, e - k + g)), b.hasDragged && b.scrollbar && h(b.scrollbar.options.liveRedraw,
- G.svg && !c && !this.chart.isBoosting) && (a.DOMType = a.type, setTimeout(function () { b.onMouseUp(a) }, 0)))
- }; d.prototype.onMouseUp = function (a) {
- var b = this.chart, c = this.xAxis, e = this.scrollbar, d = a.DOMEvent || a, g = b.inverted, h = this.rendered && !this.hasDragged ? "animate" : "attr"; if (this.hasDragged && (!e || !e.hasDragged) || "scrollbar" === a.trigger) {
- e = this.getUnionExtremes(); if (this.zoomedMin === this.otherHandlePos) var k = this.fixedExtreme; else if (this.zoomedMax === this.otherHandlePos) var p = this.fixedExtreme; this.zoomedMax ===
- this.size && (p = this.reversedExtremes ? e.dataMin : e.dataMax); 0 === this.zoomedMin && (k = this.reversedExtremes ? e.dataMax : e.dataMin); c = c.navigatorAxis.toFixedRange(this.zoomedMin, this.zoomedMax, k, p); F(c.min) && b.xAxis[0].setExtremes(Math.min(c.min, c.max), Math.max(c.min, c.max), !0, this.hasDragged ? !1 : null, { trigger: "navigator", triggerOp: "navigator-drag", DOMEvent: d })
- } "mousemove" !== a.DOMType && "touchmove" !== a.DOMType && (this.grabbedLeft = this.grabbedRight = this.grabbedCenter = this.fixedWidth = this.fixedExtreme = this.otherHandlePos =
- this.hasDragged = this.dragOffset = null); this.navigatorEnabled && f(this.zoomedMin) && f(this.zoomedMax) && (b = Math.round(this.zoomedMin), a = Math.round(this.zoomedMax), this.shades && this.drawMasks(b, a, g, h), this.outline && this.drawOutline(b, a, g, h), this.navigatorOptions.handles.enabled && Object.keys(this.handles).length === this.handles.length && (this.drawHandle(b, 0, g, h), this.drawHandle(a, 1, g, h)))
- }; d.prototype.removeEvents = function () {
- this.eventsToUnbind && (this.eventsToUnbind.forEach(function (a) { a() }), this.eventsToUnbind =
- void 0); this.removeBaseSeriesEvents()
- }; d.prototype.removeBaseSeriesEvents = function () { var a = this.baseSeries || []; this.navigatorEnabled && a[0] && (!1 !== this.navigatorOptions.adaptToUpdatedData && a.forEach(function (a) { r(a, "updatedData", this.updatedDataHandler) }, this), a[0].xAxis && r(a[0].xAxis, "foundExtremes", this.modifyBaseAxisExtremes)) }; d.prototype.init = function (c) {
- var e = c.options, d = e.navigator, f = d.enabled, g = e.scrollbar, l = g.enabled; e = f ? d.height : 0; var p = l ? g.height : 0; this.handles = []; this.shades = []; this.chart =
- c; this.setBaseSeries(); this.height = e; this.scrollbarHeight = p; this.scrollbarEnabled = l; this.navigatorEnabled = f; this.navigatorOptions = d; this.scrollbarOptions = g; this.outlineHeight = e + p; this.opposite = h(d.opposite, !(f || !c.inverted)); var m = this; f = m.baseSeries; g = c.xAxis.length; l = c.yAxis.length; var n = f && f[0] && f[0].xAxis || c.xAxis[0] || { options: {} }; c.isDirtyBox = !0; m.navigatorEnabled ? (m.xAxis = new a(c, u({ breaks: n.options.breaks, ordinal: n.options.ordinal }, d.xAxis, {
- id: "navigator-x-axis", yAxis: "navigator-y-axis", isX: !0,
- type: "datetime", index: g, isInternal: !0, offset: 0, keepOrdinalPadding: !0, startOnTick: !1, endOnTick: !1, minPadding: 0, maxPadding: 0, zoomEnabled: !1
- }, c.inverted ? { offsets: [p, 0, -p, 0], width: e } : { offsets: [0, -p, 0, p], height: e })), m.yAxis = new a(c, u(d.yAxis, { id: "navigator-y-axis", alignTicks: !1, offset: 0, index: l, isInternal: !0, reversed: h(d.yAxis && d.yAxis.reversed, c.yAxis[0] && c.yAxis[0].reversed, !1), zoomEnabled: !1 }, c.inverted ? { width: e } : { height: e })), f || d.series.data ? m.updateNavigatorSeries(!1) : 0 === c.series.length && (m.unbindRedraw =
- k(c, "beforeRedraw", function () { 0 < c.series.length && !m.series && (m.setBaseSeries(), m.unbindRedraw()) })), m.reversedExtremes = c.inverted && !m.xAxis.reversed || !c.inverted && m.xAxis.reversed, m.renderElements(), m.addMouseEvents()) : (m.xAxis = {
- chart: c, navigatorAxis: { fake: !0 }, translate: function (a, e) { var d = c.xAxis[0], f = d.getExtremes(), g = d.len - 2 * p, h = b("min", d.options.min, f.dataMin); d = b("max", d.options.max, f.dataMax) - h; return e ? a * d / g + h : g * (a - h) / d }, toPixels: function (a) { return this.translate(a) }, toValue: function (a) {
- return this.translate(a,
- !0)
- }
- }, m.xAxis.navigatorAxis.axis = m.xAxis, m.xAxis.navigatorAxis.toFixedRange = x.AdditionsClass.prototype.toFixedRange.bind(m.xAxis.navigatorAxis)); c.options.scrollbar.enabled && (c.scrollbar = m.scrollbar = new D(c.renderer, u(c.options.scrollbar, { margin: m.navigatorEnabled ? 0 : 10, vertical: c.inverted }), c), k(m.scrollbar, "changed", function (a) { var b = m.size, c = b * this.to; b *= this.from; m.hasDragged = m.scrollbar.hasDragged; m.render(0, 0, b, c); this.shouldUpdateExtremes(a.DOMType) && setTimeout(function () { m.onMouseUp(a) }) }));
- m.addBaseSeriesEvents(); m.addChartEvents()
- }; d.prototype.getUnionExtremes = function (a) { var c = this.chart.xAxis[0], e = this.xAxis, d = e.options, f = c.options, g; a && null === c.dataMin || (g = { dataMin: h(d && d.min, b("min", f.min, c.dataMin, e.dataMin, e.min)), dataMax: h(d && d.max, b("max", f.max, c.dataMax, e.dataMax, e.max)) }); return g }; d.prototype.setBaseSeries = function (a, b) {
- var c = this.chart, e = this.baseSeries = []; a = a || c.options && c.options.navigator.baseSeries || (c.series.length ? z(c.series, function (a) { return !a.options.isInternal }).index :
- 0); (c.series || []).forEach(function (b, c) { b.options.isInternal || !b.options.showInNavigator && (c !== a && b.options.id !== a || !1 === b.options.showInNavigator) || e.push(b) }); this.xAxis && !this.xAxis.navigatorAxis.fake && this.updateNavigatorSeries(!0, b)
- }; d.prototype.updateNavigatorSeries = function (a, b) {
- var c = this, d = c.chart, f = c.baseSeries, g, k, l = c.navigatorOptions.series, p, m = {
- enableMouseTracking: !1, index: null, linkedTo: null, group: "nav", padXAxis: !1, xAxis: "navigator-x-axis", yAxis: "navigator-y-axis", showInLegend: !1, stacking: void 0,
- isInternal: !0, states: { inactive: { opacity: 1 } }
- }, v = c.series = (c.series || []).filter(function (a) { var b = a.baseSeries; return 0 > f.indexOf(b) ? (b && (r(b, "updatedData", c.updatedDataHandler), delete b.navigatorSeries), a.chart && a.destroy(), !1) : !0 }); f && f.length && f.forEach(function (a) {
- var q = a.navigatorSeries, r = w({ color: a.color, visible: a.visible }, n(l) ? t.navigator.series : l); q && !1 === c.navigatorOptions.adaptToUpdatedData || (m.name = "Navigator " + f.length, g = a.options || {}, p = g.navigatorOptions || {}, r.dataLabels = e(r.dataLabels),
- k = u(g, m, r, p), k.pointRange = h(r.pointRange, p.pointRange, t.plotOptions[k.type || "line"].pointRange), r = p.data || r.data, c.hasNavigatorData = c.hasNavigatorData || !!r, k.data = r || g.data && g.data.slice(0), q && q.options ? q.update(k, b) : (a.navigatorSeries = d.initSeries(k), a.navigatorSeries.baseSeries = a, v.push(a.navigatorSeries)))
- }); if (l.data && (!f || !f.length) || n(l)) c.hasNavigatorData = !1, l = e(l), l.forEach(function (a, b) {
- m.name = "Navigator " + (v.length + 1); k = u(t.navigator.series, {
- color: d.series[b] && !d.series[b].options.isInternal &&
- d.series[b].color || d.options.colors[b] || d.options.colors[0]
- }, m, a); k.data = a.data; k.data && (c.hasNavigatorData = !0, v.push(d.initSeries(k)))
- }); a && this.addBaseSeriesEvents()
- }; d.prototype.addBaseSeriesEvents = function () {
- var a = this, b = a.baseSeries || []; b[0] && b[0].xAxis && b[0].eventsToUnbind.push(k(b[0].xAxis, "foundExtremes", this.modifyBaseAxisExtremes)); b.forEach(function (b) {
- b.eventsToUnbind.push(k(b, "show", function () { this.navigatorSeries && this.navigatorSeries.setVisible(!0, !1) })); b.eventsToUnbind.push(k(b, "hide",
- function () { this.navigatorSeries && this.navigatorSeries.setVisible(!1, !1) })); !1 !== this.navigatorOptions.adaptToUpdatedData && b.xAxis && b.eventsToUnbind.push(k(b, "updatedData", this.updatedDataHandler)); b.eventsToUnbind.push(k(b, "remove", function () { this.navigatorSeries && (K(a.series, this.navigatorSeries), F(this.navigatorSeries.options) && this.navigatorSeries.remove(!1), delete this.navigatorSeries) }))
- }, this)
- }; d.prototype.getBaseSeriesMin = function (a) {
- return this.baseSeries.reduce(function (a, b) {
- return Math.min(a,
- b.xData && b.xData.length ? b.xData[0] : a)
- }, a)
- }; d.prototype.modifyNavigatorAxisExtremes = function () { var a = this.xAxis, b; "undefined" !== typeof a.getExtremes && (!(b = this.getUnionExtremes(!0)) || b.dataMin === a.min && b.dataMax === a.max || (a.min = b.dataMin, a.max = b.dataMax)) }; d.prototype.modifyBaseAxisExtremes = function () {
- var a = this.chart.navigator, b = this.getExtremes(), c = b.dataMin, e = b.dataMax; b = b.max - b.min; var d = a.stickToMin, g = a.stickToMax, k = h(this.options.overscroll, 0), l = a.series && a.series[0], m = !!this.setExtremes; if (!this.eventArgs ||
- "rangeSelectorButton" !== this.eventArgs.trigger) { if (d) { var n = c; var q = n + b } g && (q = e + k, d || (n = Math.max(c, q - b, a.getBaseSeriesMin(l && l.xData ? l.xData[0] : -Number.MAX_VALUE)))); m && (d || g) && f(n) && (this.min = this.userMin = n, this.max = this.userMax = q) } a.stickToMin = a.stickToMax = null
- }; d.prototype.updatedDataHandler = function () {
- var a = this.chart.navigator, b = this.navigatorSeries; a.stickToMax = a.reversedExtremes ? 0 === Math.round(a.zoomedMin) : Math.round(a.zoomedMax) >= Math.round(a.size); a.stickToMin = a.shouldStickToMin(this, a);
- b && !a.hasNavigatorData && (b.options.pointStart = this.xData[0], b.setData(this.options.data, !1, null, !1))
- }; d.prototype.shouldStickToMin = function (a, b) { b = b.getBaseSeriesMin(a.xData[0]); var c = a.xAxis; a = c.max; var e = c.min; c = c.options.range; return f(a) && f(e) ? c && 0 < a - b ? a - b < c : e <= b : !1 }; d.prototype.addChartEvents = function () {
- this.eventsToUnbind || (this.eventsToUnbind = []); this.eventsToUnbind.push(k(this.chart, "redraw", function () {
- var a = this.navigator, b = a && (a.baseSeries && a.baseSeries[0] && a.baseSeries[0].xAxis || this.xAxis[0]);
- b && a.render(b.min, b.max)
- }), k(this.chart, "getMargins", function () { var a = this.navigator, b = a.opposite ? "plotTop" : "marginBottom"; this.inverted && (b = a.opposite ? "marginRight" : "plotLeft"); this[b] = (this[b] || 0) + (a.navigatorEnabled || !this.inverted ? a.outlineHeight : 0) + a.navigatorOptions.margin }))
- }; d.prototype.destroy = function () {
- this.removeEvents(); this.xAxis && (K(this.chart.xAxis, this.xAxis), K(this.chart.axes, this.xAxis)); this.yAxis && (K(this.chart.yAxis, this.yAxis), K(this.chart.axes, this.yAxis)); (this.series || []).forEach(function (a) {
- a.destroy &&
- a.destroy()
- }); "series xAxis yAxis shades outline scrollbarTrack scrollbarRifles scrollbarGroup scrollbar navigatorGroup rendered".split(" ").forEach(function (a) { this[a] && this[a].destroy && this[a].destroy(); this[a] = null }, this);[this.handles].forEach(function (a) { M(a) }, this)
- }; return d
- }(); G.Navigator || (G.Navigator = y, x.compose(a), k(q, "beforeShowResetZoom", function () { var a = this.options, b = a.navigator, e = a.rangeSelector; if ((b && b.enabled || e && e.enabled) && (!c && "x" === a.chart.zoomType || c && "x" === a.chart.pinchType)) return !1 }),
- k(q, "beforeRender", function () { var a = this.options; if (a.navigator.enabled || a.scrollbar.enabled) this.scroller = this.navigator = new y(this) }), k(q, "afterSetChartSize", function () {
- var a = this.legend, b = this.navigator; if (b) {
- var c = a && a.options; var e = b.xAxis; var d = b.yAxis; var f = b.scrollbarHeight; this.inverted ? (b.left = b.opposite ? this.chartWidth - f - b.height : this.spacing[3] + f, b.top = this.plotTop + f) : (b.left = h(e.left, this.plotLeft + f), b.top = b.navigatorOptions.top || this.chartHeight - b.height - f - this.spacing[2] - (this.rangeSelector &&
- this.extraBottomMargin ? this.rangeSelector.getHeight() : 0) - (c && "bottom" === c.verticalAlign && "proximate" !== c.layout && c.enabled && !c.floating ? a.legendHeight + h(c.margin, 10) : 0) - (this.titleOffset ? this.titleOffset[2] : 0)); e && d && (this.inverted ? e.options.left = d.options.left = b.left : e.options.top = d.options.top = b.top, e.setAxisSize(), d.setAxisSize())
- }
- }), k(q, "update", function (a) {
- var b = a.options.navigator || {}, c = a.options.scrollbar || {}; this.navigator || this.scroller || !b.enabled && !c.enabled || (u(!0, this.options.navigator,
- b), u(!0, this.options.scrollbar, c), delete a.options.navigator, delete a.options.scrollbar)
- }), k(q, "afterUpdate", function (a) { this.navigator || this.scroller || !this.options.navigator.enabled && !this.options.scrollbar.enabled || (this.scroller = this.navigator = new y(this), h(a.redraw, !0) && this.redraw(a.animation)) }), k(q, "afterAddSeries", function () { this.navigator && this.navigator.setBaseSeries(null, !1) }), k(m, "afterUpdate", function () {
- this.chart.navigator && !this.options.isInternal && this.chart.navigator.setBaseSeries(null,
- !1)
- }), q.prototype.callbacks.push(function (a) { var b = a.navigator; b && a.xAxis[0] && (a = a.xAxis[0].getExtremes(), b.render(a.min, a.max)) })); G.Navigator = y; return G.Navigator
- }); O(a, "Extensions/RangeSelector.js", [a["Core/Axis/Axis.js"], a["Core/Chart/Chart.js"], a["Core/Globals.js"], a["Core/DefaultOptions.js"], a["Core/Renderer/SVG/SVGElement.js"], a["Core/Utilities.js"]], function (a, q, A, G, x, H) {
- function C (a) {
- if (-1 !== a.indexOf("%L")) return "text"; var b = "aAdewbBmoyY".split("").some(function (b) {
- return -1 !== a.indexOf("%" +
- b)
- }), c = "HkIlMS".split("").some(function (b) { return -1 !== a.indexOf("%" + b) }); return b && c ? "datetime-local" : b ? "date" : c ? "time" : "text"
- } var D = G.defaultOptions, m = H.addEvent, l = H.createElement, d = H.css, g = H.defined, c = H.destroyObjectProperties, t = H.discardElement, k = H.extend, B = H.find, E = H.fireEvent, F = H.isNumber, M = H.merge, K = H.objectEach, w = H.pad, z = H.pick, n = H.pInt, f = H.splat; k(D, {
- rangeSelector: {
- allButtonsEnabled: !1, buttons: void 0, buttonSpacing: 5, dropdown: "responsive", enabled: void 0, verticalAlign: "top", buttonTheme: {
- width: 28,
- height: 18, padding: 2, zIndex: 7
- }, floating: !1, x: 0, y: 0, height: void 0, inputBoxBorderColor: "none", inputBoxHeight: 17, inputBoxWidth: void 0, inputDateFormat: "%b %e, %Y", inputDateParser: void 0, inputEditDateFormat: "%Y-%m-%d", inputEnabled: !0, inputPosition: { align: "right", x: 0, y: 0 }, inputSpacing: 5, selected: void 0, buttonPosition: { align: "left", x: 0, y: 0 }, inputStyle: { color: "#335cad", cursor: "pointer" }, labelStyle: { color: "#666666" }
- }
- }); k(D.lang, { rangeSelectorZoom: "Zoom", rangeSelectorFrom: "", rangeSelectorTo: "\u2192" }); var u =
- function () {
- function e (a) { this.buttons = void 0; this.buttonOptions = e.prototype.defaultButtons; this.initialButtonGroupWidth = 0; this.options = void 0; this.chart = a; this.init(a) } e.prototype.clickButton = function (b, c) {
- var e = this.chart, d = this.buttonOptions[b], h = e.xAxis[0], k = e.scroller && e.scroller.getUnionExtremes() || h || {}, l = k.dataMin, n = k.dataMax, q = h && Math.round(Math.min(h.max, z(n, h.max))), r = d.type; k = d._range; var t, u = d.dataGrouping; if (null !== l && null !== n) {
- e.fixedRange = k; this.setSelected(b); u && (this.forcedDataGrouping =
- !0, a.prototype.setDataGrouping.call(h || { chart: this.chart }, u, !1), this.frozenStates = d.preserveDataGrouping); if ("month" === r || "year" === r) if (h) { r = { range: d, max: q, chart: e, dataMin: l, dataMax: n }; var y = h.minFromRange.call(r); F(r.newMax) && (q = r.newMax) } else k = d; else if (k) y = Math.max(q - k, l), q = Math.min(y + k, n); else if ("ytd" === r) if (h) "undefined" === typeof n && (l = Number.MAX_VALUE, n = Number.MIN_VALUE, e.series.forEach(function (a) { a = a.xData; l = Math.min(a[0], l); n = Math.max(a[a.length - 1], n) }), c = !1), q = this.getYTDExtremes(n, l,
- e.time.useUTC), y = t = q.min, q = q.max; else { this.deferredYTDClick = b; return } else "all" === r && h && (e.navigator && e.navigator.baseSeries[0] && (e.navigator.baseSeries[0].xAxis.options.range = void 0), y = l, q = n); g(y) && (y += d._offsetMin); g(q) && (q += d._offsetMax); this.dropdown && (this.dropdown.selectedIndex = b + 1); if (h) h.setExtremes(y, q, z(c, !0), void 0, { trigger: "rangeSelectorButton", rangeSelectorButton: d }); else { var w = f(e.options.xAxis)[0]; var x = w.range; w.range = k; var A = w.min; w.min = t; m(e, "load", function () { w.range = x; w.min = A }) } E(this,
- "afterBtnClick")
- }
- }; e.prototype.setSelected = function (a) { this.selected = this.options.selected = a }; e.prototype.init = function (a) {
- var b = this, c = a.options.rangeSelector, e = c.buttons || b.defaultButtons.slice(), d = c.selected, f = function () { var a = b.minInput, c = b.maxInput; a && a.blur && E(a, "blur"); c && c.blur && E(c, "blur") }; b.chart = a; b.options = c; b.buttons = []; b.buttonOptions = e; this.eventsToUnbind = []; this.eventsToUnbind.push(m(a.container, "mousedown", f)); this.eventsToUnbind.push(m(a, "resize", f)); e.forEach(b.computeButtonRange);
- "undefined" !== typeof d && e[d] && this.clickButton(d, !1); this.eventsToUnbind.push(m(a, "load", function () { a.xAxis && a.xAxis[0] && m(a.xAxis[0], "setExtremes", function (c) { this.max - this.min !== a.fixedRange && "rangeSelectorButton" !== c.trigger && "updatedData" !== c.trigger && b.forcedDataGrouping && !b.frozenStates && this.setDataGrouping(!1, !1) }) }))
- }; e.prototype.updateButtonStates = function () {
- var a = this, c = this.chart, e = this.dropdown, d = c.xAxis[0], f = Math.round(d.max - d.min), g = !d.hasVisibleSeries, h = c.scroller && c.scroller.getUnionExtremes() ||
- d, k = h.dataMin, l = h.dataMax; c = a.getYTDExtremes(l, k, c.time.useUTC); var m = c.min, n = c.max, q = a.selected, r = F(q), t = a.options.allButtonsEnabled, u = a.buttons; a.buttonOptions.forEach(function (b, c) {
- var h = b._range, p = b.type, v = b.count || 1, y = u[c], w = 0, x = b._offsetMax - b._offsetMin; b = c === q; var z = h > l - k, A = h < d.minRange, I = !1, C = !1; h = h === f; ("month" === p || "year" === p) && f + 36E5 >= 864E5 * { month: 28, year: 365 }[p] * v - x && f - 36E5 <= 864E5 * { month: 31, year: 366 }[p] * v + x ? h = !0 : "ytd" === p ? (h = n - m + x === f, I = !b) : "all" === p && (h = d.max - d.min >= l - k, C = !b && r && h); p =
- !t && (z || A || C || g); v = b && h || h && !r && !I || b && a.frozenStates; p ? w = 3 : v && (r = !0, w = 2); y.state !== w && (y.setState(w), e && (e.options[c + 1].disabled = p, 2 === w && (e.selectedIndex = c + 1)), 0 === w && q === c && a.setSelected())
- })
- }; e.prototype.computeButtonRange = function (a) {
- var b = a.type, c = a.count || 1, e = { millisecond: 1, second: 1E3, minute: 6E4, hour: 36E5, day: 864E5, week: 6048E5 }; if (e[b]) a._range = e[b] * c; else if ("month" === b || "year" === b) a._range = 864E5 * { month: 30, year: 365 }[b] * c; a._offsetMin = z(a.offsetMin, 0); a._offsetMax = z(a.offsetMax, 0); a._range +=
- a._offsetMax - a._offsetMin
- }; e.prototype.getInputValue = function (a) { a = "min" === a ? this.minInput : this.maxInput; var b = this.chart.options.rangeSelector, c = this.chart.time; return a ? ("text" === a.type && b.inputDateParser || this.defaultInputDateParser)(a.value, c.useUTC, c) : 0 }; e.prototype.setInputValue = function (a, c) {
- var b = this.options, e = this.chart.time, d = "min" === a ? this.minInput : this.maxInput; a = "min" === a ? this.minDateBox : this.maxDateBox; if (d) {
- var f = d.getAttribute("data-hc-time"); f = g(f) ? Number(f) : void 0; g(c) && (g(f) &&
- d.setAttribute("data-hc-time-previous", f), d.setAttribute("data-hc-time", c), f = c); d.value = e.dateFormat(this.inputTypeFormats[d.type] || b.inputEditDateFormat, f); a && a.attr({ text: e.dateFormat(b.inputDateFormat, f) })
- }
- }; e.prototype.setInputExtremes = function (a, c, e) { if (a = "min" === a ? this.minInput : this.maxInput) { var b = this.inputTypeFormats[a.type], d = this.chart.time; b && (c = d.dateFormat(b, c), a.min !== c && (a.min = c), e = d.dateFormat(b, e), a.max !== e && (a.max = e)) } }; e.prototype.showInput = function (a) {
- var b = "min" === a ? this.minDateBox :
- this.maxDateBox; if ((a = "min" === a ? this.minInput : this.maxInput) && b && this.inputGroup) { var c = "text" === a.type, e = this.inputGroup, f = e.translateX; e = e.translateY; var g = this.options.inputBoxWidth; d(a, { width: c ? b.width + (g ? -2 : 20) + "px" : "auto", height: c ? b.height - 2 + "px" : "auto", border: "2px solid silver" }); c && g ? d(a, { left: f + b.x + "px", top: e + "px" }) : d(a, { left: Math.min(Math.round(b.x + f - (a.offsetWidth - b.width) / 2), this.chart.chartWidth - a.offsetWidth) + "px", top: e - (a.offsetHeight - b.height) / 2 + "px" }) }
- }; e.prototype.hideInput = function (a) {
- (a =
- "min" === a ? this.minInput : this.maxInput) && d(a, { top: "-9999em", border: 0, width: "1px", height: "1px" })
- }; e.prototype.defaultInputDateParser = function (a, c, e) {
- var b = a.split("/").join("-").split(" ").join("T"); -1 === b.indexOf("T") && (b += "T00:00"); if (c) b += "Z"; else { var d; if (d = A.isSafari) d = b, d = !(6 < d.length && (d.lastIndexOf("-") === d.length - 6 || d.lastIndexOf("+") === d.length - 6)); d && (d = (new Date(b)).getTimezoneOffset() / 60, b += 0 >= d ? "+".concat(w(-d), ":00") : "-".concat(w(d), ":00")) } b = Date.parse(b); F(b) || (a = a.split("-"), b = Date.UTC(n(a[0]),
- n(a[1]) - 1, n(a[2]))); e && c && F(b) && (b += e.getTimezoneOffset(b)); return b
- }; e.prototype.drawInput = function (a) {
- function b () {
- var b = g.getInputValue(a), e = c.xAxis[0], d = c.scroller && c.scroller.xAxis ? c.scroller.xAxis : e, f = d.dataMin; d = d.dataMax; var h = g.maxInput, k = g.minInput; b !== Number(t.getAttribute("data-hc-time-previous")) && F(b) && (t.setAttribute("data-hc-time-previous", b), q && h && F(f) ? b > Number(h.getAttribute("data-hc-time")) ? b = void 0 : b < f && (b = f) : k && F(d) && (b < Number(k.getAttribute("data-hc-time")) ? b = void 0 : b > d && (b =
- d)), "undefined" !== typeof b && e.setExtremes(q ? b : e.min, q ? e.max : b, void 0, void 0, { trigger: "rangeSelectorInput" }))
- } var c = this.chart, e = this.div, f = this.inputGroup, g = this, h = c.renderer.style || {}, m = c.renderer, n = c.options.rangeSelector, q = "min" === a, r = D.lang[q ? "rangeSelectorFrom" : "rangeSelectorTo"] || ""; r = m.label(r, 0).addClass("highcharts-range-label").attr({ padding: r ? 2 : 0, height: r ? n.inputBoxHeight : 0 }).add(f); m = m.label("", 0).addClass("highcharts-range-input").attr({
- padding: 2, width: n.inputBoxWidth, height: n.inputBoxHeight,
- "text-align": "center"
- }).on("click", function () { g.showInput(a); g[a + "Input"].focus() }); c.styledMode || m.attr({ stroke: n.inputBoxBorderColor, "stroke-width": 1 }); m.add(f); var t = l("input", { name: a, className: "highcharts-range-selector" }, void 0, e); t.setAttribute("type", C(n.inputDateFormat || "%b %e, %Y")); c.styledMode || (r.css(M(h, n.labelStyle)), m.css(M({ color: "#333333" }, h, n.inputStyle)), d(t, k({
- position: "absolute", border: 0, boxShadow: "0 0 15px rgba(0,0,0,0.3)", width: "1px", height: "1px", padding: 0, textAlign: "center",
- fontSize: h.fontSize, fontFamily: h.fontFamily, top: "-9999em"
- }, n.inputStyle))); t.onfocus = function () { g.showInput(a) }; t.onblur = function () { t === A.doc.activeElement && b(); g.hideInput(a); g.setInputValue(a); t.blur() }; var u = !1; t.onchange = function () { u || (b(), g.hideInput(a), t.blur()) }; t.onkeypress = function (a) { 13 === a.keyCode && b() }; t.onkeydown = function (a) { u = !0; 38 !== a.keyCode && 40 !== a.keyCode || b() }; t.onkeyup = function () { u = !1 }; return { dateBox: m, input: t, label: r }
- }; e.prototype.getPosition = function () {
- var a = this.chart, c = a.options.rangeSelector;
- a = "top" === c.verticalAlign ? a.plotTop - a.axisOffset[0] : 0; return { buttonTop: a + c.buttonPosition.y, inputTop: a + c.inputPosition.y - 10 }
- }; e.prototype.getYTDExtremes = function (a, c, e) { var b = this.chart.time, d = new b.Date(a), f = b.get("FullYear", d); e = e ? b.Date.UTC(f, 0, 1) : +new b.Date(f, 0, 1); c = Math.max(c, e); d = d.getTime(); return { max: Math.min(a || d, d), min: c } }; e.prototype.render = function (a, c) {
- var b = this.chart, e = b.renderer, d = b.container, f = b.options, h = f.rangeSelector, k = z(f.chart.style && f.chart.style.zIndex, 0) + 1; f = h.inputEnabled;
- if (!1 !== h.enabled) {
- this.rendered || (this.group = e.g("range-selector-group").attr({ zIndex: 7 }).add(), this.div = l("div", void 0, { position: "relative", height: 0, zIndex: k }), this.buttonOptions.length && this.renderButtons(), d.parentNode && d.parentNode.insertBefore(this.div, d), f && (this.inputGroup = e.g("input-group").add(this.group), e = this.drawInput("min"), this.minDateBox = e.dateBox, this.minLabel = e.label, this.minInput = e.input, e = this.drawInput("max"), this.maxDateBox = e.dateBox, this.maxLabel = e.label, this.maxInput = e.input));
- if (f && (this.setInputValue("min", a), this.setInputValue("max", c), a = b.scroller && b.scroller.getUnionExtremes() || b.xAxis[0] || {}, g(a.dataMin) && g(a.dataMax) && (b = b.xAxis[0].minRange || 0, this.setInputExtremes("min", a.dataMin, Math.min(a.dataMax, this.getInputValue("max")) - b), this.setInputExtremes("max", Math.max(a.dataMin, this.getInputValue("min")) + b, a.dataMax)), this.inputGroup)) {
- var m = 0;[this.minLabel, this.minDateBox, this.maxLabel, this.maxDateBox].forEach(function (a) {
- if (a) {
- var b = a.getBBox().width; b && (a.attr({ x: m }),
- m += b + h.inputSpacing)
- }
- })
- } this.alignElements(); this.rendered = !0
- }
- }; e.prototype.renderButtons = function () {
- var a = this, c = this.buttons, e = this.options, d = D.lang, f = this.chart.renderer, g = M(e.buttonTheme), h = g && g.states, k = g.width || 28; delete g.width; delete g.states; this.buttonGroup = f.g("range-selector-buttons").add(this.group); var n = this.dropdown = l("select", void 0, { position: "absolute", width: "1px", height: "1px", padding: 0, border: 0, top: "-9999em", cursor: "pointer", opacity: .0001 }, this.div); m(n, "touchstart", function () {
- n.style.fontSize =
- "16px"
- });[[A.isMS ? "mouseover" : "mouseenter"], [A.isMS ? "mouseout" : "mouseleave"], ["change", "click"]].forEach(function (b) { var e = b[0], d = b[1]; m(n, e, function () { var b = c[a.currentButtonIndex()]; b && E(b.element, d || e) }) }); this.zoomText = f.label(d && d.rangeSelectorZoom || "", 0).attr({ padding: e.buttonTheme.padding, height: e.buttonTheme.height, paddingLeft: 0, paddingRight: 0 }).add(this.buttonGroup); this.chart.styledMode || (this.zoomText.css(e.labelStyle), g["stroke-width"] = z(g["stroke-width"], 0)); l("option", {
- textContent: this.zoomText.textStr,
- disabled: !0
- }, void 0, n); this.buttonOptions.forEach(function (b, e) { l("option", { textContent: b.title || b.text }, void 0, n); c[e] = f.button(b.text, 0, 0, function (c) { var d = b.events && b.events.click, f; d && (f = d.call(b, c)); !1 !== f && a.clickButton(e); a.isActive = !0 }, g, h && h.hover, h && h.select, h && h.disabled).attr({ "text-align": "center", width: k }).add(a.buttonGroup); b.title && c[e].attr("title", b.title) })
- }; e.prototype.alignElements = function () {
- var a = this, c = this.buttonGroup, e = this.buttons, d = this.chart, f = this.group, g = this.inputGroup,
- h = this.options, k = this.zoomText, l = d.options, m = l.exporting && !1 !== l.exporting.enabled && l.navigation && l.navigation.buttonOptions; l = h.buttonPosition; var n = h.inputPosition, q = h.verticalAlign, r = function (b, c) { return m && a.titleCollision(d) && "top" === q && "right" === c.align && c.y - b.getBBox().height - 12 < (m.y || 0) + (m.height || 0) + d.spacing[0] ? -40 : 0 }, t = d.plotLeft; if (f && l && n) {
- var u = l.x - d.spacing[3]; if (c) {
- this.positionButtons(); if (!this.initialButtonGroupWidth) {
- var w = 0; k && (w += k.getBBox().width + 5); e.forEach(function (a, b) {
- w +=
- a.width; b !== e.length - 1 && (w += h.buttonSpacing)
- }); this.initialButtonGroupWidth = w
- } t -= d.spacing[3]; this.updateButtonStates(); k = r(c, l); this.alignButtonGroup(k); f.placed = c.placed = d.hasLoaded
- } c = 0; g && (c = r(g, n), "left" === n.align ? u = t : "right" === n.align && (u = -Math.max(d.axisOffset[1], -c)), g.align({ y: n.y, width: g.getBBox().width, align: n.align, x: n.x + u - 2 }, !0, d.spacingBox), g.placed = d.hasLoaded); this.handleCollision(c); f.align({ verticalAlign: q }, !0, d.spacingBox); g = f.alignAttr.translateY; c = f.getBBox().height + 20; r = 0; "bottom" ===
- q && (r = (r = d.legend && d.legend.options) && "bottom" === r.verticalAlign && r.enabled && !r.floating ? d.legend.legendHeight + z(r.margin, 10) : 0, c = c + r - 20, r = g - c - (h.floating ? 0 : h.y) - (d.titleOffset ? d.titleOffset[2] : 0) - 10); if ("top" === q) h.floating && (r = 0), d.titleOffset && d.titleOffset[0] && (r = d.titleOffset[0]), r += d.margin[0] - d.spacing[0] || 0; else if ("middle" === q) if (n.y === l.y) r = g; else if (n.y || l.y) r = 0 > n.y || 0 > l.y ? r - Math.min(n.y, l.y) : g - c; f.translate(h.x, h.y + Math.floor(r)); l = this.minInput; n = this.maxInput; g = this.dropdown; h.inputEnabled &&
- l && n && (l.style.marginTop = f.translateY + "px", n.style.marginTop = f.translateY + "px"); g && (g.style.marginTop = f.translateY + "px")
- }
- }; e.prototype.alignButtonGroup = function (a, c) { var b = this.chart, e = this.buttonGroup, d = this.options.buttonPosition, f = b.plotLeft - b.spacing[3], g = d.x - b.spacing[3]; "right" === d.align ? g += a - f : "center" === d.align && (g -= f / 2); e && e.align({ y: d.y, width: z(c, this.initialButtonGroupWidth), align: d.align, x: g }, !0, b.spacingBox) }; e.prototype.positionButtons = function () {
- var a = this.buttons, c = this.chart, e = this.options,
- d = this.zoomText, f = c.hasLoaded ? "animate" : "attr", g = e.buttonPosition, h = c.plotLeft, k = h; d && "hidden" !== d.visibility && (d[f]({ x: z(h + g.x, h) }), k += g.x + d.getBBox().width + 5); this.buttonOptions.forEach(function (b, c) { if ("hidden" !== a[c].visibility) a[c][f]({ x: k }), k += a[c].width + e.buttonSpacing; else a[c][f]({ x: h }) })
- }; e.prototype.handleCollision = function (a) {
- var b = this, c = this.chart, e = this.buttonGroup, d = this.inputGroup, f = this.options, g = f.buttonPosition, h = f.dropdown, k = f.inputPosition; f = function () {
- var a = 0; b.buttons.forEach(function (b) {
- b =
- b.getBBox(); b.width > a && (a = b.width)
- }); return a
- }; var l = function (b) { if (d && e) { var c = d.alignAttr.translateX + d.alignOptions.x - a + d.getBBox().x + 2, f = d.alignOptions.width, h = e.alignAttr.translateX + e.getBBox().x; return h + b > c && c + f > h && g.y < k.y + d.getBBox().height } return !1 }, m = function () { d && e && d.attr({ translateX: d.alignAttr.translateX + (c.axisOffset[1] >= -a ? 0 : -a), translateY: d.alignAttr.translateY + e.getBBox().height + 10 }) }; if (e) { if ("always" === h) { this.collapseButtons(a); l(f()) && m(); return } "never" === h && this.expandButtons() } d &&
- e ? k.align === g.align || l(this.initialButtonGroupWidth + 20) ? "responsive" === h ? (this.collapseButtons(a), l(f()) && m()) : m() : "responsive" === h && this.expandButtons() : e && "responsive" === h && (this.initialButtonGroupWidth > c.plotWidth ? this.collapseButtons(a) : this.expandButtons())
- }; e.prototype.collapseButtons = function (a) {
- var b = this.buttons, c = this.buttonOptions, e = this.chart, d = this.dropdown, f = this.options, g = this.zoomText, h = e.userOptions.rangeSelector && e.userOptions.rangeSelector.buttonTheme || {}, k = function (a) {
- return {
- text: a ?
- "" + a + " \u25be" : "\u25be", width: "auto", paddingLeft: z(f.buttonTheme.paddingLeft, h.padding, 8), paddingRight: z(f.buttonTheme.paddingRight, h.padding, 8)
- }
- }; g && g.hide(); var l = !1; c.forEach(function (a, c) { c = b[c]; 2 !== c.state ? c.hide() : (c.show(), c.attr(k(a.text)), l = !0) }); l || (d && (d.selectedIndex = 0), b[0].show(), b[0].attr(k(this.zoomText && this.zoomText.textStr))); c = f.buttonPosition.align; this.positionButtons(); "right" !== c && "center" !== c || this.alignButtonGroup(a, b[this.currentButtonIndex()].getBBox().width); this.showDropdown()
- };
- e.prototype.expandButtons = function () { var a = this.buttons, c = this.buttonOptions, e = this.options, d = this.zoomText; this.hideDropdown(); d && d.show(); c.forEach(function (b, c) { c = a[c]; c.show(); c.attr({ text: b.text, width: e.buttonTheme.width || 28, paddingLeft: z(e.buttonTheme.paddingLeft, "unset"), paddingRight: z(e.buttonTheme.paddingRight, "unset") }); 2 > c.state && c.setState(0) }); this.positionButtons() }; e.prototype.currentButtonIndex = function () { var a = this.dropdown; return a && 0 < a.selectedIndex ? a.selectedIndex - 1 : 0 }; e.prototype.showDropdown =
- function () { var a = this.buttonGroup, c = this.buttons, e = this.chart, f = this.dropdown; if (a && f) { var g = a.translateX; a = a.translateY; c = c[this.currentButtonIndex()].getBBox(); d(f, { left: e.plotLeft + g + "px", top: a + .5 + "px", width: c.width + "px", height: c.height + "px" }); this.hasVisibleDropdown = !0 } }; e.prototype.hideDropdown = function () { var a = this.dropdown; a && (d(a, { top: "-9999em", width: "1px", height: "1px" }), this.hasVisibleDropdown = !1) }; e.prototype.getHeight = function () {
- var a = this.options, c = this.group, e = a.y, d = a.buttonPosition.y,
- f = a.inputPosition.y; if (a.height) return a.height; this.alignElements(); a = c ? c.getBBox(!0).height + 13 + e : 0; c = Math.min(f, d); if (0 > f && 0 > d || 0 < f && 0 < d) a += Math.abs(c); return a
- }; e.prototype.titleCollision = function (a) { return !(a.options.title.text || a.options.subtitle.text) }; e.prototype.update = function (a) { var b = this.chart; M(!0, b.options.rangeSelector, a); this.destroy(); this.init(b); this.render() }; e.prototype.destroy = function () {
- var a = this, d = a.minInput, f = a.maxInput; a.eventsToUnbind && (a.eventsToUnbind.forEach(function (a) { return a() }),
- a.eventsToUnbind = void 0); c(a.buttons); d && (d.onfocus = d.onblur = d.onchange = null); f && (f.onfocus = f.onblur = f.onchange = null); K(a, function (b, c) { b && "chart" !== c && (b instanceof x ? b.destroy() : b instanceof U.HTMLElement && t(b)); b !== e.prototype[c] && (a[c] = null) }, this)
- }; return e
- }(); u.prototype.defaultButtons = [{ type: "month", count: 1, text: "1m", title: "View 1 month" }, { type: "month", count: 3, text: "3m", title: "View 3 months" }, { type: "month", count: 6, text: "6m", title: "View 6 months" }, { type: "ytd", text: "YTD", title: "View year to date" },
- { type: "year", count: 1, text: "1y", title: "View 1 year" }, { type: "all", text: "All", title: "View all" }]; u.prototype.inputTypeFormats = { "datetime-local": "%Y-%m-%dT%H:%M:%S", date: "%Y-%m-%d", time: "%H:%M:%S" }; a.prototype.minFromRange = function () {
- var a = this.range, b = a.type, c = this.max, d = this.chart.time, f = function (a, c) { var e = "year" === b ? "FullYear" : "Month", f = new d.Date(a), g = d.get(e, f); d.set(e, f, g + c); g === d.get(e, f) && d.set("Date", f, 0); return f.getTime() - a }; if (F(a)) { var g = c - a; var h = a } else g = c + f(c, -a.count), this.chart && (this.chart.fixedRange =
- c - g); var k = z(this.dataMin, Number.MIN_VALUE); F(g) || (g = k); g <= k && (g = k, "undefined" === typeof h && (h = f(g, a.count)), this.newMax = Math.min(g + h, this.dataMax)); F(c) || (g = void 0); return g
- }; if (!A.RangeSelector) {
- var h = [], r = function (a) {
- function b () { e && (c = a.xAxis[0].getExtremes(), d = a.legend, g = e && e.options.verticalAlign, F(c.min) && e.render(c.min, c.max), d.display && "top" === g && g === d.options.verticalAlign && (f = M(a.spacingBox), f.y = "vertical" === d.options.layout ? a.plotTop : f.y + e.getHeight(), d.group.placed = !1, d.align(f))) } var c,
- e = a.rangeSelector, d, f, g; e && (B(h, function (b) { return b[0] === a }) || h.push([a, [m(a.xAxis[0], "afterSetExtremes", function (a) { e && e.render(a.min, a.max) }), m(a, "redraw", b)]]), b())
- }; m(q, "afterGetContainer", function () { this.options.rangeSelector && this.options.rangeSelector.enabled && (this.rangeSelector = new u(this)) }); m(q, "beforeRender", function () {
- var a = this.axes, b = this.rangeSelector; b && (F(b.deferredYTDClick) && (b.clickButton(b.deferredYTDClick), delete b.deferredYTDClick), a.forEach(function (a) { a.updateNames(); a.setScale() }),
- this.getAxisMargins(), b.render(), a = b.options.verticalAlign, b.options.floating || ("bottom" === a ? this.extraBottomMargin = !0 : "middle" !== a && (this.extraTopMargin = !0)))
- }); m(q, "update", function (a) {
- var b = a.options.rangeSelector; a = this.rangeSelector; var c = this.extraBottomMargin, e = this.extraTopMargin; b && b.enabled && !g(a) && this.options.rangeSelector && (this.options.rangeSelector.enabled = !0, this.rangeSelector = a = new u(this)); this.extraTopMargin = this.extraBottomMargin = !1; a && (r(this), b = b && b.verticalAlign || a.options &&
- a.options.verticalAlign, a.options.floating || ("bottom" === b ? this.extraBottomMargin = !0 : "middle" !== b && (this.extraTopMargin = !0)), this.extraBottomMargin !== c || this.extraTopMargin !== e) && (this.isDirtyBox = !0)
- }); m(q, "render", function () { var a = this.rangeSelector; a && !a.options.floating && (a.render(), a = a.options.verticalAlign, "bottom" === a ? this.extraBottomMargin = !0 : "middle" !== a && (this.extraTopMargin = !0)) }); m(q, "getMargins", function () {
- var a = this.rangeSelector; a && (a = a.getHeight(), this.extraTopMargin && (this.plotTop +=
- a), this.extraBottomMargin && (this.marginBottom += a))
- }); q.prototype.callbacks.push(r); m(q, "destroy", function () { for (var a = 0; a < h.length; a++) { var b = h[a]; if (b[0] === this) { b[1].forEach(function (a) { return a() }); h.splice(a, 1); break } } }); A.RangeSelector = u
- } return u
- }); O(a, "Core/Chart/StockChart.js", [a["Core/Animation/AnimationUtilities.js"], a["Core/Axis/Axis.js"], a["Core/Chart/Chart.js"], a["Core/FormatUtilities.js"], a["Core/DefaultOptions.js"], a["Core/Series/Series.js"], a["Core/Renderer/SVG/SVGRenderer.js"], a["Core/Utilities.js"]],
- function (a, q, A, G, x, H, J, D) {
- function m (a, c) { return "xAxis" === a ? { minPadding: 0, maxPadding: 0, overscroll: 0, ordinal: !0, title: { text: null }, labels: { overflow: "justify" }, showLastLabel: !0 } : "yAxis" === a ? { labels: { y: -2 }, opposite: w(c.opposite, !0), showLastLabel: !(!c.categories && "category" !== c.type), title: { text: null } } : {} } function l (a, d) { if ("xAxis" === a) { a = c(); var f = { type: "datetime", categories: void 0 }; w(d.navigator && d.navigator.enabled, a.navigator.enabled, !0) && (f.startOnTick = !1, f.endOnTick = !1); return f } return {} } var d = this &&
- this.__extends || function () { var a = function (c, d) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d]) }; return a(c, d) }; return function (c, d) { function f () { this.constructor = c } a(c, d); c.prototype = null === d ? Object.create(d) : (f.prototype = d.prototype, new f) } }(), g = G.format, c = x.getOptions; a = D.addEvent; var t = D.clamp, k = D.defined, B = D.extend, C = D.find, F = D.isNumber, M = D.isString, K = D.merge, w = D.pick, z = D.splat; D = function (a) {
- function f () {
- return null !==
- a && a.apply(this, arguments) || this
- } d(f, a); f.prototype.init = function (d, f) {
- var g = c(), e = d.xAxis, b = d.yAxis, h = w(d.navigator && d.navigator.enabled, g.navigator.enabled, !0); d.xAxis = d.yAxis = void 0; h = K({ chart: { panning: { enabled: !0, type: "x" }, pinchType: "x" }, navigator: { enabled: h }, scrollbar: { enabled: w(g.scrollbar && g.scrollbar.enabled, !0) }, rangeSelector: { enabled: w(g.rangeSelector.enabled, !0) }, title: { text: null }, tooltip: { split: w(g.tooltip.split, !0), crosshairs: !0 }, legend: { enabled: !1 } }, d, { isStock: !0 }); d.xAxis = e; d.yAxis =
- b; h.xAxis = z(d.xAxis || {}).map(function (a, b) { return K(m("xAxis", a), g.xAxis, g.xAxis && g.xAxis[b], a, l("xAxis", d)) }); h.yAxis = z(d.yAxis || {}).map(function (a, b) { return K(m("yAxis", a), g.yAxis, g.yAxis && g.yAxis[b], a) }); a.prototype.init.call(this, h, f)
- }; f.prototype.createAxis = function (c, d) { d.axis = K(m(c, d.axis), d.axis, l(c, this.userOptions)); return a.prototype.createAxis.call(this, c, d) }; return f
- }(A); (function (a) { a.stockChart = function (c, d, g) { return new a(c, d, g) } })(D || (D = {})); a(H, "setOptions", function (a) {
- var c; this.chart.options.isStock &&
- (this.is("column") || this.is("columnrange") ? c = { borderWidth: 0, shadow: !1 } : this.is("scatter") || this.is("sma") || (c = { marker: { enabled: !1, radius: 2 } }), c && (a.plotOptions[this.type] = K(a.plotOptions[this.type], c)))
- }); a(q, "autoLabelAlign", function (a) {
- var c = this.chart, d = this.options; c = c._labelPanes = c._labelPanes || {}; var g = this.options.labels; this.chart.options.isStock && "yAxis" === this.coll && (d = d.top + "," + d.height, !c[d] && g.enabled && (15 === g.x && (g.x = 0), "undefined" === typeof g.align && (g.align = "right"), c[d] = this, a.align =
- "right", a.preventDefault()))
- }); a(q, "destroy", function () { var a = this.chart, c = this.options && this.options.top + "," + this.options.height; c && a._labelPanes && a._labelPanes[c] === this && delete a._labelPanes[c] }); a(q, "getPlotLinePath", function (a) {
- function c (a) { var b = "xAxis" === a ? "yAxis" : "xAxis"; a = d.options[b]; return F(a) ? [l[b][a]] : M(a) ? [l.get(a)] : g.map(function (a) { return a[b] }) } var d = this, g = this.isLinked && !this.series ? this.linkedParent.series : this.series, l = d.chart, e = l.renderer, b = d.left, m = d.top, n, p, q, x, z = [], A = [],
- B = a.translatedValue, D = a.value, E = a.force; if (l.options.isStock && !1 !== a.acrossPanes && "xAxis" === d.coll || "yAxis" === d.coll) {
- a.preventDefault(); A = c(d.coll); var G = d.isXAxis ? l.yAxis : l.xAxis; G.forEach(function (a) { if (k(a.options.id) ? -1 === a.options.id.indexOf("navigator") : 1) { var b = a.isXAxis ? "yAxis" : "xAxis"; b = k(a.options[b]) ? l[b][a.options[b]] : l[b][0]; d === b && A.push(a) } }); var H = A.length ? [] : [d.isXAxis ? l.yAxis[0] : l.xAxis[0]]; A.forEach(function (a) {
- -1 !== H.indexOf(a) || C(H, function (b) { return b.pos === a.pos && b.len === a.len }) ||
- H.push(a)
- }); var J = w(B, d.translate(D, null, null, a.old)); F(J) && (d.horiz ? H.forEach(function (a) { var c; p = a.pos; x = p + a.len; n = q = Math.round(J + d.transB); "pass" !== E && (n < b || n > b + d.width) && (E ? n = q = t(n, b, b + d.width) : c = !0); c || z.push(["M", n, p], ["L", q, x]) }) : H.forEach(function (a) { var b; n = a.pos; q = n + a.len; p = x = Math.round(m + d.height - J); "pass" !== E && (p < m || p > m + d.height) && (E ? p = x = t(p, m, m + d.height) : b = !0); b || z.push(["M", n, p], ["L", q, x]) })); a.path = 0 < z.length ? e.crispPolyLine(z, a.lineWidth || 1) : null
- }
- }); J.prototype.crispPolyLine = function (a,
- c) { for (var d = 0; d < a.length; d += 2) { var f = a[d], g = a[d + 1]; f[1] === g[1] && (f[1] = g[1] = Math.round(f[1]) - c % 2 / 2); f[2] === g[2] && (f[2] = g[2] = Math.round(f[2]) + c % 2 / 2) } return a }; a(q, "afterHideCrosshair", function () { this.crossLabel && (this.crossLabel = this.crossLabel.hide()) }); a(q, "afterDrawCrosshair", function (a) {
- var c, d; if (this.crosshair && this.crosshair.label && this.crosshair.label.enabled && this.cross && F(this.min) && F(this.max)) {
- var h = this.chart, k = this.logarithmic, e = this.crosshair.label, b = this.horiz, l = this.opposite, m = this.left,
- n = this.top, q = this.crossLabel, t = e.format, x = "", z = "inside" === this.options.tickPosition, A = !1 !== this.crosshair.snap, C = 0, D = a.e || this.cross && this.cross.e; a = a.point; var E = this.min, G = this.max; k && (E = k.lin2log(E), G = k.lin2log(G)); k = b ? "center" : l ? "right" === this.labelAlign ? "right" : "left" : "left" === this.labelAlign ? "left" : "center"; q || (q = this.crossLabel = h.renderer.label("", 0, void 0, e.shape || "callout").addClass("highcharts-crosshair-label highcharts-color-" + (a ? a.series.colorIndex : this.series[0] && this.series[0].colorIndex)).attr({
- align: e.align ||
- k, padding: w(e.padding, 8), r: w(e.borderRadius, 3), zIndex: 2
- }).add(this.labelGroup), h.styledMode || q.attr({ fill: e.backgroundColor || a && a.series && a.series.color || "#666666", stroke: e.borderColor || "", "stroke-width": e.borderWidth || 0 }).css(B({ color: "#ffffff", fontWeight: "normal", fontSize: "11px", textAlign: "center" }, e.style || {}))); b ? (k = A ? (a.plotX || 0) + m : D.chartX, n += l ? 0 : this.height) : (k = l ? this.width + m : 0, n = A ? (a.plotY || 0) + n : D.chartY); t || e.formatter || (this.dateTime && (x = "%b %d, %Y"), t = "{value" + (x ? ":" + x : "") + "}"); x = A ? this.isXAxis ?
- a.x : a.y : this.toValue(b ? D.chartX : D.chartY); A = a ? a.series.isPointInside(a) : F(x) && x > E && x < G; D = ""; t ? D = g(t, { value: x }, h) : e.formatter && F(x) && (D = e.formatter.call(this, x)); q.attr({ text: D, x: k, y: n, visibility: A ? "inherit" : "hidden" }); e = q.getBBox(); if (F(q.y)) if (b) { if (z && !l || !z && l) n = q.y - e.height } else n = q.y - e.height / 2; b ? (c = m - e.x, d = m + this.width - e.x) : (c = "left" === this.labelAlign ? m : 0, d = "right" === this.labelAlign ? m + this.width : h.chartWidth); q.translateX < c && (C = c - q.translateX); q.translateX + e.width >= d && (C = -(q.translateX + e.width -
- d)); q.attr({ x: k + C, y: n, anchorX: b ? k : this.opposite ? 0 : h.chartWidth, anchorY: b ? this.opposite ? h.chartHeight : 0 : n + e.height / 2 })
- }
- }); H.prototype.forceCropping = function () { var a = this.chart, c = this.options.dataGrouping; return !1 !== this.allowDG && c && w(c.enabled, a.options.isStock) }; a(A, "update", function (a) { a = a.options; "scrollbar" in a && this.navigator && (K(!0, this.options.scrollbar, a.scrollbar), this.navigator.update({}, !1), delete a.scrollbar) }); return D
- }); O(a, "masters/modules/stock.src.js", [a["Core/Globals.js"], a["Core/Axis/OrdinalAxis.js"],
- a["Series/DataModifyComposition.js"], a["Core/Scrollbar.js"], a["Core/Chart/StockChart.js"]], function (a, q, A, G, x) { a.Scrollbar = G; a.StockChart = a.stockChart = x.stockChart; G.compose(a.Axis); q.compose(a.Axis, a.Series, a.Chart); A.compose(a.Series, a.Axis, a.Point) }); O(a, "masters/highstock.src.js", [a["masters/highcharts.src.js"]], function (a) { a.product = "Highstock"; return a }); a["masters/highstock.src.js"]._modules = a; return a["masters/highstock.src.js"]
- });
- //# sourceMappingURL=highstock.js.map
|