summaryrefslogtreecommitdiff
path: root/public/js/mv/connect.js
diff options
context:
space:
mode:
authorFreeyorp <TheFreeYorp@NOSPAM.G.m.a.i.l.replace>2013-05-28 16:52:10 +1200
committerFreeyorp <TheFreeYorp@NOSPAM.G.m.a.i.l.replace>2013-05-28 16:52:10 +1200
commitd7634e357e7410484d1e31f3db84fb4f51fdc9c7 (patch)
treeb58542b94f2963f167c250b209362f2ec6f7f716 /public/js/mv/connect.js
parent919ac3f8297f5b5b14809471a5c0f140859e2fa0 (diff)
downloadmanavis-d7634e357e7410484d1e31f3db84fb4f51fdc9c7.tar.gz
manavis-d7634e357e7410484d1e31f3db84fb4f51fdc9c7.tar.bz2
manavis-d7634e357e7410484d1e31f3db84fb4f51fdc9c7.tar.xz
manavis-d7634e357e7410484d1e31f3db84fb4f51fdc9c7.zip
Trellis external filtering and broadcastingbrushable-trellis
This also adjusts the method for comparing filters, allowing a chart to define a "filterCompare" method that will be used to compare filters if available. This finally removes the date chart special case for setting filters. Array instance checking will now use foo instanceof Array instead of typeof(foo) == "array", which was unreliable (sometimes it's "object"). Trellis chart brush containers will now redraw the brush when set externally. renderBrush no longer takes brushG as a parameter. I'm not sure what I was thinking when I made it so. The deselected area will not yet fade. The trellis chart still requires substantial refactoring and consistency fixes; I'm not sure that the parameter specifications are currently correct.
Diffstat (limited to 'public/js/mv/connect.js')
-rw-r--r--public/js/mv/connect.js26
1 files changed, 13 insertions, 13 deletions
diff --git a/public/js/mv/connect.js b/public/js/mv/connect.js
index 6f3101f..a17febb 100644
--- a/public/js/mv/connect.js
+++ b/public/js/mv/connect.js
@@ -105,30 +105,30 @@ var mv = function(mv) {
/* See if there's any difference - if there isn't, don't update. */
var change = false;
var key;
+ function filterCompare(key, l, r) {
+ return ("filterCompare" in mv.charts[key]) ? mv.charts[key].filterCompare(l, r) : l == r;
+ }
/* Check for keys in the filters to apply which are not in our charts. */
for (key in filters) {
- if (key == "date") {
- /*
- * Special case! FIXME: Find a more elegant way to handle this
- */
- filters[key][0] = new Date(filters[key][0]);
- filters[key][1] = new Date(filters[key][1]);
- }
if (!(key in mv.charts))
continue;
- var filter = mv.charts[key].filter();
- if (typeof(filter) == "array") {
+ /* The two filters to compare. */
+ var l = mv.charts[key].filter();
+ var r = filters[key];
+ if (l instanceof Array) {
/* Crossfilter uses arrays to filter ranges. Exactly the first two elements are significant. */
- if (filter[0] == filters[key][0] &&
- filter[1] == filters[key][1]) {
+ if ((r instanceof Array)
+ && filterCompare(key, l[0], r[0])
+ && filterCompare(key, l[1], r[1])) {
continue;
}
- } else if (filter == filters[key]) {
+ } else if (!(r instanceof Array) && filterCompare(key, l, r)) {
+ /* Exact filter */
continue;
}
/* This filter differs. Apply it. */
change = true;
- mv.charts[key].filter(filters[key]);
+ mv.charts[key].filter(r);
}
/* Check for keys in our charts which are not in the filters to apply. */
for (key in mv.charts) {