diff --git a/dist/recline.js b/dist/recline.js index da4b6b53..d95cbb53 100644 --- a/dist/recline.js +++ b/dist/recline.js @@ -524,12 +524,14 @@ this.recline.Backend.Memory = this.recline.Backend.Memory || {}; } function range(record, filter) { - var startnull = (filter.start === null || filter.start === ''); - var stopnull = (filter.stop === null || filter.stop === ''); + var filterStart = filter.start || filter.from; + var filterStop = filter.stop || filter.to; + var startnull = (_.isUndefined(filterStart) || filterStart === null || filterStart === ''); + var stopnull = (_.isUndefined(filterStop) || filterStop === null || filterStop === ''); var parse = getDataParser(filter); var value = parse(record[filter.field]); - var start = parse(filter.start); - var stop = parse(filter.stop); + var start = parse(startnull ? '' : filterStart); + var stop = parse(stopnull ? '' : filterStop); // if at least one end of range is set do not allow '' to get through // note that for strings '' <= {any-character} e.g. '' <= 'a' diff --git a/src/backend.memory.js b/src/backend.memory.js index 0e6094cc..0c83a7d1 100644 --- a/src/backend.memory.js +++ b/src/backend.memory.js @@ -141,19 +141,19 @@ this.recline.Backend.Memory = this.recline.Backend.Memory || {}; } function range(record, filter) { - var startnull = (filter.start === null || filter.start === ''); - var stopnull = (filter.stop === null || filter.stop === ''); + var fromnull = (_.isUndefined(filter.from) || filter.from === null || filter.from === ''); + var tonull = (_.isUndefined(filter.to) || filter.to === null || filter.to === ''); var parse = getDataParser(filter); var value = parse(record[filter.field]); - var start = parse(filter.start); - var stop = parse(filter.stop); + var from = parse(fromnull ? '' : filter.from); + var to = parse(tonull ? '' : filter.to); // if at least one end of range is set do not allow '' to get through // note that for strings '' <= {any-character} e.g. '' <= 'a' - if ((!startnull || !stopnull) && value === '') { + if ((!fromnull || !tonull) && value === '') { return false; } - return ((startnull || value >= start) && (stopnull || value <= stop)); + return ((fromnull || value >= from) && (tonull || value <= to)); } function geo_distance() { diff --git a/src/model.js b/src/model.js index be9ca3e9..a70ba1ac 100644 --- a/src/model.js +++ b/src/model.js @@ -485,8 +485,8 @@ my.Query = Backbone.Model.extend({ }, range: { type: 'range', - start: '', - stop: '' + from: '', + to: '' }, geo_distance: { type: 'geo_distance', diff --git a/src/widget.filtereditor.js b/src/widget.filtereditor.js index ff92af87..3473b9d5 100644 --- a/src/widget.filtereditor.js +++ b/src/widget.filtereditor.js @@ -59,9 +59,9 @@ my.FilterEditor = Backbone.View.extend({ × \ \ \ - \ + \ \ - \ + \ \ \ ', diff --git a/test/backend.memory.test.js b/test/backend.memory.test.js index e4636884..440e7d8d 100644 --- a/test/backend.memory.test.js +++ b/test/backend.memory.test.js @@ -100,18 +100,19 @@ test('filters', function () { }); query = new recline.Model.Query(); - query.addFilter({type: 'range', field: 'date', start: '2011-01-01', stop: '2011-05-01'}); + query.addFilter({type: 'range', field: 'date', from: '2011-01-01', to: '2011-05-01'}); data.query(query.toJSON()).then(function(out) { equal(out.total, 3); deepEqual(_.pluck(out.hits, 'date'), ['2011-01-01','2011-02-03','2011-04-05']); }); query = new recline.Model.Query(); - query.addFilter({type: 'range', field: 'z', start: '0', stop: '10'}); + query.addFilter({type: 'range', field: 'z', from: '0', to: '10'}); data.query(query.toJSON()).then(function(out) { equal(out.total, 3); deepEqual(_.pluck(out.hits, 'z'), [3,6,9]); }); + }); @@ -119,35 +120,37 @@ test('filters with nulls', function () { var data = _wrapData(); query = new recline.Model.Query(); - query.addFilter({type: 'range', field: 'z', start: '', stop: null}); + query.addFilter({type: 'range', field: 'z', from: '', to: null}); data.query(query.toJSON()).then(function(out) { equal(out.total, 6); }); query = new recline.Model.Query(); - query.addFilter({type: 'range', field: 'x', start: '', stop: '3'}); + query.addFilter({type: 'range', field: 'x', from: '', to: '3'}); data.query(query.toJSON()).then(function(out) { equal(out.total, 3); }); query = new recline.Model.Query(); - query.addFilter({type: 'range', field: 'x', start: '3', stop: ''}); + query.addFilter({type: 'range', field: 'x', from: '3', to: ''}); data.query(query.toJSON()).then(function(out) { equal(out.total, 4); }); data.records[5].country = ''; + query = new recline.Model.Query(); - query.addFilter({type: 'range', field: 'country', start: '', stop: 'Z'}); + query.addFilter({type: 'range', field: 'country', from: '', to: 'Z'}); data.query(query.toJSON()).then(function(out) { equal(out.total, 5); }); query = new recline.Model.Query(); - query.addFilter({type: 'range', field: 'x', start: '', stop: ''}); + query.addFilter({type: 'range', field: 'x', from: '', to: ''}); data.query(query.toJSON()).then(function(out) { equal(out.total, 6); }); + }); test('facet', function () { @@ -305,14 +308,14 @@ test('filters', function () { }); dataset = makeBackendDataset(); - dataset.queryState.addFilter({type: 'range', field: 'date', start: '2011-01-01', stop: '2011-05-01'}); + dataset.queryState.addFilter({type: 'range', field: 'date', from: '2011-01-01', to: '2011-05-01'}); dataset.query().then(function() { equal(dataset.records.length, 3); deepEqual(dataset.records.pluck('date'), ['2011-01-01','2011-02-03','2011-04-05']); }); dataset = makeBackendDataset(); - dataset.queryState.addFilter({type: 'range', field: 'z', start: '0', stop: '10'}); + dataset.queryState.addFilter({type: 'range', field: 'z', from: '0', to: '10'}); dataset.query().then(function() { equal(dataset.records.length, 3); deepEqual(dataset.records.pluck('z'), [3,6,9]); diff --git a/test/widget.filtereditor.test.js b/test/widget.filtereditor.test.js index 656185c2..5faa0189 100644 --- a/test/widget.filtereditor.test.js +++ b/test/widget.filtereditor.test.js @@ -41,7 +41,7 @@ test('basics', function () { $editForm.find('.filter-range input').last().val('4'); $editForm.submit(); equal(dataset.queryState.attributes.filters[0].term, 'UK'); - equal(dataset.queryState.attributes.filters[1].start, 2); + equal(dataset.queryState.attributes.filters[1].from, 2); equal(dataset.records.length, 2); // now remove filter