@@ -20,6 +20,7 @@ var splitData = require('./data_split_helpers');
20
20
var Color = require ( '../../components/color' ) ;
21
21
22
22
module . exports = function plot ( gd , wrappedTraceHolders ) {
23
+ var dynamic = ! gd . _context . staticPlot ;
23
24
24
25
var table = gd . _fullLayout . _paper . selectAll ( '.' + c . cn . table )
25
26
. data ( wrappedTraceHolders . map ( function ( wrappedTraceHolder ) {
@@ -51,20 +52,30 @@ module.exports = function plot(gd, wrappedTraceHolders) {
51
52
var tableControlView = table . selectAll ( '.' + c . cn . tableControlView )
52
53
. data ( gup . repeat , gup . keyFun ) ;
53
54
54
- tableControlView . enter ( )
55
+ var cvEnter = tableControlView . enter ( )
55
56
. append ( 'g' )
56
57
. classed ( c . cn . tableControlView , true )
57
- . style ( 'box-sizing' , 'content-box' )
58
- . on ( 'mousemove' , function ( d ) { tableControlView . filter ( function ( dd ) { return d === dd ; } ) . call ( renderScrollbarKit , gd ) ; } )
59
- . on ( 'mousewheel' , function ( d ) {
60
- if ( d . scrollbarState . wheeling ) return ;
61
- d . scrollbarState . wheeling = true ;
62
- d3 . event . stopPropagation ( ) ;
63
- d3 . event . preventDefault ( ) ;
64
- makeDragRow ( gd , tableControlView , null , d . scrollY + d3 . event . deltaY ) ( d ) ;
65
- d . scrollbarState . wheeling = false ;
66
- } )
67
- . call ( renderScrollbarKit , gd , true ) ;
58
+ . style ( 'box-sizing' , 'content-box' ) ;
59
+ if ( dynamic ) {
60
+ cvEnter
61
+ . on ( 'mousemove' , function ( d ) {
62
+ tableControlView
63
+ . filter ( function ( dd ) { return d === dd ; } )
64
+ . call ( renderScrollbarKit , gd ) ;
65
+ } )
66
+ . on ( 'mousewheel' , function ( d ) {
67
+ if ( d . scrollbarState . wheeling ) return ;
68
+ d . scrollbarState . wheeling = true ;
69
+ var newY = d . scrollY + d3 . event . deltaY ;
70
+ var noChange = makeDragRow ( gd , tableControlView , null , newY ) ( d ) ;
71
+ if ( ! noChange ) {
72
+ d3 . event . stopPropagation ( ) ;
73
+ d3 . event . preventDefault ( ) ;
74
+ }
75
+ d . scrollbarState . wheeling = false ;
76
+ } )
77
+ . call ( renderScrollbarKit , gd , true ) ;
78
+ }
68
79
69
80
tableControlView
70
81
. attr ( 'transform' , function ( d ) { return 'translate(' + d . size . l + ' ' + d . size . t + ')' ; } ) ;
@@ -96,9 +107,10 @@ module.exports = function plot(gd, wrappedTraceHolders) {
96
107
97
108
yColumn . exit ( ) . remove ( ) ;
98
109
99
- yColumn
100
- . attr ( 'transform' , function ( d ) { return 'translate(' + d . x + ' 0)' ; } )
101
- . call ( d3 . behavior . drag ( )
110
+ yColumn . attr ( 'transform' , function ( d ) { return 'translate(' + d . x + ' 0)' ; } ) ;
111
+
112
+ if ( dynamic ) {
113
+ yColumn . call ( d3 . behavior . drag ( )
102
114
. origin ( function ( d ) {
103
115
var movedColumn = d3 . select ( this ) ;
104
116
easeColumn ( movedColumn , d , - c . uplift ) ;
@@ -137,6 +149,7 @@ module.exports = function plot(gd, wrappedTraceHolders) {
137
149
columnMoved ( gd , p , p . columns . map ( function ( dd ) { return dd . xIndex ; } ) ) ;
138
150
} )
139
151
) ;
152
+ }
140
153
141
154
yColumn . each ( function ( d ) {
142
155
Drawing . setClipUrl ( d3 . select ( this ) , columnBoundaryClipKey ( gd , d ) , gd ) ;
@@ -158,8 +171,8 @@ module.exports = function plot(gd, wrappedTraceHolders) {
158
171
var headerColumnBlock = columnBlock . filter ( headerBlock ) ;
159
172
var cellsColumnBlock = columnBlock . filter ( cellsBlock ) ;
160
173
161
- cellsColumnBlock
162
- . call ( d3 . behavior . drag ( )
174
+ if ( dynamic ) {
175
+ cellsColumnBlock . call ( d3 . behavior . drag ( )
163
176
. origin ( function ( d ) {
164
177
d3 . event . stopPropagation ( ) ;
165
178
return d ;
@@ -169,6 +182,7 @@ module.exports = function plot(gd, wrappedTraceHolders) {
169
182
// fixme emit plotly notification
170
183
} )
171
184
) ;
185
+ }
172
186
173
187
// initial rendering: header is rendered first, as it may may have async LaTeX (show header first)
174
188
// but blocks are _entered_ the way they are due to painter's algo (header on top)
@@ -711,13 +725,20 @@ function updateBlockYPosition(gd, cellsColumnBlock, tableControlView) {
711
725
712
726
function makeDragRow ( gd , allTableControlView , optionalMultiplier , optionalPosition ) {
713
727
return function dragRow ( eventD ) {
714
- // may come from whicever DOM event target: drag, wheel, bar... eventD corresponds to event target
728
+ // may come from whichever DOM event target: drag, wheel, bar... eventD corresponds to event target
715
729
var d = eventD . calcdata ? eventD . calcdata : eventD ;
716
730
var tableControlView = allTableControlView . filter ( function ( dd ) { return d . key === dd . key ; } ) ;
717
731
var multiplier = optionalMultiplier || d . scrollbarState . dragMultiplier ;
732
+
733
+ var initialScrollY = d . scrollY ;
734
+
718
735
d . scrollY = optionalPosition === void ( 0 ) ? d . scrollY + multiplier * d3 . event . dy : optionalPosition ;
719
736
var cellsColumnBlock = tableControlView . selectAll ( '.' + c . cn . yColumn ) . selectAll ( '.' + c . cn . columnBlock ) . filter ( cellsBlock ) ;
720
737
updateBlockYPosition ( gd , cellsColumnBlock , tableControlView ) ;
738
+
739
+ // return false if we've "used" the scroll, ie it did something,
740
+ // so the event shouldn't bubble (if appropriate)
741
+ return d . scrollY === initialScrollY ;
721
742
} ;
722
743
}
723
744
0 commit comments