You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Adapt.on('popup:opened') listener leak in NarrativeView.openPopup #345
Because it's bound with Adapt.on() directly (not this.listenTo), and a new closure is added on every popup open, listeners accumulate for the lifetime of the page. Each accumulated handler also fires for any popup opened anywhere in the course (not just this narrative's own), so currentItem.toggleVisited(true) runs for unrelated popups too.
Add a narrative component with items that have a title or strapline set (so their popup can be opened).
Open and close a narrative item's popup several times.
Inspect Adapt._events['popup:opened'] in the console — its length grows by one on every open and is never reduced.
Expected behaviour
Only one popup:opened binding should exist per narrative view instance, cleaned up with the view, and it should only react to the popup that narrative instance itself opened.
Actual behaviour
Listeners accumulate indefinitely, and any popup opened elsewhere in the course incorrectly marks the narrative's current item as visited.
Activity
Fix: Prevent Adapt.on('popup:opened') listener leak in openPopup (fixes
Chore(release): 7.13.2 [skip ci]
github-actions commentedon Aug 19, 2026
🎉 This issue has been resolved in version 7.13.2 🎉
The release is available on GitHub release
Your semantic-release bot 📦🚀