Files
zulip/static/js/settings_notifications.js
Roman Godov b875fe07eb settings: Added setting to turn on and off realm name in email subject.
Users having only account in one realm will not be distracted by realm
name in subject lines of every email.  Users who have multiple
accounts in realms can turn this setting on and receive a
corresponding realm name in email's subject.

Tweaked by tabbott to rebase and address a few small issues.

Fixes #5489.
2018-02-05 18:01:54 -08:00

121 lines
4.8 KiB
JavaScript

var settings_notifications = (function () {
var exports = {};
var notification_settings = [
"enable_desktop_notifications",
"enable_digest_emails",
"enable_offline_email_notifications",
"enable_offline_push_notifications",
"enable_online_push_notifications",
"enable_sounds",
"enable_stream_desktop_notifications",
"enable_stream_push_notifications",
"enable_stream_sounds",
"pm_content_in_desktop_notifications",
"realm_name_in_notifications",
];
function maybe_bulk_update_stream_notification_setting(notification_checkbox,
propagate_setting_function) {
var html = templates.render("propagate_notification_change");
// TODO: This seems broken!!!
var group = notification_checkbox.closest(".input-group");
var checkbox_status = notification_checkbox.prop('checked');
group.find(".propagate_stream_notifications_change").html(html);
group.find(".yes_propagate_notifications").on("click", function () {
propagate_setting_function(checkbox_status);
group.find(".propagate_stream_notifications_change").empty();
});
group.find(".no_propagate_notifications").on("click", function () {
group.find(".propagate_stream_notifications_change").empty();
});
}
exports.set_up = function () {
var notify_settings_status = $("#notify-settings-status").expectOne();
notify_settings_status.hide();
if (!page_params.realm_show_digest_email) {
$("#digest_container").hide();
}
_.each(notification_settings, function (setting) {
$("#" + setting).change(function () {
var data = {};
var setting_name = $('label[for=' + setting + ']').text().trim();
var context = {setting_name: setting_name};
var setting_data = $(this).prop('checked');
data[setting] = JSON.stringify(setting_data);
channel.patch({
url: '/json/settings/notifications',
data: data,
success: function () {
if (setting_data === true) {
ui_report.success(i18n.t("Enabled: __- setting_name__",
context), notify_settings_status);
} else {
ui_report.success(i18n.t("Disabled: __- setting_name__",
context), notify_settings_status);
}
},
error: function (xhr) {
ui_report.error(i18n.t('Error updating: __- setting_name__',
context), xhr, notify_settings_status);
},
});
if (setting === 'enable_stream_desktop_notifications') {
maybe_bulk_update_stream_notification_setting($('#' + setting), function () {
stream_edit.set_notification_setting_for_all_streams('desktop_notifications', setting_data);
});
} else if (setting === 'enable_stream_push_notifications') {
maybe_bulk_update_stream_notification_setting($('#' + setting), function () {
stream_edit.set_notification_setting_for_all_streams('push_notifications', setting_data);
});
} else if (setting === 'enable_stream_sounds') {
maybe_bulk_update_stream_notification_setting($('#' + setting), function () {
stream_edit.set_notification_setting_for_all_streams('audible_notifications', setting_data);
});
}
});
});
$("#enable_desktop_notifications").change(function () {
if (this.checked) {
$("#pm_content_in_desktop_notifications").prop("disabled", false);
$("#pm_content_in_desktop_notifications_label").parent().removeClass("control-label-disabled");
} else {
$("#pm_content_in_desktop_notifications").prop("disabled", true);
$("#pm_content_in_desktop_notifications_label").parent().addClass("control-label-disabled");
}
});
$("#enable_offline_push_notifications").change(function () {
if (this.checked) {
$("#enable_online_push_notifications").prop("disabled", false);
$("#enable_online_push_notifications_label").parent().removeClass("control-label-disabled");
} else {
$("#enable_online_push_notifications").prop("disabled", true);
$("#enable_online_push_notifications_label").parent().addClass("control-label-disabled");
}
});
};
function _update_page() {
_.each(notification_settings, function (setting) {
$("#" + setting).prop('checked', page_params[setting]);
});
}
exports.update_page = function () {
i18n.ensure_i18n(_update_page);
};
return exports;
}());
if (typeof module !== 'undefined') {
module.exports = settings_notifications;
}