mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 22:43:42 +00:00
84 lines
3.6 KiB
TypeScript
84 lines
3.6 KiB
TypeScript
import $ from "jquery";
|
|
import assert from "minimalistic-assert";
|
|
import type * as tippy from "tippy.js";
|
|
|
|
import render_left_sidebar_stream_setting_popover from "../templates/popovers/left_sidebar/left_sidebar_stream_setting_popover.hbs";
|
|
|
|
import * as popover_menus from "./popover_menus.ts";
|
|
import * as settings_data from "./settings_data.ts";
|
|
import {parse_html} from "./ui_util.ts";
|
|
|
|
export function initialize(): void {
|
|
popover_menus.register_popover_menu("#streams_inline_icon", {
|
|
theme: "popover-menu",
|
|
onShow(instance) {
|
|
const can_create_streams =
|
|
settings_data.user_can_create_private_streams() ||
|
|
settings_data.user_can_create_public_streams() ||
|
|
settings_data.user_can_create_web_public_streams();
|
|
|
|
if (!can_create_streams) {
|
|
// If the user can't create streams, we directly
|
|
// navigate them to the Stream settings subscribe UI.
|
|
window.location.assign("#channels/all");
|
|
// Returning false from an onShow handler cancels the show.
|
|
return false;
|
|
}
|
|
|
|
// Assuming that the instance can be shown, track and
|
|
// prep the instance for showing
|
|
popover_menus.popover_instances.stream_settings = instance;
|
|
instance.setContent(parse_html(render_left_sidebar_stream_setting_popover()));
|
|
popover_menus.on_show_prep(instance);
|
|
|
|
$("#streams_header").addClass("showing-streams-popover");
|
|
|
|
// When showing the popover menu, we want the
|
|
// "Add channels" and the "Filter channels" tooltip
|
|
// to appear below the "Add channels" icon.
|
|
const add_streams_tooltip: tippy.ReferenceElement | undefined =
|
|
$("#add_streams_tooltip").get(0);
|
|
assert(add_streams_tooltip !== undefined);
|
|
add_streams_tooltip._tippy?.setProps({
|
|
placement: "bottom",
|
|
});
|
|
|
|
const filter_streams_tooltip: (tippy.ReferenceElement & HTMLElement) | undefined =
|
|
$("#filter_streams_tooltip").get(0);
|
|
// If `filter_streams_tooltip` is not triggered yet, this will set its initial placement.
|
|
assert(filter_streams_tooltip !== undefined);
|
|
filter_streams_tooltip.dataset.tippyPlacement = "bottom";
|
|
filter_streams_tooltip._tippy?.setProps({
|
|
placement: "bottom",
|
|
});
|
|
|
|
return undefined;
|
|
},
|
|
onHidden(instance) {
|
|
instance.destroy();
|
|
popover_menus.popover_instances.stream_settings = null;
|
|
|
|
$("#streams_header").removeClass("showing-streams-popover");
|
|
|
|
// After the popover menu is closed, we want the
|
|
// "Add channels" and the "Filter channels" tooltip
|
|
// to appear at it's original position that is
|
|
// above the "Add channels" icon.
|
|
const add_streams_tooltip: tippy.ReferenceElement | undefined =
|
|
$("#add_streams_tooltip").get(0);
|
|
assert(add_streams_tooltip !== undefined);
|
|
add_streams_tooltip._tippy?.setProps({
|
|
placement: "top",
|
|
});
|
|
|
|
const filter_streams_tooltip: (tippy.ReferenceElement & HTMLElement) | undefined =
|
|
$("#filter_streams_tooltip").get(0);
|
|
assert(filter_streams_tooltip !== undefined);
|
|
filter_streams_tooltip.dataset.tippyPlacement = "top";
|
|
filter_streams_tooltip._tippy?.setProps({
|
|
placement: "top",
|
|
});
|
|
},
|
|
});
|
|
}
|