summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/main.js5
-rw-r--r--src/client/view/filter.js75
-rw-r--r--src/client/view/graph_view.js86
3 files changed, 88 insertions, 78 deletions
diff --git a/src/client/main.js b/src/client/main.js
index c0f042f5..5e2ffa9d 100644
--- a/src/client/main.js
+++ b/src/client/main.js
@@ -35,6 +35,7 @@ define([
'view/filter_menu',
'view/search',
'view/selection',
+ 'view/filter',
],
/**
@@ -55,7 +56,8 @@ function(
util,
filter_menu,
search,
- selection
+ selection,
+ view_filter
) {
function fix_feedback_scrolling_to_visibility_causing_topbar_to_slide_slowly_in_webkit() {
@@ -96,6 +98,7 @@ function(
});
// TODO: interaction between the hack above and this
+ view_filter.init();
model_core.init(rz_config);
rz_core.init();
textanalysis.init(rz_core.main_graph);
diff --git a/src/client/view/filter.js b/src/client/view/filter.js
new file mode 100644
index 00000000..60ff7abd
--- /dev/null
+++ b/src/client/view/filter.js
@@ -0,0 +1,75 @@
+define(['Bacon', 'jquery', 'underscore', 'model/types', 'util'],
+function(Bacon, $, _, model_types, util) {
+
+var filter_states_bus = new Bacon.Bus();
+
+function init() {
+ function create_checkboxes() {
+ var root = $('#menu__type-filter');
+
+ _.each(model_types.nodetypes, function (type) {
+ var input = $('<input type="checkbox" checked="checked">'),
+ div = $('<div class="menu__type-filter_item"></div>');
+
+ input.attr("name", type);
+ div.append(input);
+ div.append(util.capitalize(model_types.node_titles[type]));
+ root.append(div);
+ });
+ }
+
+ function read_checkboxes() {
+ var name,
+ value,
+ // FIXME take filter names from index.html or both from graph db
+ filter_states = _.object(_.map(model_types.nodetypes, function (type) { return [type, null]; }));
+ // jquery map does flattens, and we don't want that
+ checkboxes = _.map($('#menu__type-filter input'),
+ function (checkbox) {
+ return [checkbox.name, checkbox.checked];
+ }
+ );
+ for (var i in checkboxes) {
+ name = checkboxes[i][0];
+ value = checkboxes[i][1];
+ if (undefined === filter_states[name]) {
+ continue;
+ }
+ filter_states[name] = value;
+ }
+ return filter_states;
+ }
+
+ create_checkboxes();
+ read_checkboxes();
+ function filtered_states() {
+ var o = read_checkboxes(),
+ ret = {};
+
+ _.each(_.keys(o), function(type) {
+ if (!o[type]) {
+ ret[type] = 1;
+ }
+ });
+ return ret;
+ }
+ //$('.menu__type-filter_item,.menu__type-filter_item input')
+ $('#menu__type-filter')
+ .asEventStream('click')
+ .onValue(function (e) {
+ var inp = $(e.target).find('input')[0];
+
+ if (inp && inp.checked !== undefined) {
+ inp.checked = !inp.checked;
+ e.preventDefault();
+ }
+ e.stopPropagation();
+ filter_states_bus.push(filtered_states());
+ });
+}
+
+return {
+ init: init,
+ filter_states_bus: filter_states_bus,
+};
+});
diff --git a/src/client/view/graph_view.js b/src/client/view/graph_view.js
index 5f451f73..3c4d46f4 100644
--- a/src/client/view/graph_view.js
+++ b/src/client/view/graph_view.js
@@ -43,8 +43,8 @@
* which resulted in overly complex (read: undefined/buggy) code.
*/
-define(['d3', 'Bacon', 'consts', 'util', 'view/selection', 'model/diff', 'view/item_info', 'view/bubble', 'model/types', 'view/layouts'],
-function(d3 , Bacon, consts, util , selection , model_diff , item_info, view_bubble, model_types, view_layouts) {
+define(['d3', 'Bacon', 'consts', 'util', 'view/selection', 'model/diff', 'view/item_info', 'view/bubble', 'model/types', 'view/layouts', 'view/filter'],
+function(d3 , Bacon, consts, util , selection , model_diff , item_info, view_bubble, model_types, view_layouts, view_filter) {
"use strict"
@@ -80,75 +80,6 @@ function translate(x, y) {
return "translate(" + x + "," + y + ")";
}
-function init_checkboxes(graph, update_view) {
- var // FIXME take filter names from index.html or both from graph db
- filter_states = _.object(_.map(model_types.nodetypes, function (type) { return [type, null]; }));
-
- function create_checkboxes() {
- var root = $('#menu__type-filter');
-
- _.each(model_types.nodetypes, function (type) {
- var input = $('<input type="checkbox" checked="checked">'),
- div = $('<div class="menu__type-filter_item"></div>');
-
- input.attr("name", type);
- div.append(input);
- div.append(util.capitalize(model_types.node_titles[type]));
- root.append(div);
- });
- }
-
- function read_checkboxes() {
- var name,
- value,
- // jquery map does flattens, and we don't want that
- checkboxes = _.map($('#menu__type-filter input'),
- function (checkbox) {
- return [checkbox.name, checkbox.checked];
- }
- );
- for (var i in checkboxes) {
- name = checkboxes[i][0];
- value = checkboxes[i][1];
- if (undefined === filter_states[name]) {
- continue;
- }
- filter_states[name] = value;
- }
- return filter_states;
- }
-
- create_checkboxes();
- read_checkboxes();
- function filtered_states() {
- var o = read_checkboxes(),
- ret = {};
-
- _.each(_.keys(o), function(type) {
- if (!o[type]) {
- ret[type] = 1;
- }
- });
- return ret;
- }
- //$('.menu__type-filter_item,.menu__type-filter_item input')
- $('#menu__type-filter')
- .asEventStream('click')
- .onValue(function (e) {
- var inp = $(e.target).find('input')[0];
-
- if (inp && inp.checked !== undefined) {
- inp.checked = !inp.checked;
- e.preventDefault();
- }
- e.stopPropagation();
- graph.node__set_filtered_types(filtered_states());
- update_view(true);
- })
-
- return filter_states;
-}
-
// "CSS" for SVG elements. Reused for editing elements.
var node_text_dx = 5,
node_text_dy = '.30em';
@@ -225,6 +156,13 @@ function GraphView(spec) {
$(window).asEventStream('resize').map(update_window_size).onValue(function () { update_view(false); });
update_window_size();
+ // read updated filter states from filters view
+ view_filter.filter_states_bus.onValue(function (new_states) {
+ filter_states = new_states;
+ graph.node__set_filtered_types(filter_states);
+ update_view(true);
+ });
+
function node__pass_filter(d) {
var state = filter_states && filter_states[d.type];
@@ -235,12 +173,6 @@ function GraphView(spec) {
return node__pass_filter(d.__src) && node__pass_filter(d.__dst);
}
-
- // Filter. FIXME: move away from here. separate element, connected via bacon property
- if (!temporary) {
- filter_states = init_checkboxes(graph, update_view);
- }
-
function range(start, end, number) {
var ret = [],
i,