Files
zulip/static/js/settings_ui.js
Shubham Dhama b580c62bd4 settings: Fix exception on updating bot_creation_policy.
This initializes the bot_creation_policy_values after the page
is loaded.

Previously we initialize these values in `settings.js` when settings page
is loaded at least once, so if we open two tabs, one(1) in which we
haven't opened the settings page yet and if in another tab (2) we
update the `bot_creation_policy` value, then because of the event
which calls `settings_bots.update_bot_permissions_ui` causes exception
in (1) because `bot_creation_policy_values` isn't initialized yet.

Fixes: #8852.
2018-03-29 08:03:42 -07:00

87 lines
3.0 KiB
JavaScript

var settings_ui = (function () {
var exports = {};
exports.display_checkmark = function ($elem) {
var check_mark = document.createElement("img");
check_mark.src = "/static/images/checkbox-green.svg";
$elem.prepend(check_mark);
$(check_mark).css("width", "13px");
};
exports.strings = {};
function _initialize() {
exports.strings = {
success: i18n.t("Saved"),
failure: i18n.t("Save failed"),
saving: i18n.t("Saving"),
};
settings_bots.setup_bot_creation_policy_values();
}
exports.initialize = function () {
i18n.ensure_i18n(_initialize);
};
// Generic function for informing users about changes to the settings
// UI. Intended to replace the old system that was built around
// direct calls to `ui_report`.
exports.do_settings_change = function (request_method, url, data, status_element, opts) {
var spinner = $(status_element).expectOne();
loading.make_indicator(spinner, {text: exports.strings.saving});
var success_msg;
var success_continuation;
var error_continuation;
if (opts !== undefined) {
success_msg = opts.success_msg;
success_continuation = opts.success_continuation;
error_continuation = opts.error_continuation;
}
if (success_msg === undefined) {
success_msg = exports.strings.success;
}
request_method({
url: url,
data: data,
success: function (reponse_data) {
ui_report.success(success_msg, spinner);
settings_ui.display_checkmark(spinner);
if (success_continuation !== undefined) {
success_continuation(reponse_data);
}
},
error: function (xhr) {
ui_report.error(exports.strings.failure, xhr, spinner);
if (error_continuation !== undefined) {
error_continuation(xhr);
}
},
});
};
// This function is used to disable sub-setting when main setting is checked or unchecked
// or two settings are inter-dependent on their values values.
// * is_checked is boolean, shows if the main setting is checked or not.
// * sub_setting_id is sub setting or setting which depend on main setting,
// string id of setting.
// * disable_on_uncheck is boolean, true if sub setting should be disabled
// when main setting unchecked.
exports.disable_sub_setting_onchange = function (is_checked, sub_setting_id, disable_on_uncheck) {
if ((is_checked && disable_on_uncheck) || (!is_checked && !disable_on_uncheck)) {
$("#" + sub_setting_id).attr("disabled", false);
$("#" + sub_setting_id + "_label").parent().removeClass("control-label-disabled");
} else if ((is_checked && !disable_on_uncheck) || (!is_checked && disable_on_uncheck)) {
$("#" + sub_setting_id).attr("disabled", "disabled");
$("#" + sub_setting_id + "_label").parent().addClass("control-label-disabled");
}
};
return exports;
}());
if (typeof module !== 'undefined') {
module.exports = settings_ui;
}