mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 12:03:46 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| export class UserSearch {
 | |
|     // 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.
 | |
| 
 | |
|     $widget = $("#user_search_section").expectOne();
 | |
|     $input = $(".user-list-filter").expectOne();
 | |
| 
 | |
|     constructor(opts) {
 | |
|         this._reset_items = opts.reset_items;
 | |
|         this._update_list = opts.update_list;
 | |
|         this._on_focus = opts.on_focus;
 | |
| 
 | |
|         $("#clear_search_people_button").on("click", () => this.clear_search());
 | |
|         $("#userlist-header").on("click", () => this.toggle_filter_displayed());
 | |
| 
 | |
|         this.$input.on("input", opts.update_list);
 | |
|         this.$input.on("focus", (e) => this.on_focus(e));
 | |
|     }
 | |
| 
 | |
|     input_field() {
 | |
|         return this.$input;
 | |
|     }
 | |
| 
 | |
|     text() {
 | |
|         return this.$input.val().trim();
 | |
|     }
 | |
| 
 | |
|     searching() {
 | |
|         return this.$input.is(":focus");
 | |
|     }
 | |
| 
 | |
|     empty() {
 | |
|         return this.text() === "";
 | |
|     }
 | |
| 
 | |
|     clear_search() {
 | |
|         if (this.empty()) {
 | |
|             this.close_widget();
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         this.$input.val("");
 | |
|         this.$input.trigger("blur");
 | |
|         this._reset_items();
 | |
|     }
 | |
| 
 | |
|     escape_search() {
 | |
|         if (this.empty()) {
 | |
|             this.close_widget();
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         this.$input.val("");
 | |
|         this._update_list();
 | |
|     }
 | |
| 
 | |
|     hide_widget() {
 | |
|         this.$widget.addClass("notdisplayed");
 | |
|         resize.resize_sidebars();
 | |
|     }
 | |
| 
 | |
|     show_widget() {
 | |
|         // Hide all the popovers but not userlist sidebar
 | |
|         // when the user wants to search.
 | |
|         popovers.hide_all_except_sidebars();
 | |
|         this.$widget.removeClass("notdisplayed");
 | |
|         resize.resize_sidebars();
 | |
|     }
 | |
| 
 | |
|     widget_shown() {
 | |
|         return this.$widget.hasClass("notdisplayed");
 | |
|     }
 | |
| 
 | |
|     clear_and_hide_search() {
 | |
|         if (!this.empty()) {
 | |
|             this.$input.val("");
 | |
|             this._update_list();
 | |
|         }
 | |
|         this.close_widget();
 | |
|     }
 | |
| 
 | |
|     close_widget() {
 | |
|         this.$input.trigger("blur");
 | |
|         this.hide_widget();
 | |
|         this._reset_items();
 | |
|     }
 | |
| 
 | |
|     expand_column() {
 | |
|         const column = this.$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();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     initiate_search() {
 | |
|         this.expand_column();
 | |
|         this.show_widget();
 | |
|         this.$input.trigger("focus");
 | |
|     }
 | |
| 
 | |
|     toggle_filter_displayed() {
 | |
|         if (this.widget_shown()) {
 | |
|             this.initiate_search();
 | |
|         } else {
 | |
|             this.clear_and_hide_search();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     on_focus(e) {
 | |
|         this._on_focus();
 | |
|         e.stopPropagation();
 | |
|     }
 | |
| }
 |