mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 05:23:35 +00:00
compose_actions: Add hooks for compose.js modules.
This commit cuts the dependency on `compose.js` module for `compose_actions.js` module by introducing a hook system for registering different hooks from external modules.
This commit is contained in:
@@ -417,7 +417,19 @@ export function render_and_show_preview($preview_spinner, $preview_content_box,
|
||||
}
|
||||
}
|
||||
|
||||
function setup_compose_actions_hooks() {
|
||||
compose_actions.register_compose_box_clear_hook(clear_invites);
|
||||
compose_actions.register_compose_box_clear_hook(clear_private_stream_alert);
|
||||
compose_actions.register_compose_box_clear_hook(clear_preview_area);
|
||||
|
||||
compose_actions.register_compose_cancel_hook(abort_xhr);
|
||||
compose_actions.register_compose_cancel_hook(abort_video_callbacks);
|
||||
}
|
||||
|
||||
export function initialize() {
|
||||
// Register hooks for compose_actions.
|
||||
setup_compose_actions_hooks();
|
||||
|
||||
$("#below-compose-content .video_link").toggle(compute_show_video_chat_button());
|
||||
|
||||
$("#compose-textarea").on("keydown", (event) => {
|
||||
|
||||
@@ -6,7 +6,6 @@ import $ from "jquery";
|
||||
import * as fenced_code from "../shared/src/fenced_code";
|
||||
|
||||
import * as channel from "./channel";
|
||||
import * as compose from "./compose";
|
||||
import * as compose_banner from "./compose_banner";
|
||||
import * as compose_fade from "./compose_fade";
|
||||
import * as compose_pm_pill from "./compose_pm_pill";
|
||||
@@ -32,6 +31,23 @@ import * as stream_bar from "./stream_bar";
|
||||
import * as stream_data from "./stream_data";
|
||||
import * as unread_ops from "./unread_ops";
|
||||
|
||||
const compose_clear_box_hooks = [];
|
||||
const compose_cancel_hooks = [];
|
||||
|
||||
export function register_compose_box_clear_hook(hook) {
|
||||
compose_clear_box_hooks.push(hook);
|
||||
}
|
||||
|
||||
export function register_compose_cancel_hook(hook) {
|
||||
compose_cancel_hooks.push(hook);
|
||||
}
|
||||
|
||||
function call_hooks(hooks) {
|
||||
for (const f of hooks) {
|
||||
f();
|
||||
}
|
||||
}
|
||||
|
||||
export function blur_compose_inputs() {
|
||||
$(".message_comp").find("input, textarea, button, #private_message_recipient").trigger("blur");
|
||||
}
|
||||
@@ -61,16 +77,14 @@ export function clear_textarea() {
|
||||
}
|
||||
|
||||
function clear_box() {
|
||||
compose.clear_invites();
|
||||
call_hooks(compose_clear_box_hooks);
|
||||
|
||||
// TODO: Better encapsulate at-mention warnings.
|
||||
compose_validate.clear_topic_resolved_warning();
|
||||
compose_validate.clear_wildcard_warnings($("#compose_banners"));
|
||||
compose.clear_private_stream_alert();
|
||||
compose_validate.set_user_acknowledged_wildcard_flag(false);
|
||||
|
||||
compose_state.set_recipient_edited_manually(false);
|
||||
compose.clear_preview_area();
|
||||
clear_textarea();
|
||||
compose_validate.check_overflow_text();
|
||||
$("#compose-textarea").removeData("draft-id");
|
||||
@@ -280,8 +294,7 @@ export function cancel() {
|
||||
$("#compose_close").hide();
|
||||
clear_box();
|
||||
compose_banner.clear_message_sent_banners();
|
||||
compose.abort_xhr();
|
||||
compose.abort_video_callbacks(undefined);
|
||||
call_hooks(compose_cancel_hooks);
|
||||
compose_state.set_message_type(false);
|
||||
compose_pm_pill.clear();
|
||||
$(document).trigger("compose_canceled.zulip");
|
||||
|
||||
@@ -35,7 +35,10 @@ autosize.update = () => {};
|
||||
mock_esm("autosize", {default: autosize});
|
||||
|
||||
const channel = mock_esm("../src/channel");
|
||||
const compose_actions = mock_esm("../src/compose_actions");
|
||||
const compose_actions = mock_esm("../src/compose_actions", {
|
||||
register_compose_cancel_hook: noop,
|
||||
register_compose_box_clear_hook: noop,
|
||||
});
|
||||
const compose_fade = mock_esm("../src/compose_fade");
|
||||
const compose_pm_pill = mock_esm("../src/compose_pm_pill");
|
||||
const loading = mock_esm("../src/loading");
|
||||
|
||||
@@ -229,6 +229,7 @@ test("start", ({override, override_rewire, mock_template}) => {
|
||||
abort_xhr_called = true;
|
||||
});
|
||||
|
||||
compose_actions.register_compose_cancel_hook(compose.abort_xhr);
|
||||
$("#compose-textarea").set_height(50);
|
||||
|
||||
assert_hidden("#compose_controls");
|
||||
|
||||
Reference in New Issue
Block a user