diff options
| author | Alon Levy <alon@pobox.com> | 2015-04-13 13:39:58 +0200 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2015-04-13 13:39:58 +0200 |
| commit | 348ac301c8c7f1619c2f715208c5a7e09e26c73c (patch) | |
| tree | 08823b7f388caf75ca9a684b7bfcddbfd826bad3 /src/client | |
| parent | 9bc11fd7aae7659904ba02c4c9df80284fb893c2 (diff) | |
client: zen_mode: store/restore fixed on enter/leave, unfix on enter. fixes #486
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/view/graph_view.js | 1 | ||||
| -rw-r--r-- | src/client/view/layouts.js | 31 |
2 files changed, 29 insertions, 3 deletions
diff --git a/src/client/view/graph_view.js b/src/client/view/graph_view.js index 6bcc00e0..3cc0012b 100644 --- a/src/client/view/graph_view.js +++ b/src/client/view/graph_view.js @@ -1281,6 +1281,7 @@ function GraphView(spec) { return; } zen_mode = value; + layout.nodes_links(nodes__visible(), links__visible()); layout.zen_mode(value); update_view(true); } diff --git a/src/client/view/layouts.js b/src/client/view/layouts.js index ae16143e..83fb16ac 100644 --- a/src/client/view/layouts.js +++ b/src/client/view/layouts.js @@ -105,7 +105,7 @@ function(consts, $, d3, _) { function layout__d3_force__link_distance(graph) { var ret = layout__d3_force(graph); - ret.zen_mode = function (zen_mode) { + ret.zen_mode_inner = function (zen_mode) { if (zen_mode) { ret.distance(240) } else { @@ -208,8 +208,33 @@ function(consts, $, d3, _) { layout.nodes(nodes); return layout.links(links); }, - // zen_mode callback - to change layout based on it. - zen_mode: donothing, + // zen_mode callback - to change layout based on it. reimplement inner only + _zen_mode__fixed: {}, + _zen_mode_inner: donothing, + zen_mode: function (zen_mode) { + if (zen_mode) { + var nodes = layout.nodes(); + + // store fixed position + console.log('zen on: storing fixed for ' + _.size(layout.nodes())); + layout._zen_mode__fixed = _.object(_.pluck(nodes, "id"), + _.pluck(nodes, "fixed")); + _.each(nodes, function(node) { node.fixed = false; }); + } else { + // restore fixed + var nodes = layout.nodes(), + d = _.object(_.pluck(nodes, "id"), nodes); + console.log('zen off: restoring fixed for ' + _.size(nodes)); + _.each(_.keys(layout._zen_mode__fixed), function (node_id) { + if (d[node_id] !== undefined) { + d[node_id].fixed = layout._zen_mode__fixed[node_id]; + } else { + console.log('missing ' + node_id); + } + }); + } + return layout._zen_mode_inner(zen_mode); + }, // data graph: graph, _nodes: [], |
