@@ -198,86 +198,91 @@ module.exports = function draw(gd) {
198
198
// legend, background and border, scroll box and scroll bar
199
199
Lib . setTranslate ( legend , lx , ly ) ;
200
200
201
- bg . attr ( {
202
- width : legendWidth - opts . borderwidth ,
203
- height : legendHeight - opts . borderwidth ,
204
- x : opts . borderwidth / 2 ,
205
- y : opts . borderwidth / 2
206
- } ) ;
207
-
208
- var scrollPosition = scrollBox . attr ( 'data-scroll' ) || 0 ;
209
-
210
- Lib . setTranslate ( scrollBox , 0 , scrollPosition ) ;
201
+ var scrollBarYMax = legendHeight -
202
+ constants . scrollBarHeight -
203
+ 2 * constants . scrollBarMargin ,
204
+ scrollBoxYMax = opts . height - legendHeight ,
205
+ scrollBarY ,
206
+ scrollBoxY ;
207
+
208
+ if ( opts . height <= legendHeight || gd . _context . staticPlot ) {
209
+ // if scrollbar should not be shown.
210
+ bg . attr ( {
211
+ width : legendWidth - opts . borderwidth ,
212
+ height : legendHeight - opts . borderwidth ,
213
+ x : opts . borderwidth / 2 ,
214
+ y : opts . borderwidth / 2
215
+ } ) ;
211
216
212
- clipPath . select ( 'rect' ) . attr ( {
213
- width : legendWidth - 2 * opts . borderwidth ,
214
- height : legendHeight - 2 * opts . borderwidth ,
215
- x : opts . borderwidth - scrollPosition ,
216
- y : opts . borderwidth
217
- } ) ;
217
+ Lib . setTranslate ( scrollBox , 0 , 0 ) ;
218
218
219
- scrollBox . call ( Drawing . setClipUrl , clipId ) ;
219
+ clipPath . select ( 'rect' ) . attr ( {
220
+ width : legendWidth - 2 * opts . borderwidth ,
221
+ height : legendHeight - 2 * opts . borderwidth ,
222
+ x : opts . borderwidth ,
223
+ y : opts . borderwidth
224
+ } ) ;
220
225
221
- // If scrollbar should be shown.
222
- if ( opts . height - legendHeight > 0 && ! gd . _context . staticPlot ) {
226
+ scrollBox . call ( Drawing . setClipUrl , clipId ) ;
227
+ }
228
+ else {
229
+ scrollBarY = constants . scrollBarMargin ,
230
+ scrollBoxY = scrollBox . attr ( 'data-scroll' ) || 0 ;
223
231
224
232
// increase the background and clip-path width
225
233
// by the scrollbar width and margin
226
234
bg . attr ( {
227
235
width : legendWidth -
228
236
2 * opts . borderwidth +
229
237
constants . scrollBarWidth +
230
- constants . scrollBarMargin
238
+ constants . scrollBarMargin ,
239
+ height : legendHeight - opts . borderwidth ,
240
+ x : opts . borderwidth / 2 ,
241
+ y : opts . borderwidth / 2
231
242
} ) ;
232
243
233
244
clipPath . select ( 'rect' ) . attr ( {
234
245
width : legendWidth -
235
246
2 * opts . borderwidth +
236
247
constants . scrollBarWidth +
237
- constants . scrollBarMargin
248
+ constants . scrollBarMargin ,
249
+ height : legendHeight - 2 * opts . borderwidth ,
250
+ x : opts . borderwidth ,
251
+ y : opts . borderwidth - scrollBoxY
238
252
} ) ;
239
253
240
- if ( gd . firstRender ) {
241
- // Move scrollbar to starting position
242
- scrollHandler ( constants . scrollBarMargin , 0 ) ;
243
- }
254
+ scrollBox . call ( Drawing . setClipUrl , clipId ) ;
244
255
245
- var scrollBarYMax = legendHeight -
246
- constants . scrollBarHeight -
247
- 2 * constants . scrollBarMargin ,
248
- scrollBoxYMax = opts . height - legendHeight ,
249
- scrollBarY = constants . scrollBarMargin ,
250
- scrollBoxY = 0 ;
251
-
252
- scrollHandler ( scrollBarY , scrollBoxY ) ;
253
-
254
- legend . on ( 'wheel' , null ) ;
255
- legend . on ( 'wheel' , function ( ) {
256
- scrollBoxY = Lib . constrain (
257
- scrollBox . attr ( 'data-scroll' ) -
258
- d3 . event . deltaY / scrollBarYMax * scrollBoxYMax ,
259
- - scrollBoxYMax , 0 ) ;
260
- scrollBarY = constants . scrollBarMargin -
261
- scrollBoxY / scrollBoxYMax * scrollBarYMax ;
256
+ if ( gd . firstRender ) {
262
257
scrollHandler ( scrollBarY , scrollBoxY ) ;
263
- d3 . event . preventDefault ( ) ;
264
- } ) ;
265
258
266
- scrollBar . on ( '.drag ' , null ) ;
267
- scrollBox . on ( '.drag ' , null ) ;
268
- var drag = d3 . behavior . drag ( ) . on ( 'drag' , function ( ) {
269
- scrollBarY = Lib . constrain (
270
- d3 . event . y - constants . scrollBarHeight / 2 ,
271
- constants . scrollBarMargin ,
272
- constants . scrollBarMargin + scrollBarYMax ) ;
273
- scrollBoxY = - ( scrollBarY - constants . scrollBarMargin ) /
274
- scrollBarYMax * scrollBoxYMax ;
275
- scrollHandler ( scrollBarY , scrollBoxY ) ;
276
- } ) ;
259
+ legend . on ( 'wheel ' , null ) ;
260
+ legend . on ( 'wheel ' , function ( ) {
261
+ scrollBoxY = Lib . constrain (
262
+ scrollBox . attr ( 'data-scroll' ) -
263
+ d3 . event . deltaY / scrollBarYMax * scrollBoxYMax ,
264
+ - scrollBoxYMax , 0 ) ;
265
+ scrollBarY = constants . scrollBarMargin -
266
+ scrollBoxY / scrollBoxYMax * scrollBarYMax ;
267
+ scrollHandler ( scrollBarY , scrollBoxY ) ;
268
+ d3 . event . preventDefault ( ) ;
269
+ } ) ;
277
270
278
- scrollBar . call ( drag ) ;
279
- scrollBox . call ( drag ) ;
271
+ scrollBar . on ( '.drag' , null ) ;
272
+ scrollBox . on ( '.drag' , null ) ;
273
+ var drag = d3 . behavior . drag ( ) . on ( 'drag' , function ( ) {
274
+ scrollBarY = Lib . constrain (
275
+ d3 . event . y - constants . scrollBarHeight / 2 ,
276
+ constants . scrollBarMargin ,
277
+ constants . scrollBarMargin + scrollBarYMax ) ;
278
+ scrollBoxY = - ( scrollBarY - constants . scrollBarMargin ) /
279
+ scrollBarYMax * scrollBoxYMax ;
280
+ scrollHandler ( scrollBarY , scrollBoxY ) ;
281
+ } ) ;
280
282
283
+ scrollBar . call ( drag ) ;
284
+ scrollBox . call ( drag ) ;
285
+ }
281
286
}
282
287
283
288
0 commit comments