From 8cbb0ab6d5702ad267d3eb56e471dd3c2d8e0d0f Mon Sep 17 00:00:00 2001 From: Thomas Rueckstiess Date: Thu, 23 Jun 2016 17:58:47 -0400 Subject: [PATCH 1/2] allow building of open bounded range queries --- src/app/minicharts/d3fns/many.js | 27 +++++++++++++++++---------- src/app/minicharts/querybuilder.js | 19 ++++++++++++++++++- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/app/minicharts/d3fns/many.js b/src/app/minicharts/d3fns/many.js index d9b445dc1b0..f14b697424b 100644 --- a/src/app/minicharts/d3fns/many.js +++ b/src/app/minicharts/d3fns/many.js @@ -66,7 +66,7 @@ var minicharts_d3fns_many = function() { function brushed() { var bars = d3.selectAll(options.view.queryAll('rect.selectable')); - var numSelected = options.view.queryAll('rect.selectable.selected').length; + // var numSelected = options.view.queryAll('rect.selectable.selected').length; var s = brush.extent(); bars.classed('selected', function(d) { @@ -83,14 +83,17 @@ var minicharts_d3fns_many = function() { if (!options.view) { return; } - if (numSelected !== options.view.queryAll('rect.selectable.selected').length) { - // number of selected items has changed, trigger querybuilder event - var evt = { - type: 'drag', - source: 'many' - }; - options.view.trigger('querybuilder', evt); - } + var openLeft = d3.mouse(this)[0] < 0; + var openRight = d3.mouse(this)[0] > width; + + // number of selected items has changed, trigger querybuilder event + var evt = { + type: 'drag', + source: 'many', + openLeft: openLeft, + openRight: openRight + }; + options.view.trigger('querybuilder', evt); } function brushend() { @@ -104,9 +107,13 @@ var minicharts_d3fns_many = function() { if (!options.view) { return; } + var openLeft = d3.mouse(this)[0] < 0; + var openRight = d3.mouse(this)[0] > width; var evt = { type: 'drag', - source: 'many' + source: 'many', + openLeft: openLeft, + openRight: openRight }; options.view.trigger('querybuilder', evt); } diff --git a/src/app/minicharts/querybuilder.js b/src/app/minicharts/querybuilder.js index bcd9ed62860..c2dbd6bb7a1 100644 --- a/src/app/minicharts/querybuilder.js +++ b/src/app/minicharts/querybuilder.js @@ -6,6 +6,7 @@ var app = require('ampersand-app'); var LeafValue = require('mongodb-language-model').LeafValue; var LeafClause = require('mongodb-language-model').LeafClause; var ListOperator = require('mongodb-language-model').ListOperator; +var ValueOperator = require('mongodb-language-model').ValueOperator; var GeoOperator = require('mongodb-language-model').GeoOperator; var Range = require('mongodb-language-model').helpers.Range; var metrics = require('mongodb-js-metrics')(); @@ -287,6 +288,23 @@ module.exports = { throw new Error('message.selected should never be longer than 2 elements here!'); } + var q; + // in case one of the bounds is open + if (message.data.openLeft) { + message.upperOp = message.dx > 0 ? '$lt' : '$lte'; + q = {}; + q[message.upperOp] = message.selected[1]; + message.value = new ValueOperator(q, {parse: true}); + return message; + } + + // in case one of the bounds is open + if (message.data.openRight) { + message.lowerOp = '$gte'; + message.value = new ValueOperator({$gte: message.selected[0]}, {parse: true}); + return message; + } + // at this point we definitely have 2 selected values to build a range message.lowerOp = '$gte'; message.upperOp = message.dx > 0 ? '$lt' : '$lte'; @@ -324,7 +342,6 @@ module.exports = { return message; }, - /** * update the UI after a distinct query and mark appropriate elements with .select class. * From 95f2525191984e036a7331a589113641cbcb1144 Mon Sep 17 00:00:00 2001 From: Thomas Rueckstiess Date: Thu, 23 Jun 2016 19:15:27 -0400 Subject: [PATCH 2/2] =?UTF-8?q?fix=20bug=20where=20slow=20bound=20crossing?= =?UTF-8?q?=20didn=E2=80=99t=20work?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/minicharts/d3fns/many.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/app/minicharts/d3fns/many.js b/src/app/minicharts/d3fns/many.js index f14b697424b..4030a1712a3 100644 --- a/src/app/minicharts/d3fns/many.js +++ b/src/app/minicharts/d3fns/many.js @@ -83,9 +83,8 @@ var minicharts_d3fns_many = function() { if (!options.view) { return; } - var openLeft = d3.mouse(this)[0] < 0; - var openRight = d3.mouse(this)[0] > width; - + var openLeft = d3.mouse(this)[0] <= 0; + var openRight = d3.mouse(this)[0] >= width; // number of selected items has changed, trigger querybuilder event var evt = { type: 'drag', @@ -107,8 +106,8 @@ var minicharts_d3fns_many = function() { if (!options.view) { return; } - var openLeft = d3.mouse(this)[0] < 0; - var openRight = d3.mouse(this)[0] > width; + var openLeft = d3.mouse(this)[0] <= 0; + var openRight = d3.mouse(this)[0] >= width; var evt = { type: 'drag', source: 'many',