优化节点编辑

This commit is contained in:
wanglin2 2023-04-22 14:24:05 +08:00
parent c3393abed6
commit b7910c4665
4 changed files with 19 additions and 12 deletions

View File

@ -65,14 +65,15 @@ class RichText {
.ql-container.ql-snow { .ql-container.ql-snow {
border: none; border: none;
} }
`
// .smm-richtext-node-wrap p {
// display: flex;
// }
// .smm-richtext-node-edit-wrap p { .smm-richtext-node-wrap p {
// display: flex; font-family: auto;
// } }
.smm-richtext-node-edit-wrap p {
font-family: auto;
}
`
this.styleEl = document.createElement('style') this.styleEl = document.createElement('style')
this.styleEl.type = 'text/css' this.styleEl.type = 'text/css'
this.styleEl.innerHTML = cssText this.styleEl.innerHTML = cssText

View File

@ -120,11 +120,11 @@ class Style {
} }
// html文字节点 // html文字节点
domText(node, fontSizeScale = 1, textLines) { domText(node, fontSizeScale = 1, isMultiLine) {
node.style.fontFamily = this.merge('fontFamily') node.style.fontFamily = this.merge('fontFamily')
node.style.fontSize = this.merge('fontSize') * fontSizeScale + 'px' node.style.fontSize = this.merge('fontSize') * fontSizeScale + 'px'
node.style.fontWeight = this.merge('fontWeight') || 'normal' node.style.fontWeight = this.merge('fontWeight') || 'normal'
node.style.lineHeight = textLines === 1 ? 'normal' : this.merge('lineHeight') node.style.lineHeight = !isMultiLine ? 'normal' : this.merge('lineHeight')
node.style.fontStyle = this.merge('fontStyle') node.style.fontStyle = this.merge('fontStyle')
} }

View File

@ -110,7 +110,8 @@ export default class TextEdit {
let lineHeight = node.style.merge('lineHeight') let lineHeight = node.style.merge('lineHeight')
let fontSize = node.style.merge('fontSize') let fontSize = node.style.merge('fontSize')
let textLines = (this.cacheEditingText || node.nodeData.data.text).split(/\n/gim) let textLines = (this.cacheEditingText || node.nodeData.data.text).split(/\n/gim)
node.style.domText(this.textEditNode, scale, textLines.length) let isMultiLine = node._textData.node.attr('data-ismultiLine') === 'true'
node.style.domText(this.textEditNode, scale, isMultiLine)
this.textEditNode.style.zIndex = this.mindMap.opt.nodeTextEditZIndex this.textEditNode.style.zIndex = this.mindMap.opt.nodeTextEditZIndex
this.textEditNode.innerHTML = textLines.join('<br>') this.textEditNode.innerHTML = textLines.join('<br>')
this.textEditNode.style.minWidth = rect.width + 10 + 'px' this.textEditNode.style.minWidth = rect.width + 10 + 'px'
@ -119,8 +120,8 @@ export default class TextEdit {
this.textEditNode.style.top = rect.top + 'px' this.textEditNode.style.top = rect.top + 'px'
this.textEditNode.style.display = 'block' this.textEditNode.style.display = 'block'
this.textEditNode.style.maxWidth = this.mindMap.opt.textAutoWrapWidth * scale + 'px' this.textEditNode.style.maxWidth = this.mindMap.opt.textAutoWrapWidth * scale + 'px'
if (textLines.length > 1 && lineHeight !== 1) { if (isMultiLine && lineHeight !== 1) {
this.textEditNode.style.transform = `translateY(${-((lineHeight * fontSize - fontSize) / 2 - 2) * scale}px)` this.textEditNode.style.transform = `translateY(${-((lineHeight * fontSize - fontSize) / 2) * scale}px)`
} }
this.showTextEdit = true this.showTextEdit = true
// 选中文本 // 选中文本

View File

@ -96,6 +96,7 @@ function createTextNode() {
let textStyle = this.style.getTextFontStyle() let textStyle = this.style.getTextFontStyle()
let textArr = this.nodeData.data.text.split(/\n/gim) let textArr = this.nodeData.data.text.split(/\n/gim)
let maxWidth = this.mindMap.opt.textAutoWrapWidth let maxWidth = this.mindMap.opt.textAutoWrapWidth
let isMultiLine = false
textArr.forEach((item, index) => { textArr.forEach((item, index) => {
let arr = item.split('') let arr = item.split('')
let lines = [] let lines = []
@ -113,6 +114,9 @@ function createTextNode() {
if (line.length > 0) { if (line.length > 0) {
lines.push(line.join('')) lines.push(line.join(''))
} }
if (lines.length > 1) {
isMultiLine = true
}
textArr[index] = lines.join('\n') textArr[index] = lines.join('\n')
}) })
textArr = textArr.join('\n').split(/\n/gim) textArr = textArr.join('\n').split(/\n/gim)
@ -127,6 +131,7 @@ function createTextNode() {
height = Math.ceil(height) height = Math.ceil(height)
g.attr('data-width', width) g.attr('data-width', width)
g.attr('data-height', height) g.attr('data-height', height)
g.attr('data-ismultiLine', isMultiLine || textArr.length > 1)
return { return {
node: g, node: g,
width, width,