Skip to content

Commit 94a164e

Browse files
committed
display start and end periods on hover
1 parent 05bb135 commit 94a164e

File tree

4 files changed

+66
-6
lines changed

4 files changed

+66
-6
lines changed

src/components/fx/hover.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ var Drawing = require('../drawing');
2020
var Color = require('../color');
2121
var dragElement = require('../dragelement');
2222
var Axes = require('../../plots/cartesian/axes');
23+
var instanceOrPeriod = require('../../plots/cartesian/instance_or_period');
2324
var Registry = require('../../registry');
2425

2526
var helpers = require('./helpers');
@@ -1589,11 +1590,17 @@ function cleanPoint(d, hovermode) {
15891590

15901591
// and convert the x and y label values into formatted text
15911592
if(d.xLabelVal !== undefined) {
1592-
d.xLabel = ('xLabel' in d) ? d.xLabel : Axes.hoverLabelText(d.xa, d.xLabelVal);
1593+
if(!('xLabel' in d)) {
1594+
var xx = instanceOrPeriod(d, trace, 'x');
1595+
d.xLabel = Axes.hoverLabelText(d.xa, xx[0], xx[1]);
1596+
}
15931597
d.xVal = d.xa.c2d(d.xLabelVal);
15941598
}
15951599
if(d.yLabelVal !== undefined) {
1596-
d.yLabel = ('yLabel' in d) ? d.yLabel : Axes.hoverLabelText(d.ya, d.yLabelVal);
1600+
if(!('yLabel' in d)) {
1601+
var yy = instanceOrPeriod(d, trace, 'y');
1602+
d.yLabel = Axes.hoverLabelText(d.ya, yy[0], yy[1]);
1603+
}
15971604
d.yVal = d.ya.c2d(d.yLabelVal);
15981605
}
15991606

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Copyright 2012-2020, Plotly, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
'use strict';
10+
11+
var alignPeriod = require('./align_period');
12+
13+
module.exports = function instanceOrPeriod(d, trace, axLetter) {
14+
var ax = d[axLetter + 'a'];
15+
if(trace[axLetter + 'period']) {
16+
var vals = [
17+
d[axLetter + 'LabelVal']
18+
];
19+
20+
var mockTrace = {};
21+
mockTrace[axLetter + 'period'] = trace[axLetter + 'period'];
22+
mockTrace[axLetter + 'period0'] = trace[axLetter + 'period0'];
23+
var alignment = axLetter + 'periodalignment';
24+
25+
mockTrace[alignment] = 'start';
26+
var startTime = alignPeriod(mockTrace, ax, axLetter, vals)[0];
27+
28+
mockTrace[alignment] = 'end';
29+
var endTime = alignPeriod(mockTrace, ax, axLetter, vals)[0];
30+
31+
return [startTime, endTime];
32+
}
33+
return [d[axLetter + 'LabelVal']];
34+
};

src/traces/histogram/hover.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
var barHover = require('../bar/hover').hoverPoints;
1313
var hoverLabelText = require('../../plots/cartesian/axes').hoverLabelText;
14+
var instanceOrPeriod = require('../../plots/cartesian/instance_or_period');
1415

1516
module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
1617
var pts = barHover(pointData, xval, yval, hovermode);
@@ -23,8 +24,11 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
2324

2425
if(!trace.cumulative.enabled) {
2526
var posLetter = trace.orientation === 'h' ? 'y' : 'x';
26-
27-
pointData[posLetter + 'Label'] = hoverLabelText(pointData[posLetter + 'a'], di.ph0, di.ph1);
27+
var pp = instanceOrPeriod(pointData, trace, posLetter);
28+
var ax = pointData[posLetter + 'a'];
29+
var label = hoverLabelText(ax, di.ph0, di.ph1);
30+
if(pp[1] !== undefined) label += ' - ' + hoverLabelText(ax, pp[0], pp[1]);
31+
pointData[posLetter + 'Label'] = label;
2832
}
2933

3034
return pts;

src/traces/histogram2d/hover.js

+17-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
var heatmapHover = require('../heatmap/hover');
1313
var hoverLabelText = require('../../plots/cartesian/axes').hoverLabelText;
14+
var instanceOrPeriod = require('../../plots/cartesian/instance_or_period');
1415

1516
module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLayer, contour) {
1617
var pts = heatmapHover(pointData, xval, yval, hovermode, hoverLayer, contour);
@@ -22,11 +23,25 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, hoverLay
2223
var ny = indices[0];
2324
var nx = indices[1];
2425
var cd0 = pointData.cd[0];
26+
var trace = cd0.trace;
2527
var xRange = cd0.xRanges[nx];
2628
var yRange = cd0.yRanges[ny];
2729

28-
pointData.xLabel = hoverLabelText(pointData.xa, xRange[0], xRange[1]);
29-
pointData.yLabel = hoverLabelText(pointData.ya, yRange[0], yRange[1]);
30+
var x0 = xRange[0];
31+
var x1 = xRange[1];
32+
var xx = instanceOrPeriod(pointData, trace, 'x');
33+
var xa = pointData.xa;
34+
var xLabel = hoverLabelText(xa, x0, x1);
35+
if(xx[1] !== undefined) xLabel = hoverLabelText(xa, xx[0], xx[1]);
36+
pointData.xLabel = xLabel;
37+
38+
var y0 = yRange[0];
39+
var y1 = yRange[1];
40+
var yy = instanceOrPeriod(pointData, trace, 'y');
41+
var ya = pointData.ya;
42+
var yLabel = hoverLabelText(ya, y0, y1);
43+
if(yy[1] !== undefined) yLabel = hoverLabelText(ya, yy[0], yy[1]);
44+
pointData.yLabel = yLabel;
3045

3146
return pts;
3247
};

0 commit comments

Comments
 (0)