Pasting a link whose text/html label is a shortened form of its URL plants a `[` inside the URL
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 75/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Quiet
- Tech stack
- javascript
- Domain
- frontend
Research direction
Start in src/paste-markdown-html.ts around lines 83-90, where convertToMarkdown locates the HTML label in the plaintext. Reproduce the clipboard case from the issue, then add the four regression tests described in the proposed fix and run the existing test suite. Done means shortened URL labels are replaced correctly without corrupting URLs, while other cases retain their current behavior.
Written by the indexing model from the issue text.
Description
What happens
When a clipboard carries a URL as text/plain and an anchor labelled with a shortened rendering of that URL as text/html, pasting into a GitHub comment box inserts the Markdown link syntax inside the URL:
text/plain: https://github.com/owner/repo/blob/main/a.js#L7
text/html: <a href="https://github.com/owner/repo/blob/main/a.js#L7">repo/blob/main/a.js#L7</a>
pasted: https://github.com/owner/[repo/blob/main/a.js#L7](https://github.com/owner/repo/blob/main/a.js#L7)
expected: [repo/blob/main/a.js#L7](https://github.com/owner/repo/blob/main/a.js#L7)
It renders as two links, one of them junk (https://github.com/owner/ on its own), and the comment has to be repaired by hand.
Reproduction
Run this in the console of any page with a GitHub comment box, press ⌘C/Ctrl+C, then paste into the box:
document.addEventListener('copy', event => {
const url = 'https://github.com/owner/repo/blob/main/a.js#L7'
event.clipboardData.setData('text/plain', url)
event.clipboardData.setData('text/html', `<a href="${url}">repo/blob/main/a.js#L7</a>`)
event.preventDefault()
}, {once: true})
Why it happens
convertToMarkdown starts from the plaintext flavour and splices [label](href) over the label at the offset where indexOf finds it:
https://github.com/github/paste-markdown/blob/main/src/paste-markdown-html.ts#L83-L90
That is correct for prose containing a link, where the plaintext is a flattening of the HTML. Here the plaintext is the URL and the label is a substring of it, so the label is found at offset 25 rather than 0 and the splice covers only the tail.
The same corruption happens when prose wraps the URL in punctuation — plaintext (https://github.com/owner/repo/blob/main/a.js#L7) yields (https://github.com/owner/[repo/…#L7](…)).
Who hits it
Any tool that writes a link to the clipboard as "URL as plaintext, shortened label as HTML" — macOS automation scripts (Hammerspoon/Alfred/Keyboard Maestro), clipboard managers, and "copy link" affordances that shorten the visible text. Labels containing a character the URL does not (repo#1234) are unaffected, because indexOf misses and the paste is left alone; every label that is a substring of its own URL is affected.
Proposed fix
#117 — replaces the whole URL when the label is a shortened rendering of it, declines rather than corrupting when the label sits inside a URL that is not its own href, and leaves every other case on the existing path. Four regression tests, all failing before the change.
- Dominant language
- JavaScript
- Stars
- 234
- Forks
- 47
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 5
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from github/paste-markdown
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
github/paste-markdown#107 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 45/100
github/paste-markdown#104 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 35/100
github/paste-markdown#100 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 48/100
github/paste-markdown#96 · 1 comment ·
-
Difficulty 3/5 1-2 days Newbie friendliness 52/100
github/paste-markdown#94 ·
All issues in github/paste-markdown
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
HarperFast/skills#96 ·
-
[Block] Latest Posts [Type] Bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Automattic/studio#4908 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
sugarlabs/musicblocks#8847 ·