File tree Expand file tree Collapse file tree 6 files changed +44
-1
lines changed
Expand file tree Collapse file tree 6 files changed +44
-1
lines changed Original file line number Diff line number Diff line change 1+ const unformatted = new WeakMap < HTMLElement , boolean > ( )
2+
3+ export function handleUnformatted ( event : KeyboardEvent ) : void {
4+ const { currentTarget : el } = event
5+ if ( event . code === 'KeyV' && ( event . ctrlKey || event . metaKey ) && event . shiftKey ) {
6+ unformatted . set ( el as HTMLElement , true )
7+ }
8+ }
9+
10+ export function isUnformatted ( el : HTMLElement ) : boolean {
11+ const isUnformattedState = unformatted . get ( el ) ?? false
12+ unformatted . delete ( el )
13+
14+ return isUnformattedState
15+ }
Original file line number Diff line number Diff line change 1+ import { handleUnformatted , isUnformatted } from './handlers'
12import { insertText } from './text'
23
34export function install ( el : HTMLElement ) : void {
5+ el . addEventListener ( 'keydown' , handleUnformatted )
46 el . addEventListener ( 'paste' , onPaste )
57}
68
79export function uninstall ( el : HTMLElement ) : void {
10+ el . removeEventListener ( 'keydown' , handleUnformatted )
811 el . removeEventListener ( 'paste' , onPaste )
912}
1013
1114function onPaste ( event : ClipboardEvent ) {
1215 const transfer = event . clipboardData
16+ const { currentTarget : el } = event
17+ if ( isUnformatted ( el as HTMLElement ) ) return
1318 // if there is no clipboard data, or
1419 // if there is no html content in the clipboard, return
1520 if ( ! transfer || ! hasHTML ( transfer ) ) return
Original file line number Diff line number Diff line change 11/* @flow strict */
2-
2+ import { handleUnformatted , isUnformatted } from './handlers'
33import { insertText } from './text'
44
55export function install ( el : HTMLElement ) : void {
6+ el . addEventListener ( 'keydown' , handleUnformatted )
67 el . addEventListener ( 'dragover' , onDragover )
78 el . addEventListener ( 'drop' , onDrop )
89 el . addEventListener ( 'paste' , onPaste )
910}
1011
1112export function uninstall ( el : HTMLElement ) : void {
13+ el . removeEventListener ( 'keydown' , handleUnformatted )
1214 el . removeEventListener ( 'dragover' , onDragover )
1315 el . removeEventListener ( 'drop' , onDrop )
1416 el . removeEventListener ( 'paste' , onPaste )
@@ -38,6 +40,9 @@ function onDragover(event: DragEvent) {
3840}
3941
4042function onPaste ( event : ClipboardEvent ) {
43+ const { currentTarget : el } = event
44+ if ( isUnformatted ( el as HTMLElement ) ) return
45+
4146 const transfer = event . clipboardData
4247 if ( ! transfer || ! hasLink ( transfer ) ) return
4348
Original file line number Diff line number Diff line change 1+ import { handleUnformatted , isUnformatted } from './handlers'
12import { insertText } from './text'
23
34export function install ( el : HTMLElement ) : void {
5+ el . addEventListener ( 'keydown' , handleUnformatted )
46 el . addEventListener ( 'paste' , onPaste )
57}
68
79export function uninstall ( el : HTMLElement ) : void {
10+ el . removeEventListener ( 'keydown' , handleUnformatted )
811 el . removeEventListener ( 'paste' , onPaste )
912}
1013
1114function onPaste ( event : ClipboardEvent ) {
15+ const { currentTarget : el } = event
16+ if ( isUnformatted ( el as HTMLElement ) ) return
17+
1218 const transfer = event . clipboardData
1319 if ( ! transfer || ! hasPlainText ( transfer ) ) return
1420
Original file line number Diff line number Diff line change 1+ import { handleUnformatted , isUnformatted } from './handlers'
12import { insertText } from './text'
23
34export function install ( el : HTMLElement ) : void {
5+ el . addEventListener ( 'keydown' , handleUnformatted )
46 el . addEventListener ( 'dragover' , onDragover )
57 el . addEventListener ( 'drop' , onDrop )
68 el . addEventListener ( 'paste' , onPaste )
79}
810
911export function uninstall ( el : HTMLElement ) : void {
12+ el . removeEventListener ( 'keydown' , handleUnformatted )
1013 el . removeEventListener ( 'dragover' , onDragover )
1114 el . removeEventListener ( 'drop' , onDrop )
1215 el . removeEventListener ( 'paste' , onPaste )
@@ -35,6 +38,9 @@ function onDragover(event: DragEvent) {
3538}
3639
3740function onPaste ( event : ClipboardEvent ) {
41+ const { currentTarget : el } = event
42+ if ( isUnformatted ( el as HTMLElement ) ) return
43+
3844 if ( ! event . clipboardData ) return
3945
4046 const textToPaste = generateText ( event . clipboardData )
Original file line number Diff line number Diff line change 1+ import { handleUnformatted , isUnformatted } from './handlers'
12import { insertText } from './text'
23
34export function install ( el : HTMLElement ) : void {
5+ el . addEventListener ( 'keydown' , handleUnformatted )
46 el . addEventListener ( 'paste' , onPaste )
57}
68
79export function uninstall ( el : HTMLElement ) : void {
10+ el . removeEventListener ( 'keydown' , handleUnformatted )
811 el . removeEventListener ( 'paste' , onPaste )
912}
1013
1114function onPaste ( event : ClipboardEvent ) {
15+ const { currentTarget : el } = event
16+ if ( isUnformatted ( el as HTMLElement ) ) return
17+
1218 const transfer = event . clipboardData
1319 if ( ! transfer || ! hasMarkdown ( transfer ) ) return
1420
You can’t perform that action at this time.
0 commit comments