@@ -15,18 +15,17 @@ export function uninstall(el: HTMLElement): void {
1515function onDrop ( event : DragEvent ) {
1616 const transfer = event . dataTransfer
1717 if ( ! transfer ) return
18-
1918 if ( hasFile ( transfer ) ) return
2019
21- const table = getTable ( transfer )
22- if ( ! table ) return
20+ const textToPaste = generateText ( transfer )
21+ if ( ! textToPaste ) return
2322
2423 event . stopPropagation ( )
2524 event . preventDefault ( )
2625
2726 const field = event . currentTarget
2827 if ( field instanceof HTMLTextAreaElement ) {
29- insertText ( field , tableMarkdown ( table ) )
28+ insertText ( field , textToPaste )
3029 }
3130}
3231
@@ -38,15 +37,15 @@ function onDragover(event: DragEvent) {
3837function onPaste ( event : ClipboardEvent ) {
3938 if ( ! event . clipboardData ) return
4039
41- const table = getTable ( event . clipboardData )
42- if ( ! table ) return
40+ const textToPaste = generateText ( event . clipboardData )
41+ if ( ! textToPaste ) return
4342
4443 event . stopPropagation ( )
4544 event . preventDefault ( )
4645
4746 const field = event . currentTarget
4847 if ( field instanceof HTMLTextAreaElement ) {
49- insertText ( field , tableMarkdown ( table ) )
48+ insertText ( field , textToPaste )
5049 }
5150}
5251
@@ -82,27 +81,19 @@ function tableMarkdown(node: Element): string {
8281 return `\n${ header } ${ body } \n\n`
8382}
8483
85- function parseTable ( html : string ) : HTMLElement | null {
86- const el = document . createElement ( 'div' )
87- el . innerHTML = html
88-
89- const table = el . querySelector ( 'table' )
90- table ?. remove ( )
91-
92- // Reject tables that have extra text around them.
93- if ( el ?. textContent ?. trim ( ) ) {
94- return null
95- }
84+ function generateText ( transfer : DataTransfer ) : string | undefined {
85+ if ( Array . from ( transfer . types ) . indexOf ( 'text/html' ) === - 1 ) return
9686
97- return table
98- }
87+ const html = transfer . getData ( 'text/html' )
88+ if ( ! / < t a b l e / i . test ( html ) ) return
9989
100- function getTable ( transfer : DataTransfer ) : HTMLElement | null {
101- if ( Array . from ( transfer . types ) . indexOf ( 'text/html' ) === - 1 ) return null
90+ const el = document . createElement ( 'div' )
91+ el . innerHTML = html
92+ let table = el . querySelector ( 'table' )
93+ table = ! table || table . closest ( '[data-paste-markdown-skip]' ) ? null : table
94+ if ( ! table ) return
10295
103- const html = transfer . getData ( 'text/html' )
104- if ( ! / < t a b l e / i. test ( html ) ) return null
96+ const formattedTable = tableMarkdown ( table )
10597
106- const table = parseTable ( html )
107- return ! table || table . closest ( '[data-paste-markdown-skip]' ) ? null : table
98+ return html . replace ( / < m e t a .* ?> / , '' ) . replace ( / < t a b l e .* < \/ t a b l e > / , `\n${ formattedTable } ` )
10899}
0 commit comments