Skip to content

Commit 4fb131d

Browse files
committed
Fix cleanup of window resize and orientationchange listeners on activity reload
1 parent 57b1738 commit 4fb131d

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

js/activity.js

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,8 @@ class Activity {
866866
}
867867

868868
//if any window resize event occurs:
869-
this.addEventListener(window, "resize", () => repositionBlocks(this));
869+
this._repositionBlocksListener = () => repositionBlocks(this);
870+
this.addEventListener(window, "resize", this._repositionBlocksListener);
870871

871872
/**
872873
* Finds and organizes blocks within the workspace.
@@ -3704,16 +3705,20 @@ class Activity {
37043705
}
37053706

37063707
let resizeTimeout;
3707-
this.addEventListener(window, "resize", () => {
3708+
this._resizeListener = () => {
37083709
clearTimeout(resizeTimeout);
37093710
resizeTimeout = setTimeout(() => {
37103711
handleResize();
37113712
this._setupPaletteMenu();
37123713
}, 100);
3713-
});
3714-
this.addEventListener(window, "orientationchange", handleResize);
3714+
};
3715+
this.addEventListener(window, "resize", this._resizeListener);
3716+
3717+
this._orientationChangeListener = handleResize;
3718+
this.addEventListener(window, "orientationchange", this._orientationChangeListener);
3719+
37153720
const that = this;
3716-
const resizeCanvas_ = () => {
3721+
this._resizeCanvasListener = () => {
37173722
try {
37183723
that._onResize(false);
37193724
document.getElementById("hideContents").click();
@@ -3723,8 +3728,8 @@ class Activity {
37233728
}
37243729
};
37253730

3726-
resizeCanvas_();
3727-
this.addEventListener(window, "orientationchange", resizeCanvas_);
3731+
this._resizeCanvasListener();
3732+
this.addEventListener(window, "orientationchange", this._resizeCanvasListener);
37283733

37293734
/*
37303735
* Restore last stack pushed to trashStack back onto canvas.
@@ -7565,6 +7570,26 @@ class Activity {
75657570
* Removes all tracked event listeners.
75667571
*/
75677572
cleanupEventListeners() {
7573+
if (this._resizeListener) {
7574+
this.removeEventListener(window, "resize", this._resizeListener);
7575+
this._resizeListener = null;
7576+
}
7577+
7578+
if (this._orientationChangeListener) {
7579+
this.removeEventListener(window, "orientationchange", this._orientationChangeListener);
7580+
this._orientationChangeListener = null;
7581+
}
7582+
7583+
if (this._resizeCanvasListener) {
7584+
this.removeEventListener(window, "orientationchange", this._resizeCanvasListener);
7585+
this._resizeCanvasListener = null;
7586+
}
7587+
7588+
if (this._repositionBlocksListener) {
7589+
this.removeEventListener(window, "resize", this._repositionBlocksListener);
7590+
this._repositionBlocksListener = null;
7591+
}
7592+
75687593
while (this._listeners.length > 0) {
75697594
const { target, type, listener, options } = this._listeners.pop();
75707595
if (target && typeof target.removeEventListener === "function") {

0 commit comments

Comments
 (0)