mirror of https://github.com/zulip/zulip.git
eslint: Fix unicorn/prefer-switch.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
parent
04569bc17e
commit
5ca763fc24
|
@ -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}],
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -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(
|
||||
"<!DOCTYPE html><style>iframe{position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box}</style>" +
|
||||
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(
|
||||
"<!DOCTYPE html><style>iframe{position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box}</style>" +
|
||||
payload.source,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
const iframe = $("<iframe></iframe>");
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue