@@ -1432,143 +1432,134 @@ describe('hover info', function() {
1432
1432
. catch ( failTest )
1433
1433
. then ( done ) ;
1434
1434
} ) ;
1435
-
1436
1435
} ) ;
1437
1436
1438
- function hoverInfoNodes ( traceName ) {
1439
- var g = d3 . selectAll ( 'g.hoverlayer g.hovertext' ) . filter ( function ( ) {
1440
- return ! d3 . select ( this ) . select ( '[data-unformatted="' + traceName + '"]' ) . empty ( ) ;
1441
- } ) ;
1442
-
1443
- return {
1444
- primaryText : g . select ( 'text:not([data-unformatted="' + traceName + '"])' ) . node ( ) ,
1445
- primaryBox : g . select ( 'path' ) . node ( ) ,
1446
- secondaryText : g . select ( '[data-unformatted="' + traceName + '"]' ) . node ( ) ,
1447
- secondaryBox : g . select ( 'rect' ) . node ( )
1448
- } ;
1449
- }
1450
-
1451
- function ensureCentered ( hoverInfoNodes ) {
1452
- expect ( hoverInfoNodes . primaryText . getAttribute ( 'text-anchor' ) ) . toBe ( 'middle' ) ;
1453
- expect ( hoverInfoNodes . secondaryText . getAttribute ( 'text-anchor' ) ) . toBe ( 'middle' ) ;
1454
- return hoverInfoNodes ;
1455
- }
1456
-
1457
- function assertLabelsInsideBoxes ( nodes , msgPrefix ) {
1458
- var msgPrefixFmt = msgPrefix ? '[' + msgPrefix + '] ' : '' ;
1459
-
1460
- assertElemInside ( nodes . primaryText , nodes . primaryBox ,
1461
- msgPrefixFmt + 'Primary text inside box' ) ;
1462
- assertElemInside ( nodes . secondaryText , nodes . secondaryBox ,
1463
- msgPrefixFmt + 'Secondary text inside box' ) ;
1464
- }
1465
-
1466
- function assertSecondaryRightToPrimaryBox ( nodes , msgPrefix ) {
1467
- var msgPrefixFmt = msgPrefix ? '[' + msgPrefix + '] ' : '' ;
1468
-
1469
- assertElemRightTo ( nodes . secondaryBox , nodes . primaryBox ,
1470
- msgPrefixFmt + 'Secondary box right to primary box' ) ;
1471
- assertElemTopsAligned ( nodes . secondaryBox , nodes . primaryBox ,
1472
- msgPrefixFmt + 'Top edges of primary and secondary boxes aligned' ) ;
1473
- }
1474
-
1475
- describe ( 'centered' , function ( ) {
1476
- var trace1 = {
1477
- x : [ 'giraffes' ] ,
1478
- y : [ 5 ] ,
1479
- name : 'LA Zoo' ,
1480
- type : 'bar' ,
1481
- text : [ 'Way too long hover info!' ]
1482
- } ;
1483
- var trace2 = {
1484
- x : [ 'giraffes' ] ,
1485
- y : [ 5 ] ,
1486
- name : 'SF Zoo' ,
1487
- type : 'bar' ,
1488
- text : [ 'San Francisco' ]
1489
- } ;
1490
- var data = [ trace1 , trace2 ] ;
1491
- var layout = { width : 600 , height : 300 , barmode : 'stack' } ;
1492
-
1437
+ describe ( 'alignment while avoiding overlaps:' , function ( ) {
1493
1438
var gd ;
1494
1439
1495
- beforeEach ( function ( done ) {
1496
- gd = createGraphDiv ( ) ;
1497
- Plotly . plot ( gd , data , layout ) . then ( done ) ;
1498
- } ) ;
1440
+ beforeEach ( function ( ) { gd = createGraphDiv ( ) ; } ) ;
1499
1441
1500
- it ( 'renders labels inside boxes' , function ( ) {
1501
- _hover ( gd , 300 , 150 ) ;
1442
+ function hoverInfoNodes ( traceName ) {
1443
+ var g = d3 . selectAll ( 'g.hoverlayer g.hovertext' ) . filter ( function ( ) {
1444
+ return ! d3 . select ( this ) . select ( '[data-unformatted="' + traceName + '"]' ) . empty ( ) ;
1445
+ } ) ;
1502
1446
1503
- var nodes = ensureCentered ( hoverInfoNodes ( 'LA Zoo' ) ) ;
1504
- assertLabelsInsideBoxes ( nodes ) ;
1505
- } ) ;
1447
+ return {
1448
+ primaryText : g . select ( 'text:not([data-unformatted="' + traceName + '"])' ) . node ( ) ,
1449
+ primaryBox : g . select ( 'path' ) . node ( ) ,
1450
+ secondaryText : g . select ( '[data-unformatted="' + traceName + '"]' ) . node ( ) ,
1451
+ secondaryBox : g . select ( 'rect' ) . node ( )
1452
+ } ;
1453
+ }
1506
1454
1507
- it ( 'renders secondary info box right to primary info box' , function ( ) {
1508
- _hover ( gd , 300 , 150 ) ;
1455
+ function ensureCentered ( hoverInfoNodes ) {
1456
+ expect ( hoverInfoNodes . primaryText . getAttribute ( 'text-anchor' ) ) . toBe ( 'middle' ) ;
1457
+ expect ( hoverInfoNodes . secondaryText . getAttribute ( 'text-anchor' ) ) . toBe ( 'middle' ) ;
1458
+ return hoverInfoNodes ;
1459
+ }
1509
1460
1510
- var nodes = ensureCentered ( hoverInfoNodes ( 'LA Zoo' ) ) ;
1511
- assertSecondaryRightToPrimaryBox ( nodes ) ;
1512
- } ) ;
1513
- } ) ;
1461
+ function assertLabelsInsideBoxes ( nodes , msgPrefix ) {
1462
+ var msgPrefixFmt = msgPrefix ? '[' + msgPrefix + '] ' : '' ;
1514
1463
1515
- describe ( 'centered' , function ( ) {
1516
- var trace1 = {
1517
- x : [ 'giraffes' ] ,
1518
- y : [ 5 ] ,
1519
- name : 'LA Zoo' ,
1520
- type : 'bar' ,
1521
- text : [ 'Way too long hover info!' ]
1522
- } ;
1523
- var trace2 = {
1524
- x : [ 'giraffes' ] ,
1525
- y : [ 5 ] ,
1526
- name : 'SF Zoo' ,
1527
- type : 'bar' ,
1528
- text : [ 'Way too looooong hover info!' ]
1529
- } ;
1530
- var trace3 = {
1531
- x : [ 'giraffes' ] ,
1532
- y : [ 5 ] ,
1533
- name : 'NY Zoo' ,
1534
- type : 'bar' ,
1535
- text : [ 'New York' ]
1536
- } ;
1537
- var data = [ trace1 , trace2 , trace3 ] ;
1538
- var layout = { width : 600 , height : 300 } ;
1464
+ assertElemInside ( nodes . primaryText , nodes . primaryBox ,
1465
+ msgPrefixFmt + 'Primary text inside box' ) ;
1466
+ assertElemInside ( nodes . secondaryText , nodes . secondaryBox ,
1467
+ msgPrefixFmt + 'Secondary text inside box' ) ;
1468
+ }
1539
1469
1540
- var gd ;
1470
+ function assertSecondaryRightToPrimaryBox ( nodes , msgPrefix ) {
1471
+ var msgPrefixFmt = msgPrefix ? '[' + msgPrefix + '] ' : '' ;
1541
1472
1542
- beforeEach ( function ( done ) {
1543
- gd = createGraphDiv ( ) ;
1544
- Plotly . plot ( gd , data , layout ) . then ( done ) ;
1545
- } ) ;
1473
+ assertElemRightTo ( nodes . secondaryBox , nodes . primaryBox ,
1474
+ msgPrefixFmt + 'Secondary box right to primary box' ) ;
1475
+ assertElemTopsAligned ( nodes . secondaryBox , nodes . primaryBox ,
1476
+ msgPrefixFmt + 'Top edges of primary and secondary boxes aligned' ) ;
1477
+ }
1546
1478
1547
- function calcLineOverlap ( minA , maxA , minB , maxB ) {
1548
- expect ( minA ) . toBeLessThan ( maxA ) ;
1549
- expect ( minB ) . toBeLessThan ( maxB ) ;
1479
+ it ( 'centered-aligned, should render labels inside boxes' , function ( done ) {
1480
+ var trace1 = {
1481
+ x : [ 'giraffes' ] ,
1482
+ y : [ 5 ] ,
1483
+ name : 'LA Zoo' ,
1484
+ type : 'bar' ,
1485
+ text : [ 'Way too long hover info!' ]
1486
+ } ;
1487
+ var trace2 = {
1488
+ x : [ 'giraffes' ] ,
1489
+ y : [ 5 ] ,
1490
+ name : 'SF Zoo' ,
1491
+ type : 'bar' ,
1492
+ text : [ 'San Francisco' ]
1493
+ } ;
1494
+ var data = [ trace1 , trace2 ] ;
1495
+ var layout = { width : 600 , height : 300 , barmode : 'stack' } ;
1550
1496
1551
- var overlap = Math . min ( maxA , maxB ) - Math . max ( minA , minB ) ;
1552
- return Math . max ( 0 , overlap ) ;
1553
- }
1497
+ Plotly . plot ( gd , data , layout )
1498
+ . then ( function ( ) { _hover ( gd , 300 , 150 ) ; } )
1499
+ . then ( function ( ) {
1500
+ var nodes = ensureCentered ( hoverInfoNodes ( 'LA Zoo' ) ) ;
1501
+ assertLabelsInsideBoxes ( nodes ) ;
1502
+ assertSecondaryRightToPrimaryBox ( nodes ) ;
1503
+ } )
1504
+ . catch ( failTest )
1505
+ . then ( done ) ;
1506
+ } ) ;
1554
1507
1555
- it ( 'stacks nicely upon each other' , function ( ) {
1556
- _hover ( gd , 300 , 150 ) ;
1508
+ it ( 'centered-aligned, should stack nicely upon each other' , function ( done ) {
1509
+ function calcLineOverlap ( minA , maxA , minB , maxB ) {
1510
+ expect ( minA ) . toBeLessThan ( maxA ) ;
1511
+ expect ( minB ) . toBeLessThan ( maxB ) ;
1557
1512
1558
- var nodesLA = ensureCentered ( hoverInfoNodes ( 'LA Zoo' ) ) ;
1559
- var nodesSF = ensureCentered ( hoverInfoNodes ( 'SF Zoo' ) ) ;
1513
+ var overlap = Math . min ( maxA , maxB ) - Math . max ( minA , minB ) ;
1514
+ return Math . max ( 0 , overlap ) ;
1515
+ }
1560
1516
1561
- // Ensure layout correct
1562
- assertLabelsInsideBoxes ( nodesLA , 'LA Zoo' ) ;
1563
- assertLabelsInsideBoxes ( nodesSF , 'SF Zoo' ) ;
1564
- assertSecondaryRightToPrimaryBox ( nodesLA , 'LA Zoo' ) ;
1565
- assertSecondaryRightToPrimaryBox ( nodesSF , 'SF Zoo' ) ;
1517
+ var trace1 = {
1518
+ x : [ 'giraffes' ] ,
1519
+ y : [ 5 ] ,
1520
+ name : 'LA Zoo' ,
1521
+ type : 'bar' ,
1522
+ text : [ 'Way too long hover info!' ]
1523
+ } ;
1524
+ var trace2 = {
1525
+ x : [ 'giraffes' ] ,
1526
+ y : [ 5 ] ,
1527
+ name : 'SF Zoo' ,
1528
+ type : 'bar' ,
1529
+ text : [ 'Way too looooong hover info!' ]
1530
+ } ;
1531
+ var trace3 = {
1532
+ x : [ 'giraffes' ] ,
1533
+ y : [ 5 ] ,
1534
+ name : 'NY Zoo' ,
1535
+ type : 'bar' ,
1536
+ text : [ 'New York' ]
1537
+ } ;
1538
+ var data = [ trace1 , trace2 , trace3 ] ;
1539
+ var layout = { width : 600 , height : 300 } ;
1566
1540
1567
- // Ensure stacking, finally
1568
- var boxLABB = nodesLA . primaryBox . getBoundingClientRect ( ) ;
1569
- var boxSFBB = nodesSF . primaryBox . getBoundingClientRect ( ) ;
1570
- expect ( calcLineOverlap ( boxLABB . top , boxLABB . bottom , boxSFBB . top , boxSFBB . bottom ) )
1571
- . toBeWithin ( 0 , 1 ) ; // Be robust against floating point arithmetic and subtle future layout changes
1541
+ Plotly . plot ( gd , data , layout )
1542
+ . then ( function ( ) { _hover ( gd , 300 , 150 ) ; } )
1543
+ . then ( function ( ) {
1544
+ var nodesLA = ensureCentered ( hoverInfoNodes ( 'LA Zoo' ) ) ;
1545
+ var nodesSF = ensureCentered ( hoverInfoNodes ( 'SF Zoo' ) ) ;
1546
+
1547
+ // Ensure layout correct
1548
+ assertLabelsInsideBoxes ( nodesLA , 'LA Zoo' ) ;
1549
+ assertLabelsInsideBoxes ( nodesSF , 'SF Zoo' ) ;
1550
+ assertSecondaryRightToPrimaryBox ( nodesLA , 'LA Zoo' ) ;
1551
+ assertSecondaryRightToPrimaryBox ( nodesSF , 'SF Zoo' ) ;
1552
+
1553
+ // Ensure stacking, finally
1554
+ var boxLABB = nodesLA . primaryBox . getBoundingClientRect ( ) ;
1555
+ var boxSFBB = nodesSF . primaryBox . getBoundingClientRect ( ) ;
1556
+
1557
+ // Be robust against floating point arithmetic and subtle future layout changes
1558
+ expect ( calcLineOverlap ( boxLABB . top , boxLABB . bottom , boxSFBB . top , boxSFBB . bottom ) )
1559
+ . toBeWithin ( 0 , 1 ) ;
1560
+ } )
1561
+ . catch ( failTest )
1562
+ . then ( done ) ;
1572
1563
} ) ;
1573
1564
} ) ;
1574
1565
0 commit comments