mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
We rename class of notification settings except checkboxes by prefixing them with 'setting_' for clarity. We do not change class of checkboxes because settings_checkbox is used by other templates also and if we only change class of those using notification_settings_checkboxes then live update code will break and will need to add separate condition for differentiating between which partial template is used.
150 lines
5.4 KiB
JavaScript
150 lines
5.4 KiB
JavaScript
import $ from "jquery";
|
|
|
|
import render_stream_specific_notification_row from "../templates/settings/stream_specific_notification_row.hbs";
|
|
|
|
import * as channel from "./channel";
|
|
import {$t} from "./i18n";
|
|
import * as notifications from "./notifications";
|
|
import {page_params} from "./page_params";
|
|
import * as settings_config from "./settings_config";
|
|
import * as settings_org from "./settings_org";
|
|
import * as settings_ui from "./settings_ui";
|
|
import * as stream_edit from "./stream_edit";
|
|
import * as stream_settings_data from "./stream_settings_data";
|
|
import * as unread_ui from "./unread_ui";
|
|
import {user_settings} from "./user_settings";
|
|
|
|
function rerender_ui() {
|
|
const unmatched_streams_table = $("#stream-specific-notify-table");
|
|
if (unmatched_streams_table.length === 0) {
|
|
// If we haven't rendered "notification settings" yet, do nothing.
|
|
return;
|
|
}
|
|
|
|
const unmatched_streams =
|
|
stream_settings_data.get_unmatched_streams_for_notification_settings();
|
|
|
|
unmatched_streams_table.find(".stream-row").remove();
|
|
|
|
for (const stream of unmatched_streams) {
|
|
unmatched_streams_table.append(
|
|
render_stream_specific_notification_row({
|
|
stream,
|
|
stream_specific_notification_settings:
|
|
settings_config.stream_specific_notification_settings,
|
|
is_disabled: settings_config.all_notifications().show_push_notifications_tooltip,
|
|
}),
|
|
);
|
|
}
|
|
|
|
if (unmatched_streams.length === 0) {
|
|
unmatched_streams_table.css("display", "none");
|
|
} else {
|
|
unmatched_streams_table.css("display", "table-row-group");
|
|
}
|
|
}
|
|
|
|
function change_notification_setting(setting, value, status_element) {
|
|
const data = {};
|
|
data[setting] = value;
|
|
settings_ui.do_settings_change(channel.patch, "/json/settings", data, status_element);
|
|
}
|
|
|
|
function update_desktop_icon_count_display() {
|
|
$("#user-notification-settings .setting_desktop_icon_count_display").val(
|
|
user_settings.desktop_icon_count_display,
|
|
);
|
|
unread_ui.update_unread_counts();
|
|
}
|
|
|
|
export function set_enable_digest_emails_visibility() {
|
|
const container = $("#user-notification-settings");
|
|
if (page_params.realm_digest_emails_enabled) {
|
|
container.find(".enable_digest_emails_label").parent().show();
|
|
} else {
|
|
container.find(".enable_digest_emails_label").parent().hide();
|
|
}
|
|
}
|
|
|
|
export function set_enable_marketing_emails_visibility() {
|
|
const container = $("#user-notification-settings");
|
|
if (page_params.corporate_enabled) {
|
|
container.find(".enable_marketing_emails_label").parent().show();
|
|
} else {
|
|
container.find(".enable_marketing_emails_label").parent().hide();
|
|
}
|
|
}
|
|
|
|
export function set_up() {
|
|
const container = $("#user-notification-settings");
|
|
$("#user-notification-settings").on("change", "input, select", function (e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
const input_elem = $(e.currentTarget);
|
|
if (input_elem.parents("#stream-specific-notify-table").length) {
|
|
stream_edit.stream_setting_changed(e, true);
|
|
return;
|
|
}
|
|
const setting_name = input_elem.attr("name");
|
|
change_notification_setting(
|
|
setting_name,
|
|
settings_org.get_input_element_value(this),
|
|
input_elem.closest(".subsection-parent").find(".alert-notification"),
|
|
);
|
|
});
|
|
|
|
update_desktop_icon_count_display();
|
|
|
|
container.find(".send_test_notification").on("click", () => {
|
|
notifications.send_test_notification(
|
|
$t({defaultMessage: "This is what a Zulip notification looks like."}),
|
|
);
|
|
});
|
|
|
|
container.find(".play_notification_sound").on("click", () => {
|
|
if (user_settings.notification_sound !== "none") {
|
|
$("#user-notification-sound-audio")[0].play();
|
|
}
|
|
});
|
|
|
|
const notification_sound_dropdown = container.find(".setting_notification_sound");
|
|
notification_sound_dropdown.val(user_settings.notification_sound);
|
|
|
|
container.find(".enable_sounds, .enable_stream_audible_notifications").on("change", () => {
|
|
if (
|
|
container.find(".enable_stream_audible_notifications").prop("checked") ||
|
|
container.find(".enable_sounds").prop("checked")
|
|
) {
|
|
notification_sound_dropdown.prop("disabled", false);
|
|
notification_sound_dropdown.parent().removeClass("control-label-disabled");
|
|
} else {
|
|
notification_sound_dropdown.prop("disabled", true);
|
|
notification_sound_dropdown.parent().addClass("control-label-disabled");
|
|
}
|
|
});
|
|
set_enable_digest_emails_visibility();
|
|
set_enable_marketing_emails_visibility();
|
|
rerender_ui();
|
|
}
|
|
|
|
export function update_page() {
|
|
for (const setting of settings_config.all_notification_settings) {
|
|
if (
|
|
setting === "enable_offline_push_notifications" &&
|
|
!page_params.realm_push_notifications_enabled
|
|
) {
|
|
// If push notifications are disabled at the realm level,
|
|
// we should just leave the checkbox always off.
|
|
continue;
|
|
} else if (setting === "desktop_icon_count_display") {
|
|
update_desktop_icon_count_display();
|
|
continue;
|
|
}
|
|
|
|
$("#user-notification-settings")
|
|
.find(`.${CSS.escape(setting)}`)
|
|
.prop("checked", user_settings[setting]);
|
|
}
|
|
rerender_ui();
|
|
}
|