Change operator canonicalizations.

Streams are converted to their "official" names now.
Topics are not canonicalized at all.
All other operands continue to be lowercased.

Since we don't lowercase stream/topic at the parsing stage,
we have to modify the predicate function to do the lowercasing
of stream/topic to enable case-insensitive comparisons.  This
is slightly more expensive.  The server-side predicate
functions are already case-insensitive.

(imported from commit 286f118c6c3ff9d23b37c7f958cab4c0eacd5feb)
This commit is contained in:
Steve Howell
2013-08-20 09:56:27 -04:00
parent 767a8ae400
commit 0a22094e24
3 changed files with 18 additions and 7 deletions

View File

@@ -32,7 +32,16 @@ Filter.canonicalize_tuple = function (tuple) {
var operand = tuple[1]; var operand = tuple[1];
operator = Filter.canonicalize_operator(operator); operator = Filter.canonicalize_operator(operator);
operand = stream_data.canonicalized_name(operand);
switch (operator) {
case 'stream':
operand = stream_data.get_name(operand);
break;
case 'topic':
break;
default:
operand = operand.toString().toLowerCase();
}
// We may want to consider allowing mixed-case operators at some point // We may want to consider allowing mixed-case operators at some point
return [operator, operand]; return [operator, operand];
@@ -147,6 +156,7 @@ Filter.prototype = {
return false; return false;
} }
operand = operand.toLowerCase();
if (page_params.domain === "mit.edu") { if (page_params.domain === "mit.edu") {
// MIT users expect narrowing to "social" to also show messages to /^(un)*social(.d)*$/ // MIT users expect narrowing to "social" to also show messages to /^(un)*social(.d)*$/
// (unsocial, ununsocial, social.d, etc) // (unsocial, ununsocial, social.d, etc)
@@ -170,6 +180,7 @@ Filter.prototype = {
return false; return false;
} }
operand = operand.toLowerCase();
if (page_params.domain === "mit.edu") { if (page_params.domain === "mit.edu") {
// MIT users expect narrowing to topic "foo" to also show messages to /^foo(.d)*$/ // MIT users expect narrowing to topic "foo" to also show messages to /^foo(.d)*$/
// (foo, foo.d, foo.d.d, etc) // (foo, foo.d, foo.d.d, etc)

View File

@@ -42,7 +42,7 @@ var Filter = global.Filter;
assert.equal(Filter.canonicalize_operator('Stream'), 'stream'); assert.equal(Filter.canonicalize_operator('Stream'), 'stream');
assert.equal(Filter.canonicalize_operator('Subject'), 'topic'); assert.equal(Filter.canonicalize_operator('Subject'), 'topic');
assert.deepEqual(Filter.canonicalize_tuple(['Stream', 'Denmark']), ['stream', 'denmark']); assert.deepEqual(Filter.canonicalize_tuple(['Stream', 'Denmark']), ['stream', 'Denmark']);
}()); }());
(function test_predicates() { (function test_predicates() {

View File

@@ -27,12 +27,12 @@ var stream_data = global.stream_data;
var operators = [['stream', 'Foo'], ['topic', 'Bar'], ['search', 'yo']]; var operators = [['stream', 'Foo'], ['topic', 'Bar'], ['search', 'yo']];
narrow._set_current_filter(new Filter(operators)); narrow._set_current_filter(new Filter(operators));
assert.equal(narrow.stream(), 'foo'); assert.equal(narrow.stream(), 'Foo');
}()); }());
(function test_operators() { (function test_operators() {
var operators = [['stream', 'Foo'], ['topic', 'Bar'], ['search', 'yo']]; var operators = [['stream', 'Foo'], ['topic', 'Bar'], ['search', 'Yo']];
var canonical_operators = [['stream', 'foo'], ['topic', 'bar'], ['search', 'yo']]; var canonical_operators = [['stream', 'Foo'], ['topic', 'Bar'], ['search', 'yo']];
narrow._set_current_filter(new Filter(operators)); narrow._set_current_filter(new Filter(operators));
assert.deepEqual(narrow.operators(), canonical_operators); assert.deepEqual(narrow.operators(), canonical_operators);
@@ -44,8 +44,8 @@ var stream_data = global.stream_data;
var opts = {}; var opts = {};
narrow.set_compose_defaults(opts); narrow.set_compose_defaults(opts);
assert.equal(opts.stream, 'foo'); assert.equal(opts.stream, 'Foo');
assert.equal(opts.subject, 'bar'); assert.equal(opts.subject, 'Bar');
stream_data.add_sub('ROME', {name: 'ROME'}); stream_data.add_sub('ROME', {name: 'ROME'});
operators = [['stream', 'rome']]; operators = [['stream', 'rome']];