@@ -6,6 +6,7 @@ var DBLCLICKDELAY = require('@src/plot_api/plot_config').dfltConfig.doubleClickD
66var Legend = require ( '@src/components/legend' ) ;
77var getLegendData = require ( '@src/components/legend/get_legend_data' ) ;
88var helpers = require ( '@src/components/legend/helpers' ) ;
9+ var constants = require ( '@src/components/legend/constants' ) ;
910
1011var d3Select = require ( '../../strict-d3' ) . select ;
1112var d3SelectAll = require ( '../../strict-d3' ) . selectAll ;
@@ -2345,3 +2346,94 @@ describe('legend with custom doubleClickDelay', function() {
23452346 . then ( done , done . fail ) ;
23462347 } , 3 * jasmine . DEFAULT_TIMEOUT_INTERVAL ) ;
23472348} ) ;
2349+
2350+ describe ( 'legend with custom legendtextwidth' , function ( ) {
2351+ var gd ;
2352+
2353+ var data = [
2354+ { x : [ 1 , 2 , 1 ] , y : [ 1 , 2 , 1 ] , name : 'legend text 1' } ,
2355+ { x : [ 2 , 1 , 2 ] , y : [ 2 , 1 , 2 ] , name : 'legend text 12' } ,
2356+ { x : [ 2 , 3 , 4 ] , y : [ 2 , 3 , 4 ] , name : 'legend text 123' }
2357+ ] ;
2358+
2359+ var layout = {
2360+ legend : {
2361+ orientation : 'h'
2362+ }
2363+ } ;
2364+
2365+ beforeEach ( function ( ) {
2366+ gd = createGraphDiv ( ) ;
2367+ } ) ;
2368+
2369+ afterEach ( destroyGraphDiv ) ;
2370+
2371+ function assertLegendTextWidth ( variants ) {
2372+ var nodes = d3SelectAll ( 'rect.legendtoggle' ) ;
2373+ var index = 0 ;
2374+ nodes . each ( function ( ) {
2375+ var node = d3Select ( this ) ;
2376+ var w = + node . attr ( 'width' ) ;
2377+ if ( variants [ index ] ) expect ( w ) . toEqual ( variants [ index ] ) ;
2378+ index += 1 ;
2379+ } ) ;
2380+ }
2381+
2382+ it ( 'should change width when trace has legendtextwidth' , function ( done ) {
2383+ var extendedData = Lib . extendDeep ( [ ] , data ) ;
2384+ extendedData . forEach ( function ( trace , index ) {
2385+ trace . legendtextwidth = ( index + 1 ) * 50 ;
2386+ } ) ;
2387+
2388+ var textGap = 30 + constants . itemGap * 2 + constants . itemGap / 2 ;
2389+
2390+ Plotly . newPlot ( gd , { data : extendedData , layout : layout } ) . then ( function ( ) {
2391+ assertLegendTextWidth ( [ 50 + textGap , 100 + textGap , 150 + textGap ] ) ;
2392+ } ) . then ( done ) ;
2393+ } ) ;
2394+
2395+ it ( 'should change width when legend has legendtextwidth' , function ( done ) {
2396+ var extendedLayout = Lib . extendDeep ( [ ] , layout ) ;
2397+ var width = 50 ;
2398+ extendedLayout . legend . legendtextwidth = width ;
2399+
2400+ var textGap = 30 + constants . itemGap * 2 + constants . itemGap / 2 ;
2401+
2402+ Plotly . newPlot ( gd , { data : data , layout : extendedLayout } ) . then ( function ( ) {
2403+ assertLegendTextWidth ( [ width + textGap , width + textGap , width + textGap ] ) ;
2404+ } ) . then ( done ) ;
2405+ } ) ;
2406+
2407+ it ( 'should change group width when trace has legendtextwidth' , function ( done ) {
2408+ var extendedLayout = Lib . extendDeep ( [ ] , layout ) ;
2409+ extendedLayout . legend . traceorder = 'grouped' ;
2410+
2411+ var extendedData = Lib . extendDeep ( [ ] , data ) ;
2412+ extendedData [ 0 ] . legendtextwidth = 100 ;
2413+ extendedData [ 0 ] . legendgroup = 'test' ;
2414+ extendedData [ 1 ] . legendgroup = 'test' ;
2415+
2416+ var textGap = 30 + constants . itemGap * 2 + constants . itemGap / 2 ;
2417+
2418+ Plotly . newPlot ( gd , { data : extendedData , layout : extendedLayout } ) . then ( function ( ) {
2419+ assertLegendTextWidth ( [ 100 + textGap , 100 + textGap , undefined ] ) ;
2420+ } ) . then ( done ) ;
2421+ } ) ;
2422+
2423+ it ( 'should prefer group legendtextwidth to the legend legendtextwidth' , function ( done ) {
2424+ var extendedLayout = Lib . extendDeep ( [ ] , layout ) ;
2425+ extendedLayout . legend . traceorder = 'grouped' ;
2426+ extendedLayout . legend . legendtextwidth = 50 ;
2427+
2428+ var extendedData = Lib . extendDeep ( [ ] , data ) ;
2429+ extendedData [ 0 ] . legendtextwidth = 100 ;
2430+ extendedData [ 0 ] . legendgroup = 'test' ;
2431+ extendedData [ 1 ] . legendgroup = 'test' ;
2432+
2433+ var textGap = 30 + constants . itemGap * 2 + constants . itemGap / 2 ;
2434+
2435+ Plotly . newPlot ( gd , { data : extendedData , layout : extendedLayout } ) . then ( function ( ) {
2436+ assertLegendTextWidth ( [ 100 + textGap , 100 + textGap , 50 + textGap ] ) ;
2437+ } ) . then ( done ) ;
2438+ } ) ;
2439+ } ) ;
0 commit comments