on master help sign in
Prevent user events from propagating while paused
46806fdMichael James
runtime/Debugger.js+40−2
@@ -167,8 +167,9 @@ function debugModule(module, runtime) {
167 function setPaused() {
167 function setPaused() {
168 programPaused = true;
168 programPaused = true;
169 clearAsyncCallbacks();
169 clearAsyncCallbacks();
170− tracePath.stopRecording();
171 pauseTime = Date.now();
170 pauseTime = Date.now();
171+ tracePath.stopRecording();
172+ preventInputEvents();
172 }
173 }
173
174
174 function setContinue(position) {
175 function setContinue(position) {
@@ -190,7 +191,8 @@ function debugModule(module, runtime) {
190 recordedEvents = recordedEvents.slice(0, position);
191 recordedEvents = recordedEvents.slice(0, position);
191 tracePath.clearTracesAfter(position);
192 tracePath.clearTracesAfter(position);
192 runtime.debuggerStatus.eventCounter = position;
193 runtime.debuggerStatus.eventCounter = position;
193− executeCallbacks(asyncCallbacks);
194+ executeCallbacks(asyncCallbacks);
195+ permitInputEvents();
194
196
195 tracePath.startRecording();
197 tracePath.startRecording();
196 }
198 }
@@ -199,6 +201,42 @@ function debugModule(module, runtime) {
199 return programPaused;
201 return programPaused;
200 }
202 }
201
203
204+ function preventInputEvents(){
205+ var events =
206+ [ "click", "mousemove", "mouseup", "mousedown", "mouseclick"
207+ , "keydown", "keypress", "keyup", "touchstart", "touchend"
208+ , "touchcancel", "touchleave", "touchmove", "pointermove"
209+ , "pointerdown", "pointerup", "pointerover", "pointerout"
210+ , "pointerenter", "pointerleave", "pointercancel"
211+ ];
212+
213+ var gobbler = function(e) {
214+ var evt = e ? e : window.event;
215+ if (evt.stopPropagation) evt.stopPropagation();
216+ if (evt.cabcelBubble !== null) evt.cabcelBubble = true;
217+ if (evt.preventDefault) evt.preventDefault();
218+ return false;
219+ };
220+
221+ var blackHole = document.createElement("div");
222+ blackHole.id = "elmEventGobbler";
223+ blackHole.style.position = "absolute";
224+ blackHole.style.top = "0px";
225+ blackHole.style.left = "0px";
226+ blackHole.style.width = "100%";
227+ blackHole.style.height = "100%";
228+
229+ for (var i = events.length; i-- ;) {
230+ blackHole.addEventListener(events[i], gobbler, true);
231+ }
232+ runtime.node.appendChild(blackHole);
233+ }
234+
235+ function permitInputEvents(){
236+ var blackHole = document.getElementById("elmEventGobbler");
237+ blackHole.parentNode.removeChild(blackHole);
238+ }
239+
202 return {
240 return {
203 debuggedModule: debuggedModule,
241 debuggedModule: debuggedModule,
204 signalGraphNodes: signalGraphNodes,
242 signalGraphNodes: signalGraphNodes,