Files
Superalgos/DesignerSpace/Workspace/FunctionLibraries/NodeDeleter.js
T

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
}
}