UNPKG

cytoscape-expand-collapse

Version:
230 lines (188 loc) 5.87 kB
module.exports = function (cy, api) { if (cy.undoRedo == null) return; var ur = cy.undoRedo({}, true); function getEles(_eles) { return (typeof _eles === "string") ? cy.$(_eles) : _eles; } function getNodePositions() { var positions = {}; var nodes = cy.nodes(); for (var i = 0; i < nodes.length; i++) { var ele = nodes[i]; positions[ele.id()] = { x: ele.position("x"), y: ele.position("y") }; } return positions; } function returnToPositions(positions) { var currentPositions = {}; cy.nodes().not(":parent").positions(function (ele, i) { if(typeof ele === "number") { ele = i; } currentPositions[ele.id()] = { x: ele.position("x"), y: ele.position("y") }; var pos = positions[ele.id()]; return { x: pos.x, y: pos.y }; }); return currentPositions; } var secondTimeOpts = { layoutBy: null, animate: false, fisheye: false }; function doIt(func) { return function (args) { var result = {}; var nodes = getEles(args.nodes); if (args.firstTime) { result.oldData = getNodePositions(); result.nodes = func.indexOf("All") > 0 ? api[func](args.options) : api[func](nodes, args.options); } else { result.oldData = getNodePositions(); result.nodes = func.indexOf("All") > 0 ? api[func](secondTimeOpts) : api[func](cy.collection(nodes), secondTimeOpts); returnToPositions(args.oldData); } return result; }; } var actions = ["collapse", "collapseRecursively", "collapseAll", "expand", "expandRecursively", "expandAll"]; for (var i = 0; i < actions.length; i++) { if(i == 2) ur.action("collapseAll", doIt("collapseAll"), doIt("expandRecursively")); else if(i == 5) ur.action("expandAll", doIt("expandAll"), doIt("collapseRecursively")); else ur.action(actions[i], doIt(actions[i]), doIt(actions[(i + 3) % 6])); } function collapseEdges(args){ var options = args.options; var edges = args.edges; var result = {}; result.options = options; if(args.firstTime){ var collapseResult = api.collapseEdges(edges,options); result.edges = collapseResult.edges; result.oldEdges = collapseResult.oldEdges; result.firstTime = false; }else{ result.oldEdges = edges; result.edges = args.oldEdges; if(args.edges.length > 0 && args.oldEdges.length > 0){ cy.remove(args.edges); cy.add(args.oldEdges); } } return result; } function collapseEdgesBetweenNodes(args){ var options = args.options; var result = {}; result.options = options; if(args.firstTime){ var collapseAllResult = api.collapseEdgesBetweenNodes(args.nodes, options); result.edges = collapseAllResult.edges; result.oldEdges = collapseAllResult.oldEdges; result.firstTime = false; }else{ result.edges = args.oldEdges; result.oldEdges = args.edges; if(args.edges.length > 0 && args.oldEdges.length > 0){ cy.remove(args.edges); cy.add(args.oldEdges); } } return result; } function collapseAllEdges(args){ var options = args.options; var result = {}; result.options = options; if(args.firstTime){ var collapseAllResult = api.collapseAllEdges(options); result.edges = collapseAllResult.edges; result.oldEdges = collapseAllResult.oldEdges; result.firstTime = false; }else{ result.edges = args.oldEdges; result.oldEdges = args.edges; if(args.edges.length > 0 && args.oldEdges.length > 0){ cy.remove(args.edges); cy.add(args.oldEdges); } } return result; } function expandEdges(args){ var options = args.options; var result ={}; result.options = options; if(args.firstTime){ var expandResult = api.expandEdges(args.edges); result.edges = expandResult.edges; result.oldEdges = expandResult.oldEdges; result.firstTime = false; }else{ result.oldEdges = args.edges; result.edges = args.oldEdges; if(args.edges.length > 0 && args.oldEdges.length > 0){ cy.remove(args.edges); cy.add(args.oldEdges); } } return result; } function expandEdgesBetweenNodes(args){ var options = args.options; var result = {}; result.options = options; if(args.firstTime){ var collapseAllResult = api.expandEdgesBetweenNodes(args.nodes,options); result.edges = collapseAllResult.edges; result.oldEdges = collapseAllResult.oldEdges; result.firstTime = false; }else{ result.edges = args.oldEdges; result.oldEdges = args.edges; if(args.edges.length > 0 && args.oldEdges.length > 0){ cy.remove(args.edges); cy.add(args.oldEdges); } } return result; } function expandAllEdges(args){ var options = args.options; var result = {}; result.options = options; if(args.firstTime){ var expandResult = api.expandAllEdges(options); result.edges = expandResult.edges; result.oldEdges = expandResult.oldEdges; result.firstTime = false; }else{ result.edges = args.oldEdges; result.oldEdges = args.edges; if(args.edges.length > 0 && args.oldEdges.length > 0){ cy.remove(args.edges); cy.add(args.oldEdges); } } return result; } ur.action("collapseEdges", collapseEdges, expandEdges); ur.action("expandEdges", expandEdges, collapseEdges); ur.action("collapseEdgesBetweenNodes", collapseEdgesBetweenNodes, expandEdgesBetweenNodes); ur.action("expandEdgesBetweenNodes", expandEdgesBetweenNodes, collapseEdgesBetweenNodes); ur.action("collapseAllEdges", collapseAllEdges, expandAllEdges); ur.action("expandAllEdges", expandAllEdges, collapseAllEdges); };