diff --git a/.eslintrc.json b/.eslintrc.json
index 94ac048e2d..de92a723d4 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -102,7 +102,6 @@
"unicorn/prefer-module": "off",
"unicorn/prefer-node-protocol": "off",
"unicorn/prefer-spread": "off",
- "unicorn/prefer-switch": "off",
"unicorn/prefer-ternary": "off",
"unicorn/prevent-abbreviations": "off",
"valid-typeof": ["error", {"requireStringLiterals": true}],
diff --git a/frontend_tests/node_tests/upgrade.js b/frontend_tests/node_tests/upgrade.js
index 9f4284776e..33118677a3 100644
--- a/frontend_tests/node_tests/upgrade.js
+++ b/frontend_tests/node_tests/upgrade.js
@@ -38,20 +38,24 @@ run_test("initialize", (override) => {
let create_ajax_request_form_call_count = 0;
helpers.__Rewire__("create_ajax_request", (url, form_name, stripe_token, redirect_to) => {
create_ajax_request_form_call_count += 1;
- if (form_name === "autopay") {
- assert.equal(url, "/json/billing/upgrade");
- assert.equal(stripe_token, "stripe_add_card_token");
- assert.equal(redirect_to, undefined);
- } else if (form_name === "invoice") {
- assert.equal(url, "/json/billing/upgrade");
- assert.equal(stripe_token, undefined);
- assert.equal(redirect_to, undefined);
- } else if (form_name === "sponsorship") {
- assert.equal(url, "/json/billing/sponsorship");
- assert.equal(stripe_token, undefined);
- assert.equal(redirect_to, "/");
- } else {
- throw new Error("Unhandled case");
+ switch (form_name) {
+ case "autopay":
+ assert.equal(url, "/json/billing/upgrade");
+ assert.equal(stripe_token, "stripe_add_card_token");
+ assert.equal(redirect_to, undefined);
+ break;
+ case "invoice":
+ assert.equal(url, "/json/billing/upgrade");
+ assert.equal(stripe_token, undefined);
+ assert.equal(redirect_to, undefined);
+ break;
+ case "sponsorship":
+ assert.equal(url, "/json/billing/sponsorship");
+ assert.equal(stripe_token, undefined);
+ assert.equal(redirect_to, "/");
+ break;
+ default:
+ throw new Error("Unhandled case");
}
});
diff --git a/static/js/emoji_picker.js b/static/js/emoji_picker.js
index cfd40bf151..112b2d6411 100644
--- a/static/js/emoji_picker.js
+++ b/static/js/emoji_picker.js
@@ -441,7 +441,6 @@ export function navigate(event_name, e) {
const selected_emoji = get_rendered_emoji(current_section, current_index);
const is_filter_focused = $(".emoji-popover-filter").is(":focus");
- let next_section = 0;
// special cases
if (is_filter_focused) {
// Move down into emoji map.
@@ -481,42 +480,32 @@ export function navigate(event_name, e) {
reset_emoji_showcase();
return true;
}
- } else if (event_name === "tab") {
- change_focus_to_filter();
- return true;
- } else if (event_name === "shift_tab") {
- if (!is_filter_focused) {
- change_focus_to_filter();
- }
- return true;
- } else if (event_name === "page_up") {
- next_section = current_section - 1;
- maybe_change_active_section(next_section);
- return true;
- } else if (event_name === "page_down") {
- next_section = current_section + 1;
- maybe_change_active_section(next_section);
- return true;
- } else if (!is_filter_focused) {
- let next_coord = {};
- switch (event_name) {
- case "down_arrow":
- next_coord = get_next_emoji_coordinates(6);
- break;
- case "up_arrow":
- next_coord = get_next_emoji_coordinates(-6);
- break;
- case "left_arrow":
- next_coord = get_next_emoji_coordinates(-1);
- break;
- case "right_arrow":
- next_coord = get_next_emoji_coordinates(1);
- break;
- }
-
- return maybe_change_focused_emoji($emoji_map, next_coord.section, next_coord.index);
+ return false;
+ }
+
+ switch (event_name) {
+ case "tab":
+ case "shift_tab":
+ change_focus_to_filter();
+ return true;
+ case "page_up":
+ maybe_change_active_section(current_section - 1);
+ return true;
+ case "page_down":
+ maybe_change_active_section(current_section + 1);
+ return true;
+ case "down_arrow":
+ case "up_arrow":
+ case "left_arrow":
+ case "right_arrow": {
+ const next_coord = get_next_emoji_coordinates(
+ {down_arrow: 6, up_arrow: -6, left_arrow: -1, right_arrow: 1}[event_name],
+ );
+ return maybe_change_focused_emoji($emoji_map, next_coord.section, next_coord.index);
+ }
+ default:
+ return false;
}
- return false;
}
function process_keypress(e) {
diff --git a/static/js/filter.js b/static/js/filter.js
index 8077ce7498..4fbdf8b265 100644
--- a/static/js/filter.js
+++ b/static/js/filter.js
@@ -69,35 +69,42 @@ function message_in_home(message) {
function message_matches_search_term(message, operator, operand) {
switch (operator) {
case "has":
- if (operand === "image") {
- return message_parser.message_has_image(message);
- } else if (operand === "link") {
- return message_parser.message_has_link(message);
- } else if (operand === "attachment") {
- return message_parser.message_has_attachment(message);
+ switch (operand) {
+ case "image":
+ return message_parser.message_has_image(message);
+ case "link":
+ return message_parser.message_has_link(message);
+ case "attachment":
+ return message_parser.message_has_attachment(message);
+ default:
+ return false; // has:something_else returns false
}
- return false; // has:something_else returns false
+
case "is":
- if (operand === "private") {
- return message.type === "private";
- } else if (operand === "starred") {
- return message.starred;
- } else if (operand === "mentioned") {
- return message.mentioned;
- } else if (operand === "alerted") {
- return message.alerted;
- } else if (operand === "unread") {
- return unread.message_unread(message);
+ switch (operand) {
+ case "private":
+ return message.type === "private";
+ case "starred":
+ return message.starred;
+ case "mentioned":
+ return message.mentioned;
+ case "alerted":
+ return message.alerted;
+ case "unread":
+ return unread.message_unread(message);
+ default:
+ return false; // is:whatever returns false
}
- return false; // is:whatever returns false
case "in":
- if (operand === "home") {
- return message_in_home(message);
- } else if (operand === "all") {
- return true;
+ switch (operand) {
+ case "home":
+ return message_in_home(message);
+ case "all":
+ return true;
+ default:
+ return false; // in:whatever returns false
}
- return false; // in:whatever returns false
case "near":
// this is all handled server side
diff --git a/static/js/hotkey.js b/static/js/hotkey.js
index 2e33e1acb7..af8079ddde 100644
--- a/static/js/hotkey.js
+++ b/static/js/hotkey.js
@@ -680,21 +680,29 @@ export function process_hotkey(e, hotkey) {
) {
compose_actions.cancel();
// don't return, as we still want it to be picked up by the code below
- } else if (event_name === "page_up") {
- $(":focus").caret(0).animate({scrollTop: 0}, "fast");
- return true;
- } else if (event_name === "page_down") {
- // so that it always goes to the end of the text box.
- const height = $(":focus")[0].scrollHeight;
- $(":focus").caret(Number.POSITIVE_INFINITY).animate({scrollTop: height}, "fast");
- return true;
- } else if (event_name === "search_with_k") {
- // Do nothing; this allows one to use Ctrl+K inside compose.
- } else if (event_name === "star_message") {
- // Do nothing; this allows one to use Ctrl+S inside compose.
} else {
- // Let the browser handle the key normally.
- return false;
+ switch (event_name) {
+ case "page_up":
+ $(":focus").caret(0).animate({scrollTop: 0}, "fast");
+ return true;
+ case "page_down": {
+ // so that it always goes to the end of the text box.
+ const height = $(":focus")[0].scrollHeight;
+ $(":focus")
+ .caret(Number.POSITIVE_INFINITY)
+ .animate({scrollTop: height}, "fast");
+ return true;
+ }
+ case "search_with_k":
+ // Do nothing; this allows one to use Ctrl+K inside compose.
+ break;
+ case "star_message":
+ // Do nothing; this allows one to use Ctrl+S inside compose.
+ break;
+ default:
+ // Let the browser handle the key normally.
+ return false;
+ }
}
}
diff --git a/static/js/input_pill.js b/static/js/input_pill.js
index 4d04e6ce0f..2a6b6f374c 100644
--- a/static/js/input_pill.js
+++ b/static/js/input_pill.js
@@ -316,18 +316,23 @@ export function create(opts) {
const $pill = store.$parent.find(".pill:focus");
- if (char === KEY.LEFT_ARROW) {
- $pill.prev().trigger("focus");
- } else if (char === KEY.RIGHT_ARROW) {
- $pill.next().trigger("focus");
- } else if (char === KEY.BACKSPACE) {
- const $next = $pill.next();
- const id = $pill.data("id");
- funcs.removePill(id);
- $next.trigger("focus");
- // the "Backspace" key in Firefox will go back a page if you do
- // not prevent it.
- e.preventDefault();
+ switch (char) {
+ case KEY.LEFT_ARROW:
+ $pill.prev().trigger("focus");
+ break;
+ case KEY.RIGHT_ARROW:
+ $pill.next().trigger("focus");
+ break;
+ case KEY.BACKSPACE: {
+ const $next = $pill.next();
+ const id = $pill.data("id");
+ funcs.removePill(id);
+ $next.trigger("focus");
+ // the "Backspace" key in Firefox will go back a page if you do
+ // not prevent it.
+ e.preventDefault();
+ break;
+ }
}
});
diff --git a/static/js/lightbox.js b/static/js/lightbox.js
index 2036e3cced..4e357ff481 100644
--- a/static/js/lightbox.js
+++ b/static/js/lightbox.js
@@ -79,18 +79,22 @@ function display_video(payload) {
).hide();
let source;
- if (payload.type === "youtube-video") {
- source = "https://www.youtube.com/embed/" + payload.source;
- } else if (payload.type === "vimeo-video") {
- source = "https://player.vimeo.com/video/" + payload.source;
- } else if (payload.type === "embed-video") {
- // Use data: to load the player in a unique origin for security.
- source =
- "data:text/html," +
- window.encodeURIComponent(
- "" +
- payload.source,
- );
+ switch (payload.type) {
+ case "youtube-video":
+ source = "https://www.youtube.com/embed/" + payload.source;
+ break;
+ case "vimeo-video":
+ source = "https://player.vimeo.com/video/" + payload.source;
+ break;
+ case "embed-video":
+ // Use data: to load the player in a unique origin for security.
+ source =
+ "data:text/html," +
+ window.encodeURIComponent(
+ "" +
+ payload.source,
+ );
+ break;
}
const iframe = $("");
diff --git a/static/js/lightbox_canvas.js b/static/js/lightbox_canvas.js
index 49ac7f707d..9bb157a2fc 100644
--- a/static/js/lightbox_canvas.js
+++ b/static/js/lightbox_canvas.js
@@ -101,14 +101,20 @@ const funcs = {
if (!overlays.lightbox_open()) {
return;
}
- if (e.key === "Z" || e.key === "+") {
- funcs.setZoom(meta, "+");
- funcs.displayImage(canvas, context, meta);
- } else if (e.key === "z" || e.key === "-") {
- funcs.setZoom(meta, "-");
- funcs.displayImage(canvas, context, meta);
- } else if (e.key === "v") {
- overlays.close_overlay("lightbox");
+ switch (e.key) {
+ case "Z":
+ case "+":
+ funcs.setZoom(meta, "+");
+ funcs.displayImage(canvas, context, meta);
+ break;
+ case "z":
+ case "-":
+ funcs.setZoom(meta, "-");
+ funcs.displayImage(canvas, context, meta);
+ break;
+ case "v":
+ overlays.close_overlay("lightbox");
+ break;
}
e.preventDefault();
e.stopPropagation();
diff --git a/static/js/message_edit.js b/static/js/message_edit.js
index c7c2b6f3fe..df5acb0816 100644
--- a/static/js/message_edit.js
+++ b/static/js/message_edit.js
@@ -401,38 +401,44 @@ function edit_message(row, raw_content) {
stream_bar.decorate(stream_name, stream_header_colorblock, false);
});
- if (editability === editability_types.NO) {
- message_edit_content.attr("readonly", "readonly");
- message_edit_topic.attr("readonly", "readonly");
- create_copy_to_clipboard_handler(copy_message[0], message.id);
- } else if (editability === editability_types.NO_LONGER) {
- // You can currently only reach this state in non-streams. If that
- // changes (e.g. if we stop allowing topics to be modified forever
- // in streams), then we'll need to disable
- // row.find('input.message_edit_topic') as well.
- message_edit_content.attr("readonly", "readonly");
- message_edit_countdown_timer.text($t({defaultMessage: "View source"}));
- create_copy_to_clipboard_handler(copy_message[0], message.id);
- } else if (editability === editability_types.TOPIC_ONLY) {
- message_edit_content.attr("readonly", "readonly");
- // Hint why you can edit the topic but not the message content
- message_edit_countdown_timer.text($t({defaultMessage: "Topic editing only"}));
- create_copy_to_clipboard_handler(copy_message[0], message.id);
- } else if (editability === editability_types.FULL) {
- copy_message.remove();
- const edit_id = `#edit_form_${CSS.escape(rows.id(row))} .message_edit_content`;
- const listeners = resize.watch_manual_resize(edit_id);
- if (listeners) {
- currently_editing_messages.get(rows.id(row)).listeners = listeners;
+ switch (editability) {
+ case editability_types.NO:
+ message_edit_content.attr("readonly", "readonly");
+ message_edit_topic.attr("readonly", "readonly");
+ create_copy_to_clipboard_handler(copy_message[0], message.id);
+ break;
+ case editability_types.NO_LONGER:
+ // You can currently only reach this state in non-streams. If that
+ // changes (e.g. if we stop allowing topics to be modified forever
+ // in streams), then we'll need to disable
+ // row.find('input.message_edit_topic') as well.
+ message_edit_content.attr("readonly", "readonly");
+ message_edit_countdown_timer.text($t({defaultMessage: "View source"}));
+ create_copy_to_clipboard_handler(copy_message[0], message.id);
+ break;
+ case editability_types.TOPIC_ONLY:
+ message_edit_content.attr("readonly", "readonly");
+ // Hint why you can edit the topic but not the message content
+ message_edit_countdown_timer.text($t({defaultMessage: "Topic editing only"}));
+ create_copy_to_clipboard_handler(copy_message[0], message.id);
+ break;
+ case editability_types.FULL: {
+ copy_message.remove();
+ const edit_id = `#edit_form_${CSS.escape(rows.id(row))} .message_edit_content`;
+ const listeners = resize.watch_manual_resize(edit_id);
+ if (listeners) {
+ currently_editing_messages.get(rows.id(row)).listeners = listeners;
+ }
+ composebox_typeahead.initialize_compose_typeahead(edit_id);
+ compose.handle_keyup(null, $(edit_id).expectOne());
+ $(edit_id).on("keydown", function (event) {
+ compose.handle_keydown(event, $(this).expectOne());
+ });
+ $(edit_id).on("keyup", function (event) {
+ compose.handle_keyup(event, $(this).expectOne());
+ });
+ break;
}
- composebox_typeahead.initialize_compose_typeahead(edit_id);
- compose.handle_keyup(null, $(edit_id).expectOne());
- $(edit_id).on("keydown", function (event) {
- compose.handle_keydown(event, $(this).expectOne());
- });
- $(edit_id).on("keyup", function (event) {
- compose.handle_keyup(event, $(this).expectOne());
- });
}
// Add tooltip
diff --git a/static/js/narrow.js b/static/js/narrow.js
index 45ba5b364d..9e4411114d 100644
--- a/static/js/narrow.js
+++ b/static/js/narrow.js
@@ -328,17 +328,21 @@ export function activate(raw_operators, opts) {
// particular message ID (which could be max_int), or we're
// asking the server to figure out for us what the first
// unread message is, and center the narrow around that.
- if (id_info.final_select_id === undefined) {
- anchor = "first_unread";
- } else if (id_info.final_select_id === -1) {
- // This case should never happen in this code path; it's
- // here in case we choose to extract this as an
- // independent reusable function.
- anchor = "oldest";
- } else if (id_info.final_select_id === LARGER_THAN_MAX_MESSAGE_ID) {
- anchor = "newest";
- } else {
- anchor = id_info.final_select_id;
+ switch (id_info.final_select_id) {
+ case undefined:
+ anchor = "first_unread";
+ break;
+ case -1:
+ // This case should never happen in this code path; it's
+ // here in case we choose to extract this as an
+ // independent reusable function.
+ anchor = "oldest";
+ break;
+ case LARGER_THAN_MAX_MESSAGE_ID:
+ anchor = "newest";
+ break;
+ default:
+ anchor = id_info.final_select_id;
}
message_fetch.load_messages_for_narrow({
diff --git a/static/js/rtl.js b/static/js/rtl.js
index 35759398ff..18728cc80d 100644
--- a/static/js/rtl.js
+++ b/static/js/rtl.js
@@ -130,20 +130,27 @@ export function get_direction(str) {
}
const bidi_class = get_bidi_class(ch);
- if (bidi_class === "I") {
- // LRI, RLI, FSI
- isolations += 1;
- } else if (bidi_class === "PDI") {
- if (isolations > 0) {
- isolations -= 1;
- }
- } else if (bidi_class === "R") {
- // R, AL
- if (isolations === 0) {
- return "rtl";
- }
- } else if (bidi_class === "L" && isolations === 0) {
- return "ltr";
+ switch (bidi_class) {
+ case "I":
+ // LRI, RLI, FSI
+ isolations += 1;
+ break;
+ case "PDI":
+ if (isolations > 0) {
+ isolations -= 1;
+ }
+ break;
+ case "R":
+ // R, AL
+ if (isolations === 0) {
+ return "rtl";
+ }
+ break;
+ case "L":
+ if (isolations === 0) {
+ return "ltr";
+ }
+ break;
}
}
return "ltr";
diff --git a/static/js/settings_org.js b/static/js/settings_org.js
index d0dc1b795a..b2724fdf9d 100644
--- a/static/js/settings_org.js
+++ b/static/js/settings_org.js
@@ -399,31 +399,37 @@ export function populate_auth_methods(auth_methods) {
function update_dependent_subsettings(property_name) {
if (simple_dropdown_properties.includes(property_name)) {
set_property_dropdown_value(property_name);
- } else if (property_name === "realm_waiting_period_threshold") {
- set_realm_waiting_period_dropdown();
- } else if (
- property_name === "realm_video_chat_provider"
- ) {
- set_video_chat_provider_dropdown();
- } else if (
- property_name === "realm_msg_edit_limit_setting" ||
- property_name === "realm_message_content_edit_limit_minutes"
- ) {
- set_msg_edit_limit_dropdown();
- } else if (property_name === "realm_message_retention_days") {
- set_message_retention_setting_dropdown();
- } else if (
- property_name === "realm_msg_delete_limit_setting" ||
- property_name === "realm_message_content_delete_limit_minutes"
- ) {
- set_msg_delete_limit_dropdown();
- } else if (property_name === "realm_org_join_restrictions") {
- set_org_join_restrictions_dropdown();
- } else if (property_name === "realm_message_content_allowed_in_email_notifications") {
- set_message_content_in_email_notifications_visiblity();
- } else if (property_name === "realm_digest_emails_enabled") {
- settings_notifications.set_enable_digest_emails_visibility();
- set_digest_emails_weekday_visibility();
+ return;
+ }
+
+ switch (property_name) {
+ case "realm_waiting_period_threshold":
+ set_realm_waiting_period_dropdown();
+ break;
+ case "realm_video_chat_provider":
+ set_video_chat_provider_dropdown();
+ break;
+ case "realm_msg_edit_limit_setting":
+ case "realm_message_content_edit_limit_minutes":
+ set_msg_edit_limit_dropdown();
+ break;
+ case "realm_message_retention_days":
+ set_message_retention_setting_dropdown();
+ break;
+ case "realm_msg_delete_limit_setting":
+ case "realm_message_content_delete_limit_minutes":
+ set_msg_delete_limit_dropdown();
+ break;
+ case "realm_org_join_restrictions":
+ set_org_join_restrictions_dropdown();
+ break;
+ case "realm_message_content_allowed_in_email_notifications":
+ set_message_content_in_email_notifications_visiblity();
+ break;
+ case "realm_digest_emails_enabled":
+ settings_notifications.set_enable_digest_emails_visibility();
+ set_digest_emails_weekday_visibility();
+ break;
}
}
@@ -436,18 +442,25 @@ function discard_property_element_changes(elem) {
const property_name = extract_property_name(elem);
const property_value = get_property_value(property_name);
- if (property_name === "realm_authentication_methods") {
- populate_auth_methods(property_value);
- } else if (property_name === "realm_notifications_stream_id") {
- notifications_stream_widget.render(property_value);
- } else if (property_name === "realm_signup_notifications_stream_id") {
- signup_notifications_stream_widget.render(property_value);
- } else if (property_name === "realm_default_code_block_language") {
- default_code_language_widget.render(property_value);
- } else if (property_value !== undefined) {
- set_input_element_value(elem, property_value);
- } else {
- blueslip.error("Element refers to unknown property " + property_name);
+ switch (property_name) {
+ case "realm_authentication_methods":
+ populate_auth_methods(property_value);
+ break;
+ case "realm_notifications_stream_id":
+ notifications_stream_widget.render(property_value);
+ break;
+ case "realm_signup_notifications_stream_id":
+ signup_notifications_stream_widget.render(property_value);
+ break;
+ case "realm_default_code_block_language":
+ default_code_language_widget.render(property_value);
+ break;
+ default:
+ if (property_value !== undefined) {
+ set_input_element_value(elem, property_value);
+ } else {
+ blueslip.error("Element refers to unknown property " + property_name);
+ }
}
update_dependent_subsettings(property_name);
@@ -459,29 +472,39 @@ export function sync_realm_settings(property) {
}
const value = page_params[`realm_${property}`];
- if (property === "notifications_stream_id") {
- notifications_stream_widget.render(value);
- } else if (property === "signup_notifications_stream_id") {
- signup_notifications_stream_widget.render(value);
- } else if (property === "default_code_block_language") {
- default_code_language_widget.render(value);
+ switch (property) {
+ case "notifications_stream_id":
+ notifications_stream_widget.render(value);
+ break;
+ case "signup_notifications_stream_id":
+ signup_notifications_stream_widget.render(value);
+ break;
+ case "default_code_block_language":
+ default_code_language_widget.render(value);
+ break;
}
- if (property === "message_content_edit_limit_seconds") {
- property = "message_content_edit_limit_minutes";
- } else if (property === "allow_message_editing") {
- property = "msg_edit_limit_setting";
- } else if (
- property === "emails_restricted_to_domains" ||
- property === "disallow_disposable_email_addresses"
- ) {
- property = "org_join_restrictions";
- } else if (property === "message_content_delete_limit_seconds") {
- property = "message_content_delete_limit_minutes";
- } else if (property === "allow_message_deleting") {
- property = "msg_delete_limit_setting";
- } else if (property === "invite_required" || property === "invite_to_realm_policy") {
- property = "user_invite_restriction";
+ switch (property) {
+ case "message_content_edit_limit_seconds":
+ property = "message_content_edit_limit_minutes";
+ break;
+ case "allow_message_editing":
+ property = "msg_edit_limit_setting";
+ break;
+ case "emails_restricted_to_domains":
+ case "disallow_disposable_email_addresses":
+ property = "org_join_restrictions";
+ break;
+ case "message_content_delete_limit_seconds":
+ property = "message_content_delete_limit_minutes";
+ break;
+ case "allow_message_deleting":
+ property = "msg_delete_limit_setting";
+ break;
+ case "invite_required":
+ case "invite_to_realm_policy":
+ property = "user_invite_restriction";
+ break;
}
const element = $(`#id_realm_${CSS.escape(property)}`);
if (element.length) {
@@ -515,31 +538,37 @@ export function change_save_button_state($element, state) {
let button_text;
let data_status;
let is_show;
- if (state === "unsaved") {
- button_text = $t({defaultMessage: "Save changes"});
- data_status = "unsaved";
- is_show = true;
+ switch (state) {
+ case "unsaved":
+ button_text = $t({defaultMessage: "Save changes"});
+ data_status = "unsaved";
+ is_show = true;
- $element.find(".discard-button").show();
- } else if (state === "saved") {
- button_text = $t({defaultMessage: "Save changes"});
- data_status = "";
- is_show = false;
- } else if (state === "saving") {
- button_text = $t({defaultMessage: "Saving"});
- data_status = "saving";
- is_show = true;
+ $element.find(".discard-button").show();
+ break;
+ case "saved":
+ button_text = $t({defaultMessage: "Save changes"});
+ data_status = "";
+ is_show = false;
+ break;
+ case "saving":
+ button_text = $t({defaultMessage: "Saving"});
+ data_status = "saving";
+ is_show = true;
- $element.find(".discard-button").hide();
- $saveBtn.addClass("saving");
- } else if (state === "failed") {
- button_text = $t({defaultMessage: "Save changes"});
- data_status = "failed";
- is_show = true;
- } else if (state === "succeeded") {
- button_text = $t({defaultMessage: "Saved"});
- data_status = "saved";
- is_show = false;
+ $element.find(".discard-button").hide();
+ $saveBtn.addClass("saving");
+ break;
+ case "failed":
+ button_text = $t({defaultMessage: "Save changes"});
+ data_status = "failed";
+ is_show = true;
+ break;
+ case "succeeded":
+ button_text = $t({defaultMessage: "Saved"});
+ data_status = "saved";
+ is_show = false;
+ break;
}
$textEl.text(button_text);
@@ -557,18 +586,16 @@ function get_input_type(input_elem, input_type) {
export function get_input_element_value(input_elem, input_type) {
input_elem = $(input_elem);
input_type = get_input_type(input_elem, input_type);
- if (input_type) {
- if (input_type === "boolean") {
+ switch (input_type) {
+ case "boolean":
return input_elem.prop("checked");
- }
- if (input_type === "string") {
+ case "string":
return input_elem.val().trim();
- }
- if (input_type === "number") {
+ case "number":
return Number.parseInt(input_elem.val().trim(), 10);
- }
+ default:
+ return undefined;
}
- return undefined;
}
export function set_input_element_value(input_elem, value) {
@@ -576,8 +603,7 @@ export function set_input_element_value(input_elem, value) {
if (input_type) {
if (input_type === "boolean") {
return input_elem.prop("checked", value);
- }
- if (input_type === "string" || input_type === "number") {
+ } else if (input_type === "string" || input_type === "number") {
return input_elem.val(value);
}
}
@@ -609,21 +635,28 @@ function check_property_changed(elem) {
let current_val = get_property_value(property_name);
let changed_val;
- if (property_name === "realm_authentication_methods") {
- current_val = sort_object_by_key(current_val);
- current_val = JSON.stringify(current_val);
- changed_val = get_auth_method_table_data();
- changed_val = JSON.stringify(changed_val);
- } else if (property_name === "realm_notifications_stream_id") {
- changed_val = Number.parseInt(notifications_stream_widget.value(), 10);
- } else if (property_name === "realm_signup_notifications_stream_id") {
- changed_val = Number.parseInt(signup_notifications_stream_widget.value(), 10);
- } else if (property_name === "realm_default_code_block_language") {
- changed_val = default_code_language_widget.value();
- } else if (current_val !== undefined) {
- changed_val = get_input_element_value(elem, typeof current_val);
- } else {
- blueslip.error("Element refers to unknown property " + property_name);
+ switch (property_name) {
+ case "realm_authentication_methods":
+ current_val = sort_object_by_key(current_val);
+ current_val = JSON.stringify(current_val);
+ changed_val = get_auth_method_table_data();
+ changed_val = JSON.stringify(changed_val);
+ break;
+ case "realm_notifications_stream_id":
+ changed_val = Number.parseInt(notifications_stream_widget.value(), 10);
+ break;
+ case "realm_signup_notifications_stream_id":
+ changed_val = Number.parseInt(signup_notifications_stream_widget.value(), 10);
+ break;
+ case "realm_default_code_block_language":
+ changed_val = default_code_language_widget.value();
+ break;
+ default:
+ if (current_val !== undefined) {
+ changed_val = get_input_element_value(elem, typeof current_val);
+ } else {
+ blueslip.error("Element refers to unknown property " + property_name);
+ }
}
return current_val !== changed_val;
}
@@ -770,128 +803,172 @@ export function build_page() {
function get_complete_data_for_subsection(subsection) {
let data = {};
- if (subsection === "msg_editing") {
- const edit_limit_setting_value = $("#id_realm_msg_edit_limit_setting").val();
- if (edit_limit_setting_value === "never") {
- data.allow_message_editing = false;
- } else if (edit_limit_setting_value === "custom_limit") {
- data.message_content_edit_limit_seconds = parse_time_limit(
- $("#id_realm_message_content_edit_limit_minutes"),
+ switch (subsection) {
+ case "msg_editing": {
+ const edit_limit_setting_value = $("#id_realm_msg_edit_limit_setting").val();
+ if (edit_limit_setting_value === "never") {
+ data.allow_message_editing = false;
+ } else if (edit_limit_setting_value === "custom_limit") {
+ data.message_content_edit_limit_seconds = parse_time_limit(
+ $("#id_realm_message_content_edit_limit_minutes"),
+ );
+ // Disable editing if the parsed time limit is 0 seconds
+ data.allow_message_editing = Boolean(data.message_content_edit_limit_seconds);
+ } else {
+ data.allow_message_editing = true;
+ data.message_content_edit_limit_seconds =
+ settings_config.msg_edit_limit_dropdown_values.get(
+ edit_limit_setting_value,
+ ).seconds;
+ }
+ const delete_limit_setting_value = $("#id_realm_msg_delete_limit_setting").val();
+ if (delete_limit_setting_value === "never") {
+ data.allow_message_deleting = false;
+ } else if (delete_limit_setting_value === "custom_limit") {
+ data.message_content_delete_limit_seconds = parse_time_limit(
+ $("#id_realm_message_content_delete_limit_minutes"),
+ );
+ // Disable deleting if the parsed time limit is 0 seconds
+ data.allow_message_deleting = Boolean(
+ data.message_content_delete_limit_seconds,
+ );
+ } else {
+ data.allow_message_deleting = true;
+ data.message_content_delete_limit_seconds =
+ settings_config.msg_delete_limit_dropdown_values.get(
+ delete_limit_setting_value,
+ ).seconds;
+ }
+ break;
+ }
+ case "notifications":
+ data.notifications_stream_id = Number.parseInt(
+ notifications_stream_widget.value(),
+ 10,
);
- // Disable editing if the parsed time limit is 0 seconds
- data.allow_message_editing = Boolean(data.message_content_edit_limit_seconds);
- } else {
- data.allow_message_editing = true;
- data.message_content_edit_limit_seconds =
- settings_config.msg_edit_limit_dropdown_values.get(
- edit_limit_setting_value,
- ).seconds;
- }
- const delete_limit_setting_value = $("#id_realm_msg_delete_limit_setting").val();
- if (delete_limit_setting_value === "never") {
- data.allow_message_deleting = false;
- } else if (delete_limit_setting_value === "custom_limit") {
- data.message_content_delete_limit_seconds = parse_time_limit(
- $("#id_realm_message_content_delete_limit_minutes"),
+ data.signup_notifications_stream_id = Number.parseInt(
+ signup_notifications_stream_widget.value(),
+ 10,
);
- // Disable deleting if the parsed time limit is 0 seconds
- data.allow_message_deleting = Boolean(data.message_content_delete_limit_seconds);
- } else {
- data.allow_message_deleting = true;
- data.message_content_delete_limit_seconds =
- settings_config.msg_delete_limit_dropdown_values.get(
- delete_limit_setting_value,
- ).seconds;
+ break;
+ case "message_retention": {
+ const message_retention_setting_value = $(
+ "#id_realm_message_retention_setting",
+ ).val();
+ if (message_retention_setting_value === "retain_forever") {
+ data.message_retention_days = JSON.stringify("forever");
+ } else {
+ data.message_retention_days = JSON.stringify(
+ get_input_element_value($("#id_realm_message_retention_days")),
+ );
+ }
+ break;
}
- } else if (subsection === "notifications") {
- data.notifications_stream_id = Number.parseInt(notifications_stream_widget.value(), 10);
- data.signup_notifications_stream_id = Number.parseInt(
- signup_notifications_stream_widget.value(),
- 10,
- );
- } else if (subsection === "message_retention") {
- const message_retention_setting_value = $("#id_realm_message_retention_setting").val();
- if (message_retention_setting_value === "retain_forever") {
- data.message_retention_days = JSON.stringify("forever");
- } else {
- data.message_retention_days = JSON.stringify(
- get_input_element_value($("#id_realm_message_retention_days")),
- );
+ case "other_settings": {
+ const code_block_language_value = default_code_language_widget.value();
+ // No need to JSON-encode, since this value is already a string.
+ data.default_code_block_language = code_block_language_value;
+ break;
}
- } else if (subsection === "other_settings") {
- const code_block_language_value = default_code_language_widget.value();
- // No need to JSON-encode, since this value is already a string.
- data.default_code_block_language = code_block_language_value;
- } else if (subsection === "other_permissions") {
- const add_emoji_permission = $("#id_realm_add_emoji_by_admins_only").val();
+ case "other_permissions": {
+ const add_emoji_permission = $("#id_realm_add_emoji_by_admins_only").val();
+ switch (add_emoji_permission) {
+ case "by_admins_only":
+ data.add_emoji_by_admins_only = true;
+ break;
+ case "by_anyone":
+ data.add_emoji_by_admins_only = false;
+ break;
+ }
+ break;
+ }
+ case "org_join": {
+ const org_join_restrictions = $("#id_realm_org_join_restrictions").val();
+ switch (org_join_restrictions) {
+ case "only_selected_domain":
+ data.emails_restricted_to_domains = true;
+ data.disallow_disposable_email_addresses = false;
+ break;
+ case "no_disposable_email":
+ data.emails_restricted_to_domains = false;
+ data.disallow_disposable_email_addresses = true;
+ break;
+ case "no_restriction":
+ data.disallow_disposable_email_addresses = false;
+ data.emails_restricted_to_domains = false;
+ break;
+ }
- if (add_emoji_permission === "by_admins_only") {
- data.add_emoji_by_admins_only = true;
- } else if (add_emoji_permission === "by_anyone") {
- data.add_emoji_by_admins_only = false;
- }
- } else if (subsection === "org_join") {
- const org_join_restrictions = $("#id_realm_org_join_restrictions").val();
- if (org_join_restrictions === "only_selected_domain") {
- data.emails_restricted_to_domains = true;
- data.disallow_disposable_email_addresses = false;
- } else if (org_join_restrictions === "no_disposable_email") {
- data.emails_restricted_to_domains = false;
- data.disallow_disposable_email_addresses = true;
- } else if (org_join_restrictions === "no_restriction") {
- data.disallow_disposable_email_addresses = false;
- data.emails_restricted_to_domains = false;
- }
+ const user_invite_restriction = $("#id_realm_user_invite_restriction").val();
+ switch (user_invite_restriction) {
+ case "no_invite_required":
+ data.invite_required = false;
+ data.invite_to_realm_policy =
+ settings_config.common_policy_values.by_members.code;
+ break;
+ case "no_invite_required_by_admins_only":
+ data.invite_required = false;
+ data.invite_to_realm_policy =
+ settings_config.common_policy_values.by_admins_only.code;
+ break;
+ case "no_invite_required_by_moderators_only":
+ data.invite_required = false;
+ data.invite_to_realm_policy =
+ settings_config.common_policy_values.by_moderators_only.code;
+ break;
+ case "no_invite_required_by_full_members":
+ data.invite_required = false;
+ data.invite_to_realm_policy =
+ settings_config.common_policy_values.by_full_members.code;
+ break;
+ case "by_admins_only":
+ data.invite_required = true;
+ data.invite_to_realm_policy =
+ settings_config.common_policy_values.by_admins_only.code;
+ break;
+ case "by_moderators_only":
+ data.invite_required = true;
+ data.invite_to_realm_policy =
+ settings_config.common_policy_values.by_moderators_only.code;
+ break;
+ case "by_full_members":
+ data.invite_required = true;
+ data.invite_to_realm_policy =
+ settings_config.common_policy_values.by_full_members.code;
+ break;
+ default:
+ data.invite_required = true;
+ data.invite_to_realm_policy =
+ settings_config.common_policy_values.by_members.code;
+ }
- const user_invite_restriction = $("#id_realm_user_invite_restriction").val();
- if (user_invite_restriction === "no_invite_required") {
- data.invite_required = false;
- data.invite_to_realm_policy = settings_config.common_policy_values.by_members.code;
- } else if (user_invite_restriction === "no_invite_required_by_admins_only") {
- data.invite_required = false;
- data.invite_to_realm_policy =
- settings_config.common_policy_values.by_admins_only.code;
- } else if (user_invite_restriction === "no_invite_required_by_moderators_only") {
- data.invite_required = false;
- data.invite_to_realm_policy =
- settings_config.common_policy_values.by_moderators_only.code;
- } else if (user_invite_restriction === "no_invite_required_by_full_members") {
- data.invite_required = false;
- data.invite_to_realm_policy =
- settings_config.common_policy_values.by_full_members.code;
- } else if (user_invite_restriction === "by_admins_only") {
- data.invite_required = true;
- data.invite_to_realm_policy =
- settings_config.common_policy_values.by_admins_only.code;
- } else if (user_invite_restriction === "by_moderators_only") {
- data.invite_required = true;
- data.invite_to_realm_policy =
- settings_config.common_policy_values.by_moderators_only.code;
- } else if (user_invite_restriction === "by_full_members") {
- data.invite_required = true;
- data.invite_to_realm_policy =
- settings_config.common_policy_values.by_full_members.code;
- } else {
- data.invite_required = true;
- data.invite_to_realm_policy = settings_config.common_policy_values.by_members.code;
+ const waiting_period_threshold = $("#id_realm_waiting_period_setting").val();
+ switch (waiting_period_threshold) {
+ case "none":
+ data.waiting_period_threshold = 0;
+ break;
+ case "three_days":
+ data.waiting_period_threshold = 3;
+ break;
+ case "custom_days":
+ data.waiting_period_threshold = $(
+ "#id_realm_waiting_period_threshold",
+ ).val();
+ break;
+ }
+ break;
}
-
- const waiting_period_threshold = $("#id_realm_waiting_period_setting").val();
- if (waiting_period_threshold === "none") {
- data.waiting_period_threshold = 0;
- } else if (waiting_period_threshold === "three_days") {
- data.waiting_period_threshold = 3;
- } else if (waiting_period_threshold === "custom_days") {
- data.waiting_period_threshold = $("#id_realm_waiting_period_threshold").val();
+ case "auth_settings":
+ data = {};
+ data.authentication_methods = JSON.stringify(get_auth_method_table_data());
+ break;
+ case "user_defaults": {
+ const realm_default_twenty_four_hour_time = $(
+ "#id_realm_default_twenty_four_hour_time",
+ ).val();
+ data.default_twenty_four_hour_time = realm_default_twenty_four_hour_time;
+ break;
}
- } else if (subsection === "auth_settings") {
- data = {};
- data.authentication_methods = JSON.stringify(get_auth_method_table_data());
- } else if (subsection === "user_defaults") {
- const realm_default_twenty_four_hour_time = $(
- "#id_realm_default_twenty_four_hour_time",
- ).val();
- data.default_twenty_four_hour_time = realm_default_twenty_four_hour_time;
}
return data;
}