文件过大分5部分
highcharts.js 0-3000_spencer_tseng的博客-优快云博客
highcharts.js 3001-6000_spencer_tseng的博客-优快云博客
highcharts.js 6001-9000_spencer_tseng的博客-优快云博客
highcharts.js 9001-12000_spencer_tseng的博客-优快云博客
highcharts.js 12001-12677_spencer_tseng的博客-优快云博客
highcharts.js 6001-9000
d = D.syncTimeout,
q = D.removeEvent,
h = D.uniqueKey;
g = function() {
function k() {
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
}
k.prototype.animateBeforeDestroy = function() {
var b = this,
a = {
x: b.startXPos,
opacity: 0
},
d = b.getGraphicalProps();
d.singular.forEach(function(d) {
b[d] = b[d].animate("dataLabel" === d ? {
x: b[d].startXPos,
y: b[d].startYPos,
opacity: 0
}: a)
});
d.plural.forEach(function(a) {
b[a].forEach(function(a) {
a.element && a.animate(c({
x: b.startXPos
},
a.startYPos ? {
x: a.startXPos,
y: a.startYPos
}: {}))
})
})
};
k.prototype.applyOptions = function(b, a) {
var d = this.series,
h = d.options.pointValKey || d.pointValKey;
b = k.prototype.optionsToObject.call(this, b);
c(this, b);
this.options = this.options ? c(this.options, b) : b;
b.group && delete this.group;
b.dataLabels && delete this.dataLabels;
h && (this.y = k.prototype.getNestedProperty.call(this, h));
this.formatPrefix = (this.isNull = this.isValid && !this.isValid()) ? "null": "point";
this.selected && (this.state = "select");
"name" in this && "undefined" === typeof a && d.xAxis && d.xAxis.hasNames && (this.x = d.xAxis.nameToX(this));
"undefined" === typeof this.x && d ? this.x = "undefined" === typeof a ? d.autoIncrement() : a: C(b.x) && d.options.relativeXValue && (this.x = d.autoIncrement(b.x));
return this
};
k.prototype.destroy = function() {
function b() {
if (a.graphic || a.graphics || a.dataLabel || a.dataLabels) q(a),
a.destroyElements();
for (g in a) a[g] = null
}
var a = this,
c = a.series,
h = c.chart;
c = c.options.dataSorting;
var e = h.hoverPoints,
k = v(a.series.chart.renderer.globalAnimation),
g;
a.legendItem && h.legend.destroyItem(a);
e && (a.setState(), f(e, a), e.length || (h.hoverPoints = null));
if (a === h.hoverPoint) a.onMouseOut();
c && c.enabled ? (this.animateBeforeDestroy(), d(b, k.duration)) : b();
h.pointCount--
};
k.prototype.destroyElements = function(b) {
var a = this;
b = a.getGraphicalProps(b);
b.singular.forEach(function(b) {
a[b] = a[b].destroy()
});
b.plural.forEach(function(b) {
a[b].forEach(function(b) {
b.element && b.destroy()
});
delete a[b]
})
};
k.prototype.firePointEvent = function(b, a, d) {
var c = this,
h = this.series.options; (h.point.events[b] || c.options && c.options.events && c.options.events[b]) && c.importEvents();
"click" === b && h.allowPointSelect && (d = function(b) {
c.select && c.select(null, b.ctrlKey || b.metaKey || b.shiftKey)
});
l(c, b, a, d)
};
k.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", "") : "")
};
k.prototype.getGraphicalProps = function(b) {
var a = this,
d = [],
c = {
singular: [],
plural: []
},
h;
b = b || {
graphic: 1,
dataLabel: 1
};
b.graphic && d.push("graphic", "shadowGroup");
b.dataLabel && d.push("dataLabel", "dataLabelPath", "dataLabelUpper", "connector");
for (h = d.length; h--;) {
var e = d[h];
a[e] && c.singular.push(e)
} ["graphic", "dataLabel", "connector"].forEach(function(d) {
var h = d + "s";
b[d] && a[h] && c.plural.push(h)
});
return c
};
k.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
}
};
k.prototype.getNestedProperty = function(b) {
if (b) return 0 === b.indexOf("custom.") ? m(b, this.options) : this[b]
};
k.prototype.getZone = function() {
var b = this.series,
a = b.zones;
b = b.zoneAxis || "y";
var d, c = 0;
for (d = a[c]; this[b] >= d.value;) d = a[++c];
this.nonZonedColor || (this.nonZonedColor = this.color);
this.color = d && d.color && !this.options.color ? d.color: this.nonZonedColor;
return d
};
k.prototype.hasNewShapeType = function() {
return (this.graphic && (this.graphic.symbolName || this.graphic.element.nodeName)) !== this.shapeType
};
k.prototype.init = function(b, a, d) {
this.series = b;
this.applyOptions(a, d);
this.id = n(this.id) ? this.id: h();
this.resolveColor();
b.chart.pointCount++;
l(this, "afterInit");
return this
};
k.prototype.isValid = function() {
return null !== this.x && C(this.y)
};
k.prototype.optionsToObject = function(b) {
var a = this.series,
d = a.options.keys,
c = d || a.pointArrayMap || ["y"],
h = c.length,
f = {},
g = 0,
l = 0;
if (C(b) || null === b) f[c[0]] = b;
else if (e(b)) for (!d && b.length > h && (a = typeof b[0], "string" === a ? f.name = b[0] : "number" === a && (f.x = b[0]), g++); l < h;) d && "undefined" === typeof b[g] || (0 < c[l].indexOf(".") ? k.prototype.setNestedProperty(f, b[g], c[l]) : f[c[l]] = b[g]),
g++,
l++;
else "object" === typeof b && (f = b, b.dataLabels && (a._hasPointLabels = !0), b.marker && (a._hasPointMarkers = !0));
return f
};
k.prototype.resolveColor = function() {
var b = this.series,
a = b.chart.styledMode;
var d = b.chart.options.chart.colorCount;
delete this.nonZonedColor;
if (b.options.colorByPoint) {
if (!a) {
d = b.options.colors || b.chart.options.colors;
var c = d[b.colorCounter];
d = d.length
}
a = b.colorCounter;
b.colorCounter++;
b.colorCounter === d && (b.colorCounter = 0)
} else a || (c = b.color),
a = b.colorIndex;
this.colorIndex = A(this.options.colorIndex, a);
this.color = A(this.options.color, c)
};
k.prototype.setNestedProperty = function(b, a, d) {
d.split(".").reduce(function(b, d, c, h) {
b[d] = h.length - 1 === c ? a: J(b[d], !0) ? b[d] : {};
return b[d]
},
b);
return b
};
k.prototype.shouldDraw = function() {
return ! this.isNull
};
k.prototype.tooltipFormatter = function(b) {
var a = this.series,
d = a.tooltipOptions,
c = A(d.valueDecimals, ""),
h = d.valuePrefix || "",
e = d.valueSuffix || "";
a.chart.styledMode && (b = a.chart.tooltip.styledModeFormat(b)); (a.pointArrayMap || ["y"]).forEach(function(a) {
a = "{point." + a;
if (h || e) b = b.replace(RegExp(a + "}", "g"), h + a + "}" + e);
b = b.replace(RegExp(a + "}", "g"), a + ":,." + c + "f}")
});
return r(b, {
point: this,
series: this.series
},
a.chart)
};
k.prototype.update = function(b, a, d, c) {
function h() {
e.applyOptions(b);
var c = k && e.hasMockGraphic;
c = null === e.y ? !c: c;
k && c && (e.graphic = k.destroy(), delete e.hasMockGraphic);
J(b, !0) && (k && k.element && b && b.marker && "undefined" !== typeof b.marker.symbol && (e.graphic = k.destroy()), b && b.dataLabels && e.dataLabel && (e.dataLabel = e.dataLabel.destroy()), e.connector && (e.connector = e.connector.destroy()));
l = e.index;
f.updateParallelArrays(e, l);
p.data[l] = J(p.data[l], !0) || J(b, !0) ? e.options: A(b, p.data[l]);
f.isDirty = f.isDirtyData = !0; ! f.fixedBox && f.hasCartesianSeries && (g.isDirtyBox = !0);
"point" === p.legendType && (g.isDirtyLegend = !0);
a && g.redraw(d)
}
var e = this,
f = e.series,
k = e.graphic,
g = f.chart,
p = f.options,
l;
a = A(a, !0); ! 1 === c ? h() : e.firePointEvent("update", {
options: b
},
h)
};
k.prototype.remove = function(b, a) {
this.series.removePoint(this.series.data.indexOf(this), b, a)
};
k.prototype.select = function(b, a) {
var d = this,
c = d.series,
h = c.chart;
this.selectedStaging = b = A(b, !d.selected);
d.firePointEvent(b ? "select": "unselect", {
accumulate: a
},
function() {
d.selected = d.options.selected = b;
c.options.data[c.data.indexOf(d)] = d.options;
d.setState(b && "select");
a || h.getSelectedPoints().forEach(function(b) {
var a = b.series;
b.selected && b !== d && (b.selected = b.options.selected = !1, a.options.data[a.data.indexOf(b)] = b.options, b.setState(h.hoverPoints && a.options.inactiveOtherPoints ? "inactive": ""), b.firePointEvent("unselect"))
})
});
delete this.selectedStaging
};
k.prototype.onMouseOver = function(b) {
var a = this.series.chart,
d = a.pointer;
b = b ? d.normalize(b) : d.getChartCoordinatesFromPoint(this, a.inverted);
d.runPointActions(b, this)
};
k.prototype.onMouseOut = function() {
var b = this.series.chart;
this.firePointEvent("mouseOut");
this.series.options.inactiveOtherPoints || (b.hoverPoints || []).forEach(function(b) {
b.setState()
});
b.hoverPoints = b.hoverPoint = null
};
k.prototype.importEvents = function() {
if (!this.hasImportedEvents) {
var b = this,
a = I(b.series.options.point, b.options).events;
b.events = a;
L(a,
function(a, d) {
u(a) && t(b, d, a)
});
this.hasImportedEvents = !0
}
};
k.prototype.setState = function(b, d) {
var h = this.series,
e = this.state,
f = h.options.states[b || "normal"] || {},
k = G.plotOptions[h.type].marker && h.options.marker,
g = k && !1 === k.enabled,
p = k && k.states && k.states[b || "normal"] || {},
q = !1 === p.enabled,
m = this.marker || {},
n = h.chart,
u = k && h.markerAttribs,
t = h.halo,
r,
v = h.stateMarkerGraphic;
b = b || "";
if (! (b === this.state && !d || this.selected && "select" !== b || !1 === f.enabled || b && (q || g && !1 === p.enabled) || b && m.states && m.states[b] && !1 === m.states[b].enabled)) {
this.state = b;
u && (r = h.markerAttribs(this, b));
if (this.graphic && !this.hasMockGraphic) {
e && this.graphic.removeClass("highcharts-point-" + e);
b && this.graphic.addClass("highcharts-point-" + b);
if (!n.styledMode) {
e = h.pointAttribs(this, b);
var F = A(n.options.chart.animation, f.animation);
var P = e.opacity;
h.options.inactiveOtherPoints && C(P) && ((this.dataLabels || []).forEach(function(b) {
b && !b.hasClass("highcharts-data-label-hidden") && b.animate({
opacity: P
},
F)
}), this.connector && this.connector.animate({
opacity: P
},
F));
this.graphic.animate(e, F)
}
r && this.graphic.animate(r, A(n.options.chart.animation, p.animation, k.animation));
v && v.hide()
} else {
if (b && p) {
k = m.symbol || h.symbol;
v && v.currentSymbol !== k && (v = v.destroy());
if (r) if (v) v[d ? "animate": "attr"]({
x: r.x,
y: r.y
});
else k && (h.stateMarkerGraphic = v = n.renderer.symbol(k, r.x, r.y, r.width, r.height).add(h.markerGroup), v.currentSymbol = k); ! n.styledMode && v && "inactive" !== this.state && v.attr(h.pointAttribs(this, b))
}
v && (v[b && this.isInside ? "show": "hide"](), v.element.point = this, v.addClass(this.getClassName(), !0))
}
f = f.halo;
r = (v = this.graphic || v) && v.visibility || "inherit";
f && f.size && v && "hidden" !== r && !this.isCluster ? (t || (h.halo = t = n.renderer.path().add(v.parentGroup)), t.show()[d ? "animate": "attr"]({
d: this.haloPath(f.size)
}), t.attr({
"class": "highcharts-halo highcharts-color-" + A(this.colorIndex, h.colorIndex) + (this.className ? " " + this.className: ""),
visibility: r,
zIndex: -1
}), t.point = this, n.styledMode || t.attr(c({
fill: this.color || h.color,
"fill-opacity": f.opacity
},
a.filterUserAttributes(f.attributes || {})))) : t && t.point && t.point.haloPath && t.animate({
d: t.point.haloPath(0)
},
null, t.hide);
l(this, "afterSetState", {
state: b
})
}
};
k.prototype.haloPath = function(b) {
return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX) - b, this.plotY - b, 2 * b, 2 * b)
};
return k
} ();
"";
return g
});
K(g, "Core/Pointer.js", [g["Core/Color/Color.js"], g["Core/Globals.js"], g["Core/Tooltip.js"], g["Core/Utilities.js"]],
function(a, g, x, E) {
var v = a.parse,
B = g.charts,
G = g.noop,
r = E.addEvent,
t = E.attr,
n = E.css,
f = E.defined,
c = E.extend,
l = E.find,
m = E.fireEvent,
e = E.isNumber,
u = E.isObject,
C = E.objectEach,
J = E.offset,
I = E.pick,
L = E.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 d = [],
c; (a || []).forEach(function(a) {
c = a.series;
d.push(c);
c.linkedParent && d.push(c.linkedParent);
c.linkedSeries && (d = d.concat(c.linkedSeries));
c.navigatorSeries && d.push(c.navigatorSeries)
});
this.chart.series.forEach(function(a) { - 1 === d.indexOf(a) ? a.setState("inactive", !0) : a.options.inactiveOtherPoints && a.setAllPointsToState("inactive")
})
};
a.prototype.destroy = function() {
var d = this;
this.eventsToUnbind.forEach(function(a) {
return a()
});
this.eventsToUnbind = [];
g.chartCount || (a.unbindDocumentMouseUp && (a.unbindDocumentMouseUp = a.unbindDocumentMouseUp()), a.unbindDocumentTouchEnd && (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd()));
clearInterval(d.tooltipTimeout);
C(d,
function(a, c) {
d[c] = void 0
})
};
a.prototype.getSelectionMarkerAttrs = function(a, c) {
var d = this,
e = {
args: {
chartX: a,
chartY: c
},
attrs: {},
shapeType: "rect"
};
m(this, "getSelectionMarkerAttrs", e,
function(b) {
var h = d.chart,
e = d.mouseDownX;
e = void 0 === e ? 0 : e;
var f = d.mouseDownY;
f = void 0 === f ? 0 : f;
var k = d.zoomHor,
g = d.zoomVert;
b = b.attrs;
b.x = h.plotLeft;
b.y = h.plotTop;
b.width = k ? 1 : h.plotWidth;
b.height = g ? 1 : h.plotHeight;
k && (h = a - e, b.width = Math.abs(h), b.x = (0 < h ? 0 : h) + e);
g && (h = c - f, b.height = Math.abs(h), b.y = (0 < h ? 0 : h) + f)
});
return e
};
a.prototype.drag = function(a) {
var d = this.chart,
c = d.options.chart,
e = d.plotLeft,
b = d.plotTop,
f = d.plotWidth,
g = d.plotHeight,
l = this.mouseDownX || 0,
m = this.mouseDownY || 0,
n = u(c.panning) ? c.panning && c.panning.enabled: c.panning,
A = c.panKey && a[c.panKey + "Key"],
t = a.chartX,
r = a.chartY,
C = this.selectionMarker;
C && C.touch || (t < e ? t = e: t > e + f && (t = e + f), r < b ? r = b: r > b + g && (r = b + g), this.hasDragged = Math.sqrt(Math.pow(l - t, 2) + Math.pow(m - r, 2)), 10 < this.hasDragged && (e = d.isInsidePlot(l - e, m - b, {
visiblePlotOnly: !0
}), r = this.getSelectionMarkerAttrs(t, r), t = r.shapeType, r = r.attrs, !d.hasCartesianSeries && !d.mapView || !this.zoomX && !this.zoomY || !e || A || C || (this.selectionMarker = C = d.renderer[t](), C.attr({
"class": "highcharts-selection-marker",
zIndex: 7
}).add(), d.styledMode || C.attr({
fill: c.selectionMarkerFill || v("#335cad").setOpacity(.25).get()
})), C && C.attr(r), e && !C && n && d.pan(a, c.panning)))
};
a.prototype.dragStart = function(a) {
var d = this.chart;
d.mouseIsDown = a.type;
d.cancelClick = !1;
d.mouseDownX = this.mouseDownX = a.chartX;
d.mouseDownY = this.mouseDownY = a.chartY
};
a.prototype.getSelectionBox = function(a) {
var d = {
args: {
marker: a
},
result: {}
};
m(this, "getSelectionBox", d,
function(d) {
d.result = {
x: a.attr ? +a.attr("x") : a.x,
y: a.attr ? +a.attr("y") : a.y,
width: a.attr ? a.attr("width") : a.width,
height: a.attr ? a.attr("height") : a.height
}
});
return d.result
};
a.prototype.drop = function(a) {
var d = this,
h = this.chart,
k = this.hasPinched;
if (this.selectionMarker) {
var b = this.getSelectionBox(this.selectionMarker),
g = b.x,
l = b.y,
w = b.width,
u = b.height,
A = {
originalEvent: a,
xAxis: [],
yAxis: [],
x: g,
y: l,
width: w,
height: u
},
t = !!h.mapView;
if (this.hasDragged || k) h.axes.forEach(function(b) {
if (b.zoomEnabled && f(b.min) && (k || d[{
xAxis: "zoomX",
yAxis: "zoomY"
} [b.coll]]) && e(g) && e(l) && e(w) && e(u)) {
var c = b.horiz,
h = "touchend" === a.type ? b.minPixelPadding: 0,
p = b.toValue((c ? g: l) + h);
c = b.toValue((c ? g + w: l + u) - h);
A[b.coll].push({
axis: b,
min: Math.min(p, c),
max: Math.max(p, c)
});
t = !0
}
}),
t && m(h, "selection", A,
function(b) {
h.zoom(c(b, k ? {
animation: !1
}: null))
});
e(h.index) && (this.selectionMarker = this.selectionMarker.destroy());
k && this.scaleGroups()
}
h && e(h.index) && (n(h.container, {
cursor: h._cursor
}), h.cancelClick = 10 < this.hasDragged, h.mouseIsDown = this.hasDragged = this.hasPinched = !1, this.pinchDown = [])
};
a.prototype.findNearestKDPoint = function(a, c, h) {
var d;
a.forEach(function(b) {
var a = !(b.noSharedTooltip && c) && 0 > b.options.findNearestPointBy.indexOf("y");
b = b.searchPoint(h, a);
if ((a = u(b, !0) && b.series) && !(a = !u(d, !0))) {
a = d.distX - b.distX;
var e = d.dist - b.dist,
f = (b.series.group && b.series.group.zIndex) - (d.series.group && d.series.group.zIndex);
a = 0 < (0 !== a && c ? a: 0 !== e ? e: 0 !== f ? f: d.series.index > b.series.index ? -1 : 1)
}
a && (d = b)
});
return d
};
a.prototype.getChartCoordinatesFromPoint = function(a, c) {
var d = a.series,
f = d.xAxis;
d = d.yAxis;
var b = a.shapeArgs;
if (f && d) {
var g = I(a.clientX, a.plotX),
l = a.plotY || 0;
a.isNode && b && e(b.x) && e(b.y) && (g = b.x, l = b.y);
return c ? {
chartX: d.len + d.pos - l,
chartY: f.len + f.pos - g
}: {
chartX: g + f.pos,
chartY: l + d.pos
}
}
if (b && b.x && b.y) return {
chartX: b.x,
chartY: b.y
}
};
a.prototype.getChartPosition = function() {
if (this.chartPosition) return this.chartPosition;
var a = this.chart.container,
c = J(a);
this.chartPosition = {
left: c.left,
top: c.top,
scaleX: 1,
scaleY: 1
};
var h = a.offsetWidth;
a = a.offsetHeight;
2 < h && 2 < a && (this.chartPosition.scaleX = c.width / h, this.chartPosition.scaleY = c.height / a);
return this.chartPosition
};
a.prototype.getCoordinates = function(a) {
var d = {
xAxis: [],
yAxis: []
};
this.chart.axes.forEach(function(c) {
d[c.isXAxis ? "xAxis": "yAxis"].push({
axis: c,
value: c.toValue(a[c.horiz ? "chartX": "chartY"])
})
});
return d
};
a.prototype.getHoverData = function(a, c, h, e, b, f) {
var d = [];
e = !(!e || !a);
var g = function(a) {
return a.visible && !(!b && a.directTouch) && I(a.options.enableMouseTracking, !0)
},
k = {
chartX: f ? f.chartX: void 0,
chartY: f ? f.chartY: void 0,
shared: b
};
m(this, "beforeGetHoverData", k);
var p = c && !c.stickyTracking ? [c] : h.filter(function(b) {
return b.stickyTracking && (k.filter || g)(b)
});
var q = e || !f ? a: this.findNearestKDPoint(p, b, f);
c = q && q.series;
q && (b && !c.noSharedTooltip ? (p = h.filter(function(b) {
return k.filter ? k.filter(b) : g(b) && !b.noSharedTooltip
}), p.forEach(function(b) {
var a = l(b.points,
function(b) {
return b.x === q.x && !b.isNull
});
u(a) && (b.boosted && b.boost && (a = b.boost.getPoint(a)), d.push(a))
})) : d.push(q));
k = {
hoverPoint: q
};
m(this, "afterGetHoverData", k);
return {
hoverPoint: k.hoverPoint,
hoverSeries: c,
hoverPoints: d
}
};
a.prototype.getPointFromEvent = function(a) {
a = a.target;
for (var d; a && !d;) d = a.point,
a = a.parentNode;
return d
};
a.prototype.onTrackerMouseOut = function(a) {
a = a.relatedTarget || a.toElement;
var d = this.chart.hoverSeries;
this.isDirectTouch = !1;
if (! (!d || !a || d.stickyTracking || this.inClass(a, "highcharts-tooltip") || this.inClass(a, "highcharts-series-" + d.index) && this.inClass(a, "highcharts-tracker"))) d.onMouseOut()
};
a.prototype.inClass = function(a, c) {
for (var d; a;) {
if (d = t(a, "class")) {
if ( - 1 !== d.indexOf(c)) return ! 0;
if ( - 1 !== d.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 = {};
x && (a.tooltip = new x(a, c.tooltip));
this.setDOMEvents()
};
a.prototype.normalize = function(a, e) {
var d = a.touches,
f = d ? d.length ? d.item(0) : I(d.changedTouches, a.changedTouches)[0] : a;
e || (e = this.getChartPosition());
d = f.pageX - e.left;
f = f.pageY - e.top;
d /= e.scaleX;
f /= e.scaleY;
return c(a, {
chartX: Math.round(d),
chartY: Math.round(f)
})
};
a.prototype.onContainerClick = function(a) {
var d = this.chart,
h = d.hoverPoint;
a = this.normalize(a);
var e = d.plotLeft,
b = d.plotTop;
d.cancelClick || (h && this.inClass(a.target, "highcharts-tracker") ? (m(h.series, "click", c(a, {
point: h
})), d.hoverPoint && h.firePointEvent("click", a)) : (c(a, this.getCoordinates(a)), d.isInsidePlot(a.chartX - e, a.chartY - b, {
visiblePlotOnly: !0
}) && m(d, "click", a)))
};
a.prototype.onContainerMouseDown = function(a) {
var d = 1 === ((a.buttons || a.button) & 1);
a = this.normalize(a);
if (g.isFirefox && 0 !== a.button) this.onContainerMouseMove(a);
if ("undefined" === typeof a.button || d) this.zoomOption(a),
d && a.preventDefault && a.preventDefault(),
this.dragStart(a)
};
a.prototype.onContainerMouseLeave = function(d) {
var c = B[I(a.hoverChartIndex, -1)],
h = this.chart.tooltip;
d = this.normalize(d);
c && (d.relatedTarget || d.toElement) && (c.pointer.reset(), c.pointer.chartPosition = void 0);
h && !h.isHidden && this.reset()
};
a.prototype.onContainerMouseEnter = function(a) {
delete this.chartPosition
};
a.prototype.onContainerMouseMove = function(a) {
var d = this.chart,
c = d.tooltip;
a = this.normalize(a);
this.setHoverChartIndex();
a.preventDefault || (a.returnValue = !1); ("mousedown" === d.mouseIsDown || this.touchSelect(a)) && this.drag(a);
d.openMenu || !this.inClass(a.target, "highcharts-tracker") && !d.isInsidePlot(a.chartX - d.plotLeft, a.chartY - d.plotTop, {
visiblePlotOnly: !0
}) || c && c.shouldStickOnContact(a) || (this.inClass(a.target, "highcharts-no-tooltip") ? this.reset(!1, 0) : this.runPointActions(a))
};
a.prototype.onDocumentTouchEnd = function(d) {
var c = B[I(a.hoverChartIndex, -1)];
c && c.pointer.drop(d)
};
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 d = this.chart,
c = d.tooltip,
e = this.chartPosition;
a = this.normalize(a, e); ! e || d.isInsidePlot(a.chartX - d.plotLeft, a.chartY - d.plotTop, {
visiblePlotOnly: !0
}) || c && c.shouldStickOnContact(a) || this.inClass(a.target, "highcharts-tracker") || this.reset()
};
a.prototype.onDocumentMouseUp = function(d) {
var c = B[I(a.hoverChartIndex, -1)];
c && c.pointer.drop(d)
};
a.prototype.pinch = function(a) {
var d = this,
h = d.chart,
e = d.pinchDown,
b = a.touches || [],
f = b.length,
g = d.lastValidTouch,
l = d.hasZoom,
n = {},
u = 1 === f && (d.inClass(a.target, "highcharts-tracker") && h.runTrackerClick || d.runChartClick),
A = {},
t = d.chart.tooltip;
t = 1 === f && I(t && t.options.followTouchMove, !0);
var r = d.selectionMarker;
1 < f ? d.initiated = !0 : t && (d.initiated = !1);
l && d.initiated && !u && !1 !== a.cancelable && a.preventDefault(); [].map.call(b,
function(b) {
return d.normalize(b)
});
"touchstart" === a.type ? ([].forEach.call(b,
function(b, a) {
e[a] = {
chartX: b.chartX,
chartY: b.chartY
}
}), g.x = [e[0].chartX, e[1] && e[1].chartX], g.y = [e[0].chartY, e[1] && e[1].chartY], h.axes.forEach(function(b) {
if (b.zoomEnabled) {
var a = h.bounds[b.horiz ? "h": "v"],
d = b.minPixelPadding,
c = b.toPixels(Math.min(I(b.options.min, b.dataMin), b.dataMin)),
e = b.toPixels(Math.max(I(b.options.max, b.dataMax), b.dataMax)),
f = Math.max(c, e);
a.min = Math.min(b.pos, Math.min(c, e) - d);
a.max = Math.max(b.pos + b.len, f + d)
}
}), d.res = !0) : t ? this.runPointActions(d.normalize(a)) : e.length && (m(h, "touchpan", {
originalEvent: a
},
function() {
r || (d.selectionMarker = r = c({
destroy: G,
touch: !0
},
h.plotBox));
d.pinchTranslate(e, b, n, r, A, g);
d.hasPinched = l;
d.scaleGroups(n, A)
}), d.res && (d.res = !1, this.reset(!1, 0)))
};
a.prototype.pinchTranslate = function(a, c, h, e, b, f) {
this.zoomHor && this.pinchTranslateDirection(!0, a, c, h, e, b, f);
this.zoomVert && this.pinchTranslateDirection(!1, a, c, h, e, b, f)
};
a.prototype.pinchTranslateDirection = function(a, c, h, e, b, f, g, l) {
var d = this.chart,
k = a ? "x": "y",
p = a ? "X": "Y",
m = "chart" + p,
w = a ? "width": "height",
n = d["plot" + (a ? "Left": "Top")],
q = d.inverted,
z = d.bounds[a ? "h": "v"],
u = 1 === c.length,
A = c[0][m],
t = !u && c[1][m];
c = function() {
"number" === typeof C && 20 < Math.abs(A - t) && (M = l || Math.abs(r - C) / Math.abs(A - t));
P = (n - r) / M + A;
F = d["plot" + (a ? "Width": "Height")] / M
};
var F, P, M = l || 1,
r = h[0][m],
C = !u && h[1][m];
c();
h = P;
if (h < z.min) {
h = z.min;
var v = !0
} else h + F > z.max && (h = z.max - F, v = !0);
v ? (r -= .8 * (r - g[k][0]), "number" === typeof C && (C -= .8 * (C - g[k][1])), c()) : g[k] = [r, C];
q || (f[k] = P - n, f[w] = F);
f = q ? 1 / M: M;
b[w] = F;
b[k] = h;
e[q ? a ? "scaleY": "scaleX": "scale" + p] = M;
e["translate" + p] = f * n + (r - f * A)
};
a.prototype.reset = function(a, c) {
var d = this.chart,
e = d.hoverSeries,
b = d.hoverPoint,
f = d.hoverPoints,
g = d.tooltip,
l = g && g.shared ? f: b;
a && l && L(l).forEach(function(b) {
b.series.isCartesian && "undefined" === typeof b.plotX && (a = !1)
});
if (a) g && l && L(l).length && (g.refresh(l), g.shared && f ? f.forEach(function(b) {
b.setState(b.state, !0);
b.series.isCartesian && (b.series.xAxis.crosshair && b.series.xAxis.drawCrosshair(null, b), b.series.yAxis.crosshair && b.series.yAxis.drawCrosshair(null, b))
}) : b && (b.setState(b.state, !0), d.axes.forEach(function(a) {
a.crosshair && b.series[a.coll] === a && a.drawCrosshair(null, b)
})));
else {
if (b) b.onMouseOut();
f && f.forEach(function(b) {
b.setState()
});
if (e) e.onMouseOut();
g && g.hide(c);
this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove());
d.axes.forEach(function(b) {
b.hideCrosshair()
});
this.hoverX = d.hoverPoints = d.hoverPoint = null
}
};
a.prototype.runPointActions = function(d, c, h) {
var e = this.chart,
b = e.tooltip && e.tooltip.options.enabled ? e.tooltip: void 0,
f = b ? b.shared: !1,
g = c || e.hoverPoint,
m = g && g.series || e.hoverSeries;
c = this.getHoverData(g, m, e.series, (!d || "touchmove" !== d.type) && ( !! c || m && m.directTouch && this.isDirectTouch), f, d);
g = c.hoverPoint;
m = c.hoverSeries;
var n = c.hoverPoints;
c = m && m.tooltipOptions.followPointer && !m.tooltipOptions.split;
var q = f && m && !m.noSharedTooltip;
if (g && (h || g !== e.hoverPoint || b && b.isHidden)) { (e.hoverPoints || []).forEach(function(b) { - 1 === n.indexOf(b) && b.setState()
});
if (e.hoverSeries !== m) m.onMouseOver();
this.applyInactiveState(n); (n || []).forEach(function(b) {
b.setState("hover")
});
e.hoverPoint && e.hoverPoint.firePointEvent("mouseOut");
if (!g.series) return;
e.hoverPoints = n;
e.hoverPoint = g;
g.firePointEvent("mouseOver", void 0,
function() {
b && g && b.refresh(q ? n: g, d)
})
} else c && b && !b.isHidden && (h = b.getAnchor([{}], d), e.isInsidePlot(h[0], h[1], {
visiblePlotOnly: !0
}) && b.updatePosition({
plotX: h[0],
plotY: h[1]
}));
this.unDocMouseMove || (this.unDocMouseMove = r(e.container.ownerDocument, "mousemove",
function(b) {
var c = B[a.hoverChartIndex];
if (c) c.pointer.onDocumentMouseMove(b)
}), this.eventsToUnbind.push(this.unDocMouseMove));
e.axes.forEach(function(b) {
var a = I((b.crosshair || {}).snap, !0),
c;
a && ((c = e.hoverPoint) && c.series[b.coll] === b || (c = l(n,
function(a) {
return a.series && a.series[b.coll] === b
})));
c || !a ? b.drawCrosshair(d, c) : b.hideCrosshair()
})
};
a.prototype.scaleGroups = function(a, c) {
var d = this.chart;
d.series.forEach(function(h) {
var b = a || h.getPlotBox();
h.group && (h.xAxis && h.xAxis.zoomEnabled || d.mapView) && (h.group.attr(b), h.markerGroup && (h.markerGroup.attr(b), h.markerGroup.clip(c ? d.clipRect: null)), h.dataLabelsGroup && h.dataLabelsGroup.attr(b))
});
d.clipRect.attr(c || d.clipBox)
};
a.prototype.setDOMEvents = function() {
var c = this,
e = this.chart.container,
h = e.ownerDocument;
e.onmousedown = this.onContainerMouseDown.bind(this);
e.onmousemove = this.onContainerMouseMove.bind(this);
e.onclick = this.onContainerClick.bind(this);
this.eventsToUnbind.push(r(e, "mouseenter", this.onContainerMouseEnter.bind(this)));
this.eventsToUnbind.push(r(e, "mouseleave", this.onContainerMouseLeave.bind(this)));
a.unbindDocumentMouseUp || (a.unbindDocumentMouseUp = r(h, "mouseup", this.onDocumentMouseUp.bind(this)));
for (var f = this.chart.renderTo.parentElement; f && "BODY" !== f.tagName;) this.eventsToUnbind.push(r(f, "scroll",
function() {
delete c.chartPosition
})),
f = f.parentElement;
g.hasTouch && (this.eventsToUnbind.push(r(e, "touchstart", this.onContainerTouchStart.bind(this), {
passive: !1
})), this.eventsToUnbind.push(r(e, "touchmove", this.onContainerTouchMove.bind(this), {
passive: !1
})), a.unbindDocumentTouchEnd || (a.unbindDocumentTouchEnd = r(h, "touchend", this.onDocumentTouchEnd.bind(this), {
passive: !1
})))
};
a.prototype.setHoverChartIndex = function() {
var c = this.chart,
e = g.charts[I(a.hoverChartIndex, -1)];
if (e && e !== c) e.pointer.onContainerMouseLeave({
relatedTarget: c.container
});
e && e.mouseIsDown || (a.hoverChartIndex = c.index)
};
a.prototype.touch = function(a, c) {
var d = this.chart,
e;
this.setHoverChartIndex();
if (1 === a.touches.length) if (a = this.normalize(a), (e = d.isInsidePlot(a.chartX - d.plotLeft, a.chartY - d.plotTop, {
visiblePlotOnly: !0
})) && !d.openMenu) {
c && this.runPointActions(a);
if ("touchmove" === a.type) {
c = this.pinchDown;
var b = c[0] ? 4 <= Math.sqrt(Math.pow(c[0].chartX - a.chartX, 2) + Math.pow(c[0].chartY - a.chartY, 2)) : !1
}
I(b, !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.zooming.singleTouch || !a.touches || 1 !== a.touches.length)
};
a.prototype.zoomOption = function(a) {
var c = this.chart,
d = c.options.chart;
c = c.inverted;
var e = d.zooming.type || "";
/touch/.test(a.type) && (e = I(d.zooming.pinchType, e));
this.zoomX = a = /x/.test(e);
this.zoomY = d = /y/.test(e);
this.zoomHor = a && !c || d && c;
this.zoomVert = d && !c || a && c;
this.hasZoom = a || d
};
return a
} ();
"";
return a
});
K(g, "Core/MSPointer.js", [g["Core/Globals.js"], g["Core/Pointer.js"], g["Core/Utilities.js"]],
function(a, g, x) {
function v() {
var a = [];
a.item = function(a) {
return this[a]
};
l(u,
function(c) {
a.push({
pageX: c.pageX,
pageY: c.pageY,
target: c.target
})
});
return a
}
function D(a, c, e, f) {
var d = G[g.hoverChartIndex || NaN];
"touch" !== a.pointerType && a.pointerType !== a.MSPOINTER_TYPE_TOUCH || !d || (d = d.pointer, f(a), d[c]({
type: e,
target: a.currentTarget,
preventDefault: t,
touches: v()
}))
}
var B = this && this.__extends ||
function() {
var a = function(c, e) {
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, e)
};
return function(c, e) {
function f() {
this.constructor = c
}
a(c, e);
c.prototype = null === e ? Object.create(e) : (f.prototype = e.prototype, new f)
}
} (),
G = a.charts,
r = a.doc,
t = a.noop,
n = a.win,
f = x.addEvent,
c = x.css,
l = x.objectEach,
m = x.pick,
e = x.removeEvent,
u = {},
C = !!n.PointerEvent;
return function(g) {
function l() {
return null !== g && g.apply(this, arguments) || this
}
B(l, g);
l.isRequired = function() {
return ! (a.hasTouch || !n.PointerEvent && !n.MSPointerEvent)
};
l.prototype.batchMSEvents = function(a) {
a(this.chart.container, C ? "pointerdown": "MSPointerDown", this.onContainerPointerDown);
a(this.chart.container, C ? "pointermove": "MSPointerMove", this.onContainerPointerMove);
a(r, C ? "pointerup": "MSPointerUp", this.onDocumentPointerUp)
};
l.prototype.destroy = function() {
this.batchMSEvents(e);
g.prototype.destroy.call(this)
};
l.prototype.init = function(a, e) {
g.prototype.init.call(this, a, e);
this.hasZoom && c(a.container, {
"-ms-touch-action": "none",
"touch-action": "none"
})
};
l.prototype.onContainerPointerDown = function(a) {
D(a, "onContainerTouchStart", "touchstart",
function(a) {
u[a.pointerId] = {
pageX: a.pageX,
pageY: a.pageY,
target: a.currentTarget
}
})
};
l.prototype.onContainerPointerMove = function(a) {
D(a, "onContainerTouchMove", "touchmove",
function(a) {
u[a.pointerId] = {
pageX: a.pageX,
pageY: a.pageY
};
u[a.pointerId].target || (u[a.pointerId].target = a.currentTarget)
})
};
l.prototype.onDocumentPointerUp = function(a) {
D(a, "onDocumentTouchEnd", "touchend",
function(a) {
delete u[a.pointerId]
})
};
l.prototype.setDOMEvents = function() {
var a = this.chart.tooltip;
g.prototype.setDOMEvents.call(this); (this.hasZoom || m(a && a.options.followTouchMove, !0)) && this.batchMSEvents(f)
};
return l
} (g)
});
K(g, "Core/Legend/Legend.js", [g["Core/Animation/AnimationUtilities.js"], g["Core/FormatUtilities.js"], g["Core/Globals.js"], g["Core/Series/Point.js"], g["Core/Renderer/RendererUtilities.js"], g["Core/Utilities.js"]],
function(a, g, x, E, D, B) {
var v = a.animObject,
r = a.setAnimation,
t = g.format,
n = x.marginNames,
f = D.distribute,
c = B.addEvent,
l = B.createElement,
m = B.css,
e = B.defined,
u = B.discardElement,
C = B.find,
J = B.fireEvent,
I = B.isNumber,
L = B.merge,
A = B.pick,
d = B.relativeLength,
q = B.stableSort,
h = B.syncTimeout;
a = function() {
function a(b, a) {
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 = b;
this.init(b, a)
}
a.prototype.init = function(b, a) {
this.chart = b;
this.setOptions(a);
a.enabled && (this.render(), c(this.chart, "endResize",
function() {
this.legend.positionCheckboxes()
}), this.proximate ? this.unchartrender = c(this.chart, "render",
function() {
this.legend.proximatePositions();
this.legend.positionItems()
}) : this.unchartrender && this.unchartrender())
};
a.prototype.setOptions = function(b) {
var a = A(b.padding, 8);
this.options = b;
this.chart.styledMode || (this.itemStyle = b.itemStyle, this.itemHiddenStyle = L(this.itemStyle, b.itemHiddenStyle));
this.itemMarginTop = b.itemMarginTop || 0;
this.itemMarginBottom = b.itemMarginBottom || 0;
this.padding = a;
this.initialItemY = a - 5;
this.symbolWidth = A(b.symbolWidth, 16);
this.pages = [];
this.proximate = "proximate" === b.layout && !this.chart.inverted;
this.baseline = void 0
};
a.prototype.update = function(b, a) {
var c = this.chart;
this.setOptions(L(!0, this.options, b));
this.destroy();
c.isDirtyLegend = c.isDirtyBox = !0;
A(a, !0) && c.redraw();
J(this, "afterUpdate")
};
a.prototype.colorizeItem = function(b, a) {
var c = b.legendItem || {},
d = c.group,
e = c.label,
h = c.line;
c = c.symbol;
if (d) d[a ? "removeClass": "addClass"]("highcharts-legend-item-hidden");
if (!this.chart.styledMode) {
var f = this.options;
d = this.itemHiddenStyle.color;
f = a ? f.itemStyle.color: d;
var g = a ? b.color || d: d,
k = b.options && b.options.marker,
l = {
fill: g
};
e && e.css({
fill: f,
color: f
});
h && h.attr({
stroke: g
});
c && (k && c.isMarker && (l = b.pointAttribs(), a || (l.stroke = l.fill = d)), c.attr(l))
}
J(this, "afterColorizeItem", {
item: b,
visible: a
})
};
a.prototype.positionItems = function() {
this.allItems.forEach(this.positionItem, this);
this.chart.isResizing || this.positionCheckboxes()
};
a.prototype.positionItem = function(b) {
var a = this,
c = b.legendItem || {},
d = c.group,
h = c.x;
h = void 0 === h ? 0 : h;
c = c.y;
c = void 0 === c ? 0 : c;
var f = this.options,
g = f.symbolPadding,
l = !f.rtl;
f = b.checkbox;
d && d.element && (g = {
translateX: l ? h: this.legendWidth - h - 2 * g - 4,
translateY: c
},
d[e(d.translateY) ? "animate": "attr"](g, void 0,
function() {
J(a, "afterPositionItem", {
item: b
})
}));
f && (f.x = h, f.y = c)
};
a.prototype.destroyItem = function(b) {
for (var a = b.checkbox,
c = b.legendItem || {},
d = 0,
e = ["group", "label", "line", "symbol"]; d < e.length; d++) {
var h = e[d];
c[h] && (c[h] = c[h].destroy())
}
a && u(a);
b.legendItem = void 0
};
a.prototype.destroy = function() {
for (var b = 0,
a = this.getAllItems(); b < a.length; b++) this.destroyItem(a[b]);
b = 0;
for (a = "clipRect up down pager nav box title group".split(" "); b < a.length; b++) {
var c = a[b];
this[c] && (this[c] = this[c].destroy())
}
this.display = null
};
a.prototype.positionCheckboxes = function() {
var b = this.group && this.group.alignAttr,
a = this.clipHeight || this.legendHeight,
c = this.titleHeight;
if (b) {
var d = b.translateY;
this.allItems.forEach(function(e) {
var h = e.checkbox;
if (h) {
var f = d + c + h.y + (this.scrollOffset || 0) + 3;
m(h, {
left: b.translateX + e.checkboxOffset + h.x - 20 + "px",
top: f + "px",
display: this.proximate || f > d - 6 && f < d + a - 6 ? "": "none"
})
}
},
this)
}
};
a.prototype.renderTitle = function() {
var b = this.options,
a = this.padding,
c = b.title,
d = 0;
c.text && (this.title || (this.title = this.chart.renderer.label(c.text, a - 3, a - 4, void 0, void 0, void 0, b.useHTML, void 0, "legend-title").attr({
zIndex: 1
}), this.chart.styledMode || this.title.css(c.style), this.title.add(this.group)), c.width || this.title.css({
width: this.maxLegendWidth + "px"
}), b = this.title.getBBox(), d = b.height, this.offsetWidth = b.width, this.contentGroup.attr({
translateY: d
}));
this.titleHeight = d
};
a.prototype.setText = function(b) {
var a = this.options;
b.legendItem.label.attr({
text: a.labelFormat ? t(a.labelFormat, b, this.chart) : a.labelFormatter.call(b)
})
};
a.prototype.renderItem = function(b) {
var a = b.legendItem = b.legendItem || {},
c = this.chart,
d = c.renderer,
e = this.options,
h = this.symbolWidth,
f = e.symbolPadding || 0,
g = this.itemStyle,
l = this.itemHiddenStyle,
k = "horizontal" === e.layout ? A(e.itemDistance, 20) : 0,
m = !e.rtl,
n = !b.series,
u = !n && b.series.drawLegendSymbol ? b.series: b,
q = u.options,
t = this.createCheckboxForItem && q && q.showCheckbox,
F = e.useHTML,
P = b.options.className,
M = a.label;
q = h + f + k + (t ? 20 : 0);
M || (a.group = d.g("legend-item").addClass("highcharts-" + u.type + "-series highcharts-color-" + b.colorIndex + (P ? " " + P: "") + (n ? " highcharts-series-" + b.index: "")).attr({
zIndex: 1
}).add(this.scrollGroup), a.label = M = d.text("", m ? h + f: -f, this.baseline || 0, F), c.styledMode || M.css(L(b.visible ? g: l)), M.attr({
align: m ? "left": "right",
zIndex: 2
}).add(a.group), this.baseline || (this.fontMetrics = d.fontMetrics(c.styledMode ? 12 : g.fontSize, M), this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop, M.attr("y", this.baseline), this.symbolHeight = e.symbolHeight || this.fontMetrics.f, e.squareSymbol && (this.symbolWidth = A(e.symbolWidth, Math.max(this.symbolHeight, 16)), q = this.symbolWidth + f + k + (t ? 20 : 0), m && M.attr("x", this.symbolWidth + f))), u.drawLegendSymbol(this, b), this.setItemEvents && this.setItemEvents(b, M, F));
t && !b.checkbox && this.createCheckboxForItem && this.createCheckboxForItem(b);
this.colorizeItem(b, b.visible); ! c.styledMode && g.width || M.css({
width: (e.itemWidth || this.widthOption || c.spacingBox.width) - q + "px"
});
this.setText(b);
c = M.getBBox();
d = this.fontMetrics && this.fontMetrics.h || 0;
b.itemWidth = b.checkboxOffset = e.itemWidth || a.labelWidth || c.width + q;
this.maxItemWidth = Math.max(this.maxItemWidth, b.itemWidth);
this.totalItemWidth += b.itemWidth;
this.itemHeight = b.itemHeight = Math.round(a.labelHeight || (c.height > 1.5 * d ? c.height: d))
};
a.prototype.layoutItem = function(a) {
var b = this.options,
c = this.padding,
d = "horizontal" === b.layout,
e = a.itemHeight,
h = this.itemMarginBottom,
f = this.itemMarginTop,
g = d ? A(b.itemDistance, 20) : 0,
l = this.maxLegendWidth;
b = b.alignColumns && this.totalItemWidth > l ? this.maxItemWidth: a.itemWidth;
var k = a.legendItem || {};
d && this.itemX - c + b > l && (this.itemX = c, this.lastLineHeight && (this.itemY += f + this.lastLineHeight + h), this.lastLineHeight = 0);
this.lastItemY = f + this.itemY + h;
this.lastLineHeight = Math.max(e, this.lastLineHeight);
k.x = this.itemX;
k.y = this.itemY;
d ? this.itemX += b: (this.itemY += f + e + h, this.lastLineHeight = e);
this.offsetWidth = this.widthOption || Math.max((d ? this.itemX - c - (a.checkbox ? 0 : g) : b) + c, this.offsetWidth)
};
a.prototype.getAllItems = function() {
var a = [];
this.chart.series.forEach(function(b) {
var c = b && b.options;
b && A(c.showInLegend, e(c.linkedTo) ? !1 : void 0, !0) && (a = a.concat((b.legendItem || {}).labels || ("point" === c.legendType ? b.data: b)))
});
J(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, c) {
var b = this.chart,
d = this.options,
h = this.getAlignment();
h && [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/].forEach(function(f, g) {
f.test(h) && !e(a[g]) && (b[n[g]] = Math.max(b[n[g]], b.legend[(g + 1) % 2 ? "legendHeight": "legendWidth"] + [1, -1, -1, 1][g] * d[g % 2 ? "x": "y"] + A(d.margin, 12) + c[g] + (b.titleOffset[g] || 0)))
})
};
a.prototype.proximatePositions = function() {
var a = this.chart,
c = [],
d = "left" === this.options.align;
this.allItems.forEach(function(b) {
var e;
var h = d;
if (b.yAxis) {
b.xAxis.options.reversed && (h = !h);
b.points && (e = C(h ? b.points: b.points.slice(0).reverse(),
function(a) {
return I(a.plotY)
}));
h = this.itemMarginTop + b.legendItem.label.getBBox().height + this.itemMarginBottom;
var f = b.yAxis.top - a.plotTop;
b.visible ? (e = e ? e.plotY: b.yAxis.height, e += f - .3 * h) : e = f + b.yAxis.height;
c.push({
target: e,
size: h,
item: b
})
}
},
this);
for (var e, h = 0,
g = f(c, a.plotHeight); h < g.length; h++) {
var l = g[h];
e = l.item.legendItem || {};
l.pos && (e.y = a.plotTop - a.spacing[0] + l.pos)
}
};
a.prototype.render = function() {
var a = this.chart,
c = a.renderer,
e = this.options,
h = this.padding,
f = this.getAllItems(),
g = this.group,
l = this.box;
this.itemX = h;
this.itemY = this.initialItemY;
this.lastItemY = this.offsetWidth = 0;
this.widthOption = d(e.width, a.spacingBox.width - h);
var k = a.spacingBox.width - 2 * h - e.x; - 1 < ["rm", "lm"].indexOf(this.getAlignment().substring(0, 2)) && (k /= 2);
this.maxLegendWidth = this.widthOption || k;
g || (this.group = g = c.g("legend").addClass(e.className || "").attr({
zIndex: 7
}).add(), this.contentGroup = c.g().attr({
zIndex: 1
}).add(g), this.scrollGroup = c.g().add(this.contentGroup));
this.renderTitle();
q(f,
function(a, b) {
return (a.options && a.options.legendIndex || 0) - (b.options && b.options.legendIndex || 0)
});
e.reversed && f.reverse();
this.allItems = f;
this.display = k = !!f.length;
this.itemHeight = this.totalItemWidth = this.maxItemWidth = this.lastLineHeight = 0;
f.forEach(this.renderItem, this);
f.forEach(this.layoutItem, this);
f = (this.widthOption || this.offsetWidth) + h;
var m = this.lastItemY + this.lastLineHeight + this.titleHeight;
m = this.handleOverflow(m);
m += h;
l || (this.box = l = c.rect().addClass("highcharts-legend-box").attr({
r: e.borderRadius
}).add(g));
a.styledMode || l.attr({
stroke: e.borderColor,
"stroke-width": e.borderWidth || 0,
fill: e.backgroundColor || "none"
}).shadow(e.shadow);
if (0 < f && 0 < m) l[l.placed ? "animate": "attr"](l.crisp.call({},
{
x: 0,
y: 0,
width: f,
height: m
},
l.strokeWidth()));
g[k ? "show": "hide"]();
a.styledMode && "none" === g.getStyle("display") && (f = m = 0);
this.legendWidth = f;
this.legendHeight = m;
k && this.align();
this.proximate || this.positionItems();
J(this, "afterRender")
};
a.prototype.align = function(a) {
void 0 === a && (a = this.chart.spacingBox);
var b = this.chart,
c = this.options,
d = a.y;
/(lth|ct|rth)/.test(this.getAlignment()) && 0 < b.titleOffset[0] ? d += b.titleOffset[0] : /(lbh|cb|rbh)/.test(this.getAlignment()) && 0 < b.titleOffset[2] && (d -= b.titleOffset[2]);
d !== a.y && (a = L(a, {
y: d
}));
b.hasRendered || (this.group.placed = !1);
this.group.align(L(c, {
width: this.legendWidth,
height: this.legendHeight,
verticalAlign: this.proximate ? "top": c.verticalAlign
}), !0, a)
};
a.prototype.handleOverflow = function(a) {
var b = this,
c = this.chart,
d = c.renderer,
e = this.options,
h = e.y,
f = "top" === e.verticalAlign,
g = this.padding,
l = e.maxHeight,
k = e.navigation,
m = A(k.animation, !0),
n = k.arrowSize || 12,
u = this.pages,
q = this.allItems,
t = function(a) {
"number" === typeof a ? v.attr({
height: a
}) : v && (b.clipRect = v.destroy(), b.contentGroup.clip());
b.contentGroup.div && (b.contentGroup.div.style.clip = a ? "rect(" + g + "px,9999px," + (g + a) + "px,0)": "auto")
},
F = function(a) {
b[a] = d.circle(0, 0, 1.3 * n).translate(n / 2, n / 2).add(C);
c.styledMode || b[a].attr("fill", "rgba(0,0,0,0.0001)");
return b[a]
},
P,
M,
r;
h = c.spacingBox.height + (f ? -h: h) - g;
var C = this.nav,
v = this.clipRect;
"horizontal" !== e.layout || "middle" === e.verticalAlign || e.floating || (h /= 2);
l && (h = Math.min(h, l));
u.length = 0;
a && 0 < h && a > h && !1 !== k.enabled ? (this.clipHeight = P = Math.max(h - 20 - this.titleHeight - g, 0), this.currentPage = A(this.currentPage, 1), this.fullHeight = a, q.forEach(function(a, b) {
r = a.legendItem || {};
a = r.y || 0;
var c = Math.round(r.label.getBBox().height),
d = u.length;
if (!d || a - u[d - 1] > P && (M || a) !== u[d - 1]) u.push(M || a),
d++;
r.pageIx = d - 1;
M && ((q[b - 1].legendItem || {}).pageIx = d - 1);
b === q.length - 1 && a + c - u[d - 1] > P && c <= P && (u.push(a), r.pageIx = d);
a !== M && (M = a)
}), v || (v = b.clipRect = d.clipRect(0, g, 9999, 0), b.contentGroup.clip(v)), t(P), C || (this.nav = C = d.g().attr({
zIndex: 1
}).add(this.group), this.up = d.symbol("triangle", 0, 0, n, n).add(C), F("upTracker").on("click",
function() {
b.scroll( - 1, m)
}), this.pager = d.text("", 15, 10).addClass("highcharts-legend-navigation"), !c.styledMode && k.style && this.pager.css(k.style), this.pager.add(C), this.down = d.symbol("triangle-down", 0, 0, n, n).add(C), F("downTracker").on("click",
function() {
b.scroll(1, m)
})), b.scroll(0), a = h) : C && (t(), this.nav = C.destroy(), this.scrollGroup.attr({
translateY: 1
}), this.clipHeight = 0);
return a
};
a.prototype.scroll = function(a, c) {
var b = this,
d = this.chart,
e = this.pages,
f = e.length,
g = this.clipHeight,
l = this.options.navigation,
k = this.pager,
m = this.padding,
p = this.currentPage + a;
p > f && (p = f);
0 < p && ("undefined" !== typeof c && r(c, d), this.nav.attr({
translateX: m,
translateY: g + this.padding + 7 + this.titleHeight,
visibility: "inherit"
}), [this.up, this.upTracker].forEach(function(a) {
a.attr({
"class": 1 === p ? "highcharts-legend-nav-inactive": "highcharts-legend-nav-active"
})
}), k.attr({
text: p + "/" + f
}), [this.down, this.downTracker].forEach(function(a) {
a.attr({
x: 18 + this.pager.getBBox().width,
"class": p === f ? "highcharts-legend-nav-inactive": "highcharts-legend-nav-active"
})
},
this), d.styledMode || (this.up.attr({
fill: 1 === p ? l.inactiveColor: l.activeColor
}), this.upTracker.css({
cursor: 1 === p ? "default": "pointer"
}), this.down.attr({
fill: p === f ? l.inactiveColor: l.activeColor
}), this.downTracker.css({
cursor: p === f ? "default": "pointer"
})), this.scrollOffset = -e[p - 1] + this.initialItemY, this.scrollGroup.animate({
translateY: this.scrollOffset
}), this.currentPage = p, this.positionCheckboxes(), a = v(A(c, d.renderer.globalAnimation, !0)), h(function() {
J(b, "afterScroll", {
currentPage: p
})
},
a.duration))
};
a.prototype.setItemEvents = function(a, c, d) {
var b = this,
e = a.legendItem || {},
h = b.chart.renderer.boxWrapper,
f = a instanceof E,
g = "highcharts-legend-" + (f ? "point": "series") + "-active",
l = b.chart.styledMode,
k = function(c) {
b.allItems.forEach(function(b) {
a !== b && [b].concat(b.linkedSeries || []).forEach(function(a) {
a.setState(c, !f)
})
})
},
m = 0;
for (d = d ? [c, e.symbol] : [e.group]; m < d.length; m++) if (e = d[m]) e.on("mouseover",
function() {
a.visible && k("inactive");
a.setState("hover");
a.visible && h.addClass(g);
l || c.css(b.options.itemHoverStyle)
}).on("mouseout",
function() {
b.chart.styledMode || c.css(L(a.visible ? b.itemStyle: b.itemHiddenStyle));
k("");
h.removeClass(g);
a.setState()
}).on("click",
function(b) {
var c = function() {
a.setVisible && a.setVisible();
k(a.visible ? "inactive": "")
};
h.removeClass(g);
b = {
browserEvent: b
};
a.firePointEvent ? a.firePointEvent("legendItemClick", b, c) : J(a, "legendItemClick", b, c)
})
};
a.prototype.createCheckboxForItem = function(a) {
a.checkbox = l("input", {
type: "checkbox",
className: "highcharts-legend-checkbox",
checked: a.selected,
defaultChecked: a.selected
},
this.options.itemCheckboxStyle, this.chart.container);
c(a.checkbox, "click",
function(b) {
J(a.series || a, "checkboxClick", {
checked: b.target.checked,
item: a
},
function() {
a.select()
})
})
};
return a
} ();
"";
return a
});
K(g, "Core/Series/SeriesRegistry.js", [g["Core/Globals.js"], g["Core/Defaults.js"], g["Core/Series/Point.js"], g["Core/Utilities.js"]],
function(a, g, x, E) {
var v = g.defaultOptions,
B = E.extendClass,
G = E.merge,
r; (function(g) {
function n(a, c) {
var f = v.plotOptions || {},
m = c.defaultOptions,
e = c.prototype;
e.type = a;
e.pointClass || (e.pointClass = x);
m && (f[a] = m);
g.seriesTypes[a] = c
}
g.seriesTypes = a.seriesTypes;
g.registerSeriesType = n;
g.seriesType = function(a, c, l, m, e) {
var f = v.plotOptions || {};
c = c || "";
f[a] = G(f[c], l);
n(a, B(g.seriesTypes[c] ||
function() {},
m));
g.seriesTypes[a].prototype.type = a;
e && (g.seriesTypes[a].prototype.pointClass = B(x, e));
return g.seriesTypes[a]
}
})(r || (r = {}));
return r
});
K(g, "Core/Chart/Chart.js", [g["Core/Animation/AnimationUtilities.js"], g["Core/Axis/Axis.js"], g["Core/Defaults.js"], g["Core/FormatUtilities.js"], g["Core/Foundation.js"], g["Core/Globals.js"], g["Core/Legend/Legend.js"], g["Core/MSPointer.js"], g["Core/Pointer.js"], g["Core/Renderer/RendererRegistry.js"], g["Core/Series/SeriesRegistry.js"], g["Core/Renderer/SVG/SVGRenderer.js"], g["Core/Time.js"], g["Core/Utilities.js"], g["Core/Renderer/HTML/AST.js"]],
function(a, g, x, E, D, B, G, r, t, n, f, c, l, m, e) {
var u = a.animate,
C = a.animObject,
v = a.setAnimation,
I = x.defaultOptions,
L = x.defaultTime,
A = E.numberFormat,
d = D.registerEventOptions,
q = B.charts,
h = B.doc,
k = B.marginNames,
b = B.svg,
p = B.win,
z = f.seriesTypes,
w = m.addEvent,
N = m.attr,
H = m.cleanRecursively,
O = m.createElement,
Q = m.css,
S = m.defined,
Y = m.discardElement,
y = m.erase,
T = m.error,
K = m.extend,
ca = m.find,
R = m.fireEvent,
F = m.getStyle,
P = m.isArray,
M = m.isNumber,
X = m.isObject,
W = m.isString,
U = m.merge,
Z = m.objectEach,
V = m.pick,
ba = m.pInt,
ha = m.relativeLength,
da = m.removeEvent,
fa = m.splat,
ia = m.syncTimeout,
ka = m.uniqueKey;
a = function() {
function a(a, b, c) {
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, c)
}
a.chart = function(b, c, d) {
return new a(b, c, d)
};
a.prototype.getArgs = function(a, b, c) {
W(a) || a.nodeName ? (this.renderTo = a, this.init(b, c)) : this.init(a, b)
};
a.prototype.init = function(a, b) {
var c = a.plotOptions || {};
R(this, "init", {
args: arguments
},
function() {
var e = U(I, a),
h = e.chart;
Z(e.plotOptions,
function(a, b) {
X(a) && (a.tooltip = c[b] && U(c[b].tooltip) || void 0)
});
e.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;
var f = h.zooming = h.zooming || {};
a.chart && !a.chart.zooming && (f.resetButton = h.resetZoomButton);
f.key = V(f.key, h.zoomKey);
f.pinchType = V(f.pinchType, h.pinchType);
f.singleTouch = V(f.singleTouch, h.zoomBySingleTouch);
f.type = V(f.type, h.zoomType);
this.options = e;
this.axes = [];
this.series = [];
this.time = a.time && Object.keys(a.time).length ? new l(a.time) : B.time;
this.numberFormatter = h.numberFormatter || A;
this.styledMode = h.styledMode;
this.hasCartesianSeries = h.showAxes;
this.index = q.length;
q.push(this);
B.chartCount++;
d(this, h);
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 c = z[b];
c || T(17, !0, this, {
missingModuleFor: b
});
b = new c;
"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 c = b.length; a < c; ++a) b[a] && (b[a].index = a, b[a].name = b[a].getName())
};
a.prototype.isInsidePlot = function(a, b, c) {
void 0 === c && (c = {});
var d = this.inverted,
e = this.plotBox,
h = this.plotLeft,
f = this.plotTop,
g = this.scrollablePlotBox,
l = 0;
var k = 0;
c.visiblePlotOnly && this.scrollingContainer && (k = this.scrollingContainer, l = k.scrollLeft, k = k.scrollTop);
var m = c.series;
e = c.visiblePlotOnly && g || e;
g = c.inverted ? b: a;
b = c.inverted ? a: b;
a = {
x: g,
y: b,
isInsidePlot: !0,
options: c
};
if (!c.ignoreX) {
var p = m && (d && !this.polar ? m.yAxis: m.xAxis) || {
pos: h,
len: Infinity
};
g = c.paneCoordinates ? p.pos + g: h + g;
g >= Math.max(l + h, p.pos) && g <= Math.min(l + h + e.width, p.pos + p.len) || (a.isInsidePlot = !1)
} ! c.ignoreY && a.isInsidePlot && (d = c.axis && !c.axis.isXAxis && c.axis || m && (d ? m.xAxis: m.yAxis) || {
pos: f,
len: Infinity
},
c = c.paneCoordinates ? d.pos + b: f + b, c >= Math.max(k + f, d.pos) && c <= Math.min(k + f + e.height, d.pos + d.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 || [],
c = this.series,
d = this.pointer,
e = this.legend,
h = this.userOptions.legend,
f = this.renderer,
g = f.isHidden(),
l = [],
k = this.isDirtyBox,
m = this.isDirtyLegend;
this.setResponsive && this.setResponsive(!1);
v(this.hasRendered ? a: !1, this);
g && this.temporaryDisplay();
this.layOutTitles();
for (a = c.length; a--;) {
var p = c[a];
if (p.options.stacking || p.options.centerInCategory) {
var F = !0;
if (p.isDirty) {
var n = !0;
break
}
}
}
if (n) for (a = c.length; a--;) p = c[a],
p.options.stacking && (p.isDirty = !0);
c.forEach(function(a) {
a.isDirty && ("point" === a.options.legendType ? ("function" === typeof a.updateTotals && a.updateTotals(), m = !0) : h && (h.labelFormatter || h.labelFormat) && (m = !0));
a.isDirtyData && R(a, "updatedData")
});
m && e && e.options.enabled && (e.render(), this.isDirtyLegend = !1);
F && this.getStacks();
b.forEach(function(a) {
a.updateNames();
a.setScale()
});
this.getMargins();
b.forEach(function(a) {
a.isDirty && (k = !0)
});
b.forEach(function(a) {
var b = a.min + "," + a.max;
a.extKey !== b && (a.extKey = b, l.push(function() {
R(a, "afterSetExtremes", K(a.eventArgs, a.getExtremes()));
delete a.eventArgs
})); (k || F) && a.redraw()
});
k && this.drawChartBox();
R(this, "predraw");
c.forEach(function(a) { (k || a.isDirty) && a.visible && a.redraw();
a.isDirtyData = !1
});
d && d.reset(!0);
f.draw();
R(this, "redraw");
R(this, "render");
g && this.temporaryDisplay(!0);
l.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 c = this.series,
d = ca(this.axes, b) || ca(this.series, b), e = 0; ! d && e < c.length; e++) d = ca(c[e].points || [], b);
return d
};
a.prototype.getAxes = function() {
var a = this,
b = this.options,
c = b.xAxis = fa(b.xAxis || {});
b = b.yAxis = fa(b.yAxis || {});
R(this, "getAxes");
c.forEach(function(a, b) {
a.index = b;
a.isX = !0
});
b.forEach(function(a, b) {
a.index = b
});
c.concat(b).forEach(function(b) {
new g(a, b)
});
R(this, "afterGetAxes")
};
a.prototype.getSelectedPoints = function() {
return this.series.reduce(function(a, b) {
b.getPointsCollection().forEach(function(b) {
V(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, c) {
this.applyDescription("title", a);
this.applyDescription("subtitle", b);
this.applyDescription("caption", void 0);
this.layOutTitles(c)
};
a.prototype.applyDescription = function(a, b) {
var c = this,
d = "title" === a ? {
color: "#333333",
fontSize: this.options.isStock ? "16px": "18px"
}: {
color: "#666666"
};
d = this.options[a] = U(!this.styledMode && {
style: d
},
this.options[a], b);
var e = this[a];
e && b && (this[a] = e = e.destroy());
d && !e && (e = this.renderer.text(d.text, 0, 0, d.useHTML).attr({
align: d.align,
"class": "highcharts-" + a,
zIndex: d.zIndex || 4
}).add(), e.update = function(b) {
c[{
title: "setTitle",
subtitle: "setSubtitle",
caption: "setCaption"
} [a]](b)
},
this.styledMode || e.css(d.style), this[a] = e)
};
a.prototype.layOutTitles = function(a) {
var b = [0, 0, 0],
c = this.renderer,
d = this.spacingBox; ["title", "subtitle", "caption"].forEach(function(a) {
var e = this[a],
h = this.options[a],
f = h.verticalAlign || "top";
a = "title" === a ? "top" === f ? -3 : 0 : "top" === f ? b[0] + 2 : 0;
var g;
if (e) {
this.styledMode || (g = h.style && h.style.fontSize);
g = c.fontMetrics(g, e).b;
e.css({
width: (h.width || d.width + (h.widthAdjust || 0)) + "px"
});
var k = Math.round(e.getBBox(h.useHTML).height);
e.align(K({
y: "bottom" === f ? g: a + g,
height: k
},
h), !1, "spacingBox");
h.floating || ("top" === f ? b[0] = Math.ceil(b[0] + k) : "bottom" === f && (b[2] = Math.ceil(b[2] + k)))
}
},
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 e = !this.titleOffset || this.titleOffset.join(",") !== b.join(",");
this.titleOffset = b;
R(this, "afterLayOutTitles"); ! this.isDirtyBox && e && (this.isDirtyBox = this.isDirtyLegend = e, this.hasRendered && V(a, !0) && this.isDirtyBox && this.redraw())
};
a.prototype.getChartSize = function() {
var a = this.options.chart,
b = a.width;
a = a.height;
var c = this.renderTo;
S(b) || (this.containerWidth = F(c, "width"));
S(a) || (this.containerHeight = F(c, "height"));
this.chartWidth = Math.max(0, b || this.containerWidth || 600);
this.chartHeight = Math.max(0, ha(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 && (Q(b, b.hcOrigStyle), delete b.hcOrigStyle),
b.hcOrigDetached && (h.body.removeChild(b), b.hcOrigDetached = !1),
b = b.parentNode;
else for (; b && b.style;) {
h.body.contains(b) || b.parentNode || (b.hcOrigDetached = !0, h.body.appendChild(b));
if ("none" === F(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),
Q(b, a),
b.offsetWidth || b.style.setProperty("display", "block", "important");
b = b.parentNode;
if (b === h.body) break
}
};
a.prototype.setClassName = function(a) {
this.container.className = "highcharts-container " + (a || "")
};
a.prototype.getContainer = function() {
var a = this.options,
d = a.chart,
f = ka(),
g,
k = this.renderTo;
k || (this.renderTo = k = d.renderTo);
W(k) && (this.renderTo = k = h.getElementById(k));
k || T(13, !0, this);
var l = ba(N(k, "data-highcharts-chart"));
M(l) && q[l] && q[l].hasRendered && q[l].destroy();
N(k, "data-highcharts-chart", this.index);
k.innerHTML = e.emptyHTML;
d.skipClone || k.offsetWidth || this.temporaryDisplay();
this.getChartSize();
l = this.chartWidth;
var m = this.chartHeight;
Q(k, {
overflow: "hidden"
});
this.styledMode || (g = K({
position: "relative",
overflow: "hidden",
width: l + "px",
height: m + "px",
textAlign: "left",
lineHeight: "normal",
zIndex: 0,
"-webkit-tap-highlight-color": "rgba(0,0,0,0)",
userSelect: "none",
"touch-action": "manipulation",
outline: "none"
},
d.style || {}));
this.container = f = O("div", {
id: f
},
g, k);
this._cursor = f.style.cursor;
this.renderer = new(d.renderer || !b ? n.getRendererType(d.renderer) : c)(f, l, m, void 0, d.forExport, a.exporting && a.exporting.allowHTML, this.styledMode);
v(void 0, this);
this.setClassName(d.className);
if (this.styledMode) for (var p in a.defs) this.renderer.definition(a.defs[p]);
else this.renderer.setStyle(d.style);
this.renderer.chartIndex = this.index;
R(this, "afterGetContainer")
};
a.prototype.getMargins = function(a) {
var b = this.spacing,
c = this.margin,
d = this.titleOffset;
this.resetMargins();
d[0] && !S(c[0]) && (this.plotTop = Math.max(this.plotTop, d[0] + b[0]));
d[2] && !S(c[2]) && (this.marginBottom = Math.max(this.marginBottom, d[2] + b[2]));
this.legend && this.legend.display && this.legend.adjustMargins(c, b);
R(this, "getMargins");
a || this.getAxisMargins()
};
a.prototype.getAxisMargins = function() {
var a = this,
b = a.axisOffset = [0, 0, 0, 0],
c = a.colorAxis,
d = a.margin,
e = function(a) {
a.forEach(function(a) {
a.visible && a.getOffset()
})
};
a.hasCartesianSeries ? e(a.axes) : c && c.length && e(c);
k.forEach(function(c, e) {
S(d[e]) || (a[c] += b[e])
});
a.setChartSize()
};
a.prototype.reflow = function(a) {
var b = this,
c = b.options.chart,
d = b.renderTo,
e = S(c.width) && S(c.height),
f = c.width || F(d, "width");
c = c.height || F(d, "height");
d = a ? a.target: p;
delete b.pointer.chartPosition;
if (!e && !b.isPrinting && f && c && (d === p || d === h)) {
if (f !== b.containerWidth || c !== b.containerHeight) m.clearTimeout(b.reflowTimeout),
b.reflowTimeout = ia(function() {
b.container && b.setSize(void 0, void 0, !1)
},
a ? 100 : 0);
b.containerWidth = f;
b.containerHeight = c
}
};
a.prototype.setReflow = function(a) {
var b = this; ! 1 === a || this.unbindReflow ? !1 === a && this.unbindReflow && (this.unbindReflow = this.unbindReflow()) : (this.unbindReflow = w(p, "resize",
function(a) {
b.options && b.reflow(a)
}), w(this, "destroy", this.unbindReflow))
};
a.prototype.setSize = function(a, b, c) {
var d = this,
e = d.renderer;
d.isResizing += 1;
v(c, d);
c = e.globalAnimation;
d.oldChartHeight = d.chartHeight;
d.oldChartWidth = d.chartWidth;
"undefined" !== typeof a && (d.options.chart.width = a);
"undefined" !== typeof b && (d.options.chart.height = b);
d.getChartSize();
d.styledMode || (c ? u: Q)(d.container, {
width: d.chartWidth + "px",
height: d.chartHeight + "px"
},
c);
d.setChartSize(!0);
e.setSize(d.chartWidth, d.chartHeight, c);
d.axes.forEach(function(a) {
a.isDirty = !0;
a.setScale()
});
d.isDirtyLegend = !0;
d.isDirtyBox = !0;
d.layOutTitles();
d.getMargins();
d.redraw(c);
d.oldChartHeight = null;
R(d, "resize");
ia(function() {
d && R(d, "endResize", null,
function() {--d.isResizing
})
},
C(c).duration)
};
a.prototype.setChartSize = function(a) {
var b = this.inverted,
c = this.renderer,
d = this.chartWidth,
e = this.chartHeight,
h = this.options.chart,
f = this.spacing,
g = this.clipOffset,
k, l, m, p;
this.plotLeft = k = Math.round(this.plotLeft);
this.plotTop = l = Math.round(this.plotTop);
this.plotWidth = m = Math.max(0, Math.round(d - k - this.marginRight));
this.plotHeight = p = Math.max(0, Math.round(e - l - this.marginBottom));
this.plotSizeX = b ? p: m;
this.plotSizeY = b ? m: p;
this.plotBorderWidth = h.plotBorderWidth || 0;
this.spacingBox = c.spacingBox = {
x: f[3],
y: f[0],
width: d - f[3] - f[1],
height: e - f[0] - f[2]
};
this.plotBox = c.plotBox = {
x: k,
y: l,
width: m,
height: p
};
b = 2 * Math.floor(this.plotBorderWidth / 2);
d = Math.ceil(Math.max(b, g[3]) / 2);
e = Math.ceil(Math.max(b, g[0]) / 2);
this.clipBox = {
x: d,
y: e,
width: Math.floor(this.plotSizeX - Math.max(b, g[1]) / 2 - d),
height: Math.max(0, Math.floor(this.plotSizeY - Math.max(b, g[2]) / 2 - e))
};
a || (this.axes.forEach(function(a) {
a.setAxisSize();
a.setAxisTranslation()
}), c.alignElements());
R(this, "afterSetChartSize", {
skipAxes: a
})
};
a.prototype.resetMargins = function() {
R(this, "resetMargins");
var a = this,
b = a.options.chart; ["margin", "spacing"].forEach(function(c) {
var d = b[c],
e = X(d) ? d: [d, d, d, d]; ["Top", "Right", "Bottom", "Left"].forEach(function(d, h) {
a[c][h] = V(b[c + d], e[h])
})
});
k.forEach(function(b, c) {
a[b] = V(a.margin[c], a.spacing[c])
});
a.axisOffset = [0, 0, 0, 0];
a.clipOffset = [0, 0, 0, 0]
};
a.prototype.drawChartBox = function() {
var a = this.options.chart,
b = this.renderer,
c = this.chartWidth,
d = this.chartHeight,
e = this.styledMode,
h = this.plotBGImage,
f = a.backgroundColor,
g = a.plotBackgroundColor,
k = a.plotBackgroundImage,
l = this.plotLeft,
m = this.plotTop,
p = this.plotWidth,
F = this.plotHeight,
n = this.plotBox,
u = this.clipRect,
q = this.clipBox,
w = this.chartBackground,
M = this.plotBackground,
z = this.plotBorder,
y, t = "animate";
w || (this.chartBackground = w = b.rect().addClass("highcharts-background").add(), t = "attr");
if (e) var P = y = w.strokeWidth();
else {
P = a.borderWidth || 0;
y = P + (a.shadow ? 8 : 0);
f = {
fill: f || "none"
};
if (P || w["stroke-width"]) f.stroke = a.borderColor,
f["stroke-width"] = P;
w.attr(f).shadow(a.shadow)
}
w[t]({
x: y / 2,
y: y / 2,
width: c - y - P % 2,
height: d - y - P % 2,
r: a.borderRadius
});
t = "animate";
M || (t = "attr", this.plotBackground = M = b.rect().addClass("highcharts-plot-background").add());
M[t](n);
e || (M.attr({
fill: g || "none"
}).shadow(a.plotShadow), k && (h ? (k !== h.attr("href") && h.attr("href", k), h.animate(n)) : this.plotBGImage = b.image(k, l, m, p, F).add()));
u ? u.animate({
width: q.width,
height: q.height
}) : this.clipRect = b.clipRect(q);
t = "animate";
z || (t = "attr", this.plotBorder = z = b.rect().addClass("highcharts-plot-border").attr({
zIndex: 1
}).add());
e || z.attr({
stroke: a.plotBorderColor,
"stroke-width": a.plotBorderWidth || 0,
fill: "none"
});
z[t](z.crisp({
x: l,
y: m,
width: p,
height: F
},
-z.strokeWidth()));
this.isDirtyBox = !1;
R(this, "afterDrawChartBox")
};
a.prototype.propFromSeries = function() {
var a = this,
b = a.options.chart,
c = a.options.series,
d, e, h; ["inverted", "angular", "polar"].forEach(function(f) {
e = z[b.type || b.defaultSeriesType];
h = b[f] || e && e.prototype[f];
for (d = c && c.length; ! h && d--;)(e = z[c[d].type]) && e.prototype[f] && (h = !0);
a[f] = h
})
};
a.prototype.linkSeries = function() {
var a = this,
b = a.series;
b.forEach(function(a) {
a.linkedSeries.length = 0
});
b.forEach(function(b) {
var c = b.options.linkedTo;
W(c) && (c = ":previous" === c ? a.series[b.index - 1] : a.get(c)) && c.linkedParent !== b && (c.linkedSeries.push(b), b.linkedParent = c, c.enabledDataSorting && b.setDataSortingOptions(), b.visible = V(b.options.visible, c.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(c) {
var d = K(b.style, c.style),
e = ba(d.left) + a.plotLeft,
h = ba(d.top) + a.plotTop + 12;
delete d.left;
delete d.top;
a.renderer.text(c.html, e, h).attr({
zIndex: 2
}).css(d).add()
})
};
a.prototype.render = function() {
var a = this.axes,
b = this.colorAxis,
c = this.renderer,
d = this.options,
e = function(a) {
a.forEach(function(a) {
a.visible && a.render()
})
},
h = 0;
this.setTitle();
this.legend = new G(this, d.legend);
this.getStacks && this.getStacks();
this.getMargins(!0);
this.setChartSize();
d = this.plotWidth;
a.some(function(a) {
if (a.horiz && a.visible && a.options.labels.enabled && a.series.length) return h = 21,
!0
});
var f = this.plotHeight = Math.max(this.plotHeight - h, 0);
a.forEach(function(a) {
a.setScale()
});
this.getAxisMargins();
var g = 1.1 < d / this.plotWidth,
k = 1.05 < f / this.plotHeight;
if (g || k) a.forEach(function(a) { (a.horiz && g || !a.horiz && k) && a.setTickInterval(!0)
}),
this.getMargins();
this.drawChartBox();
this.hasCartesianSeries ? e(a) : b && b.length && e(b);
this.seriesGroup || (this.seriesGroup = c.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,
c = U(!0, this.options.credits, a);
c.enabled && !this.credits && (this.credits = this.renderer.text(c.text + (this.mapCredits || ""), 0, 0).addClass("highcharts-credits").on("click",
function() {
c.href && (p.location.href = c.href)
}).attr({
align: c.position.align,
zIndex: 8
}), b.styledMode || this.credits.css(c.style), this.credits.add().align(c.position), this.credits.update = function(a) {
b.credits = b.credits.destroy();
b.addCredits(a)
})
};
a.prototype.destroy = function() {
var a = this,
b = a.axes,
c = a.series,
d = a.container,
h = d && d.parentNode,
f;
R(a, "destroy");
a.renderer.forExport ? y(q, a) : q[a.index] = void 0;
B.chartCount--;
a.renderTo.removeAttribute("data-highcharts-chart");
da(a);
for (f = b.length; f--;) b[f] = b[f].destroy();
this.scroller && this.scroller.destroy && this.scroller.destroy();
for (f = c.length; f--;) c[f] = c[f].destroy();
"title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer".split(" ").forEach(function(b) {
var c = a[b];
c && c.destroy && (a[b] = c.destroy())
});
d && (d.innerHTML = e.emptyHTML, da(d), h && Y(d));
Z(a,
function(b, c) {
delete a[c]
})
};
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");
t && (r.isRequired() ? a.pointer = new r(a, b) : a.pointer = new t(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");
S(this.index) && this.setReflow(this.options.chart.reflow);
this.warnIfA11yModuleNotLoaded();
this.hasLoaded = !0
};
a.prototype.warnIfA11yModuleNotLoaded = function() {
var a = this.options,
b = this.title;
a && !this.accessibility && (this.renderer.boxWrapper.attr({
role: "img",
"aria-label": (b && b.element.textContent || "").replace(/</g, "<")
}), a.accessibility && !1 === a.accessibility.enabled || T('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, c) {
var d = this,
e;
a && (b = V(b, !0), R(d, "addSeries", {
options: a
},
function() {
e = d.initSeries(a);
d.isDirtyLegend = !0;
d.linkSeries();
e.enabledDataSorting && e.setData(a.data, !1);
R(d, "afterAddSeries", {
series: e
});
b && d.redraw(c)
}));
return e
};
a.prototype.addAxis = function(a, b, c, d) {
return this.createAxis(b ? "xAxis": "yAxis", {
axis: a,
redraw: c,
animation: d
})
};
a.prototype.addColorAxis = function(a, b, c) {
return this.createAxis("colorAxis", {
axis: a,
redraw: b,
animation: c
})
};
a.prototype.createAxis = function(a, b) {
a = new g(this, U(b.axis, {
index: this[a].length,
isX: "xAxis" === a
}));
V(b.redraw, !0) && this.redraw(b.animation);
return a
};
a.prototype.showLoading = function(a) {
var b = this,
c = b.options,
d = c.loading,
h = function() {
f && Q(f, {
left: b.plotLeft + "px",
top: b.plotTop + "px",
width: b.plotWidth + "px",
height: b.plotHeight + "px"
})
},
f = b.loadingDiv,
g = b.loadingSpan;
f || (b.loadingDiv = f = O("div", {
className: "highcharts-loading highcharts-loading-hidden"
},
null, b.container));
g || (b.loadingSpan = g = O("span", {
className: "highcharts-loading-inner"
},
null, f), w(b, "redraw", h));
f.className = "highcharts-loading";
e.setElementHTML(g, V(a, c.lang.loading, ""));
b.styledMode || (Q(f, K(d.style, {
zIndex: 10
})), Q(g, d.labelStyle), b.loadingShown || (Q(f, {
opacity: 0,
display: ""
}), u(f, {
opacity: d.style.opacity || .5
},
{
duration: d.showDuration || 0
})));
b.loadingShown = !0;
h()
};
a.prototype.hideLoading = function() {
var a = this.options,
b = this.loadingDiv;
b && (b.className = "highcharts-loading highcharts-loading-hidden", this.styledMode || u(b, {
opacity: 0
},
{
duration: a.loading.hideDuration || 100,
complete: function() {
Q(b, {
display: "none"
})
}
}));
this.loadingShown = !1
};
a.prototype.update = function(a, b, c, e) {
var h = this,
f = {
credits: "addCredits",
title: "setTitle",
subtitle: "setSubtitle",
caption: "setCaption"
},
g = a.isResponsiveOptions,
k = [],
m,
p;
R(h, "update", {
options: a
});
g || h.setResponsive(!1, !0);
a = H(a, h.options);
h.userOptions = U(h.userOptions, a);
var F = a.chart;
if (F) {
U(!0, h.options.chart, F);
"className" in F && h.setClassName(F.className);
"reflow" in F && h.setReflow(F.reflow);
if ("inverted" in F || "polar" in F || "type" in F) {
h.propFromSeries();
var n = !0
}
"alignTicks" in F && (n = !0);
"events" in F && d(this, F);
Z(F,
function(a, b) { - 1 !== h.propsRequireUpdateSeries.indexOf("chart." + b) && (m = !0); - 1 !== h.propsRequireDirtyBox.indexOf(b) && (h.isDirtyBox = !0); - 1 !== h.propsRequireReflow.indexOf(b) && (g ? h.isDirtyBox = !0 : p = !0)
}); ! h.styledMode && F.style && h.renderer.setStyle(h.options.chart.style || {})
} ! h.styledMode && a.colors && (this.options.colors = a.colors);
a.time && (this.time === L && (this.time = new l(a.time)), U(!0, h.options.time, a.time));
Z(a,
function(b, c) {
if (h[c] && "function" === typeof h[c].update) h[c].update(b, !1);
else if ("function" === typeof h[f[c]]) h[f[c]](b);
else "colors" !== c && -1 === h.collectionsWithUpdate.indexOf(c) && U(!0, h.options[c], a[c]);
"chart" !== c && -1 !== h.propsRequireUpdateSeries.indexOf(c) && (m = !0)
});
this.collectionsWithUpdate.forEach(function(b) {
if (a[b]) {
var d = [];
h[b].forEach(function(a, b) {
a.options.isInternal || d.push(V(a.options.index, b))
});
fa(a[b]).forEach(function(a, e) {
var f = S(a.id),
g;
f && (g = h.get(a.id)); ! g && h[b] && (g = h[b][d ? d[e] : e]) && f && S(g.options.id) && (g = void 0);
g && g.coll === b && (g.update(a, !1), c && (g.touched = !0)); ! g && c && h.collectionsWithInit[b] && (h.collectionsWithInit[b][0].apply(h, [a].concat(h.collectionsWithInit[b][1] || []).concat([!1])).touched = !0)
});
c && h[b].forEach(function(a) {
a.touched || a.options.isInternal ? delete a.touched: k.push(a)
})
}
});
k.forEach(function(a) {
a.chart && a.remove && a.remove(!1)
});
n && h.axes.forEach(function(a) {
a.update({},
!1)
});
m && h.getSeriesOrderByLinks().forEach(function(a) {
a.chart && a.update({},
!1)
},
this);
n = F && F.width;
F = F && (W(F.height) ? ha(F.height, n || h.chartWidth) : F.height);
p || M(n) && n !== h.chartWidth || M(F) && F !== h.chartHeight ? h.setSize(n, F, e) : V(b, !0) && h.redraw(e);
R(h, "afterUpdate", {
options: a,
redraw: b,
animation: e
})
};
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,
c = I.lang,
d = b.options.chart.zooming.resetButton,
h = d.theme,
e = "chart" === d.relativeTo || "spacingBox" === d.relativeTo ? null: "scrollablePlotBox";
R(this, "beforeShowResetZoom", null,
function() {
b.resetZoomButton = b.renderer.button(c.resetZoom, null, null, a, h).attr({
align: d.position.align,
title: c.resetZoomTitle
}).addClass("highcharts-reset-zoom").add().align(d.position, !1, e)
});
R(this, "afterShowResetZoom")
};
a.prototype.zoomOut = function() {
R(this, "selection", {
resetSelection: !0
},
this.zoom)
};
a.prototype.zoom = function(a) {
var b = this,
c = b.pointer,
d = !1,
h; ! a || a.resetSelection ? (b.axes.forEach(function(a) {
h = a.zoom()
}), c.initiated = !1) : a.xAxis.concat(a.yAxis).forEach(function(a) {
var e = a.axis;
if (c[e.isXAxis ? "zoomX": "zoomY"] && S(c.mouseDownX) && S(c.mouseDownY) && b.isInsidePlot(c.mouseDownX - b.plotLeft, c.mouseDownY - b.plotTop, {
axis: e
}) || !S(b.inverted ? c.mouseDownX: c.mouseDownY)) h = e.zoom(a.min, a.max),
e.displayBtn && (d = !0)
});
var e = b.resetZoomButton;
d && !e ? b.showResetZoom() : !d && X(e) && (b.resetZoomButton = e.destroy());
h && b.redraw(V(b.options.chart.animation, a && a.animation, 100 > b.pointCount))
};
a.prototype.pan = function(a, b) {
var c = this,
d = c.hoverPoints;
b = "object" === typeof b ? b: {
enabled: b,
type: "x"
};
var e = c.options.chart;
e && e.panning && (e.panning = b);
var h = b.type,
f;
R(this, "pan", {
originalEvent: a
},
function() {
d && d.forEach(function(a) {
a.setState()
});
var b = c.xAxis;
"xy" === h ? b = b.concat(c.yAxis) : "y" === h && (b = c.yAxis);
var e = {};
b.forEach(function(b) {
if (b.options.panningEnabled && !b.options.isInternal) {
var d = b.horiz,
g = a[d ? "chartX": "chartY"];
d = d ? "mouseDownX": "mouseDownY";
var k = c[d],
l = b.minPointOffset || 0,
m = b.reversed && !c.inverted || !b.reversed && c.inverted ? -1 : 1,
p = b.getExtremes(),
F = b.toValue(k - g, !0) + l * m,
n = b.toValue(k + b.len - g, !0) - (l * m || b.isXAxis && b.pointRangePadding || 0),
u = n < F;
m = b.hasVerticalPanning();
k = u ? n: F;
F = u ? F: n;
var q = b.panningState; ! m || b.isXAxis || q && !q.isDirty || b.series.forEach(function(a) {
var b = a.getProcessedData(!0);
b = a.getExtremes(b.yData, !0);
q || (q = {
startMin: Number.MAX_VALUE,
startMax: -Number.MAX_VALUE
});
M(b.dataMin) && M(b.dataMax) && (q.startMin = Math.min(V(a.options.threshold, Infinity), b.dataMin, q.startMin), q.startMax = Math.max(V(a.options.threshold, -Infinity), b.dataMax, q.startMax))
});
m = Math.min(V(q && q.startMin, p.dataMin), l ? p.min: b.toValue(b.toPixels(p.min) - b.minPixelPadding));
n = Math.max(V(q && q.startMax, p.dataMax), l ? p.max: b.toValue(b.toPixels(p.max) + b.minPixelPadding));
b.panningState = q;
b.isOrdinal || (l = m - k, 0 < l && (F += l, k = m), l = F - n, 0 < l && (F = n, k -= l), b.series.length && k !== p.min && F !== p.max && k >= m && F <= n && (b.setExtremes(k, F, !1, !1, {
trigger: "pan"
}), !c.resetZoomButton && k !== m && F !== n && h.match("y") && (c.showResetZoom(), b.displayBtn = !1), f = !0), e[d] = g)
}
});
Z(e,
function(a, b) {
c[b] = a
});
f && c.redraw(!1);
Q(c.container, {
cursor: "move"
})
})
};
return a
} ();
K(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
});
K(g, "Core/Legend/LegendSymbol.js", [g["Core/Utilities.js"]],
function(a) {
var g = a.merge,
x = a.pick,
E; (function(a) {
a.drawLineMarker = function(a) {
var v = this.legendItem = this.legendItem || {},
r = this.options,
t = a.symbolWidth,
n = a.symbolHeight,
f = n / 2,
c = this.chart.renderer,
l = v.group;
a = a.baseline - Math.round(.3 * a.fontMetrics.b);
var m = {},
e = r.marker;
this.chart.styledMode || (m = {
"stroke-width": r.lineWidth || 0
},
r.dashStyle && (m.dashstyle = r.dashStyle));
v.line = c.path([["M", 0, a], ["L", t, a]]).addClass("highcharts-graph").attr(m).add(l);
e && !1 !== e.enabled && t && (r = Math.min(x(e.radius, f), f), 0 === this.symbol.indexOf("url") && (e = g(e, {
width: n,
height: n
}), r = 0), v.symbol = v = c.symbol(this.symbol, t / 2 - r, a - r, 2 * r, 2 * r, e).addClass("highcharts-point").add(l), v.isMarker = !0)
};
a.drawRectangle = function(a, g) {
g = g.legendItem || {};
var r = a.symbolHeight,
t = a.options.squareSymbol;
g.symbol = this.chart.renderer.rect(t ? (a.symbolWidth - r) / 2 : 0, a.baseline - r + 1, t ? r: a.symbolWidth, r, x(a.options.symbolRadius, r / 2)).addClass("highcharts-point").attr({
zIndex: 3
}).add(g.group)
}
})(E || (E = {}));
return E
});
K(g, "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"
}
});
K(g, "Core/Series/Series.js", [g["Core/Animation/AnimationUtilities.js"], g["Core/Defaults.js"], g["Core/Foundation.js"], g["Core/Globals.js"], g["Core/Legend/LegendSymbol.js"], g["Core/Series/Point.js"], g["Core/Series/SeriesDefaults.js"], g["Core/Series/SeriesRegistry.js"], g["Core/Renderer/SVG/SVGElement.js"], g["Core/Utilities.js"]],
function(a, g, x, E, D, B, G, r, t, n) {
var f = a.animObject,
c = a.setAnimation,
l = g.defaultOptions,
m = x.registerEventOptions,
e = E.hasTouch,
u = E.svg,
C = E.win,
v = r.seriesTypes,
I = n.arrayMax,
L = n.arrayMin,
A = n.clamp,
d = n.cleanRecursively,
q = n.correctFloat,
h = n.defined,
k = n.erase,
b = n.error,
p = n.extend,
z = n.find,
w = n.fireEvent,
N = n.getNestedProperty,
H = n.isArray,
O = n.isNumber,
Q = n.isString,
S = n.merge,
Y = n.objectEach,
y = n.pick,
T = n.removeEvent,
K = n.splat,
ca = n.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) {
w(this, "init", {
options: b
});
var c = this,
d = a.series;
this.eventsToUnbind = [];
c.chart = a;
c.options = c.setOptions(b);
b = c.options;
c.linkedSeries = [];
c.bindAxes();
p(c, {
name: b.name,
state: "",
visible: !1 !== b.visible,
selected: !0 === b.selected
});
m(this, b);
var e = b.events;
if (e && e.click || b.point && b.point.events && b.point.events.click || b.allowPointSelect) a.runTrackerClick = !0;
c.getColor();
c.getSymbol();
c.parallelArrays.forEach(function(a) {
c[a + "Data"] || (c[a + "Data"] = [])
});
c.isCartesian && (a.hasCartesianSeries = !0);
var h;
d.length && (h = d[d.length - 1]);
c._i = y(h && h._i, -1) + 1;
c.opacity = c.options.opacity;
a.orderSeries(this.insert(d));
b.dataSorting && b.dataSorting.enabled ? c.setDataSortingOptions() : c.points || c.data || c.setData(b.data, !1);
w(this, "afterInit")
};
a.prototype.is = function(a) {
return v[a] && this instanceof v[a]
};
a.prototype.insert = function(a) {
var b = this.options.index,
c;
if (O(b)) {
for (c = a.length; c--;) if (b >= y(a[c].options.index, a[c]._i)) {
a.splice(c + 1, 0, this);
break
} - 1 === c && a.unshift(this);
c += 1
} else a.push(this);
236

被折叠的 条评论
为什么被折叠?



