2021-02-28 01:00:36 +01:00
|
|
|
import * as stream_color from "./stream_color";
|
|
|
|
import * as stream_data from "./stream_data";
|
2021-02-28 00:53:05 +01:00
|
|
|
|
2017-03-18 21:35:35 +01:00
|
|
|
// Add functions to this that have no non-trivial
|
|
|
|
// dependencies other than jQuery.
|
|
|
|
|
2021-02-28 01:00:36 +01:00
|
|
|
export function change_tab_to(tabname) {
|
2021-02-03 23:23:32 +01:00
|
|
|
$(`#gear-menu a[href="${CSS.escape(tabname)}"]`).tab("show");
|
2021-02-28 01:00:36 +01:00
|
|
|
}
|
2017-03-18 21:35:35 +01:00
|
|
|
|
2020-03-27 01:32:21 +01:00
|
|
|
// https://stackoverflow.com/questions/4233265/contenteditable-set-caret-at-the-end-of-the-text-cross-browser
|
2021-02-28 01:00:36 +01:00
|
|
|
export function place_caret_at_end(el) {
|
2020-07-22 02:58:29 +02:00
|
|
|
el.focus();
|
2017-11-13 21:38:00 +01:00
|
|
|
|
2020-07-15 00:34:28 +02:00
|
|
|
if (typeof window.getSelection !== "undefined" && typeof document.createRange !== "undefined") {
|
2019-11-02 00:06:25 +01:00
|
|
|
const range = document.createRange();
|
2017-11-13 21:38:00 +01:00
|
|
|
range.selectNodeContents(el);
|
|
|
|
range.collapse(false);
|
2019-11-02 00:06:25 +01:00
|
|
|
const sel = window.getSelection();
|
2017-11-13 21:38:00 +01:00
|
|
|
sel.removeAllRanges();
|
|
|
|
sel.addRange(range);
|
|
|
|
} else if (typeof document.body.createTextRange !== "undefined") {
|
2019-11-02 00:06:25 +01:00
|
|
|
const textRange = document.body.createTextRange();
|
2017-11-13 21:38:00 +01:00
|
|
|
textRange.moveToElementText(el);
|
|
|
|
textRange.collapse(false);
|
|
|
|
textRange.select();
|
|
|
|
}
|
2021-02-28 01:00:36 +01:00
|
|
|
}
|
2017-11-13 21:38:00 +01:00
|
|
|
|
2021-02-28 01:00:36 +01:00
|
|
|
export function blur_active_element() {
|
2017-03-18 21:35:35 +01:00
|
|
|
// this blurs anything that may perhaps be actively focused on.
|
|
|
|
document.activeElement.blur();
|
2021-02-28 01:00:36 +01:00
|
|
|
}
|
2017-03-18 21:35:35 +01:00
|
|
|
|
2020-05-12 10:50:50 +02:00
|
|
|
function update_lock_icon_for_stream(stream_name) {
|
|
|
|
const icon = $("#compose-lock-icon");
|
|
|
|
const streamfield = $("#stream_message_recipient_stream");
|
|
|
|
if (stream_data.get_invite_only(stream_name)) {
|
|
|
|
icon.show();
|
|
|
|
streamfield.addClass("lock-padding");
|
|
|
|
} else {
|
|
|
|
icon.hide();
|
|
|
|
streamfield.removeClass("lock-padding");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// In an attempt to decrease mixing, set stream bar
|
|
|
|
// color look like the stream being used.
|
|
|
|
// (In particular, if there's a color associated with it,
|
|
|
|
// have that color be reflected here too.)
|
2021-02-28 01:00:36 +01:00
|
|
|
export function decorate_stream_bar(stream_name, element, is_compose) {
|
2020-05-12 11:02:13 +02:00
|
|
|
if (stream_name === undefined) {
|
2020-09-24 07:50:36 +02:00
|
|
|
return;
|
2020-05-12 11:02:13 +02:00
|
|
|
}
|
2020-05-12 10:50:50 +02:00
|
|
|
const color = stream_data.get_color(stream_name);
|
2020-05-12 11:02:13 +02:00
|
|
|
if (is_compose) {
|
|
|
|
update_lock_icon_for_stream(stream_name);
|
|
|
|
}
|
2020-07-15 00:34:28 +02:00
|
|
|
element
|
|
|
|
.css("background-color", color)
|
2020-05-12 10:50:50 +02:00
|
|
|
.removeClass(stream_color.color_classes)
|
|
|
|
.addClass(stream_color.get_color_class(color));
|
2021-02-28 01:00:36 +01:00
|
|
|
}
|