/*
Highcharts JS v3.0.6 (2013-10-04)
(c) 2009-2013 Torstein Hønsi
License: www.highcharts.com/license
*/
(function () {
function r(a, b) {
var c;
a || (a = {});
for (c in b) a[c] = b[c];
return a;
}
function x() {
var a,
b = arguments.length,
c = {},
d = function (a, b) {
var c, h;
typeof a !== 'object' && (a = {});
for (h in b)
b.hasOwnProperty(h) &&
((c = b[h]),
(a[h] =
c &&
typeof c === 'object' &&
Object.prototype.toString.call(c) !== '[object Array]' &&
typeof c.nodeType !== 'number'
? d(a[h] || {}, c)
: b[h]));
return a;
};
for (a = 0; a < b; a++) c = d(c, arguments[a]);
return c;
}
function C(a, b) {
return parseInt(a, b || 10);
}
function ea(a) {
return typeof a === 'string';
}
function T(a) {
return typeof a === 'object';
}
function Ia(a) {
return Object.prototype.toString.call(a) === '[object Array]';
}
function sa(a) {
return typeof a === 'number';
}
function na(a) {
return R.log(a) / R.LN10;
}
function fa(a) {
return R.pow(10, a);
}
function ga(a, b) {
for (var c = a.length; c--; )
if (a[c] === b) {
a.splice(c, 1);
break;
}
}
function u(a) {
return a !== w && a !== null;
}
function v(a, b, c) {
var d, e;
if (ea(b)) u(c) ? a.setAttribute(b, c) : a && a.getAttribute && (e = a.getAttribute(b));
else if (u(b) && T(b)) for (d in b) a.setAttribute(d, b[d]);
return e;
}
function ja(a) {
return Ia(a) ? a : [a];
}
function o() {
var a = arguments,
b,
c,
d = a.length;
for (b = 0; b < d; b++) if (((c = a[b]), typeof c !== 'undefined' && c !== null)) return c;
}
function K(a, b) {
if (ta && b && b.opacity !== w) b.filter = 'alpha(opacity=' + b.opacity * 100 + ')';
r(a.style, b);
}
function U(a, b, c, d, e) {
a = y.createElement(a);
b && r(a, b);
e && K(a, { padding: 0, border: S, margin: 0 });
c && K(a, c);
d && d.appendChild(a);
return a;
}
function ha(a, b) {
var c = function () {};
c.prototype = new a();
r(c.prototype, b);
return c;
}
function Aa(a, b, c, d) {
var e = M.lang,
a = +a || 0,
f = b === -1 ? (a.toString().split('.')[1] || '').length : isNaN((b = N(b))) ? 2 : b,
b = c === void 0 ? e.decimalPoint : c,
d = d === void 0 ? e.thousandsSep : d,
e = a < 0 ? '-' : '',
c = String(C((a = N(a).toFixed(f)))),
g = c.length > 3 ? c.length % 3 : 0;
return (
e +
(g ? c.substr(0, g) + d : '') +
c.substr(g).replace(/(\d{3})(?=\d)/g, '$1' + d) +
(f
? b +
N(a - c)
.toFixed(f)
.slice(2)
: '')
);
}
function Ba(a, b) {
return Array((b || 2) + 1 - String(a).length).join(0) + a;
}
function mb(a, b, c) {
var d = a[b];
a[b] = function () {
var a = Array.prototype.slice.call(arguments);
a.unshift(d);
return c.apply(this, a);
};
}
function Ca(a, b) {
for (var c = '{', d = !1, e, f, g, h, i, j = []; (c = a.indexOf(c)) !== -1; ) {
e = a.slice(0, c);
if (d) {
f = e.split(':');
g = f.shift().split('.');
i = g.length;
e = b;
for (h = 0; h < i; h++) e = e[g[h]];
if (f.length)
(f = f.join(':')),
(g = /\.([0-9])/),
(h = M.lang),
(i = void 0),
/f$/.test(f)
? ((i = (i = f.match(g)) ? i[1] : -1),
(e = Aa(e, i, h.decimalPoint, f.indexOf(',') > -1 ? h.thousandsSep : '')))
: (e = Xa(f, e));
}
j.push(e);
a = a.slice(c + 1);
c = (d = !d) ? '}' : '{';
}
j.push(a);
return j.join('');
}
function nb(a) {
return R.pow(10, P(R.log(a) / R.LN10));
}
function ob(a, b, c, d) {
var e,
c = o(c, 1);
e = a / c;
b ||
((b = [1, 2, 2.5, 5, 10]),
d && d.allowDecimals === !1 && (c === 1 ? (b = [1, 2, 5, 10]) : c <= 0.1 && (b = [1 / c])));
for (d = 0; d < b.length; d++) if (((a = b[d]), e <= (b[d] + (b[d + 1] || b[d])) / 2)) break;
a *= c;
return a;
}
function Cb(a, b) {
var c = b || [
[Db, [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],
[pb, [1, 2, 5, 10, 15, 30]],
[Ya, [1, 2, 5, 10, 15, 30]],
[Qa, [1, 2, 3, 4, 6, 8, 12]],
[ua, [1, 2]],
[Za, [1, 2]],
[Ra, [1, 2, 3, 4, 6]],
[Da, null],
],
d = c[c.length - 1],
e = D[d[0]],
f = d[1],
g;
for (g = 0; g < c.length; g++)
if (
((d = c[g]),
(e = D[d[0]]),
(f = d[1]),
c[g + 1] && a <= (e * f[f.length - 1] + D[c[g + 1][0]]) / 2)
)
break;
e === D[Da] && a < 5 * e && (f = [1, 2, 5]);
c = ob(a / e, f, d[0] === Da ? nb(a / e) : 1);
return { unitRange: e, count: c, unitName: d[0] };
}
function Eb(a, b, c, d) {
var e = [],
f = {},
g = M.global.useUTC,
h,
i = new Date(b),
j = a.unitRange,
k = a.count;
if (u(b)) {
j >= D[pb] &&
(i.setMilliseconds(0), i.setSeconds(j >= D[Ya] ? 0 : k * P(i.getSeconds() / k)));
if (j >= D[Ya]) i[Fb](j >= D[Qa] ? 0 : k * P(i[qb]() / k));
if (j >= D[Qa]) i[Gb](j >= D[ua] ? 0 : k * P(i[rb]() / k));
if (j >= D[ua]) i[sb](j >= D[Ra] ? 1 : k * P(i[Sa]() / k));
j >= D[Ra] && (i[Hb](j >= D[Da] ? 0 : k * P(i[$a]() / k)), (h = i[ab]()));
j >= D[Da] && ((h -= h % k), i[Ib](h));
if (j === D[Za]) i[sb](i[Sa]() - i[tb]() + o(d, 1));
b = 1;
h = i[ab]();
for (
var d = i.getTime(),
l = i[$a](),
m = i[Sa](),
p = g ? 0 : (864e5 + i.getTimezoneOffset() * 6e4) % 864e5;
d < c;
)
e.push(d),
j === D[Da]
? (d = bb(h + b * k, 0))
: j === D[Ra]
? (d = bb(h, l + b * k))
: !g && (j === D[ua] || j === D[Za])
? (d = bb(h, l, m + b * k * (j === D[ua] ? 1 : 7)))
: (d += j * k),
b++;
e.push(d);
n(
ub(e, function (a) {
return j <= D[Qa] && a % D[ua] === p;
}),
function (a) {
f[a] = ua;
},
);
}
e.info = r(a, { higherRanks: f, totalRange: j * k });
return e;
}
function Jb() {
this.symbol = this.color = 0;
}
function Kb(a, b) {
var c = a.length,
d,
e;
for (e = 0; e < c; e++) a[e].ss_i = e;
a.sort(function (a, c) {
d = b(a, c);
return d === 0 ? a.ss_i - c.ss_i : d;
});
for (e = 0; e < c; e++) delete a[e].ss_i;
}
function Ja(a) {
for (var b = a.length, c = a[0]; b--; ) a[b] < c && (c = a[b]);
return c;
}
function va(a) {
for (var b = a.length, c = a[0]; b--; ) a[b] > c && (c = a[b]);
return c;
}
function Ka(a, b) {
for (var c in a) a[c] && a[c] !== b && a[c].destroy && a[c].destroy(), delete a[c];
}
function Ta(a) {
cb || (cb = U(Ea));
a && cb.appendChild(a);
cb.innerHTML = '';
}
function ka(a, b) {
var c = 'Highcharts error #' + a + ': www.highcharts.com/errors/' + a;
if (b) throw c;
else O.console && console.log(c);
}
function ia(a) {
return parseFloat(a.toPrecision(14));
}
function La(a, b) {
Fa = o(a, b.animation);
}
function Lb() {
var a = M.global.useUTC,
b = a ? 'getUTC' : 'get',
c = a ? 'setUTC' : 'set';
bb = a
? Date.UTC
: function (a, b, c, g, h, i) {
return new Date(a, b, o(c, 1), o(g, 0), o(h, 0), o(i, 0)).getTime();
};
qb = b + 'Minutes';
rb = b + 'Hours';
tb = b + 'Day';
Sa = b + 'Date';
$a = b + 'Month';
ab = b + 'FullYear';
Fb = c + 'Minutes';
Gb = c + 'Hours';
sb = c + 'Date';
Hb = c + 'Month';
Ib = c + 'FullYear';
}
function wa() {}
function Ma(a, b, c, d) {
this.axis = a;
this.pos = b;
this.type = c || '';
this.isNew = !0;
!c && !d && this.addLabel();
}
function vb(a, b) {
this.axis = a;
if (b) (this.options = b), (this.id = b.id);
}
function Mb(a, b, c, d, e, f) {
var g = a.chart.inverted;
this.axis = a;
this.isNegative = c;
this.options = b;
this.x = d;
this.total = null;
this.points = {};
this.stack = e;
this.percent = f === 'percent';
this.alignOptions = {
align: b.align || (g ? (c ? 'left' : 'right') : 'center'),
verticalAlign: b.verticalAlign || (g ? 'middle' : c ? 'bottom' : 'top'),
y: o(b.y, g ? 4 : c ? 14 : -6),
x: o(b.x, g ? (c ? -6 : 6) : 0),
};
this.textAlign = b.textAlign || (g ? (c ? 'right' : 'left') : 'center');
}
function db() {
this.init.apply(this, arguments);
}
function wb() {
this.init.apply(this, arguments);
}
function xb(a, b) {
this.init(a, b);
}
function eb(a, b) {
this.init(a, b);
}
function yb() {
this.init.apply(this, arguments);
}
var w,
y = document,
O = window,
R = Math,
t = R.round,
P = R.floor,
xa = R.ceil,
s = R.max,
I = R.min,
N = R.abs,
V = R.cos,
ca = R.sin,
ya = R.PI,
Ua = (ya * 2) / 360,
oa = navigator.userAgent,
Nb = O.opera,
ta = /msie/i.test(oa) && !Nb,
fb = y.documentMode === 8,
gb = /AppleWebKit/.test(oa),
hb = /Firefox/.test(oa),
Ob = /(Mobile|Android|Windows Phone)/.test(oa),
za = 'http://www.w3.org/2000/svg',
Z = !!y.createElementNS && !!y.createElementNS(za, 'svg').createSVGRect,
Ub = hb && parseInt(oa.split('Firefox/')[1], 10) < 4,
$ = !Z && !ta && !!y.createElement('canvas').getContext,
Va,
ib = y.documentElement.ontouchstart !== w,
Pb = {},
zb = 0,
cb,
M,
Xa,
Fa,
Ab,
D,
pa = function () {},
Ga = [],
Ea = 'div',
S = 'none',
Qb = 'rgba(192,192,192,' + (Z ? 1.0e-4 : 0.002) + ')',
Db = 'millisecond',
pb = 'second',
Ya = 'minute',
Qa = 'hour',
ua = 'day',
Za = 'week',
Ra = 'month',
Da = 'year',
Rb = 'stroke-width',
bb,
qb,
rb,
tb,
Sa,
$a,
ab,
Fb,
Gb,
sb,
Hb,
Ib,
W = {};
O.Highcharts = O.Highcharts ? ka(16, !0) : {};
Xa = function (a, b, c) {
if (!u(b) || isNaN(b)) return 'Invalid date';
var a = o(a, '%Y-%m-%d %H:%M:%S'),
d = new Date(b),
e,
f = d[rb](),
g = d[tb](),
h = d[Sa](),
i = d[$a](),
j = d[ab](),
k = M.lang,
l = k.weekdays,
d = r(
{
a: l[g].substr(0, 3),
A: l[g],
d: Ba(h),
e: h,
b: k.shortMonths[i],
B: k.months[i],
m: Ba(i + 1),
y: j.toString().substr(2, 2),
Y: j,
H: Ba(f),
I: Ba(f % 12 || 12),
l: f % 12 || 12,
M: Ba(d[qb]()),
p: f < 12 ? 'AM' : 'PM',
P: f < 12 ? 'am' : 'pm',
S: Ba(d.getSeconds()),
L: Ba(t(b % 1e3), 3),
},
Highcharts.dateFormats,
);
for (e in d)
for (; a.indexOf('%' + e) !== -1; )
a = a.replace('%' + e, typeof d[e] === 'function' ? d[e](b) : d[e]);
return c ? a.substr(0, 1).toUpperCase() + a.substr(1) : a;
};
Jb.prototype = {
wrapColor: function (a) {
if (this.color >= a) this.color = 0;
},
wrapSymbol: function (a) {
if (this.symbol >= a) this.symbol = 0;
},
};
D = (function () {
for (var a = 0, b = arguments, c = b.length, d = {}; a < c; a++) d[b[a++]] = b[a];
return d;
})(Db, 1, pb, 1e3, Ya, 6e4, Qa, 36e5, ua, 864e5, Za, 6048e5, Ra, 26784e5, Da, 31556952e3);
Ab = {
init: function (a, b, c) {
var b = b || '',
d = a.shift,
e = b.indexOf('C') > -1,
f = e ? 7 : 3,
g,
b = b.split(' '),
c = [].concat(c),
h,
i,
j = function (a) {
for (g = a.length; g--; )
a[g] === 'M' && a.splice(g + 1, 0, a[g + 1], a[g + 2], a[g + 1], a[g + 2]);
};
e && (j(b), j(c));
a.isArea && ((h = b.splice(b.length - 6, 6)), (i = c.splice(c.length - 6, 6)));
if (d <= c.length / f && b.length === c.length)
for (; d--; ) c = [].concat(c).splice(0, f).concat(c);
a.shift = 0;
if (b.length)
for (a = c.length; b.length < a; )
(d = [].concat(b).splice(b.length - f, f)),
e && ((d[f - 6] = d[f - 2]), (d[f - 5] = d[f - 1])),
(b = b.concat(d));
h && ((b = b.concat(h)), (c = c.concat(i)));
return [b, c];
},
step: function (a, b, c, d) {
var e = [],
f = a.length;
if (c === 1) e = d;
else if (f === b.length && c < 1)
for (; f--; )
(d = parseFloat(a[f])), (e[f] = isNaN(d) ? a[f] : c * parseFloat(b[f] - d) + d);
else e = b;
return e;
},
};
(function (a) {
O.HighchartsAdapter =
O.HighchartsAdapter ||
(a && {
init: function (b) {
var c = a.fx,
d = c.step,
e,
f = a.Tween,
g = f && f.propHooks;
e = a.cssHooks.opacity;
a.extend(a.easing, {
easeOutQuad: function (a, b, c, d, e) {
return -d * (b /= e) * (b - 2) + c;
},
});
a.each(['cur', '_default', 'width', 'height', 'opacity'], function (a, b) {
var e = d,
k,
l;
b === 'cur' ? (e = c.prototype) : b === '_default' && f && ((e = g[b]), (b = 'set'));
(k = e[b]) &&
(e[b] = function (c) {
c = a ? c : this;
if (c.prop !== 'align')
return (
(l = c.elem),
l.attr ? l.attr(c.prop, b === 'cur' ? w : c.now) : k.apply(this, arguments)
);
});
});
mb(e, 'get', function (a, b, c) {
return b.attr ? b.opacity || 0 : a.call(this, b, c);
});
e = function (a) {
var c = a.elem,
d;
if (!a.started)
(d = b.init(c, c.d, c.toD)), (a.start = d[0]), (a.end = d[1]), (a.started = !0);
c.attr('d', b.step(a.start, a.end, a.pos, c.toD));
};
f ? (g.d = { set: e }) : (d.d = e);
this.each = Array.prototype.forEach
? function (a, b) {
return Array.prototype.forEach.call(a, b);
}
: function (a, b) {
for (var c = 0, d = a.length; c < d; c++)
if (b.call(a[c], a[c], c, a) === !1) return c;
};
a.fn.highcharts = function () {
var a = 'Chart',
b = arguments,
c,
d;
ea(b[0]) && ((a = b[0]), (b = Array.prototype.slice.call(b, 1)));
c = b[0];
if (c !== w)
(c.chart = c.chart || {}),
(c.chart.renderTo = this[0]),
new Highcharts[a](c, b[1]),
(d = this);
c === w && (d = Ga[v(this[0], 'data-highcharts-chart')]);
return d;
};
},
getScript: a.getScript,
inArray: a.inArray,
adapterRun: function (b, c) {
return a(b)[c]();
},
grep: a.grep,
map: function (a, c) {
for (var d = [], e = 0, f = a.length; e < f; e++) d[e] = c.call(a[e], a[e], e, a);
return d;
},
offset: function (b) {
return a(b).offset();
},
addEvent: function (b, c, d) {
a(b).bind(c, d);
},
removeEvent: function (b, c, d) {
var e = y.removeEventListener ? 'removeEventListener' : 'detachEvent';
y[e] && b && !b[e] && (b[e] = function () {});
a(b).unbind(c, d);
},
fireEvent: function (b, c, d, e) {
var f = a.Event(c),
g = 'detached' + c,
h;
!ta && d && (delete d.layerX, delete d.layerY);
r(f, d);
b[c] && ((b[g] = b[c]), (b[c] = null));
a.each(['preventDefault', 'stopPropagation'], function (a, b) {
var c = f[b];
f[b] = function () {
try {
c.call(f);
} catch (a) {
b === 'preventDefault' && (h = !0);
}
};
});
a(b).trigger(f);
b[g] && ((b[c] = b[g]), (b[g] = null));
e && !f.isDefaultPrevented() && !h && e(f);
},
washMouseEvent: function (a) {
var c = a.originalEvent || a;
if (c.pageX === w) (c.pageX = a.pageX), (c.pageY = a.pageY);
return c;
},
animate: function (b, c, d) {
var e = a(b);
if (!b.style) b.style = {};
if (c.d) (b.toD = c.d), (c.d = 1);
e.stop();
c.opacity !== w && b.attr && (c.opacity += 'px');
e.animate(c, d);
},
stop: function (b) {
a(b).stop();
},
});
})(O.jQuery);
var X = O.HighchartsAdapter,
G = X || {};
X && X.init.call(X, Ab);
var jb = G.adapterRun,
Vb = G.getScript,
qa = G.inArray,
n = G.each,
ub = G.grep,
Wb = G.offset,
Na = G.map,
J = G.addEvent,
aa = G.removeEvent,
z = G.fireEvent,
Xb = G.washMouseEvent,
Bb = G.animate,
Wa = G.stop,
G = {
enabled: !0,
x: 0,
y: 15,
style: { color: '#666', cursor: 'default', fontSize: '11px', lineHeight: '14px' },
};
M = {
colors: '#2f7ed8,#0d233a,#8bbc21,#910000,#1aadce,#492970,#f28f43,#77a1e5,#c42525,#a6c96a'.split(
',',
),
symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'],
lang: {
loading: 'Loading...',
months:
'January,February,March,April,May,June,July,August,September,October,November,December'.split(
',',
),
shortMonths: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),
weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),
decimalPoint: '.',
numericSymbols: 'k,M,G,T,P,E'.split(','),
resetZoom: 'Reset zoom',
resetZoomTitle: 'Reset zoom level 1:1',
thousandsSep: ',',
},
global: {
useUTC: !0,
canvasToolsURL: 'http://code.highcharts.com/3.0.6/modules/canvas-tools.js',
VMLRadialGradientURL: 'http://code.highcharts.com/3.0.6/gfx/vml-radial-gradient.png',
},
chart: {
borderColor: '#4572A7',
borderRadius: 5,
defaultSeriesType: 'line',
ignoreHiddenSeries: !0,
spacing: [10, 10, 15, 10],
style: {
fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',
fontSize: '12px',
},
backgroundColor: '#FFFFFF',
plotBorderColor: '#C0C0C0',
resetZoomButton: { theme: { zIndex: 20 }, position: { align: 'right', x: -10, y: 10 } },
},
title: {
text: 'Chart title',
align: 'center',
margin: 15,
style: { color: '#274b6d', fontSize: '16px' },
},
subtitle: { text: '', align: 'center', style: { color: '#4d759e' } },
plotOptions: {
line: {
allowPointSelect: !1,
showCheckbox: !1,
animation: { duration: 1e3 },
events: {},
lineWidth: 2,
marker: {
enabled: !0,
lineWidth: 0,
radius: 4,
lineColor: '#FFFFFF',
states: {
hover: { enabled: !0 },
select: { fillColor: '#FFFFFF', lineColor: '#000000', lineWidth: 2 },
},
},
point: { events: {} },
dataLabels: x(G, {
align: 'center',
enabled: !1,
formatter: function () {
return this.y === null ? '' : Aa(this.y, -1);
},
verticalAlign: 'bottom',
y: 0,
}),
cropThreshold: 300,
pointRange: 0,
showInLegend: !0,
states: { hover: { marker: {} }, select: { marker: {} } },
stickyTracking: !0,
},
},
labels: { style: { position: 'absolute', color: '#3E576F' } },
legend: {
enabled: !0,
align: 'center',
layout: 'horizontal',
labelFormatter: function () {
return this.name;
},
borderWidth: 1,
borderColor: '#909090',
borderRadius: 5,
navigation: { activeColor: '#274b6d', inactiveColor: '#CCC' },
shadow: !1,
itemStyle: { cursor: 'pointer', color: '#274b6d', fontSize: '12px' },
itemHoverStyle: { color: '#000' },
itemHiddenStyle: { color: '#CCC' },
itemCheckboxStyle: { position: 'absolute', width: '13px', height: '13px' },
symbolWidth: 16,
symbolPadding: 5,
verticalAlign: 'bottom',
x: 0,
y: 0,
title: { style: { fontWeight: 'bold' } },
},
loading: {
labelStyle: { fontWeight: 'bold', position: 'relative', top: '1em' },
style: { position: 'absolute', backgroundColor: 'white', opacity: 0.5, textAlign: 'center' },
},
tooltip: {
enabled: !0,
animation: Z,
backgroundColor: 'rgba(255, 255, 255, .85)',
borderWidth: 1,
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',
},
headerFormat: '{point.key}
',
pointFormat: '{series.name}: {point.y}
',
shadow: !0,
snap: Ob ? 25 : 10,
style: {
color: '#333333',
cursor: 'default',
fontSize: '12px',
padding: '8px',
whiteSpace: 'nowrap',
},
},
credits: {
enabled: !0,
text: 'Highcharts.com',
href: 'http://www.highcharts.com',
position: { align: 'right', x: -10, verticalAlign: 'bottom', y: -5 },
style: { cursor: 'pointer', color: '#909090', fontSize: '9px' },
},
};
var Y = M.plotOptions,
X = Y.line;
Lb();
var ra = function (a) {
var b = [],
c,
d;
(function (a) {
a && a.stops
? (d = Na(a.stops, function (a) {
return ra(a[1]);
}))
: (c =
/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*\)/.exec(
a,
))
? (b = [C(c[1]), C(c[2]), C(c[3]), parseFloat(c[4], 10)])
: (c = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))
? (b = [C(c[1], 16), C(c[2], 16), C(c[3], 16), 1])
: (c = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a)) &&
(b = [C(c[1]), C(c[2]), C(c[3]), 1]);
})(a);
return {
get: function (c) {
var f;
d
? ((f = x(a)),
(f.stops = [].concat(f.stops)),
n(d, function (a, b) {
f.stops[b] = [f.stops[b][0], a.get(c)];
}))
: (f =
b && !isNaN(b[0])
? c === 'rgb'
? 'rgb(' + b[0] + ',' + b[1] + ',' + b[2] + ')'
: c === 'a'
? b[3]
: 'rgba(' + b.join(',') + ')'
: a);
return f;
},
brighten: function (a) {
if (d)
n(d, function (b) {
b.brighten(a);
});
else if (sa(a) && a !== 0) {
var c;
for (c = 0; c < 3; c++)
(b[c] += C(a * 255)), b[c] < 0 && (b[c] = 0), b[c] > 255 && (b[c] = 255);
}
return this;
},
rgba: b,
setOpacity: function (a) {
b[3] = a;
return this;
},
};
};
wa.prototype = {
init: function (a, b) {
this.element = b === 'span' ? U(b) : y.createElementNS(za, b);
this.renderer = a;
this.attrSetters = {};
},
opacity: 1,
animate: function (a, b, c) {
b = o(b, Fa, !0);
Wa(this);
if (b) {
b = x(b);
if (c) b.complete = c;
Bb(this, a, b);
} else this.attr(a), c && c();
},
attr: function (a, b) {
var c,
d,
e,
f,
g = this.element,
h = g.nodeName.toLowerCase(),
i = this.renderer,
j,
k = this.attrSetters,
l = this.shadows,
m,
p,
q = this;
ea(a) && u(b) && ((c = a), (a = {}), (a[c] = b));
if (ea(a))
(c = a),
h === 'circle'
? (c = { x: 'cx', y: 'cy' }[c] || c)
: c === 'strokeWidth' && (c = 'stroke-width'),
(q = v(g, c) || this[c] || 0),
c !== 'd' && c !== 'visibility' && c !== 'fill' && (q = parseFloat(q));
else {
for (c in a)
if (((j = !1), (d = a[c]), (e = k[c] && k[c].call(this, d, c)), e !== !1)) {
e !== w && (d = e);
if (c === 'd')
d && d.join && (d = d.join(' ')), /(NaN| {2}|^$)/.test(d) && (d = 'M 0 0');
else if (c === 'x' && h === 'text')
for (e = 0; e < g.childNodes.length; e++)
(f = g.childNodes[e]), v(f, 'x') === v(g, 'x') && v(f, 'x', d);
else if (this.rotation && (c === 'x' || c === 'y')) p = !0;
else if (c === 'fill') d = i.color(d, g, c);
else if (h === 'circle' && (c === 'x' || c === 'y')) c = { x: 'cx', y: 'cy' }[c] || c;
else if (h === 'rect' && c === 'r') v(g, { rx: d, ry: d }), (j = !0);
else if (
c === 'translateX' ||
c === 'translateY' ||
c === 'rotation' ||
c === 'verticalAlign' ||
c === 'scaleX' ||
c === 'scaleY'
)
j = p = !0;
else if (c === 'stroke') d = i.color(d, g, c);
else if (c === 'dashstyle')
if (((c = 'stroke-dasharray'), (d = d && d.toLowerCase()), d === 'solid')) d = S;
else {
if (d) {
d = d
.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 = d.length; e--; )
d[e] = C(d[e]) * o(a['stroke-width'], this['stroke-width']);
d = d.join(',');
}
}
else if (c === 'width') d = C(d);
else if (c === 'align')
(c = 'text-anchor'), (d = { left: 'start', center: 'middle', right: 'end' }[d]);
else if (c === 'title')
(e = g.getElementsByTagName('title')[0]),
e || ((e = y.createElementNS(za, 'title')), g.appendChild(e)),
(e.textContent = d);
c === 'strokeWidth' && (c = 'stroke-width');
if (c === 'stroke-width' || c === 'stroke') {
this[c] = d;
if (this.stroke && this['stroke-width'])
v(g, 'stroke', this.stroke),
v(g, 'stroke-width', this['stroke-width']),
(this.hasStroke = !0);
else if (c === 'stroke-width' && d === 0 && this.hasStroke)
g.removeAttribute('stroke'), (this.hasStroke = !1);
j = !0;
}
this.symbolName &&
/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c) &&
(m || (this.symbolAttr(a), (m = !0)), (j = !0));
if (l && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c))
for (e = l.length; e--; )
v(l[e], c, c === 'height' ? s(d - (l[e].cutHeight || 0), 0) : d);
if ((c === 'width' || c === 'height') && h === 'rect' && d < 0) d = 0;
this[c] = d;
c === 'text'
? (d !== this.textStr && delete this.bBox,
(this.textStr = d),
this.added && i.buildText(this))
: j || v(g, c, d);
}
p && this.updateTransform();
}
return q;
},
addClass: function (a) {
var b = this.element,
c = v(b, 'class') || '';
c.indexOf(a) === -1 && v(b, 'class', c + ' ' + a);
return this;
},
symbolAttr: function (a) {
var b = this;
n('x,y,r,start,end,width,height,innerR,anchorX,anchorY'.split(','), function (c) {
b[c] = o(a[c], b[c]);
});
b.attr({ d: b.renderer.symbols[b.symbolName](b.x, b.y, b.width, b.height, b) });
},
clip: function (a) {
return this.attr('clip-path', a ? 'url(' + this.renderer.url + '#' + a.id + ')' : S);
},
crisp: function (a, b, c, d, e) {
var f,
g = {},
h = {},
i,
a = a || this.strokeWidth || (this.attr && this.attr('stroke-width')) || 0;
i = (t(a) % 2) / 2;
h.x = P(b || this.x || 0) + i;
h.y = P(c || this.y || 0) + i;
h.width = P((d || this.width || 0) - 2 * i);
h.height = P((e || this.height || 0) - 2 * i);
h.strokeWidth = a;
for (f in h) this[f] !== h[f] && (this[f] = g[f] = h[f]);
return g;
},
css: function (a) {
var b = this.element,
c = a && a.width && b.nodeName.toLowerCase() === 'text',
d,
e = '',
f = function (a, b) {
return '-' + b.toLowerCase();
};
if (a && a.color) a.fill = a.color;
this.styles = a = r(this.styles, a);
$ && c && delete a.width;
if (ta && !Z) c && delete a.width, K(this.element, a);
else {
for (d in a) e += d.replace(/([A-Z])/g, f) + ':' + a[d] + ';';
v(b, 'style', e);
}
c && this.added && this.renderer.buildText(this);
return this;
},
on: function (a, b) {
var c = this,
d = c.element;
ib && a === 'click'
? ((d.ontouchstart = function (a) {
c.touchEventFired = Date.now();
a.preventDefault();
b.call(d, a);
}),
(d.onclick = function (a) {
(oa.indexOf('Android') === -1 || Date.now() - (c.touchEventFired || 0) > 1100) &&
b.call(d, a);
}))
: (d['on' + a] = b);
return this;
},
setRadialReference: function (a) {
this.element.radialReference = a;
return this;
},
translate: function (a, b) {
return this.attr({ translateX: a, translateY: b });
},
invert: function () {
this.inverted = !0;
this.updateTransform();
return this;
},
htmlCss: function (a) {
var b = this.element;
if ((b = a && b.tagName === 'SPAN' && a.width))
delete a.width, (this.textWidth = b), this.updateTransform();
this.styles = r(this.styles, a);
K(this.element, a);
return this;
},
htmlGetBBox: function () {
var a = this.element,
b = this.bBox;
if (!b) {
if (a.nodeName === 'text') a.style.position = 'absolute';
b = this.bBox = {
x: a.offsetLeft,
y: a.offsetTop,
width: a.offsetWidth,
height: a.offsetHeight,
};
}
return b;
},
htmlUpdateTransform: function () {
if (this.added) {
var a = this.renderer,
b = this.element,
c = this.translateX || 0,
d = this.translateY || 0,
e = this.x || 0,
f = this.y || 0,
g = this.textAlign || 'left',
h = { left: 0, center: 0.5, right: 1 }[g],
i = g && g !== 'left',
j = this.shadows;
K(b, { marginLeft: c, marginTop: d });
j &&
n(j, function (a) {
K(a, { marginLeft: c + 1, marginTop: d + 1 });
});
this.inverted &&
n(b.childNodes, function (c) {
a.invertChild(c, b);
});
if (b.tagName === 'SPAN') {
var k,
l,
j = this.rotation,
m;
k = 0;
var p = 1,
q = 0,
ba;
m = C(this.textWidth);
var A = this.xCorr || 0,
L = this.yCorr || 0,
Sb = [j, g, b.innerHTML, this.textWidth].join(',');
if (Sb !== this.cTT) {
u(j) && ((k = j * Ua), (p = V(k)), (q = ca(k)), this.setSpanRotation(j, q, p));
k = o(this.elemWidth, b.offsetWidth);
l = o(this.elemHeight, b.offsetHeight);
if (k > m && /[ \-]/.test(b.textContent || b.innerText))
K(b, { width: m + 'px', display: 'block', whiteSpace: 'normal' }), (k = m);
m = a.fontMetrics(b.style.fontSize).b;
A = p < 0 && -k;
L = q < 0 && -l;
ba = p * q < 0;
A += q * m * (ba ? 1 - h : h);
L -= p * m * (j ? (ba ? h : 1 - h) : 1);
i &&
((A -= k * h * (p < 0 ? -1 : 1)),
j && (L -= l * h * (q < 0 ? -1 : 1)),
K(b, { textAlign: g }));
this.xCorr = A;
this.yCorr = L;
}
K(b, { left: e + A + 'px', top: f + L + 'px' });
if (gb) l = b.offsetHeight;
this.cTT = Sb;
}
} else this.alignOnAdd = !0;
},
setSpanRotation: function (a) {
var b = {};
b[
ta
? '-ms-transform'
: gb
? '-webkit-transform'
: hb
? 'MozTransform'
: Nb
? '-o-transform'
: ''
] = b.transform = 'rotate(' + a + 'deg)';
K(this.element, b);
},
updateTransform: function () {
var a = this.translateX || 0,
b = this.translateY || 0,
c = this.scaleX,
d = this.scaleY,
e = this.inverted,
f = this.rotation;
e && ((a += this.attr('width')), (b += this.attr('height')));
a = ['translate(' + a + ',' + b + ')'];
e
? a.push('rotate(90) scale(-1,1)')
: f && a.push('rotate(' + f + ' ' + (this.x || 0) + ' ' + (this.y || 0) + ')');
(u(c) || u(d)) && a.push('scale(' + o(c, 1) + ' ' + o(d, 1) + ')');
a.length && v(this.element, 'transform', a.join(' '));
},
toFront: function () {
var a = this.element;
a.parentNode.appendChild(a);
return this;
},
align: function (a, b, c) {
var d,
e,
f,
g,
h = {};
e = this.renderer;
f = e.alignedObjects;
if (a) {
if (((this.alignOptions = a), (this.alignByTranslate = b), !c || ea(c)))
(this.alignTo = d = c || 'renderer'), ga(f, this), f.push(this), (c = null);
} else (a = this.alignOptions), (b = this.alignByTranslate), (d = this.alignTo);
c = o(c, e[d], e);
d = a.align;
e = a.verticalAlign;
f = (c.x || 0) + (a.x || 0);
g = (c.y || 0) + (a.y || 0);
if (d === 'right' || d === 'center')
f += (c.width - (a.width || 0)) / { right: 1, center: 2 }[d];
h[b ? 'translateX' : 'x'] = t(f);
if (e === 'bottom' || e === 'middle')
g += (c.height - (a.height || 0)) / ({ bottom: 1, middle: 2 }[e] || 1);
h[b ? 'translateY' : 'y'] = t(g);
this[this.placed ? 'animate' : 'attr'](h);
this.placed = !0;
this.alignAttr = h;
return this;
},
getBBox: function () {
var a = this.bBox,
b = this.renderer,
c,
d = this.rotation;
c = this.element;
var e = this.styles,
f = d * Ua;
if (!a) {
if (c.namespaceURI === za || b.forExport) {
try {
a = c.getBBox ? r({}, c.getBBox()) : { width: c.offsetWidth, height: c.offsetHeight };
} catch (g) {}
if (!a || a.width < 0) a = { width: 0, height: 0 };
} else a = this.htmlGetBBox();
if (b.isSVG) {
b = a.width;
c = a.height;
if (ta && e && e.fontSize === '11px' && c.toPrecision(3) === '22.7') a.height = c = 14;
if (d) (a.width = N(c * ca(f)) + N(b * V(f))), (a.height = N(c * V(f)) + N(b * ca(f)));
}
this.bBox = a;
}
return a;
},
show: function () {
return this.attr({ visibility: 'visible' });
},
hide: function () {
return this.attr({ visibility: 'hidden' });
},
fadeOut: function (a) {
var b = this;
b.animate(
{ opacity: 0 },
{
duration: a || 150,
complete: function () {
b.hide();
},
},
);
},
add: function (a) {
var b = this.renderer,
c = a || b,
d = c.element || b.box,
e = d.childNodes,
f = this.element,
g = v(f, 'zIndex'),
h;
if (a) this.parentGroup = a;
this.parentInverted = a && a.inverted;
this.textStr !== void 0 && b.buildText(this);
if (g) (c.handleZ = !0), (g = C(g));
if (c.handleZ)
for (c = 0; c < e.length; c++)
if (((a = e[c]), (b = v(a, 'zIndex')), a !== f && (C(b) > g || (!u(g) && u(b))))) {
d.insertBefore(f, a);
h = !0;
break;
}
h || d.appendChild(f);
this.added = !0;
z(this, 'add');
return this;
},
safeRemoveChild: function (a) {
var b = a.parentNode;
b && b.removeChild(a);
},
destroy: function () {
var a = this,
b = a.element || {},
c = a.shadows,
d = a.renderer.isSVG && b.nodeName === 'SPAN' && b.parentNode,
e,
f;
b.onclick = b.onmouseout = b.onmouseover = b.onmousemove = b.point = null;
Wa(a);
if (a.clipPath) a.clipPath = a.clipPath.destroy();
if (a.stops) {
for (f = 0; f < a.stops.length; f++) a.stops[f] = a.stops[f].destroy();
a.stops = null;
}
a.safeRemoveChild(b);
for (
c &&
n(c, function (b) {
a.safeRemoveChild(b);
});
d && d.childNodes.length === 0;
)
(b = d.parentNode), a.safeRemoveChild(d), (d = b);
a.alignTo && ga(a.renderer.alignedObjects, a);
for (e in a) delete a[e];
return null;
},
shadow: function (a, b, c) {
var d = [],
e,
f,
g = this.element,
h,
i,
j,
k;
if (a) {
i = o(a.width, 3);
j = (a.opacity || 0.15) / i;
k = this.parentInverted ? '(-1,-1)' : '(' + o(a.offsetX, 1) + ', ' + o(a.offsetY, 1) + ')';
for (e = 1; e <= i; e++) {
f = g.cloneNode(0);
h = i * 2 + 1 - 2 * e;
v(f, {
isShadow: 'true',
stroke: a.color || 'black',
'stroke-opacity': j * e,
'stroke-width': h,
transform: 'translate' + k,
fill: S,
});
if (c) v(f, 'height', s(v(f, 'height') - h, 0)), (f.cutHeight = h);
b ? b.element.appendChild(f) : g.parentNode.insertBefore(f, g);
d.push(f);
}
this.shadows = d;
}
return this;
},
};
var Ha = function () {
this.init.apply(this, arguments);
};
Ha.prototype = {
Element: wa,
init: function (a, b, c, d) {
var e = location,
f,
g;
f = this.createElement('svg').attr({ version: '1.1' });
g = f.element;
a.appendChild(g);
a.innerHTML.indexOf('xmlns') === -1 && v(g, 'xmlns', za);
this.isSVG = !0;
this.box = g;
this.boxWrapper = f;
this.alignedObjects = [];
this.url =
(hb || gb) && y.getElementsByTagName('base').length
? e.href
.replace(/#.*?$/, '')
.replace(/([\('\)])/g, '\\$1')
.replace(/ /g, '%20')
: '';
this.createElement('desc')
.add()
.element.appendChild(y.createTextNode('Created with Highcharts 3.0.6'));
this.defs = this.createElement('defs').add();
this.forExport = d;
this.gradients = {};
this.setSize(b, c, !1);
var h;
if (hb && a.getBoundingClientRect)
(this.subPixelFix = b =
function () {
K(a, { left: 0, top: 0 });
h = a.getBoundingClientRect();
K(a, { left: xa(h.left) - h.left + 'px', top: xa(h.top) - h.top + 'px' });
}),
b(),
J(O, 'resize', b);
},
isHidden: function () {
return !this.boxWrapper.getBBox().width;
},
destroy: function () {
var a = this.defs;
this.box = null;
this.boxWrapper = this.boxWrapper.destroy();
Ka(this.gradients || {});
this.gradients = null;
if (a) this.defs = a.destroy();
this.subPixelFix && aa(O, 'resize', this.subPixelFix);
return (this.alignedObjects = null);
},
createElement: function (a) {
var b = new this.Element();
b.init(this, a);
return b;
},
draw: function () {},
buildText: function (a) {
for (
var b = a.element,
c = this,
d = c.forExport,
e = o(a.textStr, '')
.toString()
.replace(/<(b|strong)>/g, '')
.replace(/<(i|em)>/g, '')
.replace(//g, '')
.split(//g),
f = b.childNodes,
g = /style="([^"]+)"/,
h = /href="(http[^"]+)"/,
i = v(b, 'x'),
j = a.styles,
k = j && j.width && C(j.width),
l = j && j.lineHeight,
m = f.length;
m--;
)
b.removeChild(f[m]);
k && !a.added && this.box.appendChild(b);
e[e.length - 1] === '' && e.pop();
n(e, function (e, f) {
var m,
o = 0,
e = e.replace(//g, '|||');
m = e.split('|||');
n(m, function (e) {
if (e !== '' || m.length === 1) {
var p = {},
n = y.createElementNS(za, 'tspan'),
s;
g.test(e) &&
((s = e.match(g)[1].replace(/(;| |^)color([ :])/, '$1fill$2')), v(n, 'style', s));
h.test(e) &&
!d &&
(v(n, 'onclick', 'location.href="' + e.match(h)[1] + '"'),
K(n, { cursor: 'pointer' }));
e = (e.replace(/<(.|\n)*?>/g, '') || ' ').replace(/</g, '<').replace(/>/g, '>');
if (
e !== ' ' &&
(n.appendChild(y.createTextNode(e)),
o ? (p.dx = 0) : (p.x = i),
v(n, p),
!o &&
f &&
(!Z && d && K(n, { display: 'block' }),
v(
n,
'dy',
l ||
c.fontMetrics(/px$/.test(n.style.fontSize) ? n.style.fontSize : j.fontSize).h,
gb && n.offsetHeight,
)),
b.appendChild(n),
o++,
k)
)
for (
var e = e.replace(/([^\^])-/g, '$1- ').split(' '),
u,
t,
p = a._clipHeight,
E = [],
w = C(l || 16),
B = 1;
e.length || E.length;
)
delete a.bBox,
(u = a.getBBox()),
(t = u.width),
(u = t > k),
!u || e.length === 1
? ((e = E),
(E = []),
e.length &&
(B++,
p && B * w > p
? ((e = ['...']), a.attr('title', a.textStr))
: ((n = y.createElementNS(za, 'tspan')),
v(n, { dy: w, x: i }),
s && v(n, 'style', s),
b.appendChild(n),
t > k && (k = t))))
: (n.removeChild(n.firstChild), E.unshift(e.pop())),
e.length && n.appendChild(y.createTextNode(e.join(' ').replace(/- /g, '-')));
}
});
});
},
button: function (a, b, c, d, e, f, g, h) {
var i = this.label(a, b, c, null, null, null, null, null, 'button'),
j = 0,
k,
l,
m,
p,
q,
n,
a = { x1: 0, y1: 0, x2: 0, y2: 1 },
e = x(
{
'stroke-width': 1,
stroke: '#CCCCCC',
fill: {
linearGradient: a,
stops: [
[0, '#FEFEFE'],
[1, '#F6F6F6'],
],
},
r: 2,
padding: 5,
style: { color: 'black' },
},
e,
);
m = e.style;
delete e.style;
f = x(
e,
{
stroke: '#68A',
fill: {
linearGradient: a,
stops: [
[0, '#FFF'],
[1, '#ACF'],
],
},
},
f,
);
p = f.style;
delete f.style;
g = x(
e,
{
stroke: '#68A',
fill: {
linearGradient: a,
stops: [
[0, '#9BD'],
[1, '#CDF'],
],
},
},
g,
);
q = g.style;
delete g.style;
h = x(e, { style: { color: '#CCC' } }, h);
n = h.style;
delete h.style;
J(i.element, ta ? 'mouseover' : 'mouseenter', function () {
j !== 3 && i.attr(f).css(p);
});
J(i.element, ta ? 'mouseout' : 'mouseleave', function () {
j !== 3 && ((k = [e, f, g][j]), (l = [m, p, q][j]), i.attr(k).css(l));
});
i.setState = function (a) {
(i.state = j = a)
? a === 2
? i.attr(g).css(q)
: a === 3 && i.attr(h).css(n)
: i.attr(e).css(m);
};
return i
.on('click', function () {
j !== 3 && d.call(i);
})
.attr(e)
.css(r({ cursor: 'default' }, m));
},
crispLine: function (a, b) {
a[1] === a[4] && (a[1] = a[4] = t(a[1]) - (b % 2) / 2);
a[2] === a[5] && (a[2] = a[5] = t(a[2]) + (b % 2) / 2);
return a;
},
path: function (a) {
var b = { fill: S };
Ia(a) ? (b.d = a) : T(a) && r(b, a);
return this.createElement('path').attr(b);
},
circle: function (a, b, c) {
a = T(a) ? a : { x: a, y: b, r: c };
return this.createElement('circle').attr(a);
},
arc: function (a, b, c, d, e, f) {
if (T(a)) (b = a.y), (c = a.r), (d = a.innerR), (e = a.start), (f = a.end), (a = a.x);
a = this.symbol('arc', a || 0, b || 0, c || 0, c || 0, {
innerR: d || 0,
start: e || 0,
end: f || 0,
});
a.r = c;
return a;
},
rect: function (a, b, c, d, e, f) {
e = T(a) ? a.r : e;
e = this.createElement('rect').attr({ rx: e, ry: e, fill: S });
return e.attr(T(a) ? a : e.crisp(f, a, b, s(c, 0), s(d, 0)));
},
setSize: function (a, b, c) {
var d = this.alignedObjects,
e = d.length;
this.width = a;
this.height = b;
for (this.boxWrapper[o(c, !0) ? 'animate' : 'attr']({ width: a, height: b }); e--; )
d[e].align();
},
g: function (a) {
var b = this.createElement('g');
return u(a) ? b.attr({ class: 'highcharts-' + a }) : b;
},
image: function (a, b, c, d, e) {
var f = { preserveAspectRatio: S };
arguments.length > 1 && r(f, { x: b, y: c, width: d, height: e });
f = this.createElement('image').attr(f);
f.element.setAttributeNS
? f.element.setAttributeNS('http://www.w3.org/1999/xlink', 'href', a)
: f.element.setAttribute('hc-svg-href', a);
return f;
},
symbol: function (a, b, c, d, e, f) {
var g,
h = this.symbols[a],
h = h && h(t(b), t(c), d, e, f),
i = /^url\((.*?)\)$/,
j,
k;
if (h)
(g = this.path(h)), r(g, { symbolName: a, x: b, y: c, width: d, height: e }), f && r(g, f);
else if (i.test(a))
(k = function (a, b) {
a.element &&
(a.attr({ width: b[0], height: b[1] }),
a.alignByTranslate || a.translate(t((d - b[0]) / 2), t((e - b[1]) / 2)));
}),
(j = a.match(i)[1]),
(a = Pb[j]),
(g = this.image(j).attr({ x: b, y: c })),
(g.isImg = !0),
a
? k(g, a)
: (g.attr({ width: 0, height: 0 }),
U('img', {
onload: function () {
k(g, (Pb[j] = [this.width, this.height]));
},
src: j,
}));
return g;
},
symbols: {
circle: function (a, b, c, d) {
var e = 0.166 * c;
return [
'M',
a + c / 2,
b,
'C',
a + c + e,
b,
a + c + e,
b + d,
a + c / 2,
b + d,
'C',
a - e,
b + d,
a - e,
b,
a + c / 2,
b,
'Z',
];
},
square: function (a, b, c, d) {
return ['M', a, b, 'L', a + c, b, a + c, b + d, a, b + d, 'Z'];
},
triangle: function (a, b, c, d) {
return ['M', a + c / 2, b, 'L', a + c, b + d, a, b + d, 'Z'];
},
'triangle-down': function (a, b, c, d) {
return ['M', a, b, 'L', a + c, b, a + c / 2, b + d, 'Z'];
},
diamond: function (a, b, c, d) {
return ['M', a + c / 2, b, 'L', a + c, b + d / 2, a + c / 2, b + d, a, b + d / 2, 'Z'];
},
arc: function (a, b, c, d, e) {
var f = e.start,
c = e.r || c || d,
g = e.end - 0.001,
d = e.innerR,
h = e.open,
i = V(f),
j = ca(f),
k = V(g),
g = ca(g),
e = e.end - f < ya ? 0 : 1;
return [
'M',
a + c * i,
b + c * j,
'A',
c,
c,
0,
e,
1,
a + c * k,
b + c * g,
h ? 'M' : 'L',
a + d * k,
b + d * g,
'A',
d,
d,
0,
e,
0,
a + d * i,
b + d * j,
h ? '' : 'Z',
];
},
},
clipRect: function (a, b, c, d) {
var e = 'highcharts-' + zb++,
f = this.createElement('clipPath').attr({ id: e }).add(this.defs),
a = this.rect(a, b, c, d, 0).add(f);
a.id = e;
a.clipPath = f;
return a;
},
color: function (a, b, c) {
var d = this,
e,
f = /^rgba/,
g,
h,
i,
j,
k,
l,
m,
p = [];
a && a.linearGradient
? (g = 'linearGradient')
: a && a.radialGradient && (g = 'radialGradient');
if (g) {
c = a[g];
h = d.gradients;
j = a.stops;
b = b.radialReference;
Ia(c) &&
(a[g] = c = { x1: c[0], y1: c[1], x2: c[2], y2: c[3], gradientUnits: 'userSpaceOnUse' });
g === 'radialGradient' &&
b &&
!u(c.gradientUnits) &&
(c = x(c, {
cx: b[0] - b[2] / 2 + c.cx * b[2],
cy: b[1] - b[2] / 2 + c.cy * b[2],
r: c.r * b[2],
gradientUnits: 'userSpaceOnUse',
}));
for (m in c) m !== 'id' && p.push(m, c[m]);
for (m in j) p.push(j[m]);
p = p.join(',');
h[p]
? (a = h[p].id)
: ((c.id = a = 'highcharts-' + zb++),
(h[p] = i = d.createElement(g).attr(c).add(d.defs)),
(i.stops = []),
n(j, function (a) {
f.test(a[1])
? ((e = ra(a[1])), (k = e.get('rgb')), (l = e.get('a')))
: ((k = a[1]), (l = 1));
a = d
.createElement('stop')
.attr({ offset: a[0], 'stop-color': k, 'stop-opacity': l })
.add(i);
i.stops.push(a);
}));
return 'url(' + d.url + '#' + a + ')';
} else
return f.test(a)
? ((e = ra(a)), v(b, c + '-opacity', e.get('a')), e.get('rgb'))
: (b.removeAttribute(c + '-opacity'), a);
},
text: function (a, b, c, d) {
var e = M.chart.style,
f = $ || (!Z && this.forExport);
if (d && !this.forExport) return this.html(a, b, c);
b = t(o(b, 0));
c = t(o(c, 0));
a = this.createElement('text')
.attr({ x: b, y: c, text: a })
.css({ fontFamily: e.fontFamily, fontSize: e.fontSize });
f && a.css({ position: 'absolute' });
a.x = b;
a.y = c;
return a;
},
html: function (a, b, c) {
var d = M.chart.style,
e = this.createElement('span'),
f = e.attrSetters,
g = e.element,
h = e.renderer;
f.text = function (a) {
a !== g.innerHTML && delete this.bBox;
g.innerHTML = a;
return !1;
};
f.x =
f.y =
f.align =
function (a, b) {
b === 'align' && (b = 'textAlign');
e[b] = a;
e.htmlUpdateTransform();
return !1;
};
e.attr({ text: a, x: t(b), y: t(c) }).css({
position: 'absolute',
whiteSpace: 'nowrap',
fontFamily: d.fontFamily,
fontSize: d.fontSize,
});
e.css = e.htmlCss;
if (h.isSVG)
e.add = function (a) {
var b,
c = h.box.parentNode,
d = [];
if (a) {
if (((b = a.div), !b)) {
for (; a; ) d.push(a), (a = a.parentGroup);
n(d.reverse(), function (a) {
var d;
b = a.div =
a.div ||
U(
Ea,
{ className: v(a.element, 'class') },
{
position: 'absolute',
left: (a.translateX || 0) + 'px',
top: (a.translateY || 0) + 'px',
},
b || c,
);
d = b.style;
r(a.attrSetters, {
translateX: function (a) {
d.left = a + 'px';
},
translateY: function (a) {
d.top = a + 'px';
},
visibility: function (a, b) {
d[b] = a;
},
});
});
}
} else b = c;
b.appendChild(g);
e.added = !0;
e.alignOnAdd && e.htmlUpdateTransform();
return e;
};
return e;
},
fontMetrics: function (a) {
var a = C(a || 11),
a = a < 24 ? a + 4 : t(a * 1.2),
b = t(a * 0.8);
return { h: a, b: b };
},
label: function (a, b, c, d, e, f, g, h, i) {
function j() {
var a, b;
a = o.element.style;
L = (Oa === void 0 || la === void 0 || q.styles.textAlign) && o.getBBox();
q.width = (Oa || L.width || 0) + 2 * da + kb;
q.height = (la || L.height || 0) + 2 * da;
v = da + p.fontMetrics(a && a.fontSize).b;
if (C) {
if (!A)
(a = t(-s * da)),
(b = h ? -v : 0),
(q.box = A =
d
? p.symbol(d, a, b, q.width, q.height)
: p.rect(a, b, q.width, q.height, 0, lb[Rb])),
A.add(q);
A.isImg || A.attr(x({ width: q.width, height: q.height }, lb));
lb = null;
}
}
function k() {
var a = q.styles,
a = a && a.textAlign,
b = kb + da * (1 - s),
c;
c = h ? 0 : v;
if (u(Oa) && (a === 'center' || a === 'right'))
b += { center: 0.5, right: 1 }[a] * (Oa - L.width);
(b !== o.x || c !== o.y) && o.attr({ x: b, y: c });
o.x = b;
o.y = c;
}
function l(a, b) {
A ? A.attr(a, b) : (lb[a] = b);
}
function m() {
o.add(q);
q.attr({ text: a, x: b, y: c });
A && u(e) && q.attr({ anchorX: e, anchorY: f });
}
var p = this,
q = p.g(i),
o = p.text('', 0, 0, g).attr({ zIndex: 1 }),
A,
L,
s = 0,
da = 3,
kb = 0,
Oa,
la,
E,
H,
B = 0,
lb = {},
v,
g = q.attrSetters,
C;
J(q, 'add', m);
g.width = function (a) {
Oa = a;
return !1;
};
g.height = function (a) {
la = a;
return !1;
};
g.padding = function (a) {
u(a) && a !== da && ((da = a), k());
return !1;
};
g.paddingLeft = function (a) {
u(a) && a !== kb && ((kb = a), k());
return !1;
};
g.align = function (a) {
s = { left: 0, center: 0.5, right: 1 }[a];
return !1;
};
g.text = function (a, b) {
o.attr(b, a);
j();
k();
return !1;
};
g[Rb] = function (a, b) {
C = !0;
B = (a % 2) / 2;
l(b, a);
return !1;
};
g.stroke =
g.fill =
g.r =
function (a, b) {
b === 'fill' && (C = !0);
l(b, a);
return !1;
};
g.anchorX = function (a, b) {
e = a;
l(b, a + B - E);
return !1;
};
g.anchorY = function (a, b) {
f = a;
l(b, a - H);
return !1;
};
g.x = function (a) {
q.x = a;
a -= s * ((Oa || L.width) + da);
E = t(a);
q.attr('translateX', E);
return !1;
};
g.y = function (a) {
H = q.y = t(a);
q.attr('translateY', H);
return !1;
};
var y = q.css;
return r(q, {
css: function (a) {
if (a) {
var b = {},
a = x(a);
n(
'fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow'.split(
',',
),
function (c) {
a[c] !== w && ((b[c] = a[c]), delete a[c]);
},
);
o.css(b);
}
return y.call(q, a);
},
getBBox: function () {
return { width: L.width + 2 * da, height: L.height + 2 * da, x: L.x - da, y: L.y - da };
},
shadow: function (a) {
A && A.shadow(a);
return q;
},
destroy: function () {
aa(q, 'add', m);
aa(q.element, 'mouseenter');
aa(q.element, 'mouseleave');
o && (o = o.destroy());
A && (A = A.destroy());
wa.prototype.destroy.call(q);
q = p = j = k = l = m = null;
},
});
},
};
Va = Ha;
var F;
if (!Z && !$) {
Highcharts.VMLElement = F = {
init: function (a, b) {
var c = ['<', b, ' filled="f" stroked="f"'],
d = ['position: ', 'absolute', ';'],
e = b === Ea;
(b === 'shape' || e) && d.push('left:0;top:0;width:1px;height:1px;');
d.push('visibility: ', e ? 'hidden' : 'visible');
c.push(' style="', d.join(''), '"/>');
if (b)
(c = e || b === 'span' || b === 'img' ? c.join('') : a.prepVML(c)), (this.element = U(c));
this.renderer = a;
this.attrSetters = {};
},
add: function (a) {
var b = this.renderer,
c = this.element,
d = b.box,
d = a ? a.element || a : d;
a && a.inverted && b.invertChild(c, d);
d.appendChild(c);
this.added = !0;
this.alignOnAdd && !this.deferUpdateTransform && this.updateTransform();
z(this, 'add');
return this;
},
updateTransform: wa.prototype.htmlUpdateTransform,
setSpanRotation: function (a, b, c) {
K(this.element, {
filter: a
? [
'progid:DXImageTransform.Microsoft.Matrix(M11=',
c,
', M12=',
-b,
', M21=',
b,
', M22=',
c,
", sizingMethod='auto expand')",
].join('')
: S,
});
},
pathToVML: function (a) {
for (var b = a.length, c = [], d; b--; )
if (sa(a[b])) c[b] = t(a[b] * 10) - 5;
else if (a[b] === 'Z') c[b] = 'x';
else if (((c[b] = a[b]), a.isArc && (a[b] === 'wa' || a[b] === 'at')))
(d = a[b] === 'wa' ? 1 : -1),
c[b + 5] === c[b + 7] && (c[b + 7] -= d),
c[b + 6] === c[b + 8] && (c[b + 8] -= d);
return c.join(' ') || 'x';
},
attr: function (a, b) {
var c,
d,
e,
f = this.element || {},
g = f.style,
h = f.nodeName,
i = this.renderer,
j = this.symbolName,
k,
l = this.shadows,
m,
p = this.attrSetters,
q = this;
ea(a) && u(b) && ((c = a), (a = {}), (a[c] = b));
if (ea(a))
(c = a), (q = c === 'strokeWidth' || c === 'stroke-width' ? this.strokeweight : this[c]);
else
for (c in a)
if (
((d = a[c]), (m = !1), (e = p[c] && p[c].call(this, d, c)), e !== !1 && d !== null)
) {
e !== w && (d = e);
if (j && /^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))
k || (this.symbolAttr(a), (k = !0)), (m = !0);
else if (c === 'd') {
d = d || [];
this.d = d.join(' ');
f.path = d = this.pathToVML(d);
if (l)
for (e = l.length; e--; )
l[e].path = l[e].cutOff ? this.cutOffPath(d, l[e].cutOff) : d;
m = !0;
} else if (c === 'visibility') {
if (l) for (e = l.length; e--; ) l[e].style[c] = d;
h === 'DIV' &&
((d = d === 'hidden' ? '-999em' : 0),
fb || (g[c] = d ? 'visible' : 'hidden'),
(c = 'top'));
g[c] = d;
m = !0;
} else if (c === 'zIndex') d && (g[c] = d), (m = !0);
else if (qa(c, ['x', 'y', 'width', 'height']) !== -1)
(this[c] = d),
c === 'x' || c === 'y' ? (c = { x: 'left', y: 'top' }[c]) : (d = s(0, d)),
this.updateClipping ? ((this[c] = d), this.updateClipping()) : (g[c] = d),
(m = !0);
else if (c === 'class' && h === 'DIV') f.className = d;
else if (c === 'stroke') (d = i.color(d, f, c)), (c = 'strokecolor');
else if (c === 'stroke-width' || c === 'strokeWidth')
(f.stroked = d ? !0 : !1),
(c = 'strokeweight'),
(this[c] = d),
sa(d) && (d += 'px');
else if (c === 'dashstyle')
((f.getElementsByTagName('stroke')[0] ||
U(i.prepVML(['']), null, null, f))[c] = d || 'solid'),
(this.dashstyle = d),
(m = !0);
else if (c === 'fill')
if (h === 'SPAN') g.color = d;
else {
if (h !== 'IMG')
(f.filled = d !== S ? !0 : !1), (d = i.color(d, f, c, this)), (c = 'fillcolor');
}
else if (c === 'opacity') m = !0;
else if (h === 'shape' && c === 'rotation')
(this[c] = f.style[c] = d),
(f.style.left = -t(ca(d * Ua) + 1) + 'px'),
(f.style.top = t(V(d * Ua)) + 'px');
else if (c === 'translateX' || c === 'translateY' || c === 'rotation')
(this[c] = d), this.updateTransform(), (m = !0);
else if (c === 'text') (this.bBox = null), (f.innerHTML = d), (m = !0);
m || (fb ? (f[c] = d) : v(f, c, d));
}
return q;
},
clip: function (a) {
var b = this,
c;
a
? ((c = a.members),
ga(c, b),
c.push(b),
(b.destroyClip = function () {
ga(c, b);
}),
(a = a.getCSS(b)))
: (b.destroyClip && b.destroyClip(), (a = { clip: fb ? 'inherit' : 'rect(auto)' }));
return b.css(a);
},
css: wa.prototype.htmlCss,
safeRemoveChild: function (a) {
a.parentNode && Ta(a);
},
destroy: function () {
this.destroyClip && this.destroyClip();
return wa.prototype.destroy.apply(this);
},
on: function (a, b) {
this.element['on' + a] = function () {
var a = O.event;
a.target = a.srcElement;
b(a);
};
return this;
},
cutOffPath: function (a, b) {
var c,
a = a.split(/[ ,]/);
c = a.length;
if (c === 9 || c === 11) a[c - 4] = a[c - 2] = C(a[c - 2]) - 10 * b;
return a.join(' ');
},
shadow: function (a, b, c) {
var d = [],
e,
f = this.element,
g = this.renderer,
h,
i = f.style,
j,
k = f.path,
l,
m,
p,
q;
k && typeof k.value !== 'string' && (k = 'x');
m = k;
if (a) {
p = o(a.width, 3);
q = (a.opacity || 0.15) / p;
for (e = 1; e <= 3; e++) {
l = p * 2 + 1 - 2 * e;
c && (m = this.cutOffPath(k.value, l + 0.5));
j = [
'',
];
h = U(g.prepVML(j), null, {
left: C(i.left) + o(a.offsetX, 1),
top: C(i.top) + o(a.offsetY, 1),
});
if (c) h.cutOff = l + 1;
j = [''];
U(g.prepVML(j), null, null, h);
b ? b.element.appendChild(h) : f.parentNode.insertBefore(h, f);
d.push(h);
}
this.shadows = d;
}
return this;
},
};
F = ha(wa, F);
var ma = {
Element: F,
isIE8: oa.indexOf('MSIE 8.0') > -1,
init: function (a, b, c) {
var d, e;
this.alignedObjects = [];
d = this.createElement(Ea);
e = d.element;
e.style.position = 'relative';
a.appendChild(d.element);
this.isVML = !0;
this.box = e;
this.boxWrapper = d;
this.setSize(b, c, !1);
y.namespaces.hcv ||
(y.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml'),
((y.styleSheets.length ? y.styleSheets[0] : y.createStyleSheet()).cssText +=
'hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } '));
},
isHidden: function () {
return !this.box.offsetWidth;
},
clipRect: function (a, b, c, d) {
var e = this.createElement(),
f = T(a);
return r(e, {
members: [],
left: (f ? a.x : a) + 1,
top: (f ? a.y : b) + 1,
width: (f ? a.width : c) - 1,
height: (f ? a.height : d) - 1,
getCSS: function (a) {
var b = a.element,
c = b.nodeName,
a = a.inverted,
d = this.top - (c === 'shape' ? b.offsetTop : 0),
e = this.left,
b = e + this.width,
f = d + this.height,
d = {
clip:
'rect(' +
t(a ? e : d) +
'px,' +
t(a ? f : b) +
'px,' +
t(a ? b : f) +
'px,' +
t(a ? d : e) +
'px)',
};
!a && fb && c === 'DIV' && r(d, { width: b + 'px', height: f + 'px' });
return d;
},
updateClipping: function () {
n(e.members, function (a) {
a.css(e.getCSS(a));
});
},
});
},
color: function (a, b, c, d) {
var e = this,
f,
g = /^rgba/,
h,
i,
j = S;
a && a.linearGradient ? (i = 'gradient') : a && a.radialGradient && (i = 'pattern');
if (i) {
var k,
l,
m = a.linearGradient || a.radialGradient,
p,
q,
o,
A,
L,
s = '',
a = a.stops,
u,
t = [],
w = function () {
h = [
'',
];
U(e.prepVML(h), null, null, b);
};
p = a[0];
u = a[a.length - 1];
p[0] > 0 && a.unshift([0, p[1]]);
u[0] < 1 && a.push([1, u[1]]);
n(a, function (a, b) {
g.test(a[1])
? ((f = ra(a[1])), (k = f.get('rgb')), (l = f.get('a')))
: ((k = a[1]), (l = 1));
t.push(a[0] * 100 + '% ' + k);
b ? ((o = l), (A = k)) : ((q = l), (L = k));
});
if (c === 'fill')
if (i === 'gradient')
(c = m.x1 || m[0] || 0),
(a = m.y1 || m[1] || 0),
(p = m.x2 || m[2] || 0),
(m = m.y2 || m[3] || 0),
(s = 'angle="' + (90 - (R.atan((m - a) / (p - c)) * 180) / ya) + '"'),
w();
else {
var j = m.r,
r = j * 2,
E = j * 2,
H = m.cx,
B = m.cy,
x = b.radialReference,
v,
j = function () {
x &&
((v = d.getBBox()),
(H += (x[0] - v.x) / v.width - 0.5),
(B += (x[1] - v.y) / v.height - 0.5),
(r *= x[2] / v.width),
(E *= x[2] / v.height));
s =
'src="' +
M.global.VMLRadialGradientURL +
'" size="' +
r +
',' +
E +
'" origin="0.5,0.5" position="' +
H +
',' +
B +
'" color2="' +
L +
'" ';
w();
};
d.added ? j() : J(d, 'add', j);
j = A;
}
else j = k;
} else if (g.test(a) && b.tagName !== 'IMG')
(f = ra(a)),
(h = ['<', c, ' opacity="', f.get('a'), '"/>']),
U(this.prepVML(h), null, null, b),
(j = f.get('rgb'));
else {
j = b.getElementsByTagName(c);
if (j.length) (j[0].opacity = 1), (j[0].type = 'solid');
j = a;
}
return j;
},
prepVML: function (a) {
var b = this.isIE8,
a = a.join('');
b
? ((a = a.replace('/>', ' xmlns="urn:schemas-microsoft-com:vml" />')),
(a =
a.indexOf('style="') === -1
? a.replace('/>', ' style="display:inline-block;behavior:url(#default#VML);" />')
: a.replace('style="', 'style="display:inline-block;behavior:url(#default#VML);')))
: (a = a.replace('<', ' 1 && f.attr({ x: b, y: c, width: d, height: e });
return f;
},
rect: function (a, b, c, d, e, f) {
var g = this.symbol('rect');
g.r = T(a) ? a.r : e;
return g.attr(T(a) ? a : g.crisp(f, a, b, s(c, 0), s(d, 0)));
},
invertChild: function (a, b) {
var c = b.style;
K(a, { flip: 'x', left: C(c.width) - 1, top: C(c.height) - 1, rotation: -90 });
},
symbols: {
arc: function (a, b, c, d, e) {
var f = e.start,
g = e.end,
h = e.r || c || d,
c = e.innerR,
d = V(f),
i = ca(f),
j = V(g),
k = ca(g);
if (g - f === 0) return ['x'];
f = ['wa', a - h, b - h, a + h, b + h, a + h * d, b + h * i, a + h * j, b + h * k];
e.open && !c && f.push('e', 'M', a, b);
f.push(
'at',
a - c,
b - c,
a + c,
b + c,
a + c * j,
b + c * k,
a + c * d,
b + c * i,
'x',
'e',
);
f.isArc = !0;
return f;
},
circle: function (a, b, c, d, e) {
e && (c = d = 2 * e.r);
e && e.isCircle && ((a -= c / 2), (b -= d / 2));
return ['wa', a, b, a + c, b + d, a + c, b + d / 2, a + c, b + d / 2, 'e'];
},
rect: function (a, b, c, d, e) {
var f = a + c,
g = b + d,
h;
!u(e) || !e.r
? (f = Ha.prototype.symbols.square.apply(0, arguments))
: ((h = I(e.r, c, d)),
(f = [
'M',
a + h,
b,
'L',
f - h,
b,
'wa',
f - 2 * h,
b,
f,
b + 2 * h,
f - h,
b,
f,
b + h,
'L',
f,
g - h,
'wa',
f - 2 * h,
g - 2 * h,
f,
g,
f,
g - h,
f - h,
g,
'L',
a + h,
g,
'wa',
a,
g - 2 * h,
a + 2 * h,
g,
a + h,
g,
a,
g - h,
'L',
a,
b + h,
'wa',
a,
b,
a + 2 * h,
b + 2 * h,
a,
b + h,
a + h,
b,
'x',
'e',
]));
return f;
},
},
};
Highcharts.VMLRenderer = F = function () {
this.init.apply(this, arguments);
};
F.prototype = x(Ha.prototype, ma);
Va = F;
}
var Tb;
if ($)
(Highcharts.CanVGRenderer = F =
function () {
za = 'http://www.w3.org/1999/xhtml';
}),
(F.prototype.symbols = {}),
(Tb = (function () {
function a() {
var a = b.length,
d;
for (d = 0; d < a; d++) b[d]();
b = [];
}
var b = [];
return {
push: function (c, d) {
b.length === 0 && Vb(d, a);
b.push(c);
},
};
})()),
(Va = F);
Ma.prototype = {
addLabel: function () {
var a = this.axis,
b = a.options,
c = a.chart,
d = a.horiz,
e = a.categories,
f = a.series[0] && a.series[0].names,
g = this.pos,
h = b.labels,
i = a.tickPositions,
d =
(d && e && !h.step && !h.staggerLines && !h.rotation && c.plotWidth / i.length) ||
(!d && (c.margin[3] || c.chartWidth * 0.33)),
j = g === i[0],
k = g === i[i.length - 1],
l,
f = e ? o(e[g], f && f[g], g) : g,
e = this.label,
m = i.info;
a.isDatetimeAxis && m && (l = b.dateTimeLabelFormats[m.higherRanks[g] || m.unitName]);
this.isFirst = j;
this.isLast = k;
b = a.labelFormatter.call({
axis: a,
chart: c,
isFirst: j,
isLast: k,
dateTimeLabelFormat: l,
value: a.isLog ? ia(fa(f)) : f,
});
g = d && { width: s(1, t(d - 2 * (h.padding || 10))) + 'px' };
g = r(g, h.style);
if (u(e)) e && e.attr({ text: b }).css(g);
else {
l = { align: a.labelAlign };
if (sa(h.rotation)) l.rotation = h.rotation;
if (d && h.ellipsis) l._clipHeight = a.len / i.length;
this.label =
u(b) && h.enabled
? c.renderer.text(b, 0, 0, h.useHTML).attr(l).css(g).add(a.labelGroup)
: null;
}
},
getLabelSize: function () {
var a = this.label,
b = this.axis;
return a ? (this.labelBBox = a.getBBox())[b.horiz ? 'height' : 'width'] : 0;
},
getLabelSides: function () {
var a = this.axis,
b = this.labelBBox.width,
a = b * { left: 0, center: 0.5, right: 1 }[a.labelAlign] - a.options.labels.x;
return [-a, b - a];
},
handleOverflow: function (a, b) {
var c = !0,
d = this.axis,
e = d.chart,
f = this.isFirst,
g = this.isLast,
h = b.x,
i = d.reversed,
j = d.tickPositions;
if (f || g) {
var k = this.getLabelSides(),
l = k[0],
k = k[1],
e = e.plotLeft,
m = e + d.len,
j =
(d = d.ticks[j[a + (f ? 1 : -1)]]) &&
d.label.xy &&
d.label.xy.x + d.getLabelSides()[f ? 0 : 1];
(f && !i) || (g && i)
? h + l < e && ((h = e - l), d && h + k > j && (c = !1))
: h + k > m && ((h = m - k), d && h + l < j && (c = !1));
b.x = h;
}
return c;
},
getPosition: function (a, b, c, d) {
var e = this.axis,
f = e.chart,
g = (d && f.oldChartHeight) || f.chartHeight;
return {
x: a
? e.translate(b + c, null, null, d) + e.transB
: e.left +
e.offset +
(e.opposite ? ((d && f.oldChartWidth) || f.chartWidth) - e.right - e.left : 0),
y: a
? g - e.bottom + e.offset - (e.opposite ? e.height : 0)
: g - e.translate(b + c, null, null, d) - e.transB,
};
},
getLabelPosition: function (a, b, c, d, e, f, g, h) {
var i = this.axis,
j = i.transA,
k = i.reversed,
l = i.staggerLines,
m = i.chart.renderer.fontMetrics(e.style.fontSize).b,
p = e.rotation,
a = a + e.x - (f && d ? f * j * (k ? -1 : 1) : 0),
b = b + e.y - (f && !d ? f * j * (k ? 1 : -1) : 0);
p && i.side === 2 && (b -= m - m * V(p * Ua));
!u(e.y) && !p && (b += m - c.getBBox().height / 2);
l && (b += ((g / (h || 1)) % l) * (i.labelOffset / l));
return { x: a, y: b };
},
getMarkPath: function (a, b, c, d, e, f) {
return f.crispLine(['M', a, b, 'L', a + (e ? 0 : -c), b + (e ? c : 0)], d);
},
render: function (a, b, c) {
var d = this.axis,
e = d.options,
f = d.chart.renderer,
g = d.horiz,
h = this.type,
i = this.label,
j = this.pos,
k = e.labels,
l = this.gridLine,
m = h ? h + 'Grid' : 'grid',
p = h ? h + 'Tick' : 'tick',
q = e[m + 'LineWidth'],
n = e[m + 'LineColor'],
A = e[m + 'LineDashStyle'],
s = e[p + 'Length'],
m = e[p + 'Width'] || 0,
u = e[p + 'Color'],
t = e[p + 'Position'],
p = this.mark,
r = k.step,
v = !0,
x = d.tickmarkOffset,
E = this.getPosition(g, j, x, b),
H = E.x,
E = E.y,
B = (g && H === d.pos + d.len) || (!g && E === d.pos) ? -1 : 1,
C = d.staggerLines;
this.isActive = !0;
if (q) {
j = d.getPlotLinePath(j + x, q * B, b, !0);
if (l === w) {
l = { stroke: n, 'stroke-width': q };
if (A) l.dashstyle = A;
if (!h) l.zIndex = 1;
if (b) l.opacity = 0;
this.gridLine = l = q ? f.path(j).attr(l).add(d.gridGroup) : null;
}
if (!b && l && j) l[this.isNew ? 'attr' : 'animate']({ d: j, opacity: c });
}
if (m && s)
t === 'inside' && (s = -s),
d.opposite && (s = -s),
(b = this.getMarkPath(H, E, s, m * B, g, f)),
p
? p.animate({ d: b, opacity: c })
: (this.mark = f
.path(b)
.attr({ stroke: u, 'stroke-width': m, opacity: c })
.add(d.axisGroup));
if (i && !isNaN(H))
(i.xy = E = this.getLabelPosition(H, E, i, g, k, x, a, r)),
(this.isFirst && !this.isLast && !o(e.showFirstLabel, 1)) ||
(this.isLast && !this.isFirst && !o(e.showLastLabel, 1))
? (v = !1)
: !C && g && k.overflow === 'justify' && !this.handleOverflow(a, E) && (v = !1),
r && a % r && (v = !1),
v && !isNaN(E.y)
? ((E.opacity = c), i[this.isNew ? 'attr' : 'animate'](E), (this.isNew = !1))
: i.attr('y', -9999);
},
destroy: function () {
Ka(this, this.axis);
},
};
vb.prototype = {
render: function () {
var a = this,
b = a.axis,
c = b.horiz,
d = (b.pointRange || 0) / 2,
e = a.options,
f = e.label,
g = a.label,
h = e.width,
i = e.to,
j = e.from,
k = u(j) && u(i),
l = e.value,
m = e.dashStyle,
p = a.svgElem,
q = [],
n,
A = e.color,
L = e.zIndex,
t = e.events,
w = b.chart.renderer;
b.isLog && ((j = na(j)), (i = na(i)), (l = na(l)));
if (h) {
if (((q = b.getPlotLinePath(l, h)), (d = { stroke: A, 'stroke-width': h }), m))
d.dashstyle = m;
} else if (k) {
if (
((j = s(j, b.min - d)),
(i = I(i, b.max + d)),
(q = b.getPlotBandPath(j, i, e)),
(d = { fill: A }),
e.borderWidth)
)
(d.stroke = e.borderColor), (d['stroke-width'] = e.borderWidth);
} else return;
if (u(L)) d.zIndex = L;
if (p)
q
? p.animate({ d: q }, null, p.onGetPath)
: (p.hide(),
(p.onGetPath = function () {
p.show();
}));
else if (q && q.length && ((a.svgElem = p = w.path(q).attr(d).add()), t))
for (n in ((e = function (b) {
p.on(b, function (c) {
t[b].apply(a, [c]);
});
}),
t))
e(n);
if (f && u(f.text) && q && q.length && b.width > 0 && b.height > 0) {
f = x(
{
align: c && k && 'center',
x: c ? !k && 4 : 10,
verticalAlign: !c && k && 'middle',
y: c ? (k ? 16 : 10) : k ? 6 : -4,
rotation: c && !k && 90,
},
f,
);
if (!g)
a.label = g = w
.text(f.text, 0, 0, f.useHTML)
.attr({ align: f.textAlign || f.align, rotation: f.rotation, zIndex: L })
.css(f.style)
.add();
b = [q[1], q[4], o(q[6], q[1])];
q = [q[2], q[5], o(q[7], q[2])];
c = Ja(b);
k = Ja(q);
g.align(f, !1, { x: c, y: k, width: va(b) - c, height: va(q) - k });
g.show();
} else g && g.hide();
return a;
},
destroy: function () {
ga(this.axis.plotLinesAndBands, this);
delete this.axis;
Ka(this);
},
};
Mb.prototype = {
destroy: function () {
Ka(this, this.axis);
},
render: function (a) {
var b = this.options,
c = b.format,
c = c ? Ca(c, this) : b.formatter.call(this);
this.label
? this.label.attr({ text: c, visibility: 'hidden' })
: (this.label = this.axis.chart.renderer
.text(c, 0, 0, b.useHTML)
.css(b.style)
.attr({ align: this.textAlign, rotation: b.rotation, visibility: 'hidden' })
.add(a));
},
setOffset: function (a, b) {
var c = this.axis,
d = c.chart,
e = d.inverted,
f = this.isNegative,
g = c.translate(this.percent ? 100 : this.total, 0, 0, 0, 1),
c = c.translate(0),
c = N(g - c),
h = d.xAxis[0].translate(this.x) + a,
i = d.plotHeight,
f = {
x: e ? (f ? g : g - c) : h,
y: e ? i - h - b : f ? i - g - c : i - g,
width: e ? c : b,
height: e ? b : c,
};
if ((e = this.label))
e.align(this.alignOptions, null, f),
(f = e.alignAttr),
e.attr({
visibility:
this.options.crop === !1 || d.isInsidePlot(f.x, f.y)
? Z
? 'inherit'
: 'visible'
: 'hidden',
});
},
};
db.prototype = {
defaultOptions: {
dateTimeLabelFormats: {
millisecond: '%H:%M:%S.%L',
second: '%H:%M:%S',
minute: '%H:%M',
hour: '%H:%M',
day: '%e. %b',
week: '%e. %b',
month: "%b '%y",
year: '%Y',
},
endOnTick: !1,
gridLineColor: '#C0C0C0',
labels: G,
lineColor: '#C0D0E0',
lineWidth: 1,
minPadding: 0.01,
maxPadding: 0.01,
minorGridLineColor: '#E0E0E0',
minorGridLineWidth: 1,
minorTickColor: '#A0A0A0',
minorTickLength: 2,
minorTickPosition: 'outside',
startOfWeek: 1,
startOnTick: !1,
tickColor: '#C0D0E0',
tickLength: 5,
tickmarkPlacement: 'between',
tickPixelInterval: 100,
tickPosition: 'outside',
tickWidth: 1,
title: { align: 'middle', style: { color: '#4d759e', fontWeight: 'bold' } },
type: 'linear',
},
defaultYAxisOptions: {
endOnTick: !0,
gridLineWidth: 1,
tickPixelInterval: 72,
showLastLabel: !0,
labels: { x: -8, y: 3 },
lineWidth: 0,
maxPadding: 0.05,
minPadding: 0.05,
startOnTick: !0,
tickWidth: 0,
title: { rotation: 270, text: 'Values' },
stackLabels: {
enabled: !1,
formatter: function () {
return Aa(this.total, -1);
},
style: G.style,
},
},
defaultLeftAxisOptions: { labels: { x: -8, y: null }, title: { rotation: 270 } },
defaultRightAxisOptions: { labels: { x: 8, y: null }, title: { rotation: 90 } },
defaultBottomAxisOptions: { labels: { x: 0, y: 14 }, title: { rotation: 0 } },
defaultTopAxisOptions: { labels: { x: 0, y: -5 }, title: { rotation: 0 } },
init: function (a, b) {
var c = b.isX;
this.horiz = a.inverted ? !c : c;
this.xOrY = (this.isXAxis = c) ? 'x' : 'y';
this.opposite = b.opposite;
this.side = this.horiz ? (this.opposite ? 0 : 2) : this.opposite ? 1 : 3;
this.setOptions(b);
var d = this.options,
e = d.type;
this.labelFormatter = d.labels.formatter || this.defaultLabelFormatter;
this.userOptions = b;
this.minPixelPadding = 0;
this.chart = a;
this.reversed = d.reversed;
this.zoomEnabled = d.zoomEnabled !== !1;
this.categories = d.categories || e === 'category';
this.isLog = e === 'logarithmic';
this.isDatetimeAxis = e === 'datetime';
this.isLinked = u(d.linkedTo);
this.tickmarkOffset = this.categories && d.tickmarkPlacement === 'between' ? 0.5 : 0;
this.ticks = {};
this.minorTicks = {};
this.plotLinesAndBands = [];
this.alternateBands = {};
this.len = 0;
this.minRange = this.userMinRange = d.minRange || d.maxZoom;
this.range = d.range;
this.offset = d.offset || 0;
this.stacks = {};
this.oldStacks = {};
this.stackExtremes = {};
this.min = this.max = null;
var f,
d = this.options.events;
qa(this, a.axes) === -1 && (a.axes.push(this), a[c ? 'xAxis' : 'yAxis'].push(this));
this.series = this.series || [];
if (a.inverted && c && this.reversed === w) this.reversed = !0;
this.removePlotLine = this.removePlotBand = this.removePlotBandOrLine;
for (f in d) J(this, f, d[f]);
if (this.isLog) (this.val2lin = na), (this.lin2val = fa);
},
setOptions: function (a) {
this.options = x(
this.defaultOptions,
this.isXAxis ? {} : this.defaultYAxisOptions,
[
this.defaultTopAxisOptions,
this.defaultRightAxisOptions,
this.defaultBottomAxisOptions,
this.defaultLeftAxisOptions,
][this.side],
x(M[this.isXAxis ? 'xAxis' : 'yAxis'], a),
);
},
update: function (a, b) {
var c = this.chart,
a = (c.options[this.xOrY + 'Axis'][this.options.index] = x(this.userOptions, a));
this.destroy(!0);
this._addedPlotLB = this.userMin = this.userMax = w;
this.init(c, r(a, { events: w }));
c.isDirtyBox = !0;
o(b, !0) && c.redraw();
},
remove: function (a) {
var b = this.chart,
c = this.xOrY + 'Axis';
n(this.series, function (a) {
a.remove(!1);
});
ga(b.axes, this);
ga(b[c], this);
b.options[c].splice(this.options.index, 1);
n(b[c], function (a, b) {
a.options.index = b;
});
this.destroy();
b.isDirtyBox = !0;
o(a, !0) && b.redraw();
},
defaultLabelFormatter: function () {
var a = this.axis,
b = this.value,
c = a.categories,
d = this.dateTimeLabelFormat,
e = M.lang.numericSymbols,
f = e && e.length,
g,
h = a.options.labels.format,
a = a.isLog ? b : a.tickInterval;
if (h) g = Ca(h, this);
else if (c) g = b;
else if (d) g = Xa(d, b);
else if (f && a >= 1e3)
for (; f-- && g === w; )
(c = Math.pow(1e3, f + 1)), a >= c && e[f] !== null && (g = Aa(b / c, -1) + e[f]);
g === w && (g = b >= 1e3 ? Aa(b, 0) : Aa(b, -1));
return g;
},
getSeriesExtremes: function () {
var a = this,
b = a.chart;
a.hasVisibleSeries = !1;
a.dataMin = a.dataMax = null;
a.stackExtremes = {};
a.buildStacks();
n(a.series, function (c) {
if (c.visible || !b.options.chart.ignoreHiddenSeries) {
var d;
d = c.options.threshold;
var e;
a.hasVisibleSeries = !0;
a.isLog && d <= 0 && (d = null);
if (a.isXAxis) {
if (((d = c.xData), d.length))
(a.dataMin = I(o(a.dataMin, d[0]), Ja(d))),
(a.dataMax = s(o(a.dataMax, d[0]), va(d)));
} else {
c.getExtremes();
e = c.dataMax;
c = c.dataMin;
if (u(c) && u(e))
(a.dataMin = I(o(a.dataMin, c), c)), (a.dataMax = s(o(a.dataMax, e), e));
if (u(d))
if (a.dataMin >= d) (a.dataMin = d), (a.ignoreMinPadding = !0);
else if (a.dataMax < d) (a.dataMax = d), (a.ignoreMaxPadding = !0);
}
}
});
},
translate: function (a, b, c, d, e, f) {
var g = this.len,
h = 1,
i = 0,
j = d ? this.oldTransA : this.transA,
d = d ? this.oldMin : this.min,
k = this.minPixelPadding,
e = (this.options.ordinal || (this.isLog && e)) && this.lin2val;
if (!j) j = this.transA;
c && ((h *= -1), (i = g));
this.reversed && ((h *= -1), (i -= h * g));
b
? ((a = a * h + i), (a -= k), (a = a / j + d), e && (a = this.lin2val(a)))
: (e && (a = this.val2lin(a)),
f === 'between' && (f = 0.5),
(a = h * (a - d) * j + i + h * k + (sa(f) ? j * f * this.pointRange : 0)));
return a;
},
toPixels: function (a, b) {
return this.translate(a, !1, !this.horiz, null, !0) + (b ? 0 : this.pos);
},
toValue: function (a, b) {
return this.translate(a - (b ? 0 : this.pos), !0, !this.horiz, null, !0);
},
getPlotLinePath: function (a, b, c, d) {
var e = this.chart,
f = this.left,
g = this.top,
h,
i,
j,
a = this.translate(a, null, null, c),
k = (c && e.oldChartHeight) || e.chartHeight,
l = (c && e.oldChartWidth) || e.chartWidth,
m;
h = this.transB;
c = i = t(a + h);
h = j = t(k - a - h);
if (isNaN(a)) m = !0;
else if (this.horiz) {
if (((h = g), (j = k - this.bottom), c < f || c > f + this.width)) m = !0;
} else if (((c = f), (i = l - this.right), h < g || h > g + this.height)) m = !0;
return m && !d ? null : e.renderer.crispLine(['M', c, h, 'L', i, j], b || 0);
},
getPlotBandPath: function (a, b) {
var c = this.getPlotLinePath(b),
d = this.getPlotLinePath(a);
d && c ? d.push(c[4], c[5], c[1], c[2]) : (d = null);
return d;
},
getLinearTickPositions: function (a, b, c) {
for (var d, b = ia(P(b / a) * a), c = ia(xa(c / a) * a), e = []; b <= c; ) {
e.push(b);
b = ia(b + a);
if (b === d) break;
d = b;
}
return e;
},
getLogTickPositions: function (a, b, c, d) {
var e = this.options,
f = this.len,
g = [];
if (!d) this._minorAutoInterval = null;
if (a >= 0.5) (a = t(a)), (g = this.getLinearTickPositions(a, b, c));
else if (a >= 0.08)
for (
var f = P(b),
h,
i,
j,
k,
l,
e = a > 0.3 ? [1, 2, 4] : a > 0.15 ? [1, 2, 4, 6, 8] : [1, 2, 3, 4, 5, 6, 7, 8, 9];
f < c + 1 && !l;
f++
) {
i = e.length;
for (h = 0; h < i && !l; h++)
(j = na(fa(f) * e[h])),
j > b && (!d || k <= c) && g.push(k),
k > c && (l = !0),
(k = j);
}
else if (
((b = fa(b)),
(c = fa(c)),
(a = e[d ? 'minorTickInterval' : 'tickInterval']),
(a = o(
a === 'auto' ? null : a,
this._minorAutoInterval,
((c - b) * (e.tickPixelInterval / (d ? 5 : 1))) /
((d ? f / this.tickPositions.length : f) || 1),
)),
(a = ob(a, null, nb(a))),
(g = Na(this.getLinearTickPositions(a, b, c), na)),
!d)
)
this._minorAutoInterval = a / 5;
if (!d) this.tickInterval = a;
return g;
},
getMinorTickPositions: function () {
var a = this.options,
b = this.tickPositions,
c = this.minorTickInterval,
d = [],
e;
if (this.isLog) {
e = b.length;
for (a = 1; a < e; a++) d = d.concat(this.getLogTickPositions(c, b[a - 1], b[a], !0));
} else if (this.isDatetimeAxis && a.minorTickInterval === 'auto')
(d = d.concat(Eb(Cb(c), this.min, this.max, a.startOfWeek))), d[0] < this.min && d.shift();
else for (b = this.min + ((b[0] - this.min) % c); b <= this.max; b += c) d.push(b);
return d;
},
adjustForMinRange: function () {
var a = this.options,
b = this.min,
c = this.max,
d,
e = this.dataMax - this.dataMin >= this.minRange,
f,
g,
h,
i,
j;
if (this.isXAxis && this.minRange === w && !this.isLog)
u(a.min) || u(a.max)
? (this.minRange = null)
: (n(this.series, function (a) {
i = a.xData;
for (g = j = a.xIncrement ? 1 : i.length - 1; g > 0; g--)
if (((h = i[g] - i[g - 1]), f === w || h < f)) f = h;
}),
(this.minRange = I(f * 5, this.dataMax - this.dataMin)));
if (c - b < this.minRange) {
var k = this.minRange;
d = (k - c + b) / 2;
d = [b - d, o(a.min, b - d)];
if (e) d[2] = this.dataMin;
b = va(d);
c = [b + k, o(a.max, b + k)];
if (e) c[2] = this.dataMax;
c = Ja(c);
c - b < k && ((d[0] = c - k), (d[1] = o(a.min, c - k)), (b = va(d)));
}
this.min = b;
this.max = c;
},
setAxisTranslation: function (a) {
var b = this.max - this.min,
c = 0,
d,
e = 0,
f = 0,
g = this.linkedParent,
h = this.transA;
if (this.isXAxis)
g
? ((e = g.minPointOffset), (f = g.pointRangePadding))
: n(this.series, function (a) {
var g = a.pointRange,
h = a.options.pointPlacement,
l = a.closestPointRange;
g > b && (g = 0);
c = s(c, g);
e = s(e, ea(h) ? 0 : g / 2);
f = s(f, h === 'on' ? 0 : g);
!a.noSharedTooltip && u(l) && (d = u(d) ? I(d, l) : l);
}),
(g = this.ordinalSlope && d ? this.ordinalSlope / d : 1),
(this.minPointOffset = e *= g),
(this.pointRangePadding = f *= g),
(this.pointRange = I(c, b)),
(this.closestPointRange = d);
if (a) this.oldTransA = h;
this.translationSlope = this.transA = h = this.len / (b + f || 1);
this.transB = this.horiz ? this.left : this.bottom;
this.minPixelPadding = h * e;
},
setTickPositions: function (a) {
var b = this,
c = b.chart,
d = b.options,
e = b.isLog,
f = b.isDatetimeAxis,
g = b.isXAxis,
h = b.isLinked,
i = b.options.tickPositioner,
j = d.maxPadding,
k = d.minPadding,
l = d.tickInterval,
m = d.minTickInterval,
p = d.tickPixelInterval,
q,
ba = b.categories;
h
? ((b.linkedParent = c[g ? 'xAxis' : 'yAxis'][d.linkedTo]),
(c = b.linkedParent.getExtremes()),
(b.min = o(c.min, c.dataMin)),
(b.max = o(c.max, c.dataMax)),
d.type !== b.linkedParent.options.type && ka(11, 1))
: ((b.min = o(b.userMin, d.min, b.dataMin)), (b.max = o(b.userMax, d.max, b.dataMax)));
if (e)
!a && I(b.min, o(b.dataMin, b.min)) <= 0 && ka(10, 1),
(b.min = ia(na(b.min))),
(b.max = ia(na(b.max)));
if (b.range && ((b.userMin = b.min = s(b.min, b.max - b.range)), (b.userMax = b.max), a))
b.range = null;
b.beforePadding && b.beforePadding();
b.adjustForMinRange();
if (!ba && !b.usePercentage && !h && u(b.min) && u(b.max) && (c = b.max - b.min)) {
if (!u(d.min) && !u(b.userMin) && k && (b.dataMin < 0 || !b.ignoreMinPadding))
b.min -= c * k;
if (!u(d.max) && !u(b.userMax) && j && (b.dataMax > 0 || !b.ignoreMaxPadding))
b.max += c * j;
}
b.min === b.max || b.min === void 0 || b.max === void 0
? (b.tickInterval = 1)
: h && !l && p === b.linkedParent.options.tickPixelInterval
? (b.tickInterval = b.linkedParent.tickInterval)
: ((b.tickInterval = o(l, ba ? 1 : ((b.max - b.min) * p) / s(b.len, p))),
!u(l) && b.len < p && !this.isRadial && ((q = !0), (b.tickInterval /= 4)));
g &&
!a &&
n(b.series, function (a) {
a.processData(b.min !== b.oldMin || b.max !== b.oldMax);
});
b.setAxisTranslation(!0);
b.beforeSetTickPositions && b.beforeSetTickPositions();
if (b.postProcessTickInterval) b.tickInterval = b.postProcessTickInterval(b.tickInterval);
if (b.pointRange) b.tickInterval = s(b.pointRange, b.tickInterval);
if (!l && b.tickInterval < m) b.tickInterval = m;
if (!f && !e && !l) b.tickInterval = ob(b.tickInterval, null, nb(b.tickInterval), d);
b.minorTickInterval =
d.minorTickInterval === 'auto' && b.tickInterval ? b.tickInterval / 5 : d.minorTickInterval;
b.tickPositions = a = d.tickPositions
? [].concat(d.tickPositions)
: i && i.apply(b, [b.min, b.max]);
if (!a)
!b.ordinalPositions && (b.max - b.min) / b.tickInterval > s(2 * b.len, 200) && ka(19, !0),
(a = f
? (b.getNonLinearTimeTicks || Eb)(
Cb(b.tickInterval, d.units),
b.min,
b.max,
d.startOfWeek,
b.ordinalPositions,
b.closestPointRange,
!0,
)
: e
? b.getLogTickPositions(b.tickInterval, b.min, b.max)
: b.getLinearTickPositions(b.tickInterval, b.min, b.max)),
q && a.splice(1, a.length - 2),
(b.tickPositions = a);
if (!h)
(e = a[0]),
(f = a[a.length - 1]),
(h = b.minPointOffset || 0),
d.startOnTick ? (b.min = e) : b.min - h > e && a.shift(),
d.endOnTick ? (b.max = f) : b.max + h < f && a.pop(),
a.length === 1 && ((b.min -= 0.001), (b.max += 0.001));
},
setMaxTicks: function () {
var a = this.chart,
b = a.maxTicks || {},
c = this.tickPositions,
d = (this._maxTicksKey = [this.xOrY, this.pos, this.len].join('-'));
if (
!this.isLinked &&
!this.isDatetimeAxis &&
c &&
c.length > (b[d] || 0) &&
this.options.alignTicks !== !1
)
b[d] = c.length;
a.maxTicks = b;
},
adjustTickAmount: function () {
var a = this._maxTicksKey,
b = this.tickPositions,
c = this.chart.maxTicks;
if (
c &&
c[a] &&
!this.isDatetimeAxis &&
!this.categories &&
!this.isLinked &&
this.options.alignTicks !== !1
) {
var d = this.tickAmount,
e = b.length;
this.tickAmount = a = c[a];
if (e < a) {
for (; b.length < a; ) b.push(ia(b[b.length - 1] + this.tickInterval));
this.transA *= (e - 1) / (a - 1);
this.max = b[b.length - 1];
}
if (u(d) && a !== d) this.isDirty = !0;
}
},
setScale: function () {
var a = this.stacks,
b,
c,
d,
e;
this.oldMin = this.min;
this.oldMax = this.max;
this.oldAxisLength = this.len;
this.setAxisSize();
e = this.len !== this.oldAxisLength;
n(this.series, function (a) {
if (a.isDirtyData || a.isDirty || a.xAxis.isDirty) d = !0;
});
if (
e ||
d ||
this.isLinked ||
this.forceRedraw ||
this.userMin !== this.oldUserMin ||
this.userMax !== this.oldUserMax
) {
if (!this.isXAxis) for (b in a) delete a[b];
this.forceRedraw = !1;
this.getSeriesExtremes();
this.setTickPositions();
this.oldUserMin = this.userMin;
this.oldUserMax = this.userMax;
if (!this.isDirty) this.isDirty = e || this.min !== this.oldMin || this.max !== this.oldMax;
} else if (!this.isXAxis) {
if (this.oldStacks) a = this.stacks = this.oldStacks;
for (b in a) for (c in a[b]) a[b][c].cum = a[b][c].total;
}
this.setMaxTicks();
},
setExtremes: function (a, b, c, d, e) {
var f = this,
g = f.chart,
c = o(c, !0),
e = r(e, { min: a, max: b });
z(f, 'setExtremes', e, function () {
f.userMin = a;
f.userMax = b;
f.eventArgs = e;
f.isDirtyExtremes = !0;
c && g.redraw(d);
});
},
zoom: function (a, b) {
this.allowZoomOutside ||
(u(this.dataMin) && a <= this.dataMin && (a = w),
u(this.dataMax) && b >= this.dataMax && (b = w));
this.displayBtn = a !== w || b !== w;
this.setExtremes(a, b, !1, w, { trigger: 'zoom' });
return !0;
},
setAxisSize: function () {
var a = this.chart,
b = this.options,
c = b.offsetLeft || 0,
d = b.offsetRight || 0,
e = this.horiz,
f,
g;
this.left = g = o(b.left, a.plotLeft + c);
this.top = f = o(b.top, a.plotTop);
this.width = c = o(b.width, a.plotWidth - c + d);
this.height = b = o(b.height, a.plotHeight);
this.bottom = a.chartHeight - b - f;
this.right = a.chartWidth - c - g;
this.len = s(e ? c : b, 0);
this.pos = e ? g : f;
},
getExtremes: function () {
var a = this.isLog;
return {
min: a ? ia(fa(this.min)) : this.min,
max: a ? ia(fa(this.max)) : this.max,
dataMin: this.dataMin,
dataMax: this.dataMax,
userMin: this.userMin,
userMax: this.userMax,
};
},
getThreshold: function (a) {
var b = this.isLog,
c = b ? fa(this.min) : this.min,
b = b ? fa(this.max) : this.max;
c > a || a === null ? (a = c) : b < a && (a = b);
return this.translate(a, 0, 1, 0, 1);
},
addPlotBand: function (a) {
this.addPlotBandOrLine(a, 'plotBands');
},
addPlotLine: function (a) {
this.addPlotBandOrLine(a, 'plotLines');
},
addPlotBandOrLine: function (a, b) {
var c = new vb(this, a).render(),
d = this.userOptions;
c && (b && ((d[b] = d[b] || []), d[b].push(a)), this.plotLinesAndBands.push(c));
return c;
},
autoLabelAlign: function (a) {
a = (o(a, 0) - this.side * 90 + 720) % 360;
return a > 15 && a < 165 ? 'right' : a > 195 && a < 345 ? 'left' : 'center';
},
getOffset: function () {
var a = this,
b = a.chart,
c = b.renderer,
d = a.options,
e = a.tickPositions,
f = a.ticks,
g = a.horiz,
h = a.side,
i = b.inverted ? [1, 0, 3, 2][h] : h,
j,
k = 0,
l,
m = 0,
p = d.title,
q = d.labels,
ba = 0,
A = b.axisOffset,
L = b.clipOffset,
t = [-1, 1, 1, -1][h],
r,
v = 1,
x = o(q.maxStaggerLines, 5),
la,
E,
H,
B;
a.hasData = j = a.hasVisibleSeries || (u(a.min) && u(a.max) && !!e);
a.showAxis = b = j || o(d.showEmpty, !0);
a.staggerLines = a.horiz && q.staggerLines;
if (!a.axisGroup)
(a.gridGroup = c
.g('grid')
.attr({ zIndex: d.gridZIndex || 1 })
.add()),
(a.axisGroup = c
.g('axis')
.attr({ zIndex: d.zIndex || 2 })
.add()),
(a.labelGroup = c
.g('axis-labels')
.attr({ zIndex: q.zIndex || 7 })
.add());
if (j || a.isLinked) {
a.labelAlign = o(q.align || a.autoLabelAlign(q.rotation));
n(e, function (b) {
f[b] ? f[b].addLabel() : (f[b] = new Ma(a, b));
});
if (a.horiz && !a.staggerLines && x && !q.rotation) {
for (r = a.reversed ? [].concat(e).reverse() : e; v < x; ) {
j = [];
la = !1;
for (q = 0; q < r.length; q++)
(E = r[q]),
(H = (H = f[E].label && f[E].label.getBBox()) ? H.width : 0),
(B = q % v),
H && ((E = a.translate(E)), j[B] !== w && E < j[B] && (la = !0), (j[B] = E + H));
if (la) v++;
else break;
}
if (v > 1) a.staggerLines = v;
}
n(e, function (b) {
if (h === 0 || h === 2 || { 1: 'left', 3: 'right' }[h] === a.labelAlign)
ba = s(f[b].getLabelSize(), ba);
});
if (a.staggerLines) (ba *= a.staggerLines), (a.labelOffset = ba);
} else for (r in f) f[r].destroy(), delete f[r];
if (p && p.text && p.enabled !== !1) {
if (!a.axisTitle)
(a.axisTitle = c
.text(p.text, 0, 0, p.useHTML)
.attr({
zIndex: 7,
rotation: p.rotation || 0,
align: p.textAlign || { low: 'left', middle: 'center', high: 'right' }[p.align],
})
.css(p.style)
.add(a.axisGroup)),
(a.axisTitle.isNew = !0);
if (b)
(k = a.axisTitle.getBBox()[g ? 'height' : 'width']),
(m = o(p.margin, g ? 5 : 10)),
(l = p.offset);
a.axisTitle[b ? 'show' : 'hide']();
}
a.offset = t * o(d.offset, A[h]);
a.axisTitleMargin = o(l, ba + m + (h !== 2 && ba && t * d.labels[g ? 'y' : 'x']));
A[h] = s(A[h], a.axisTitleMargin + k + t * a.offset);
L[i] = s(L[i], P(d.lineWidth / 2) * 2);
},
getLinePath: function (a) {
var b = this.chart,
c = this.opposite,
d = this.offset,
e = this.horiz,
f = this.left + (c ? this.width : 0) + d,
d = b.chartHeight - this.bottom - (c ? this.height : 0) + d;
c && (a *= -1);
return b.renderer.crispLine(
[
'M',
e ? this.left : f,
e ? d : this.top,
'L',
e ? b.chartWidth - this.right : f,
e ? d : b.chartHeight - this.bottom,
],
a,
);
},
getTitlePosition: function () {
var a = this.horiz,
b = this.left,
c = this.top,
d = this.len,
e = this.options.title,
f = a ? b : c,
g = this.opposite,
h = this.offset,
i = C(e.style.fontSize || 12),
d = { low: f + (a ? 0 : d), middle: f + d / 2, high: f + (a ? d : 0) }[e.align],
b =
(a ? c + this.height : b) +
(a ? 1 : -1) * (g ? -1 : 1) * this.axisTitleMargin +
(this.side === 2 ? i : 0);
return {
x: a ? d : b + (g ? this.width : 0) + h + (e.x || 0),
y: a ? b - (g ? this.height : 0) + h : d + (e.y || 0),
};
},
render: function () {
var a = this,
b = a.chart,
c = b.renderer,
d = a.options,
e = a.isLog,
f = a.isLinked,
g = a.tickPositions,
h = a.axisTitle,
i = a.stacks,
j = a.ticks,
k = a.minorTicks,
l = a.alternateBands,
m = d.stackLabels,
p = d.alternateGridColor,
q = a.tickmarkOffset,
o = d.lineWidth,
A,
s = b.hasRendered && u(a.oldMin) && !isNaN(a.oldMin);
A = a.hasData;
var t = a.showAxis,
r,
v;
n([j, k, l], function (a) {
for (var b in a) a[b].isActive = !1;
});
if (A || f)
if (
(a.minorTickInterval &&
!a.categories &&
n(a.getMinorTickPositions(), function (b) {
k[b] || (k[b] = new Ma(a, b, 'minor'));
s && k[b].isNew && k[b].render(null, !0);
k[b].render(null, !1, 1);
}),
g.length &&
(n(g.slice(1).concat([g[0]]), function (b, c) {
c = c === g.length - 1 ? 0 : c + 1;
if (!f || (b >= a.min && b <= a.max))
j[b] || (j[b] = new Ma(a, b)),
s && j[b].isNew && j[b].render(c, !0),
j[b].render(c, !1, 1);
}),
q && a.min === 0 && (j[-1] || (j[-1] = new Ma(a, -1, null, !0)), j[-1].render(-1))),
p &&
n(g, function (b, c) {
if (c % 2 === 0 && b < a.max)
l[b] || (l[b] = new vb(a)),
(r = b + q),
(v = g[c + 1] !== w ? g[c + 1] + q : a.max),
(l[b].options = { from: e ? fa(r) : r, to: e ? fa(v) : v, color: p }),
l[b].render(),
(l[b].isActive = !0);
}),
!a._addedPlotLB)
)
n((d.plotLines || []).concat(d.plotBands || []), function (b) {
a.addPlotBandOrLine(b);
}),
(a._addedPlotLB = !0);
n([j, k, l], function (a) {
var c,
d,
e = [],
f = Fa ? Fa.duration || 500 : 0,
g = function () {
for (d = e.length; d--; )
a[e[d]] && !a[e[d]].isActive && (a[e[d]].destroy(), delete a[e[d]]);
};
for (c in a) if (!a[c].isActive) a[c].render(c, !1, 0), (a[c].isActive = !1), e.push(c);
a === l || !b.hasRendered || !f ? g() : f && setTimeout(g, f);
});
if (o)
(A = a.getLinePath(o)),
a.axisLine
? a.axisLine.animate({ d: A })
: (a.axisLine = c
.path(A)
.attr({ stroke: d.lineColor, 'stroke-width': o, zIndex: 7 })
.add(a.axisGroup)),
a.axisLine[t ? 'show' : 'hide']();
if (h && t) h[h.isNew ? 'attr' : 'animate'](a.getTitlePosition()), (h.isNew = !1);
if (m && m.enabled) {
var x,
la,
d = a.stackTotalGroup;
if (!d)
a.stackTotalGroup = d = c
.g('stack-labels')
.attr({ visibility: 'visible', zIndex: 6 })
.add();
d.translate(b.plotLeft, b.plotTop);
for (x in i) for (la in ((c = i[x]), c)) c[la].render(d);
}
a.isDirty = !1;
},
removePlotBandOrLine: function (a) {
for (
var b = this.plotLinesAndBands, c = this.options, d = this.userOptions, e = b.length;
e--;
)
b[e].id === a && b[e].destroy();
n([c.plotLines || [], d.plotLines || [], c.plotBands || [], d.plotBands || []], function (b) {
for (e = b.length; e--; ) b[e].id === a && ga(b, b[e]);
});
},
setTitle: function (a, b) {
this.update({ title: a }, b);
},
redraw: function () {
var a = this.chart.pointer;
a.reset && a.reset(!0);
this.render();
n(this.plotLinesAndBands, function (a) {
a.render();
});
n(this.series, function (a) {
a.isDirty = !0;
});
},
buildStacks: function () {
var a = this.series,
b = a.length;
if (!this.isXAxis) {
for (; b--; ) a[b].setStackedPoints();
if (this.usePercentage) for (b = 0; b < a.length; b++) a[b].setPercentStacks();
}
},
setCategories: function (a, b) {
this.update({ categories: a }, b);
},
destroy: function (a) {
var b = this,
c = b.stacks,
d,
e = b.plotLinesAndBands;
a || aa(b);
for (d in c) Ka(c[d]), (c[d] = null);
n([b.ticks, b.minorTicks, b.alternateBands], function (a) {
Ka(a);
});
for (a = e.length; a--; ) e[a].destroy();
n(
'stackTotalGroup,axisLine,axisGroup,gridGroup,labelGroup,axisTitle'.split(','),
function (a) {
b[a] && (b[a] = b[a].destroy());
},
);
},
};
wb.prototype = {
init: function (a, b) {
var c = b.borderWidth,
d = b.style,
e = C(d.padding);
this.chart = a;
this.options = b;
this.crosshairs = [];
this.now = { x: 0, y: 0 };
this.isHidden = !0;
this.label = a.renderer
.label('', 0, 0, b.shape, null, null, b.useHTML, null, 'tooltip')
.attr({
padding: e,
fill: b.backgroundColor,
'stroke-width': c,
r: b.borderRadius,
zIndex: 8,
})
.css(d)
.css({ padding: 0 })
.add()
.attr({ y: -999 });
$ || this.label.shadow(b.shadow);
this.shared = b.shared;
},
destroy: function () {
n(this.crosshairs, function (a) {
a && a.destroy();
});
if (this.label) this.label = this.label.destroy();
clearTimeout(this.hideTimer);
clearTimeout(this.tooltipTimeout);
},
move: function (a, b, c, d) {
var e = this,
f = e.now,
g = e.options.animation !== !1 && !e.isHidden;
r(f, {
x: g ? (2 * f.x + a) / 3 : a,
y: g ? (f.y + b) / 2 : b,
anchorX: g ? (2 * f.anchorX + c) / 3 : c,
anchorY: g ? (f.anchorY + d) / 2 : d,
});
e.label.attr(f);
if (g && (N(a - f.x) > 1 || N(b - f.y) > 1))
clearTimeout(this.tooltipTimeout),
(this.tooltipTimeout = setTimeout(function () {
e && e.move(a, b, c, d);
}, 32));
},
hide: function () {
var a = this,
b;
clearTimeout(this.hideTimer);
if (!this.isHidden)
(b = this.chart.hoverPoints),
(this.hideTimer = setTimeout(function () {
a.label.fadeOut();
a.isHidden = !0;
}, o(this.options.hideDelay, 500))),
b &&
n(b, function (a) {
a.setState();
}),
(this.chart.hoverPoints = null);
},
hideCrosshairs: function () {
n(this.crosshairs, function (a) {
a && a.hide();
});
},
getAnchor: function (a, b) {
var c,
d = this.chart,
e = d.inverted,
f = d.plotTop,
g = 0,
h = 0,
i,
a = ja(a);
c = a[0].tooltipPos;
this.followPointer &&
b &&
(b.chartX === w && (b = d.pointer.normalize(b)),
(c = [b.chartX - d.plotLeft, b.chartY - f]));
c ||
(n(a, function (a) {
i = a.series.yAxis;
g += a.plotX;
h += (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) + (!e && i ? i.top - f : 0);
}),
(g /= a.length),
(h /= a.length),
(c = [
e ? d.plotWidth - h : g,
this.shared && !e && a.length > 1 && b ? b.chartY - f : e ? d.plotHeight - g : h,
]));
return Na(c, t);
},
getPosition: function (a, b, c) {
var d = this.chart,
e = d.plotLeft,
f = d.plotTop,
g = d.plotWidth,
h = d.plotHeight,
i = o(this.options.distance, 12),
j = c.plotX,
c = c.plotY,
d = j + e + (d.inverted ? i : -a - i),
k = c - b + f + 15,
l;
d < 7 && (d = e + s(j, 0) + i);
d + a > e + g && ((d -= d + a - (e + g)), (k = c - b + f - i), (l = !0));
k < f + 5 && ((k = f + 5), l && c >= k && c <= k + b && (k = c + f + i));
k + b > f + h && (k = s(f, f + h - b - i));
return { x: d, y: k };
},
defaultFormatter: function (a) {
var b = this.points || ja(this),
c = b[0].series,
d;
d = [c.tooltipHeaderFormatter(b[0])];
n(b, function (a) {
c = a.series;
d.push(
(c.tooltipFormatter && c.tooltipFormatter(a)) ||
a.point.tooltipFormatter(c.tooltipOptions.pointFormat),
);
});
d.push(a.options.footerFormat || '');
return d.join('');
},
refresh: function (a, b) {
var c = this.chart,
d = this.label,
e = this.options,
f,
g,
h = {},
i,
j = [];
i = e.formatter || this.defaultFormatter;
var h = c.hoverPoints,
k,
l = e.crosshairs,
m = this.shared;
clearTimeout(this.hideTimer);
this.followPointer = ja(a)[0].series.tooltipOptions.followPointer;
g = this.getAnchor(a, b);
f = g[0];
g = g[1];
m && (!a.series || !a.series.noSharedTooltip)
? ((c.hoverPoints = a),
h &&
n(h, function (a) {
a.setState();
}),
n(a, function (a) {
a.setState('hover');
j.push(a.getLabelConfig());
}),
(h = { x: a[0].category, y: a[0].y }),
(h.points = j),
(a = a[0]))
: (h = a.getLabelConfig());
i = i.call(h, this);
h = a.series;
i === !1
? this.hide()
: (this.isHidden && (Wa(d), d.attr('opacity', 1).show()),
d.attr({ text: i }),
(k = e.borderColor || a.color || h.color || '#606060'),
d.attr({ stroke: k }),
this.updatePosition({ plotX: f, plotY: g }),
(this.isHidden = !1));
if (l) {
l = ja(l);
for (d = l.length; d--; )
if (((m = a.series), (e = m[d ? 'yAxis' : 'xAxis']), l[d] && e))
if (
((h = d ? o(a.stackY, a.y) : a.x),
e.isLog && (h = na(h)),
d === 1 && m.modifyValue && (h = m.modifyValue(h)),
(e = e.getPlotLinePath(h, 1)),
this.crosshairs[d])
)
this.crosshairs[d].attr({ d: e, visibility: 'visible' });
else {
h = {
'stroke-width': l[d].width || 1,
stroke: l[d].color || '#C0C0C0',
zIndex: l[d].zIndex || 2,
};
if (l[d].dashStyle) h.dashstyle = l[d].dashStyle;
this.crosshairs[d] = c.renderer.path(e).attr(h).add();
}
}
z(c, 'tooltipRefresh', { text: i, x: f + c.plotLeft, y: g + c.plotTop, borderColor: k });
},
updatePosition: function (a) {
var b = this.chart,
c = this.label,
c = (this.options.positioner || this.getPosition).call(this, c.width, c.height, a);
this.move(t(c.x), t(c.y), a.plotX + b.plotLeft, a.plotY + b.plotTop);
},
};
xb.prototype = {
init: function (a, b) {
var c = b.chart,
d = c.events,
e = $ ? '' : c.zoomType,
c = a.inverted,
f;
this.options = b;
this.chart = a;
this.zoomX = f = /x/.test(e);
this.zoomY = e = /y/.test(e);
this.zoomHor = (f && !c) || (e && c);
this.zoomVert = (e && !c) || (f && c);
this.runChartClick = d && !!d.click;
this.pinchDown = [];
this.lastValidTouch = {};
if (b.tooltip.enabled) a.tooltip = new wb(a, b.tooltip);
this.setDOMEvents();
},
normalize: function (a, b) {
var c,
d,
a = a || O.event;
if (!a.target) a.target = a.srcElement;
a = Xb(a);
d = a.touches ? a.touches.item(0) : a;
if (!b) this.chartPosition = b = Wb(this.chart.container);
d.pageX === w
? ((c = s(a.x, a.clientX - b.left)), (d = a.y))
: ((c = d.pageX - b.left), (d = d.pageY - b.top));
return r(a, { chartX: t(c), chartY: t(d) });
},
getCoordinates: function (a) {
var b = { xAxis: [], yAxis: [] };
n(this.chart.axes, function (c) {
b[c.isXAxis ? 'xAxis' : 'yAxis'].push({
axis: c,
value: c.toValue(a[c.horiz ? 'chartX' : 'chartY']),
});
});
return b;
},
getIndex: function (a) {
var b = this.chart;
return b.inverted ? b.plotHeight + b.plotTop - a.chartY : a.chartX - b.plotLeft;
},
runPointActions: function (a) {
var b = this.chart,
c = b.series,
d = b.tooltip,
e,
f = b.hoverPoint,
g = b.hoverSeries,
h,
i,
j = b.chartWidth,
k = this.getIndex(a);
if (d && this.options.tooltip.shared && (!g || !g.noSharedTooltip)) {
e = [];
h = c.length;
for (i = 0; i < h; i++)
if (
c[i].visible &&
c[i].options.enableMouseTracking !== !1 &&
!c[i].noSharedTooltip &&
c[i].tooltipPoints.length &&
(b = c[i].tooltipPoints[k]) &&
b.series
)
(b._dist = N(k - b.clientX)), (j = I(j, b._dist)), e.push(b);
for (h = e.length; h--; ) e[h]._dist > j && e.splice(h, 1);
if (e.length && e[0].clientX !== this.hoverX) d.refresh(e, a), (this.hoverX = e[0].clientX);
}
if (g && g.tracker) {
if ((b = g.tooltipPoints[k]) && b !== f) b.onMouseOver(a);
} else
d &&
d.followPointer &&
!d.isHidden &&
((a = d.getAnchor([{}], a)), d.updatePosition({ plotX: a[0], plotY: a[1] }));
},
reset: function (a) {
var b = this.chart,
c = b.hoverSeries,
d = b.hoverPoint,
e = b.tooltip,
b = e && e.shared ? b.hoverPoints : d;
(a = a && e && b) && ja(b)[0].plotX === w && (a = !1);
if (a) e.refresh(b);
else {
if (d) d.onMouseOut();
if (c) c.onMouseOut();
e && (e.hide(), e.hideCrosshairs());
this.hoverX = null;
}
},
scaleGroups: function (a, b) {
var c = this.chart,
d;
n(c.series, function (e) {
d = a || e.getPlotBox();
e.xAxis &&
e.xAxis.zoomEnabled &&
(e.group.attr(d),
e.markerGroup && (e.markerGroup.attr(d), e.markerGroup.clip(b ? c.clipRect : null)),
e.dataLabelsGroup && e.dataLabelsGroup.attr(d));
});
c.clipRect.attr(b || c.clipBox);
},
pinchTranslateDirection: function (a, b, c, d, e, f, g) {
var h = this.chart,
i = a ? 'x' : 'y',
j = a ? 'X' : 'Y',
k = 'chart' + j,
l = a ? 'width' : 'height',
m = h['plot' + (a ? 'Left' : 'Top')],
p,
q,
o = 1,
n = h.inverted,
s = h.bounds[a ? 'h' : 'v'],
t = b.length === 1,
u = b[0][k],
r = c[0][k],
w = !t && b[1][k],
v = !t && c[1][k],
x,
c = function () {
!t && N(u - w) > 20 && (o = N(r - v) / N(u - w));
q = (m - r) / o + u;
p = h['plot' + (a ? 'Width' : 'Height')] / o;
};
c();
b = q;
b < s.min ? ((b = s.min), (x = !0)) : b + p > s.max && ((b = s.max - p), (x = !0));
x ? ((r -= 0.8 * (r - g[i][0])), t || (v -= 0.8 * (v - g[i][1])), c()) : (g[i] = [r, v]);
n || ((f[i] = q - m), (f[l] = p));
f = n ? 1 / o : o;
e[l] = p;
e[i] = b;
d[n ? (a ? 'scaleY' : 'scaleX') : 'scale' + j] = o;
d['translate' + j] = f * m + (r - f * u);
},
pinch: function (a) {
var b = this,
c = b.chart,
d = b.pinchDown,
e = c.tooltip && c.tooltip.options.followTouchMove,
f = a.touches,
g = f.length,
h = b.lastValidTouch,
i = b.zoomHor || b.pinchHor,
j = b.zoomVert || b.pinchVert,
k = i || j,
l = b.selectionMarker,
m = {},
p =
g === 1 &&
((b.inClass(a.target, 'highcharts-tracker') && c.runTrackerClick) || c.runChartClick),
q = {};
(k || e) && !p && a.preventDefault();
Na(f, function (a) {
return b.normalize(a);
});
if (a.type === 'touchstart')
n(f, function (a, b) {
d[b] = { chartX: a.chartX, chartY: a.chartY };
}),
(h.x = [d[0].chartX, d[1] && d[1].chartX]),
(h.y = [d[0].chartY, d[1] && d[1].chartY]),
n(c.axes, function (a) {
if (a.zoomEnabled) {
var b = c.bounds[a.horiz ? 'h' : 'v'],
d = a.minPixelPadding,
e = a.toPixels(a.dataMin),
f = a.toPixels(a.dataMax),
g = I(e, f),
e = s(e, f);
b.min = I(a.pos, g - d);
b.max = s(a.pos + a.len, e + d);
}
});
else if (d.length) {
if (!l) b.selectionMarker = l = r({ destroy: pa }, c.plotBox);
i && b.pinchTranslateDirection(!0, d, f, m, l, q, h);
j && b.pinchTranslateDirection(!1, d, f, m, l, q, h);
b.hasPinched = k;
b.scaleGroups(m, q);
!k && e && g === 1 && this.runPointActions(b.normalize(a));
}
},
dragStart: function (a) {
var b = this.chart;
b.mouseIsDown = a.type;
b.cancelClick = !1;
b.mouseDownX = this.mouseDownX = a.chartX;
b.mouseDownY = this.mouseDownY = a.chartY;
},
drag: function (a) {
var b = this.chart,
c = b.options.chart,
d = a.chartX,
e = a.chartY,
f = this.zoomHor,
g = this.zoomVert,
h = b.plotLeft,
i = b.plotTop,
j = b.plotWidth,
k = b.plotHeight,
l,
m = this.mouseDownX,
p = this.mouseDownY;
d < h ? (d = h) : d > h + j && (d = h + j);
e < i ? (e = i) : e > i + k && (e = i + k);
this.hasDragged = Math.sqrt(Math.pow(m - d, 2) + Math.pow(p - e, 2));
if (this.hasDragged > 10) {
l = b.isInsidePlot(m - h, p - i);
if (b.hasCartesianSeries && (this.zoomX || this.zoomY) && l && !this.selectionMarker)
this.selectionMarker = b.renderer
.rect(h, i, f ? 1 : j, g ? 1 : k, 0)
.attr({ fill: c.selectionMarkerFill || 'rgba(69,114,167,0.25)', zIndex: 7 })
.add();
this.selectionMarker &&
f &&
((d -= m), this.selectionMarker.attr({ width: N(d), x: (d > 0 ? 0 : d) + m }));
this.selectionMarker &&
g &&
((d = e - p), this.selectionMarker.attr({ height: N(d), y: (d > 0 ? 0 : d) + p }));
l && !this.selectionMarker && c.panning && b.pan(a, c.panning);
}
},
drop: function (a) {
var b = this.chart,
c = this.hasPinched;
if (this.selectionMarker) {
var d = { xAxis: [], yAxis: [], originalEvent: a.originalEvent || a },
e = this.selectionMarker,
f = e.x,
g = e.y,
h;
if (this.hasDragged || c)
n(b.axes, function (a) {
if (a.zoomEnabled) {
var b = a.horiz,
c = a.toValue(b ? f : g),
b = a.toValue(b ? f + e.width : g + e.height);
!isNaN(c) &&
!isNaN(b) &&
(d[a.xOrY + 'Axis'].push({ axis: a, min: I(c, b), max: s(c, b) }), (h = !0));
}
}),
h &&
z(b, 'selection', d, function (a) {
b.zoom(r(a, c ? { animation: !1 } : null));
});
this.selectionMarker = this.selectionMarker.destroy();
c && this.scaleGroups();
}
if (b)
K(b.container, { cursor: b._cursor }),
(b.cancelClick = this.hasDragged > 10),
(b.mouseIsDown = this.hasDragged = this.hasPinched = !1),
(this.pinchDown = []);
},
onContainerMouseDown: function (a) {
a = this.normalize(a);
a.preventDefault && a.preventDefault();
this.dragStart(a);
},
onDocumentMouseUp: function (a) {
this.drop(a);
},
onDocumentMouseMove: function (a) {
var b = this.chart,
c = this.chartPosition,
d = b.hoverSeries,
a = this.normalize(a, c);
c &&
d &&
!this.inClass(a.target, 'highcharts-tracker') &&
!b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) &&
this.reset();
},
onContainerMouseLeave: function () {
this.reset();
this.chartPosition = null;
},
onContainerMouseMove: function (a) {
var b = this.chart,
a = this.normalize(a);
a.returnValue = !1;
b.mouseIsDown === 'mousedown' && this.drag(a);
(this.inClass(a.target, 'highcharts-tracker') ||
b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop)) &&
!b.openMenu &&
this.runPointActions(a);
},
inClass: function (a, b) {
for (var c; a; ) {
if ((c = v(a, 'class')))
if (c.indexOf(b) !== -1) return !0;
else if (c.indexOf('highcharts-container') !== -1) return !1;
a = a.parentNode;
}
},
onTrackerMouseOut: function (a) {
var b = this.chart.hoverSeries;
if (
b &&
!b.options.stickyTracking &&
!this.inClass(a.toElement || a.relatedTarget, 'highcharts-tooltip')
)
b.onMouseOut();
},
onContainerClick: function (a) {
var b = this.chart,
c = b.hoverPoint,
d = b.plotLeft,
e = b.plotTop,
f = b.inverted,
g,
h,
i,
a = this.normalize(a);
a.cancelBubble = !0;
if (!b.cancelClick)
c && this.inClass(a.target, 'highcharts-tracker')
? ((g = this.chartPosition),
(h = c.plotX),
(i = c.plotY),
r(c, {
pageX: g.left + d + (f ? b.plotWidth - i : h),
pageY: g.top + e + (f ? b.plotHeight - h : i),
}),
z(c.series, 'click', r(a, { point: c })),
b.hoverPoint && c.firePointEvent('click', a))
: (r(a, this.getCoordinates(a)),
b.isInsidePlot(a.chartX - d, a.chartY - e) && z(b, 'click', a));
},
onContainerTouchStart: function (a) {
var b = this.chart;
a.touches.length === 1
? ((a = this.normalize(a)),
b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop)
? (this.runPointActions(a), this.pinch(a))
: this.reset())
: a.touches.length === 2 && this.pinch(a);
},
onContainerTouchMove: function (a) {
(a.touches.length === 1 || a.touches.length === 2) && this.pinch(a);
},
onDocumentTouchEnd: function (a) {
this.drop(a);
},
setDOMEvents: function () {
var a = this,
b = a.chart.container,
c;
this._events = c = [
[b, 'onmousedown', 'onContainerMouseDown'],
[b, 'onmousemove', 'onContainerMouseMove'],
[b, 'onclick', 'onContainerClick'],
[b, 'mouseleave', 'onContainerMouseLeave'],
[y, 'mousemove', 'onDocumentMouseMove'],
[y, 'mouseup', 'onDocumentMouseUp'],
];
ib &&
c.push(
[b, 'ontouchstart', 'onContainerTouchStart'],
[b, 'ontouchmove', 'onContainerTouchMove'],
[y, 'touchend', 'onDocumentTouchEnd'],
);
n(c, function (b) {
a['_' + b[2]] = function (c) {
a[b[2]](c);
};
b[1].indexOf('on') === 0 ? (b[0][b[1]] = a['_' + b[2]]) : J(b[0], b[1], a['_' + b[2]]);
});
},
destroy: function () {
var a = this;
n(a._events, function (b) {
b[1].indexOf('on') === 0 ? (b[0][b[1]] = null) : aa(b[0], b[1], a['_' + b[2]]);
});
delete a._events;
clearInterval(a.tooltipTimeout);
},
};
eb.prototype = {
init: function (a, b) {
var c = this,
d = b.itemStyle,
e = o(b.padding, 8),
f = b.itemMarginTop || 0;
this.options = b;
if (b.enabled)
(c.baseline = C(d.fontSize) + 3 + f),
(c.itemStyle = d),
(c.itemHiddenStyle = x(d, b.itemHiddenStyle)),
(c.itemMarginTop = f),
(c.padding = e),
(c.initialItemX = e),
(c.initialItemY = e - 5),
(c.maxItemWidth = 0),
(c.chart = a),
(c.itemHeight = 0),
(c.lastLineHeight = 0),
c.render(),
J(c.chart, 'endResize', function () {
c.positionCheckboxes();
});
},
colorizeItem: function (a, b) {
var c = this.options,
d = a.legendItem,
e = a.legendLine,
f = a.legendSymbol,
g = this.itemHiddenStyle.color,
c = b ? c.itemStyle.color : g,
h = b ? a.color : g,
g = a.options && a.options.marker,
i = { stroke: h, fill: h },
j;
d && d.css({ fill: c, color: c });
e && e.attr({ stroke: h });
if (f) {
if (g && f.isMarker)
for (j in ((g = a.convertAttribs(g)), g)) (d = g[j]), d !== w && (i[j] = d);
f.attr(i);
}
},
positionItem: function (a) {
var b = this.options,
c = b.symbolPadding,
b = !b.rtl,
d = a._legendItemPos,
e = d[0],
d = d[1],
f = a.checkbox;
a.legendGroup && a.legendGroup.translate(b ? e : this.legendWidth - e - 2 * c - 4, d);
if (f) (f.x = e), (f.y = d);
},
destroyItem: function (a) {
var b = a.checkbox;
n(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function (b) {
a[b] && (a[b] = a[b].destroy());
});
b && Ta(a.checkbox);
},
destroy: function () {
var a = this.group,
b = this.box;
if (b) this.box = b.destroy();
if (a) this.group = a.destroy();
},
positionCheckboxes: function (a) {
var b = this.group.alignAttr,
c,
d = this.clipHeight || this.legendHeight;
if (b)
(c = b.translateY),
n(this.allItems, function (e) {
var f = e.checkbox,
g;
f &&
((g = c + f.y + (a || 0) + 3),
K(f, {
left: b.translateX + e.legendItemWidth + f.x - 20 + 'px',
top: g + 'px',
display: g > c - 6 && g < c + d - 6 ? '' : S,
}));
});
},
renderTitle: function () {
var a = this.padding,
b = this.options.title,
c = 0;
if (b.text) {
if (!this.title)
this.title = this.chart.renderer
.label(b.text, a - 3, a - 4, null, null, null, null, null, 'legend-title')
.attr({ zIndex: 1 })
.css(b.style)
.add(this.group);
a = this.title.getBBox();
c = a.height;
this.offsetWidth = a.width;
this.contentGroup.attr({ translateY: c });
}
this.titleHeight = c;
},
renderItem: function (a) {
var B;
var b = this,
c = b.chart,
d = c.renderer,
e = b.options,
f = e.layout === 'horizontal',
g = e.symbolWidth,
h = e.symbolPadding,
i = b.itemStyle,
j = b.itemHiddenStyle,
k = b.padding,
l = f ? o(e.itemDistance, 8) : 0,
m = !e.rtl,
p = e.width,
q = e.itemMarginBottom || 0,
n = b.itemMarginTop,
A = b.initialItemX,
t = a.legendItem,
u = a.series || a,
r = u.options,
w = r.showCheckbox,
v = e.useHTML;
if (
!t &&
((a.legendGroup = d.g('legend-item').attr({ zIndex: 1 }).add(b.scrollGroup)),
u.drawLegendSymbol(b, a),
(a.legendItem = t =
d
.text(
e.labelFormat ? Ca(e.labelFormat, a) : e.labelFormatter.call(a),
m ? g + h : -h,
b.baseline,
v,
)
.css(x(a.visible ? i : j))
.attr({ align: m ? 'left' : 'right', zIndex: 2 })
.add(a.legendGroup)),
(v ? t : a.legendGroup)
.on('mouseover', function () {
a.setState('hover');
t.css(b.options.itemHoverStyle);
})
.on('mouseout', function () {
t.css(a.visible ? i : j);
a.setState();
})
.on('click', function (b) {
var c = function () {
a.setVisible();
},
b = { browserEvent: b };
a.firePointEvent
? a.firePointEvent('legendItemClick', b, c)
: z(a, 'legendItemClick', b, c);
}),
b.colorizeItem(a, a.visible),
r && w)
)
(a.checkbox = U(
'input',
{ type: 'checkbox', checked: a.selected, defaultChecked: a.selected },
e.itemCheckboxStyle,
c.container,
)),
J(a.checkbox, 'click', function (b) {
z(a, 'checkboxClick', { checked: b.target.checked }, function () {
a.select();
});
});
d = t.getBBox();
(B = a.legendItemWidth = e.itemWidth || g + h + d.width + l + (w ? 20 : 0)), (e = B);
b.itemHeight = g = d.height;
if (f && b.itemX - A + e > (p || c.chartWidth - 2 * k - A))
(b.itemX = A), (b.itemY += n + b.lastLineHeight + q), (b.lastLineHeight = 0);
b.maxItemWidth = s(b.maxItemWidth, e);
b.lastItemY = n + b.itemY + q;
b.lastLineHeight = s(g, b.lastLineHeight);
a._legendItemPos = [b.itemX, b.itemY];
f ? (b.itemX += e) : ((b.itemY += n + g + q), (b.lastLineHeight = g));
b.offsetWidth = p || s((f ? b.itemX - A - l : e) + k, b.offsetWidth);
},
render: function () {
var a = this,
b = a.chart,
c = b.renderer,
d = a.group,
e,
f,
g,
h,
i = a.box,
j = a.options,
k = a.padding,
l = j.borderWidth,
m = j.backgroundColor;
a.itemX = a.initialItemX;
a.itemY = a.initialItemY;
a.offsetWidth = 0;
a.lastItemY = 0;
if (!d)
(a.group = d = c.g('legend').attr({ zIndex: 7 }).add()),
(a.contentGroup = c.g().attr({ zIndex: 1 }).add(d)),
(a.scrollGroup = c.g().add(a.contentGroup));
a.renderTitle();
e = [];
n(b.series, function (a) {
var b = a.options;
b.showInLegend &&
!u(b.linkedTo) &&
(e = e.concat(a.legendItems || (b.legendType === 'point' ? a.data : a)));
});
Kb(e, function (a, b) {
return (
((a.options && a.options.legendIndex) || 0) - ((b.options && b.options.legendIndex) || 0)
);
});
j.reversed && e.reverse();
a.allItems = e;
a.display = f = !!e.length;
n(e, function (b) {
a.renderItem(b);
});
g = j.width || a.offsetWidth;
h = a.lastItemY + a.lastLineHeight + a.titleHeight;
h = a.handleOverflow(h);
if (l || m) {
g += k;
h += k;
if (i) {
if (g > 0 && h > 0)
i[i.isNew ? 'attr' : 'animate'](i.crisp(null, null, null, g, h)), (i.isNew = !1);
} else
(a.box = i =
c
.rect(0, 0, g, h, j.borderRadius, l || 0)
.attr({ stroke: j.borderColor, 'stroke-width': l || 0, fill: m || S })
.add(d)
.shadow(j.shadow)),
(i.isNew = !0);
i[f ? 'show' : 'hide']();
}
a.legendWidth = g;
a.legendHeight = h;
n(e, function (b) {
a.positionItem(b);
});
f && d.align(r({ width: g, height: h }, j), !0, 'spacingBox');
b.isResizing || this.positionCheckboxes();
},
handleOverflow: function (a) {
var b = this,
c = this.chart,
d = c.renderer,
e = this.options,
f = e.y,
f = c.spacingBox.height + (e.verticalAlign === 'top' ? -f : f) - this.padding,
g = e.maxHeight,
h = this.clipRect,
i = e.navigation,
j = o(i.animation, !0),
k = i.arrowSize || 12,
l = this.nav;
e.layout === 'horizontal' && (f /= 2);
g && (f = I(f, g));
if (a > f && !e.useHTML) {
this.clipHeight = c = f - 20 - this.titleHeight;
this.pageCount = xa(a / c);
this.currentPage = o(this.currentPage, 1);
this.fullHeight = a;
if (!h) (h = b.clipRect = d.clipRect(0, 0, 9999, 0)), b.contentGroup.clip(h);
h.attr({ height: c });
if (!l)
(this.nav = l = d.g().attr({ zIndex: 1 }).add(this.group)),
(this.up = d
.symbol('triangle', 0, 0, k, k)
.on('click', function () {
b.scroll(-1, j);
})
.add(l)),
(this.pager = d.text('', 15, 10).css(i.style).add(l)),
(this.down = d
.symbol('triangle-down', 0, 0, k, k)
.on('click', function () {
b.scroll(1, j);
})
.add(l));
b.scroll(0);
a = f;
} else if (l)
h.attr({ height: c.chartHeight }),
l.hide(),
this.scrollGroup.attr({ translateY: 1 }),
(this.clipHeight = 0);
return a;
},
scroll: function (a, b) {
var c = this.pageCount,
d = this.currentPage + a,
e = this.clipHeight,
f = this.options.navigation,
g = f.activeColor,
h = f.inactiveColor,
f = this.pager,
i = this.padding;
d > c && (d = c);
if (d > 0)
b !== w && La(b, this.chart),
this.nav.attr({
translateX: i,
translateY: e + 7 + this.titleHeight,
visibility: 'visible',
}),
this.up.attr({ fill: d === 1 ? h : g }).css({ cursor: d === 1 ? 'default' : 'pointer' }),
f.attr({ text: d + '/' + this.pageCount }),
this.down
.attr({ x: 18 + this.pager.getBBox().width, fill: d === c ? h : g })
.css({ cursor: d === c ? 'default' : 'pointer' }),
(e = -I(e * (d - 1), this.fullHeight - e + i) + 1),
this.scrollGroup.animate({ translateY: e }),
f.attr({ text: d + '/' + c }),
(this.currentPage = d),
this.positionCheckboxes(e);
},
};
/Trident.*?11\.0/.test(oa) &&
mb(eb.prototype, 'positionItem', function (a, b) {
var c = this;
setTimeout(function () {
a.call(c, b);
});
});
yb.prototype = {
init: function (a, b) {
var c,
d = a.series;
a.series = null;
c = x(M, a);
c.series = a.series = d;
d = c.chart;
this.margin = this.splashArray('margin', d);
this.spacing = this.splashArray('spacing', d);
var e = d.events;
this.bounds = { h: {}, v: {} };
this.callback = b;
this.isResizing = 0;
this.options = c;
this.axes = [];
this.series = [];
this.hasCartesianSeries = d.showAxes;
var f = this,
g;
f.index = Ga.length;
Ga.push(f);
d.reflow !== !1 &&
J(f, 'load', function () {
f.initReflow();
});
if (e) for (g in e) J(f, g, e[g]);
f.xAxis = [];
f.yAxis = [];
f.animation = $ ? !1 : o(d.animation, !0);
f.pointCount = 0;
f.counters = new Jb();
f.firstRender();
},
initSeries: function (a) {
var b = this.options.chart;
(b = W[a.type || b.type || b.defaultSeriesType]) || ka(17, !0);
b = new b();
b.init(this, a);
return b;
},
addSeries: function (a, b, c) {
var d,
e = this;
a &&
((b = o(b, !0)),
z(e, 'addSeries', { options: a }, function () {
d = e.initSeries(a);
e.isDirtyLegend = !0;
e.linkSeries();
b && e.redraw(c);
}));
return d;
},
addAxis: function (a, b, c, d) {
var e = b ? 'xAxis' : 'yAxis',
f = this.options;
new db(this, x(a, { index: this[e].length, isX: b }));
f[e] = ja(f[e] || {});
f[e].push(a);
o(c, !0) && this.redraw(d);
},
isInsidePlot: function (a, b, c) {
var d = c ? b : a,
a = c ? a : b;
return d >= 0 && d <= this.plotWidth && a >= 0 && a <= this.plotHeight;
},
adjustTickAmounts: function () {
this.options.chart.alignTicks !== !1 &&
n(this.axes, function (a) {
a.adjustTickAmount();
});
this.maxTicks = null;
},
redraw: function (a) {
var b = this.axes,
c = this.series,
d = this.pointer,
e = this.legend,
f = this.isDirtyLegend,
g,
h,
i = this.isDirtyBox,
j = c.length,
k = j,
l = this.renderer,
m = l.isHidden(),
p = [];
La(a, this);
m && this.cloneRenderTo();
for (this.layOutTitles(); k--; )
if (((a = c[k]), a.options.stacking && ((g = !0), a.isDirty))) {
h = !0;
break;
}
if (h) for (k = j; k--; ) if (((a = c[k]), a.options.stacking)) a.isDirty = !0;
n(c, function (a) {
a.isDirty && a.options.legendType === 'point' && (f = !0);
});
if (f && e.options.enabled) e.render(), (this.isDirtyLegend = !1);
g && this.getStacks();
if (this.hasCartesianSeries) {
if (!this.isResizing)
(this.maxTicks = null),
n(b, function (a) {
a.setScale();
});
this.adjustTickAmounts();
this.getMargins();
n(b, function (a) {
a.isDirty && (i = !0);
});
n(b, function (a) {
if (a.isDirtyExtremes)
(a.isDirtyExtremes = !1),
p.push(function () {
z(a, 'afterSetExtremes', r(a.eventArgs, a.getExtremes()));
delete a.eventArgs;
});
(i || g) && a.redraw();
});
}
i && this.drawChartBox();
n(c, function (a) {
a.isDirty && a.visible && (!a.isCartesian || a.xAxis) && a.redraw();
});
d && d.reset && d.reset(!0);
l.draw();
z(this, 'redraw');
m && this.cloneRenderTo(!0);
n(p, function (a) {
a.call();
});
},
showLoading: function (a) {
var b = this.options,
c = this.loadingDiv,
d = b.loading;
if (!c)
(this.loadingDiv = c =
U(
Ea,
{ className: 'highcharts-loading' },
r(d.style, { zIndex: 10, display: S }),
this.container,
)),
(this.loadingSpan = U('span', null, d.labelStyle, c));
this.loadingSpan.innerHTML = a || b.lang.loading;
if (!this.loadingShown)
K(c, {
opacity: 0,
display: '',
left: this.plotLeft + 'px',
top: this.plotTop + 'px',
width: this.plotWidth + 'px',
height: this.plotHeight + 'px',
}),
Bb(c, { opacity: d.style.opacity }, { duration: d.showDuration || 0 }),
(this.loadingShown = !0);
},
hideLoading: function () {
var a = this.options,
b = this.loadingDiv;
b &&
Bb(
b,
{ opacity: 0 },
{
duration: a.loading.hideDuration || 100,
complete: function () {
K(b, { display: S });
},
},
);
this.loadingShown = !1;
},
get: function (a) {
var b = this.axes,
c = this.series,
d,
e;
for (d = 0; d < b.length; d++) if (b[d].options.id === a) return b[d];
for (d = 0; d < c.length; d++) if (c[d].options.id === a) return c[d];
for (d = 0; d < c.length; d++) {
e = c[d].points || [];
for (b = 0; b < e.length; b++) if (e[b].id === a) return e[b];
}
return null;
},
getAxes: function () {
var a = this,
b = this.options,
c = (b.xAxis = ja(b.xAxis || {})),
b = (b.yAxis = ja(b.yAxis || {}));
n(c, function (a, b) {
a.index = b;
a.isX = !0;
});
n(b, function (a, b) {
a.index = b;
});
c = c.concat(b);
n(c, function (b) {
new db(a, b);
});
a.adjustTickAmounts();
},
getSelectedPoints: function () {
var a = [];
n(this.series, function (b) {
a = a.concat(
ub(b.points || [], function (a) {
return a.selected;
}),
);
});
return a;
},
getSelectedSeries: function () {
return ub(this.series, function (a) {
return a.selected;
});
},
getStacks: function () {
var a = this;
n(a.yAxis, function (a) {
if (a.stacks && a.hasVisibleSeries) a.oldStacks = a.stacks;
});
n(a.series, function (b) {
if (b.options.stacking && (b.visible === !0 || a.options.chart.ignoreHiddenSeries === !1))
b.stackKey = b.type + o(b.options.stack, '');
});
},
showResetZoom: function () {
var a = this,
b = M.lang,
c = a.options.chart.resetZoomButton,
d = c.theme,
e = d.states,
f = c.relativeTo === 'chart' ? null : 'plotBox';
this.resetZoomButton = a.renderer
.button(
b.resetZoom,
null,
null,
function () {
a.zoomOut();
},
d,
e && e.hover,
)
.attr({ align: c.position.align, title: b.resetZoomTitle })
.add()
.align(c.position, !1, f);
},
zoomOut: function () {
var a = this;
z(a, 'selection', { resetSelection: !0 }, function () {
a.zoom();
});
},
zoom: function (a) {
var b,
c = this.pointer,
d = !1,
e;
!a || a.resetSelection
? n(this.axes, function (a) {
b = a.zoom();
})
: n(a.xAxis.concat(a.yAxis), function (a) {
var e = a.axis,
h = e.isXAxis;
if (c[h ? 'zoomX' : 'zoomY'] || c[h ? 'pinchX' : 'pinchY'])
(b = e.zoom(a.min, a.max)), e.displayBtn && (d = !0);
});
e = this.resetZoomButton;
if (d && !e) this.showResetZoom();
else if (!d && T(e)) this.resetZoomButton = e.destroy();
b && this.redraw(o(this.options.chart.animation, a && a.animation, this.pointCount < 100));
},
pan: function (a, b) {
var c = this,
d = c.hoverPoints,
e;
d &&
n(d, function (a) {
a.setState();
});
n(b === 'xy' ? [1, 0] : [1], function (b) {
var d = a[b ? 'chartX' : 'chartY'],
h = c[b ? 'xAxis' : 'yAxis'][0],
i = c[b ? 'mouseDownX' : 'mouseDownY'],
j = (h.pointRange || 0) / 2,
k = h.getExtremes(),
l = h.toValue(i - d, !0) + j,
i = h.toValue(i + c[b ? 'plotWidth' : 'plotHeight'] - d, !0) - j;
h.series.length &&
l > I(k.dataMin, k.min) &&
i < s(k.dataMax, k.max) &&
(h.setExtremes(l, i, !1, !1, { trigger: 'pan' }), (e = !0));
c[b ? 'mouseDownX' : 'mouseDownY'] = d;
});
e && c.redraw(!1);
K(c.container, { cursor: 'move' });
},
setTitle: function (a, b) {
var f;
var c = this,
d = c.options,
e;
e = d.title = x(d.title, a);
(f = d.subtitle = x(d.subtitle, b)), (d = f);
n(
[
['title', a, e],
['subtitle', b, d],
],
function (a) {
var b = a[0],
d = c[b],
e = a[1],
a = a[2];
d && e && (c[b] = d = d.destroy());
a &&
a.text &&
!d &&
(c[b] = c.renderer
.text(a.text, 0, 0, a.useHTML)
.attr({ align: a.align, class: 'highcharts-' + b, zIndex: a.zIndex || 4 })
.css(a.style)
.add());
},
);
c.layOutTitles();
},
layOutTitles: function () {
var a = 0,
b = this.title,
c = this.subtitle,
d = this.options,
e = d.title,
d = d.subtitle,
f = this.spacingBox.width - 44;
if (
b &&
(b.css({ width: (e.width || f) + 'px' }).align(r({ y: 15 }, e), !1, 'spacingBox'),
!e.floating && !e.verticalAlign)
)
(a = b.getBBox().height), a >= 18 && a <= 25 && (a = 15);
c &&
(c.css({ width: (d.width || f) + 'px' }).align(r({ y: a + e.margin }, d), !1, 'spacingBox'),
!d.floating && !d.verticalAlign && (a = xa(a + c.getBBox().height)));
this.titleOffset = a;
},
getChartSize: function () {
var a = this.options.chart,
b = this.renderToClone || this.renderTo;
this.containerWidth = jb(b, 'width');
this.containerHeight = jb(b, 'height');
this.chartWidth = s(0, a.width || this.containerWidth || 600);
this.chartHeight = s(0, o(a.height, this.containerHeight > 19 ? this.containerHeight : 400));
},
cloneRenderTo: function (a) {
var b = this.renderToClone,
c = this.container;
a
? b && (this.renderTo.appendChild(c), Ta(b), delete this.renderToClone)
: (c && c.parentNode === this.renderTo && this.renderTo.removeChild(c),
(this.renderToClone = b = this.renderTo.cloneNode(0)),
K(b, { position: 'absolute', top: '-9999px', display: 'block' }),
y.body.appendChild(b),
c && b.appendChild(c));
},
getContainer: function () {
var a,
b = this.options.chart,
c,
d,
e;
this.renderTo = a = b.renderTo;
e = 'highcharts-' + zb++;
if (ea(a)) this.renderTo = a = y.getElementById(a);
a || ka(13, !0);
c = C(v(a, 'data-highcharts-chart'));
!isNaN(c) && Ga[c] && Ga[c].destroy();
v(a, 'data-highcharts-chart', this.index);
a.innerHTML = '';
a.offsetWidth || this.cloneRenderTo();
this.getChartSize();
c = this.chartWidth;
d = this.chartHeight;
this.container = a = U(
Ea,
{ className: 'highcharts-container' + (b.className ? ' ' + b.className : ''), id: e },
r(
{
position: 'relative',
overflow: 'hidden',
width: c + 'px',
height: d + 'px',
textAlign: 'left',
lineHeight: 'normal',
zIndex: 0,
'-webkit-tap-highlight-color': 'rgba(0,0,0,0)',
},
b.style,
),
this.renderToClone || a,
);
this._cursor = a.style.cursor;
this.renderer = b.forExport ? new Ha(a, c, d, !0) : new Va(a, c, d);
$ && this.renderer.create(this, a, c, d);
},
getMargins: function () {
var a = this.spacing,
b,
c = this.legend,
d = this.margin,
e = this.options.legend,
f = o(e.margin, 10),
g = e.x,
h = e.y,
i = e.align,
j = e.verticalAlign,
k = this.titleOffset;
this.resetMargins();
b = this.axisOffset;
if (k && !u(d[0])) this.plotTop = s(this.plotTop, k + this.options.title.margin + a[0]);
if (c.display && !e.floating)
if (i === 'right') {
if (!u(d[1])) this.marginRight = s(this.marginRight, c.legendWidth - g + f + a[1]);
} else if (i === 'left') {
if (!u(d[3])) this.plotLeft = s(this.plotLeft, c.legendWidth + g + f + a[3]);
} else if (j === 'top') {
if (!u(d[0])) this.plotTop = s(this.plotTop, c.legendHeight + h + f + a[0]);
} else if (j === 'bottom' && !u(d[2]))
this.marginBottom = s(this.marginBottom, c.legendHeight - h + f + a[2]);
this.extraBottomMargin && (this.marginBottom += this.extraBottomMargin);
this.extraTopMargin && (this.plotTop += this.extraTopMargin);
this.hasCartesianSeries &&
n(this.axes, function (a) {
a.getOffset();
});
u(d[3]) || (this.plotLeft += b[3]);
u(d[0]) || (this.plotTop += b[0]);
u(d[2]) || (this.marginBottom += b[2]);
u(d[1]) || (this.marginRight += b[1]);
this.setChartSize();
},
initReflow: function () {
function a(a) {
var g = c.width || jb(d, 'width'),
h = c.height || jb(d, 'height'),
a = a ? a.target : O;
if (!b.hasUserSize && g && h && (a === O || a === y)) {
if (g !== b.containerWidth || h !== b.containerHeight)
clearTimeout(e),
(b.reflowTimeout = e =
setTimeout(function () {
if (b.container) b.setSize(g, h, !1), (b.hasUserSize = null);
}, 100));
b.containerWidth = g;
b.containerHeight = h;
}
}
var b = this,
c = b.options.chart,
d = b.renderTo,
e;
b.reflow = a;
J(O, 'resize', a);
J(b, 'destroy', function () {
aa(O, 'resize', a);
});
},
setSize: function (a, b, c) {
var d = this,
e,
f,
g;
d.isResizing += 1;
g = function () {
d &&
z(d, 'endResize', null, function () {
d.isResizing -= 1;
});
};
La(c, d);
d.oldChartHeight = d.chartHeight;
d.oldChartWidth = d.chartWidth;
if (u(a)) (d.chartWidth = e = s(0, t(a))), (d.hasUserSize = !!e);
if (u(b)) d.chartHeight = f = s(0, t(b));
K(d.container, { width: e + 'px', height: f + 'px' });
d.setChartSize(!0);
d.renderer.setSize(e, f, c);
d.maxTicks = null;
n(d.axes, function (a) {
a.isDirty = !0;
a.setScale();
});
n(d.series, function (a) {
a.isDirty = !0;
});
d.isDirtyLegend = !0;
d.isDirtyBox = !0;
d.getMargins();
d.redraw(c);
d.oldChartHeight = null;
z(d, 'resize');
Fa === !1 ? g() : setTimeout(g, (Fa && Fa.duration) || 500);
},
setChartSize: function (a) {
var b = this.inverted,
c = this.renderer,
d = this.chartWidth,
e = this.chartHeight,
f = this.options.chart,
g = this.spacing,
h = this.clipOffset,
i,
j,
k,
l;
this.plotLeft = i = t(this.plotLeft);
this.plotTop = j = t(this.plotTop);
this.plotWidth = k = s(0, t(d - i - this.marginRight));
this.plotHeight = l = s(0, t(e - j - this.marginBottom));
this.plotSizeX = b ? l : k;
this.plotSizeY = b ? k : l;
this.plotBorderWidth = f.plotBorderWidth || 0;
this.spacingBox = c.spacingBox = {
x: g[3],
y: g[0],
width: d - g[3] - g[1],
height: e - g[0] - g[2],
};
this.plotBox = c.plotBox = { x: i, y: j, width: k, height: l };
d = 2 * P(this.plotBorderWidth / 2);
b = xa(s(d, h[3]) / 2);
c = xa(s(d, h[0]) / 2);
this.clipBox = {
x: b,
y: c,
width: P(this.plotSizeX - s(d, h[1]) / 2 - b),
height: P(this.plotSizeY - s(d, h[2]) / 2 - c),
};
a ||
n(this.axes, function (a) {
a.setAxisSize();
a.setAxisTranslation();
});
},
resetMargins: function () {
var a = this.spacing,
b = this.margin;
this.plotTop = o(b[0], a[0]);
this.marginRight = o(b[1], a[1]);
this.marginBottom = o(b[2], a[2]);
this.plotLeft = o(b[3], a[3]);
this.axisOffset = [0, 0, 0, 0];
this.clipOffset = [0, 0, 0, 0];
},
drawChartBox: function () {
var a = this.options.chart,
b = this.renderer,
c = this.chartWidth,
d = this.chartHeight,
e = this.chartBackground,
f = this.plotBackground,
g = this.plotBorder,
h = this.plotBGImage,
i = a.borderWidth || 0,
j = a.backgroundColor,
k = a.plotBackgroundColor,
l = a.plotBackgroundImage,
m = a.plotBorderWidth || 0,
p,
q = this.plotLeft,
o = this.plotTop,
n = this.plotWidth,
s = this.plotHeight,
t = this.plotBox,
u = this.clipRect,
r = this.clipBox;
p = i + (a.shadow ? 8 : 0);
if (i || j)
if (e) e.animate(e.crisp(null, null, null, c - p, d - p));
else {
e = { fill: j || S };
if (i) (e.stroke = a.borderColor), (e['stroke-width'] = i);
this.chartBackground = b
.rect(p / 2, p / 2, c - p, d - p, a.borderRadius, i)
.attr(e)
.add()
.shadow(a.shadow);
}
if (k)
f
? f.animate(t)
: (this.plotBackground = b
.rect(q, o, n, s, 0)
.attr({ fill: k })
.add()
.shadow(a.plotShadow));
if (l) h ? h.animate(t) : (this.plotBGImage = b.image(l, q, o, n, s).add());
u ? u.animate({ width: r.width, height: r.height }) : (this.clipRect = b.clipRect(r));
if (m)
g
? g.animate(g.crisp(null, q, o, n, s))
: (this.plotBorder = b
.rect(q, o, n, s, 0, -m)
.attr({ stroke: a.plotBorderColor, 'stroke-width': m, zIndex: 1 })
.add());
this.isDirtyBox = !1;
},
propFromSeries: function () {
var a = this,
b = a.options.chart,
c,
d = a.options.series,
e,
f;
n(['inverted', 'angular', 'polar'], function (g) {
c = W[b.type || b.defaultSeriesType];
f = a[g] || b[g] || (c && c.prototype[g]);
for (e = d && d.length; !f && e--; ) (c = W[d[e].type]) && c.prototype[g] && (f = !0);
a[g] = f;
});
},
linkSeries: function () {
var a = this,
b = a.series;
n(b, function (a) {
a.linkedSeries.length = 0;
});
n(b, function (b) {
var d = b.options.linkedTo;
if (ea(d) && (d = d === ':previous' ? a.series[b.index - 1] : a.get(d)))
d.linkedSeries.push(b), (b.linkedParent = d);
});
},
render: function () {
var a = this,
b = a.axes,
c = a.renderer,
d = a.options,
e = d.labels,
f = d.credits,
g;
a.setTitle();
a.legend = new eb(a, d.legend);
a.getStacks();
n(b, function (a) {
a.setScale();
});
a.getMargins();
a.maxTicks = null;
n(b, function (a) {
a.setTickPositions(!0);
a.setMaxTicks();
});
a.adjustTickAmounts();
a.getMargins();
a.drawChartBox();
a.hasCartesianSeries &&
n(b, function (a) {
a.render();
});
if (!a.seriesGroup) a.seriesGroup = c.g('series-group').attr({ zIndex: 3 }).add();
n(a.series, function (a) {
a.translate();
a.setTooltipPoints();
a.render();
});
e.items &&
n(e.items, function (b) {
var d = r(e.style, b.style),
f = C(d.left) + a.plotLeft,
g = C(d.top) + a.plotTop + 12;
delete d.left;
delete d.top;
c.text(b.html, f, g).attr({ zIndex: 2 }).css(d).add();
});
if (f.enabled && !a.credits)
(g = f.href),
(a.credits = c
.text(f.text, 0, 0)
.on('click', function () {
if (g) location.href = g;
})
.attr({ align: f.position.align, zIndex: 8 })
.css(f.style)
.add()
.align(f.position));
a.hasRendered = !0;
},
destroy: function () {
var a = this,
b = a.axes,
c = a.series,
d = a.container,
e,
f = d && d.parentNode;
z(a, 'destroy');
Ga[a.index] = w;
a.renderTo.removeAttribute('data-highcharts-chart');
aa(a);
for (e = b.length; e--; ) b[e] = b[e].destroy();
for (e = c.length; e--; ) c[e] = c[e].destroy();
n(
'title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer'.split(
',',
),
function (b) {
var c = a[b];
c && c.destroy && (a[b] = c.destroy());
},
);
if (d) (d.innerHTML = ''), aa(d), f && Ta(d);
for (e in a) delete a[e];
},
isReadyToRender: function () {
var a = this;
return (!Z && O == O.top && y.readyState !== 'complete') || ($ && !O.canvg)
? ($
? Tb.push(function () {
a.firstRender();
}, a.options.global.canvasToolsURL)
: y.attachEvent('onreadystatechange', function () {
y.detachEvent('onreadystatechange', a.firstRender);
y.readyState === 'complete' && a.firstRender();
}),
!1)
: !0;
},
firstRender: function () {
var a = this,
b = a.options,
c = a.callback;
if (a.isReadyToRender())
a.getContainer(),
z(a, 'init'),
a.resetMargins(),
a.setChartSize(),
a.propFromSeries(),
a.getAxes(),
n(b.series || [], function (b) {
a.initSeries(b);
}),
a.linkSeries(),
z(a, 'beforeRender'),
(a.pointer = new xb(a, b)),
a.render(),
a.renderer.draw(),
c && c.apply(a, [a]),
n(a.callbacks, function (b) {
b.apply(a, [a]);
}),
a.cloneRenderTo(!0),
z(a, 'load');
},
splashArray: function (a, b) {
var c = b[a],
c = T(c) ? c : [c, c, c, c];
return [
o(b[a + 'Top'], c[0]),
o(b[a + 'Right'], c[1]),
o(b[a + 'Bottom'], c[2]),
o(b[a + 'Left'], c[3]),
];
},
};
yb.prototype.callbacks = [];
var Pa = function () {};
Pa.prototype = {
init: function (a, b, c) {
this.series = a;
this.applyOptions(b, c);
this.pointAttr = {};
if (
a.options.colorByPoint &&
((b = a.options.colors || a.chart.options.colors),
(this.color = this.color || b[a.colorCounter++]),
a.colorCounter === b.length)
)
a.colorCounter = 0;
a.chart.pointCount++;
return this;
},
applyOptions: function (a, b) {
var c = this.series,
d = c.pointValKey,
a = Pa.prototype.optionsToObject.call(this, a);
r(this, a);
this.options = this.options ? r(this.options, a) : a;
if (d) this.y = this[d];
if (this.x === w && c) this.x = b === w ? c.autoIncrement() : b;
return this;
},
optionsToObject: function (a) {
var b,
c = this.series,
d = c.pointArrayMap || ['y'],
e = d.length,
f = 0,
g = 0;
if (typeof a === 'number' || a === null) b = { y: a };
else if (Ia(a)) {
b = {};
if (a.length > e) {
c = typeof a[0];
if (c === 'string') b.name = a[0];
else if (c === 'number') b.x = a[0];
f++;
}
for (; g < e; ) b[d[g++]] = a[f++];
} else if (typeof a === 'object') {
b = a;
if (a.dataLabels) c._hasPointLabels = !0;
if (a.marker) c._hasPointMarkers = !0;
}
return b;
},
destroy: function () {
var a = this.series.chart,
b = a.hoverPoints,
c;
a.pointCount--;
if (b && (this.setState(), ga(b, this), !b.length)) a.hoverPoints = null;
if (this === a.hoverPoint) this.onMouseOut();
if (this.graphic || this.dataLabel) aa(this), this.destroyElements();
this.legendItem && a.legend.destroyItem(this);
for (c in this) this[c] = null;
},
destroyElements: function () {
for (
var a = 'graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup'.split(','), b, c = 6;
c--;
)
(b = a[c]), this[b] && (this[b] = this[b].destroy());
},
getLabelConfig: function () {
return {
x: this.category,
y: this.y,
key: this.name || this.category,
series: this.series,
point: this,
percentage: this.percentage,
total: this.total || this.stackTotal,
};
},
select: function (a, b) {
var c = this,
d = c.series,
e = d.chart,
a = o(a, !c.selected);
c.firePointEvent(a ? 'select' : 'unselect', { accumulate: b }, function () {
c.selected = c.options.selected = a;
d.options.data[qa(c, d.data)] = c.options;
c.setState(a && 'select');
b ||
n(e.getSelectedPoints(), function (a) {
if (a.selected && a !== c)
(a.selected = a.options.selected = !1),
(d.options.data[qa(a, d.data)] = a.options),
a.setState(''),
a.firePointEvent('unselect');
});
});
},
onMouseOver: function (a) {
var b = this.series,
c = b.chart,
d = c.tooltip,
e = c.hoverPoint;
if (e && e !== this) e.onMouseOut();
this.firePointEvent('mouseOver');
d && (!d.shared || b.noSharedTooltip) && d.refresh(this, a);
this.setState('hover');
c.hoverPoint = this;
},
onMouseOut: function () {
var a = this.series.chart,
b = a.hoverPoints;
if (!b || qa(this, b) === -1)
this.firePointEvent('mouseOut'), this.setState(), (a.hoverPoint = null);
},
tooltipFormatter: function (a) {
var b = this.series,
c = b.tooltipOptions,
d = o(c.valueDecimals, ''),
e = c.valuePrefix || '',
f = c.valueSuffix || '';
n(b.pointArrayMap || ['y'], function (b) {
b = '{point.' + b;
if (e || f) a = a.replace(b + '}', e + b + '}' + f);
a = a.replace(b + '}', b + ':,.' + d + 'f}');
});
return Ca(a, { point: this, series: this.series });
},
update: function (a, b, c) {
var d = this,
e = d.series,
f = d.graphic,
g,
h = e.data,
i = e.chart,
j = e.options,
b = o(b, !0);
d.firePointEvent('update', { options: a }, function () {
d.applyOptions(a);
if (T(a) && (e.getAttribs(), f))
a.marker && a.marker.symbol
? (d.graphic = f.destroy())
: f.attr(d.pointAttr[d.state || '']);
g = qa(d, h);
e.xData[g] = d.x;
e.yData[g] = e.toYData ? e.toYData(d) : d.y;
e.zData[g] = d.z;
j.data[g] = d.options;
e.isDirty = e.isDirtyData = !0;
if (!e.fixedBox && e.hasCartesianSeries) i.isDirtyBox = !0;
j.legendType === 'point' && i.legend.destroyItem(d);
b && i.redraw(c);
});
},
remove: function (a, b) {
var c = this,
d = c.series,
e = d.points,
f = d.chart,
g,
h = d.data;
La(b, f);
a = o(a, !0);
c.firePointEvent('remove', null, function () {
g = qa(c, h);
h.length === e.length && e.splice(g, 1);
h.splice(g, 1);
d.options.data.splice(g, 1);
d.xData.splice(g, 1);
d.yData.splice(g, 1);
d.zData.splice(g, 1);
c.destroy();
d.isDirty = !0;
d.isDirtyData = !0;
a && f.redraw();
});
},
firePointEvent: function (a, b, c) {
var d = this,
e = this.series.options;
(e.point.events[a] || (d.options && d.options.events && d.options.events[a])) &&
this.importEvents();
a === 'click' &&
e.allowPointSelect &&
(c = function (a) {
d.select(null, a.ctrlKey || a.metaKey || a.shiftKey);
});
z(this, a, b, c);
},
importEvents: function () {
if (!this.hasImportedEvents) {
var a = x(this.series.options.point, this.options).events,
b;
this.events = a;
for (b in a) J(this, b, a[b]);
this.hasImportedEvents = !0;
}
},
setState: function (a) {
var b = this.plotX,
c = this.plotY,
d = this.series,
e = d.options.states,
f = Y[d.type].marker && d.options.marker,
g = f && !f.enabled,
h = f && f.states[a],
i = h && h.enabled === !1,
j = d.stateMarkerGraphic,
k = this.marker || {},
l = d.chart,
m = this.pointAttr,
a = a || '';
if (
!(
a === this.state ||
(this.selected && a !== 'select') ||
(e[a] && e[a].enabled === !1) ||
(a && (i || (g && !h.enabled)))
)
) {
if (this.graphic)
(e = f && this.graphic.symbolName && m[a].r),
this.graphic.attr(
x(m[a], e ? { x: b - e, y: c - e, width: 2 * e, height: 2 * e } : {}),
);
else {
if (a && h)
(e = h.radius),
(k = k.symbol || d.symbol),
j && j.currentSymbol !== k && (j = j.destroy()),
j
? j.attr({ x: b - e, y: c - e })
: ((d.stateMarkerGraphic = j =
l.renderer
.symbol(k, b - e, c - e, 2 * e, 2 * e)
.attr(m[a])
.add(d.markerGroup)),
(j.currentSymbol = k));
if (j) j[a && l.isInsidePlot(b, c) ? 'show' : 'hide']();
}
this.state = a;
}
},
};
var Q = function () {};
Q.prototype = {
isCartesian: !0,
type: 'line',
pointClass: Pa,
sorted: !0,
requireSorting: !0,
pointAttrToOptions: {
stroke: 'lineColor',
'stroke-width': 'lineWidth',
fill: 'fillColor',
r: 'radius',
},
colorCounter: 0,
init: function (a, b) {
var c,
d,
e = a.series;
this.chart = a;
this.options = b = this.setOptions(b);
this.linkedSeries = [];
this.bindAxes();
r(this, {
name: b.name,
state: '',
pointAttr: {},
visible: b.visible !== !1,
selected: b.selected === !0,
});
if ($) b.animation = !1;
d = b.events;
for (c in d) J(this, c, d[c]);
if (
(d && d.click) ||
(b.point && b.point.events && b.point.events.click) ||
b.allowPointSelect
)
a.runTrackerClick = !0;
this.getColor();
this.getSymbol();
this.setData(b.data, !1);
if (this.isCartesian) a.hasCartesianSeries = !0;
e.push(this);
this._i = e.length - 1;
Kb(e, function (a, b) {
return o(a.options.index, a._i) - o(b.options.index, a._i);
});
n(e, function (a, b) {
a.index = b;
a.name = a.name || 'Series ' + (b + 1);
});
},
bindAxes: function () {
var a = this,
b = a.options,
c = a.chart,
d;
a.isCartesian &&
n(['xAxis', 'yAxis'], function (e) {
n(c[e], function (c) {
d = c.options;
if (b[e] === d.index || (b[e] !== w && b[e] === d.id) || (b[e] === w && d.index === 0))
c.series.push(a), (a[e] = c), (c.isDirty = !0);
});
a[e] || ka(18, !0);
});
},
autoIncrement: function () {
var a = this.options,
b = this.xIncrement,
b = o(b, a.pointStart, 0);
this.pointInterval = o(this.pointInterval, a.pointInterval, 1);
this.xIncrement = b + this.pointInterval;
return b;
},
getSegments: function () {
var a = -1,
b = [],
c,
d = this.points,
e = d.length;
if (e)
if (this.options.connectNulls) {
for (c = e; c--; ) d[c].y === null && d.splice(c, 1);
d.length && (b = [d]);
} else
n(d, function (c, g) {
c.y === null
? (g > a + 1 && b.push(d.slice(a + 1, g)), (a = g))
: g === e - 1 && b.push(d.slice(a + 1, g + 1));
});
this.segments = b;
},
setOptions: function (a) {
var b = this.chart.options,
c = b.plotOptions,
d = c[this.type];
this.userOptions = a;
a = x(d, c.series, a);
this.tooltipOptions = x(b.tooltip, a.tooltip);
d.marker === null && delete a.marker;
return a;
},
getColor: function () {
var a = this.options,
b = this.userOptions,
c = this.chart.options.colors,
d = this.chart.counters,
e;
e = a.color || Y[this.type].color;
if (!e && !a.colorByPoint)
u(b._colorIndex) ? (a = b._colorIndex) : ((b._colorIndex = d.color), (a = d.color++)),
(e = c[a]);
this.color = e;
d.wrapColor(c.length);
},
getSymbol: function () {
var a = this.userOptions,
b = this.options.marker,
c = this.chart,
d = c.options.symbols,
c = c.counters;
this.symbol = b.symbol;
if (!this.symbol)
u(a._symbolIndex) ? (a = a._symbolIndex) : ((a._symbolIndex = c.symbol), (a = c.symbol++)),
(this.symbol = d[a]);
if (/^url/.test(this.symbol)) b.radius = 0;
c.wrapSymbol(d.length);
},
drawLegendSymbol: function (a) {
var b = this.options,
c = b.marker,
d = a.options,
e;
e = d.symbolWidth;
var f = this.chart.renderer,
g = this.legendGroup,
a = a.baseline - t(f.fontMetrics(d.itemStyle.fontSize).b * 0.3);
if (b.lineWidth) {
d = { 'stroke-width': b.lineWidth };
if (b.dashStyle) d.dashstyle = b.dashStyle;
this.legendLine = f.path(['M', 0, a, 'L', e, a]).attr(d).add(g);
}
if (c && c.enabled)
(b = c.radius),
(this.legendSymbol = e = f.symbol(this.symbol, e / 2 - b, a - b, 2 * b, 2 * b).add(g)),
(e.isMarker = !0);
},
addPoint: function (a, b, c, d) {
var e = this.options,
f = this.data,
g = this.graph,
h = this.area,
i = this.chart,
j = this.xData,
k = this.yData,
l = this.zData,
m = this.names,
p = (g && g.shift) || 0,
q = e.data,
s;
La(d, i);
c &&
n([g, h, this.graphNeg, this.areaNeg], function (a) {
if (a) a.shift = p + 1;
});
if (h) h.isArea = !0;
b = o(b, !0);
d = { series: this };
this.pointClass.prototype.applyOptions.apply(d, [a]);
g = d.x;
h = j.length;
if (this.requireSorting && g < j[h - 1]) for (s = !0; h && j[h - 1] > g; ) h--;
j.splice(h, 0, g);
k.splice(h, 0, this.toYData ? this.toYData(d) : d.y);
l.splice(h, 0, d.z);
if (m) m[g] = d.name;
q.splice(h, 0, a);
s && (this.data.splice(h, 0, null), this.processData());
e.legendType === 'point' && this.generatePoints();
c &&
(f[0] && f[0].remove
? f[0].remove(!1)
: (f.shift(), j.shift(), k.shift(), l.shift(), q.shift()));
this.isDirtyData = this.isDirty = !0;
b && (this.getAttribs(), i.redraw());
},
setData: function (a, b) {
var c = this.points,
d = this.options,
e = this.chart,
f = null,
g = this.xAxis,
h = g && g.categories && !g.categories.length ? [] : null,
i;
this.xIncrement = null;
this.pointRange = g && g.categories ? 1 : d.pointRange;
this.colorCounter = 0;
var j = [],
k = [],
l = [],
m = a ? a.length : [];
i = o(d.turboThreshold, 1e3);
var p = this.pointArrayMap,
p = p && p.length,
q = !!this.toYData;
if (i && m > i) {
for (i = 0; f === null && i < m; ) (f = a[i]), i++;
if (sa(f)) {
f = o(d.pointStart, 0);
d = o(d.pointInterval, 1);
for (i = 0; i < m; i++) (j[i] = f), (k[i] = a[i]), (f += d);
this.xIncrement = f;
} else if (Ia(f))
if (p) for (i = 0; i < m; i++) (d = a[i]), (j[i] = d[0]), (k[i] = d.slice(1, p + 1));
else for (i = 0; i < m; i++) (d = a[i]), (j[i] = d[0]), (k[i] = d[1]);
else ka(12);
} else
for (i = 0; i < m; i++)
if (
a[i] !== w &&
((d = { series: this }),
this.pointClass.prototype.applyOptions.apply(d, [a[i]]),
(j[i] = d.x),
(k[i] = q ? this.toYData(d) : d.y),
(l[i] = d.z),
h && d.name)
)
h[d.x] = d.name;
ea(k[0]) && ka(14, !0);
this.data = [];
this.options.data = a;
this.xData = j;
this.yData = k;
this.zData = l;
this.names = h;
for (i = (c && c.length) || 0; i--; ) c[i] && c[i].destroy && c[i].destroy();
if (g) g.minRange = g.userMinRange;
this.isDirty = this.isDirtyData = e.isDirtyBox = !0;
o(b, !0) && e.redraw(!1);
},
remove: function (a, b) {
var c = this,
d = c.chart,
a = o(a, !0);
if (!c.isRemoving)
(c.isRemoving = !0),
z(c, 'remove', null, function () {
c.destroy();
d.isDirtyLegend = d.isDirtyBox = !0;
d.linkSeries();
a && d.redraw(b);
});
c.isRemoving = !1;
},
processData: function (a) {
var b = this.xData,
c = this.yData,
d = b.length,
e;
e = 0;
var f,
g,
h = this.xAxis,
i = this.options,
j = i.cropThreshold,
k = this.isCartesian;
if (k && !this.isDirty && !h.isDirty && !this.yAxis.isDirty && !a) return !1;
if (k && this.sorted && (!j || d > j || this.forceCrop))
if (((a = h.min), (h = h.max), b[d - 1] < a || b[0] > h)) (b = []), (c = []);
else if (b[0] < a || b[d - 1] > h)
(e = this.cropData(this.xData, this.yData, a, h)),
(b = e.xData),
(c = e.yData),
(e = e.start),
(f = !0);
for (h = b.length - 1; h >= 0; h--)
(d = b[h] - b[h - 1]),
d > 0 && (g === w || d < g) ? (g = d) : d < 0 && this.requireSorting && ka(15);
this.cropped = f;
this.cropStart = e;
this.processedXData = b;
this.processedYData = c;
if (i.pointRange === null) this.pointRange = g || 1;
this.closestPointRange = g;
},
cropData: function (a, b, c, d) {
var e = a.length,
f = 0,
g = e,
h = o(this.cropShoulder, 1),
i;
for (i = 0; i < e; i++)
if (a[i] >= c) {
f = s(0, i - h);
break;
}
for (; i < e; i++)
if (a[i] > d) {
g = i + h;
break;
}
return { xData: a.slice(f, g), yData: b.slice(f, g), start: f, end: g };
},
generatePoints: function () {
var a = this.options.data,
b = this.data,
c,
d = this.processedXData,
e = this.processedYData,
f = this.pointClass,
g = d.length,
h = this.cropStart || 0,
i,
j = this.hasGroupedData,
k,
l = [],
m;
if (!b && !j) (b = []), (b.length = a.length), (b = this.data = b);
for (m = 0; m < g; m++)
(i = h + m),
j
? (l[m] = new f().init(this, [d[m]].concat(ja(e[m]))))
: (b[i] ? (k = b[i]) : a[i] !== w && (b[i] = k = new f().init(this, a[i], d[m])),
(l[m] = k));
if (b && (g !== (c = b.length) || j))
for (m = 0; m < c; m++)
if ((m === h && !j && (m += g), b[m])) b[m].destroyElements(), (b[m].plotX = w);
this.data = b;
this.points = l;
},
setStackedPoints: function () {
if (
this.options.stacking &&
!(this.visible !== !0 && this.chart.options.chart.ignoreHiddenSeries !== !1)
) {
var a = this.processedXData,
b = this.processedYData,
c = [],
d = b.length,
e = this.options,
f = e.threshold,
g = e.stack,
e = e.stacking,
h = this.stackKey,
i = '-' + h,
j = this.negStacks,
k = this.yAxis,
l = k.stacks,
m = k.oldStacks,
p,
q,
o,
n,
t;
for (o = 0; o < d; o++) {
n = a[o];
t = b[o];
q = (p = j && t < f) ? i : h;
l[q] || (l[q] = {});
if (!l[q][n])
m[q] && m[q][n]
? ((l[q][n] = m[q][n]), (l[q][n].total = null))
: (l[q][n] = new Mb(k, k.options.stackLabels, p, n, g, e));
q = l[q][n];
q.points[this.index] = [q.cum || 0];
e === 'percent'
? ((p = p ? h : i),
j && l[p] && l[p][n]
? ((p = l[p][n]), (q.total = p.total = s(p.total, q.total) + N(t) || 0))
: (q.total += N(t) || 0))
: (q.total += t || 0);
q.cum = (q.cum || 0) + (t || 0);
q.points[this.index].push(q.cum);
c[o] = q.cum;
}
if (e === 'percent') k.usePercentage = !0;
this.stackedYData = c;
k.oldStacks = {};
}
},
setPercentStacks: function () {
var a = this,
b = a.stackKey,
c = a.yAxis.stacks;
n([b, '-' + b], function (b) {
var d;
for (var e = a.xData.length, f, g; e--; )
if (((f = a.xData[e]), (d = (g = c[b] && c[b][f]) && g.points[a.index]), (f = d)))
(g = g.total ? 100 / g.total : 0),
(f[0] = ia(f[0] * g)),
(f[1] = ia(f[1] * g)),
(a.stackedYData[e] = f[1]);
});
},
getExtremes: function () {
var a = this.yAxis,
b = this.processedXData,
c = this.stackedYData || this.processedYData,
d = c.length,
e = [],
f = 0,
g = this.xAxis.getExtremes(),
h = g.min,
g = g.max,
i,
j,
k,
l;
for (l = 0; l < d; l++)
if (
((j = b[l]),
(k = c[l]),
(i = k !== null && k !== w && (!a.isLog || k.length || k > 0)),
(j =
this.getExtremesFromAll ||
this.cropped ||
((b[l + 1] || j) >= h && (b[l - 1] || j) <= g)),
i && j)
)
if ((i = k.length)) for (; i--; ) k[i] !== null && (e[f++] = k[i]);
else e[f++] = k;
this.dataMin = o(void 0, Ja(e));
this.dataMax = o(void 0, va(e));
},
translate: function () {
this.processedXData || this.processData();
this.generatePoints();
for (
var a = this.options,
b = a.stacking,
c = this.xAxis,
d = c.categories,
e = this.yAxis,
f = this.points,
g = f.length,
h = !!this.modifyValue,
i = a.pointPlacement,
j = i === 'between' || sa(i),
k = a.threshold,
a = 0;
a < g;
a++
) {
var l = f[a],
m = l.x,
p = l.y,
q = l.low,
n = e.stacks[(this.negStacks && p < k ? '-' : '') + this.stackKey];
if (e.isLog && p <= 0) l.y = p = null;
l.plotX = c.translate(m, 0, 0, 0, 1, i, this.type === 'flags');
if (b && this.visible && n && n[m])
(n = n[m]),
(p = n.points[this.index]),
(q = p[0]),
(p = p[1]),
q === 0 && (q = o(k, e.min)),
e.isLog && q <= 0 && (q = null),
(l.percentage = b === 'percent' && p),
(l.total = l.stackTotal = n.total),
(l.stackY = p),
n.setOffset(this.pointXOffset || 0, this.barW || 0);
l.yBottom = u(q) ? e.translate(q, 0, 1, 0, 1) : null;
h && (p = this.modifyValue(p, l));
l.plotY = typeof p === 'number' && p !== Infinity ? e.translate(p, 0, 1, 0, 1) : w;
l.clientX = j ? c.translate(m, 0, 0, 0, 1) : l.plotX;
l.negative = l.y < (k || 0);
l.category = d && d[l.x] !== w ? d[l.x] : l.x;
}
this.getSegments();
},
setTooltipPoints: function (a) {
var b = [],
c,
d,
e = this.xAxis,
f = e && e.getExtremes(),
g = e ? e.tooltipLen || e.len : this.chart.plotSizeX,
h,
i,
j = [];
if (this.options.enableMouseTracking !== !1) {
if (a) this.tooltipPoints = null;
n(this.segments || this.points, function (a) {
b = b.concat(a);
});
e && e.reversed && (b = b.reverse());
this.orderTooltipPoints && this.orderTooltipPoints(b);
a = b.length;
for (i = 0; i < a; i++)
if (((e = b[i]), (c = e.x), c >= f.min && c <= f.max)) {
h = b[i + 1];
c = d === w ? 0 : d + 1;
for (
d = b[i + 1]
? I(s(0, P((e.clientX + (h ? h.wrappedClientX || h.clientX : g)) / 2)), g)
: g;
c >= 0 && c <= d;
)
j[c++] = e;
}
this.tooltipPoints = j;
}
},
tooltipHeaderFormatter: function (a) {
var b = this.tooltipOptions,
c = b.xDateFormat,
d = b.dateTimeLabelFormats,
e = this.xAxis,
f = e && e.options.type === 'datetime',
b = b.headerFormat,
e = e && e.closestPointRange,
g;
if (f && !c)
if (e)
for (g in D) {
if (D[g] >= e) {
c = d[g];
break;
}
}
else c = d.day;
f && c && sa(a.key) && (b = b.replace('{point.key}', '{point.key:' + c + '}'));
return Ca(b, { point: a, series: this });
},
onMouseOver: function () {
var a = this.chart,
b = a.hoverSeries;
if (b && b !== this) b.onMouseOut();
this.options.events.mouseOver && z(this, 'mouseOver');
this.setState('hover');
a.hoverSeries = this;
},
onMouseOut: function () {
var a = this.options,
b = this.chart,
c = b.tooltip,
d = b.hoverPoint;
if (d) d.onMouseOut();
this && a.events.mouseOut && z(this, 'mouseOut');
c && !a.stickyTracking && (!c.shared || this.noSharedTooltip) && c.hide();
this.setState();
b.hoverSeries = null;
},
animate: function (a) {
var b = this,
c = b.chart,
d = c.renderer,
e;
e = b.options.animation;
var f = c.clipBox,
g = c.inverted,
h;
if (e && !T(e)) e = Y[b.type].animation;
h = '_sharedClip' + e.duration + e.easing;
if (a)
(a = c[h]),
(e = c[h + 'm']),
a ||
((c[h] = a = d.clipRect(r(f, { width: 0 }))),
(c[h + 'm'] = e =
d.clipRect(-99, g ? -c.plotLeft : -c.plotTop, 99, g ? c.chartWidth : c.chartHeight))),
b.group.clip(a),
b.markerGroup.clip(e),
(b.sharedClipKey = h);
else {
if ((a = c[h]))
a.animate({ width: c.plotSizeX }, e), c[h + 'm'].animate({ width: c.plotSizeX + 99 }, e);
b.animate = null;
b.animationTimeout = setTimeout(function () {
b.afterAnimate();
}, e.duration);
}
},
afterAnimate: function () {
var a = this.chart,
b = this.sharedClipKey,
c = this.group;
c && this.options.clip !== !1 && (c.clip(a.clipRect), this.markerGroup.clip());
setTimeout(function () {
b && a[b] && ((a[b] = a[b].destroy()), (a[b + 'm'] = a[b + 'm'].destroy()));
}, 100);
},
drawPoints: function () {
var a,
b = this.points,
c = this.chart,
d,
e,
f,
g,
h,
i,
j,
k,
l = this.options.marker,
m,
p = this.markerGroup;
if (l.enabled || this._hasPointMarkers)
for (f = b.length; f--; )
if (
((g = b[f]),
(d = P(g.plotX)),
(e = g.plotY),
(k = g.graphic),
(i = g.marker || {}),
(a = (l.enabled && i.enabled === w) || i.enabled),
(m = c.isInsidePlot(t(d), e, c.inverted)),
a && e !== w && !isNaN(e) && g.y !== null)
)
if (
((a = g.pointAttr[g.selected ? 'select' : '']),
(h = a.r),
(i = o(i.symbol, this.symbol)),
(j = i.indexOf('url') === 0),
k)
)
k.attr({ visibility: m ? (Z ? 'inherit' : 'visible') : 'hidden' }).animate(
r({ x: d - h, y: e - h }, k.symbolName ? { width: 2 * h, height: 2 * h } : {}),
);
else {
if (m && (h > 0 || j))
g.graphic = c.renderer
.symbol(i, d - h, e - h, 2 * h, 2 * h)
.attr(a)
.add(p);
}
else if (k) g.graphic = k.destroy();
},
convertAttribs: function (a, b, c, d) {
var e = this.pointAttrToOptions,
f,
g,
h = {},
a = a || {},
b = b || {},
c = c || {},
d = d || {};
for (f in e) (g = e[f]), (h[f] = o(a[g], b[f], c[f], d[f]));
return h;
},
getAttribs: function () {
var a = this,
b = a.options,
c = Y[a.type].marker ? b.marker : b,
d = c.states,
e = d.hover,
f,
g = a.color,
h = { stroke: g, fill: g },
i = a.points || [],
j = [],
k,
l = a.pointAttrToOptions,
m = b.negativeColor,
p = c.lineColor,
q;
b.marker
? ((e.radius = e.radius || c.radius + 2), (e.lineWidth = e.lineWidth || c.lineWidth + 1))
: (e.color =
e.color ||
ra(e.color || g)
.brighten(e.brightness)
.get());
j[''] = a.convertAttribs(c, h);
n(['hover', 'select'], function (b) {
j[b] = a.convertAttribs(d[b], j['']);
});
a.pointAttr = j;
for (g = i.length; g--; ) {
h = i[g];
if ((c = (h.options && h.options.marker) || h.options) && c.enabled === !1) c.radius = 0;
if (h.negative && m) h.color = h.fillColor = m;
f = b.colorByPoint || h.color;
if (h.options) for (q in l) u(c[l[q]]) && (f = !0);
if (f) {
c = c || {};
k = [];
d = c.states || {};
f = d.hover = d.hover || {};
if (!b.marker)
f.color = ra(f.color || h.color)
.brighten(f.brightness || e.brightness)
.get();
k[''] = a.convertAttribs(
r({ color: h.color, fillColor: h.color, lineColor: p === null ? h.color : w }, c),
j[''],
);
k.hover = a.convertAttribs(d.hover, j.hover, k['']);
k.select = a.convertAttribs(d.select, j.select, k['']);
} else k = j;
h.pointAttr = k;
}
},
update: function (a, b) {
var c = this.chart,
d = this.type,
e = W[d].prototype,
f,
a = x(
this.userOptions,
{ animation: !1, index: this.index, pointStart: this.xData[0] },
{ data: this.options.data },
a,
);
this.remove(!1);
for (f in e) e.hasOwnProperty(f) && (this[f] = w);
r(this, W[a.type || d].prototype);
this.init(c, a);
o(b, !0) && c.redraw(!1);
},
destroy: function () {
var a = this,
b = a.chart,
c = /AppleWebKit\/533/.test(oa),
d,
e,
f = a.data || [],
g,
h,
i;
z(a, 'destroy');
aa(a);
n(['xAxis', 'yAxis'], function (b) {
if ((i = a[b])) ga(i.series, a), (i.isDirty = i.forceRedraw = !0), (i.stacks = {});
});
a.legendItem && a.chart.legend.destroyItem(a);
for (e = f.length; e--; ) (g = f[e]) && g.destroy && g.destroy();
a.points = null;
clearTimeout(a.animationTimeout);
n(
'area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip'.split(
',',
),
function (b) {
a[b] && ((d = c && b === 'group' ? 'hide' : 'destroy'), a[b][d]());
},
);
if (b.hoverSeries === a) b.hoverSeries = null;
ga(b.series, a);
for (h in a) delete a[h];
},
drawDataLabels: function () {
var a = this,
b = a.options.dataLabels,
c = a.points,
d,
e,
f,
g;
if (b.enabled || a._hasPointLabels)
a.dlProcessOptions && a.dlProcessOptions(b),
(g = a.plotGroup(
'dataLabelsGroup',
'data-labels',
a.visible ? 'visible' : 'hidden',
b.zIndex || 6,
)),
(e = b),
n(c, function (c) {
var i,
j = c.dataLabel,
k,
l,
m = c.connector,
p = !0;
d = c.options && c.options.dataLabels;
i = o(d && d.enabled, e.enabled);
if (j && !i) c.dataLabel = j.destroy();
else if (i) {
b = x(e, d);
i = b.rotation;
k = c.getLabelConfig();
f = b.format ? Ca(b.format, k) : b.formatter.call(k, b);
b.style.color = o(b.color, b.style.color, a.color, 'black');
if (j)
if (u(f)) j.attr({ text: f }), (p = !1);
else {
if (((c.dataLabel = j = j.destroy()), m)) c.connector = m.destroy();
}
else if (u(f)) {
j = {
fill: b.backgroundColor,
stroke: b.borderColor,
'stroke-width': b.borderWidth,
r: b.borderRadius || 0,
rotation: i,
padding: b.padding,
zIndex: 1,
};
for (l in j) j[l] === w && delete j[l];
j = c.dataLabel = a.chart.renderer[i ? 'text' : 'label'](
f,
0,
-999,
null,
null,
null,
b.useHTML,
)
.attr(j)
.css(b.style)
.add(g)
.shadow(b.shadow);
}
j && a.alignDataLabel(c, j, b, null, p);
}
});
},
alignDataLabel: function (a, b, c, d, e) {
var f = this.chart,
g = f.inverted,
h = o(a.plotX, -999),
i = o(a.plotY, -999),
j = b.getBBox();
if ((a = this.visible && f.isInsidePlot(a.plotX, a.plotY, g)))
(d = r(
{ x: g ? f.plotWidth - i : h, y: t(g ? f.plotHeight - h : i), width: 0, height: 0 },
d,
)),
r(c, { width: j.width, height: j.height }),
c.rotation
? ((g = { align: c.align, x: d.x + c.x + d.width / 2, y: d.y + c.y + d.height / 2 }),
b[e ? 'attr' : 'animate'](g))
: (b.align(c, null, d),
(g = b.alignAttr),
o(c.overflow, 'justify') === 'justify'
? this.justifyDataLabel(b, c, g, j, d, e)
: o(c.crop, !0) &&
(a = f.isInsidePlot(g.x, g.y) && f.isInsidePlot(g.x + j.width, g.y + j.height)));
a || b.attr({ y: -999 });
},
justifyDataLabel: function (a, b, c, d, e, f) {
var g = this.chart,
h = b.align,
i = b.verticalAlign,
j,
k;
j = c.x;
if (j < 0) h === 'right' ? (b.align = 'left') : (b.x = -j), (k = !0);
j = c.x + d.width;
if (j > g.plotWidth) h === 'left' ? (b.align = 'right') : (b.x = g.plotWidth - j), (k = !0);
j = c.y;
if (j < 0) i === 'bottom' ? (b.verticalAlign = 'top') : (b.y = -j), (k = !0);
j = c.y + d.height;
if (j > g.plotHeight)
i === 'top' ? (b.verticalAlign = 'bottom') : (b.y = g.plotHeight - j), (k = !0);
if (k) (a.placed = !f), a.align(b, null, e);
},
getSegmentPath: function (a) {
var b = this,
c = [],
d = b.options.step;
n(a, function (e, f) {
var g = e.plotX,
h = e.plotY,
i;
b.getPointSpline
? c.push.apply(c, b.getPointSpline(a, e, f))
: (c.push(f ? 'L' : 'M'),
d &&
f &&
((i = a[f - 1]),
d === 'right'
? c.push(i.plotX, h)
: d === 'center'
? c.push((i.plotX + g) / 2, i.plotY, (i.plotX + g) / 2, h)
: c.push(g, i.plotY)),
c.push(e.plotX, e.plotY));
});
return c;
},
getGraphPath: function () {
var a = this,
b = [],
c,
d = [];
n(a.segments, function (e) {
c = a.getSegmentPath(e);
e.length > 1 ? (b = b.concat(c)) : d.push(e[0]);
});
a.singlePoints = d;
return (a.graphPath = b);
},
drawGraph: function () {
var a = this,
b = this.options,
c = [['graph', b.lineColor || this.color]],
d = b.lineWidth,
e = b.dashStyle,
f = this.getGraphPath(),
g = b.negativeColor;
g && c.push(['graphNeg', g]);
n(c, function (c, g) {
var j = c[0],
k = a[j];
if (k) Wa(k), k.animate({ d: f });
else if (d && f.length)
(k = { stroke: c[1], 'stroke-width': d, zIndex: 1 }),
e ? (k.dashstyle = e) : (k['stroke-linecap'] = k['stroke-linejoin'] = 'round'),
(a[j] = a.chart.renderer
.path(f)
.attr(k)
.add(a.group)
.shadow(!g && b.shadow));
});
},
clipNeg: function () {
var a = this.options,
b = this.chart,
c = b.renderer,
d = a.negativeColor || a.negativeFillColor,
e,
f = this.graph,
g = this.area,
h = this.posClip,
i = this.negClip;
e = b.chartWidth;
var j = b.chartHeight,
k = s(e, j),
l = this.yAxis;
if (d && (f || g)) {
d = t(l.toPixels(a.threshold || 0, !0));
a = { x: 0, y: 0, width: k, height: d };
k = { x: 0, y: d, width: k, height: k };
if (b.inverted)
(a.height = k.y = b.plotWidth - d),
c.isVML &&
((a = { x: b.plotWidth - d - b.plotLeft, y: 0, width: e, height: j }),
(k = { x: d + b.plotLeft - e, y: 0, width: b.plotLeft + d, height: e }));
l.reversed ? ((b = k), (e = a)) : ((b = a), (e = k));
h
? (h.animate(b), i.animate(e))
: ((this.posClip = h = c.clipRect(b)),
(this.negClip = i = c.clipRect(e)),
f && this.graphNeg && (f.clip(h), this.graphNeg.clip(i)),
g && (g.clip(h), this.areaNeg.clip(i)));
}
},
invertGroups: function () {
function a() {
var a = { width: b.yAxis.len, height: b.xAxis.len };
n(['group', 'markerGroup'], function (c) {
b[c] && b[c].attr(a).invert();
});
}
var b = this,
c = b.chart;
if (b.xAxis)
J(c, 'resize', a),
J(b, 'destroy', function () {
aa(c, 'resize', a);
}),
a(),
(b.invertGroups = a);
},
plotGroup: function (a, b, c, d, e) {
var f = this[a],
g = !f;
g &&
(this[a] = f =
this.chart.renderer
.g(b)
.attr({ visibility: c, zIndex: d || 0.1 })
.add(e));
f[g ? 'attr' : 'animate'](this.getPlotBox());
return f;
},
getPlotBox: function () {
return {
translateX: this.xAxis ? this.xAxis.left : this.chart.plotLeft,
translateY: this.yAxis ? this.yAxis.top : this.chart.plotTop,
scaleX: 1,
scaleY: 1,
};
},
render: function () {
var a = this.chart,
b,
c = this.options,
d = c.animation && !!this.animate && a.renderer.isSVG,
e = this.visible ? 'visible' : 'hidden',
f = c.zIndex,
g = this.hasRendered,
h = a.seriesGroup;
b = this.plotGroup('group', 'series', e, f, h);
this.markerGroup = this.plotGroup('markerGroup', 'markers', e, f, h);
d && this.animate(!0);
this.getAttribs();
b.inverted = this.isCartesian ? a.inverted : !1;
this.drawGraph && (this.drawGraph(), this.clipNeg());
this.drawDataLabels();
this.drawPoints();
this.options.enableMouseTracking !== !1 && this.drawTracker();
a.inverted && this.invertGroups();
c.clip !== !1 && !this.sharedClipKey && !g && b.clip(a.clipRect);
d ? this.animate() : g || this.afterAnimate();
this.isDirty = this.isDirtyData = !1;
this.hasRendered = !0;
},
redraw: function () {
var a = this.chart,
b = this.isDirtyData,
c = this.group,
d = this.xAxis,
e = this.yAxis;
c &&
(a.inverted && c.attr({ width: a.plotWidth, height: a.plotHeight }),
c.animate({
translateX: o(d && d.left, a.plotLeft),
translateY: o(e && e.top, a.plotTop),
}));
this.translate();
this.setTooltipPoints(!0);
this.render();
b && z(this, 'updatedData');
},
setState: function (a) {
var b = this.options,
c = this.graph,
d = this.graphNeg,
e = b.states,
b = b.lineWidth,
a = a || '';
if (this.state !== a)
(this.state = a),
(e[a] && e[a].enabled === !1) ||
(a && (b = e[a].lineWidth || b + 1),
c && !c.dashstyle && ((a = { 'stroke-width': b }), c.attr(a), d && d.attr(a)));
},
setVisible: function (a, b) {
var c = this,
d = c.chart,
e = c.legendItem,
f,
g = d.options.chart.ignoreHiddenSeries,
h = c.visible;
f = (c.visible = a = c.userOptions.visible = a === w ? !h : a) ? 'show' : 'hide';
n(['group', 'dataLabelsGroup', 'markerGroup', 'tracker'], function (a) {
if (c[a]) c[a][f]();
});
if (d.hoverSeries === c) c.onMouseOut();
e && d.legend.colorizeItem(c, a);
c.isDirty = !0;
c.options.stacking &&
n(d.series, function (a) {
if (a.options.stacking && a.visible) a.isDirty = !0;
});
n(c.linkedSeries, function (b) {
b.setVisible(a, !1);
});
if (g) d.isDirtyBox = !0;
b !== !1 && d.redraw();
z(c, f);
},
show: function () {
this.setVisible(!0);
},
hide: function () {
this.setVisible(!1);
},
select: function (a) {
this.selected = a = a === w ? !this.selected : a;
if (this.checkbox) this.checkbox.checked = a;
z(this, a ? 'select' : 'unselect');
},
drawTracker: function () {
var a = this,
b = a.options,
c = b.trackByArea,
d = [].concat(c ? a.areaPath : a.graphPath),
e = d.length,
f = a.chart,
g = f.pointer,
h = f.renderer,
i = f.options.tooltip.snap,
j = a.tracker,
k = b.cursor,
l = k && { cursor: k },
k = a.singlePoints,
m,
p = function () {
if (f.hoverSeries !== a) a.onMouseOver();
};
if (e && !c)
for (m = e + 1; m--; )
d[m] === 'M' && d.splice(m + 1, 0, d[m + 1] - i, d[m + 2], 'L'),
((m && d[m] === 'M') || m === e) && d.splice(m, 0, 'L', d[m - 2] + i, d[m - 1]);
for (m = 0; m < k.length; m++)
(e = k[m]), d.push('M', e.plotX - i, e.plotY, 'L', e.plotX + i, e.plotY);
j
? j.attr({ d: d })
: ((a.tracker = h
.path(d)
.attr({
'stroke-linejoin': 'round',
visibility: a.visible ? 'visible' : 'hidden',
stroke: Qb,
fill: c ? Qb : S,
'stroke-width': b.lineWidth + (c ? 0 : 2 * i),
zIndex: 2,
})
.add(a.group)),
n([a.tracker, a.markerGroup], function (a) {
a.addClass('highcharts-tracker')
.on('mouseover', p)
.on('mouseout', function (a) {
g.onTrackerMouseOut(a);
})
.css(l);
if (ib) a.on('touchstart', p);
}));
},
};
G = ha(Q);
W.line = G;
Y.area = x(X, { threshold: 0 });
G = ha(Q, {
type: 'area',
getSegments: function () {
var a = [],
b = [],
c = [],
d = this.xAxis,
e = this.yAxis,
f = e.stacks[this.stackKey],
g = {},
h,
i,
j = this.points,
k = this.options.connectNulls,
l,
m,
p;
if (this.options.stacking && !this.cropped) {
for (m = 0; m < j.length; m++) g[j[m].x] = j[m];
for (p in f) c.push(+p);
c.sort(function (a, b) {
return a - b;
});
n(c, function (a) {
if (!k || (g[a] && g[a].y !== null))
g[a]
? b.push(g[a])
: ((h = d.translate(a)),
(l = f[a].percent ? (f[a].total ? (f[a].cum * 100) / f[a].total : 0) : f[a].cum),
(i = e.toPixels(l, !0)),
b.push({ y: null, plotX: h, clientX: h, plotY: i, yBottom: i, onMouseOver: pa }));
});
b.length && a.push(b);
} else Q.prototype.getSegments.call(this), (a = this.segments);
this.segments = a;
},
getSegmentPath: function (a) {
var b = Q.prototype.getSegmentPath.call(this, a),
c = [].concat(b),
d,
e = this.options;
d = b.length;
var f = this.yAxis.getThreshold(e.threshold),
g;
d === 3 && c.push('L', b[1], b[2]);
if (e.stacking && !this.closedStacks)
for (d = a.length - 1; d >= 0; d--)
(g = o(a[d].yBottom, f)),
d < a.length - 1 && e.step && c.push(a[d + 1].plotX, g),
c.push(a[d].plotX, g);
else this.closeSegment(c, a, f);
this.areaPath = this.areaPath.concat(c);
return b;
},
closeSegment: function (a, b, c) {
a.push('L', b[b.length - 1].plotX, c, 'L', b[0].plotX, c);
},
drawGraph: function () {
this.areaPath = [];
Q.prototype.drawGraph.apply(this);
var a = this,
b = this.areaPath,
c = this.options,
d = c.negativeColor,
e = c.negativeFillColor,
f = [['area', this.color, c.fillColor]];
(d || e) && f.push(['areaNeg', d, e]);
n(f, function (d) {
var e = d[0],
f = a[e];
f
? f.animate({ d: b })
: (a[e] = a.chart.renderer
.path(b)
.attr({ fill: o(d[2], ra(d[1]).setOpacity(o(c.fillOpacity, 0.75)).get()), zIndex: 0 })
.add(a.group));
});
},
drawLegendSymbol: function (a, b) {
b.legendSymbol = this.chart.renderer
.rect(0, a.baseline - 11, a.options.symbolWidth, 12, 2)
.attr({ zIndex: 3 })
.add(b.legendGroup);
},
});
W.area = G;
Y.spline = x(X);
F = ha(Q, {
type: 'spline',
getPointSpline: function (a, b, c) {
var d = b.plotX,
e = b.plotY,
f = a[c - 1],
g = a[c + 1],
h,
i,
j,
k;
if (f && g) {
a = f.plotY;
j = g.plotX;
var g = g.plotY,
l;
h = (1.5 * d + f.plotX) / 2.5;
i = (1.5 * e + a) / 2.5;
j = (1.5 * d + j) / 2.5;
k = (1.5 * e + g) / 2.5;
l = ((k - i) * (j - d)) / (j - h) + e - k;
i += l;
k += l;
i > a && i > e
? ((i = s(a, e)), (k = 2 * e - i))
: i < a && i < e && ((i = I(a, e)), (k = 2 * e - i));
k > g && k > e
? ((k = s(g, e)), (i = 2 * e - k))
: k < g && k < e && ((k = I(g, e)), (i = 2 * e - k));
b.rightContX = j;
b.rightContY = k;
}
c
? ((b = ['C', f.rightContX || f.plotX, f.rightContY || f.plotY, h || d, i || e, d, e]),
(f.rightContX = f.rightContY = null))
: (b = ['M', d, e]);
return b;
},
});
W.spline = F;
Y.areaspline = x(Y.area);
ma = G.prototype;
F = ha(F, {
type: 'areaspline',
closedStacks: !0,
getSegmentPath: ma.getSegmentPath,
closeSegment: ma.closeSegment,
drawGraph: ma.drawGraph,
drawLegendSymbol: ma.drawLegendSymbol,
});
W.areaspline = F;
Y.column = x(X, {
borderColor: '#FFFFFF',
borderWidth: 1,
borderRadius: 0,
groupPadding: 0.2,
marker: null,
pointPadding: 0.1,
minPointLength: 0,
cropThreshold: 50,
pointRange: null,
states: {
hover: { brightness: 0.1, shadow: !1 },
select: { color: '#C0C0C0', borderColor: '#000000', shadow: !1 },
},
dataLabels: { align: null, verticalAlign: null, y: null },
stickyTracking: !1,
threshold: 0,
});
F = ha(Q, {
type: 'column',
pointAttrToOptions: {
stroke: 'borderColor',
'stroke-width': 'borderWidth',
fill: 'color',
r: 'borderRadius',
},
cropShoulder: 0,
trackerGroups: ['group', 'dataLabelsGroup'],
negStacks: !0,
init: function () {
Q.prototype.init.apply(this, arguments);
var a = this,
b = a.chart;
b.hasRendered &&
n(b.series, function (b) {
if (b.type === a.type) b.isDirty = !0;
});
},
getColumnMetrics: function () {
var a = this,
b = a.options,
c = a.xAxis,
d = a.yAxis,
e = c.reversed,
f,
g = {},
h,
i = 0;
b.grouping === !1
? (i = 1)
: n(a.chart.series, function (b) {
var c = b.options,
e = b.yAxis;
if (b.type === a.type && b.visible && d.len === e.len && d.pos === e.pos)
c.stacking
? ((f = b.stackKey), g[f] === w && (g[f] = i++), (h = g[f]))
: c.grouping !== !1 && (h = i++),
(b.columnIndex = h);
});
var c = I(N(c.transA) * (c.ordinalSlope || b.pointRange || c.closestPointRange || 1), c.len),
j = c * b.groupPadding,
k = (c - 2 * j) / i,
l = b.pointWidth,
b = u(l) ? (k - l) / 2 : k * b.pointPadding,
l = o(l, k - 2 * b);
return (a.columnMetrics = {
width: l,
offset:
b +
(j + ((e ? i - (a.columnIndex || 0) : a.columnIndex) || 0) * k - c / 2) * (e ? -1 : 1),
});
},
translate: function () {
var a = this.chart,
b = this.options,
c = b.borderWidth,
d = this.yAxis,
e = (this.translatedThreshold = d.getThreshold(b.threshold)),
f = o(b.minPointLength, 5),
b = this.getColumnMetrics(),
g = b.width,
h = (this.barW = xa(s(g, 1 + 2 * c))),
i = (this.pointXOffset = b.offset),
j = -(c % 2 ? 0.5 : 0),
k = c % 2 ? 0.5 : 1;
a.renderer.isVML && a.inverted && (k += 1);
Q.prototype.translate.apply(this);
n(this.points, function (a) {
var b = o(a.yBottom, e),
c = I(s(-999 - b, a.plotY), d.len + 999 + b),
n = a.plotX + i,
u = h,
r = I(c, b),
w,
c = s(c, b) - r;
N(c) < f &&
f &&
((c = f),
(r = t(N(r - e) > f ? b - f : e - (d.translate(a.y, 0, 1, 0, 1) <= e ? f : 0))));
a.barX = n;
a.pointWidth = g;
b = N(n) < 0.5;
u = t(n + u) + j;
n = t(n) + j;
u -= n;
w = N(r) < 0.5;
c = t(r + c) + k;
r = t(r) + k;
c -= r;
b && ((n += 1), (u -= 1));
w && ((r -= 1), (c += 1));
a.shapeType = 'rect';
a.shapeArgs = { x: n, y: r, width: u, height: c };
});
},
getSymbol: pa,
drawLegendSymbol: G.prototype.drawLegendSymbol,
drawGraph: pa,
drawPoints: function () {
var a = this,
b = a.options,
c = a.chart.renderer,
d;
n(a.points, function (e) {
var f = e.plotY,
g = e.graphic;
if (f !== w && !isNaN(f) && e.y !== null)
(d = e.shapeArgs),
g
? (Wa(g), g.animate(x(d)))
: (e.graphic = c[e.shapeType](d)
.attr(e.pointAttr[e.selected ? 'select' : ''])
.add(a.group)
.shadow(b.shadow, null, b.stacking && !b.borderRadius));
else if (g) e.graphic = g.destroy();
});
},
drawTracker: function () {
var a = this,
b = a.chart,
c = b.pointer,
d = a.options.cursor,
e = d && { cursor: d },
f = function (c) {
var d = c.target,
e;
if (b.hoverSeries !== a) a.onMouseOver();
for (; d && !e; ) (e = d.point), (d = d.parentNode);
if (e !== w && e !== b.hoverPoint) e.onMouseOver(c);
};
n(a.points, function (a) {
if (a.graphic) a.graphic.element.point = a;
if (a.dataLabel) a.dataLabel.element.point = a;
});
if (!a._hasTracking)
n(a.trackerGroups, function (b) {
if (
a[b] &&
(a[b]
.addClass('highcharts-tracker')
.on('mouseover', f)
.on('mouseout', function (a) {
c.onTrackerMouseOut(a);
})
.css(e),
ib)
)
a[b].on('touchstart', f);
}),
(a._hasTracking = !0);
},
alignDataLabel: function (a, b, c, d, e) {
var f = this.chart,
g = f.inverted,
h = a.dlBox || a.shapeArgs,
i = a.below || a.plotY > o(this.translatedThreshold, f.plotSizeY),
j = o(c.inside, !!this.options.stacking);
if (
h &&
((d = x(h)),
g &&
(d = {
x: f.plotWidth - d.y - d.height,
y: f.plotHeight - d.x - d.width,
width: d.height,
height: d.width,
}),
!j)
)
g ? ((d.x += i ? 0 : d.width), (d.width = 0)) : ((d.y += i ? d.height : 0), (d.height = 0));
c.align = o(c.align, !g || j ? 'center' : i ? 'right' : 'left');
c.verticalAlign = o(c.verticalAlign, g || j ? 'middle' : i ? 'top' : 'bottom');
Q.prototype.alignDataLabel.call(this, a, b, c, d, e);
},
animate: function (a) {
var b = this.yAxis,
c = this.options,
d = this.chart.inverted,
e = {};
if (Z)
a
? ((e.scaleY = 0.001),
(a = I(b.pos + b.len, s(b.pos, b.toPixels(c.threshold)))),
d ? (e.translateX = a - b.len) : (e.translateY = a),
this.group.attr(e))
: ((e.scaleY = 1),
(e[d ? 'translateX' : 'translateY'] = b.pos),
this.group.animate(e, this.options.animation),
(this.animate = null));
},
remove: function () {
var a = this,
b = a.chart;
b.hasRendered &&
n(b.series, function (b) {
if (b.type === a.type) b.isDirty = !0;
});
Q.prototype.remove.apply(a, arguments);
},
});
W.column = F;
Y.bar = x(Y.column);
ma = ha(F, { type: 'bar', inverted: !0 });
W.bar = ma;
Y.scatter = x(X, {
lineWidth: 0,
tooltip: {
headerFormat: '{series.name}
',
pointFormat: 'x: {point.x}
y: {point.y}
',
followPointer: !0,
},
stickyTracking: !1,
});
ma = ha(Q, {
type: 'scatter',
sorted: !1,
requireSorting: !1,
noSharedTooltip: !0,
trackerGroups: ['markerGroup'],
drawTracker: F.prototype.drawTracker,
setTooltipPoints: pa,
});
W.scatter = ma;
Y.pie = x(X, {
borderColor: '#FFFFFF',
borderWidth: 1,
center: [null, null],
clip: !1,
colorByPoint: !0,
dataLabels: {
distance: 30,
enabled: !0,
formatter: function () {
return this.point.name;
},
},
ignoreHiddenPoint: !0,
legendType: 'point',
marker: null,
size: null,
showInLegend: !1,
slicedOffset: 10,
states: { hover: { brightness: 0.1, shadow: !1 } },
stickyTracking: !1,
tooltip: { followPointer: !0 },
});
X = {
type: 'pie',
isCartesian: !1,
pointClass: ha(Pa, {
init: function () {
Pa.prototype.init.apply(this, arguments);
var a = this,
b;
if (a.y < 0) a.y = null;
r(a, { visible: a.visible !== !1, name: o(a.name, 'Slice') });
b = function (b) {
a.slice(b.type === 'select');
};
J(a, 'select', b);
J(a, 'unselect', b);
return a;
},
setVisible: function (a) {
var b = this,
c = b.series,
d = c.chart,
e;
b.visible = b.options.visible = a = a === w ? !b.visible : a;
c.options.data[qa(b, c.data)] = b.options;
e = a ? 'show' : 'hide';
n(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (a) {
if (b[a]) b[a][e]();
});
b.legendItem && d.legend.colorizeItem(b, a);
if (!c.isDirty && c.options.ignoreHiddenPoint) (c.isDirty = !0), d.redraw();
},
slice: function (a, b, c) {
var d = this.series;
La(c, d.chart);
o(b, !0);
this.sliced = this.options.sliced = a = u(a) ? a : !this.sliced;
d.options.data[qa(this, d.data)] = this.options;
a = a ? this.slicedTranslation : { translateX: 0, translateY: 0 };
this.graphic.animate(a);
this.shadowGroup && this.shadowGroup.animate(a);
},
}),
requireSorting: !1,
noSharedTooltip: !0,
trackerGroups: ['group', 'dataLabelsGroup'],
pointAttrToOptions: { stroke: 'borderColor', 'stroke-width': 'borderWidth', fill: 'color' },
getColor: pa,
animate: function (a) {
var b = this,
c = b.points,
d = b.startAngleRad;
if (!a)
n(c, function (a) {
var c = a.graphic,
a = a.shapeArgs;
c &&
(c.attr({ r: b.center[3] / 2, start: d, end: d }),
c.animate({ r: a.r, start: a.start, end: a.end }, b.options.animation));
}),
(b.animate = null);
},
setData: function (a, b) {
Q.prototype.setData.call(this, a, !1);
this.processData();
this.generatePoints();
o(b, !0) && this.chart.redraw();
},
generatePoints: function () {
var a,
b = 0,
c,
d,
e,
f = this.options.ignoreHiddenPoint;
Q.prototype.generatePoints.call(this);
c = this.points;
d = c.length;
for (a = 0; a < d; a++) (e = c[a]), (b += f && !e.visible ? 0 : e.y);
this.total = b;
for (a = 0; a < d; a++)
(e = c[a]), (e.percentage = b > 0 ? (e.y / b) * 100 : 0), (e.total = b);
},
getCenter: function () {
var a = this.options,
b = this.chart,
c = 2 * (a.slicedOffset || 0),
d,
e = b.plotWidth - 2 * c,
f = b.plotHeight - 2 * c,
b = a.center,
a = [o(b[0], '50%'), o(b[1], '50%'), a.size || '100%', a.innerSize || 0],
g = I(e, f),
h;
return Na(a, function (a, b) {
h = /%$/.test(a);
d = b < 2 || (b === 2 && h);
return (h ? ([e, f, g, g][b] * C(a)) / 100 : a) + (d ? c : 0);
});
},
translate: function (a) {
this.generatePoints();
var b = 0,
c = this.options,
d = c.slicedOffset,
e = d + c.borderWidth,
f,
g,
h,
i = c.startAngle || 0,
j = (this.startAngleRad = (ya / 180) * (i - 90)),
i = (this.endAngleRad = (ya / 180) * ((c.endAngle || i + 360) - 90)) - j,
k = this.points,
l = c.dataLabels.distance,
c = c.ignoreHiddenPoint,
m,
n = k.length,
o;
if (!a) this.center = a = this.getCenter();
this.getX = function (b, c) {
h = R.asin((b - a[1]) / (a[2] / 2 + l));
return a[0] + (c ? -1 : 1) * V(h) * (a[2] / 2 + l);
};
for (m = 0; m < n; m++) {
o = k[m];
f = j + b * i;
if (!c || o.visible) b += o.percentage / 100;
g = j + b * i;
o.shapeType = 'arc';
o.shapeArgs = {
x: a[0],
y: a[1],
r: a[2] / 2,
innerR: a[3] / 2,
start: t(f * 1e3) / 1e3,
end: t(g * 1e3) / 1e3,
};
h = (g + f) / 2;
h > 0.75 * i && (h -= 2 * ya);
o.slicedTranslation = { translateX: t(V(h) * d), translateY: t(ca(h) * d) };
f = (V(h) * a[2]) / 2;
g = (ca(h) * a[2]) / 2;
o.tooltipPos = [a[0] + f * 0.7, a[1] + g * 0.7];
o.half = h < -ya / 2 || h > ya / 2 ? 1 : 0;
o.angle = h;
e = I(e, l / 2);
o.labelPos = [
a[0] + f + V(h) * l,
a[1] + g + ca(h) * l,
a[0] + f + V(h) * e,
a[1] + g + ca(h) * e,
a[0] + f,
a[1] + g,
l < 0 ? 'center' : o.half ? 'right' : 'left',
h,
];
}
},
setTooltipPoints: pa,
drawGraph: null,
drawPoints: function () {
var a = this,
b = a.chart.renderer,
c,
d,
e = a.options.shadow,
f,
g;
if (e && !a.shadowGroup) a.shadowGroup = b.g('shadow').add(a.group);
n(a.points, function (h) {
d = h.graphic;
g = h.shapeArgs;
f = h.shadowGroup;
if (e && !f) f = h.shadowGroup = b.g('shadow').add(a.shadowGroup);
c = h.sliced ? h.slicedTranslation : { translateX: 0, translateY: 0 };
f && f.attr(c);
d
? d.animate(r(g, c))
: (h.graphic = d =
b
.arc(g)
.setRadialReference(a.center)
.attr(h.pointAttr[h.selected ? 'select' : ''])
.attr({ 'stroke-linejoin': 'round' })
.attr(c)
.add(a.group)
.shadow(e, f));
h.visible === !1 && h.setVisible(!1);
});
},
sortByAngle: function (a, b) {
a.sort(function (a, d) {
return a.angle !== void 0 && (d.angle - a.angle) * b;
});
},
drawDataLabels: function () {
var a = this,
b = a.data,
c,
d = a.chart,
e = a.options.dataLabels,
f = o(e.connectorPadding, 10),
g = o(e.connectorWidth, 1),
h = d.plotWidth,
d = d.plotHeight,
i,
j,
k = o(e.softConnector, !0),
l = e.distance,
m = a.center,
p = m[2] / 2,
q = m[1],
u = l > 0,
r,
w,
v,
x,
C = [[], []],
y,
z,
E,
H,
B,
D = [0, 0, 0, 0],
I = function (a, b) {
return b.y - a.y;
};
if (a.visible && (e.enabled || a._hasPointLabels)) {
Q.prototype.drawDataLabels.apply(a);
n(b, function (a) {
a.dataLabel && C[a.half].push(a);
});
for (H = 0; !x && b[H]; )
(x = b[H] && b[H].dataLabel && (b[H].dataLabel.getBBox().height || 21)), H++;
for (H = 2; H--; ) {
var b = [],
K = [],
G = C[H],
J = G.length,
F;
a.sortByAngle(G, H - 0.5);
if (l > 0) {
for (B = q - p - l; B <= q + p + l; B += x) b.push(B);
w = b.length;
if (J > w) {
c = [].concat(G);
c.sort(I);
for (B = J; B--; ) c[B].rank = B;
for (B = J; B--; ) G[B].rank >= w && G.splice(B, 1);
J = G.length;
}
for (B = 0; B < J; B++) {
c = G[B];
v = c.labelPos;
c = 9999;
var O, M;
for (M = 0; M < w; M++) (O = N(b[M] - v[1])), O < c && ((c = O), (F = M));
if (F < B && b[B] !== null) F = B;
else for (w < J - B + F && b[B] !== null && (F = w - J + B); b[F] === null; ) F++;
K.push({ i: F, y: b[F] });
b[F] = null;
}
K.sort(I);
}
for (B = 0; B < J; B++) {
c = G[B];
v = c.labelPos;
r = c.dataLabel;
E = c.visible === !1 ? 'hidden' : 'visible';
c = v[1];
if (l > 0) {
if (
((w = K.pop()),
(F = w.i),
(z = w.y),
(c > z && b[F + 1] !== null) || (c < z && b[F - 1] !== null))
)
z = c;
} else z = c;
y = e.justify
? m[0] + (H ? -1 : 1) * (p + l)
: a.getX(F === 0 || F === b.length - 1 ? c : z, H);
r._attr = { visibility: E, align: v[6] };
r._pos = { x: y + e.x + ({ left: f, right: -f }[v[6]] || 0), y: z + e.y - 10 };
r.connX = y;
r.connY = z;
if (this.options.size === null)
(w = r.width),
y - w < f
? (D[3] = s(t(w - y + f), D[3]))
: y + w > h - f && (D[1] = s(t(y + w - h + f), D[1])),
z - x / 2 < 0
? (D[0] = s(t(-z + x / 2), D[0]))
: z + x / 2 > d && (D[2] = s(t(z + x / 2 - d), D[2]));
}
}
if (va(D) === 0 || this.verifyDataLabelOverflow(D))
this.placeDataLabels(),
u &&
g &&
n(this.points, function (b) {
i = b.connector;
v = b.labelPos;
if ((r = b.dataLabel) && r._pos)
(E = r._attr.visibility),
(y = r.connX),
(z = r.connY),
(j = k
? [
'M',
y + (v[6] === 'left' ? 5 : -5),
z,
'C',
y,
z,
2 * v[2] - v[4],
2 * v[3] - v[5],
v[2],
v[3],
'L',
v[4],
v[5],
]
: ['M', y + (v[6] === 'left' ? 5 : -5), z, 'L', v[2], v[3], 'L', v[4], v[5]]),
i
? (i.animate({ d: j }), i.attr('visibility', E))
: (b.connector = i =
a.chart.renderer
.path(j)
.attr({
'stroke-width': g,
stroke: e.connectorColor || b.color || '#606060',
visibility: E,
})
.add(a.group));
else if (i) b.connector = i.destroy();
});
}
},
verifyDataLabelOverflow: function (a) {
var b = this.center,
c = this.options,
d = c.center,
e = (c = c.minSize || 80),
f;
d[0] !== null
? (e = s(b[2] - s(a[1], a[3]), c))
: ((e = s(b[2] - a[1] - a[3], c)), (b[0] += (a[3] - a[1]) / 2));
d[1] !== null
? (e = s(I(e, b[2] - s(a[0], a[2])), c))
: ((e = s(I(e, b[2] - a[0] - a[2]), c)), (b[1] += (a[0] - a[2]) / 2));
e < b[2]
? ((b[2] = e),
this.translate(b),
n(this.points, function (a) {
if (a.dataLabel) a.dataLabel._pos = null;
}),
this.drawDataLabels())
: (f = !0);
return f;
},
placeDataLabels: function () {
n(this.points, function (a) {
var a = a.dataLabel,
b;
if (a)
(b = a._pos)
? (a.attr(a._attr), a[a.moved ? 'animate' : 'attr'](b), (a.moved = !0))
: a && a.attr({ y: -999 });
});
},
alignDataLabel: pa,
drawTracker: F.prototype.drawTracker,
drawLegendSymbol: G.prototype.drawLegendSymbol,
getSymbol: pa,
};
X = ha(Q, X);
W.pie = X;
r(Highcharts, {
Axis: db,
Chart: yb,
Color: ra,
Legend: eb,
Pointer: xb,
Point: Pa,
Tick: Ma,
Tooltip: wb,
Renderer: Va,
Series: Q,
SVGElement: wa,
SVGRenderer: Ha,
arrayMin: Ja,
arrayMax: va,
charts: Ga,
dateFormat: Xa,
format: Ca,
pathAnim: Ab,
getOptions: function () {
return M;
},
hasBidiBug: Ub,
isTouchDevice: Ob,
numberFormat: Aa,
seriesTypes: W,
setOptions: function (a) {
M = x(M, a);
Lb();
return M;
},
addEvent: J,
removeEvent: aa,
createElement: U,
discardElement: Ta,
css: K,
each: n,
extend: r,
map: Na,
merge: x,
pick: o,
splat: ja,
extendClass: ha,
pInt: C,
wrap: mb,
svg: Z,
canvas: $,
vml: !Z && !$,
product: 'Highcharts',
version: '3.0.6',
});
})();