@@ -199,7 +199,7 @@ function handleCartesian(gd, ev) {
199199 var fullLayout = gd . _fullLayout ;
200200 var aobj = { } ;
201201 var axList = axisIds . list ( gd , null , true ) ;
202- var allSpikesEnabled = 'on' ;
202+ var allSpikesEnabled = fullLayout . _cartesianSpikesEnabled ;
203203
204204 var ax , i ;
205205
@@ -214,15 +214,18 @@ function handleCartesian(gd, ev) {
214214
215215 if ( ! ax . fixedrange ) {
216216 axName = ax . _name ;
217- if ( val === 'auto' ) aobj [ axName + '.autorange' ] = true ;
218- else if ( val === 'reset' ) {
217+ if ( val === 'auto' ) {
218+ aobj [ axName + '.autorange' ] = true ;
219+ } else if ( val === 'reset' ) {
219220 if ( ax . _rangeInitial === undefined ) {
220221 aobj [ axName + '.autorange' ] = true ;
221222 } else {
222223 var rangeInitial = ax . _rangeInitial . slice ( ) ;
223224 aobj [ axName + '.range[0]' ] = rangeInitial [ 0 ] ;
224225 aobj [ axName + '.range[1]' ] = rangeInitial [ 1 ] ;
225226 }
227+
228+ // N.B. "reset" also resets showspikes
226229 if ( ax . _showSpikeInitial !== undefined ) {
227230 aobj [ axName + '.showspikes' ] = ax . _showSpikeInitial ;
228231 if ( allSpikesEnabled === 'on' && ! ax . _showSpikeInitial ) {
@@ -245,25 +248,18 @@ function handleCartesian(gd, ev) {
245248 }
246249 }
247250 }
248- fullLayout . _cartesianSpikesEnabled = allSpikesEnabled ;
249251 } else {
250252 // if ALL traces have orientation 'h', 'hovermode': 'x' otherwise: 'y'
251253 if ( astr === 'hovermode' && ( val === 'x' || val === 'y' ) ) {
252254 val = fullLayout . _isHoriz ? 'y' : 'x' ;
253255 button . setAttribute ( 'data-val' , val ) ;
254- } else if ( astr === 'hovermode' && val === 'closest' ) {
255- for ( i = 0 ; i < axList . length ; i ++ ) {
256- ax = axList [ i ] ;
257- if ( allSpikesEnabled === 'on' && ! ax . showspikes ) {
258- allSpikesEnabled = 'off' ;
259- }
260- }
261- fullLayout . _cartesianSpikesEnabled = allSpikesEnabled ;
262256 }
263257
264258 aobj [ astr ] = val ;
265259 }
266260
261+ fullLayout . _cartesianSpikesEnabled = allSpikesEnabled ;
262+
267263 Registry . call ( '_guiRelayout' , gd , aobj ) ;
268264}
269265
@@ -581,26 +577,22 @@ modeBarButtons.toggleSpikelines = {
581577 val : 'on' ,
582578 click : function ( gd ) {
583579 var fullLayout = gd . _fullLayout ;
580+ var allSpikesEnabled = fullLayout . _cartesianSpikesEnabled ;
584581
585- fullLayout . _cartesianSpikesEnabled = fullLayout . _cartesianSpikesEnabled === 'on' ? 'off' : 'on' ;
586-
587- var aobj = setSpikelineVisibility ( gd ) ;
588-
589- Registry . call ( '_guiRelayout' , gd , aobj ) ;
582+ fullLayout . _cartesianSpikesEnabled = allSpikesEnabled === 'on' ? 'off' : 'on' ;
583+ Registry . call ( '_guiRelayout' , gd , setSpikelineVisibility ( gd ) ) ;
590584 }
591585} ;
592586
593587function setSpikelineVisibility ( gd ) {
594588 var fullLayout = gd . _fullLayout ;
589+ var areSpikesOn = fullLayout . _cartesianSpikesEnabled === 'on' ;
595590 var axList = axisIds . list ( gd , null , true ) ;
596591 var aobj = { } ;
597592
598- var ax , axName ;
599-
600593 for ( var i = 0 ; i < axList . length ; i ++ ) {
601- ax = axList [ i ] ;
602- axName = ax . _name ;
603- aobj [ axName + '.showspikes' ] = fullLayout . _cartesianSpikesEnabled === 'on' ? true : ax . _showSpikeInitial ;
594+ var ax = axList [ i ] ;
595+ aobj [ ax . _name + '.showspikes' ] = areSpikesOn ? true : ax . _showSpikeInitial ;
604596 }
605597
606598 return aobj ;
0 commit comments