@@ -1415,9 +1415,6 @@ function _restyle(gd, aobj, _traces) {
14151415 continue ;
14161416 }
14171417
1418- // take no chances on transforms
1419- if ( ai . substr ( 0 , 10 ) === 'transforms' ) flags . docalc = true ;
1420-
14211418 // set attribute in gd.data
14221419 undoit [ ai ] = a0 ( ) ;
14231420 for ( i = 0 ; i < traces . length ; i ++ ) {
@@ -1557,6 +1554,10 @@ function _restyle(gd, aobj, _traces) {
15571554 }
15581555 helpers . swapXYData ( cont ) ;
15591556 }
1557+ else if ( Plots . dataArrayContainers . indexOf ( param . parts [ 0 ] ) !== - 1 ) {
1558+ helpers . manageArrayContainers ( param , newVal , undoit ) ;
1559+ flags . docalc = true ;
1560+ }
15601561 // all the other ones, just modify that one attribute
15611562 else param . set ( newVal ) ;
15621563
@@ -1816,8 +1817,7 @@ function _relayout(gd, aobj) {
18161817 // trunk nodes (everything except the leaf)
18171818 ptrunk = p . parts . slice ( 0 , pend ) . join ( '.' ) ,
18181819 parentIn = Lib . nestedProperty ( gd . layout , ptrunk ) . get ( ) ,
1819- parentFull = Lib . nestedProperty ( fullLayout , ptrunk ) . get ( ) ,
1820- diff ;
1820+ parentFull = Lib . nestedProperty ( fullLayout , ptrunk ) . get ( ) ;
18211821
18221822 if ( vi === undefined ) continue ;
18231823
@@ -1922,6 +1922,9 @@ function _relayout(gd, aobj) {
19221922 objList = layout [ objType ] || [ ] ,
19231923 obji = objList [ objNum ] || { } ;
19241924
1925+ // new API, remove annotation / shape with `null`
1926+ if ( vi === null ) aobj [ ai ] = 'remove' ;
1927+
19251928 // if p.parts is just an annotation number, and val is either
19261929 // 'add' or an entire annotation to add, the undo is 'remove'
19271930 // if val is 'remove' then undo is the whole annotation object
@@ -1951,42 +1954,11 @@ function _relayout(gd, aobj) {
19511954 drawOne ( gd , objNum , p . parts . slice ( 2 ) . join ( '.' ) , aobj [ ai ] ) ;
19521955 delete aobj [ ai ] ;
19531956 }
1954- else if ( p . parts [ 0 ] === 'images' ) {
1955- var update = Lib . objectFromPath ( ai , vi ) ;
1956- Lib . extendDeepAll ( gd . layout , update ) ;
1957-
1958- Registry . getComponentMethod ( 'images' , 'supplyLayoutDefaults' ) ( gd . layout , gd . _fullLayout ) ;
1959- Registry . getComponentMethod ( 'images' , 'draw' ) ( gd ) ;
1960- }
1961- else if ( p . parts [ 0 ] === 'mapbox' && p . parts [ 1 ] === 'layers' ) {
1962- Lib . extendDeepAll ( gd . layout , Lib . objectFromPath ( ai , vi ) ) ;
1963-
1964- // append empty container to mapbox.layers
1965- // so that relinkPrivateKeys does not complain
1966-
1967- var fullLayers = ( gd . _fullLayout . mapbox || { } ) . layers || [ ] ;
1968- diff = ( p . parts [ 2 ] + 1 ) - fullLayers . length ;
1969-
1970- for ( i = 0 ; i < diff ; i ++ ) fullLayers . push ( { } ) ;
1971-
1972- flags . doplot = true ;
1973- }
1974- else if ( p . parts [ 0 ] === 'updatemenus' ) {
1975- Lib . extendDeepAll ( gd . layout , Lib . objectFromPath ( ai , vi ) ) ;
1976-
1977- var menus = gd . _fullLayout . updatemenus || [ ] ;
1978- diff = ( p . parts [ 2 ] + 1 ) - menus . length ;
1979-
1980- for ( i = 0 ; i < diff ; i ++ ) menus . push ( { } ) ;
1981- flags . doplot = true ;
1982- }
1983- else if ( p . parts [ 0 ] === 'sliders' ) {
1984- Lib . extendDeepAll ( gd . layout , Lib . objectFromPath ( ai , vi ) ) ;
1985-
1986- var sliders = gd . _fullLayout . sliders || [ ] ;
1987- diff = ( p . parts [ 2 ] + 1 ) - sliders . length ;
1988-
1989- for ( i = 0 ; i < diff ; i ++ ) sliders . push ( { } ) ;
1957+ else if (
1958+ Plots . layoutArrayContainers . indexOf ( p . parts [ 0 ] ) !== - 1 ||
1959+ ( p . parts [ 0 ] === 'mapbox' && p . parts [ 1 ] === 'layers' )
1960+ ) {
1961+ helpers . manageArrayContainers ( p , vi , undoit ) ;
19901962 flags . doplot = true ;
19911963 }
19921964 // alter gd.layout
0 commit comments