Feat:增加对节点非富文本编辑时的粘贴的拦截操作

This commit is contained in:
wanglin2 2023-12-29 22:02:15 +08:00
parent 1409b07fb3
commit 0cfa21d4e6
2 changed files with 30 additions and 1 deletions

View File

@ -3,7 +3,10 @@ import {
checkNodeOuter,
focusInput,
selectAllInput,
htmlEscape
htmlEscape,
handleInputPasteText,
checkSmmFormatData,
getTextFromHtml
} from '../../utils'
import { ERROR_TYPES, CONSTANTS } from '../../constants/constant'
@ -226,6 +229,16 @@ export default class TextEdit {
e.stopPropagation()
}
})
this.textEditNode.addEventListener('paste', e => {
const text = e.clipboardData.getData('text')
const { isSmm, data } = checkSmmFormatData(text)
if (isSmm && data[0] && data[0].data) {
// 只取第一个节点的纯文本
handleInputPasteText(e, getTextFromHtml(data[0].data.text))
} else {
handleInputPasteText(e)
}
})
const targetNode =
this.mindMap.opt.customInnerElsAppendTo || document.body
targetNode.appendChild(this.textEditNode)

View File

@ -1058,3 +1058,19 @@ export const checkSmmFormatData = data => {
data: isSmm ? smmData : String(data)
}
}
// 处理输入框的粘贴事件会去除文本的html格式、换行
export const handleInputPasteText = (e, text) => {
e.preventDefault()
const selection = window.getSelection()
if (!selection.rangeCount) return
selection.deleteFromDocument()
text = text || e.clipboardData.getData('text')
// 去除格式
text = getTextFromHtml(text)
// 去除换行
text = text.replaceAll(/\n/g, '')
const node = document.createTextNode(text)
selection.getRangeAt(0).insertNode(node)
selection.collapseToEnd()
}