From 96d6bf28dbddada6c621a013dbe7144865eb4e99 Mon Sep 17 00:00:00 2001 From: Sahil Batra Date: Tue, 17 Aug 2021 18:13:29 +0530 Subject: [PATCH] settings: Add UI for realm-level defaults of display settings. This commit adds a new module settings_defaults.js which calls the functions in settings_display passing appropriate container element and settings object as parameters. We also add one more parameter for_realm_settings to some of the functions in settings_dislay to differentiate between the user and realm-level settings. --- static/js/admin.js | 7 ++ static/js/settings_display.js | 84 ++++++++++--------- .../settings_realm_user_settings_defaults.js | 9 ++ static/js/settings_sections.js | 7 +- static/templates/settings/admin_tab.hbs | 2 + .../organization_user_settings_defaults.hbs | 6 ++ static/templates/settings_overlay.hbs | 7 ++ tools/test-js-with-node | 1 + 8 files changed, 83 insertions(+), 40 deletions(-) create mode 100644 static/js/settings_realm_user_settings_defaults.js create mode 100644 static/templates/settings/organization_user_settings_defaults.hbs diff --git a/static/js/admin.js b/static/js/admin.js index 216ca4e4eb..6cdb3f9c24 100644 --- a/static/js/admin.js +++ b/static/js/admin.js @@ -6,6 +6,7 @@ import render_settings_organization_settings_tip from "../templates/settings/org import {$t, language_list} from "./i18n"; import * as overlays from "./overlays"; import {page_params} from "./page_params"; +import {realm_user_settings_defaults} from "./realm_user_settings_defaults"; import * as settings from "./settings"; import * as settings_bots from "./settings_bots"; import * as settings_config from "./settings_config"; @@ -123,6 +124,12 @@ export function build_page() { can_edit_user_groups: settings_data.user_can_edit_user_groups(), policy_values: settings_config.common_policy_values, ...settings_org.get_organization_settings_options(), + demote_inactive_streams_values: settings_config.demote_inactive_streams_values, + color_scheme_values: settings_config.color_scheme_values, + default_view_values: settings_config.default_view_values, + settings_object: realm_user_settings_defaults, + display_settings: settings_config.get_all_display_settings(), + settings_label: settings_config.display_settings_labels, }; if (options.realm_logo_source !== "D" && options.realm_night_logo_source === "D") { diff --git a/static/js/settings_display.js b/static/js/settings_display.js index 2541113bff..ae052922ce 100644 --- a/static/js/settings_display.js +++ b/static/js/settings_display.js @@ -38,10 +38,14 @@ function change_display_setting(data, container, url, status_element, success_ms settings_ui.do_settings_change(channel.patch, url, data, $status_el, opts); } -export function set_up(container, settings_object) { +export function set_up(container, settings_object, for_realm_settings) { meta.loaded = true; - const language_modal_elem = "#user_default_language_modal"; - const patch_url = "/json/settings"; + let language_modal_elem = "#user_default_language_modal"; + let patch_url = "/json/settings"; + if (for_realm_settings) { + language_modal_elem = "#realm_default_language_modal"; + patch_url = "/json/realm/user_settings_defaults"; + } container.find(".display-settings-status").hide(); @@ -90,41 +94,48 @@ export function set_up(container, settings_object) { }); } - $(language_modal_elem) - .find(".language") - .on("click", (e) => { + if (!for_realm_settings) { + $(language_modal_elem) + .find(".language") + .on("click", (e) => { + e.preventDefault(); + e.stopPropagation(); + overlays.close_modal(language_modal_elem); + + const $link = $(e.target).closest("a[data-code]"); + const setting_value = $link.attr("data-code"); + const data = {default_language: setting_value}; + + const new_language = $link.attr("data-name"); + container.find(".default_language_name").text(new_language); + + change_display_setting( + data, + container, + patch_url, + ".language-settings-status", + $t_html( + { + defaultMessage: + "Saved. Please reload for the change to take effect.", + }, + {"z-link": (content_html) => `${content_html}`}, + ), + true, + ); + }); + + container.find(".setting_default_language").on("click", (e) => { e.preventDefault(); e.stopPropagation(); - overlays.close_modal(language_modal_elem); - - const $link = $(e.target).closest("a[data-code]"); - const setting_value = $link.attr("data-code"); - const data = {default_language: setting_value}; - - const new_language = $link.attr("data-name"); - container.find(".default_language_name").text(new_language); - - change_display_setting( - data, - container, - patch_url, - ".language-settings-status", - $t_html( - { - defaultMessage: - "Saved. Please reload for the change to take effect.", - }, - {"z-link": (content_html) => `${content_html}`}, - ), - true, - ); + overlays.open_modal(language_modal_elem); }); - container.find(".setting_default_language").on("click", (e) => { - e.preventDefault(); - e.stopPropagation(); - overlays.open_modal(language_modal_elem); - }); + container.find(".setting_twenty_four_hour_time").on("change", function () { + const data = {twenty_four_hour_time: this.value}; + change_display_setting(data, container, patch_url, ".time-settings-status"); + }); + } container.find(".setting_demote_inactive_streams").on("change", function () { const data = {demote_inactive_streams: this.value}; @@ -145,11 +156,6 @@ export function set_up(container, settings_object) { window.location.reload(); }); - container.find(".setting_twenty_four_hour_time").on("change", function () { - const data = {twenty_four_hour_time: this.value}; - change_display_setting(data, container, patch_url, ".time-settings-status"); - }); - container.find(".setting_emojiset_choice").on("click", function () { const data = {emojiset: $(this).val()}; const current_emojiset = settings_object.emojiset; diff --git a/static/js/settings_realm_user_settings_defaults.js b/static/js/settings_realm_user_settings_defaults.js new file mode 100644 index 0000000000..e2f07005af --- /dev/null +++ b/static/js/settings_realm_user_settings_defaults.js @@ -0,0 +1,9 @@ +import $ from "jquery"; + +import {realm_user_settings_defaults} from "./realm_user_settings_defaults"; +import * as settings_display from "./settings_display"; + +export function set_up() { + const container = $("#realm-user-default-settings"); + settings_display.set_up(container, realm_user_settings_defaults, true); +} diff --git a/static/js/settings_sections.js b/static/js/settings_sections.js index 53a10f44d2..157175dc8f 100644 --- a/static/js/settings_sections.js +++ b/static/js/settings_sections.js @@ -16,6 +16,7 @@ import * as settings_notifications from "./settings_notifications"; import * as settings_org from "./settings_org"; import * as settings_playgrounds from "./settings_playgrounds"; import * as settings_profile_fields from "./settings_profile_fields"; +import * as settings_realm_user_settings_defaults from "./settings_realm_user_settings_defaults"; import * as settings_streams from "./settings_streams"; import * as settings_user_groups from "./settings_user_groups"; import * as settings_users from "./settings_users"; @@ -54,7 +55,7 @@ export function initialize() { // personal load_func_dict.set("your-account", settings_account.set_up); load_func_dict.set("display-settings", () => { - settings_display.set_up($("#user-display-settings"), user_settings); + settings_display.set_up($("#user-display-settings"), user_settings, false); }); load_func_dict.set("notifications", settings_notifications.set_up); load_func_dict.set("your-bots", settings_bots.set_up); @@ -75,6 +76,10 @@ export function initialize() { load_func_dict.set("user-groups-admin", settings_user_groups.set_up); load_func_dict.set("profile-field-settings", settings_profile_fields.set_up); load_func_dict.set("data-exports-admin", settings_exports.set_up); + load_func_dict.set( + "organization-level-user-defaults", + settings_realm_user_settings_defaults.set_up, + ); } export function load_settings_section(section) { diff --git a/static/templates/settings/admin_tab.hbs b/static/templates/settings/admin_tab.hbs index 46761ec028..5548ad101e 100644 --- a/static/templates/settings/admin_tab.hbs +++ b/static/templates/settings/admin_tab.hbs @@ -9,6 +9,8 @@ {{> organization_permissions_admin }} +{{> organization_user_settings_defaults }} + {{> emoji_settings_admin }} {{> user_list_admin }} diff --git a/static/templates/settings/organization_user_settings_defaults.hbs b/static/templates/settings/organization_user_settings_defaults.hbs new file mode 100644 index 0000000000..3d09a247e7 --- /dev/null +++ b/static/templates/settings/organization_user_settings_defaults.hbs @@ -0,0 +1,6 @@ +
+
+ {{t "Configure the default personal preference settings for new users joining your organization." }} +
+ {{> display_settings prefix="realm_" for_realm_settings=true}} +
diff --git a/static/templates/settings_overlay.hbs b/static/templates/settings_overlay.hbs index 23e6187522..cff285629c 100644 --- a/static/templates/settings_overlay.hbs +++ b/static/templates/settings_overlay.hbs @@ -75,6 +75,13 @@ {{/unless}} +
  • + +
    {{t "Default user settings" }}
    + {{#unless is_admin}} + + {{/unless}} +
  • {{t "Custom emoji" }}
    diff --git a/tools/test-js-with-node b/tools/test-js-with-node index 67cea4fc00..a39bb5d76d 100755 --- a/tools/test-js-with-node +++ b/tools/test-js-with-node @@ -142,6 +142,7 @@ EXEMPT_FILES = { "static/js/settings_org.js", "static/js/settings_panel_menu.js", "static/js/settings_profile_fields.js", + "static/js/settings_realm_user_settings_defaults.js", "static/js/settings_sections.js", "static/js/settings_streams.js", "static/js/settings_toggle.js",