mirror of https://github.com/zulip/zulip.git
Sort searchbox typeahead in a more intelligent way.
Ensure that every result has one of: * find what you typed in * search for what you typed in * Narrow to a stream related to what you typed * Narrow to a person related to what you type (imported from commit 2178f17932f951a48f53d982ef660942562b55dc)
This commit is contained in:
parent
ab8496b9ba
commit
8c0445bff5
|
@ -65,6 +65,49 @@ function narrow_or_search_for_term(item) {
|
|||
return item;
|
||||
}
|
||||
|
||||
function get_query(obj) {
|
||||
return obj.query;
|
||||
}
|
||||
|
||||
function get_person(obj) {
|
||||
return typeahead_helper.render_pm_object(obj.query);
|
||||
}
|
||||
|
||||
function searchbox_sorter(items) {
|
||||
var searches = [];
|
||||
var search_narrows = [];
|
||||
var streams = [];
|
||||
var people = [];
|
||||
var objects = [];
|
||||
|
||||
$.each(items, function (idx, elt) {
|
||||
var obj = mapped[elt];
|
||||
if (obj.action === 'stream') {
|
||||
streams.push(obj);
|
||||
} else if (obj.action === 'private_message') {
|
||||
people.push(obj);
|
||||
} else if (obj.action === 'search') {
|
||||
searches.push(obj);
|
||||
} else if (obj.action === 'search_narrow') {
|
||||
search_narrows.push(obj);
|
||||
}
|
||||
});
|
||||
|
||||
searches = typeahead_helper.sorter(this.query, searches, get_query);
|
||||
search_narrows = typeahead_helper.sorter(this.query, search_narrows, get_query);
|
||||
streams = typeahead_helper.sorter(this.query, streams, get_query);
|
||||
people = typeahead_helper.sorter(this.query, people, get_person);
|
||||
|
||||
$.each([searches, search_narrows, streams, people], function (idx, elt) {
|
||||
var obj = elt.shift();
|
||||
if (obj) objects.push(obj);
|
||||
});
|
||||
|
||||
return $.map(objects, function (elt, idx) {
|
||||
return render_object(elt);
|
||||
});
|
||||
}
|
||||
|
||||
exports.initialize = function () {
|
||||
$( "#search_query" ).typeahead({
|
||||
source: function (query, process) {
|
||||
|
@ -99,7 +142,8 @@ exports.initialize = function () {
|
|||
// Case-insensitive (from Bootstrap's default matcher).
|
||||
return (actual_search_term.toLowerCase().indexOf(this.query.toLowerCase()) !== -1);
|
||||
},
|
||||
updater: narrow_or_search_for_term
|
||||
updater: narrow_or_search_for_term,
|
||||
sorter: searchbox_sorter
|
||||
});
|
||||
|
||||
$("#searchbox_form").keydown(function (e) {
|
||||
|
|
|
@ -48,12 +48,12 @@ exports.highlight_with_escaping = function (query, item) {
|
|||
exports.private_message_typeahead_list = [];
|
||||
exports.private_message_mapped = {};
|
||||
|
||||
function render_pm_object(person) {
|
||||
exports.render_pm_object = function (person) {
|
||||
return person.full_name + " <" + person.email + ">";
|
||||
}
|
||||
};
|
||||
|
||||
function add_to_known_recipients(recipient_data, count_towards_autocomplete_preference) {
|
||||
var name_string = render_pm_object(recipient_data);
|
||||
var name_string = exports.render_pm_object(recipient_data);
|
||||
if (typeahead_helper.private_message_mapped[name_string] === undefined) {
|
||||
typeahead_helper.private_message_mapped[name_string] = recipient_data;
|
||||
typeahead_helper.private_message_mapped[name_string].count = 0;
|
||||
|
@ -65,7 +65,7 @@ function add_to_known_recipients(recipient_data, count_towards_autocomplete_pref
|
|||
}
|
||||
|
||||
exports.known_to_typeahead = function (recipient_data) {
|
||||
return typeahead_helper.private_message_mapped[render_pm_object(recipient_data)] !== undefined;
|
||||
return typeahead_helper.private_message_mapped[exports.render_pm_object(recipient_data)] !== undefined;
|
||||
};
|
||||
|
||||
exports.update_all_recipients = function (recipients) {
|
||||
|
|
Loading…
Reference in New Issue