mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Create an array of all user notification settings and loop through it to update notification settings and display results. Formatting tweaked by tabbott.
		
			
				
	
	
		
			131 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			4.7 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_sounds",
 | 
						|
    "pm_content_in_desktop_notifications",
 | 
						|
];
 | 
						|
 | 
						|
exports.set_up = function () {
 | 
						|
    $("#notify-settings-status").hide();
 | 
						|
 | 
						|
    if (!page_params.realm_show_digest_email) {
 | 
						|
        $("#other_notifications").hide();
 | 
						|
    }
 | 
						|
 | 
						|
    function update_notification_settings_success(resp, statusText, xhr) {
 | 
						|
        var result = JSON.parse(xhr.responseText);
 | 
						|
        var notify_settings_status = $('#notify-settings-status').expectOne();
 | 
						|
 | 
						|
        // Stream notification settings.
 | 
						|
 | 
						|
        _.each(result, function  (v, k) {
 | 
						|
            if (_.has(notification_settings, k) && result[k] !== undefined) {
 | 
						|
                page_params[k] = result[k];
 | 
						|
            }
 | 
						|
        });
 | 
						|
        ui_report.success(i18n.t("Updated notification settings!"), notify_settings_status);
 | 
						|
    }
 | 
						|
 | 
						|
    function update_notification_settings_error(xhr) {
 | 
						|
        ui_report.error(i18n.t("Error changing settings"), xhr, $('#notify-settings-status').expectOne());
 | 
						|
    }
 | 
						|
 | 
						|
    function post_notify_settings_changes(notification_changes, success_func,
 | 
						|
                                          error_func) {
 | 
						|
        return channel.patch({
 | 
						|
            url: "/json/settings/notifications",
 | 
						|
            data: notification_changes,
 | 
						|
            success: success_func,
 | 
						|
            error: error_func,
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    $("#change_notification_settings").on("click", function (e) {
 | 
						|
        e.preventDefault();
 | 
						|
 | 
						|
        var updated_settings = {};
 | 
						|
        _.each(notification_settings, function (setting) {
 | 
						|
            updated_settings[setting] = $("#" + setting).is(":checked");
 | 
						|
        });
 | 
						|
        post_notify_settings_changes(updated_settings,
 | 
						|
                                     update_notification_settings_success,
 | 
						|
                                     update_notification_settings_error);
 | 
						|
    });
 | 
						|
 | 
						|
    function update_global_stream_setting(notification_type, new_setting) {
 | 
						|
        var data = {};
 | 
						|
        data[notification_type] = new_setting;
 | 
						|
        channel.patch({
 | 
						|
            url: "/json/settings/notifications",
 | 
						|
            data: data,
 | 
						|
            success: update_notification_settings_success,
 | 
						|
            error: update_notification_settings_error,
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    function update_desktop_notification_setting(new_setting) {
 | 
						|
        update_global_stream_setting("enable_stream_desktop_notifications", new_setting);
 | 
						|
        stream_edit.set_all_stream_desktop_notifications_to(new_setting);
 | 
						|
    }
 | 
						|
 | 
						|
    function update_audible_notification_setting(new_setting) {
 | 
						|
        update_global_stream_setting("enable_stream_sounds", new_setting);
 | 
						|
        stream_edit.set_all_stream_audible_notifications_to(new_setting);
 | 
						|
    }
 | 
						|
 | 
						|
    function maybe_bulk_update_stream_notification_setting(notification_checkbox,
 | 
						|
                                                           propagate_setting_function) {
 | 
						|
        var html = templates.render("propagate_notification_change");
 | 
						|
        // TODO: This seems broken!!!
 | 
						|
        var control_group = notification_checkbox.closest(".control-group");
 | 
						|
        var checkbox_status = notification_checkbox.is(":checked");
 | 
						|
        control_group.find(".propagate_stream_notifications_change").html(html);
 | 
						|
        control_group.find(".yes_propagate_notifications").on("click", function () {
 | 
						|
            propagate_setting_function(checkbox_status);
 | 
						|
            control_group.find(".propagate_stream_notifications_change").empty();
 | 
						|
        });
 | 
						|
        control_group.find(".no_propagate_notifications").on("click", function () {
 | 
						|
            control_group.find(".propagate_stream_notifications_change").empty();
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    $("#enable_stream_desktop_notifications").on("click", function () {
 | 
						|
        var notification_checkbox = $("#enable_stream_desktop_notifications");
 | 
						|
        maybe_bulk_update_stream_notification_setting(notification_checkbox,
 | 
						|
                                                      update_desktop_notification_setting);
 | 
						|
    });
 | 
						|
 | 
						|
    $("#enable_stream_sounds").on("click", function () {
 | 
						|
        var notification_checkbox = $("#enable_stream_sounds");
 | 
						|
        maybe_bulk_update_stream_notification_setting(notification_checkbox,
 | 
						|
                                                      update_audible_notification_setting);
 | 
						|
    });
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
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;
 | 
						|
}
 |