@@ -3988,14 +3988,18 @@ describe('hovermode: (x|y)unified', function() {
3988
3988
Lib . clearThrottle ( ) ;
3989
3989
}
3990
3990
3991
+ function getHoverLabel ( ) {
3992
+ var hoverLayer = d3 . select ( 'g.hoverlayer' ) ;
3993
+ return hoverLayer . select ( 'g.legend' ) ;
3994
+ }
3995
+
3991
3996
function assertElementCount ( selector , size ) {
3992
3997
var g = d3 . selectAll ( selector ) ;
3993
3998
expect ( g . size ( ) ) . toBe ( size ) ;
3994
3999
}
3995
4000
3996
4001
function assertLabel ( expectation ) {
3997
- var hoverLayer = d3 . select ( 'g.hoverlayer' ) ;
3998
- var hover = hoverLayer . select ( 'g.legend' ) ;
4002
+ var hover = getHoverLabel ( ) ;
3999
4003
var title = hover . select ( 'text.legendtitletext' ) ;
4000
4004
var traces = hover . selectAll ( 'g.traces' ) ;
4001
4005
@@ -4010,16 +4014,15 @@ describe('hovermode: (x|y)unified', function() {
4010
4014
} ) ;
4011
4015
}
4012
4016
4013
- function assertBgcolor ( color ) {
4014
- var hoverLayer = d3 . select ( 'g.hoverlayer' ) ;
4015
- var hover = hoverLayer . select ( 'g.legend' ) ;
4017
+ function assertRectColor ( color , bordercolor ) {
4018
+ var hover = getHoverLabel ( ) ;
4016
4019
var bg = hover . select ( 'rect.bg' ) ;
4017
- expect ( bg . node ( ) . style . fill ) . toBe ( color ) ;
4020
+ if ( color ) expect ( bg . node ( ) . style . fill ) . toBe ( color ) ;
4021
+ if ( bordercolor ) expect ( bg . node ( ) . style . stroke ) . toBe ( bordercolor ) ;
4018
4022
}
4019
4023
4020
4024
function assertSymbol ( exp ) {
4021
- var hoverLayer = d3 . select ( 'g.hoverlayer' ) ;
4022
- var hover = hoverLayer . select ( 'g.legend' ) ;
4025
+ var hover = getHoverLabel ( ) ;
4023
4026
var traces = hover . selectAll ( 'g.traces' ) ;
4024
4027
expect ( traces . size ( ) ) . toBe ( exp . length ) ;
4025
4028
@@ -4034,6 +4037,17 @@ describe('hovermode: (x|y)unified', function() {
4034
4037
} ) ;
4035
4038
}
4036
4039
4040
+ function assertFont ( fontFamily , fontSize , fontColor ) {
4041
+ var hover = getHoverLabel ( ) ;
4042
+ var text = hover . select ( 'text.legendtext' ) ;
4043
+ var node = text . node ( ) ;
4044
+
4045
+ var textStyle = window . getComputedStyle ( node ) ;
4046
+ expect ( textStyle . fontFamily . split ( ',' ) [ 0 ] ) . toBe ( fontFamily , 'wrong font family' ) ;
4047
+ expect ( textStyle . fontSize ) . toBe ( fontSize , 'wrong font size' ) ;
4048
+ expect ( textStyle . fill ) . toBe ( fontColor , 'wrong font color' ) ;
4049
+ }
4050
+
4037
4051
it ( 'set smart defaults for spikeline in x unified' , function ( done ) {
4038
4052
Plotly . newPlot ( gd , [ { y : [ 4 , 6 , 5 ] } ] , { 'hovermode' : 'x unified' , 'xaxis' : { 'color' : 'red' } } )
4039
4053
. then ( function ( gd ) {
@@ -4316,15 +4330,149 @@ describe('hovermode: (x|y)unified', function() {
4316
4330
. then ( done ) ;
4317
4331
} ) ;
4318
4332
4319
- it ( 'label should have color of paper_bgcolor' , function ( done ) {
4333
+ it ( 'label should have bgcolor/bordercolor from hoverlabel or legend or paper_bgcolor' , function ( done ) {
4334
+ var mockCopy = Lib . extendDeep ( { } , mock ) ;
4335
+ var bgcolor = [
4336
+ 'rgb(10, 10, 10)' ,
4337
+ 'rgb(20, 20, 20)' ,
4338
+ 'rgb(30, 30, 30)' ,
4339
+ 'rgb(40, 40, 40)'
4340
+ ] ;
4341
+
4342
+ Plotly . newPlot ( gd , mockCopy )
4343
+ . then ( function ( gd ) {
4344
+ _hover ( gd , { xval : 3 } ) ;
4345
+
4346
+ assertRectColor ( 'rgb(255, 255, 255)' , 'rgb(68, 68, 68)' ) ;
4347
+
4348
+ // Set paper_bgcolor
4349
+ return Plotly . relayout ( gd , 'paper_bgcolor' , bgcolor [ 0 ] ) ;
4350
+ } )
4351
+ . then ( function ( gd ) {
4352
+ _hover ( gd , { xval : 3 } ) ;
4353
+
4354
+ assertRectColor ( bgcolor [ 0 ] ) ;
4355
+
4356
+ // Set legend.bgcolor which should win over paper_bgcolor
4357
+ return Plotly . relayout ( gd , {
4358
+ 'showlegend' : true ,
4359
+ 'legend.bgcolor' : bgcolor [ 1 ] ,
4360
+ 'legend.bordercolor' : bgcolor [ 1 ]
4361
+ } ) ;
4362
+ } )
4363
+ . then ( function ( gd ) {
4364
+ _hover ( gd , { xval : 3 } ) ;
4365
+
4366
+ assertRectColor ( bgcolor [ 1 ] , bgcolor [ 1 ] ) ;
4367
+
4368
+ // Set hoverlabel.bgcolor which should win over legend.bgcolor
4369
+ return Plotly . relayout ( gd , {
4370
+ 'hoverlabel.bgcolor' : bgcolor [ 2 ] ,
4371
+ 'hoverlabel.bordercolor' : bgcolor [ 2 ]
4372
+ } ) ;
4373
+ } )
4374
+ . then ( function ( gd ) {
4375
+ _hover ( gd , { xval : 3 } ) ;
4376
+
4377
+ assertRectColor ( bgcolor [ 2 ] , bgcolor [ 2 ] ) ;
4378
+
4379
+ // Check that a legend.bgcolor defined in template works
4380
+ delete mockCopy . layout ;
4381
+ mockCopy . layout = {
4382
+ hovermode : 'x unified' ,
4383
+ template : { layout : { legend : { bgcolor : bgcolor [ 1 ] , bordercolor : bgcolor [ 1 ] } } }
4384
+ } ;
4385
+
4386
+ return Plotly . newPlot ( gd , mockCopy ) ;
4387
+ } )
4388
+ . then ( function ( gd ) {
4389
+ _hover ( gd , { xval : 3 } ) ;
4390
+
4391
+ assertRectColor ( bgcolor [ 1 ] , bgcolor [ 1 ] ) ;
4392
+
4393
+ // Check that a hoverlabel.bgcolor defined in template wins
4394
+ delete mockCopy . layout ;
4395
+ mockCopy . layout = {
4396
+ hovermode : 'x unified' ,
4397
+ template : { layout : { hoverlabel : { bgcolor : bgcolor [ 3 ] , bordercolor : bgcolor [ 3 ] } } } ,
4398
+ legend : { bgcolor : bgcolor [ 1 ] , bordercolor : bgcolor [ 1 ] }
4399
+ } ;
4400
+
4401
+ return Plotly . newPlot ( gd , mockCopy ) ;
4402
+ } )
4403
+ . then ( function ( gd ) {
4404
+ _hover ( gd , { xval : 3 } ) ;
4405
+
4406
+ assertRectColor ( bgcolor [ 3 ] , bgcolor [ 3 ] ) ;
4407
+ } )
4408
+ . catch ( failTest )
4409
+ . then ( done ) ;
4410
+ } ) ;
4411
+
4412
+ it ( 'should use hoverlabel.font or legend.font or layout.font' , function ( done ) {
4320
4413
var mockCopy = Lib . extendDeep ( { } , mock ) ;
4321
- var bgcolor = 'rgb(15, 200, 85)' ;
4322
- mockCopy . layout . paper_bgcolor = bgcolor ;
4414
+
4415
+ // Set layout.font
4416
+ mockCopy . layout . font = { size : 20 , family : 'Mono' , color : 'rgb(10, 10, 10)' } ;
4323
4417
Plotly . newPlot ( gd , mockCopy )
4324
4418
. then ( function ( gd ) {
4419
+ _hover ( gd , { xval : 3 } ) ;
4420
+
4421
+ assertFont ( 'Mono' , '20px' , 'rgb(10, 10, 10)' ) ;
4422
+
4423
+ // Set legend.font which should win over layout font
4424
+ return Plotly . relayout ( gd , {
4425
+ 'showlegend' : true ,
4426
+ 'legend.font.size' : 15 ,
4427
+ 'legend.font.family' : 'Helvetica' ,
4428
+ 'legend.font.color' : 'rgb(20, 20, 20)'
4429
+ } ) ;
4430
+ } )
4431
+ . then ( function ( gd ) {
4432
+ _hover ( gd , { xval : 3 } ) ;
4433
+
4434
+ assertFont ( 'Helvetica' , '15px' , 'rgb(20, 20, 20)' ) ;
4435
+
4436
+ // Set hoverlabel.font which should win over legend.font
4437
+ return Plotly . relayout ( gd , {
4438
+ 'hoverlabel.font.size' : 22 ,
4439
+ 'hoverlabel.font.family' : 'Arial' ,
4440
+ 'hoverlabel.font.color' : 'rgb(30, 30, 30)'
4441
+ } ) ;
4442
+ } )
4443
+ . then ( function ( ) {
4444
+ _hover ( gd , { xval : 3 } ) ;
4445
+
4446
+ assertFont ( 'Arial' , '22px' , 'rgb(30, 30, 30)' ) ;
4447
+
4448
+ // Check that a legend.font defined in template wins
4449
+ delete mockCopy . layout ;
4450
+ mockCopy . layout = {
4451
+ hovermode : 'x unified' ,
4452
+ template : { layout : { legend : { font : { size : 5 , family : 'Mono' , color : 'rgb(5, 5, 5)' } } } } ,
4453
+ } ;
4454
+
4455
+ return Plotly . newPlot ( gd , mockCopy ) ;
4456
+ } )
4457
+ . then ( function ( ) {
4458
+ _hover ( gd , { xval : 3 } ) ;
4459
+
4460
+ assertFont ( 'Mono' , '5px' , 'rgb(5, 5, 5)' ) ;
4461
+
4462
+ // Finally, check that a hoverlabel.font defined in template wins
4463
+ delete mockCopy . layout ;
4464
+ mockCopy . layout = {
4465
+ hovermode : 'x unified' ,
4466
+ template : { layout : { hoverlabel : { font : { family : 'Mono' , size : 30 , color : 'red' } } } } ,
4467
+ legend : { font : { size : 20 , family : 'Mono' , color : 'rgb(10, 10, 10)' } }
4468
+ } ;
4469
+
4470
+ return Plotly . newPlot ( gd , mockCopy ) ;
4471
+ } )
4472
+ . then ( function ( ) {
4325
4473
_hover ( gd , { xval : 3 } ) ;
4326
4474
4327
- assertBgcolor ( bgcolor ) ;
4475
+ assertFont ( 'Mono' , '30px' , 'rgb(255, 0, 0)' ) ;
4328
4476
} )
4329
4477
. catch ( failTest )
4330
4478
. then ( done ) ;
0 commit comments