Skip to content

Commit 2827c50

Browse files
committed
Fix pasting a single link in Safari
- The `paste/drop` behavior now defaults to native behavior if no image links were found in the data transfer. This avoids an extra newline when pasting a plain link. - Do not call `insertText()` more than once. This avoids triggering the 'change' event N times if N items were pasted/dropped.
1 parent 226276b commit 2827c50

1 file changed

Lines changed: 24 additions & 11 deletions

File tree

src/paste-markdown-image-link.js

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,23 @@ function onDrop(event: DragEvent) {
2121
if (hasFile(transfer)) return
2222
if (!hasLink(transfer)) return
2323

24+
let linkified = false
25+
const transformedLinks = links(transfer).map(link => {
26+
if (isImageLink(link)) {
27+
linkified = true
28+
return `\n![](${link})\n`
29+
} else {
30+
return link
31+
}
32+
})
33+
if (!linkified) return
34+
2435
event.stopPropagation()
2536
event.preventDefault()
2637

2738
const field = event.currentTarget
2839
if (!(field instanceof HTMLTextAreaElement)) return
29-
30-
for (const link of links(transfer).map(linkify)) {
31-
insertText(field, link)
32-
}
40+
insertText(field, transformedLinks.join(''))
3341
}
3442

3543
function onDragover(event: DragEvent) {
@@ -41,18 +49,23 @@ function onPaste(event: ClipboardEvent) {
4149
const transfer = event.clipboardData
4250
if (!transfer || !hasLink(transfer)) return
4351

52+
let linkified = false
53+
const transformedLinks = links(transfer).map(link => {
54+
if (isImageLink(link)) {
55+
linkified = true
56+
return `\n![](${link})\n`
57+
} else {
58+
return link
59+
}
60+
})
61+
if (!linkified) return
62+
4463
event.stopPropagation()
4564
event.preventDefault()
4665

4766
const field = event.currentTarget
4867
if (!(field instanceof HTMLTextAreaElement)) return
49-
for (const link of links(transfer).map(linkify)) {
50-
insertText(field, link)
51-
}
52-
}
53-
54-
function linkify(link: string): string {
55-
return isImageLink(link) ? `\n![](${link})\n` : link
68+
insertText(field, transformedLinks.join(''))
5669
}
5770

5871
function hasFile(transfer: DataTransfer): boolean {

0 commit comments

Comments
 (0)