mirror of
https://github.com/wanglin2/mind-map.git
synced 2026-02-17 22:08:25 +08:00
Feat:节点富文本编辑中,如果粘贴的是smm格式的数据,那么取出第一个节点的纯文本进行粘贴
This commit is contained in:
@@ -26,7 +26,9 @@ import {
|
||||
getDataFromClipboard,
|
||||
htmlEscape,
|
||||
parseAddGeneralizationNodeList,
|
||||
checkNodeListIsEqual
|
||||
checkNodeListIsEqual,
|
||||
createSmmFormatData,
|
||||
checkSmmFormatData
|
||||
} from '../../utils'
|
||||
import { shapeList } from './node/Shape'
|
||||
import { lineStyleProps } from '../../themes/default'
|
||||
@@ -876,20 +878,14 @@ class Render {
|
||||
copy() {
|
||||
this.beingCopyData = this.copyNode()
|
||||
if (!this.beingCopyData) return
|
||||
setDataToClipboard({
|
||||
simpleMindMap: true,
|
||||
data: this.beingCopyData
|
||||
})
|
||||
setDataToClipboard(createSmmFormatData(this.beingCopyData))
|
||||
}
|
||||
|
||||
// 剪切节点
|
||||
cut() {
|
||||
this.mindMap.execCommand('CUT_NODE', copyData => {
|
||||
this.beingCopyData = copyData
|
||||
setDataToClipboard({
|
||||
simpleMindMap: true,
|
||||
data: copyData
|
||||
})
|
||||
setDataToClipboard(createSmmFormatData(copyData))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -936,10 +932,11 @@ class Render {
|
||||
const res = await this.mindMap.opt.customHandleClipboardText(text)
|
||||
if (!isUndef(res)) {
|
||||
useDefault = false
|
||||
if (typeof res === 'object' && res.simpleMindMap) {
|
||||
smmData = res.data
|
||||
const checkRes = checkSmmFormatData(res)
|
||||
if (checkRes.isSmm) {
|
||||
smmData = checkRes.data
|
||||
} else {
|
||||
text = String(res)
|
||||
text = checkRes.data
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -948,13 +945,11 @@ class Render {
|
||||
}
|
||||
// 默认处理
|
||||
if (useDefault) {
|
||||
try {
|
||||
const parsedData = JSON.parse(text)
|
||||
if (parsedData && parsedData.simpleMindMap) {
|
||||
smmData = parsedData.data
|
||||
}
|
||||
} catch (error) {
|
||||
errorHandler(ERROR_TYPES.PARSE_PASTE_DATA_ERROR, error)
|
||||
const checkRes = checkSmmFormatData(text)
|
||||
if (checkRes.isSmm) {
|
||||
smmData = checkRes.data
|
||||
} else {
|
||||
text = checkRes.data
|
||||
}
|
||||
}
|
||||
if (smmData) {
|
||||
|
||||
@@ -6,7 +6,8 @@ import {
|
||||
getTextFromHtml,
|
||||
isWhite,
|
||||
getVisibleColorFromTheme,
|
||||
isUndef
|
||||
isUndef,
|
||||
checkSmmFormatData
|
||||
} from '../utils'
|
||||
import { CONSTANTS } from '../constants/constant'
|
||||
|
||||
@@ -397,7 +398,7 @@ class RichText {
|
||||
// 拦截粘贴,只允许粘贴纯文本
|
||||
this.quill.clipboard.addMatcher(Node.TEXT_NODE, node => {
|
||||
let style = this.getPasteTextStyle()
|
||||
return new Delta().insert(node.data, style)
|
||||
return new Delta().insert(this.formatPasteText(node.data), style)
|
||||
})
|
||||
this.quill.clipboard.addMatcher(Node.ELEMENT_NODE, (node, delta) => {
|
||||
let ops = []
|
||||
@@ -407,7 +408,7 @@ class RichText {
|
||||
if (op.insert && typeof op.insert === 'string' && op.insert !== '\n') {
|
||||
ops.push({
|
||||
attributes: { ...style },
|
||||
insert: op.insert
|
||||
insert: this.formatPasteText(op.insert)
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -428,6 +429,17 @@ class RichText {
|
||||
return {}
|
||||
}
|
||||
|
||||
// 处理粘贴的文本内容
|
||||
formatPasteText(text) {
|
||||
const { isSmm, data } = checkSmmFormatData(text)
|
||||
if (isSmm && data[0] && data[0].data) {
|
||||
// 只取第一个节点的纯文本
|
||||
return getTextFromHtml(data[0].data.text)
|
||||
} else {
|
||||
return text
|
||||
}
|
||||
}
|
||||
|
||||
// 正则输入中文
|
||||
onCompositionStart() {
|
||||
if (!this.showTextEdit) {
|
||||
|
||||
@@ -1027,3 +1027,34 @@ export const getChromeVersion = () => {
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
// 创建smm粘贴的粘贴数据
|
||||
export const createSmmFormatData = data => {
|
||||
return {
|
||||
simpleMindMap: true,
|
||||
data
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否是smm粘贴格式的数据
|
||||
export const checkSmmFormatData = data => {
|
||||
let smmData = null
|
||||
// 如果是字符串,则尝试解析为对象
|
||||
if (typeof data === 'string') {
|
||||
try {
|
||||
const parsedData = JSON.parse(data)
|
||||
// 判断是否是对象,且存在属性标志
|
||||
if (typeof parsedData === 'object' && parsedData.simpleMindMap) {
|
||||
smmData = parsedData.data
|
||||
}
|
||||
} catch (error) {}
|
||||
} else if (typeof data === 'object' && data.simpleMindMap) {
|
||||
// 否则如果是对象,则检查属性标志
|
||||
smmData = data.data
|
||||
}
|
||||
const isSmm = !!smmData
|
||||
return {
|
||||
isSmm,
|
||||
data: isSmm ? smmData : String(data)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user