summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2015-04-12 19:06:37 +0200
committerAlon Levy <alon@pobox.com>2015-04-12 19:06:45 +0200
commit310295684fa1e146af9a0e9b3affc5bfdac75f3b (patch)
tree9ec2b073864a440e3a583d447d9bbc83bed810d1 /src/client
parenta4c41a96ebf99c1d972030adf6927476f973c93c (diff)
client: introduce zen mode
Diffstat (limited to 'src/client')
-rw-r--r--src/client/main.js2
-rw-r--r--src/client/rz_core.js1
-rw-r--r--src/client/view/graph_view.js30
-rw-r--r--src/client/view/selection.js43
4 files changed, 57 insertions, 19 deletions
diff --git a/src/client/main.js b/src/client/main.js
index 67981d9a..fb621070 100644
--- a/src/client/main.js
+++ b/src/client/main.js
@@ -44,7 +44,7 @@ function(textanalysis_ui, textanalysis, buttons, history, drag_n_drop,
textanalysis.init(rz_core.main_graph);
search.init();
filter_menu.init();
- selection.setup_toolbar(rz_core.main_graph);
+ selection.setup_toolbar(rz_core.main_graph, rz_core.main_graph_view);
$.feedback({ajaxURL: rz_config.feedback_url});
fix_feedback_scrolling_to_visibility_causing_topbar_to_slide_slowly_in_webkit();
diff --git a/src/client/rz_core.js b/src/client/rz_core.js
index fd947744..41534201 100644
--- a/src/client/rz_core.js
+++ b/src/client/rz_core.js
@@ -43,6 +43,7 @@ function svg_click_handler(e) {
selection.clear();
item_info.hide(false);
filter_menu.hide();
+ main_graph_view.zen_mode__cancel();
main_graph_view.hide_layout_menu();
update_view__graph(false);
}
diff --git a/src/client/view/graph_view.js b/src/client/view/graph_view.js
index a7d37052..3c97383f 100644
--- a/src/client/view/graph_view.js
+++ b/src/client/view/graph_view.js
@@ -155,6 +155,7 @@ function GraphView(spec) {
vis,
deliverables,
filter_states,
+ zen_mode = false,
// FIXME - want to use parent_element
w,
h,
@@ -181,14 +182,14 @@ function GraphView(spec) {
$(window).asEventStream('resize').map(update_window_size).onValue(function () { update_view(false); });
update_window_size();
- function node__is_shown(d) {
+ function node__pass_filter(d) {
var state = filter_states && filter_states[d.type];
return temporary || state === undefined || state;
}
- function link__is_shown(d) {
- return node__is_shown(d.__src) && node__is_shown(d.__dst);
+ function link__pass_filter(d) {
+ return node__pass_filter(d.__src) && node__pass_filter(d.__dst);
}
@@ -382,12 +383,20 @@ function GraphView(spec) {
return urlValid(d) && image_endings[d.url.slice(d.url.lastIndexOf('.') + 1)] !== undefined;
};
+ function nodes__filtered() {
+ return graph.nodes().filter(node__pass_filter);
+ }
+
function nodes__visible() {
- return graph.nodes().filter(node__is_shown);
+ return zen_mode ? selection.related() : nodes__filtered();
+ }
+
+ function links__filtered() {
+ return graph.links().filter(link__pass_filter);
}
function links__visible() {
- return graph.links().filter(link__is_shown);
+ return zen_mode ? graph.find_links__by_nodes(selection.related()) : links__filtered();
}
function update_view(relayout) {
@@ -1256,6 +1265,17 @@ function GraphView(spec) {
zoomInProgress = val;
tick();
});
+
+ gv.link__pass_filter = link__pass_filter;
+ gv.node__pass_filter = node__pass_filter;
+ gv.zen_mode__toggle = function () {
+ zen_mode = !zen_mode;
+ update_view(true);
+ }
+ gv.zen_mode__cancel = function () {
+ zen_mode = false;
+ update_view(true);
+ }
return gv;
}
diff --git a/src/client/view/selection.js b/src/client/view/selection.js
index 3e76e93b..cf42f57b 100644
--- a/src/client/view/selection.js
+++ b/src/client/view/selection.js
@@ -1,5 +1,5 @@
-define(['Bacon', 'jquery', 'underscore', 'messages'],
-function(Bacon, $, _, messages) {
+define(['Bacon', 'jquery', 'underscore', 'messages', 'util'],
+function(Bacon, $, _, messages, util) {
var rz_core, // circular dependency, see get_rz_core
selection_count_element = $('#selection-count');
@@ -122,15 +122,20 @@ function _type_to_state(type) {
}
function _select_nodes_helper(nodes, connected) {
- _.each(connected.nodes, function (data) {
+ var main_graph_view = get_main_graph_view();
+
+ _.each(connected.nodes.filter(function (data) {
+ return main_graph_view.node__pass_filter(data.node);
+ }), function (data) {
data.node.state = _type_to_state(data.type);
});
- _.each(connected.links, function (data) {
+ _.each(connected.links.filter(function (data) {
+ return main_graph_view.link__pass_filter(data.link);
+ }), function (data) {
data.link.state = _type_to_state(data.type);
});
nodes.forEach(function (n) { n.state = 'selected'; });
return connected.nodes.map(function (d) { return d.node; }).concat(nodes.slice());
-
}
function mutual_neighbours(nodes) {
@@ -140,8 +145,7 @@ function mutual_neighbours(nodes) {
connected.nodes = connected.nodes.filter(function (data) {
return _.size(data.sources) > 1;
});
- ids = _.object(_.map(connected.nodes, function (data) { return data.node.id; }),
- _.map(connected.nodes, function () { return true; }));
+ ids = util.set_from_array(_.map(connected.nodes, function (data) { return data.node.id; }));
connected.links = connected.links.filter(function (data) {
return ids[data.link.__src.id] || ids[data.link.__dst.id];
});
@@ -260,7 +264,7 @@ var invert_nodes = function(nodes)
select_nodes(invert(selected, nodes));
}
-var setup_toolbar = function(main_graph)
+var setup_toolbar = function(main_graph, main_graph_view)
{
var merge_selection = function() {
main_graph.nodes__merge(selected_ids());
@@ -278,21 +282,34 @@ var setup_toolbar = function(main_graph)
merge_btn = $('#btn_merge'),
delete_btn = $('#btn_delete'),
link_fan_btn = $('#btn_link_fan'),
+ zen_mode_btn = $('#btn_zen_mode'),
multiple_node_operations = $('#tool-bar-multiple-node-operations');
merge_btn.asEventStream('click').onValue(merge_selection);
delete_btn.asEventStream('click').onValue(delete_selection);
link_fan_btn.asEventStream('click').onValue(link_fan_selection);
+ function show(e, visible) {
+ if (visible) {
+ e.show();
+ } else {
+ e.hide();
+ }
+ }
+
selectionChangedBus.map(function (selection) { return selection.selected.length > 1; })
.skipDuplicates()
.onValue(function (visible) {
- if (visible) {
- multiple_node_operations.show();
- } else {
- multiple_node_operations.hide();
- }
+ show(multiple_node_operations, visible);
});
+
+ selectionChangedBus.map(function (selection) { return selection.selected.length > 0; })
+ .skipDuplicates()
+ .onValue(function (visible) {
+ show(zen_mode_btn, visible);
+ });
+
+ zen_mode_btn.asEventStream('click').onValue(main_graph_view.zen_mode__toggle);
}
var is_empty = function() {