123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- /// <reference path="raphael.js" />
- /// <reference path="viewer.js" />
- 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 = {}));
|