Files
zulip/static/js/compose_ui.js
Shubham Dhama bfcfe84bdd compose: Append space when text added at the end of textarea.
This appends a space when text is inserted at the end of a message
using `compose_ui.insert_syntax_and_focus`.  This is definitely what
users expect when using this feature.

Fixes: #8569.
2018-03-04 13:16:17 -08:00

56 lines
1.5 KiB
JavaScript

var compose_ui = (function () {
var exports = {};
exports.autosize_textarea = function () {
$("#compose-textarea").trigger("autosize.resize");
};
exports.smart_insert = function (textarea, syntax) {
function is_space(c) {
return (c === ' ') || (c === '\t') || (c === '\n');
}
var pos = textarea.caret();
var before_str = textarea.val().slice(0, pos);
var after_str = textarea.val().slice(pos);
if (pos > 0) {
if (!is_space(before_str.slice(-1))) {
syntax = ' ' + syntax;
}
}
if (!(after_str.length > 0 && is_space(after_str[0]))) {
syntax += ' ';
}
textarea.focus();
// We prefer to use insertText, which supports things like undo better
// for rich-text editing features like inserting links. But we fall
// back to textarea.caret if the browser doesn't support insertText.
if (!document.execCommand("insertText", false, syntax)) {
textarea.caret(syntax);
}
// This should just call exports.autosize_textarea, but it's a bit
// annoying for the unit tests, so we don't do that.
textarea.trigger("autosize.resize");
};
exports.insert_syntax_and_focus = function (syntax) {
// Generic helper for inserting syntax into the main compose box
// where the cursor was and focusing the area. Mostly a thin
// wrapper around smart_insert.
var textarea = $('#compose-textarea');
exports.smart_insert(textarea, syntax);
};
return exports;
}());
if (typeof module !== 'undefined') {
module.exports = compose_ui;
}