@@ -24,6 +24,7 @@ var Events = {
24
24
if ( plotObj . _ev instanceof EventEmitter ) return plotObj ;
25
25
26
26
var ev = new EventEmitter ( ) ;
27
+ var internalEv = new EventEmitter ( ) ;
27
28
28
29
/*
29
30
* Assign to plot._ev while we still live in a land
@@ -32,6 +33,16 @@ var Events = {
32
33
*/
33
34
plotObj . _ev = ev ;
34
35
36
+ /*
37
+ * Create a second event handler that will manage events *internally*.
38
+ * This allows parts of plotly to respond to thing like relayout without
39
+ * having to use the user-facing event handler. They cannot peacefully
40
+ * coexist on the same handler because a user invoking
41
+ * plotObj.removeAllListeners() would detach internal events, breaking
42
+ * plotly.
43
+ */
44
+ plotObj . _internalEv = internalEv ;
45
+
35
46
/*
36
47
* Assign bound methods from the ev to the plot object. These methods
37
48
* will reference the 'this' of plot._ev even though they are methods
@@ -46,6 +57,15 @@ var Events = {
46
57
plotObj . removeListener = ev . removeListener . bind ( ev ) ;
47
58
plotObj . removeAllListeners = ev . removeAllListeners . bind ( ev ) ;
48
59
60
+ /*
61
+ * Create funtions for managing internal events. These are *only* triggered
62
+ * by the mirroring of external events via the emit function.
63
+ */
64
+ plotObj . _internalOn = internalEv . on . bind ( internalEv ) ;
65
+ plotObj . _internalOnce = internalEv . once . bind ( internalEv ) ;
66
+ plotObj . _removeInternalListener = internalEv . removeListener . bind ( internalEv ) ;
67
+ plotObj . _removeAllInternalListeners = internalEv . removeAllListeners . bind ( internalEv ) ;
68
+
49
69
/*
50
70
* We must wrap emit to continue to support JQuery events. The idea
51
71
* is to check to see if the user is using JQuery events, if they are
@@ -58,6 +78,7 @@ var Events = {
58
78
}
59
79
60
80
ev . emit ( event , data ) ;
81
+ internalEv . emit ( event , data ) ;
61
82
} ;
62
83
63
84
return plotObj ;
@@ -68,6 +89,10 @@ var Events = {
68
89
* all handlers for a particular event and returns the return value
69
90
* of the LAST handler. This function also triggers jQuery's
70
91
* triggerHandler for backwards compatibility.
92
+ *
93
+ * Note: triggerHandler has been recommended for deprecation in v2.0.0,
94
+ * so the additional behavior of triggerHandler triggering internal events
95
+ * is deliberate excluded in order to avoid reinforcing more usage.
71
96
*/
72
97
triggerHandler : function ( plotObj , event , data ) {
73
98
var jQueryHandlerValue ;
@@ -124,6 +149,13 @@ var Events = {
124
149
delete plotObj . removeAllListeners ;
125
150
delete plotObj . emit ;
126
151
152
+ delete plotObj . _ev ;
153
+ delete plotObj . _internalEv ;
154
+ delete plotObj . _internalOn ;
155
+ delete plotObj . _internalOnce ;
156
+ delete plotObj . _removeInternalListener ;
157
+ delete plotObj . _removeAllInternalListeners ;
158
+
127
159
return plotObj ;
128
160
}
129
161
0 commit comments