2021-06-24 09:26:39 +02:00
|
|
|
import ClipboardJS from "clipboard";
|
2021-03-11 05:43:45 +01:00
|
|
|
import $ from "jquery";
|
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
import render_all_messages_sidebar_actions from "../templates/all_messages_sidebar_actions.hbs";
|
2021-06-21 09:53:50 +02:00
|
|
|
import render_delete_topic_modal from "../templates/confirm_dialog/confirm_delete_topic.hbs";
|
2021-02-28 01:02:37 +01:00
|
|
|
import render_move_topic_to_stream from "../templates/move_topic_to_stream.hbs";
|
|
|
|
import render_starred_messages_sidebar_actions from "../templates/starred_messages_sidebar_actions.hbs";
|
|
|
|
import render_stream_sidebar_actions from "../templates/stream_sidebar_actions.hbs";
|
|
|
|
import render_topic_sidebar_actions from "../templates/topic_sidebar_actions.hbs";
|
|
|
|
|
2021-03-16 23:38:59 +01:00
|
|
|
import * as blueslip from "./blueslip";
|
2021-03-22 16:09:12 +01:00
|
|
|
import * as browser_history from "./browser_history";
|
2021-02-28 01:02:37 +01:00
|
|
|
import * as channel from "./channel";
|
2021-01-19 15:27:49 +01:00
|
|
|
import * as compose_actions from "./compose_actions";
|
2021-05-07 18:41:12 +02:00
|
|
|
import * as confirm_dialog from "./confirm_dialog";
|
2021-03-28 19:28:30 +02:00
|
|
|
import {DropdownListWidget as dropdown_list_widget} from "./dropdown_list_widget";
|
2021-02-28 01:07:13 +01:00
|
|
|
import * as hash_util from "./hash_util";
|
2021-05-07 18:41:12 +02:00
|
|
|
import {$t, $t_html} from "./i18n";
|
2021-02-28 01:02:37 +01:00
|
|
|
import * as message_edit from "./message_edit";
|
|
|
|
import * as muting from "./muting";
|
|
|
|
import * as muting_ui from "./muting_ui";
|
2021-04-29 08:33:00 +02:00
|
|
|
import * as overlays from "./overlays";
|
2021-03-25 22:35:45 +01:00
|
|
|
import {page_params} from "./page_params";
|
2021-02-28 01:03:09 +01:00
|
|
|
import * as popovers from "./popovers";
|
2021-02-28 01:02:37 +01:00
|
|
|
import * as resize from "./resize";
|
2021-05-13 18:17:57 +02:00
|
|
|
import * as settings_data from "./settings_data";
|
2021-03-05 09:48:15 +01:00
|
|
|
import * as starred_messages from "./starred_messages";
|
2021-03-25 09:45:39 +01:00
|
|
|
import * as starred_messages_ui from "./starred_messages_ui";
|
2021-03-22 18:29:15 +01:00
|
|
|
import * as stream_bar from "./stream_bar";
|
2021-02-28 01:02:37 +01:00
|
|
|
import * as stream_color from "./stream_color";
|
|
|
|
import * as stream_data from "./stream_data";
|
2021-04-15 17:02:54 +02:00
|
|
|
import * as sub_store from "./sub_store";
|
2021-02-28 21:32:47 +01:00
|
|
|
import * as subs from "./subs";
|
2021-02-28 21:30:08 +01:00
|
|
|
import * as unread_ops from "./unread_ops";
|
2021-02-28 00:39:51 +01:00
|
|
|
|
2017-03-05 17:28:40 +01:00
|
|
|
// We handle stream popovers and topic popovers in this
|
|
|
|
// module. Both are popped up from the left sidebar.
|
2019-11-02 00:06:25 +01:00
|
|
|
let current_stream_sidebar_elem;
|
|
|
|
let current_topic_sidebar_elem;
|
|
|
|
let all_messages_sidebar_elem;
|
|
|
|
let starred_messages_sidebar_elem;
|
2021-03-28 19:28:30 +02:00
|
|
|
let stream_widget;
|
|
|
|
let stream_header_colorblock;
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2020-07-08 22:17:16 +02:00
|
|
|
function get_popover_menu_items(sidebar_elem) {
|
|
|
|
if (!sidebar_elem) {
|
|
|
|
blueslip.error("Trying to get menu items when action popover is closed.");
|
2020-09-24 07:50:36 +02:00
|
|
|
return undefined;
|
2020-07-08 22:17:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
const popover_data = $(sidebar_elem).data("popover");
|
|
|
|
if (!popover_data) {
|
|
|
|
blueslip.error("Cannot find popover data for stream sidebar menu.");
|
2020-09-24 07:50:36 +02:00
|
|
|
return undefined;
|
2020-07-08 22:17:16 +02:00
|
|
|
}
|
|
|
|
return $("li:not(.divider):visible > a", popover_data.$tip);
|
|
|
|
}
|
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function stream_sidebar_menu_handle_keyboard(key) {
|
2020-07-08 22:17:16 +02:00
|
|
|
const items = get_popover_menu_items(current_stream_sidebar_elem);
|
|
|
|
popovers.popover_items_handle_keyboard(key, items);
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2020-07-08 22:17:16 +02:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function topic_sidebar_menu_handle_keyboard(key) {
|
2020-07-09 03:18:27 +02:00
|
|
|
const items = get_popover_menu_items(current_topic_sidebar_elem);
|
|
|
|
popovers.popover_items_handle_keyboard(key, items);
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2020-07-09 03:18:27 +02:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function all_messages_sidebar_menu_handle_keyboard(key) {
|
2020-07-10 19:39:26 +02:00
|
|
|
const items = get_popover_menu_items(all_messages_sidebar_elem);
|
|
|
|
popovers.popover_items_handle_keyboard(key, items);
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2020-07-10 19:39:26 +02:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function starred_messages_sidebar_menu_handle_keyboard(key) {
|
2020-07-10 20:25:24 +02:00
|
|
|
const items = get_popover_menu_items(starred_messages_sidebar_elem);
|
|
|
|
popovers.popover_items_handle_keyboard(key, items);
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2020-07-10 20:25:24 +02:00
|
|
|
|
2020-01-12 13:39:37 +01:00
|
|
|
function elem_to_stream_id(elem) {
|
2020-10-07 09:17:30 +02:00
|
|
|
const stream_id = Number.parseInt(elem.attr("data-stream-id"), 10);
|
2020-01-12 13:39:37 +01:00
|
|
|
|
|
|
|
if (stream_id === undefined) {
|
2020-07-15 01:29:15 +02:00
|
|
|
blueslip.error("could not find stream id");
|
2020-01-12 13:39:37 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return stream_id;
|
|
|
|
}
|
|
|
|
|
|
|
|
function topic_popover_stream_id(e) {
|
|
|
|
return elem_to_stream_id($(e.currentTarget));
|
|
|
|
}
|
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function stream_popped() {
|
2017-03-05 17:28:40 +01:00
|
|
|
return current_stream_sidebar_elem !== undefined;
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function topic_popped() {
|
2017-03-05 17:28:40 +01:00
|
|
|
return current_topic_sidebar_elem !== undefined;
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function all_messages_popped() {
|
2018-02-15 20:38:06 +01:00
|
|
|
return all_messages_sidebar_elem !== undefined;
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2018-02-15 20:38:06 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function starred_messages_popped() {
|
2019-02-22 12:28:29 +01:00
|
|
|
return starred_messages_sidebar_elem !== undefined;
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2019-02-22 12:28:29 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function hide_stream_popover() {
|
|
|
|
if (stream_popped()) {
|
2017-03-05 17:28:40 +01:00
|
|
|
$(current_stream_sidebar_elem).popover("destroy");
|
|
|
|
current_stream_sidebar_elem = undefined;
|
|
|
|
}
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function hide_topic_popover() {
|
|
|
|
if (topic_popped()) {
|
2017-03-05 17:28:40 +01:00
|
|
|
$(current_topic_sidebar_elem).popover("destroy");
|
|
|
|
current_topic_sidebar_elem = undefined;
|
|
|
|
}
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function hide_all_messages_popover() {
|
|
|
|
if (all_messages_popped()) {
|
2018-02-15 20:38:06 +01:00
|
|
|
$(all_messages_sidebar_elem).popover("destroy");
|
|
|
|
all_messages_sidebar_elem = undefined;
|
|
|
|
}
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2018-02-15 20:38:06 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function hide_starred_messages_popover() {
|
|
|
|
if (starred_messages_popped()) {
|
2019-02-22 12:28:29 +01:00
|
|
|
$(starred_messages_sidebar_elem).popover("destroy");
|
|
|
|
starred_messages_sidebar_elem = undefined;
|
|
|
|
}
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2019-02-22 12:28:29 +01:00
|
|
|
|
2017-03-05 17:28:40 +01:00
|
|
|
// These are the only two functions that is really shared by the
|
|
|
|
// two popovers, so we could split out topic stuff to
|
|
|
|
// another module pretty easily.
|
2021-02-28 01:02:37 +01:00
|
|
|
export function show_streamlist_sidebar() {
|
2017-03-05 17:28:40 +01:00
|
|
|
$(".app-main .column-left").addClass("expanded");
|
|
|
|
resize.resize_page_components();
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function hide_streamlist_sidebar() {
|
2017-03-05 17:28:40 +01:00
|
|
|
$(".app-main .column-left").removeClass("expanded");
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
|
|
|
|
function stream_popover_sub(e) {
|
2020-07-15 01:29:15 +02:00
|
|
|
const elem = $(e.currentTarget).parents("ul");
|
2020-01-12 13:39:37 +01:00
|
|
|
const stream_id = elem_to_stream_id(elem);
|
2021-04-15 17:02:54 +02:00
|
|
|
const sub = sub_store.get(stream_id);
|
2017-03-05 17:28:40 +01:00
|
|
|
if (!sub) {
|
2020-07-15 01:29:15 +02:00
|
|
|
blueslip.error("Unknown stream: " + stream_id);
|
2020-09-24 07:50:36 +02:00
|
|
|
return undefined;
|
2017-03-05 17:28:40 +01:00
|
|
|
}
|
|
|
|
return sub;
|
|
|
|
}
|
|
|
|
|
|
|
|
// This little function is a workaround for the fact that
|
|
|
|
// Bootstrap popovers don't properly handle being resized --
|
|
|
|
// so after resizing our popover to add in the spectrum color
|
|
|
|
// picker, we need to adjust its height accordingly.
|
|
|
|
function update_spectrum(popover, update_func) {
|
2019-11-02 00:06:25 +01:00
|
|
|
const initial_height = popover[0].offsetHeight;
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const colorpicker = popover.find(".colorpicker-container").find(".colorpicker");
|
2017-03-05 17:28:40 +01:00
|
|
|
update_func(colorpicker);
|
2019-11-02 00:06:25 +01:00
|
|
|
const after_height = popover[0].offsetHeight;
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const popover_root = popover.closest(".popover");
|
2020-10-07 09:17:30 +02:00
|
|
|
const current_top_px = Number.parseFloat(popover_root.css("top").replace("px", ""));
|
2019-11-02 00:06:25 +01:00
|
|
|
const height_delta = after_height - initial_height;
|
|
|
|
let top = current_top_px - height_delta / 2;
|
2019-02-15 01:43:17 +01:00
|
|
|
|
|
|
|
if (top < 0) {
|
|
|
|
top = 0;
|
|
|
|
popover_root.find("div.arrow").hide();
|
|
|
|
} else if (top + after_height > $(window).height() - 20) {
|
|
|
|
top = $(window).height() - after_height - 20;
|
|
|
|
if (top < 0) {
|
|
|
|
top = 0;
|
|
|
|
}
|
|
|
|
popover_root.find("div.arrow").hide();
|
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
popover_root.css("top", top + "px");
|
2017-03-05 17:28:40 +01:00
|
|
|
}
|
|
|
|
|
2021-06-24 09:26:39 +02:00
|
|
|
// Builds the `Copy link to topic` topic action.
|
|
|
|
function build_topic_link_clipboard(url) {
|
|
|
|
if (!url) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const copy_event = new ClipboardJS(".sidebar-popover-copy-link-to-topic", {
|
|
|
|
text() {
|
|
|
|
return url;
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
// Hide the topic popover once the url is successfully
|
|
|
|
// copied to clipboard.
|
|
|
|
copy_event.on("success", () => {
|
|
|
|
hide_topic_popover();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-02-22 17:07:49 +01:00
|
|
|
function build_stream_popover(opts) {
|
2019-11-02 00:06:25 +01:00
|
|
|
const elt = opts.elt;
|
|
|
|
const stream_id = opts.stream_id;
|
2019-02-22 17:07:49 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
if (stream_popped() && current_stream_sidebar_elem === elt) {
|
2017-03-05 17:28:40 +01:00
|
|
|
// If the popover is already shown, clicking again should toggle it.
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_stream_popover();
|
2017-03-05 17:28:40 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
popovers.hide_all();
|
2021-02-28 01:02:37 +01:00
|
|
|
show_streamlist_sidebar();
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const content = render_stream_sidebar_actions({
|
2021-04-15 17:02:54 +02:00
|
|
|
stream: sub_store.get(stream_id),
|
2019-07-09 21:24:00 +02:00
|
|
|
});
|
2017-03-05 17:28:40 +01:00
|
|
|
|
|
|
|
$(elt).popover({
|
2020-07-20 22:18:43 +02:00
|
|
|
content,
|
2019-09-17 23:54:52 +02:00
|
|
|
html: true,
|
2017-03-05 17:28:40 +01:00
|
|
|
trigger: "manual",
|
|
|
|
fixed: true,
|
2019-02-15 01:43:17 +01:00
|
|
|
fix_positions: true,
|
2017-03-05 17:28:40 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
$(elt).popover("show");
|
2021-02-03 23:23:32 +01:00
|
|
|
const popover = $(`.streams_popover[data-stream-id="${CSS.escape(stream_id)}"]`);
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2020-07-02 01:45:54 +02:00
|
|
|
update_spectrum(popover, (colorpicker) => {
|
2017-03-05 17:28:40 +01:00
|
|
|
colorpicker.spectrum(stream_color.sidebar_popover_colorpicker_options);
|
|
|
|
});
|
|
|
|
|
|
|
|
current_stream_sidebar_elem = elt;
|
|
|
|
}
|
|
|
|
|
2019-02-05 14:48:39 +01:00
|
|
|
function build_topic_popover(opts) {
|
2019-11-02 00:06:25 +01:00
|
|
|
const elt = opts.elt;
|
|
|
|
const stream_id = opts.stream_id;
|
|
|
|
const topic_name = opts.topic_name;
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
if (topic_popped() && current_topic_sidebar_elem === elt) {
|
2017-03-05 17:28:40 +01:00
|
|
|
// If the popover is already shown, clicking again should toggle it.
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_topic_popover();
|
2017-03-05 17:28:40 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-04-15 17:02:54 +02:00
|
|
|
const sub = sub_store.get(stream_id);
|
2017-03-05 19:36:36 +01:00
|
|
|
if (!sub) {
|
2020-07-15 01:29:15 +02:00
|
|
|
blueslip.error("cannot build topic popover for stream: " + stream_id);
|
2017-03-05 19:36:36 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
popovers.hide_all();
|
2021-02-28 01:02:37 +01:00
|
|
|
show_streamlist_sidebar();
|
2017-03-05 19:36:36 +01:00
|
|
|
|
2021-04-30 08:30:50 +02:00
|
|
|
const topic_muted = muting.is_topic_muted(sub.stream_id, topic_name);
|
starred messages: Fix "unstar all in topic" is incomplete.
Currently, when there are some old starred messages
in a topic, it is possible that some of them won't be
unstarred on doing "Unstar all messages in topic".
This happens when those messages haven't been fetched
yet from the server, and we have no way to verify if
they actually belong to the topic.
This commit fixes that by changing this mechanism to
first fetch all starred messages in the topic from
the server, and then send their IDs back to the backend
to unstar them.
While doing this, we assume that the user does not
have more than 1000 starred messages in that topic.
Note that, we still depend on the local data to
decide whether or not the "Unstar all messages in
topic" option should be shown in the topic popover.
A method similar to the above cannot be used here, because
making server requests before opening the popover
could visually slow down the popover opening.
Using local data for the topic popover would probably
not be a big problem, because users would want to
unstar all messages in a topic probably after noticing
that there are a lot of them, meaning there was at least
one starred message from that topic which was already
fetched, which is sufficient for us to conclude that
we need to show the option in the topic popover.
Fixes #17790
2021-04-02 08:10:11 +02:00
|
|
|
const has_starred_messages = starred_messages.get_count_in_topic(sub.stream_id, topic_name) > 0;
|
2021-05-13 18:17:57 +02:00
|
|
|
// Arguably, we could offer the "Move topic" option even if users
|
|
|
|
// can only edit the name within a stream.
|
|
|
|
const can_move_topic = settings_data.user_can_move_messages_between_streams();
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const content = render_topic_sidebar_actions({
|
2017-08-17 01:42:07 +02:00
|
|
|
stream_name: sub.name,
|
2017-03-05 19:36:36 +01:00
|
|
|
stream_id: sub.stream_id,
|
2020-07-20 22:18:43 +02:00
|
|
|
topic_name,
|
2021-04-30 08:30:50 +02:00
|
|
|
topic_muted,
|
2021-05-13 18:17:57 +02:00
|
|
|
can_move_topic,
|
2021-04-06 13:37:04 +02:00
|
|
|
is_realm_admin: page_params.is_admin,
|
2021-06-26 20:38:33 +02:00
|
|
|
topic_is_resolved: topic_name.startsWith(message_edit.RESOLVED_TOPIC_PREFIX),
|
2020-06-20 17:50:19 +02:00
|
|
|
color: sub.color,
|
2021-03-08 09:25:25 +01:00
|
|
|
has_starred_messages,
|
2017-03-05 17:28:40 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
$(elt).popover({
|
2020-07-20 22:18:43 +02:00
|
|
|
content,
|
2019-09-17 23:54:52 +02:00
|
|
|
html: true,
|
2017-03-05 17:28:40 +01:00
|
|
|
trigger: "manual",
|
|
|
|
fixed: true,
|
|
|
|
});
|
|
|
|
|
|
|
|
$(elt).popover("show");
|
|
|
|
|
|
|
|
current_topic_sidebar_elem = elt;
|
|
|
|
}
|
|
|
|
|
2018-02-15 20:38:06 +01:00
|
|
|
function build_all_messages_popover(e) {
|
2019-11-02 00:06:25 +01:00
|
|
|
const elt = e.target;
|
2018-02-15 20:38:06 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
if (all_messages_popped() && all_messages_sidebar_elem === elt) {
|
|
|
|
hide_all_messages_popover();
|
2018-02-15 20:38:06 +01:00
|
|
|
e.stopPropagation();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
popovers.hide_all();
|
2021-03-20 08:59:20 +01:00
|
|
|
show_streamlist_sidebar();
|
2018-02-15 20:38:06 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const content = render_all_messages_sidebar_actions();
|
2018-02-15 20:38:06 +01:00
|
|
|
|
|
|
|
$(elt).popover({
|
2020-07-20 22:18:43 +02:00
|
|
|
content,
|
2019-09-17 23:54:52 +02:00
|
|
|
html: true,
|
2018-02-15 20:38:06 +01:00
|
|
|
trigger: "manual",
|
|
|
|
fixed: true,
|
|
|
|
});
|
|
|
|
|
|
|
|
$(elt).popover("show");
|
|
|
|
all_messages_sidebar_elem = elt;
|
|
|
|
e.stopPropagation();
|
|
|
|
}
|
|
|
|
|
2019-02-22 12:28:29 +01:00
|
|
|
function build_starred_messages_popover(e) {
|
2019-11-02 00:06:25 +01:00
|
|
|
const elt = e.target;
|
2019-02-22 12:28:29 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
if (starred_messages_popped() && starred_messages_sidebar_elem === elt) {
|
|
|
|
hide_starred_messages_popover();
|
2019-02-22 12:28:29 +01:00
|
|
|
e.stopPropagation();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
popovers.hide_all();
|
2021-03-20 08:59:20 +01:00
|
|
|
show_streamlist_sidebar();
|
2019-02-22 12:28:29 +01:00
|
|
|
|
2021-03-05 09:48:15 +01:00
|
|
|
const show_unstar_all_button = starred_messages.get_count() > 0;
|
2019-11-02 00:06:25 +01:00
|
|
|
const content = render_starred_messages_sidebar_actions({
|
2021-03-05 09:48:15 +01:00
|
|
|
show_unstar_all_button,
|
2019-07-09 21:24:00 +02:00
|
|
|
starred_message_counts: page_params.starred_message_counts,
|
|
|
|
});
|
2019-02-22 12:28:29 +01:00
|
|
|
|
|
|
|
$(elt).popover({
|
2020-07-20 22:18:43 +02:00
|
|
|
content,
|
2019-09-17 23:54:52 +02:00
|
|
|
html: true,
|
2019-02-22 12:28:29 +01:00
|
|
|
trigger: "manual",
|
|
|
|
fixed: true,
|
|
|
|
});
|
|
|
|
|
|
|
|
$(elt).popover("show");
|
|
|
|
starred_messages_sidebar_elem = elt;
|
|
|
|
e.stopPropagation();
|
|
|
|
}
|
|
|
|
|
2020-02-19 01:38:34 +01:00
|
|
|
function build_move_topic_to_stream_popover(e, current_stream_id, topic_name) {
|
|
|
|
// TODO: Add support for keyboard-alphabet navigation. Some orgs
|
|
|
|
// many streams and scrolling can be a painful process in that
|
|
|
|
// case.
|
|
|
|
//
|
|
|
|
// NOTE: Private streams are also included in this list. We
|
|
|
|
// likely will make it possible to move messages to/from private
|
|
|
|
// streams in the future.
|
2020-05-16 10:09:13 +02:00
|
|
|
const current_stream_name = stream_data.maybe_get_stream_name(current_stream_id);
|
2020-06-03 16:44:57 +02:00
|
|
|
const args = {
|
2020-07-15 00:34:28 +02:00
|
|
|
topic_name,
|
|
|
|
current_stream_id,
|
2020-06-03 16:44:57 +02:00
|
|
|
notify_new_thread: message_edit.notify_new_thread_default,
|
|
|
|
notify_old_thread: message_edit.notify_old_thread_default,
|
|
|
|
};
|
2020-02-19 01:38:34 +01:00
|
|
|
|
2021-03-28 19:28:30 +02:00
|
|
|
const streams_list = stream_data.subscribed_subs().map((stream) => ({
|
|
|
|
name: stream.name,
|
|
|
|
value: stream.stream_id.toString(),
|
|
|
|
}));
|
|
|
|
const opts = {
|
|
|
|
widget_name: "select_stream",
|
|
|
|
data: streams_list,
|
|
|
|
default_text: $t({defaultMessage: "No streams"}),
|
|
|
|
include_current_item: false,
|
|
|
|
value: current_stream_id,
|
|
|
|
};
|
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_topic_popover();
|
2020-02-19 01:38:34 +01:00
|
|
|
|
|
|
|
$("#move-a-topic-modal-holder").html(render_move_topic_to_stream(args));
|
2020-05-12 13:41:45 +02:00
|
|
|
|
2021-03-28 19:28:30 +02:00
|
|
|
stream_widget = dropdown_list_widget(opts);
|
|
|
|
stream_header_colorblock = $("#move_topic_modal .topic_stream_edit_header").find(
|
2020-07-15 00:34:28 +02:00
|
|
|
".stream_header_colorblock",
|
|
|
|
);
|
2020-05-12 13:41:45 +02:00
|
|
|
|
2021-03-28 19:28:30 +02:00
|
|
|
stream_bar.decorate(current_stream_name, stream_header_colorblock, false);
|
2021-04-29 08:33:00 +02:00
|
|
|
overlays.open_modal("#move_topic_modal");
|
2020-02-19 01:38:34 +01:00
|
|
|
}
|
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function register_click_handlers() {
|
2020-07-15 01:29:15 +02:00
|
|
|
$("#stream_filters").on("click", ".stream-sidebar-menu-icon", (e) => {
|
2019-02-22 17:07:49 +01:00
|
|
|
e.stopPropagation();
|
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const elt = e.target;
|
2020-07-15 01:29:15 +02:00
|
|
|
const stream_li = $(elt).parents("li");
|
2020-01-12 13:39:37 +01:00
|
|
|
const stream_id = elem_to_stream_id(stream_li);
|
2019-02-22 17:07:49 +01:00
|
|
|
|
|
|
|
build_stream_popover({
|
2020-07-20 22:18:43 +02:00
|
|
|
elt,
|
|
|
|
stream_id,
|
2019-02-22 17:07:49 +01:00
|
|
|
});
|
|
|
|
});
|
2019-02-05 14:48:39 +01:00
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
$("#stream_filters").on("click", ".topic-sidebar-menu-icon", (e) => {
|
2019-02-05 14:48:39 +01:00
|
|
|
e.stopPropagation();
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const elt = $(e.target).closest(".topic-sidebar-menu-icon").expectOne()[0];
|
|
|
|
const stream_li = $(elt).closest(".narrow-filter").expectOne();
|
2020-01-12 13:39:37 +01:00
|
|
|
const stream_id = elem_to_stream_id(stream_li);
|
2020-07-15 01:29:15 +02:00
|
|
|
const topic_name = $(elt).closest("li").expectOne().attr("data-topic-name");
|
2021-06-24 09:26:39 +02:00
|
|
|
const url = $(elt).closest("li").find(".topic-name").expectOne().prop("href");
|
2019-02-05 14:48:39 +01:00
|
|
|
|
|
|
|
build_topic_popover({
|
2020-07-20 22:18:43 +02:00
|
|
|
elt,
|
|
|
|
stream_id,
|
|
|
|
topic_name,
|
2019-02-05 14:48:39 +01:00
|
|
|
});
|
2021-06-24 09:26:39 +02:00
|
|
|
|
|
|
|
build_topic_link_clipboard(url);
|
2019-02-05 14:48:39 +01:00
|
|
|
});
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
$("#global_filters").on("click", ".all-messages-sidebar-menu-icon", build_all_messages_popover);
|
2018-02-15 20:38:06 +01:00
|
|
|
|
2020-07-15 00:34:28 +02:00
|
|
|
$("#global_filters").on(
|
|
|
|
"click",
|
|
|
|
".starred-messages-sidebar-menu-icon",
|
|
|
|
build_starred_messages_popover,
|
|
|
|
);
|
2019-02-22 12:28:29 +01:00
|
|
|
|
2021-03-28 19:28:30 +02:00
|
|
|
$("body").on("click keypress", ".move-topic-dropdown .list_item", (e) => {
|
|
|
|
// We want the dropdown to collapse once any of the list item is pressed
|
|
|
|
// and thus don't want to kill the natural bubbling of event.
|
|
|
|
e.preventDefault();
|
|
|
|
|
2021-05-31 19:18:26 +02:00
|
|
|
if (e.type === "keypress" && e.key !== "Enter") {
|
2021-03-28 19:28:30 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
const stream_name = stream_data.maybe_get_stream_name(
|
|
|
|
Number.parseInt(stream_widget.value(), 10),
|
|
|
|
);
|
|
|
|
|
|
|
|
stream_bar.decorate(stream_name, stream_header_colorblock, false);
|
|
|
|
});
|
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
register_stream_handlers();
|
|
|
|
register_topic_handlers();
|
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function register_stream_handlers() {
|
2017-03-05 17:28:40 +01:00
|
|
|
// Stream settings
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".open_stream_settings", (e) => {
|
2019-11-02 00:06:25 +01:00
|
|
|
const sub = stream_popover_sub(e);
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_stream_popover();
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const stream_edit_hash = hash_util.stream_edit_uri(sub);
|
2021-03-22 16:09:12 +01:00
|
|
|
browser_history.go_to_location(stream_edit_hash);
|
2017-03-05 17:28:40 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
// Pin/unpin
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".pin_to_top", (e) => {
|
2019-11-02 00:06:25 +01:00
|
|
|
const sub = stream_popover_sub(e);
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_stream_popover();
|
2017-03-05 17:28:40 +01:00
|
|
|
subs.toggle_pin_to_top_stream(sub);
|
|
|
|
e.stopPropagation();
|
|
|
|
});
|
|
|
|
|
2018-02-15 20:38:06 +01:00
|
|
|
// Mark all messages in stream as read
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".mark_stream_as_read", (e) => {
|
2019-11-02 00:06:25 +01:00
|
|
|
const sub = stream_popover_sub(e);
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_stream_popover();
|
2017-08-15 19:34:15 +02:00
|
|
|
unread_ops.mark_stream_as_read(sub.stream_id);
|
2017-03-05 17:28:40 +01:00
|
|
|
e.stopPropagation();
|
|
|
|
});
|
|
|
|
|
2018-02-15 20:38:06 +01:00
|
|
|
// Mark all messages as read
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", "#mark_all_messages_as_read", (e) => {
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_all_messages_popover();
|
2020-06-18 08:11:41 +02:00
|
|
|
unread_ops.mark_all_as_read();
|
2018-02-15 20:38:06 +01:00
|
|
|
e.stopPropagation();
|
|
|
|
});
|
|
|
|
|
2021-02-26 21:23:32 +01:00
|
|
|
// Unstar all messages
|
|
|
|
$("body").on("click", "#unstar_all_messages", (e) => {
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_starred_messages_popover();
|
2019-02-22 12:28:29 +01:00
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
2021-03-25 09:45:39 +01:00
|
|
|
starred_messages_ui.confirm_unstar_all_messages();
|
2019-02-22 12:28:29 +01:00
|
|
|
});
|
|
|
|
|
2021-03-08 09:25:25 +01:00
|
|
|
// Unstar all messages in topic
|
|
|
|
$("body").on("click", ".sidebar-popover-unstar-all-in-topic", (e) => {
|
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
|
|
|
const topic_name = $(".sidebar-popover-unstar-all-in-topic").attr("data-topic-name");
|
|
|
|
const stream_id = $(".sidebar-popover-unstar-all-in-topic").attr("data-stream-id");
|
|
|
|
hide_topic_popover();
|
2021-03-25 09:45:39 +01:00
|
|
|
starred_messages_ui.confirm_unstar_all_messages_in_topic(
|
2021-03-08 09:25:25 +01:00
|
|
|
Number.parseInt(stream_id, 10),
|
|
|
|
topic_name,
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2019-03-18 17:46:07 +01:00
|
|
|
// Toggle displaying starred message count
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", "#toggle_display_starred_msg_count", (e) => {
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_starred_messages_popover();
|
2019-03-18 17:46:07 +01:00
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
2019-11-02 00:06:25 +01:00
|
|
|
const starred_msg_counts = page_params.starred_message_counts;
|
|
|
|
const data = {};
|
2019-03-18 17:46:07 +01:00
|
|
|
data.starred_message_counts = JSON.stringify(!starred_msg_counts);
|
|
|
|
channel.patch({
|
2020-07-15 01:29:15 +02:00
|
|
|
url: "/json/settings/display",
|
2020-07-20 22:18:43 +02:00
|
|
|
data,
|
2019-03-18 17:46:07 +01:00
|
|
|
});
|
|
|
|
});
|
2017-03-05 17:28:40 +01:00
|
|
|
// Mute/unmute
|
2020-07-22 02:08:20 +02:00
|
|
|
$("body").on("click", ".toggle_stream_muted", (e) => {
|
2019-11-02 00:06:25 +01:00
|
|
|
const sub = stream_popover_sub(e);
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_stream_popover();
|
2020-07-22 00:43:11 +02:00
|
|
|
subs.set_muted(sub, !sub.is_muted);
|
2017-03-05 17:28:40 +01:00
|
|
|
e.stopPropagation();
|
2021-01-19 15:27:49 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
// New topic in stream menu
|
|
|
|
$("body").on("click", ".popover_new_topic_button", (e) => {
|
|
|
|
const sub = stream_popover_sub(e);
|
|
|
|
hide_stream_popover();
|
|
|
|
|
2021-04-06 02:38:57 +02:00
|
|
|
compose_actions.start("stream", {
|
|
|
|
trigger: "popover new topic button",
|
|
|
|
stream: sub.name,
|
|
|
|
topic: "",
|
|
|
|
});
|
2021-01-19 15:27:49 +01:00
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
2017-03-05 17:28:40 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
// Unsubscribe
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".popover_sub_unsub_button", function (e) {
|
2017-03-05 17:28:40 +01:00
|
|
|
$(this).toggleClass("unsub");
|
|
|
|
$(this).closest(".popover").fadeOut(500).delay(500).remove();
|
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const sub = stream_popover_sub(e);
|
2020-08-07 00:38:19 +02:00
|
|
|
subs.sub_or_unsub(sub, true);
|
2017-03-05 17:28:40 +01:00
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
|
|
|
});
|
|
|
|
|
2020-06-10 18:55:51 +02:00
|
|
|
// Choose a different color.
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".choose_stream_color", (e) => {
|
|
|
|
update_spectrum($(e.target).closest(".streams_popover"), (colorpicker) => {
|
|
|
|
$(".colorpicker-container").show();
|
2017-03-05 17:28:40 +01:00
|
|
|
colorpicker.spectrum("destroy");
|
|
|
|
colorpicker.spectrum(stream_color.sidebar_popover_colorpicker_options_full);
|
|
|
|
// In theory this should clean up the old color picker,
|
|
|
|
// but this seems a bit flaky -- the new colorpicker
|
|
|
|
// doesn't fire until you click a button, but the buttons
|
|
|
|
// have been hidden. We work around this by just manually
|
|
|
|
// fixing it up here.
|
2020-07-15 01:29:15 +02:00
|
|
|
colorpicker.parent().find(".sp-container").removeClass("sp-buttons-disabled");
|
2017-03-05 17:28:40 +01:00
|
|
|
$(e.target).hide();
|
|
|
|
});
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
$(".streams_popover").on("click", "a.sp-cancel", () => {
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_stream_popover();
|
2017-03-05 17:28:40 +01:00
|
|
|
});
|
2020-10-20 19:43:41 +02:00
|
|
|
if ($(window).width() <= 768) {
|
|
|
|
$(".popover-inner").hide().fadeIn(300);
|
|
|
|
$(".popover").addClass("colorpicker-popover");
|
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
});
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|
2017-03-05 17:28:40 +01:00
|
|
|
|
2021-06-11 21:00:18 +02:00
|
|
|
function with_first_message_id(stream_id, topic_name, success_cb, error_cb) {
|
|
|
|
// The API endpoint for editing messages to change their
|
|
|
|
// content, topic, or stream requires a message ID.
|
|
|
|
//
|
|
|
|
// Because we don't have full data in the browser client, it's
|
|
|
|
// possible that we might display a topic in the left sidebar
|
|
|
|
// (and thus expose the UI for moving its topic to another
|
|
|
|
// stream) without having a message ID that is definitely
|
|
|
|
// within the topic. (The comments in stream_topic_history.js
|
|
|
|
// discuss the tricky issues around message deletion that are
|
|
|
|
// involved here).
|
|
|
|
//
|
|
|
|
// To ensure this option works reliably at a small latency
|
|
|
|
// cost for a rare operation, we just ask the server for the
|
|
|
|
// latest message ID in the topic.
|
|
|
|
const data = {
|
|
|
|
anchor: "newest",
|
|
|
|
num_before: 1,
|
|
|
|
num_after: 0,
|
|
|
|
narrow: JSON.stringify([
|
|
|
|
{operator: "stream", operand: stream_id},
|
|
|
|
{operator: "topic", operand: topic_name},
|
|
|
|
]),
|
|
|
|
};
|
|
|
|
|
|
|
|
channel.get({
|
|
|
|
url: "/json/messages",
|
|
|
|
data,
|
|
|
|
idempotent: true,
|
|
|
|
success(data) {
|
|
|
|
const message_id = data.messages[0].id;
|
|
|
|
success_cb(message_id);
|
|
|
|
},
|
|
|
|
error_cb,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
export function register_topic_handlers() {
|
2017-03-05 17:28:40 +01:00
|
|
|
// Mute the topic
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".sidebar-popover-mute-topic", (e) => {
|
2019-11-02 00:06:25 +01:00
|
|
|
const stream_id = topic_popover_stream_id(e);
|
2018-12-14 17:20:35 +01:00
|
|
|
if (!stream_id) {
|
2017-03-05 19:36:36 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const topic = $(e.currentTarget).attr("data-topic-name");
|
2021-01-03 12:28:09 +01:00
|
|
|
muting_ui.mute_topic(stream_id, topic);
|
2017-03-05 17:28:40 +01:00
|
|
|
e.stopPropagation();
|
|
|
|
e.preventDefault();
|
|
|
|
});
|
|
|
|
|
|
|
|
// Unmute the topic
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".sidebar-popover-unmute-topic", (e) => {
|
2019-11-02 00:06:25 +01:00
|
|
|
const stream_id = topic_popover_stream_id(e);
|
2018-12-14 17:20:35 +01:00
|
|
|
if (!stream_id) {
|
2017-03-05 19:36:36 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const topic = $(e.currentTarget).attr("data-topic-name");
|
2021-01-03 12:28:09 +01:00
|
|
|
muting_ui.unmute_topic(stream_id, topic);
|
2017-03-05 17:28:40 +01:00
|
|
|
e.stopPropagation();
|
|
|
|
e.preventDefault();
|
|
|
|
});
|
|
|
|
|
|
|
|
// Mark all messages as read
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".sidebar-popover-mark-topic-read", (e) => {
|
2019-11-02 00:06:25 +01:00
|
|
|
const stream_id = topic_popover_stream_id(e);
|
2018-12-14 18:40:57 +01:00
|
|
|
if (!stream_id) {
|
2017-03-05 19:36:36 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const topic = $(e.currentTarget).attr("data-topic-name");
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_topic_popover();
|
2018-12-14 18:40:57 +01:00
|
|
|
unread_ops.mark_topic_as_read(stream_id, topic);
|
2017-03-05 17:28:40 +01:00
|
|
|
e.stopPropagation();
|
|
|
|
});
|
2019-01-18 17:40:54 +01:00
|
|
|
|
|
|
|
// Deleting all message in a topic
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".sidebar-popover-delete-topic-messages", (e) => {
|
2019-11-02 00:06:25 +01:00
|
|
|
const stream_id = topic_popover_stream_id(e);
|
2019-01-18 17:40:54 +01:00
|
|
|
if (!stream_id) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const topic = $(e.currentTarget).attr("data-topic-name");
|
2019-11-02 00:06:25 +01:00
|
|
|
const args = {
|
2019-01-18 17:40:54 +01:00
|
|
|
topic_name: topic,
|
|
|
|
};
|
|
|
|
|
2021-02-28 01:02:37 +01:00
|
|
|
hide_topic_popover();
|
2019-01-18 17:40:54 +01:00
|
|
|
|
2021-05-07 18:41:12 +02:00
|
|
|
const modal_parent = $("#delete-topic-modal-holder");
|
|
|
|
const html_body = render_delete_topic_modal(args);
|
|
|
|
|
|
|
|
confirm_dialog.launch({
|
|
|
|
parent: modal_parent,
|
|
|
|
html_heading: $t_html({defaultMessage: "Delete topic"}),
|
|
|
|
help_link: "/help/delete-a-topic",
|
|
|
|
html_body,
|
|
|
|
html_yes_button: $t_html({defaultMessage: "Confirm"}),
|
|
|
|
on_click: () => {
|
|
|
|
message_edit.delete_topic(stream_id, topic);
|
|
|
|
},
|
2019-01-18 17:40:54 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
e.stopPropagation();
|
|
|
|
});
|
2020-02-19 01:38:34 +01:00
|
|
|
|
2021-06-11 20:50:03 +02:00
|
|
|
$("body").on("click", ".sidebar-popover-toggle-resolved", (e) => {
|
|
|
|
const topic_row = $(e.currentTarget);
|
|
|
|
const stream_id = Number.parseInt(topic_row.attr("data-stream-id"), 10);
|
|
|
|
const topic_name = topic_row.attr("data-topic-name");
|
2021-06-26 20:46:08 +02:00
|
|
|
with_first_message_id(stream_id, topic_name, (message_id) => {
|
|
|
|
message_edit.toggle_resolve_topic(message_id, topic_name);
|
|
|
|
});
|
2021-06-11 20:50:03 +02:00
|
|
|
|
|
|
|
hide_topic_popover();
|
|
|
|
e.stopPropagation();
|
|
|
|
e.preventDefault();
|
|
|
|
});
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", ".sidebar-popover-move-topic-messages", (e) => {
|
2020-02-19 01:38:34 +01:00
|
|
|
const topic_row = $(e.currentTarget);
|
2020-10-07 09:17:30 +02:00
|
|
|
const stream_id = Number.parseInt(topic_row.attr("data-stream-id"), 10);
|
2020-07-15 01:29:15 +02:00
|
|
|
const topic_name = topic_row.attr("data-topic-name");
|
2020-02-19 01:38:34 +01:00
|
|
|
build_move_topic_to_stream_popover(e, stream_id, topic_name);
|
|
|
|
e.stopPropagation();
|
|
|
|
e.preventDefault();
|
|
|
|
});
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", "#topic_stream_edit_form_error .send-status-close", () => {
|
2020-02-19 01:38:34 +01:00
|
|
|
$("#topic_stream_edit_form_error").hide();
|
|
|
|
});
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
$("body").on("click", "#do_move_topic_button", (e) => {
|
2020-09-24 07:50:36 +02:00
|
|
|
e.preventDefault();
|
|
|
|
|
2020-05-16 09:58:55 +02:00
|
|
|
function show_error_msg(msg) {
|
|
|
|
$("#topic_stream_edit_form_error .error-msg").text(msg);
|
|
|
|
$("#topic_stream_edit_form_error").show();
|
|
|
|
}
|
|
|
|
|
2020-10-07 12:18:05 +02:00
|
|
|
const params = Object.fromEntries(
|
|
|
|
$("#move_topic_form")
|
|
|
|
.serializeArray()
|
|
|
|
.map(({name, value}) => [name, value]),
|
|
|
|
);
|
2020-02-19 01:38:34 +01:00
|
|
|
|
2021-03-28 19:28:30 +02:00
|
|
|
const {old_topic_name} = params;
|
|
|
|
const select_stream_id = stream_widget.value();
|
|
|
|
|
2020-07-15 00:34:28 +02:00
|
|
|
let {
|
|
|
|
current_stream_id,
|
|
|
|
new_topic_name,
|
|
|
|
send_notification_to_new_thread,
|
|
|
|
send_notification_to_old_thread,
|
|
|
|
} = params;
|
2020-06-03 16:29:07 +02:00
|
|
|
new_topic_name = new_topic_name.trim();
|
2020-07-15 01:29:15 +02:00
|
|
|
send_notification_to_new_thread = send_notification_to_new_thread === "on";
|
|
|
|
send_notification_to_old_thread = send_notification_to_old_thread === "on";
|
2020-10-07 09:17:30 +02:00
|
|
|
current_stream_id = Number.parseInt(current_stream_id, 10);
|
2020-02-19 01:38:34 +01:00
|
|
|
|
2020-07-15 00:34:28 +02:00
|
|
|
if (
|
2020-10-07 09:17:30 +02:00
|
|
|
current_stream_id === Number.parseInt(select_stream_id, 10) &&
|
2020-07-15 00:34:28 +02:00
|
|
|
new_topic_name.toLowerCase() === old_topic_name.toLowerCase()
|
|
|
|
) {
|
2020-05-16 10:09:13 +02:00
|
|
|
show_error_msg("Please select a different stream or change topic name.");
|
2020-09-24 07:50:36 +02:00
|
|
|
return;
|
2020-05-16 10:09:13 +02:00
|
|
|
}
|
|
|
|
|
2020-08-25 17:52:39 +02:00
|
|
|
message_edit.show_topic_move_spinner();
|
2021-06-11 21:00:18 +02:00
|
|
|
with_first_message_id(
|
|
|
|
current_stream_id,
|
|
|
|
old_topic_name,
|
|
|
|
(message_id) => {
|
2020-02-19 01:38:34 +01:00
|
|
|
if (old_topic_name.trim() === new_topic_name.trim()) {
|
|
|
|
// We use `undefined` to tell the server that
|
|
|
|
// there has been no change in the topic name.
|
|
|
|
new_topic_name = undefined;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (old_topic_name && select_stream_id) {
|
|
|
|
message_edit.move_topic_containing_message_to_stream(
|
2020-07-15 00:34:28 +02:00
|
|
|
message_id,
|
|
|
|
select_stream_id,
|
|
|
|
new_topic_name,
|
2020-06-03 16:44:57 +02:00
|
|
|
send_notification_to_new_thread,
|
2020-07-15 00:34:28 +02:00
|
|
|
send_notification_to_old_thread,
|
|
|
|
);
|
2020-02-19 01:38:34 +01:00
|
|
|
}
|
|
|
|
},
|
2021-06-11 21:00:18 +02:00
|
|
|
(xhr) => {
|
2020-08-25 17:52:39 +02:00
|
|
|
message_edit.hide_topic_move_spinner();
|
2020-05-16 09:58:55 +02:00
|
|
|
show_error_msg(xhr.responseJSON.msg);
|
2020-02-19 01:38:34 +01:00
|
|
|
},
|
2021-06-11 21:00:18 +02:00
|
|
|
);
|
2020-02-19 01:38:34 +01:00
|
|
|
});
|
2021-02-28 01:02:37 +01:00
|
|
|
}
|