mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-11 17:53:59 +02:00
fix onPaste handler on Chrome / Safari (#3396)
* fix onDOMBeforeInput callback definition * fix onPaste on chrome / safari * improve comment * Update editable.tsx * Create real-suns-matter.md Co-authored-by: Ian Storm Taylor <ian@ianstormtaylor.com>
This commit is contained in:
5
.changeset/real-suns-matter.md
Normal file
5
.changeset/real-suns-matter.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'slate-react': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fixed allowing the `onPaste` handler to be overridden in all browsers.
|
@@ -1017,20 +1017,22 @@ export const Editable = (props: EditableProps) => {
|
|||||||
)}
|
)}
|
||||||
onPaste={useCallback(
|
onPaste={useCallback(
|
||||||
(event: React.ClipboardEvent<HTMLDivElement>) => {
|
(event: React.ClipboardEvent<HTMLDivElement>) => {
|
||||||
// COMPAT: Certain browsers don't support the `beforeinput` event, so we
|
|
||||||
// fall back to React's `onPaste` here instead.
|
|
||||||
// COMPAT: Firefox, Chrome and Safari are not emitting `beforeinput` events
|
|
||||||
// when "paste without formatting" option is used.
|
|
||||||
// This unfortunately needs to be handled with paste events instead.
|
|
||||||
if (
|
if (
|
||||||
|
!readOnly &&
|
||||||
hasEditableTarget(editor, event.target) &&
|
hasEditableTarget(editor, event.target) &&
|
||||||
!isEventHandled(event, attributes.onPaste) &&
|
!isEventHandled(event, attributes.onPaste)
|
||||||
(!HAS_BEFORE_INPUT_SUPPORT ||
|
|
||||||
isPlainTextOnlyPaste(event.nativeEvent)) &&
|
|
||||||
!readOnly
|
|
||||||
) {
|
) {
|
||||||
event.preventDefault()
|
// COMPAT: Certain browsers don't support the `beforeinput` event, so we
|
||||||
ReactEditor.insertData(editor, event.clipboardData)
|
// fall back to React's `onPaste` here instead.
|
||||||
|
// COMPAT: Firefox, Chrome and Safari don't emit `beforeinput` events
|
||||||
|
// when "paste without formatting" is used, so fallback. (2020/02/20)
|
||||||
|
if (
|
||||||
|
!HAS_BEFORE_INPUT_SUPPORT ||
|
||||||
|
isPlainTextOnlyPaste(event.nativeEvent)
|
||||||
|
) {
|
||||||
|
event.preventDefault()
|
||||||
|
ReactEditor.insertData(editor, event.clipboardData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[readOnly, attributes.onPaste]
|
[readOnly, attributes.onPaste]
|
||||||
|
Reference in New Issue
Block a user