|
9 | 9 | 'use strict';
|
10 | 10 |
|
11 | 11 | var scatterHover = require('../scatter/hover');
|
| 12 | +var Axes = require('../../plots/cartesian/axes'); |
| 13 | +var Lib = require('../../lib'); |
12 | 14 |
|
13 | 15 | module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
|
14 | 16 | var scatterPointData = scatterHover(pointData, xval, yval, hovermode);
|
15 | 17 | if(!scatterPointData || scatterPointData[0].index === false) return;
|
16 | 18 |
|
17 | 19 | var newPointData = scatterPointData[0];
|
18 | 20 |
|
| 21 | + // hovering on fill case |
| 22 | + // TODO do we need to constrain the scatter point data further (like for |
| 23 | + // ternary subplots) or not? |
| 24 | + if(newPointData.index === undefined) { |
| 25 | + return scatterPointData; |
| 26 | + } |
| 27 | + |
| 28 | + var subplot = pointData.subplot; |
| 29 | + var cdi = newPointData.cd[newPointData.index]; |
| 30 | + |
| 31 | + if(!subplot.isPtWithinSector(cdi)) return; |
| 32 | + |
| 33 | + newPointData.xLabelVal = undefined; |
| 34 | + newPointData.yLabelVal = undefined; |
| 35 | + |
| 36 | + var trace = newPointData.trace; |
| 37 | + var radialAxis = subplot.radialAxis; |
| 38 | + var angularAxis = subplot.angularAxis; |
| 39 | + var hoverinfo = cdi.hi || trace.hoverinfo; |
| 40 | + var parts = hoverinfo.split('+'); |
| 41 | + var text = []; |
| 42 | + var rad = angularAxis._c2rad(cdi.theta, trace.thetaunit); |
| 43 | + |
| 44 | + radialAxis._hovertitle = 'r'; |
| 45 | + angularAxis._hovertitle = 'θ'; |
| 46 | + |
| 47 | + // show theta value in unit of angular axis |
| 48 | + var theta; |
| 49 | + if(angularAxis.type === 'linear' && trace.thetaunit !== angularAxis.thetaunit) { |
| 50 | + theta = angularAxis.thetaunit === 'degrees' ? Lib.rad2deg(rad) : rad; |
| 51 | + } else { |
| 52 | + theta = cdi.theta; |
| 53 | + } |
| 54 | + |
| 55 | + function textPart(ax, val) { |
| 56 | + text.push(ax._hovertitle + ': ' + Axes.tickText(ax, val, 'hover').text); |
| 57 | + } |
| 58 | + |
| 59 | + if(parts.indexOf('all') !== -1) parts = ['r', 'theta']; |
| 60 | + if(parts.indexOf('r') !== -1) textPart(radialAxis, cdi.r); |
| 61 | + if(parts.indexOf('theta') !== -1) textPart(angularAxis, theta); |
| 62 | + |
| 63 | + newPointData.extraText = text.join('<br>'); |
| 64 | + |
19 | 65 | return scatterPointData;
|
20 | 66 | };
|
0 commit comments