@@ -258,6 +258,30 @@ class CollapsedCodeOverlayWidget extends ViewZoneOverlayWidget {
258
258
reset ( this . _nodes . first ) ;
259
259
}
260
260
261
+ this . _register ( autorun ( reader => {
262
+ const isFullyRevealed = this . _unchangedRegion . visibleLineCountTop . read ( reader ) + this . _unchangedRegion . visibleLineCountBottom . read ( reader ) === this . _unchangedRegion . lineCount ;
263
+
264
+ this . _nodes . bottom . classList . toggle ( 'canMoveTop' , ! isFullyRevealed ) ;
265
+ this . _nodes . bottom . classList . toggle ( 'canMoveBottom' , this . _unchangedRegion . visibleLineCountBottom . read ( reader ) > 0 ) ;
266
+ this . _nodes . top . classList . toggle ( 'canMoveTop' , this . _unchangedRegion . visibleLineCountTop . read ( reader ) > 0 ) ;
267
+ this . _nodes . top . classList . toggle ( 'canMoveBottom' , ! isFullyRevealed ) ;
268
+ const isDragged = this . _unchangedRegion . isDragged . read ( reader ) ;
269
+ const domNode = this . _editor . getDomNode ( ) ;
270
+ if ( domNode ) {
271
+ domNode . classList . toggle ( 'draggingUnchangedRegion' , ! ! isDragged ) ;
272
+ if ( isDragged === 'top' ) {
273
+ domNode . classList . toggle ( 'canMoveTop' , this . _unchangedRegion . visibleLineCountTop . read ( reader ) > 0 ) ;
274
+ domNode . classList . toggle ( 'canMoveBottom' , ! isFullyRevealed ) ;
275
+ } else if ( isDragged === 'bottom' ) {
276
+ domNode . classList . toggle ( 'canMoveTop' , ! isFullyRevealed ) ;
277
+ domNode . classList . toggle ( 'canMoveBottom' , this . _unchangedRegion . visibleLineCountBottom . read ( reader ) > 0 ) ;
278
+ } else {
279
+ domNode . classList . toggle ( 'canMoveTop' , false ) ;
280
+ domNode . classList . toggle ( 'canMoveBottom' , false ) ;
281
+ }
282
+ }
283
+ } ) ) ;
284
+
261
285
const editor = this . _editor ;
262
286
263
287
this . _register ( addDisposableListener ( this . _nodes . top , 'mousedown' , e => {
@@ -270,7 +294,7 @@ class CollapsedCodeOverlayWidget extends ViewZoneOverlayWidget {
270
294
const startTop = e . clientY ;
271
295
let didMove = false ;
272
296
const cur = this . _unchangedRegion . visibleLineCountTop . get ( ) ;
273
- this . _unchangedRegion . isDragged . set ( true , undefined ) ;
297
+ this . _unchangedRegion . isDragged . set ( 'top' , undefined ) ;
274
298
275
299
const window = getWindow ( this . _nodes . top ) ;
276
300
@@ -289,7 +313,7 @@ class CollapsedCodeOverlayWidget extends ViewZoneOverlayWidget {
289
313
}
290
314
this . _nodes . top . classList . toggle ( 'dragging' , false ) ;
291
315
this . _nodes . root . classList . toggle ( 'dragging' , false ) ;
292
- this . _unchangedRegion . isDragged . set ( false , undefined ) ;
316
+ this . _unchangedRegion . isDragged . set ( undefined , undefined ) ;
293
317
mouseMoveListener . dispose ( ) ;
294
318
mouseUpListener . dispose ( ) ;
295
319
} ) ;
@@ -305,7 +329,7 @@ class CollapsedCodeOverlayWidget extends ViewZoneOverlayWidget {
305
329
const startTop = e . clientY ;
306
330
let didMove = false ;
307
331
const cur = this . _unchangedRegion . visibleLineCountBottom . get ( ) ;
308
- this . _unchangedRegion . isDragged . set ( true , undefined ) ;
332
+ this . _unchangedRegion . isDragged . set ( 'bottom' , undefined ) ;
309
333
310
334
const window = getWindow ( this . _nodes . bottom ) ;
311
335
@@ -322,7 +346,7 @@ class CollapsedCodeOverlayWidget extends ViewZoneOverlayWidget {
322
346
} ) ;
323
347
324
348
const mouseUpListener = addDisposableListener ( window , 'mouseup' , e => {
325
- this . _unchangedRegion . isDragged . set ( false , undefined ) ;
349
+ this . _unchangedRegion . isDragged . set ( undefined , undefined ) ;
326
350
327
351
if ( ! didMove ) {
328
352
const top = editor . getTopForLineNumber ( this . _unchangedRegionRange . endLineNumberExclusive ) ;
0 commit comments