mirror of
https://github.com/zulip/zulip.git
synced 2025-10-29 11:03:54 +00:00
This commit was originally automatically generated using `tools/lint --only=eslint --fix`. It was then modified by tabbott to contain only changes to a set of files that are unlikely to result in significant merge conflicts with any open pull request, excluding about 20 files. His plan is to merge the remaining changes with more precise care, potentially involving merging parts of conflicting pull requests before running the `eslint --fix` operation. Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
137 lines
3.3 KiB
JavaScript
137 lines
3.3 KiB
JavaScript
let previous_pinned;
|
|
let previous_normal;
|
|
let previous_dormant;
|
|
let 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;
|
|
}
|
|
|
|
let search_terms = search_term.toLowerCase().split(",");
|
|
search_terms = _.map(search_terms, function (s) {
|
|
return s.trim();
|
|
});
|
|
|
|
const filtered_streams = _.filter(streams, function (stream) {
|
|
return _.any(search_terms, function (search_term) {
|
|
const lower_stream_name = stream.toLowerCase();
|
|
const 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) {
|
|
let 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);
|
|
}
|
|
|
|
const pinned_streams = [];
|
|
const normal_streams = [];
|
|
const dormant_streams = [];
|
|
|
|
_.each(streams, function (stream) {
|
|
const sub = stream_data.get_sub(stream);
|
|
const 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);
|
|
|
|
const 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,
|
|
};
|
|
};
|
|
|
|
function pos(stream_id) {
|
|
const sub = stream_data.get_sub_by_id(stream_id);
|
|
const name = sub.name;
|
|
const i = all_streams.indexOf(name);
|
|
|
|
if (i < 0) {
|
|
return;
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
function maybe_get_stream_id(i) {
|
|
if (i < 0 || i >= all_streams.length) {
|
|
return;
|
|
}
|
|
|
|
const name = all_streams[i];
|
|
const stream_id = stream_data.get_stream_id(name);
|
|
return stream_id;
|
|
}
|
|
|
|
exports.first_stream_id = function () {
|
|
return maybe_get_stream_id(0);
|
|
};
|
|
|
|
exports.prev_stream_id = function (stream_id) {
|
|
const i = pos(stream_id);
|
|
|
|
if (i === undefined) {
|
|
return;
|
|
}
|
|
|
|
return maybe_get_stream_id(i - 1);
|
|
};
|
|
|
|
exports.next_stream_id = function (stream_id) {
|
|
const i = pos(stream_id);
|
|
|
|
if (i === undefined) {
|
|
return;
|
|
}
|
|
|
|
return maybe_get_stream_id(i + 1);
|
|
};
|
|
|
|
window.stream_sort = exports;
|