topic_zoom: Merge into stream_list.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg 2023-10-06 18:10:10 -07:00 committed by Tim Abbott
parent a43ea3efaa
commit 27991bd5b0
6 changed files with 83 additions and 97 deletions

View File

@ -234,7 +234,6 @@ EXEMPT_FILES = make_set(
"web/src/todo_widget.js", "web/src/todo_widget.js",
"web/src/topic_list.js", "web/src/topic_list.js",
"web/src/topic_popover.js", "web/src/topic_popover.js",
"web/src/topic_zoom.js",
"web/src/tutorial.js", "web/src/tutorial.js",
"web/src/types.ts", "web/src/types.ts",
"web/src/typing.js", "web/src/typing.js",

View File

@ -41,7 +41,6 @@ import * as starred_messages_ui from "./starred_messages_ui";
import * as stream_list from "./stream_list"; import * as stream_list from "./stream_list";
import * as stream_popover from "./stream_popover"; import * as stream_popover from "./stream_popover";
import * as topic_list from "./topic_list"; import * as topic_list from "./topic_list";
import * as topic_zoom from "./topic_zoom";
import * as ui_util from "./ui_util"; import * as ui_util from "./ui_util";
import {parse_html} from "./ui_util"; import {parse_html} from "./ui_util";
import * as user_topics from "./user_topics"; import * as user_topics from "./user_topics";
@ -730,8 +729,8 @@ export function initialize() {
); );
const scroll_position = $left_sidebar_scrollbar.scrollTop(); const scroll_position = $left_sidebar_scrollbar.scrollTop();
if (topic_zoom.is_zoomed_in()) { if (stream_list.is_zoomed_in()) {
topic_zoom.zoom_out(); stream_list.zoom_out();
} }
// This next bit of logic is a bit subtle; this header // This next bit of logic is a bit subtle; this header

View File

@ -52,7 +52,6 @@ import * as stream_data from "./stream_data";
import * as stream_list from "./stream_list"; import * as stream_list from "./stream_list";
import * as stream_popover from "./stream_popover"; import * as stream_popover from "./stream_popover";
import * as stream_settings_ui from "./stream_settings_ui"; import * as stream_settings_ui from "./stream_settings_ui";
import * as topic_zoom from "./topic_zoom";
import * as unread_ops from "./unread_ops"; import * as unread_ops from "./unread_ops";
import * as user_card_popover from "./user_card_popover"; import * as user_card_popover from "./user_card_popover";
import * as user_group_popover from "./user_group_popover"; import * as user_group_popover from "./user_group_popover";
@ -349,8 +348,8 @@ export function process_escape_key(e) {
return true; return true;
} }
if (topic_zoom.is_zoomed_in()) { if (stream_list.is_zoomed_in()) {
topic_zoom.zoom_out(); stream_list.zoom_out();
return true; return true;
} }

View File

@ -23,14 +23,70 @@ import * as stream_data from "./stream_data";
import * as stream_list_sort from "./stream_list_sort"; import * as stream_list_sort from "./stream_list_sort";
import * as sub_store from "./sub_store"; import * as sub_store from "./sub_store";
import * as topic_list from "./topic_list"; import * as topic_list from "./topic_list";
import * as topic_zoom from "./topic_zoom";
import * as ui_util from "./ui_util"; import * as ui_util from "./ui_util";
import * as unread from "./unread"; import * as unread from "./unread";
let pending_stream_list_rerender = false;
let zoomed_in = false;
export let stream_cursor; export let stream_cursor;
let has_scrolled = false; let has_scrolled = false;
export function is_zoomed_in() {
return zoomed_in;
}
function zoom_in() {
const stream_id = topic_list.active_stream_id();
popovers.hide_all();
pm_list.close();
topic_list.zoom_in();
zoom_in_topics({
stream_id,
});
zoomed_in = true;
}
export function set_pending_stream_list_rerender(value) {
pending_stream_list_rerender = value;
}
export function zoom_out() {
if (pending_stream_list_rerender) {
update_streams_sidebar(true);
}
const $stream_li = topic_list.get_stream_li();
popovers.hide_all();
topic_list.zoom_out();
zoom_out_topics();
if ($stream_li) {
scroll_stream_into_view($stream_li);
}
zoomed_in = false;
}
export function clear_topics() {
const $stream_li = topic_list.get_stream_li();
topic_list.close();
if (zoomed_in) {
zoom_out_topics();
if ($stream_li) {
scroll_stream_into_view($stream_li);
}
}
zoomed_in = false;
}
export function update_count_in_dom( export function update_count_in_dom(
$stream_li, $stream_li,
stream_counts, stream_counts,
@ -197,7 +253,7 @@ export function build_stream_list(force_rerender) {
elems.push(sidebar_row.get_li()); elems.push(sidebar_row.get_li());
} }
topic_zoom.clear_topics(); clear_topics();
$parent.empty(); $parent.empty();
const any_pinned_streams = const any_pinned_streams =
@ -491,17 +547,17 @@ function set_stream_unread_count(
} }
export function update_streams_sidebar(force_rerender) { export function update_streams_sidebar(force_rerender) {
if (!force_rerender && topic_zoom.is_zoomed_in()) { if (!force_rerender && is_zoomed_in()) {
// We do our best to update topics that are displayed // We do our best to update topics that are displayed
// in case user zoomed in. Streams list will be updated, // in case user zoomed in. Streams list will be updated,
// once the user zooms out. This avoids user being zoomed out // once the user zooms out. This avoids user being zoomed out
// when a new message causes streams to re-arrange. // when a new message causes streams to re-arrange.
const filter = narrow_state.filter(); const filter = narrow_state.filter();
update_stream_sidebar_for_narrow(filter); update_stream_sidebar_for_narrow(filter);
topic_zoom.set_pending_stream_list_rerender(true); set_pending_stream_list_rerender(true);
return; return;
} }
topic_zoom.set_pending_stream_list_rerender(false); set_pending_stream_list_rerender(false);
build_stream_list(force_rerender); build_stream_list(force_rerender);
@ -624,7 +680,7 @@ export function update_stream_sidebar_for_narrow(filter) {
const stream_id = info.stream_id; const stream_id = info.stream_id;
if (!stream_id) { if (!stream_id) {
topic_zoom.clear_topics(); clear_topics();
return undefined; return undefined;
} }
@ -637,7 +693,7 @@ export function update_stream_sidebar_for_narrow(filter) {
// stopped appearing from March 2018 until at least // stopped appearing from March 2018 until at least
// April 2020, so if it appears again, something regressed. // April 2020, so if it appears again, something regressed.
blueslip.error("No stream_li for subscribed stream", {stream_id}); blueslip.error("No stream_li for subscribed stream", {stream_id});
topic_zoom.clear_topics(); clear_topics();
return undefined; return undefined;
} }
@ -651,7 +707,7 @@ export function update_stream_sidebar_for_narrow(filter) {
$stream_li.addClass("stream-expanded"); $stream_li.addClass("stream-expanded");
if (stream_id !== topic_list.active_stream_id()) { if (stream_id !== topic_list.active_stream_id()) {
topic_zoom.clear_topics(); clear_topics();
} }
topic_list.rebuild($stream_li, stream_id); topic_list.rebuild($stream_li, stream_id);
@ -668,7 +724,7 @@ export function handle_narrow_activated(filter) {
export function handle_message_view_deactivated() { export function handle_message_view_deactivated() {
deselect_stream_items(); deselect_stream_items();
topic_zoom.clear_topics(); clear_topics();
} }
function focus_stream_filter(e) { function focus_stream_filter(e) {
@ -711,6 +767,20 @@ export function initialize({on_stream_click}) {
update_subscribe_to_more_streams_link(); update_subscribe_to_more_streams_link();
initialize_stream_cursor(); initialize_stream_cursor();
set_event_handlers({on_stream_click}); set_event_handlers({on_stream_click});
$("#stream_filters").on("click", ".show-more-topics", (e) => {
zoom_in();
e.preventDefault();
e.stopPropagation();
});
$(".show-all-streams").on("click", (e) => {
zoom_out();
e.preventDefault();
e.stopPropagation();
});
} }
export function set_event_handlers({on_stream_click}) { export function set_event_handlers({on_stream_click}) {

View File

@ -1,79 +0,0 @@
import $ from "jquery";
import * as pm_list from "./pm_list";
import * as popovers from "./popovers";
import * as stream_list from "./stream_list";
import * as topic_list from "./topic_list";
let pending_stream_list_rerender = false;
let zoomed_in = false;
export function is_zoomed_in() {
return zoomed_in;
}
function zoom_in() {
const stream_id = topic_list.active_stream_id();
popovers.hide_all();
pm_list.close();
topic_list.zoom_in();
stream_list.zoom_in_topics({
stream_id,
});
zoomed_in = true;
}
export function set_pending_stream_list_rerender(value) {
pending_stream_list_rerender = value;
}
export function zoom_out() {
if (pending_stream_list_rerender) {
stream_list.update_streams_sidebar(true);
}
const $stream_li = topic_list.get_stream_li();
popovers.hide_all();
topic_list.zoom_out();
stream_list.zoom_out_topics();
if ($stream_li) {
stream_list.scroll_stream_into_view($stream_li);
}
zoomed_in = false;
}
export function clear_topics() {
const $stream_li = topic_list.get_stream_li();
topic_list.close();
if (zoomed_in) {
stream_list.zoom_out_topics();
if ($stream_li) {
stream_list.scroll_stream_into_view($stream_li);
}
}
zoomed_in = false;
}
export function initialize() {
$("#stream_filters").on("click", ".show-more-topics", (e) => {
zoom_in();
e.preventDefault();
e.stopPropagation();
});
$(".show-all-streams").on("click", (e) => {
zoom_out();
e.preventDefault();
e.stopPropagation();
});
}

View File

@ -124,7 +124,6 @@ import * as timerender from "./timerender";
import * as tippyjs from "./tippyjs"; import * as tippyjs from "./tippyjs";
import * as topic_list from "./topic_list"; import * as topic_list from "./topic_list";
import * as topic_popover from "./topic_popover"; import * as topic_popover from "./topic_popover";
import * as topic_zoom from "./topic_zoom";
import * as transmit from "./transmit"; import * as transmit from "./transmit";
import * as tutorial from "./tutorial"; import * as tutorial from "./tutorial";
import * as typeahead_helper from "./typeahead_helper"; import * as typeahead_helper from "./typeahead_helper";
@ -713,7 +712,6 @@ export function initialize_everything() {
); );
}, },
}); });
topic_zoom.initialize();
drafts.initialize(); drafts.initialize();
drafts_overlay_ui.initialize(); drafts_overlay_ui.initialize();
sent_messages.initialize(); sent_messages.initialize();