diff --git a/js/src/Figure.js b/js/src/Figure.js index c85097c6e62..f3906dfe3bb 100644 --- a/js/src/Figure.js +++ b/js/src/Figure.js @@ -1248,10 +1248,11 @@ var FigureView = widgets.DOMWidgetView.extend({ /** @type {Py2JsRelayoutMsg} */ var msgData = this.model.get("_py2js_relayout"); if (msgData !== null) { - - var relayoutData = msgData.relayout_data; + if (msgData.source_view_id !== this.viewID) { + var relayoutData = msgData.relayout_data; relayoutData["_doNotReportToPy"] = true; Plotly.relayout(this.el, msgData.relayout_data); + } // ### Send layout delta ### var layout_edit_id = msgData.layout_edit_id; diff --git a/plotly/basewidget.py b/plotly/basewidget.py index f9354c16351..8e822eb6cc8 100644 --- a/plotly/basewidget.py +++ b/plotly/basewidget.py @@ -814,6 +814,12 @@ def _remove_overlapping_props(input_data, delta_data, prop_path=()): input_val, delta_val, recur_prop_path)) removed.extend(recur_removed) + # Check whether the last property in input_val + # has been removed. If so, remove it entirely + if not input_val: + input_data.pop(p) + removed.append(recur_prop_path) + elif p in input_data and p != 'uid': # ### Remove property ### input_data.pop(p)