summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2015-04-13 13:39:58 +0200
committerAlon Levy <alon@pobox.com>2015-04-13 13:39:58 +0200
commit348ac301c8c7f1619c2f715208c5a7e09e26c73c (patch)
tree08823b7f388caf75ca9a684b7bfcddbfd826bad3 /src/client
parent9bc11fd7aae7659904ba02c4c9df80284fb893c2 (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.js1
-rw-r--r--src/client/view/layouts.js31
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: [],