zulip/static/js/compose_state.js

60 lines
1.7 KiB
JavaScript

"use strict";
let message_type = false; // 'stream', 'private', or false-y
exports.set_message_type = function (msg_type) {
message_type = msg_type;
};
exports.get_message_type = function () {
return message_type;
};
exports.composing = function () {
// This is very similar to get_message_type(), but it returns
// a boolean.
return Boolean(message_type);
};
exports.focus_in_empty_compose = function () {
return (
exports.composing() &&
exports.message_content() === "" &&
$("#compose-textarea").is(":focus")
);
};
function get_or_set(fieldname, keep_leading_whitespace) {
// 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 oldval = elem.val();
if (newval !== undefined) {
elem.val(newval);
}
return keep_leading_whitespace ? oldval.trimEnd() : oldval.trim();
};
}
// 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");
// 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);
exports.private_message_recipient = function (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;