mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
This was a bit more than moving code. I extracted the
following things:
$widget (and three helper methods)
$input
text()
empty()
expand_column
close_widget
activity.clear_highlight
There was a minor bug before this commit, where we were inconsistent
about trimming spaces. The introduction of text() and empty() should
prevent bugs where users type the space bar into search.
118 lines
2.8 KiB
JavaScript
118 lines
2.8 KiB
JavaScript
var user_search = function (opts) {
|
|
// This is mostly view code to manage the user search widget
|
|
// above the buddy list. We rely on other code to manage the
|
|
// details of populating the list when we change.
|
|
|
|
var self = {};
|
|
|
|
var $widget = $('#user-list .input-append').expectOne();
|
|
var $input = $('.user-list-filter').expectOne();
|
|
|
|
self.input_field = function () {
|
|
return $input;
|
|
};
|
|
|
|
self.text = function () {
|
|
return $input.val().trim();
|
|
};
|
|
|
|
self.searching = function () {
|
|
return $input.is(':focus');
|
|
};
|
|
|
|
self.empty = function () {
|
|
return self.text() === '';
|
|
};
|
|
|
|
self.clear_search = function () {
|
|
if (self.empty()) {
|
|
self.close_widget();
|
|
return;
|
|
}
|
|
|
|
$input.val('');
|
|
$input.blur();
|
|
opts.update_list();
|
|
};
|
|
|
|
self.escape_search = function () {
|
|
if (self.empty()) {
|
|
self.close_widget();
|
|
return;
|
|
}
|
|
|
|
$input.val('');
|
|
opts.update_list();
|
|
};
|
|
|
|
self.hide_widget = function () {
|
|
$widget.addClass('notdisplayed');
|
|
};
|
|
|
|
self.show_widget = function () {
|
|
$widget.removeClass('notdisplayed');
|
|
};
|
|
|
|
self.widget_shown = function () {
|
|
return $widget.hasClass('notdisplayed');
|
|
};
|
|
|
|
self.clear_and_hide_search = function () {
|
|
if (!self.empty()) {
|
|
$input.val('');
|
|
opts.update_list();
|
|
}
|
|
self.close_widget();
|
|
};
|
|
|
|
self.close_widget = function () {
|
|
$input.blur();
|
|
self.hide_widget();
|
|
opts.reset_items();
|
|
};
|
|
|
|
self.expand_column = function () {
|
|
var column = $input.closest(".app-main [class^='column-']");
|
|
if (!column.hasClass("expanded")) {
|
|
popovers.hide_all();
|
|
if (column.hasClass('column-left')) {
|
|
stream_popover.show_streamlist_sidebar();
|
|
} else if (column.hasClass('column-right')) {
|
|
popovers.show_userlist_sidebar();
|
|
}
|
|
}
|
|
};
|
|
|
|
self.initiate_search = function () {
|
|
self.expand_column();
|
|
self.show_widget();
|
|
$input.focus();
|
|
opts.initialize_list_for_search();
|
|
};
|
|
|
|
self.toggle_filter_displayed = function () {
|
|
if (self.widget_shown()) {
|
|
self.initiate_search();
|
|
} else {
|
|
self.clear_and_hide_search();
|
|
}
|
|
};
|
|
|
|
function on_focus(e) {
|
|
opts.initialize_list_for_search();
|
|
e.stopPropagation();
|
|
}
|
|
|
|
$('#clear_search_people_button').on('click', self.clear_search);
|
|
$('#userlist-header').on('click', self.toggle_filter_displayed);
|
|
|
|
$input.on('input', opts.update_list);
|
|
$input.on('click', on_focus);
|
|
|
|
return self;
|
|
};
|
|
|
|
if (typeof module !== 'undefined') {
|
|
module.exports = user_search;
|
|
}
|