117 lines
3.6 KiB
JavaScript
117 lines
3.6 KiB
JavaScript
function newNodeDeleter () {
|
|
thisObject = {
|
|
deleteWorkspace: deleteWorkspace,
|
|
deleteUIObject: deleteUIObject
|
|
}
|
|
|
|
return thisObject
|
|
|
|
function destroyUiObject (node) {
|
|
canvas.floatingSpace.uiObjectConstructor.destroyUiObject(node.payload)
|
|
}
|
|
|
|
function deleteWorkspace (node, rootNodes) {
|
|
if (node.rootNodes !== undefined) {
|
|
while (node.rootNodes.length > 0) {
|
|
let rootNode = node.rootNodes[0]
|
|
deleteUIObject(rootNode, rootNodes)
|
|
}
|
|
}
|
|
|
|
completeDeletion(node, rootNodes)
|
|
destroyUiObject(node)
|
|
cleanNode(node)
|
|
}
|
|
|
|
function deleteUIObject (node, rootNodes) {
|
|
let nodeDefinition = APP_SCHEMA_MAP.get(node.type)
|
|
if (nodeDefinition !== undefined) {
|
|
/* Remove all of its own children nodes. */
|
|
if (nodeDefinition.properties !== undefined) {
|
|
for (let i = 0; i < nodeDefinition.properties.length; i++) {
|
|
let property = nodeDefinition.properties[i]
|
|
|
|
switch (property.type) {
|
|
case 'node': {
|
|
if (node[property.name] !== undefined) {
|
|
deleteUIObject(node[property.name], rootNodes)
|
|
}
|
|
}
|
|
break
|
|
case 'array': {
|
|
let nodePropertyArray = node[property.name]
|
|
if (nodePropertyArray !== undefined) {
|
|
while (nodePropertyArray.length > 0) {
|
|
deleteUIObject(nodePropertyArray[0], rootNodes)
|
|
}
|
|
}
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Remove node from parent */
|
|
if (node.payload.parentNode !== undefined) {
|
|
let parentNodeDefinition = APP_SCHEMA_MAP.get(node.payload.parentNode.type)
|
|
if (parentNodeDefinition !== undefined) {
|
|
if (parentNodeDefinition.properties !== undefined) {
|
|
for (let i = 0; i < parentNodeDefinition.properties.length; i++) {
|
|
let property = parentNodeDefinition.properties[i]
|
|
if (nodeDefinition.propertyNameAtParent === property.name) {
|
|
switch (property.type) {
|
|
case 'node': {
|
|
node.payload.parentNode[property.name] = undefined
|
|
}
|
|
break
|
|
case 'array': {
|
|
let nodePropertyArray = node.payload.parentNode[property.name]
|
|
if (nodePropertyArray !== undefined) {
|
|
for (let j = 0; j < nodePropertyArray.length; j++) {
|
|
let arrayItem = nodePropertyArray[j]
|
|
if (arrayItem.id === node.id) {
|
|
nodePropertyArray.splice(j, 1)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
completeDeletion(node, rootNodes)
|
|
destroyUiObject(node)
|
|
cleanNode(node)
|
|
}
|
|
}
|
|
|
|
function completeDeletion (node, rootNodes) {
|
|
for (let i = 0; i < rootNodes.length; i++) {
|
|
let rootNode = rootNodes[i]
|
|
if (rootNode.id === node.id) {
|
|
rootNodes.splice(i, 1)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
function cleanNode (node) {
|
|
node.payload.targetPosition.x = undefined
|
|
node.payload.targetPosition.y = undefined
|
|
node.payload.visible = undefined
|
|
node.payload.subTitle = undefined
|
|
node.payload.title = undefined
|
|
node.payload.node = undefined
|
|
node.payload.parentNode = undefined
|
|
node.payload.chainParent = undefined
|
|
node.payload.onMenuItemClick = undefined
|
|
node.handle = undefined
|
|
node.payload = undefined
|
|
node.cleaned = true
|
|
}
|
|
}
|