mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
If you typed in more than one word for a stream with multiple words in it's name, it would not show up in the search list. This fixes that and adds some more tests covering the entire functionality of the filter.
99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
var stream_sort = (function () {
|
|
|
|
var exports = {};
|
|
|
|
var previous_pinned;
|
|
var previous_normal;
|
|
var previous_dormant;
|
|
var all_streams = [];
|
|
|
|
exports.get_streams = function () {
|
|
// Right now this is only used for testing, but we should
|
|
// use it for things like hotkeys that cycle through streams.
|
|
return all_streams;
|
|
};
|
|
|
|
function filter_streams_by_search(streams, search_term) {
|
|
if (search_term === '') {
|
|
return streams;
|
|
}
|
|
|
|
var search_terms = search_term.toLowerCase().split(",");
|
|
search_terms = _.map(search_terms, function (s) {
|
|
return s.trim();
|
|
});
|
|
|
|
var filtered_streams = _.filter(streams, function (stream) {
|
|
return _.any(search_terms, function (search_term) {
|
|
var lower_stream_name = stream.toLowerCase();
|
|
var cands = lower_stream_name.split(" ");
|
|
cands.push(lower_stream_name);
|
|
return _.any(cands, function (name) {
|
|
return name.indexOf(search_term) === 0;
|
|
});
|
|
});
|
|
});
|
|
|
|
return filtered_streams;
|
|
}
|
|
|
|
exports.sort_groups = function (search_term) {
|
|
var streams = stream_data.subscribed_streams();
|
|
if (streams.length === 0) {
|
|
return;
|
|
}
|
|
|
|
streams = filter_streams_by_search(streams, search_term);
|
|
|
|
function is_normal(sub) {
|
|
return stream_data.is_active(sub);
|
|
}
|
|
|
|
var pinned_streams = [];
|
|
var normal_streams = [];
|
|
var dormant_streams = [];
|
|
|
|
_.each(streams, function (stream) {
|
|
var sub = stream_data.get_sub(stream);
|
|
var pinned = sub.pin_to_top;
|
|
if (pinned) {
|
|
pinned_streams.push(stream);
|
|
} else if (is_normal(sub)) {
|
|
normal_streams.push(stream);
|
|
} else {
|
|
dormant_streams.push(stream);
|
|
}
|
|
});
|
|
|
|
pinned_streams.sort(util.strcmp);
|
|
normal_streams.sort(util.strcmp);
|
|
dormant_streams.sort(util.strcmp);
|
|
|
|
var same_as_before = (
|
|
previous_pinned !== undefined &&
|
|
util.array_compare(previous_pinned, pinned_streams) &&
|
|
util.array_compare(previous_normal, normal_streams) &&
|
|
util.array_compare(previous_dormant, dormant_streams));
|
|
|
|
if (!same_as_before) {
|
|
previous_pinned = pinned_streams;
|
|
previous_normal = normal_streams;
|
|
previous_dormant = dormant_streams;
|
|
|
|
all_streams = pinned_streams.concat(normal_streams, dormant_streams);
|
|
}
|
|
|
|
return {
|
|
same_as_before: same_as_before,
|
|
pinned_streams: pinned_streams,
|
|
normal_streams: normal_streams,
|
|
dormant_streams: dormant_streams,
|
|
};
|
|
};
|
|
|
|
return exports;
|
|
}());
|
|
if (typeof module !== 'undefined') {
|
|
module.exports = stream_sort;
|
|
}
|