Skip to content

Commit 2a49714

Browse files
committed
feat: insertParent(WIP)
1 parent 1389439 commit 2a49714

File tree

11 files changed

+77
-13
lines changed

11 files changed

+77
-13
lines changed

src/i18n.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const cn = {
22
addChild: '插入子节点',
3+
addParent: '插入父节点',
34
addSibling: '插入同级节点',
45
removeNode: '删除节点',
56
focus: '专注',
@@ -21,6 +22,7 @@ export default {
2122
zh_CN: cn,
2223
zh_TW: {
2324
addChild: '插入子節點',
25+
addParent: '插入父節點',
2426
addSibling: '插入同級節點',
2527
removeNode: '刪除節點',
2628
focus: '專注',
@@ -38,8 +40,9 @@ export default {
3840
iconsSeparate: '多個圖標半角逗號分隔',
3941
},
4042
en: {
41-
addChild: 'Add a child',
42-
addSibling: 'Add a sibling',
43+
addChild: 'Add child',
44+
addParent: 'Add parent',
45+
addSibling: 'Add sibling',
4346
removeNode: 'Remove node',
4447
focus: 'Focus Mode',
4548
cancelFocus: 'Cancel Focus Mode',
@@ -57,6 +60,7 @@ export default {
5760
},
5861
ja: {
5962
addChild: '子ノードを追加する',
63+
addParent: '親ノードを追加します',
6064
addSibling: '兄弟ノードを追加する',
6165
removeNode: 'ノードを削除',
6266
focus: '集中',
@@ -75,6 +79,7 @@ export default {
7579
},
7680
pt: {
7781
addChild: 'Adicionar item filho',
82+
addParent: 'Adicionar item pai',
7883
addSibling: 'Adicionar item irmao',
7984
removeNode: 'Remover item',
8085
focus: 'Modo Foco',

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import {
3434
import {
3535
insertSibling,
3636
insertBefore,
37+
insertParent,
3738
addChild,
3839
copyNode,
3940
moveNode,
@@ -294,6 +295,7 @@ MindElixir.prototype = {
294295
// node operation
295296
insertSibling: beforeHook(insertSibling),
296297
insertBefore: beforeHook(insertBefore),
298+
insertParent: beforeHook(insertParent),
297299
addChild: beforeHook(addChild),
298300
copyNode: beforeHook(copyNode),
299301
moveNode: beforeHook(moveNode),

src/interact.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function getData(instance) {
1818
* @description Select a node and add solid border to it.
1919
* @param {TargetElement} el - Target element return by E('...'), default value: currentTarget.
2020
*/
21-
export const selectNode = function(targetElement, isNewNode) {
21+
export const selectNode = function(targetElement, isNewNode, clickEvent) {
2222
if (!targetElement) return
2323
console.time('selectNode')
2424
if (typeof targetElement === 'string') {
@@ -28,9 +28,9 @@ export const selectNode = function(targetElement, isNewNode) {
2828
targetElement.className = 'selected'
2929
this.currentNode = targetElement
3030
if (isNewNode) {
31-
this.bus.fire('selectNewNode', targetElement.nodeObj)
31+
this.bus.fire('selectNewNode', targetElement.nodeObj, clickEvent)
3232
} else {
33-
this.bus.fire('selectNode', targetElement.nodeObj)
33+
this.bus.fire('selectNode', targetElement.nodeObj, clickEvent)
3434
}
3535
console.timeEnd('selectNode')
3636
}

src/mouse.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export default function(mind) {
99
e.target.parentElement.nodeName === 'T' ||
1010
e.target.parentElement.nodeName === 'ROOT'
1111
) {
12-
mind.selectNode(e.target)
12+
mind.selectNode(e.target, false, e)
1313
} else if (e.target.nodeName === 'path') {
1414
if (e.target.parentElement.nodeName === 'g') {
1515
mind.selectLink(e.target.parentElement)

src/nodeOperation.ts

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
removeNodeObj,
66
insertNodeObj,
77
insertBeforeNodeObj,
8+
insertParentNodeObj,
89
checkMoveValid,
910
addParentLink,
1011
moveUpObj,
@@ -170,6 +171,46 @@ export const insertBefore = function(el, node) {
170171
})
171172
}
172173

174+
export const insertParent = function(el, node) {
175+
const nodeEle = el || this.currentNode
176+
if (!nodeEle) return
177+
const nodeObj = nodeEle.nodeObj
178+
if (nodeObj.root === true) {
179+
return
180+
}
181+
const newNodeObj = node || this.generateNewObj()
182+
insertParentNodeObj(nodeObj, newNodeObj)
183+
addParentLink(this.nodeData)
184+
const grp0 = nodeEle.parentElement.parentElement
185+
console.time('insertParent_DOM')
186+
const { grp, top } = this.createGroup(newNodeObj)
187+
// console.log(grp)
188+
const children = grp0.parentNode
189+
children.insertBefore(grp, grp0.nextSibling)
190+
191+
// const c = $d.createElement('children')
192+
// c.appendChild(grp0)
193+
// top.appendChild(createExpander(true))
194+
// top.parentElement.insertBefore(c, top.nextSibling)
195+
grp0.remove()
196+
if (children.className === 'box') {
197+
this.processPrimaryNode(grp, newNodeObj)
198+
this.linkDiv()
199+
} else {
200+
this.linkDiv(grp.offsetParent)
201+
}
202+
203+
if (!node) {
204+
this.createInputDiv(top.children[0])
205+
}
206+
this.selectNode(top.children[0], true)
207+
console.timeEnd('insertParent_DOM')
208+
this.bus.fire('operation', {
209+
name: 'insertParent',
210+
obj: newNodeObj,
211+
})
212+
}
213+
173214
export const addChildFunction = function(nodeEle, node) {
174215
if (!nodeEle) return
175216
const nodeObj = nodeEle.nodeObj
@@ -344,7 +385,9 @@ export const removeNode = function(el) {
344385
// remove epd when children length === 0
345386
const parentT = t.parentNode.parentNode.previousSibling
346387
// root doesn't have epd
347-
if (parentT.tagName !== 'ROOT') { parentT.children[1].remove() }
388+
if (parentT.tagName !== 'ROOT') {
389+
parentT.children[1].remove()
390+
}
348391
this.selectParent()
349392
} else {
350393
// select sibling automatically

src/plugin/contextMenu.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export default function(mind, option) {
1717
const locale = i18n[mind.locale] ? mind.locale : 'en'
1818

1919
const add_child = createLi('cm-add_child', i18n[locale].addChild, 'tab')
20+
const add_parent = createLi('cm-add_parent', i18n[locale].addParent, '')
2021
const add_sibling = createLi('cm-add_sibling', i18n[locale].addSibling, 'enter')
2122
const remove_child = createLi(
2223
'cm-remove_child',
@@ -32,6 +33,7 @@ export default function(mind, option) {
3233
const menuUl = document.createElement('ul')
3334
menuUl.className = 'menu-list'
3435
menuUl.appendChild(add_child)
36+
menuUl.appendChild(add_parent)
3537
menuUl.appendChild(add_sibling)
3638
menuUl.appendChild(remove_child)
3739
if (!option || option.focus) {
@@ -112,6 +114,10 @@ export default function(mind, option) {
112114
mind.addChild()
113115
menuContainer.hidden = true
114116
}
117+
add_parent.onclick = e => {
118+
mind.insertParent()
119+
menuContainer.hidden = true
120+
}
115121
add_sibling.onclick = e => {
116122
if (isRoot) return
117123
mind.insertSibling()

src/plugin/nodeMenu.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ export default function(mind) {
176176
mind.bus.addListener('unselectNode', function() {
177177
menuContainer.hidden = true
178178
})
179-
mind.bus.addListener('selectNode', function(nodeObj) {
179+
mind.bus.addListener('selectNode', function(nodeObj, clickEvent) {
180+
if (!clickEvent) return
180181
menuContainer.hidden = false
181182
clearSelect('.palette', 'nmenu-selected')
182183
clearSelect('.size', 'size-selected')

src/utils/dom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ export function createInputDiv(tpc: Topic) {
128128
div.addEventListener('keydown', e => {
129129
e.stopPropagation()
130130
const key = e.key
131-
console.log(e, key)
131+
// console.log(e, key)
132132
if (key === 'Enter' || key === 'Tab') {
133133
// keep wrap for shift enter
134134
if (e.shiftKey) return

src/utils/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,13 @@ export function insertBeforeNodeObj(obj: NodeObj, newObj: NodeObj) {
237237
childrenList.splice(index, 0, newObj)
238238
}
239239

240+
export function insertParentNodeObj(obj: NodeObj, newObj: NodeObj) {
241+
const childrenList = obj.parent.children
242+
const index = childrenList.indexOf(obj)
243+
childrenList[index] = newObj
244+
newObj.children = [obj]
245+
}
246+
240247
export function moveNodeObj(from: NodeObj, to: NodeObj) {
241248
removeNodeObj(from)
242249
if (to.children) to.children.push(from)

src/utils/pubsub.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ Bus.prototype = {
99
if (this.handlers[type] === undefined) this.handlers[type] = []
1010
this.handlers[type].push(handler)
1111
},
12-
fire: function(type, payload) {
12+
fire: function(type, ...payload) {
1313
if (this.handlers[type] instanceof Array) {
1414
var handlers = this.handlers[type]
1515
for (var i = 0; i < handlers.length; i++) {
16-
handlers[i](payload)
16+
handlers[i](...payload)
1717
}
1818
}
1919
},

0 commit comments

Comments
 (0)