@@ -449,14 +449,14 @@ describe('Test axes', function() {
449
449
layoutIn = {
450
450
// first group: linked in series, scales compound
451
451
xaxis : { } ,
452
- yaxis : { scalewith : 'x' , scaleratio : 2 } ,
453
- xaxis2 : { scalewith : 'y' , scaleratio : 3 } ,
454
- yaxis2 : { scalewith : 'x2' , scaleratio : 5 } ,
452
+ yaxis : { scaleanchor : 'x' , scaleratio : 2 } ,
453
+ xaxis2 : { scaleanchor : 'y' , scaleratio : 3 } ,
454
+ yaxis2 : { scaleanchor : 'x2' , scaleratio : 5 } ,
455
455
// second group: linked in parallel, scales don't compound
456
456
yaxis3 : { } ,
457
- xaxis3 : { scalewith : 'y3' } , // default scaleratio: 1
458
- xaxis4 : { scalewith : 'y3' , scaleratio : 7 } ,
459
- xaxis5 : { scalewith : 'y3' , scaleratio : 9 }
457
+ xaxis3 : { scaleanchor : 'y3' } , // default scaleratio: 1
458
+ xaxis4 : { scaleanchor : 'y3' , scaleratio : 7 } ,
459
+ xaxis5 : { scaleanchor : 'y3' , scaleratio : 9 }
460
460
} ;
461
461
462
462
supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
@@ -467,20 +467,20 @@ describe('Test axes', function() {
467
467
] ) ;
468
468
} ) ;
469
469
470
- it ( 'breaks scalewith loops and drops conflicting ratios' , function ( ) {
470
+ it ( 'breaks scaleanchor loops and drops conflicting ratios' , function ( ) {
471
471
var warnings = [ ] ;
472
472
spyOn ( Lib , 'warn' ) . and . callFake ( function ( msg ) {
473
473
warnings . push ( msg ) ;
474
474
} ) ;
475
475
476
476
layoutIn = {
477
- xaxis : { scalewith : 'y' , scaleratio : 2 } ,
478
- yaxis : { scalewith : 'x' , scaleratio : 3 } ,
477
+ xaxis : { scaleanchor : 'y' , scaleratio : 2 } ,
478
+ yaxis : { scaleanchor : 'x' , scaleratio : 3 } ,
479
479
480
- xaxis2 : { scalewith : 'y2' , scaleratio : 5 } ,
481
- yaxis2 : { scalewith : 'x3' , scaleratio : 7 } ,
482
- xaxis3 : { scalewith : 'y3' , scaleratio : 9 } ,
483
- yaxis3 : { scalewith : 'x2' , scaleratio : 11 }
480
+ xaxis2 : { scaleanchor : 'y2' , scaleratio : 5 } ,
481
+ yaxis2 : { scaleanchor : 'x3' , scaleratio : 7 } ,
482
+ xaxis3 : { scaleanchor : 'y3' , scaleratio : 9 } ,
483
+ yaxis3 : { scaleanchor : 'x2' , scaleratio : 11 }
484
484
} ;
485
485
486
486
supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
@@ -490,24 +490,26 @@ describe('Test axes', function() {
490
490
{ x2 : 5 * 7 * 9 , y2 : 7 * 9 , y3 : 1 , x3 : 9 }
491
491
] ) ;
492
492
493
+ var warnTxt = ' to avoid either an infinite loop and possibly ' +
494
+ 'inconsistent scaleratios, or because the targetaxis has ' +
495
+ 'fixed range.' ;
496
+
493
497
expect ( warnings ) . toEqual ( [
494
- 'ignored yaxis.scalewith: "x" to avoid an infinite loop ' +
495
- 'and possibly inconsistent scaleratios.' ,
496
- 'ignored yaxis3.scalewith: "x2" to avoid an infinite loop ' +
497
- 'and possibly inconsistent scaleratios.'
498
+ 'ignored yaxis.scaleanchor: "x"' + warnTxt ,
499
+ 'ignored yaxis3.scaleanchor: "x2"' + warnTxt
498
500
] ) ;
499
501
} ) ;
500
502
501
- it ( 'silently drops invalid scalewith values' , function ( ) {
503
+ it ( 'silently drops invalid scaleanchor values' , function ( ) {
502
504
var warnings = [ ] ;
503
505
spyOn ( Lib , 'warn' ) . and . callFake ( function ( msg ) {
504
506
warnings . push ( msg ) ;
505
507
} ) ;
506
508
507
509
layoutIn = {
508
- xaxis : { scalewith : 'x2' , scaleratio : 2 } , // must be opposite letter
509
- yaxis : { scalewith : 'x4' , scaleratio : 3 } , // doesn't exist
510
- xaxis2 : { scalewith : 'yaxis' , scaleratio : 5 } // must be an id, not a name
510
+ xaxis : { scaleanchor : 'x2' , scaleratio : 2 } , // must be opposite letter
511
+ yaxis : { scaleanchor : 'x4' , scaleratio : 3 } , // doesn't exist
512
+ xaxis2 : { scaleanchor : 'yaxis' , scaleratio : 5 } // must be an id, not a name
511
513
} ;
512
514
513
515
supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
@@ -516,7 +518,50 @@ describe('Test axes', function() {
516
518
expect ( warnings ) . toEqual ( [ ] ) ;
517
519
518
520
[ 'xaxis' , 'yaxis' , 'xaxis2' ] . forEach ( function ( axName ) {
519
- expect ( layoutOut [ axName ] . scalewith ) . toBeUndefined ( ) ;
521
+ expect ( layoutOut [ axName ] . scaleanchor ) . toBeUndefined ( axName ) ;
522
+ expect ( layoutOut [ axName ] . scaleratio ) . toBeUndefined ( axName ) ;
523
+ } ) ;
524
+ } ) ;
525
+
526
+ it ( 'will not link axes of different types' , function ( ) {
527
+ layoutIn = {
528
+ xaxis : { type : 'linear' } ,
529
+ yaxis : { type : 'log' , scaleanchor : 'x' , scaleratio : 2 } ,
530
+ xaxis2 : { type : 'date' , scaleanchor : 'y' , scaleratio : 3 } ,
531
+ yaxis2 : { type : 'category' , scaleanchor : 'x2' , scaleratio : 5 }
532
+ } ;
533
+
534
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
535
+
536
+ expect ( layoutOut . _axisConstraintGroups ) . toEqual ( [ ] ) ;
537
+
538
+ [ 'xaxis' , 'yaxis' , 'xaxis2' , 'yaxis2' ] . forEach ( function ( axName ) {
539
+ expect ( layoutOut [ axName ] . scaleanchor ) . toBeUndefined ( axName ) ;
540
+ expect ( layoutOut [ axName ] . scaleratio ) . toBeUndefined ( axName ) ;
541
+ } ) ;
542
+ } ) ;
543
+
544
+ it ( 'drops scaleanchor settings if either the axis or target has fixedrange' , function ( ) {
545
+ // some of these will create warnings... not too important, so not going to test,
546
+ // just want to keep the output clean
547
+ // spyOn(Lib, 'warn');
548
+
549
+ layoutIn = {
550
+ xaxis : { fixedrange : true , scaleanchor : 'y' , scaleratio : 2 } ,
551
+ yaxis : { scaleanchor : 'x2' , scaleratio : 3 } , // only this one should survive
552
+ xaxis2 : { } ,
553
+ yaxis2 : { scaleanchor : 'x' , scaleratio : 5 }
554
+ } ;
555
+
556
+ supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) ;
557
+
558
+ expect ( layoutOut . _axisConstraintGroups ) . toEqual ( [ { x2 : 1 , y : 3 } ] ) ;
559
+
560
+ expect ( layoutOut . yaxis . scaleanchor ) . toBe ( 'x2' ) ;
561
+ expect ( layoutOut . yaxis . scaleratio ) . toBe ( 3 ) ;
562
+
563
+ [ 'xaxis' , 'yaxis2' , 'xaxis2' ] . forEach ( function ( axName ) {
564
+ expect ( layoutOut [ axName ] . scaleanchor ) . toBeUndefined ( ) ;
520
565
expect ( layoutOut [ axName ] . scaleratio ) . toBeUndefined ( ) ;
521
566
} ) ;
522
567
} ) ;
0 commit comments