Skip to content

Commit

Permalink
Fixed #6103, reset zoom button not playing well with drill up button.
Browse files Browse the repository at this point in the history
  • Loading branch information
TorsteinHonsi committed Oct 17, 2017
1 parent 61feff1 commit 9e96937
Show file tree
Hide file tree
Showing 5 changed files with 339 additions and 1 deletion.
25 changes: 24 additions & 1 deletion js/modules/drilldown.src.js
Expand Up @@ -439,7 +439,8 @@ Chart.prototype.addSingleSeriesAsDrilldown = function (point, ddOptions) {
xMax: xAxis && xAxis.userMax,
yMin: yAxis && yAxis.userMin,
yMax: yAxis && yAxis.userMax
}
},
resetZoomButton: this.resetZoomButton
}, colorProp);

// Push it to the lookup array
Expand Down Expand Up @@ -481,6 +482,14 @@ Chart.prototype.applyDrilldown = function () {
}
});
}

// We have a reset zoom button. Hide it and detatch it from the chart. It
// is preserved to the layer config above.
if (this.resetZoomButton) {
this.resetZoomButton.hide();
delete this.resetZoomButton;
}

this.pointer.reset();
this.redraw();
this.showDrillUpButton();
Expand Down Expand Up @@ -612,6 +621,13 @@ Chart.prototype.drillUp = function () {
newSeries.xAxis.setExtremes(oldExtremes.xMin, oldExtremes.xMax, false);
newSeries.yAxis.setExtremes(oldExtremes.yMin, oldExtremes.yMax, false);
}

// We have a resetZoomButton tucked away for this level. Attatch
// it to the chart and show it.
if (level.resetZoomButton) {
chart.resetZoomButton = level.resetZoomButton;
chart.resetZoomButton.show();
}
}
}

Expand All @@ -632,6 +648,13 @@ Chart.prototype.drillUp = function () {
this.ddDupes.length = []; // #3315
};

// Don't show the reset button if we already are displaying the drillUp button.
wrap(Chart.prototype, 'showResetZoom', function (proceed) {
if (!this.drillUpButton) {
proceed.apply(this, Array.prototype.slice.call(arguments, 1));
}
});


/**
* When drilling up, keep the upper series invisible until the lower series has
Expand Down
1 change: 1 addition & 0 deletions samples/.eslintrc
Expand Up @@ -14,6 +14,7 @@ globals:
QUnit: true
temperatures: true # pointinterval-pointstart demo
usdeur: true
TestController: true

rules:
consistent-return: 0
Expand Down
6 changes: 6 additions & 0 deletions samples/unit-tests/drilldown/resetzoom/demo.details
@@ -0,0 +1,6 @@
---
resources:
- https://code.jquery.com/qunit/qunit-2.0.1.js
- https://code.jquery.com/qunit/qunit-2.0.1.css
js_wrap: b
...
8 changes: 8 additions & 0 deletions samples/unit-tests/drilldown/resetzoom/demo.html
@@ -0,0 +1,8 @@
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/drilldown.js"></script>


<div id="qunit"></div>
<div id="qunit-fixture"></div>

<div id="container" style="width: 600px; margin: 0 auto"></div>
300 changes: 300 additions & 0 deletions samples/unit-tests/drilldown/resetzoom/demo.js
@@ -0,0 +1,300 @@
QUnit.test('activeDataLabelStyle', function (assert) {
var chart = Highcharts.chart('container', {
chart: {
type: 'column',
zoomType: 'x'
},
xAxis: {
type: 'category',
minRange: 1
},
series: [{
name: 'Brands',
colorByPoint: true,
data: [{
name: 'Microsoft Internet Explorer',
y: 56.33,
drilldown: 'Microsoft Internet Explorer'
}, {
name: 'Chrome',
y: 24.03,
drilldown: 'Chrome'
}, {
name: 'Firefox',
y: 10.38,
drilldown: 'Firefox'
}, {
name: 'Safari',
y: 4.77,
drilldown: 'Safari'
}, {
name: 'Opera',
y: 0.91,
drilldown: 'Opera'
}, {
name: 'Proprietary or Undetectable',
y: 0.2,
drilldown: null
}]
}],
drilldown: {
series: [{
name: 'Microsoft Internet Explorer',
id: 'Microsoft Internet Explorer',
data: [
[
'v11.0',
24.13
],
[
'v8.0',
17.2
],
[
'v9.0',
8.11
],
[
'v10.0',
5.33
],
[
'v6.0',
1.06
],
[
'v7.0',
0.5
]
]
}, {
name: 'Chrome',
id: 'Chrome',
data: [
[
'v40.0',
5
],
[
'v41.0',
4.32
],
[
'v42.0',
3.68
],
[
'v39.0',
2.96
],
[
'v36.0',
2.53
],
[
'v43.0',
1.45
],
[
'v31.0',
1.24
],
[
'v35.0',
0.85
],
[
'v38.0',
0.6
],
[
'v32.0',
0.55
],
[
'v37.0',
0.38
],
[
'v33.0',
0.19
],
[
'v34.0',
0.14
],
[
'v30.0',
0.14
]
]
}, {
name: 'Firefox',
id: 'Firefox',
data: [
[
'v35',
2.76
],
[
'v36',
2.32
],
[
'v37',
2.31
],
[
'v34',
1.27
],
[
'v38',
1.02
],
[
'v31',
0.33
],
[
'v33',
0.22
],
[
'v32',
0.15
]
]
}, {
name: 'Safari',
id: 'Safari',
data: [
[
'v8.0',
2.56
],
[
'v7.1',
0.77
],
[
'v5.1',
0.42
],
[
'v5.0',
0.3
],
[
'v6.1',
0.29
],
[
'v7.0',
0.26
],
[
'v6.2',
0.17
]
]
}, {
name: 'Opera',
id: 'Opera',
data: [
[
'v12.x',
0.34
],
[
'v28',
0.24
],
[
'v27',
0.17
],
[
'v29',
0.16
]
]
}]
}
});

var controller = new TestController(chart);


assert.strictEqual(
chart.resetZoomButton,
undefined,
'No zoom button'
);

assert.strictEqual(
chart.drillUpButton,
undefined,
'No drillUp button'
);

// Zoom
controller.mousedown(300, 200);
controller.mousemove(200, 200);
controller.mouseup();

assert.strictEqual(
typeof chart.resetZoomButton,
'object',
'We have a zoom button'
);

// Drill down
chart.series[0].points[0].doDrilldown();
assert.strictEqual(
typeof chart.resetZoomButton,
'undefined',
'Zoom button removed on new level'
);

assert.strictEqual(
typeof chart.drillUpButton,
'object',
'We have a drillUp button'
);


// Zoom again on second level
controller.mousedown(300, 200);
controller.mousemove(200, 200);
controller.mouseup();

assert.strictEqual(
typeof chart.drillUpButton,
'object',
'We have a drillUp button'
);

// Drill up
chart.drillUp();
assert.strictEqual(
typeof chart.drillUpButton,
'undefined',
'We are back on top level, no drillUpButton'
);
assert.strictEqual(
typeof chart.resetZoomButton,
'object',
'We still have a resetZoomButton'
);

// Click reset zoom
chart.resetZoomButton.element.onclick();
assert.strictEqual(
typeof chart.resetZoomButton,
'undefined',
'resetZoomButton removed'
);


});

0 comments on commit 9e96937

Please sign in to comment.