|
8 | 8 |
|
9 | 9 | 'use strict';
|
10 | 10 |
|
11 |
| -var ScatterGl = require('../scattergl'); |
| 11 | +var kdtree = require('kdgrass'); |
12 | 12 | var isNumeric = require('fast-isnumeric');
|
| 13 | + |
| 14 | +var ScatterGl = require('../scattergl'); |
13 | 15 | var calcColorscales = require('../scatter/colorscale_calc');
|
14 | 16 | var Axes = require('../../plots/cartesian/axes');
|
15 |
| -var kdtree = require('kdgrass'); |
16 |
| -var Lib = require('../../lib'); |
| 17 | +var makeHoverPointText = require('../scatterpolar/hover').makeHoverPointText; |
| 18 | +var subTypes = require('../scatter/subtypes'); |
17 | 19 |
|
18 | 20 | function calc(container, trace) {
|
19 | 21 | var layout = container._fullLayout;
|
@@ -101,7 +103,9 @@ function plot(container, subplot, cdata) {
|
101 | 103 | if((options.errorX || options.errorY) && !scene.error2d) scene.error2d = true;
|
102 | 104 |
|
103 | 105 | // bring positions to selected/unselected options
|
104 |
| - options.selected.positions = options.unselected.positions = options.marker.positions; |
| 106 | + if(subTypes.hasMarkers(trace)) { |
| 107 | + options.selected.positions = options.unselected.positions = options.marker.positions; |
| 108 | + } |
105 | 109 |
|
106 | 110 | // save scene options batch
|
107 | 111 | scene.lineOptions.push(options.line);
|
@@ -130,67 +134,36 @@ function plot(container, subplot, cdata) {
|
130 | 134 | return ScatterGl.plot(container, subplot, cdata);
|
131 | 135 | }
|
132 | 136 |
|
133 |
| -// TODO dry up with ScatterPolar.hoverPoints |
134 | 137 | function hoverPoints(pointData, xval, yval, hovermode) {
|
135 |
| - var cd = pointData.cd, |
136 |
| - stash = cd[0].t, |
137 |
| - rArray = stash.r, |
138 |
| - thetaArray = stash.theta; |
| 138 | + var cd = pointData.cd; |
| 139 | + var stash = cd[0].t; |
| 140 | + var rArray = stash.r; |
| 141 | + var thetaArray = stash.theta; |
139 | 142 |
|
140 | 143 | var scatterPointData = ScatterGl.hoverPoints(pointData, xval, yval, hovermode);
|
141 |
| - |
142 | 144 | if(!scatterPointData || scatterPointData[0].index === false) return;
|
143 | 145 |
|
144 | 146 | var newPointData = scatterPointData[0];
|
145 | 147 |
|
146 |
| - // hovering on fill case |
147 |
| - // TODO do we need to constrain the scatter point data further (like for |
148 |
| - // ternary subplots) or not? |
149 | 148 | if(newPointData.index === undefined) {
|
150 | 149 | return scatterPointData;
|
151 | 150 | }
|
152 | 151 |
|
153 | 152 | var subplot = pointData.subplot;
|
| 153 | + var angularAxis = subplot.angularAxis; |
154 | 154 | var cdi = newPointData.cd[newPointData.index];
|
155 | 155 | var trace = newPointData.trace;
|
156 |
| - var radialAxis = subplot.radialAxis; |
157 |
| - var angularAxis = subplot.angularAxis; |
158 |
| - var hoverinfo = cdi.hi || trace.hoverinfo; |
159 |
| - var parts = hoverinfo.split('+'); |
160 |
| - var text = []; |
161 | 156 |
|
162 | 157 | // augment pointData with r/theta param
|
163 | 158 | cdi.r = rArray[newPointData.index];
|
164 | 159 | cdi.theta = thetaArray[newPointData.index];
|
165 | 160 | cdi.rad = angularAxis.c2rad(cdi.theta, trace.thetaunit);
|
166 | 161 |
|
167 |
| - var _rad = angularAxis.c2rad(cdi.theta, trace.thetaunit); |
168 |
| - |
169 | 162 | if(!subplot.isPtWithinSector(cdi)) return;
|
170 | 163 |
|
171 | 164 | newPointData.xLabelVal = undefined;
|
172 | 165 | newPointData.yLabelVal = undefined;
|
173 |
| - |
174 |
| - radialAxis._hovertitle = 'r'; |
175 |
| - angularAxis._hovertitle = 'θ'; |
176 |
| - |
177 |
| - // show theta value in unit of angular axis |
178 |
| - var theta; |
179 |
| - if(angularAxis.type === 'linear' && trace.thetaunit !== angularAxis.thetaunit) { |
180 |
| - theta = angularAxis.thetaunit === 'degrees' ? Lib.rad2deg(_rad) : _rad; |
181 |
| - } else { |
182 |
| - theta = cdi.theta; |
183 |
| - } |
184 |
| - |
185 |
| - function textPart(ax, val) { |
186 |
| - text.push(ax._hovertitle + ': ' + Axes.tickText(ax, val, 'hover').text); |
187 |
| - } |
188 |
| - |
189 |
| - if(parts.indexOf('all') !== -1) parts = ['r', 'theta']; |
190 |
| - if(parts.indexOf('r') !== -1) textPart(radialAxis, cdi.r); |
191 |
| - if(parts.indexOf('theta') !== -1) textPart(angularAxis, theta); |
192 |
| - |
193 |
| - newPointData.extraText = text.join('<br>'); |
| 166 | + newPointData.extraText = makeHoverPointText(cdi, trace, subplot); |
194 | 167 |
|
195 | 168 | return scatterPointData;
|
196 | 169 | }
|
|
0 commit comments