|
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