@@ -358,65 +358,72 @@ function setupDragElement(gd, shapePath, shapeOptions, index) {
358
358
359
359
var dragOptions = {
360
360
element : shapePath . node ( ) ,
361
- prepFn : function ( ) {
362
- setCursor ( shapePath , 'move' ) ;
361
+ prepFn : startDrag ,
362
+ doneFn : endDrag
363
+ } ;
363
364
364
- xa = Axes . getFromId ( gd , shapeOptions . xref ) ;
365
- ya = Axes . getFromId ( gd , shapeOptions . yref ) ;
365
+ dragElement . init ( dragOptions ) ;
366
366
367
- x2p = getDataToPixel ( gd , xa ) ;
368
- y2p = getDataToPixel ( gd , ya , true ) ;
369
- p2x = getPixelToData ( gd , xa ) ;
370
- p2y = getPixelToData ( gd , ya , true ) ;
367
+ function startDrag ( ) {
368
+ setCursor ( shapePath , 'move' ) ;
371
369
372
- var astr = 'shapes[' + index + ']' ;
373
- if ( shapeOptions . type === 'path' ) {
374
- pathIn = shapeOptions . path ;
375
- astrPath = astr + '.path' ;
376
- }
377
- else {
378
- x0 = x2p ( shapeOptions . x0 ) ;
379
- y0 = y2p ( shapeOptions . y0 ) ;
380
- x1 = x2p ( shapeOptions . x1 ) ;
381
- y1 = y2p ( shapeOptions . y1 ) ;
382
-
383
- astrX0 = astr + '.x0' ;
384
- astrY0 = astr + '.y0' ;
385
- astrX1 = astr + '.x1' ;
386
- astrY1 = astr + '.y1' ;
387
- }
370
+ xa = Axes . getFromId ( gd , shapeOptions . xref ) ;
371
+ ya = Axes . getFromId ( gd , shapeOptions . yref ) ;
388
372
389
- update = { } ;
390
- } ,
391
- moveFn : function ( dx , dy ) {
392
- if ( shapeOptions . type === 'path' ) {
393
- var moveX = function moveX ( x ) { return p2x ( x2p ( x ) + dx ) ; } ;
394
- if ( xa && xa . type === 'date' ) moveX = encodeDate ( moveX ) ;
373
+ x2p = getDataToPixel ( gd , xa ) ;
374
+ y2p = getDataToPixel ( gd , ya , true ) ;
375
+ p2x = getPixelToData ( gd , xa ) ;
376
+ p2y = getPixelToData ( gd , ya , true ) ;
395
377
396
- var moveY = function moveY ( y ) { return p2y ( y2p ( y ) + dy ) ; } ;
397
- if ( ya && ya . type === 'date' ) moveY = encodeDate ( moveY ) ;
378
+ var astr = 'shapes[' + index + ']' ;
379
+ if ( shapeOptions . type === 'path' ) {
380
+ pathIn = shapeOptions . path ;
381
+ astrPath = astr + '.path' ;
382
+ }
383
+ else {
384
+ x0 = x2p ( shapeOptions . x0 ) ;
385
+ y0 = y2p ( shapeOptions . y0 ) ;
386
+ x1 = x2p ( shapeOptions . x1 ) ;
387
+ y1 = y2p ( shapeOptions . y1 ) ;
388
+
389
+ astrX0 = astr + '.x0' ;
390
+ astrY0 = astr + '.y0' ;
391
+ astrX1 = astr + '.x1' ;
392
+ astrY1 = astr + '.y1' ;
393
+ }
398
394
399
- shapeOptions . path = movePath ( pathIn , moveX , moveY ) ;
400
- update [ astrPath ] = shapeOptions . path ;
401
- }
402
- else {
403
- update [ astrX0 ] = shapeOptions . x0 = p2x ( x0 + dx ) ;
404
- update [ astrY0 ] = shapeOptions . y0 = p2y ( y0 + dy ) ;
405
- update [ astrX1 ] = shapeOptions . x1 = p2x ( x1 + dx ) ;
406
- update [ astrY1 ] = shapeOptions . y1 = p2y ( y1 + dy ) ;
407
- }
395
+ update = { } ;
408
396
409
- shapePath . attr ( 'd' , getPathString ( gd , shapeOptions ) ) ;
410
- } ,
411
- doneFn : function ( dragged ) {
412
- setCursor ( shapePath ) ;
413
- if ( dragged ) {
414
- Plotly . relayout ( gd , update ) ;
415
- }
397
+ dragOptions . moveFn = moveShape ;
398
+ }
399
+
400
+ function endDrag ( dragged ) {
401
+ setCursor ( shapePath ) ;
402
+ if ( dragged ) {
403
+ Plotly . relayout ( gd , update ) ;
416
404
}
417
- } ;
405
+ }
418
406
419
- dragElement . init ( dragOptions ) ;
407
+ function moveShape ( dx , dy ) {
408
+ if ( shapeOptions . type === 'path' ) {
409
+ var moveX = function moveX ( x ) { return p2x ( x2p ( x ) + dx ) ; } ;
410
+ if ( xa && xa . type === 'date' ) moveX = encodeDate ( moveX ) ;
411
+
412
+ var moveY = function moveY ( y ) { return p2y ( y2p ( y ) + dy ) ; } ;
413
+ if ( ya && ya . type === 'date' ) moveY = encodeDate ( moveY ) ;
414
+
415
+ shapeOptions . path = movePath ( pathIn , moveX , moveY ) ;
416
+ update [ astrPath ] = shapeOptions . path ;
417
+ }
418
+ else {
419
+ update [ astrX0 ] = shapeOptions . x0 = p2x ( x0 + dx ) ;
420
+ update [ astrY0 ] = shapeOptions . y0 = p2y ( y0 + dy ) ;
421
+ update [ astrX1 ] = shapeOptions . x1 = p2x ( x1 + dx ) ;
422
+ update [ astrY1 ] = shapeOptions . y1 = p2y ( y1 + dy ) ;
423
+ }
424
+
425
+ shapePath . attr ( 'd' , getPathString ( gd , shapeOptions ) ) ;
426
+ }
420
427
}
421
428
422
429
function getShapeLayer ( gd , index ) {
0 commit comments