@@ -21,15 +21,15 @@ function onDrop(event: DragEvent) {
2121 if ( hasFile ( transfer ) ) return
2222 if ( ! hasLink ( transfer ) ) return
2323
24+ const links = extractLinks ( transfer )
25+ if ( ! links . some ( isImageLink ) ) return
26+
2427 event . stopPropagation ( )
2528 event . preventDefault ( )
2629
2730 const field = event . currentTarget
2831 if ( ! ( field instanceof HTMLTextAreaElement ) ) return
29-
30- for ( const link of links ( transfer ) . map ( linkify ) ) {
31- insertText ( field , link )
32- }
32+ insertText ( field , links . map ( linkify ) . join ( '' ) )
3333}
3434
3535function onDragover ( event : DragEvent ) {
@@ -41,14 +41,15 @@ function onPaste(event: ClipboardEvent) {
4141 const transfer = event . clipboardData
4242 if ( ! transfer || ! hasLink ( transfer ) ) return
4343
44+ const links = extractLinks ( transfer )
45+ if ( ! links . some ( isImageLink ) ) return
46+
4447 event . stopPropagation ( )
4548 event . preventDefault ( )
4649
4750 const field = event . currentTarget
4851 if ( ! ( field instanceof HTMLTextAreaElement ) ) return
49- for ( const link of links ( transfer ) . map ( linkify ) ) {
50- insertText ( field , link )
51- }
52+ insertText ( field , links . map ( linkify ) . join ( '' ) )
5253}
5354
5455function linkify ( link : string ) : string {
@@ -63,14 +64,12 @@ function hasLink(transfer: DataTransfer): boolean {
6364 return Array . from ( transfer . types ) . indexOf ( 'text/uri-list' ) >= 0
6465}
6566
66- function links ( transfer : DataTransfer ) : Array < string > {
67+ function extractLinks ( transfer : DataTransfer ) : Array < string > {
6768 return ( transfer . getData ( 'text/uri-list' ) || '' ) . split ( '\r\n' )
6869}
6970
71+ const IMAGE_RE = / \. ( g i f | p n g | j p e ? g ) $ / i
72+
7073function isImageLink ( url : string ) : boolean {
71- const ext = url
72- . split ( '.' )
73- . pop ( )
74- . toLowerCase ( )
75- return [ 'gif' , 'png' , 'jpg' , 'jpeg' ] . indexOf ( ext ) > - 1
74+ return IMAGE_RE . test ( url )
7675}
0 commit comments