You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
7.6 KiB
237 lines
7.6 KiB
(function (e) {
|
|
function q(b, a, c) {
|
|
return (
|
|
'rgba(' +
|
|
[
|
|
Math.round(b[0] + (a[0] - b[0]) * c),
|
|
Math.round(b[1] + (a[1] - b[1]) * c),
|
|
Math.round(b[2] + (a[2] - b[2]) * c),
|
|
b[3] + (a[3] - b[3]) * c,
|
|
].join(',') +
|
|
')'
|
|
);
|
|
}
|
|
var m = function () {},
|
|
j = e.getOptions(),
|
|
g = e.each,
|
|
n = e.extend,
|
|
o = e.wrap,
|
|
h = e.Chart,
|
|
i = e.seriesTypes,
|
|
k = i.pie,
|
|
l = i.column,
|
|
r = HighchartsAdapter.fireEvent;
|
|
n(j.lang, { drillUpText: '◁ Back to {series.name}' });
|
|
j.drilldown = {
|
|
activeAxisLabelStyle: {
|
|
cursor: 'pointer',
|
|
color: '#039',
|
|
fontWeight: 'bold',
|
|
textDecoration: 'underline',
|
|
},
|
|
activeDataLabelStyle: {
|
|
cursor: 'pointer',
|
|
color: '#039',
|
|
fontWeight: 'bold',
|
|
textDecoration: 'underline',
|
|
},
|
|
animation: { duration: 500 },
|
|
drillUpButton: { position: { align: 'right', x: -10, y: 10 } },
|
|
};
|
|
e.SVGRenderer.prototype.Element.prototype.fadeIn = function () {
|
|
this.attr({ opacity: 0.1, visibility: 'visible' }).animate({ opacity: 1 }, { duration: 250 });
|
|
};
|
|
h.prototype.drilldownLevels = [];
|
|
h.prototype.addSeriesAsDrilldown = function (b, a) {
|
|
var c = b.series,
|
|
d = c.xAxis,
|
|
f = c.yAxis,
|
|
e;
|
|
e = b.color || c.color;
|
|
var g,
|
|
a = n({ color: e }, a);
|
|
g = HighchartsAdapter.inArray(this, c.points);
|
|
this.drilldownLevels.push({
|
|
seriesOptions: c.userOptions,
|
|
shapeArgs: b.shapeArgs,
|
|
bBox: b.graphic.getBBox(),
|
|
color: e,
|
|
newSeries: a,
|
|
pointOptions: c.options.data[g],
|
|
pointIndex: g,
|
|
oldExtremes: {
|
|
xMin: d && d.userMin,
|
|
xMax: d && d.userMax,
|
|
yMin: f && f.userMin,
|
|
yMax: f && f.userMax,
|
|
},
|
|
});
|
|
e = this.addSeries(a, !1);
|
|
if (d) (d.oldPos = d.pos), (d.userMin = d.userMax = null), (f.userMin = f.userMax = null);
|
|
if (c.type === e.type) (e.animate = e.animateDrilldown || m), (e.options.animation = !0);
|
|
c.remove(!1);
|
|
this.redraw();
|
|
this.showDrillUpButton();
|
|
};
|
|
h.prototype.getDrilldownBackText = function () {
|
|
return this.options.lang.drillUpText.replace(
|
|
'{series.name}',
|
|
this.drilldownLevels[this.drilldownLevels.length - 1].seriesOptions.name,
|
|
);
|
|
};
|
|
h.prototype.showDrillUpButton = function () {
|
|
var b = this,
|
|
a = this.getDrilldownBackText(),
|
|
c = b.options.drilldown.drillUpButton;
|
|
this.drillUpButton
|
|
? this.drillUpButton.attr({ text: a }).align()
|
|
: (this.drillUpButton = this.renderer
|
|
.button(a, null, null, function () {
|
|
b.drillUp();
|
|
})
|
|
.attr(n({ align: c.position.align, zIndex: 9 }, c.theme))
|
|
.add()
|
|
.align(c.position, !1, c.relativeTo || 'plotBox'));
|
|
};
|
|
h.prototype.drillUp = function () {
|
|
var b = this.drilldownLevels.pop(),
|
|
a = this.series[0],
|
|
c = b.oldExtremes,
|
|
d = this.addSeries(b.seriesOptions, !1);
|
|
r(this, 'drillup', { seriesOptions: b.seriesOptions });
|
|
if (d.type === a.type)
|
|
(d.drilldownLevel = b),
|
|
(d.animate = d.animateDrillupTo || m),
|
|
(d.options.animation = !0),
|
|
a.animateDrillupFrom && a.animateDrillupFrom(b);
|
|
a.remove(!1);
|
|
d.xAxis && (d.xAxis.setExtremes(c.xMin, c.xMax, !1), d.yAxis.setExtremes(c.yMin, c.yMax, !1));
|
|
this.redraw();
|
|
this.drilldownLevels.length === 0
|
|
? (this.drillUpButton = this.drillUpButton.destroy())
|
|
: this.drillUpButton.attr({ text: this.getDrilldownBackText() }).align();
|
|
};
|
|
k.prototype.animateDrilldown = function (b) {
|
|
var a = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1],
|
|
c = this.chart.options.drilldown.animation,
|
|
d = a.shapeArgs,
|
|
f = d.start,
|
|
s = (d.end - f) / this.points.length,
|
|
h = e.Color(a.color).rgba;
|
|
b ||
|
|
g(this.points, function (a, b) {
|
|
var g = e.Color(a.color).rgba;
|
|
a.graphic.attr(e.merge(d, { start: f + b * s, end: f + (b + 1) * s })).animate(
|
|
a.shapeArgs,
|
|
e.merge(c, {
|
|
step: function (a, d) {
|
|
d.prop === 'start' && this.attr({ fill: q(h, g, d.pos) });
|
|
},
|
|
}),
|
|
);
|
|
});
|
|
};
|
|
k.prototype.animateDrillupTo = l.prototype.animateDrillupTo = function (b) {
|
|
if (!b) {
|
|
var a = this,
|
|
c = a.drilldownLevel;
|
|
g(this.points, function (a) {
|
|
a.graphic.hide();
|
|
a.dataLabel && a.dataLabel.hide();
|
|
a.connector && a.connector.hide();
|
|
});
|
|
setTimeout(function () {
|
|
g(a.points, function (a, b) {
|
|
var e = b === c.pointIndex ? 'show' : 'fadeIn';
|
|
a.graphic[e]();
|
|
if (a.dataLabel) a.dataLabel[e]();
|
|
if (a.connector) a.connector[e]();
|
|
});
|
|
}, Math.max(this.chart.options.drilldown.animation.duration - 50, 0));
|
|
this.animate = m;
|
|
}
|
|
};
|
|
l.prototype.animateDrilldown = function (b) {
|
|
var a = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1].shapeArgs,
|
|
c = this.chart.options.drilldown.animation;
|
|
b ||
|
|
((a.x += this.xAxis.oldPos - this.xAxis.pos),
|
|
g(this.points, function (b) {
|
|
b.graphic.attr(a).animate(b.shapeArgs, c);
|
|
}));
|
|
};
|
|
l.prototype.animateDrillupFrom = k.prototype.animateDrillupFrom = function (b) {
|
|
var a = this.chart.options.drilldown.animation,
|
|
c = this.group;
|
|
delete this.group;
|
|
g(this.points, function (d) {
|
|
var f = d.graphic,
|
|
g = e.Color(d.color).rgba;
|
|
delete d.graphic;
|
|
f.animate(
|
|
b.shapeArgs,
|
|
e.merge(a, {
|
|
step: function (a, c) {
|
|
c.prop === 'start' && this.attr({ fill: q(g, e.Color(b.color).rgba, c.pos) });
|
|
},
|
|
complete: function () {
|
|
f.destroy();
|
|
c && (c = c.destroy());
|
|
},
|
|
}),
|
|
);
|
|
});
|
|
};
|
|
e.Point.prototype.doDrilldown = function () {
|
|
for (var b = this.series.chart, a = b.options.drilldown, c = a.series.length, d; c-- && !d; )
|
|
a.series[c].id === this.drilldown && (d = a.series[c]);
|
|
r(b, 'drilldown', { point: this, seriesOptions: d });
|
|
d && b.addSeriesAsDrilldown(this, d);
|
|
};
|
|
o(e.Point.prototype, 'init', function (b, a, c, d) {
|
|
var f = b.call(this, a, c, d),
|
|
b = a.chart,
|
|
a = (a = a.xAxis && a.xAxis.ticks[d]) && a.label;
|
|
if (f.drilldown) {
|
|
if (
|
|
(e.addEvent(f, 'click', function () {
|
|
f.doDrilldown();
|
|
}),
|
|
a)
|
|
) {
|
|
if (!a._basicStyle) a._basicStyle = a.element.getAttribute('style');
|
|
a.addClass('highcharts-drilldown-axis-label')
|
|
.css(b.options.drilldown.activeAxisLabelStyle)
|
|
.on('click', function () {
|
|
f.doDrilldown && f.doDrilldown();
|
|
});
|
|
}
|
|
} else a && a._basicStyle && a.element.setAttribute('style', a._basicStyle);
|
|
return f;
|
|
});
|
|
o(e.Series.prototype, 'drawDataLabels', function (b) {
|
|
var a = this.chart.options.drilldown.activeDataLabelStyle;
|
|
b.call(this);
|
|
g(this.points, function (b) {
|
|
if (b.drilldown && b.dataLabel)
|
|
b.dataLabel
|
|
.attr({ class: 'highcharts-drilldown-data-label' })
|
|
.css(a)
|
|
.on('click', function () {
|
|
b.doDrilldown();
|
|
});
|
|
});
|
|
});
|
|
l.prototype.supportsDrilldown = !0;
|
|
k.prototype.supportsDrilldown = !0;
|
|
var p,
|
|
j = function (b) {
|
|
b.call(this);
|
|
g(this.points, function (a) {
|
|
a.drilldown &&
|
|
a.graphic &&
|
|
a.graphic.attr({ class: 'highcharts-drilldown-point' }).css({ cursor: 'pointer' });
|
|
});
|
|
};
|
|
for (p in i) i[p].prototype.supportsDrilldown && o(i[p].prototype, 'drawTracker', j);
|
|
})(Highcharts);
|
|
|