mirror of
https://github.com/wanglin2/mind-map.git
synced 2026-02-22 02:47:46 +08:00
82 lines
1.8 KiB
JavaScript
82 lines
1.8 KiB
JavaScript
import { checkIsNodeStyleDataKey } from '../utils/index'
|
|
|
|
// 格式刷插件
|
|
class Painter {
|
|
constructor({ mindMap }) {
|
|
this.mindMap = mindMap
|
|
this.isInPainter = false
|
|
this.painterNode = null
|
|
this.bindEvent()
|
|
}
|
|
|
|
bindEvent() {
|
|
this.painterOneNode = this.painterOneNode.bind(this)
|
|
this.onEndPainter = this.onEndPainter.bind(this)
|
|
this.mindMap.on('node_click', this.painterOneNode)
|
|
this.mindMap.on('draw_click', this.onEndPainter)
|
|
}
|
|
|
|
unBindEvent() {
|
|
this.mindMap.off('node_click', this.painterOneNode)
|
|
this.mindMap.off('draw_click', this.onEndPainter)
|
|
}
|
|
|
|
// 开始格式刷
|
|
startPainter() {
|
|
if (this.mindMap.opt.readonly) return
|
|
let activeNodeList = this.mindMap.renderer.activeNodeList
|
|
if (activeNodeList.length <= 0) return
|
|
this.painterNode = activeNodeList[0]
|
|
this.isInPainter = true
|
|
this.mindMap.emit('painter_start')
|
|
}
|
|
|
|
// 结束格式刷
|
|
endPainter() {
|
|
this.painterNode = null
|
|
this.isInPainter = false
|
|
}
|
|
|
|
onEndPainter() {
|
|
this.endPainter()
|
|
this.mindMap.emit('painter_end')
|
|
}
|
|
|
|
// 格式刷某个节点
|
|
painterOneNode(node) {
|
|
if (
|
|
!node ||
|
|
!this.isInPainter ||
|
|
!this.painterNode ||
|
|
!node ||
|
|
node.uid === this.painterNode.uid
|
|
)
|
|
return
|
|
const style = {}
|
|
const painterNodeData = this.painterNode.nodeData.data
|
|
Object.keys(painterNodeData).forEach(key => {
|
|
if (checkIsNodeStyleDataKey(key)) {
|
|
style[key] = painterNodeData[key]
|
|
}
|
|
})
|
|
node.setStyles(style)
|
|
if (painterNodeData.activeStyle) {
|
|
node.setStyles(painterNodeData.activeStyle, true)
|
|
}
|
|
}
|
|
|
|
// 插件被移除前做的事情
|
|
beforePluginRemove() {
|
|
this.unBindEvent()
|
|
}
|
|
|
|
// 插件被卸载前做的事情
|
|
beforePluginDestroy() {
|
|
this.unBindEvent()
|
|
}
|
|
}
|
|
|
|
Painter.instanceName = 'painter'
|
|
|
|
export default Painter
|