Mousetrap.js doesn’t properly stop callbacks for events originating from a shadow DOM


(Philipp Rudloff) #1

I’m experimenting with shadow DOM in a Discourse plugin I’m writing and noticed that mousetrap.js is not stopping callbacks for events that originate in the shadow DOM. For example, pressing u in an input element triggers the Discourse shortcut for history back navigation; thus, stopping me from filling out any forms.

I’m mainly adding this as a reference for people running into this in the future because it’s unlikely this can be fixed in Discourse without replacing mousetrap.js (except for monkey-patching the file).


(Gerhard Schlager) #2

It would be great if you could get this fixed upstream. That would make our lives a lot easier, because we use yarn for that dependency and we’d like to avoid monkey patching. Please feel free to ping us or create a PR to update our dependency when a new version with the fix has been released.


(Philipp Rudloff) #3

I asked whether they want a new pull request because I don’t want to just hijack the existing pull request although it is stale for three years. We’ll see.


(Philipp Rudloff) #4

I submitted a pull request upstream: Shadow DOM: Stop callbacks from inside an open shadow tree by kleinfreund · Pull Request #438 · ccampbell/mousetrap · GitHub


(Gerhard Schlager) #5

Oh, I just noticed that we are using a fork of mousetrap because we had to apply a patch that hasn’t been merged yet. :see_no_evil:

So, yeah, I guess you could send the pull request to our fork if there’s no reaction in the upstream project in a reasonable timeframe.


(Penar Musaraj) #8

@kleinfreund FYI, I have merged the upstream changes on our fork of mousetrap should you wish to revisit the PR above.


(Philipp Rudloff) #9

I talked to the maintainer and asked whether they’re willing to review a pull request getting everything into order so that my initial pull request can get merged without failing tests. So I’m currently waiting for the review on those preparations. This would hopefully lay the groundwork for Discourse using the original repository as a depedency instead of maintaining a fork. I’ll get back to you once there is any relevant news.

Update: The pull request was merged and a follow-up pull request to address the issue at hand was submitted: