mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 21:13:36 +00:00
ES and TypeScript modules are strict by default and don’t need this directive. ESLint will remind us to add it to new CommonJS files and remove it from ES and TypeScript modules. Signed-off-by: Anders Kaseorg <anders@zulip.com>
185 lines
6.2 KiB
JavaScript
185 lines
6.2 KiB
JavaScript
"use strict";
|
|
|
|
const emojisets = require("./emojisets.js");
|
|
const settings_config = require("./settings_config");
|
|
|
|
const meta = {
|
|
loaded: false,
|
|
};
|
|
|
|
function change_display_setting(data, status_element, success_msg, sticky) {
|
|
const $status_el = $(status_element);
|
|
const status_is_sticky = $status_el.data("is_sticky");
|
|
const display_message = status_is_sticky ? $status_el.data("sticky_msg") : success_msg;
|
|
const opts = {
|
|
success_msg: display_message,
|
|
sticky: status_is_sticky || sticky,
|
|
};
|
|
|
|
if (sticky) {
|
|
$status_el.data("is_sticky", true);
|
|
$status_el.data("sticky_msg", success_msg);
|
|
}
|
|
settings_ui.do_settings_change(
|
|
channel.patch,
|
|
"/json/settings/display",
|
|
data,
|
|
status_element,
|
|
opts,
|
|
);
|
|
}
|
|
|
|
exports.set_up = function () {
|
|
meta.loaded = true;
|
|
$("#display-settings-status").hide();
|
|
|
|
$("#user_timezone").val(page_params.timezone);
|
|
|
|
$("#demote_inactive_streams").val(page_params.demote_inactive_streams);
|
|
|
|
$("#color_scheme").val(page_params.color_scheme);
|
|
|
|
$("#twenty_four_hour_time").val(JSON.stringify(page_params.twenty_four_hour_time));
|
|
|
|
$(".emojiset_choice[value=" + page_params.emojiset + "]").prop("checked", true);
|
|
|
|
$("#default_language_modal [data-dismiss]").on("click", () => {
|
|
overlays.close_modal("#default_language_modal");
|
|
});
|
|
|
|
const all_display_settings = settings_config.get_all_display_settings();
|
|
for (const setting of all_display_settings.settings.user_display_settings) {
|
|
$("#" + setting).on("change", function () {
|
|
const data = {};
|
|
data[setting] = JSON.stringify($(this).prop("checked"));
|
|
|
|
if (["left_side_userlist"].includes(setting)) {
|
|
change_display_setting(
|
|
data,
|
|
"#display-settings-status",
|
|
i18n.t(
|
|
"Saved. Please <a class='reload_link'>reload</a> for the change to take effect.",
|
|
),
|
|
true,
|
|
);
|
|
} else {
|
|
change_display_setting(data, "#display-settings-status");
|
|
}
|
|
});
|
|
}
|
|
|
|
$("#default_language_modal .language").on("click", (e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
overlays.close_modal("#default_language_modal");
|
|
|
|
const $link = $(e.target).closest("a[data-code]");
|
|
const setting_value = $link.attr("data-code");
|
|
const data = {default_language: JSON.stringify(setting_value)};
|
|
|
|
const new_language = $link.attr("data-name");
|
|
$("#default_language_name").text(new_language);
|
|
|
|
change_display_setting(
|
|
data,
|
|
"#language-settings-status",
|
|
i18n.t(
|
|
"Saved. Please <a class='reload_link'>reload</a> for the change to take effect.",
|
|
),
|
|
true,
|
|
);
|
|
});
|
|
|
|
$("#default_language").on("click", (e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
overlays.open_modal("#default_language_modal");
|
|
});
|
|
|
|
$("#demote_inactive_streams").on("change", function () {
|
|
const data = {demote_inactive_streams: this.value};
|
|
change_display_setting(data, "#display-settings-status");
|
|
});
|
|
|
|
$("#color_scheme").on("change", function () {
|
|
const data = {color_scheme: this.value};
|
|
change_display_setting(data, "#display-settings-status");
|
|
});
|
|
|
|
$("body").on("click", ".reload_link", () => {
|
|
window.location.reload();
|
|
});
|
|
|
|
$("#twenty_four_hour_time").on("change", function () {
|
|
const data = {twenty_four_hour_time: this.value};
|
|
change_display_setting(data, "#time-settings-status");
|
|
});
|
|
|
|
$("#user_timezone").on("change", function () {
|
|
const data = {timezone: JSON.stringify(this.value)};
|
|
change_display_setting(data, "#time-settings-status");
|
|
});
|
|
$(".emojiset_choice").on("click", function () {
|
|
const data = {emojiset: JSON.stringify($(this).val())};
|
|
const current_emojiset = JSON.stringify(page_params.emojiset);
|
|
if (current_emojiset === data.emojiset) {
|
|
return;
|
|
}
|
|
const spinner = $("#emoji-settings-status").expectOne();
|
|
loading.make_indicator(spinner, {text: settings_ui.strings.saving});
|
|
|
|
channel.patch({
|
|
url: "/json/settings/display",
|
|
data,
|
|
success() {},
|
|
error(xhr) {
|
|
ui_report.error(
|
|
settings_ui.strings.failure,
|
|
xhr,
|
|
$("#emoji-settings-status").expectOne(),
|
|
);
|
|
},
|
|
});
|
|
});
|
|
|
|
$("#translate_emoticons").on("change", function () {
|
|
const data = {translate_emoticons: JSON.stringify(this.checked)};
|
|
change_display_setting(data, "#emoji-settings-status");
|
|
});
|
|
};
|
|
|
|
exports.report_emojiset_change = async function () {
|
|
// TODO: Clean up how this works so we can use
|
|
// change_display_setting. The challenge is that we don't want to
|
|
// report success before the server_events request returns that
|
|
// causes the actual sprite sheet to change. The current
|
|
// implementation is wrong, though, in that it displays the UI
|
|
// update in all active browser windows.
|
|
|
|
await emojisets.select(page_params.emojiset);
|
|
|
|
if ($("#emoji-settings-status").length) {
|
|
loading.destroy_indicator($("#emojiset_spinner"));
|
|
$("#emojiset_select").val(page_params.emojiset);
|
|
ui_report.success(
|
|
i18n.t("Emojiset changed successfully!"),
|
|
$("#emoji-settings-status").expectOne(),
|
|
);
|
|
const spinner = $("#emoji-settings-status").expectOne();
|
|
settings_ui.display_checkmark(spinner);
|
|
}
|
|
};
|
|
|
|
exports.update_page = function () {
|
|
$("#left_side_userlist").prop("checked", page_params.left_side_userlist);
|
|
$("#default_language_name").text(page_params.default_language_name);
|
|
$("#translate_emoticons").prop("checked", page_params.translate_emoticons);
|
|
$("#twenty_four_hour_time").val(JSON.stringify(page_params.twenty_four_hour_time));
|
|
$("#color_scheme").val(JSON.stringify(page_params.color_scheme));
|
|
|
|
// TODO: Set emojiset selector here.
|
|
// Longer term, we'll want to automate this function
|
|
};
|
|
|
|
window.settings_display = exports;
|