mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 16:37:23 +00:00
js: Convert static/js/compose_ui.js to ES6 module.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
committed by
Tim Abbott
parent
8191915e57
commit
dc95f06b62
@@ -127,7 +127,6 @@
|
|||||||
"$": false,
|
"$": false,
|
||||||
"blueslip": false,
|
"blueslip": false,
|
||||||
"compose_actions": false,
|
"compose_actions": false,
|
||||||
"compose_ui": false,
|
|
||||||
"composebox_typeahead": false,
|
"composebox_typeahead": false,
|
||||||
"csrf_token": false,
|
"csrf_token": false,
|
||||||
"current_msg_list": true,
|
"current_msg_list": true,
|
||||||
|
|||||||
@@ -1567,9 +1567,9 @@ test_ui("on_events", () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
compose_ui.insert_syntax_and_focus = () => {
|
compose_ui.__Rewire__("insert_syntax_and_focus", () => {
|
||||||
called = true;
|
called = true;
|
||||||
};
|
});
|
||||||
|
|
||||||
const handler = $("body").get_on_handler("click", ".video_link");
|
const handler = $("body").get_on_handler("click", ".video_link");
|
||||||
$("#compose-textarea").val("");
|
$("#compose-textarea").val("");
|
||||||
@@ -1591,10 +1591,10 @@ test_ui("on_events", () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
compose_ui.insert_syntax_and_focus = (syntax) => {
|
compose_ui.__Rewire__("insert_syntax_and_focus", (syntax) => {
|
||||||
syntax_to_insert = syntax;
|
syntax_to_insert = syntax;
|
||||||
called = true;
|
called = true;
|
||||||
};
|
});
|
||||||
|
|
||||||
const handler = $("body").get_on_handler("click", ".video_link");
|
const handler = $("body").get_on_handler("click", ".video_link");
|
||||||
$("#compose-textarea").val("");
|
$("#compose-textarea").val("");
|
||||||
@@ -1627,10 +1627,10 @@ test_ui("on_events", () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
compose_ui.insert_syntax_and_focus = (syntax) => {
|
compose_ui.__Rewire__("insert_syntax_and_focus", (syntax) => {
|
||||||
syntax_to_insert = syntax;
|
syntax_to_insert = syntax;
|
||||||
called = true;
|
called = true;
|
||||||
};
|
});
|
||||||
|
|
||||||
const handler = $("body").get_on_handler("click", ".video_link");
|
const handler = $("body").get_on_handler("click", ".video_link");
|
||||||
$("#compose-textarea").val("");
|
$("#compose-textarea").val("");
|
||||||
@@ -1672,10 +1672,10 @@ test_ui("on_events", () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
compose_ui.insert_syntax_and_focus = (syntax) => {
|
compose_ui.__Rewire__("insert_syntax_and_focus", (syntax) => {
|
||||||
syntax_to_insert = syntax;
|
syntax_to_insert = syntax;
|
||||||
called = true;
|
called = true;
|
||||||
};
|
});
|
||||||
|
|
||||||
const handler = $("body").get_on_handler("click", ".video_link");
|
const handler = $("body").get_on_handler("click", ".video_link");
|
||||||
$("#compose-textarea").val("");
|
$("#compose-textarea").val("");
|
||||||
|
|||||||
@@ -343,9 +343,9 @@ run_test("quote_and_reply", (override) => {
|
|||||||
|
|
||||||
current_msg_list.selected_id = () => 100;
|
current_msg_list.selected_id = () => 100;
|
||||||
|
|
||||||
compose_ui.insert_syntax_and_focus = (syntax) => {
|
compose_ui.__Rewire__("insert_syntax_and_focus", (syntax) => {
|
||||||
assert.equal(syntax, "[Quoting…]\n");
|
assert.equal(syntax, "[Quoting…]\n");
|
||||||
};
|
});
|
||||||
|
|
||||||
const opts = {
|
const opts = {
|
||||||
reply_type: "personal",
|
reply_type: "personal",
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ const compose = {
|
|||||||
rewiremock("../../static/js/compose").with(compose);
|
rewiremock("../../static/js/compose").with(compose);
|
||||||
|
|
||||||
let autosize_called;
|
let autosize_called;
|
||||||
set_global("compose_ui", {
|
rewiremock("../../static/js/compose_ui").with({
|
||||||
autosize_textarea() {
|
autosize_textarea() {
|
||||||
autosize_called = true;
|
autosize_called = true;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ const {strict: assert} = require("assert");
|
|||||||
|
|
||||||
const jquery = require("jquery");
|
const jquery = require("jquery");
|
||||||
const {JSDOM} = require("jsdom");
|
const {JSDOM} = require("jsdom");
|
||||||
|
const rewiremock = require("rewiremock/node");
|
||||||
|
|
||||||
const {set_global, zrequire} = require("../zjsunit/namespace");
|
const {set_global, zrequire} = require("../zjsunit/namespace");
|
||||||
const {run_test} = require("../zjsunit/test");
|
const {run_test} = require("../zjsunit/test");
|
||||||
@@ -11,7 +12,9 @@ const {run_test} = require("../zjsunit/test");
|
|||||||
set_global("page_params", {
|
set_global("page_params", {
|
||||||
development_environment: true,
|
development_environment: true,
|
||||||
});
|
});
|
||||||
const compose_ui = set_global("compose_ui", {});
|
const compose_ui = {__esModule: true};
|
||||||
|
|
||||||
|
rewiremock("../../static/js/compose_ui").with(compose_ui);
|
||||||
|
|
||||||
const {window} = new JSDOM("<!DOCTYPE html><p>Hello world</p>");
|
const {window} = new JSDOM("<!DOCTYPE html><p>Hello world</p>");
|
||||||
const {DOMParser, document} = window;
|
const {DOMParser, document} = window;
|
||||||
@@ -20,6 +23,8 @@ const $ = set_global("$", jquery(window));
|
|||||||
set_global("DOMParser", DOMParser);
|
set_global("DOMParser", DOMParser);
|
||||||
set_global("document", document);
|
set_global("document", document);
|
||||||
|
|
||||||
|
rewiremock.enable();
|
||||||
|
|
||||||
const copy_and_paste = zrequire("copy_and_paste");
|
const copy_and_paste = zrequire("copy_and_paste");
|
||||||
|
|
||||||
// Super stripped down version of the code in the drag-mock library
|
// Super stripped down version of the code in the drag-mock library
|
||||||
@@ -111,3 +116,4 @@ run_test("paste_handler", () => {
|
|||||||
copy_and_paste.paste_handler(event);
|
copy_and_paste.paste_handler(event);
|
||||||
assert(!insert_syntax_and_focus_called);
|
assert(!insert_syntax_and_focus_called);
|
||||||
});
|
});
|
||||||
|
rewiremock.disable();
|
||||||
|
|||||||
@@ -234,15 +234,15 @@ run_test("upload_files", () => {
|
|||||||
on_click_close_button_callback = callback;
|
on_click_close_button_callback = callback;
|
||||||
};
|
};
|
||||||
let compose_ui_insert_syntax_and_focus_called = false;
|
let compose_ui_insert_syntax_and_focus_called = false;
|
||||||
compose_ui.insert_syntax_and_focus = (syntax, textarea) => {
|
compose_ui.__Rewire__("insert_syntax_and_focus", (syntax, textarea) => {
|
||||||
assert.equal(syntax, "[translated: Uploading budapest.png…]()");
|
assert.equal(syntax, "[translated: Uploading budapest.png…]()");
|
||||||
assert.equal(textarea, $("#compose-textarea"));
|
assert.equal(textarea, $("#compose-textarea"));
|
||||||
compose_ui_insert_syntax_and_focus_called = true;
|
compose_ui_insert_syntax_and_focus_called = true;
|
||||||
};
|
});
|
||||||
let compose_ui_autosize_textarea_called = false;
|
let compose_ui_autosize_textarea_called = false;
|
||||||
compose_ui.autosize_textarea = () => {
|
compose_ui.__Rewire__("autosize_textarea", () => {
|
||||||
compose_ui_autosize_textarea_called = true;
|
compose_ui_autosize_textarea_called = true;
|
||||||
};
|
});
|
||||||
let markdown_preview_hide_button_clicked = false;
|
let markdown_preview_hide_button_clicked = false;
|
||||||
$("#undo_markdown_preview").on("click", () => {
|
$("#undo_markdown_preview").on("click", () => {
|
||||||
markdown_preview_hide_button_clicked = true;
|
markdown_preview_hide_button_clicked = true;
|
||||||
@@ -291,12 +291,12 @@ run_test("upload_files", () => {
|
|||||||
type: "image/png",
|
type: "image/png",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
compose_ui.replace_syntax = (old_syntax, new_syntax, textarea) => {
|
compose_ui.__Rewire__("replace_syntax", (old_syntax, new_syntax, textarea) => {
|
||||||
compose_ui_replace_syntax_called = true;
|
compose_ui_replace_syntax_called = true;
|
||||||
assert.equal(old_syntax, "[translated: Uploading budapest.png…]()");
|
assert.equal(old_syntax, "[translated: Uploading budapest.png…]()");
|
||||||
assert.equal(new_syntax, "");
|
assert.equal(new_syntax, "");
|
||||||
assert.equal(textarea, $("#compose-textarea"));
|
assert.equal(textarea, $("#compose-textarea"));
|
||||||
};
|
});
|
||||||
on_click_close_button_callback();
|
on_click_close_button_callback();
|
||||||
assert(uppy_cancel_all_called);
|
assert(uppy_cancel_all_called);
|
||||||
assert(hide_upload_status_called);
|
assert(hide_upload_status_called);
|
||||||
@@ -513,7 +513,7 @@ run_test("uppy_events", () => {
|
|||||||
compose_actions_start_called = true;
|
compose_actions_start_called = true;
|
||||||
};
|
};
|
||||||
let compose_ui_replace_syntax_called = false;
|
let compose_ui_replace_syntax_called = false;
|
||||||
compose_ui.replace_syntax = (old_syntax, new_syntax, textarea) => {
|
compose_ui.__Rewire__("replace_syntax", (old_syntax, new_syntax, textarea) => {
|
||||||
compose_ui_replace_syntax_called = true;
|
compose_ui_replace_syntax_called = true;
|
||||||
assert.equal(old_syntax, "[translated: Uploading copenhagen.png…]()");
|
assert.equal(old_syntax, "[translated: Uploading copenhagen.png…]()");
|
||||||
assert.equal(
|
assert.equal(
|
||||||
@@ -521,11 +521,11 @@ run_test("uppy_events", () => {
|
|||||||
"[copenhagen.png](https://foo.com/user_uploads/4/cb/rue1c-MlMUjDAUdkRrEM4BTJ/copenhagen.png)",
|
"[copenhagen.png](https://foo.com/user_uploads/4/cb/rue1c-MlMUjDAUdkRrEM4BTJ/copenhagen.png)",
|
||||||
);
|
);
|
||||||
assert.equal(textarea, $("#compose-textarea"));
|
assert.equal(textarea, $("#compose-textarea"));
|
||||||
};
|
});
|
||||||
let compose_ui_autosize_textarea_called = false;
|
let compose_ui_autosize_textarea_called = false;
|
||||||
compose_ui.autosize_textarea = () => {
|
compose_ui.__Rewire__("autosize_textarea", () => {
|
||||||
compose_ui_autosize_textarea_called = true;
|
compose_ui_autosize_textarea_called = true;
|
||||||
};
|
});
|
||||||
on_upload_success_callback(file, response);
|
on_upload_success_callback(file, response);
|
||||||
assert(compose_actions_start_called);
|
assert(compose_actions_start_called);
|
||||||
assert(compose_ui_replace_syntax_called);
|
assert(compose_ui_replace_syntax_called);
|
||||||
@@ -614,12 +614,12 @@ run_test("uppy_events", () => {
|
|||||||
on_info_visible_callback();
|
on_info_visible_callback();
|
||||||
assert(uppy_cancel_all_called);
|
assert(uppy_cancel_all_called);
|
||||||
assert(show_error_message_called);
|
assert(show_error_message_called);
|
||||||
compose_ui.replace_syntax = (old_syntax, new_syntax, textarea) => {
|
compose_ui.__Rewire__("replace_syntax", (old_syntax, new_syntax, textarea) => {
|
||||||
compose_ui_replace_syntax_called = true;
|
compose_ui_replace_syntax_called = true;
|
||||||
assert.equal(old_syntax, "[translated: Uploading copenhagen.png…]()");
|
assert.equal(old_syntax, "[translated: Uploading copenhagen.png…]()");
|
||||||
assert.equal(new_syntax, "");
|
assert.equal(new_syntax, "");
|
||||||
assert.equal(textarea, $("#compose-textarea"));
|
assert.equal(textarea, $("#compose-textarea"));
|
||||||
};
|
});
|
||||||
on_restriction_failed_callback(file, null, null);
|
on_restriction_failed_callback(file, null, null);
|
||||||
assert(compose_ui_replace_syntax_called);
|
assert(compose_ui_replace_syntax_called);
|
||||||
compose_ui_replace_syntax_called = false;
|
compose_ui_replace_syntax_called = false;
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ import "../dropdown_list_widget";
|
|||||||
import "../settings_profile_fields";
|
import "../settings_profile_fields";
|
||||||
import "../settings";
|
import "../settings";
|
||||||
import "../ui_init";
|
import "../ui_init";
|
||||||
import "../compose_ui";
|
|
||||||
import "../panels";
|
import "../panels";
|
||||||
import "../recent_topics";
|
import "../recent_topics";
|
||||||
import "../search_pill_widget";
|
import "../search_pill_widget";
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import * as common from "./common";
|
|||||||
import * as compose_fade from "./compose_fade";
|
import * as compose_fade from "./compose_fade";
|
||||||
import * as compose_pm_pill from "./compose_pm_pill";
|
import * as compose_pm_pill from "./compose_pm_pill";
|
||||||
import * as compose_state from "./compose_state";
|
import * as compose_state from "./compose_state";
|
||||||
|
import * as compose_ui from "./compose_ui";
|
||||||
import * as drafts from "./drafts";
|
import * as drafts from "./drafts";
|
||||||
import * as echo from "./echo";
|
import * as echo from "./echo";
|
||||||
import * as loading from "./loading";
|
import * as loading from "./loading";
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ const compose = require("./compose");
|
|||||||
const compose_fade = require("./compose_fade");
|
const compose_fade = require("./compose_fade");
|
||||||
const compose_pm_pill = require("./compose_pm_pill");
|
const compose_pm_pill = require("./compose_pm_pill");
|
||||||
const compose_state = require("./compose_state");
|
const compose_state = require("./compose_state");
|
||||||
|
const compose_ui = require("./compose_ui");
|
||||||
const drafts = require("./drafts");
|
const drafts = require("./drafts");
|
||||||
const hash_util = require("./hash_util");
|
const hash_util = require("./hash_util");
|
||||||
const message_viewport = require("./message_viewport");
|
const message_viewport = require("./message_viewport");
|
||||||
|
|||||||
@@ -1,17 +1,15 @@
|
|||||||
"use strict";
|
import autosize from "autosize";
|
||||||
|
|
||||||
const autosize = require("autosize");
|
import * as people from "./people";
|
||||||
|
import * as user_status from "./user_status";
|
||||||
|
|
||||||
const people = require("./people");
|
export function autosize_textarea(textarea) {
|
||||||
const user_status = require("./user_status");
|
|
||||||
|
|
||||||
exports.autosize_textarea = function (textarea) {
|
|
||||||
// Since this supports both compose and file upload, one must pass
|
// Since this supports both compose and file upload, one must pass
|
||||||
// in the text area to autosize.
|
// in the text area to autosize.
|
||||||
autosize.update(textarea);
|
autosize.update(textarea);
|
||||||
};
|
}
|
||||||
|
|
||||||
exports.smart_insert = function (textarea, syntax) {
|
export function smart_insert(textarea, syntax) {
|
||||||
function is_space(c) {
|
function is_space(c) {
|
||||||
return c === " " || c === "\t" || c === "\n";
|
return c === " " || c === "\t" || c === "\n";
|
||||||
}
|
}
|
||||||
@@ -54,19 +52,19 @@ exports.smart_insert = function (textarea, syntax) {
|
|||||||
// This should just call exports.autosize_textarea, but it's a bit
|
// This should just call exports.autosize_textarea, but it's a bit
|
||||||
// annoying for the unit tests, so we don't do that.
|
// annoying for the unit tests, so we don't do that.
|
||||||
autosize.update(textarea);
|
autosize.update(textarea);
|
||||||
};
|
}
|
||||||
|
|
||||||
exports.insert_syntax_and_focus = function (syntax, textarea) {
|
export function insert_syntax_and_focus(syntax, textarea) {
|
||||||
// Generic helper for inserting syntax into the main compose box
|
// Generic helper for inserting syntax into the main compose box
|
||||||
// where the cursor was and focusing the area. Mostly a thin
|
// where the cursor was and focusing the area. Mostly a thin
|
||||||
// wrapper around smart_insert.
|
// wrapper around smart_insert.
|
||||||
if (textarea === undefined) {
|
if (textarea === undefined) {
|
||||||
textarea = $("#compose-textarea");
|
textarea = $("#compose-textarea");
|
||||||
}
|
}
|
||||||
exports.smart_insert(textarea, syntax);
|
smart_insert(textarea, syntax);
|
||||||
};
|
}
|
||||||
|
|
||||||
exports.replace_syntax = function (old_syntax, new_syntax, textarea) {
|
export function replace_syntax(old_syntax, new_syntax, textarea) {
|
||||||
// Replaces `old_syntax` with `new_syntax` text in the compose box. Due to
|
// Replaces `old_syntax` with `new_syntax` text in the compose box. Due to
|
||||||
// the way that JavaScript handles string replacements, if `old_syntax` is
|
// the way that JavaScript handles string replacements, if `old_syntax` is
|
||||||
// a string it will only replace the first instance. If `old_syntax` is
|
// a string it will only replace the first instance. If `old_syntax` is
|
||||||
@@ -87,9 +85,9 @@ exports.replace_syntax = function (old_syntax, new_syntax, textarea) {
|
|||||||
new_syntax,
|
new_syntax,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
};
|
}
|
||||||
|
|
||||||
exports.compute_placeholder_text = function (opts) {
|
export function compute_placeholder_text(opts) {
|
||||||
// Computes clear placeholder text for the compose box, depending
|
// Computes clear placeholder text for the compose box, depending
|
||||||
// on what heading values have already been filled out.
|
// on what heading values have already been filled out.
|
||||||
//
|
//
|
||||||
@@ -131,6 +129,4 @@ exports.compute_placeholder_text = function (opts) {
|
|||||||
return i18n.t("Message __- recipient_names__", {recipient_names});
|
return i18n.t("Message __- recipient_names__", {recipient_names});
|
||||||
}
|
}
|
||||||
return i18n.t("Compose your message here");
|
return i18n.t("Compose your message here");
|
||||||
};
|
}
|
||||||
|
|
||||||
window.compose_ui = exports;
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ const channel = require("./channel");
|
|||||||
const compose = require("./compose");
|
const compose = require("./compose");
|
||||||
const compose_pm_pill = require("./compose_pm_pill");
|
const compose_pm_pill = require("./compose_pm_pill");
|
||||||
const compose_state = require("./compose_state");
|
const compose_state = require("./compose_state");
|
||||||
|
const compose_ui = require("./compose_ui");
|
||||||
const message_store = require("./message_store");
|
const message_store = require("./message_store");
|
||||||
const people = require("./people");
|
const people = require("./people");
|
||||||
const rows = require("./rows");
|
const rows = require("./rows");
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import TurndownService from "turndown/lib/turndown.cjs";
|
import TurndownService from "turndown/lib/turndown.cjs";
|
||||||
|
|
||||||
|
import * as compose_ui from "./compose_ui";
|
||||||
import * as rows from "./rows";
|
import * as rows from "./rows";
|
||||||
|
|
||||||
function find_boundary_tr(initial_tr, iterate_row) {
|
function find_boundary_tr(initial_tr, iterate_row) {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import render_draft_table_body from "../templates/draft_table_body.hbs";
|
|||||||
import * as compose from "./compose";
|
import * as compose from "./compose";
|
||||||
import * as compose_fade from "./compose_fade";
|
import * as compose_fade from "./compose_fade";
|
||||||
import * as compose_state from "./compose_state";
|
import * as compose_state from "./compose_state";
|
||||||
|
import * as compose_ui from "./compose_ui";
|
||||||
import * as hashchange from "./hashchange";
|
import * as hashchange from "./hashchange";
|
||||||
import {localstorage} from "./localstorage";
|
import {localstorage} from "./localstorage";
|
||||||
import * as markdown from "./markdown";
|
import * as markdown from "./markdown";
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import render_emoji_popover_content from "../templates/emoji_popover_content.hbs
|
|||||||
import render_emoji_popover_search_results from "../templates/emoji_popover_search_results.hbs";
|
import render_emoji_popover_search_results from "../templates/emoji_popover_search_results.hbs";
|
||||||
import render_emoji_showcase from "../templates/emoji_showcase.hbs";
|
import render_emoji_showcase from "../templates/emoji_showcase.hbs";
|
||||||
|
|
||||||
|
import * as compose_ui from "./compose_ui";
|
||||||
import * as message_store from "./message_store";
|
import * as message_store from "./message_store";
|
||||||
import * as popovers from "./popovers";
|
import * as popovers from "./popovers";
|
||||||
import * as reactions from "./reactions";
|
import * as reactions from "./reactions";
|
||||||
|
|||||||
1
static/js/global.d.ts
vendored
1
static/js/global.d.ts
vendored
@@ -6,7 +6,6 @@
|
|||||||
declare let blueslip: any;
|
declare let blueslip: any;
|
||||||
declare let compose_actions: any;
|
declare let compose_actions: any;
|
||||||
declare let composebox_typeahead: any;
|
declare let composebox_typeahead: any;
|
||||||
declare let compose_ui: any;
|
|
||||||
declare let csrf_token: any;
|
declare let csrf_token: any;
|
||||||
declare let current_msg_list: any;
|
declare let current_msg_list: any;
|
||||||
declare let emoji: any;
|
declare let emoji: any;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import render_user_profile_modal from "../templates/user_profile_modal.hbs";
|
|||||||
|
|
||||||
import * as buddy_data from "./buddy_data";
|
import * as buddy_data from "./buddy_data";
|
||||||
import * as compose_state from "./compose_state";
|
import * as compose_state from "./compose_state";
|
||||||
|
import * as compose_ui from "./compose_ui";
|
||||||
import * as condense from "./condense";
|
import * as condense from "./condense";
|
||||||
import * as emoji_picker from "./emoji_picker";
|
import * as emoji_picker from "./emoji_picker";
|
||||||
import * as feature_flags from "./feature_flags";
|
import * as feature_flags from "./feature_flags";
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import XHRUpload from "@uppy/xhr-upload";
|
|||||||
|
|
||||||
import * as compose from "./compose";
|
import * as compose from "./compose";
|
||||||
import * as compose_state from "./compose_state";
|
import * as compose_state from "./compose_state";
|
||||||
|
import * as compose_ui from "./compose_ui";
|
||||||
|
|
||||||
export function make_upload_absolute(uri) {
|
export function make_upload_absolute(uri) {
|
||||||
if (uri.startsWith(compose.uploads_path)) {
|
if (uri.startsWith(compose.uploads_path)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user