js: Convert static/js/compose_state.js to ES6 module.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2021-02-27 15:50:52 -08:00
committed by Tim Abbott
parent f499c4a858
commit 1547494e25
24 changed files with 63 additions and 51 deletions

View File

@@ -138,7 +138,6 @@
"color_data": false,
"compose": false,
"compose_actions": false,
"compose_state": false,
"compose_ui": false,
"composebox_typeahead": false,
"condense": false,

View File

@@ -39,7 +39,7 @@ const _keydown_util = {
},
};
const compose_state = {};
const compose_state = {__esModule: true};
const _scroll_util = {
__esModule: true,
@@ -70,7 +70,7 @@ set_global("padded_widget", {
update_padding: () => {},
});
rewiremock("../../static/js/channel").with(channel);
set_global("compose_state", compose_state);
rewiremock("../../static/js/compose_state").with(compose_state);
set_global("document", _document);
rewiremock("../../static/js/keydown_util").with(_keydown_util);
rewiremock("../../static/js/pm_list").with(_pm_list);

View File

@@ -741,7 +741,7 @@ test_ui("send_message", () => {
compose_state.topic("");
compose_state.set_message_type("private");
page_params.user_id = 101;
compose_state.private_message_recipient = () => "alice@example.com";
compose_state.__Rewire__("private_message_recipient", () => "alice@example.com");
const server_message_id = 127;
local_message.insert_message = (message) => {
@@ -928,7 +928,7 @@ test_ui("finish", () => {
$("#markdown_preview").hide();
$("#compose-textarea").val("foobarfoobar");
compose_state.set_message_type("private");
compose_state.private_message_recipient = () => "bob@example.com";
compose_state.__Rewire__("private_message_recipient", () => "bob@example.com");
let compose_finished_event_checked = false;
$(document).on("compose_finished.zulip", () => {
@@ -1841,7 +1841,7 @@ test_ui("create_message_object", () => {
$("#stream_message_recipient_topic").val("lunch");
$("#compose-textarea").val("burrito");
compose_state.get_message_type = () => "stream";
compose_state.__Rewire__("get_message_type", () => "stream");
let message = compose.create_message_object();
assert.equal(message.to, sub.stream_id);
@@ -1856,8 +1856,11 @@ test_ui("create_message_object", () => {
assert.equal(message.topic, "lunch");
assert.equal(message.content, "burrito");
compose_state.get_message_type = () => "private";
compose_state.private_message_recipient = () => "alice@example.com, bob@example.com";
compose_state.__Rewire__("get_message_type", () => "private");
compose_state.__Rewire__(
"private_message_recipient",
() => "alice@example.com, bob@example.com",
);
message = compose.create_message_object();
assert.deepEqual(message.to, [alice.user_id, bob.user_id]);

View File

@@ -85,7 +85,9 @@ const respond_to_message = compose_actions.respond_to_message;
const reply_with_mention = compose_actions.reply_with_mention;
const quote_and_reply = compose_actions.quote_and_reply;
compose_state.private_message_recipient = (function () {
compose_state.__Rewire__(
"private_message_recipient",
(function () {
let recipient;
return function (arg) {
@@ -96,7 +98,8 @@ compose_state.private_message_recipient = (function () {
recipient = arg;
return undefined;
};
})();
})(),
);
function stub_selected_message(msg) {
current_msg_list.selected_message = () => msg;
@@ -416,12 +419,12 @@ run_test("focus_in_empty_compose", () => {
return $("#compose-textarea").is_focused;
};
compose_state.composing = () => true;
compose_state.__Rewire__("composing", () => true);
$("#compose-textarea").val("");
$("#compose-textarea").trigger("focus");
assert(compose_state.focus_in_empty_compose());
compose_state.composing = () => false;
compose_state.__Rewire__("composing", () => false);
assert(!compose_state.focus_in_empty_compose());
$("#compose-textarea").val("foo");

View File

@@ -1518,7 +1518,7 @@ run_test("typeahead_results", () => {
run_test("message people", () => {
let results;
compose_state.stream_name = () => undefined;
compose_state.__Rewire__("stream_name", () => undefined);
ct.max_num_items = 2;
/*

View File

@@ -27,7 +27,8 @@ const localStorage = set_global("localStorage", {
},
});
set_global("compose", {});
const compose_state = set_global("compose_state", {});
const compose_state = {__esModule: true};
rewiremock("../../static/js/compose_state").with(compose_state);
set_global("stream_data", {
get_color() {
return "#FFFFFF";

View File

@@ -25,7 +25,6 @@ document.location.protocol = "https:";
document.location.host = "foo.com";
const compose_ui = zrequire("compose_ui");
zrequire("compose_state");
zrequire("compose");
const compose_actions = zrequire("compose_actions");

View File

@@ -24,7 +24,6 @@ import "../widgetize";
import "../message_list";
import "../narrow";
import "../reload";
import "../compose_state";
import "../compose_actions";
import "../transmit";
import "../compose";

View File

@@ -9,6 +9,7 @@ const render_buddy_list_tooltip = require("../templates/buddy_list_tooltip.hbs")
const render_buddy_list_tooltip_content = require("../templates/buddy_list_tooltip_content.hbs");
const channel = require("./channel");
const compose_state = require("./compose_state");
const message_edit_history = require("./message_edit_history");
const muting_ui = require("./muting_ui");
const rows = require("./rows");

View File

@@ -13,6 +13,7 @@ const channel = require("./channel");
const common = require("./common");
const compose_fade = require("./compose_fade");
const compose_pm_pill = require("./compose_pm_pill");
const compose_state = require("./compose_state");
const drafts = require("./drafts");
const echo = require("./echo");
const loading = require("./loading");

View File

@@ -8,6 +8,7 @@ const channel = require("./channel");
const common = require("./common");
const compose_fade = require("./compose_fade");
const compose_pm_pill = require("./compose_pm_pill");
const compose_state = require("./compose_state");
const drafts = require("./drafts");
const message_viewport = require("./message_viewport");
const narrow_state = require("./narrow_state");

View File

@@ -1,5 +1,6 @@
import _ from "lodash";
import * as compose_state from "./compose_state";
import * as message_viewport from "./message_viewport";
import * as people from "./people";
import * as rows from "./rows";

View File

@@ -1,22 +1,20 @@
"use strict";
const compose_pm_pill = require("./compose_pm_pill");
import * as compose_pm_pill from "./compose_pm_pill";
let message_type = false; // 'stream', 'private', or false-y
exports.set_message_type = function (msg_type) {
export function set_message_type(msg_type) {
message_type = msg_type;
};
}
exports.get_message_type = function () {
export function get_message_type() {
return message_type;
};
}
exports.composing = function () {
export function composing() {
// This is very similar to get_message_type(), but it returns
// a boolean.
return Boolean(message_type);
};
}
function get_or_set(fieldname, keep_leading_whitespace) {
// We can't hoist the assignment of 'elem' out of this lambda,
@@ -33,30 +31,26 @@ function get_or_set(fieldname, keep_leading_whitespace) {
}
// TODO: Break out setters and getter into their own functions.
exports.stream_name = get_or_set("stream_message_recipient_stream");
exports.topic = get_or_set("stream_message_recipient_topic");
export const stream_name = get_or_set("stream_message_recipient_stream");
export const topic = get_or_set("stream_message_recipient_topic");
// We can't trim leading whitespace in `compose_textarea` because
// of the indented syntax for multi-line code blocks.
exports.message_content = get_or_set("compose-textarea", true);
export const message_content = get_or_set("compose-textarea", true);
exports.focus_in_empty_compose = function () {
return (
exports.composing() &&
exports.message_content() === "" &&
$("#compose-textarea").is(":focus")
);
};
export function focus_in_empty_compose() {
return composing() && message_content() === "" && $("#compose-textarea").is(":focus");
}
exports.private_message_recipient = function (value) {
export function private_message_recipient(value) {
if (typeof value === "string") {
compose_pm_pill.set_from_emails(value);
return undefined;
}
return compose_pm_pill.get_emails();
};
}
exports.has_message_content = function () {
return exports.message_content() !== "";
};
window.compose_state = exports;
export function has_message_content() {
return message_content() !== "";
}

View File

@@ -11,6 +11,7 @@ const typeahead = require("../shared/js/typeahead");
const channel = require("./channel");
const compose_pm_pill = require("./compose_pm_pill");
const compose_state = require("./compose_state");
const people = require("./people");
const rows = require("./rows");
const settings_data = require("./settings_data");

View File

@@ -4,6 +4,7 @@ import Handlebars from "handlebars/runtime";
import render_draft_table_body from "../templates/draft_table_body.hbs";
import * as compose_fade from "./compose_fade";
import * as compose_state from "./compose_state";
import {localstorage} from "./localstorage";
import * as markdown from "./markdown";
import * as people from "./people";

View File

@@ -17,7 +17,6 @@ declare let color_data: any;
declare let compose: any;
declare let compose_actions: any;
declare let composebox_typeahead: any;
declare let compose_state: any;
declare let compose_ui: any;
declare let condense: any;
declare let confirm_dialog: any;

View File

@@ -3,6 +3,7 @@
const emoji = require("../shared/js/emoji");
const common = require("./common");
const compose_state = require("./compose_state");
const copy_and_paste = require("./copy_and_paste");
const drafts = require("./drafts");
const feedback_widget = require("./feedback_widget");

View File

@@ -3,6 +3,7 @@
const alert_words = require("./alert_words");
const channel = require("./channel");
const compose_fade = require("./compose_fade");
const compose_state = require("./compose_state");
const huddle_data = require("./huddle_data");
const message_edit_history = require("./message_edit_history");
const narrow_state = require("./narrow_state");

View File

@@ -2,6 +2,7 @@
const channel = require("./channel");
const compose_fade = require("./compose_fade");
const compose_state = require("./compose_state");
const {Filter} = require("./filter");
const {MessageListData} = require("./message_list_data");
const narrow_state = require("./narrow_state");

View File

@@ -16,6 +16,7 @@ const render_user_info_popover_content = require("../templates/user_info_popover
const render_user_info_popover_title = require("../templates/user_info_popover_title.hbs");
const render_user_profile_modal = require("../templates/user_profile_modal.hbs");
const compose_state = require("./compose_state");
const feature_flags = require("./feature_flags");
const message_edit_history = require("./message_edit_history");
const message_viewport = require("./message_viewport");

View File

@@ -1,3 +1,4 @@
import * as compose_state from "./compose_state";
import {localstorage} from "./localstorage";
import * as narrow_state from "./narrow_state";
import * as reload_state from "./reload_state";

View File

@@ -9,6 +9,7 @@ const render_subscriptions = require("../templates/subscriptions.hbs");
const channel = require("./channel");
const components = require("./components");
const compose_state = require("./compose_state");
const loading = require("./loading");
const message_live_update = require("./message_live_update");
const people = require("./people");

View File

@@ -2,6 +2,7 @@ import * as typing_status from "../shared/js/typing_status";
import * as channel from "./channel";
import * as compose_pm_pill from "./compose_pm_pill";
import * as compose_state from "./compose_state";
import * as people from "./people";
// This module handles the outbound side of typing indicators.

View File

@@ -4,6 +4,8 @@ const Uppy = require("@uppy/core");
const ProgressBar = require("@uppy/progress-bar");
const XHRUpload = require("@uppy/xhr-upload");
const compose_state = require("./compose_state");
exports.make_upload_absolute = function (uri) {
if (uri.startsWith(compose.uploads_path)) {
// Rewrite the URI to a usable link