mirror of https://github.com/zulip/zulip.git
114 lines
3.6 KiB
JavaScript
114 lines
3.6 KiB
JavaScript
import $ from "jquery";
|
|
|
|
import render_alert_word_settings_item from "../templates/settings/alert_word_settings_item.hbs";
|
|
|
|
import * as alert_words from "./alert_words";
|
|
import * as channel from "./channel";
|
|
import {$t} from "./i18n";
|
|
|
|
export function render_alert_words_ui() {
|
|
const words = alert_words.get_word_list();
|
|
words.sort();
|
|
const word_list = $("#alert_words_list");
|
|
|
|
word_list.find(".alert-word-item").remove();
|
|
|
|
for (const alert_word of words) {
|
|
const rendered_alert_word = render_alert_word_settings_item({
|
|
word: alert_word,
|
|
});
|
|
word_list.append(rendered_alert_word);
|
|
}
|
|
|
|
// Focus new alert word name text box.
|
|
$("#create_alert_word_name").trigger("focus");
|
|
}
|
|
|
|
function update_alert_word_status(status_text, is_error) {
|
|
const alert_word_status = $("#alert_word_status");
|
|
if (is_error) {
|
|
alert_word_status.removeClass("alert-success").addClass("alert-danger");
|
|
} else {
|
|
alert_word_status.removeClass("alert-danger").addClass("alert-success");
|
|
}
|
|
alert_word_status.find(".alert_word_status_text").text(status_text);
|
|
alert_word_status.show();
|
|
}
|
|
|
|
function add_alert_word(alert_word) {
|
|
alert_word = alert_word.trim();
|
|
if (alert_word === "") {
|
|
update_alert_word_status($t({defaultMessage: "Alert word can't be empty!"}), true);
|
|
return;
|
|
} else if (alert_words.has_alert_word(alert_word)) {
|
|
update_alert_word_status($t({defaultMessage: "Alert word already exists!"}), true);
|
|
return;
|
|
}
|
|
|
|
const words_to_be_added = [alert_word];
|
|
|
|
channel.post({
|
|
url: "/json/users/me/alert_words",
|
|
data: {alert_words: JSON.stringify(words_to_be_added)},
|
|
success() {
|
|
const message = $t(
|
|
{defaultMessage: 'Alert word "{word}" added successfully!'},
|
|
{word: words_to_be_added[0]},
|
|
);
|
|
update_alert_word_status(message, false);
|
|
$("#create_alert_word_name").val("");
|
|
},
|
|
error() {
|
|
update_alert_word_status($t({defaultMessage: "Error adding alert word!"}), true);
|
|
},
|
|
});
|
|
}
|
|
|
|
function remove_alert_word(alert_word) {
|
|
const words_to_be_removed = [alert_word];
|
|
channel.del({
|
|
url: "/json/users/me/alert_words",
|
|
data: {alert_words: JSON.stringify(words_to_be_removed)},
|
|
success() {
|
|
update_alert_word_status(
|
|
$t({defaultMessage: "Alert word removed successfully!"}),
|
|
false,
|
|
);
|
|
},
|
|
error() {
|
|
update_alert_word_status($t({defaultMessage: "Error removing alert word!"}), true);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function set_up_alert_words() {
|
|
// The settings page must be rendered before this function gets called.
|
|
|
|
render_alert_words_ui();
|
|
|
|
$("#create_alert_word_form").on("click", "#create_alert_word_button", () => {
|
|
const word = $("#create_alert_word_name").val();
|
|
add_alert_word(word);
|
|
});
|
|
|
|
$("#alert_words_list").on("click", ".remove-alert-word", (event) => {
|
|
const word = $(event.currentTarget).parents("tr").find(".value").text().trim();
|
|
remove_alert_word(word);
|
|
});
|
|
|
|
$("#create_alert_word_form").on("keypress", "#create_alert_word_name", (event) => {
|
|
// Handle Enter as "add".
|
|
if (event.key === "Enter") {
|
|
event.preventDefault();
|
|
const word = $(event.target).val();
|
|
add_alert_word(word);
|
|
}
|
|
});
|
|
|
|
$("#alert-word-settings").on("click", ".close-alert-word-status", (event) => {
|
|
event.preventDefault();
|
|
const alert = $(event.currentTarget).parents(".alert");
|
|
alert.hide();
|
|
});
|
|
}
|