@@ -1251,38 +1251,83 @@ describe('Test polar interactions:', function() {
12511251 describe ( 'plotly_relayouting' , function ( ) {
12521252 afterEach ( destroyGraphDiv ) ;
12531253
1254- [ 'zoom' ] . forEach ( function ( dragmode ) {
1254+ it ( 'should emit events on radial drag area' , function ( done ) {
1255+ var events = [ ] ; var path = [ [ 375 , 200 ] , [ - 100 , 0 ] ] ; var nsteps = 10 ;
1256+ var relayoutEvents = [ ] ;
1257+ var fig = Lib . extendDeep ( { } , require ( '@mocks/polar_scatter.json' ) ) ;
1258+ // to avoid dragging on hover labels
1259+ fig . layout . hovermode = false ;
1260+
1261+ // adjust margins so that middle of plot area is at 300x300
1262+ // with its middle at [200,200]
1263+ fig . layout . width = 400 ;
1264+ fig . layout . height = 400 ;
1265+ fig . layout . margin = { l : 50 , t : 50 , b : 50 , r : 50 } ;
1266+
12551267 function _drag ( p0 , dp , nsteps ) {
1256- var node = d3 . select ( '.polar > .draglayer > .maindrag ' ) . node ( ) ;
1268+ var node = d3 . select ( '.polar > .draglayer > .radialdrag ' ) . node ( ) ;
12571269 return drag ( node , dp [ 0 ] , dp [ 1 ] , null , p0 [ 0 ] , p0 [ 1 ] , nsteps ) ;
12581270 }
12591271
1260- it ( 'should emit plotly_relayouting events on ' + dragmode , function ( done ) {
1261- var events = [ ] ; var path = [ [ 150 , 250 ] , [ 175 , 250 ] ] ; var relayoutCallback ;
1262- var fig = Lib . extendDeep ( { } , require ( '@mocks/polar_scatter.json' ) ) ;
1263- fig . layout . dragmode = dragmode ;
1272+ var gd = createGraphDiv ( ) ;
1273+ Plotly . plot ( gd , fig )
1274+ . then ( function ( ) {
1275+ gd . on ( 'plotly_relayout' , function ( e ) {
1276+ relayoutEvents . push ( e ) ;
1277+ } ) ;
1278+ gd . on ( 'plotly_relayouting' , function ( e ) {
1279+ events . push ( e ) ;
1280+ } ) ;
1281+ return _drag ( path [ 0 ] , path [ 1 ] , nsteps ) ;
1282+ } )
1283+ . then ( function ( ) {
1284+ var len = events . length ;
1285+ expect ( len ) . toEqual ( nsteps ) ;
1286+ expect ( events [ len - 1 ] [ 'polar.radialaxis.range[1]' ] ) . toBeCloseTo ( 16 , - 1 ) ;
1287+ expect ( relayoutEvents . length ) . toEqual ( 1 ) ;
1288+ Object . keys ( relayoutEvents [ 0 ] ) . sort ( ) . forEach ( function ( key ) {
1289+ expect ( Object . keys ( events [ len - 1 ] ) ) . toContain ( key ) ;
1290+ } ) ;
1291+ } )
1292+ . catch ( failTest )
1293+ . then ( done ) ;
1294+ } ) ;
12641295
1265- var gd = createGraphDiv ( ) ;
1266- Plotly . plot ( gd , fig )
1267- . then ( function ( ) {
1268- relayoutCallback = jasmine . createSpy ( 'relayoutCallback' ) ;
1269- gd . on ( 'plotly_relayout' , relayoutCallback ) ;
1270- gd . on ( 'plotly_relayouting' , function ( e ) {
1271- events . push ( e ) ;
1272- } ) ;
1273- return _drag ( path [ 0 ] , path [ 1 ] ) ;
1274- } )
1275- . then ( function ( ) {
1276- expect ( events . length ) . toEqual ( path . length - 1 ) ;
1277- expect ( events [ 0 ] [ 'polar.radialaxis.range' ] ) . toBeCloseToArray ( [ 6 , 11 ] , 0.1 ) ;
1278- expect ( relayoutCallback ) . toHaveBeenCalledTimes ( 1 ) ;
1279- } )
1280- . catch ( failTest )
1281- . then ( done ) ;
1282- } ) ;
1296+ it ( 'should emit events on inner radial drag area' , function ( done ) {
1297+ var events = [ ] ; var path = [ [ 150 , 250 ] , [ 175 , 250 ] ] ;
1298+ var relayoutEvents = [ ] ;
1299+ var fig = Lib . extendDeep ( { } , require ( '@mocks/polar_scatter.json' ) ) ;
1300+
1301+ function _drag ( p0 , dp , nsteps ) {
1302+ var node = d3 . select ( '.polar > .draglayer > .maindrag' ) . node ( ) ;
1303+ return drag ( node , dp [ 0 ] , dp [ 1 ] , null , p0 [ 0 ] , p0 [ 1 ] , nsteps ) ;
1304+ }
1305+
1306+ var gd = createGraphDiv ( ) ;
1307+ Plotly . plot ( gd , fig )
1308+ . then ( function ( ) {
1309+ gd . on ( 'plotly_relayout' , function ( e ) {
1310+ relayoutEvents . push ( e ) ;
1311+ } ) ;
1312+ gd . on ( 'plotly_relayouting' , function ( e ) {
1313+ events . push ( e ) ;
1314+ } ) ;
1315+ return _drag ( path [ 0 ] , path [ 1 ] ) ;
1316+ } )
1317+ . then ( function ( ) {
1318+ expect ( events . length ) . toEqual ( path . length - 1 ) ;
1319+ expect ( events [ 0 ] [ 'polar.radialaxis.range' ] ) . toBeCloseToArray ( [ 6 , 11 ] , 0.1 ) ;
1320+ expect ( relayoutEvents . length ) . toEqual ( 1 ) ;
1321+ Object . keys ( relayoutEvents [ 0 ] ) . sort ( ) . forEach ( function ( key ) {
1322+ expect ( Object . keys ( events [ 0 ] ) ) . toContain ( key ) ;
1323+ } ) ;
1324+ } )
1325+ . catch ( failTest )
1326+ . then ( done ) ;
12831327 } ) ;
1284- it ( 'should emit plotly_relayouting events on angular drag' , function ( done ) {
1285- var events = [ ] ; var relayoutCallback ;
1328+
1329+ it ( 'should emit events on angular drag area' , function ( done ) {
1330+ var events = [ ] ; var relayoutEvents = [ ] ; var nsteps = 10 ;
12861331 var fig = Lib . extendDeep ( { } , require ( '@mocks/polar_scatter.json' ) ) ;
12871332
12881333 function _drag ( p0 , dp , nsteps ) {
@@ -1295,17 +1340,21 @@ describe('Test polar interactions:', function() {
12951340 var gd = createGraphDiv ( ) ;
12961341 Plotly . plot ( gd , fig )
12971342 . then ( function ( ) {
1298- relayoutCallback = jasmine . createSpy ( 'relayoutCallback' ) ;
1299- gd . on ( 'plotly_relayout' , relayoutCallback ) ;
1343+ gd . on ( 'plotly_relayout' , function ( e ) {
1344+ relayoutEvents . push ( e ) ;
1345+ } ) ;
13001346 gd . on ( 'plotly_relayouting' , function ( e ) {
13011347 events . push ( e ) ;
13021348 } ) ;
1303- return _drag ( dragPos0 , [ 0 , - 110 ] , 10 ) ;
1349+ return _drag ( dragPos0 , [ 0 , - 110 ] , nsteps ) ;
13041350 } )
13051351 . then ( function ( ) {
1306- expect ( events . length ) . toEqual ( 10 ) ;
1352+ expect ( events . length ) . toEqual ( nsteps ) ;
13071353 expect ( events . splice ( - 1 , 1 ) [ 0 ] [ 'polar.angularaxis.rotation' ] ) . toBeCloseTo ( 29 , 0 ) ;
1308- expect ( relayoutCallback ) . toHaveBeenCalledTimes ( 1 ) ;
1354+ expect ( relayoutEvents . length ) . toEqual ( 1 ) ;
1355+ Object . keys ( relayoutEvents [ 0 ] ) . sort ( ) . forEach ( function ( key ) {
1356+ expect ( Object . keys ( events [ 0 ] ) ) . toContain ( key ) ;
1357+ } ) ;
13091358 } )
13101359 . catch ( failTest )
13111360 . then ( done ) ;
0 commit comments