Files
zulip/static/js/user_status_ui.js
Riken Shah b7b18cdfd3 emoji_picker: Update architecture to support status emoji.
This is a prep commit to add the status emoji feature.

We update the templates associated with the emoji
picker to add class `status_emoji` to `emoji` in the
popover.  So we can later add the events when the user
selects the emoji.

We also update the functions in `emoji_picker.js` to
support opening emoji picker popover in the 'set_status_
overlay`.

We also increase the `z-index` of the `popover-flex`
class (This class is only added to popover-emoji content
if the view is mobile), so in the mobile view the emoji
popover doesn't go behind the '#set_user_status_modal'.
2021-07-23 13:03:13 -07:00

121 lines
3.4 KiB
JavaScript

import $ from "jquery";
import render_set_status_overlay from "../templates/set_status_overlay.hbs";
import * as overlays from "./overlays";
import * as people from "./people";
import * as user_status from "./user_status";
export function input_field() {
return $("#set_user_status_modal input.user_status");
}
export function submit_button() {
return $("#set_user_status_modal .set_user_status");
}
export function open_user_status_modal() {
const rendered_set_status_overlay = render_set_status_overlay();
$(".app").append(rendered_set_status_overlay);
overlays.open_modal("#set_user_status_modal", {autoremove: true});
const user_id = people.my_current_user_id();
const old_status_text = user_status.get_status_text(user_id);
const field = input_field();
field.val(old_status_text);
field.trigger("select");
field.trigger("focus");
toggle_clear_message_button();
const button = submit_button();
button.prop("disabled", true);
}
export function close_user_status_modal() {
overlays.close_modal("#set_user_status_modal");
}
export function submit_new_status() {
const user_id = people.my_current_user_id();
let old_status_text = user_status.get_status_text(user_id) || "";
old_status_text = old_status_text.trim();
const new_status_text = input_field().val().trim();
if (old_status_text === new_status_text) {
close_user_status_modal();
return;
}
user_status.server_update({
status_text: new_status_text,
success() {
close_user_status_modal();
},
});
}
export function update_button() {
const user_id = people.my_current_user_id();
let old_status_text = user_status.get_status_text(user_id) || "";
old_status_text = old_status_text.trim();
const new_status_text = input_field().val().trim();
const button = submit_button();
if (old_status_text === new_status_text) {
button.prop("disabled", true);
} else {
button.prop("disabled", false);
}
}
export function toggle_clear_message_button() {
if (input_field().val() !== "") {
$("#clear_status_message_button").prop("disabled", false);
} else {
$("#clear_status_message_button").prop("disabled", true);
}
}
export function clear_message() {
const field = input_field();
field.val("");
$("#clear_status_message_button").prop("disabled", true);
}
export function user_status_picker_open() {
return $("#set_user_status_modal").length !== 0;
}
export function initialize() {
$("body").on("click", ".user-status-value", (event) => {
event.stopPropagation();
const user_status_value = $(event.currentTarget).text();
$("input.user_status").val(user_status_value);
toggle_clear_message_button();
update_button();
});
$("body").on("click", "#set_user_status_modal .set_user_status", () => {
submit_new_status();
});
$("body").on("keypress", "#set_user_status_modal .user_status", (event) => {
if (event.key === "Enter") {
event.preventDefault();
submit_new_status();
}
});
$("body").on("keyup", "#set_user_status_modal input.user_status", () => {
update_button();
toggle_clear_message_button();
});
$("body").on("click", "#clear_status_message_button", () => {
clear_message();
update_button();
});
}