diff --git a/plotly/widgets/graphWidget.js b/plotly/widgets/graphWidget.js index 284182134bb..eb1ccbc0eb5 100644 --- a/plotly/widgets/graphWidget.js +++ b/plotly/widgets/graphWidget.js @@ -87,12 +87,23 @@ require(["widgets/js/widget"], function(WidgetManager){ update: function() { // Listen for messages from the graph widget in python - var message = this.model.get('_message'); + var jmessage = this.model.get('_message'); - message = JSON.parse(message); + var message = JSON.parse(jmessage); - var plot = $('#'+message.graphId)[0].contentWindow; - plot.postMessage(message, message.plotlyDomain); + // check for duplicate messages + if(!('messageIds' in window)){ + window.messageIds = {}; + window.messageIds[message.uid] = true; + } + + if(!(message.uid in window.messageIds)){ + // message hasn't been received yet, do stuff + window.messageIds[message.uid] = true; + + var plot = $('#'+message.graphId)[0].contentWindow; + plot.postMessage(message, message.plotlyDomain); + } return GraphView.__super__.update.apply(this); } diff --git a/plotly/widgets/graph_widget.py b/plotly/widgets/graph_widget.py index 0605e08b1cf..823d64663e2 100644 --- a/plotly/widgets/graph_widget.py +++ b/plotly/widgets/graph_widget.py @@ -1,6 +1,7 @@ from collections import deque import json import os +import uuid # TODO: protected imports? from IPython.html import widgets @@ -96,6 +97,7 @@ def _handle_outgoing_message(self, message): self._clientMessages.append(message) else: message['graphId'] = self._graphId + message['uid'] = str(uuid.uuid4()) self._message = json.dumps(message) def on_click(self, callback, remove=False):