mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 14:03:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.5 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().split(" ");
 | 
						|
            return _.any(lower_stream_name, 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;
 | 
						|
}
 |