diff --git a/web/src/click_handlers.js b/web/src/click_handlers.js index a6b9a38438..164932028d 100644 --- a/web/src/click_handlers.js +++ b/web/src/click_handlers.js @@ -814,7 +814,7 @@ export function initialize() { // We do the same when copying a code block, since the // most likely next action within Zulip is to paste it // into compose and modify it. - $("#compose-textarea").trigger("focus"); + $("textarea#compose-textarea").trigger("focus"); return; } else if ( !window.getSelection().toString() && diff --git a/web/src/compose.js b/web/src/compose.js index 773c60770f..fa16b25239 100644 --- a/web/src/compose.js +++ b/web/src/compose.js @@ -42,13 +42,13 @@ export function clear_private_stream_alert() { } export function clear_preview_area() { - $("#compose-textarea").show(); - $("#compose-textarea").trigger("focus"); + $("textarea#compose-textarea").show(); + $("textarea#compose-textarea").trigger("focus"); $("#compose .undo_markdown_preview").hide(); $("#compose .preview_message_area").hide(); $("#compose .preview_content").empty(); $("#compose .markdown_preview").show(); - autosize.update($("#compose-textarea")); + autosize.update($("textarea#compose-textarea")); // While in preview mode we disable unneeded compose_control_buttons, // so here we are re-enabling those compose_control_buttons @@ -107,11 +107,11 @@ export function clear_compose_box() { if (compose_ui.is_full_size()) { compose_ui.make_compose_box_original_size(); } - $("#compose-textarea").val("").trigger("focus"); + $("textarea#compose-textarea").val("").trigger("focus"); compose_validate.check_overflow_text(); compose_validate.clear_topic_resolved_warning(); - $("#compose-textarea").removeData("draft-id"); - compose_ui.autosize_textarea($("#compose-textarea")); + $("textarea#compose-textarea").removeData("draft-id"); + compose_ui.autosize_textarea($("textarea#compose-textarea")); compose_banner.clear_errors(); compose_banner.clear_warnings(); compose_banner.clear_uploads(); @@ -121,8 +121,8 @@ export function clear_compose_box() { export function send_message_success(request, data) { if (!request.locally_echoed) { - if ($("#compose-textarea").data("draft-id")) { - drafts.draft_model.deleteDraft($("#compose-textarea").data("draft-id")); + if ($("textarea#compose-textarea").data("draft-id")) { + drafts.draft_model.deleteDraft($("textarea#compose-textarea").data("draft-id")); } clear_compose_box(); } @@ -187,7 +187,7 @@ export function send_message(request = create_message_object()) { response, compose_banner.CLASSNAMES.generic_compose_error, $("#compose_banners"), - $("#compose-textarea"), + $("textarea#compose-textarea"), ); // For messages that were not locally echoed, we're // responsible for hiding the compose spinner to restore @@ -367,7 +367,7 @@ function schedule_message_to_custom_date() { const $banner_container = $("#compose_banners"); const success = function (data) { - drafts.draft_model.deleteDraft($("#compose-textarea").data("draft-id")); + drafts.draft_model.deleteDraft($("textarea#compose-textarea").data("draft-id")); clear_compose_box(); const new_row = render_success_message_scheduled_banner({ scheduled_message_id: data.scheduled_message_id, @@ -384,7 +384,7 @@ function schedule_message_to_custom_date() { response, compose_banner.CLASSNAMES.generic_compose_error, $banner_container, - $("#compose-textarea"), + $("textarea#compose-textarea"), ); }; diff --git a/web/src/compose_actions.js b/web/src/compose_actions.js index 24a1a83160..47c1c16500 100644 --- a/web/src/compose_actions.js +++ b/web/src/compose_actions.js @@ -81,9 +81,9 @@ function clear_box() { compose_state.set_recipient_edited_manually(false); clear_textarea(); compose_validate.check_overflow_text(); - $("#compose-textarea").removeData("draft-id"); - $("#compose-textarea").toggleClass("invalid", false); - compose_ui.autosize_textarea($("#compose-textarea")); + $("textarea#compose-textarea").removeData("draft-id"); + $("textarea#compose-textarea").toggleClass("invalid", false); + compose_ui.autosize_textarea($("textarea#compose-textarea")); compose_banner.clear_errors(); compose_banner.clear_warnings(); compose_banner.clear_uploads(); @@ -91,7 +91,7 @@ function clear_box() { export function autosize_message_content() { if (!compose_ui.is_full_size()) { - autosize($("#compose-textarea"), { + autosize($("textarea#compose-textarea"), { callback() { maybe_scroll_up_selected_message(); }, @@ -271,13 +271,13 @@ export function start(msg_type, opts) { show_compose_box(msg_type, opts); if (opts.draft_id) { - $("#compose-textarea").data("draft-id", opts.draft_id); + $("textarea#compose-textarea").data("draft-id", opts.draft_id); } if (opts.content !== undefined) { // If we were provided with message content, we might need to // resize the compose box, or display that it's too long. - compose_ui.autosize_textarea($("#compose-textarea")); + compose_ui.autosize_textarea($("textarea#compose-textarea")); compose_validate.check_overflow_text(); } @@ -307,7 +307,7 @@ export function cancel() { compose_ui.make_compose_box_original_size(); } - $("#compose-textarea").height(40 + "px"); + $("textarea#compose-textarea").height(40 + "px"); if (page_params.narrow !== undefined) { // Never close the compose box in narrow embedded windows, but @@ -376,7 +376,7 @@ export function on_topic_narrow() { compose_validate.warn_if_topic_resolved(true); compose_fade.set_focused_recipient("stream"); compose_fade.update_message_list(); - $("#compose-textarea").trigger("focus"); + $("textarea#compose-textarea").trigger("focus"); } export function on_narrow(opts) { diff --git a/web/src/compose_popovers.js b/web/src/compose_popovers.js index 95a730ce61..f429c1c3a5 100644 --- a/web/src/compose_popovers.js +++ b/web/src/compose_popovers.js @@ -120,7 +120,7 @@ export function initialize() { // Refocus in the content box so you can continue typing or // press Enter to send. - $("#compose-textarea").trigger("focus"); + $("textarea#compose-textarea").trigger("focus"); channel.patch({ url: "/json/settings", diff --git a/web/src/compose_recipient.js b/web/src/compose_recipient.js index c90d941d3b..856c111c71 100644 --- a/web/src/compose_recipient.js +++ b/web/src/compose_recipient.js @@ -295,12 +295,12 @@ function on_hidden_callback() { // Always move focus to the topic input even if it's not empty, // since it's likely the user will want to update the topic // after updating the stream. - ui_util.place_caret_at_end($("#stream_message_recipient_topic")[0]); + ui_util.place_caret_at_end($("input#stream_message_recipient_topic")[0]); } else { if (compose_state.private_message_recipient().length === 0) { $("#private_message_recipient").trigger("focus").trigger("select"); } else { - $("#compose-textarea").trigger("focus"); + $("textarea#compose-textarea").trigger("focus"); } } } @@ -339,7 +339,7 @@ export function initialize() { export function update_placeholder_text() { // Change compose placeholder text only if compose box is open. - if (!$("#compose-textarea").is(":visible")) { + if (!$("textarea#compose-textarea").is(":visible")) { return; } @@ -352,5 +352,5 @@ export function update_placeholder_text() { private_message_recipient: compose_pm_pill.get_emails(), }; - $("#compose-textarea").attr("placeholder", compose_ui.compute_placeholder_text(opts)); + $("textarea#compose-textarea").attr("placeholder", compose_ui.compute_placeholder_text(opts)); } diff --git a/web/src/compose_reply.js b/web/src/compose_reply.js index 5371b8fced..22ee8db791 100644 --- a/web/src/compose_reply.js +++ b/web/src/compose_reply.js @@ -124,7 +124,7 @@ export function reply_with_mention(opts) { } export function quote_and_reply(opts) { - const $textarea = $("#compose-textarea"); + const $textarea = $("textarea#compose-textarea"); const message_id = message_lists.current.selected_id(); const message = message_lists.current.selected_message(); const quoting_placeholder = $t({defaultMessage: "[Quoting…]"}); @@ -159,7 +159,7 @@ export function quote_and_reply(opts) { content += `${fence}quote\n${message.raw_content}\n${fence}`; compose_ui.replace_syntax(quoting_placeholder, content, $textarea); - compose_ui.autosize_textarea($("#compose-textarea")); + compose_ui.autosize_textarea($("textarea#compose-textarea")); } if (message && message.raw_content) { diff --git a/web/src/compose_setup.js b/web/src/compose_setup.js index 87e2e5fe42..01a52cb068 100644 --- a/web/src/compose_setup.js +++ b/web/src/compose_setup.js @@ -47,18 +47,18 @@ export function initialize() { $("#below-compose-content .video_link").toggle(compose_call.compute_show_video_chat_button()); $("#below-compose-content .audio_link").toggle(compose_call.compute_show_audio_chat_button()); - $("#compose-textarea").on("keydown", (event) => { - compose_ui.handle_keydown(event, $("#compose-textarea").expectOne()); + $("textarea#compose-textarea").on("keydown", (event) => { + compose_ui.handle_keydown(event, $("textarea#compose-textarea").expectOne()); }); - $("#compose-textarea").on("keyup", (event) => { - compose_ui.handle_keyup(event, $("#compose-textarea").expectOne()); + $("textarea#compose-textarea").on("keyup", (event) => { + compose_ui.handle_keyup(event, $("textarea#compose-textarea").expectOne()); }); - $("#compose-textarea").on("input propertychange", () => { + $("textarea#compose-textarea").on("input propertychange", () => { compose_validate.warn_if_topic_resolved(false); const compose_text_length = compose_validate.check_overflow_text(); - if (compose_text_length !== 0 && $("#compose-textarea").hasClass("invalid")) { - $("#compose-textarea").toggleClass("invalid", false); + if (compose_text_length !== 0 && $("textarea#compose-textarea").hasClass("invalid")) { + $("textarea#compose-textarea").toggleClass("invalid", false); } // Change compose close button tooltip as per condition. // We save compose text in draft only if its length is > 2. @@ -229,7 +229,7 @@ export function initialize() { error_message, compose_banner.CLASSNAMES.generic_compose_error, $banner_container, - $("#compose-textarea"), + $("textarea#compose-textarea"), ); $(event.target).prop("disabled", true); } @@ -330,8 +330,8 @@ export function initialize() { $("#compose").addClass("preview_mode"); $("#compose .preview_mode_disabled .compose_control_button").attr("tabindex", -1); - const content = $("#compose-textarea").val(); - $("#compose-textarea").hide(); + const content = $("textarea#compose-textarea").val(); + $("textarea#compose-textarea").hide(); $("#compose .markdown_preview").hide(); $("#compose .undo_markdown_preview").show(); $("#compose .undo_markdown_preview").trigger("focus"); @@ -370,12 +370,12 @@ export function initialize() { compose_ui.make_compose_box_original_size(); }); - $("#compose-textarea").on("focus", () => { + $("textarea#compose-textarea").on("focus", () => { compose_recipient.update_placeholder_text(); }); $("#compose_recipient_box").on("click", "#recipient_box_clear_topic_button", () => { - const $input = $("#stream_message_recipient_topic"); + const $input = $("input#stream_message_recipient_topic"); const $button = $("#recipient_box_clear_topic_button"); $input.val(""); @@ -383,7 +383,7 @@ export function initialize() { $button.hide(); }); - $("#compose_recipient_box").on("input", "#stream_message_recipient_topic", (e) => { + $("#compose_recipient_box").on("input", "input#stream_message_recipient_topic", (e) => { const $button = $("#recipient_box_clear_topic_button"); const value = $(e.target).val(); if (value.length === 0) { @@ -393,11 +393,11 @@ export function initialize() { } }); - $("#stream_message_recipient_topic").on("focus", () => { + $("input#stream_message_recipient_topic").on("focus", () => { compose_recipient.update_placeholder_text(); }); - $("#stream_message_recipient_topic").on("input", () => { + $("input#stream_message_recipient_topic").on("input", () => { compose_recipient.update_placeholder_text(); }); diff --git a/web/src/compose_state.js b/web/src/compose_state.js index 01e43e7cfd..fa95501a59 100644 --- a/web/src/compose_state.js +++ b/web/src/compose_state.js @@ -50,12 +50,12 @@ export function composing() { return Boolean(message_type); } -function get_or_set(fieldname, keep_leading_whitespace, no_trim) { +function get_or_set(input_selector, keep_leading_whitespace, no_trim) { // We can't hoist the assignment of '$elem' out of this lambda, // because the DOM element might not exist yet when get_or_set // is called. return function (newval) { - const $elem = $(`#${CSS.escape(fieldname)}`); + const $elem = $(input_selector); const oldval = $elem.val(); if (newval !== undefined) { $elem.val(newval); @@ -108,7 +108,7 @@ export function set_compose_recipient_id(recipient_id) { } // TODO: Break out setter and getter into their own functions. -export const topic = get_or_set("stream_message_recipient_topic"); +export const topic = get_or_set("input#stream_message_recipient_topic"); export function empty_topic_placeholder() { return $t({defaultMessage: "(no topic)"}); @@ -116,12 +116,12 @@ export function empty_topic_placeholder() { // We can't trim leading whitespace in `compose_textarea` because // of the indented syntax for multi-line code blocks. -export const message_content = get_or_set("compose-textarea", true); +export const message_content = get_or_set("textarea#compose-textarea", true); -const untrimmed_message_content = get_or_set("compose-textarea", true, true); +const untrimmed_message_content = get_or_set("textarea#compose-textarea", true, true); function cursor_at_start_of_whitespace_in_compose() { - const cursor_position = $("#compose-textarea").caret(); + const cursor_position = $("textarea#compose-textarea").caret(); return message_content() === "" && cursor_position === 0; } diff --git a/web/src/compose_textarea.ts b/web/src/compose_textarea.ts index 6b33641f08..f213cee8f1 100644 --- a/web/src/compose_textarea.ts +++ b/web/src/compose_textarea.ts @@ -5,7 +5,7 @@ import $ from "jquery"; let saved_compose_cursor = 0; function set_compose_textarea_handlers(): void { - $("#compose-textarea").on("blur", function () { + $("textarea#compose-textarea").on("blur", function () { saved_compose_cursor = $(this).caret(); }); @@ -17,7 +17,7 @@ function set_compose_textarea_handlers(): void { } export function restore_compose_cursor(): void { - $("#compose-textarea").trigger("focus").caret(saved_compose_cursor); + $("textarea#compose-textarea").trigger("focus").caret(saved_compose_cursor); } export function initialize(): void { diff --git a/web/src/compose_ui.js b/web/src/compose_ui.js index 3e61f0a1f3..6710088a3e 100644 --- a/web/src/compose_ui.js +++ b/web/src/compose_ui.js @@ -47,15 +47,15 @@ function get_focus_area(msg_type, opts) { // Set focus to "Topic" when narrowed to a stream+topic // and "Start new conversation" button clicked. if (msg_type === "stream" && opts.stream_id && !opts.topic) { - return "#stream_message_recipient_topic"; + return "input#stream_message_recipient_topic"; } else if ( (msg_type === "stream" && opts.stream_id) || (msg_type === "private" && opts.private_message_recipient) ) { if (opts.trigger === "clear topic button") { - return "#stream_message_recipient_topic"; + return "input#stream_message_recipient_topic"; } - return "#compose-textarea"; + return "textarea#compose-textarea"; } if (msg_type === "stream") { @@ -159,7 +159,7 @@ export function smart_insert_block($textarea, syntax, padding_newlines = 2) { export function insert_syntax_and_focus( syntax, - $textarea = $("#compose-textarea"), + $textarea = $("textarea#compose-textarea"), mode = "inline", padding_newlines, ) { @@ -184,7 +184,7 @@ export function insert_syntax_and_focus( } } -export function replace_syntax(old_syntax, new_syntax, $textarea = $("#compose-textarea")) { +export function replace_syntax(old_syntax, new_syntax, $textarea = $("textarea#compose-textarea")) { // The following couple lines are needed to later restore the initial // logical position of the cursor after the replacement const prev_caret = $textarea.caret(); @@ -294,7 +294,7 @@ export function make_compose_box_full_size() { // The autosize should be destroyed for the full size compose // box else it will interfere and shrink its size accordingly. - autosize.destroy($("#compose-textarea")); + autosize.destroy($("textarea#compose-textarea")); $("#compose").addClass("compose-fullscreen"); @@ -304,7 +304,7 @@ export function make_compose_box_full_size() { $(".collapse_composebox_button").show(); $(".expand_composebox_button").hide(); $("#scroll-to-bottom-button-container").removeClass("show"); - $("#compose-textarea").trigger("focus"); + $("textarea#compose-textarea").trigger("focus"); } export function make_compose_box_original_size() { @@ -317,11 +317,11 @@ export function make_compose_box_original_size() { // Again initialise the compose textarea as it was destroyed // when compose box was made full screen - autosize($("#compose-textarea")); + autosize($("textarea#compose-textarea")); $(".collapse_composebox_button").hide(); $(".expand_composebox_button").show(); - $("#compose-textarea").trigger("focus"); + $("textarea#compose-textarea").trigger("focus"); } export function handle_keydown(event, $textarea) { diff --git a/web/src/compose_validate.js b/web/src/compose_validate.js index 43f7ef0315..a1c4c5325b 100644 --- a/web/src/compose_validate.js +++ b/web/src/compose_validate.js @@ -500,7 +500,7 @@ function validate_stream_message(scheduling_message) { $t({defaultMessage: "Topics are required in this organization."}), compose_banner.CLASSNAMES.topic_missing, $banner_container, - $("#stream_message_recipient_topic"), + $("input#stream_message_recipient_topic"), ); return false; } @@ -623,7 +623,7 @@ export function check_overflow_text() { if (text.length > max_length) { $indicator.addClass("over_limit"); - $("#compose-textarea").addClass("over_limit"); + $("textarea#compose-textarea").addClass("over_limit"); $indicator.text(text.length + "/" + max_length); compose_banner.show_error_message( $t( @@ -639,14 +639,14 @@ export function check_overflow_text() { $("#compose-send-button").prop("disabled", true); } else if (text.length > 0.9 * max_length) { $indicator.removeClass("over_limit"); - $("#compose-textarea").removeClass("over_limit"); + $("textarea#compose-textarea").removeClass("over_limit"); $indicator.text(text.length + "/" + max_length); $("#compose-send-button").prop("disabled", false); $(`#compose_banners .${CSS.escape(compose_banner.CLASSNAMES.message_too_long)}`).remove(); } else { $indicator.text(""); - $("#compose-textarea").removeClass("over_limit"); + $("textarea#compose-textarea").removeClass("over_limit"); $("#compose-send-button").prop("disabled", false); $(`#compose_banners .${CSS.escape(compose_banner.CLASSNAMES.message_too_long)}`).remove(); @@ -657,8 +657,8 @@ export function check_overflow_text() { export function validate_message_length() { if (compose_state.message_content().length > page_params.max_message_length) { - $("#compose-textarea").addClass("flash"); - setTimeout(() => $("#compose-textarea").removeClass("flash"), 1500); + $("textarea#compose-textarea").addClass("flash"); + setTimeout(() => $("textarea#compose-textarea").removeClass("flash"), 1500); return false; } return true; @@ -667,7 +667,7 @@ export function validate_message_length() { export function validate(scheduling_message) { const message_content = compose_state.message_content(); if (/^\s*$/.test(message_content)) { - $("#compose-textarea").toggleClass("invalid", true); + $("textarea#compose-textarea").toggleClass("invalid", true); return false; } diff --git a/web/src/composebox_typeahead.js b/web/src/composebox_typeahead.js index 9b8495b481..7ee4b1ceeb 100644 --- a/web/src/composebox_typeahead.js +++ b/web/src/composebox_typeahead.js @@ -241,7 +241,7 @@ function handle_keydown(e, {on_enter_send}) { target_sel = `#${CSS.escape(e.target.id)}`; } - const on_topic = target_sel === "#stream_message_recipient_topic"; + const on_topic = target_sel === "input#stream_message_recipient_topic"; const on_pm = target_sel === "#private_message_recipient"; const on_compose = target_sel === "#compose-textarea"; @@ -276,11 +276,11 @@ function handle_keydown(e, {on_enter_send}) { return; } - handle_enter($("#compose-textarea"), e); + handle_enter($("textarea#compose-textarea"), e); } } else if (on_topic || on_pm) { // We are doing the focusing on keyup to not abort the typeahead. - $nextFocus = $("#compose-textarea"); + $nextFocus = $("textarea#compose-textarea"); } } } @@ -1133,7 +1133,7 @@ export function initialize({on_enter_send}) { $("form#send_message_form").on("keydown", (e) => handle_keydown(e, {on_enter_send})); $("form#send_message_form").on("keyup", handle_keyup); - $("#stream_message_recipient_topic").typeahead({ + $("input#stream_message_recipient_topic").typeahead({ source() { return topics_seen_for(compose_state.stream_id()); }, @@ -1195,7 +1195,7 @@ export function initialize({on_enter_send}) { stopAdvance: true, // Do not advance to the next field on a Tab or Enter }); - initialize_compose_typeahead("#compose-textarea"); + initialize_compose_typeahead("textarea#compose-textarea"); $("#private_message_recipient").on("blur", function () { const val = $(this).val(); diff --git a/web/src/copy_and_paste.js b/web/src/copy_and_paste.js index ff80835db4..5baceeb388 100644 --- a/web/src/copy_and_paste.js +++ b/web/src/copy_and_paste.js @@ -535,6 +535,6 @@ export function paste_handler(event) { } export function initialize() { - $("#compose-textarea").on("paste", paste_handler); + $("textarea#compose-textarea").on("paste", paste_handler); $("body").on("paste", ".message_edit_content", paste_handler); } diff --git a/web/src/drafts.js b/web/src/drafts.js index d297593a8f..0213d612b0 100644 --- a/web/src/drafts.js +++ b/web/src/drafts.js @@ -250,7 +250,7 @@ export function update_draft(opts = {}) { return undefined; } - const draft_id = $("#compose-textarea").data("draft-id"); + const draft_id = $("textarea#compose-textarea").data("draft-id"); if (draft_id !== undefined) { // We don't save multiple drafts of the same message; @@ -265,7 +265,7 @@ export function update_draft(opts = {}) { // We have never saved a draft for this message, so add one. const update_count = opts.update_count === undefined ? true : opts.update_count; const new_draft_id = draft_model.addDraft(draft, update_count); - $("#compose-textarea").data("draft-id", new_draft_id); + $("textarea#compose-textarea").data("draft-id", new_draft_id); maybe_notify(no_notify); return new_draft_id; diff --git a/web/src/giphy.js b/web/src/giphy.js index 75b1a0e8b5..2c238c23ef 100644 --- a/web/src/giphy.js +++ b/web/src/giphy.js @@ -94,7 +94,7 @@ async function renderGIPHYGrid(targetEl) { // GIF; nice in principle but too distracting. hideAttribution: true, onGifClick(props) { - let $textarea = $("#compose-textarea"); + let $textarea = $("textarea#compose-textarea"); if (edit_message_id !== undefined) { $textarea = $( `#edit_form_${CSS.escape(edit_message_id)} .message_edit_content`, diff --git a/web/src/hotkey.js b/web/src/hotkey.js index 2c423346a3..9a5874d385 100644 --- a/web/src/hotkey.js +++ b/web/src/hotkey.js @@ -320,7 +320,7 @@ export function process_escape_key(e) { // Check if the giphy popover was open using compose box. // Hide GIPHY popover if it's open. if (!giphy.is_popped_from_edit_message() && giphy.hide_giphy_popover()) { - $("#compose-textarea").trigger("focus"); + $("textarea#compose-textarea").trigger("focus"); return true; } @@ -620,7 +620,7 @@ export function process_shift_tab_key() { return emoji_picker.navigate("shift_tab"); } - if ($("#stream_message_recipient_topic").is(":focus")) { + if ($("input#stream_message_recipient_topic").is(":focus")) { compose_recipient.open_compose_recipient_dropdown(); return true; } diff --git a/web/src/message_list_view.js b/web/src/message_list_view.js index 717a4f9b85..d093d34ad8 100644 --- a/web/src/message_list_view.js +++ b/web/src/message_list_view.js @@ -1117,7 +1117,7 @@ export class MessageListView { // the current compose is bigger than the empty, open // compose box. const compose_textarea_default_height = 42; - const compose_textarea_current_height = $("#compose-textarea").height(); + const compose_textarea_current_height = $("textarea#compose-textarea").height(); const expected_change = compose_textarea_current_height - compose_textarea_default_height; const expected_offset = offset - expected_change; diff --git a/web/src/resize.js b/web/src/resize.js index 1ab31a2d0d..a9865a2f68 100644 --- a/web/src/resize.js +++ b/web/src/resize.js @@ -91,13 +91,13 @@ export function reset_compose_message_max_height(bottom_whitespace_height) { const compose_height = $("#compose").get(0).getBoundingClientRect().height; const compose_textarea_height = Math.max( - $("#compose-textarea").get(0).getBoundingClientRect().height, + $("textarea#compose-textarea").get(0).getBoundingClientRect().height, $("#preview_message_area").get(0).getBoundingClientRect().height, ); const compose_non_textarea_height = compose_height - compose_textarea_height; // We ensure that the last message is not overlapped by compose box. - $("#compose-textarea").css( + $("textarea#compose-textarea").css( "max-height", // Because