Files
Superalgos/Projects/Foundations/UI/Function-Libraries/ReferenceAttachDetach.js
T

59 lines
2.1 KiB
JavaScript

function newFoundationsFunctionLibraryAttachDetach() {
let thisObject = {
referenceDetachNode: referenceDetachNode,
referenceAttachNode: referenceAttachNode
}
return thisObject
function referenceDetachNode(node) {
cleanAttachNodePath(node)
completeDetachment(node)
}
function referenceAttachNode(node, attachToNode) {
storeAttachNodePath(node, attachToNode)
completeAttachment(node, attachToNode)
}
// Store the path to the reference parent to make restoring it possible if the reference partent is updated and given a new id
function storeAttachNodePath(node, attachToNode) {
let attachNodePath = UI.projects.foundations.utilities.hierarchy.getNodeNameTypePath(attachToNode)
// Save attach path to active payload
node.payload.referenceParentCombinedNodePath = attachNodePath
}
// Clear the path to reference parent when the reference is cleared
function cleanAttachNodePath(node){
if (node.payload !== undefined) {
node.payload.referenceParentCombinedNodePath = undefined
if (node.savedPayload !== undefined) {
node.savedPayload.referenceParentCombinedNodePath = undefined
}
}
}
// Establish the reference between node and it's reference parent
function completeAttachment(node, attachToNode) {
node.payload.referenceParent = attachToNode
}
// Detach the reference between node and it's reference parent
function completeDetachment(node) {
if (node.payload !== undefined) {
if (node.payload.referenceParent !== undefined) {
if (node.payload.referenceParent.payload !== undefined) {
if (node.payload.referenceParent.payload.uiObject !== undefined) {
node.payload.referenceParent.payload.uiObject.isShowing = false
}
}
}
node.payload.referenceParent = undefined
if (node.savedPayload !== undefined) {
node.savedPayload.referenceParent = undefined
}
}
}
}