///
///
var AB;
(function (AB) {
var Utils = (function () {
function Utils(viewer) {
// Members
this.viewer = viewer;
}
// Removes the selected node
Utils.prototype.onRemoveNode = function () {
if (!this.viewer.selectedNode)
return;
var node = this.viewer.selectedNode;
if (node.type == AB.ActionsBuilder.Type.FLOW_CONTROL && node.parent.combine)
this.viewer.selectedNode = node.parent;
node.parent.removeChild(node);
this.viewer._removeAction(node, false);
if (node.combine) {
// Remove hub
var hub = node.hub;
node.parent.removeChild(hub.action);
this.viewer._removeAction(hub.action, false);
if (hub.action.children.length > 0)
node.hub.action.children[0].parent = node.parent;
}
this.viewer.update();
this.viewer.parametersManager.clearParameters();
this.viewer.selectedNode = null;
}
// Removes the selected branch (starting from the selected node)
Utils.prototype.onRemoveBranch = function () {
if (!this.viewer.selectedNode)
return;
var node = this.viewer.selectedNode;
if (node.type == AB.ActionsBuilder.Type.FLOW_CONTROL && node.parent.combine)
this.selectedNode = node.parent;
node.parent.removeChild(this.selectedNode);
this.viewer._removeAction(node, true);
this.viewer.update();
this.viewer.parametersManager.clearParameters();
this.viewer.selectedNode = null;
}
// Detaches the selected node
// forceDetach: forces the Detach Color (green) for children of the selected node
// forceAttach: same as forceDetach but for the original node color
Utils.prototype.onDetachNode = function (forceDetach, forceAttach) {
if (!this.viewer.selectedNode)
return;
var node = this.viewer.selectedNode;
if (forceDetach == null) forceDetach = false;
if (forceAttach == null) forceAttach = false;
var detached = node.node.detached;
if (forceAttach)
detached = false;
else if (forceDetach)
detached = true;
else
detached = !detached;
node.node.detached = detached;
var scope = this;
var resetColor = function (root, color) {
var col = color == null ? scope.viewer.getNodeColor(root, scope.viewer.isParentDetached(root)) : color;
root.node.attr(root.node.rect, "fill", col);
if (root.node.line)
root.node.attr(root.node.line, "stroke", col);
if (root.combine) {
for (var i = 0; i < root.combineArray.length; i++) {
resetColor(root.combineArray[i], color);
}
}
for (var i = 0; i < root.children.length; i++) {
resetColor(root.children[i], color);
}
};
this.viewer._setLine(node);
resetColor(node, !detached ? null : this.viewer.getNodeColor(node));
}
// Disconnects all triggers
Utils.prototype.onDetachAll = function (forceDetach, forceAttach) {
var scope = this;
var detach = function (root) {
scope.viewer.selectedNode = root;
scope.onDetachNode(forceDetach, forceAttach);
};
for (var i = 0; i < this.viewer.root.action.children.length; i++)
detach(this.viewer.root.action.children[i]);
}
// Copies the selected node structure (except root node) to the
// clipboard
Utils.prototype.onCopyStructure = function () {
if (!this.viewer.selectedNode)
return;
var structure = this.viewer.createJSON(this.viewer.selectedNode);
var asText = JSON.stringify(structure);
window.clipboardData.setData("text", asText);
}
// Pastes the previously copied structure (onCopyStructure) to
// the selected node
Utils.prototype.onPasteStructure = function () {
if (!this.viewer.selectedNode)
return;
var asText = window.clipboardData.getData("text");
var isJson = asText.length > 0 && asText[0] == "{" && asText[asText.length - 1] == "}";
var structure = JSON.parse(asText);
var node = this.viewer.selectedNode;
if (structure.type == AB.ActionsBuilder.Type.TRIGGER && node.node != this.viewer.root) {
alert("You can't paste a trigger if the selected node isn't the root object");
return;
}
if (structure.type != AB.ActionsBuilder.Type.TRIGGER && node.node == this.viewer.root) {
alert("You can't paste an action or condition if the selected node is the root object");
return;
}
this.viewer.loadFromJSON(structure, node);
this.viewer.update();
}
// Reduces the select node's width
Utils.prototype.onReduce = function (forceExpand, forceReduce) {
if (!this.viewer.selectedNode)
return;
if (forceExpand == null) forceExpand = false;
if (forceReduce == null) forceReduce = false;
var node = this.viewer.selectedNode.node;
var width = node.attr(node.rect, "width");
if ((width >= Graph.NODE_WIDTH && !forceExpand) || forceReduce) {
node.text.hide();
node.rect.stop();
}
else {
node.text.show();
node.attr(node.rect, "opacity", 1.0);
}
node.attr(node.rect, "width", (width >= Graph.NODE_WIDTH * this.viewer.zoom && !forceExpand) || forceReduce ? Graph.NODE_MINIMIZED_WIDTH * this.viewer.zoom : Graph.NODE_WIDTH * this.viewer.zoom);
node.minimized = !node.minimized;
this.viewer.update();
}
// Reduces all graph's nodes
Utils.prototype.onReduceAll = function (forceExpand) {
if (forceExpand == null)
forceExpand = false;
var scope = this;
var reduce = function (root) {
scope.viewer.selectedNode = root;
scope.onReduce(forceExpand, forceExpand ? false : true);
if (root.combine) {
for (var i = 0; i < root.combineArray.length; i++)
reduce(root.combineArray[i]);
}
for (var i = 0; i < root.children.length; i++)
reduce(root.children[i]);
};
for (var i = 0; i < this.viewer.root.action.children.length; i++)
reduce(this.viewer.root.action.children[i]);
this.viewer.selectedNode = null;
}
return Utils;
})();
AB.Utils = Utils;
})(AB || (AB = {}));