@@ -21,11 +21,17 @@ module.exports = function draw(gd) {
21
21
var sliderData = makeSliderData ( fullLayout , gd ) ;
22
22
23
23
// draw a container for *all* sliders:
24
- var sliders = fullLayout . _infolayer
25
- . selectAll ( 'g.' + constants . containerClassName )
26
- . data ( sliderData . length > 0 ? [ 0 ] : [ ] ) ;
24
+ var sliders = fullLayout . _infolayer . selectAll ( 'g.' + constants . containerClassName )
25
+ . data ( sliderData . length > 0 ? [ 0 ] : [ ] )
26
+ . enter ( )
27
+ . append ( 'g' ) ;
27
28
28
- sliders . enter ( ) . append ( 'g' )
29
+ sliders . exit ( ) . each ( function ( ) {
30
+ d3 . select ( this ) . selectAll ( 'g.' + constants . groupClassName )
31
+ . each ( clearSlider ) ;
32
+ } ) . remove ( ) ;
33
+
34
+ sliders
29
35
. classed ( constants . containerClassName , true )
30
36
. style ( 'cursor' , 'ew-resize' ) ;
31
37
@@ -41,25 +47,21 @@ module.exports = function draw(gd) {
41
47
Plots . autoMargin ( gd , autoMarginId ( sliderOpts ) ) ;
42
48
}
43
49
44
- sliders . exit ( ) . each ( function ( ) {
45
- d3 . select ( this ) . selectAll ( 'g.' + constants . groupClassName )
46
- . each ( clearSlider ) ;
47
- } )
48
- . remove ( ) ;
49
-
50
50
// Return early if no menus visible:
51
51
if ( sliderData . length === 0 ) return ;
52
52
53
53
var sliderGroups = sliders . selectAll ( 'g.' + constants . groupClassName )
54
- . data ( sliderData , keyFunction ) ;
55
-
56
- sliderGroups . enter ( ) . append ( 'g' )
57
- . classed ( constants . groupClassName , true ) ;
54
+ . data ( sliderData , keyFunction )
55
+ . enter ( )
56
+ . append ( 'g' ) ;
58
57
59
58
sliderGroups . exit ( )
60
59
. each ( clearSlider )
61
60
. remove ( ) ;
62
61
62
+ sliderGroups
63
+ . classed ( constants . groupClassName , true ) ;
64
+
63
65
// Find the dimensions of the sliders:
64
66
for ( var i = 0 ; i < sliderData . length ; i ++ ) {
65
67
var sliderOpts = sliderData [ i ] ;
@@ -117,11 +119,15 @@ function keyFunction(opts) {
117
119
// Compute the dimensions (mutates sliderOpts):
118
120
function findDimensions ( gd , sliderOpts ) {
119
121
var sliderLabels = Drawing . tester . selectAll ( 'g.' + constants . labelGroupClass )
120
- . data ( sliderOpts . _visibleSteps ) ;
122
+ . data ( sliderOpts . _visibleSteps )
123
+ . enter ( )
124
+ . append ( 'g' ) ;
121
125
122
- sliderLabels . enter ( ) . append ( 'g' )
126
+ sliderLabels
123
127
. classed ( constants . labelGroupClass , true ) ;
124
128
129
+ sliderLabels . remove ( ) ;
130
+
125
131
// loop over fake buttons to find width / height
126
132
var maxLabelWidth = 0 ;
127
133
var labelHeight = 0 ;
@@ -138,8 +144,6 @@ function findDimensions(gd, sliderOpts) {
138
144
}
139
145
} ) ;
140
146
141
- sliderLabels . remove ( ) ;
142
-
143
147
var dims = sliderOpts . _dims = { } ;
144
148
145
149
dims . inputAreaWidth = Math . max (
@@ -371,13 +375,15 @@ function drawLabelGroup(sliderGroup, sliderOpts) {
371
375
var dims = sliderOpts . _dims ;
372
376
373
377
var labelItems = labels . selectAll ( 'g.' + constants . labelGroupClass )
374
- . data ( dims . labelSteps ) ;
375
-
376
- labelItems . enter ( ) . append ( 'g' )
377
- . classed ( constants . labelGroupClass , true ) ;
378
+ . data ( dims . labelSteps )
379
+ . enter ( )
380
+ . append ( 'g' ) ;
378
381
379
382
labelItems . exit ( ) . remove ( ) ;
380
383
384
+ labelItems
385
+ . classed ( constants . labelGroupClass , true ) ;
386
+
381
387
labelItems . each ( function ( d ) {
382
388
var item = d3 . select ( this ) ;
383
389
@@ -497,19 +503,21 @@ function attachGripEvents(item, gd, sliderGroup) {
497
503
}
498
504
499
505
function drawTicks ( sliderGroup , sliderOpts ) {
500
- var tick = sliderGroup . selectAll ( 'rect.' + constants . tickRectClass )
501
- . data ( sliderOpts . _visibleSteps ) ;
502
506
var dims = sliderOpts . _dims ;
503
507
504
- tick . enter ( ) . append ( 'rect' )
505
- . classed ( constants . tickRectClass , true ) ;
508
+ var tick = sliderGroup . selectAll ( 'rect.' + constants . tickRectClass )
509
+ . data ( sliderOpts . _visibleSteps )
510
+ . enter ( )
511
+ . append ( 'rect' ) ;
506
512
507
513
tick . exit ( ) . remove ( ) ;
508
514
509
- tick . attrs ( {
510
- width : sliderOpts . tickwidth + 'px' ,
511
- 'shape-rendering' : 'crispEdges'
512
- } ) ;
515
+ tick
516
+ . classed ( constants . tickRectClass , true )
517
+ . attrs ( {
518
+ width : sliderOpts . tickwidth + 'px' ,
519
+ 'shape-rendering' : 'crispEdges'
520
+ } ) ;
513
521
514
522
tick . each ( function ( d , i ) {
515
523
var isMajor = i % dims . labelStride === 0 ;
0 commit comments