Repository navigation
Conversation
There was a problem hiding this comment.
Copilot review overview
🟢 Approval recommended
The focused lifecycle fix is consistent with existing button behavior and includes appropriate regression coverage.
Review effort: Balanced
Findings: None
What changed in this PR
Moves toolbar event listener registration to construction time, preventing duplicate keyboard handling after DOM moves.
Changes:
- Registers keyboard and click listeners once in the constructor.
- Adds regression coverage for moved toolbars.
| File | Description |
|---|---|
src/index.ts |
Prevents duplicate event listener registration. |
test/test.js |
Tests keyboard activation after moving the toolbar. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Root cause
MarkdownToolbarElement.connectedCallback()adds itskeydownandclicklisteners every time the element is connected. The click listener is the same function each time, so the browser ignores the duplicate, but the keydown listener is a newkeydown(applyFromToolbar)wrapper on every call. Each time the toolbar is moved in the DOM (disconnected and connected again) it gains one more keydown listener. Pressing Enter or Space on adata-md-buttonelement then applies the style more than once, and for toggling styles like headers or bold the second run undoes the first, so the key press seems to do nothing.Fix
Add the two listeners once in the constructor, the same way
MarkdownButtonElementalready does. They live on the element itself, so they do not need to be removed or added again on disconnect and reconnect.Test
Added a test that adds a
<button data-md-button="header-6">, moves the toolbar, and presses Enter on the button. Without the fix the textarea ends up as|title|(the header is added and then removed) and the test fails; with the fix it is###### |title|and the test passes.npm test(lint, build and the full Karma suite) passes: 144 tests.