mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			475 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			475 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {$t} from "./i18n";
 | 
						|
import {page_params} from "./page_params";
 | 
						|
 | 
						|
/*
 | 
						|
    This file contains translations between the integer values used in
 | 
						|
    the Zulip API to describe values in dropdowns, radio buttons, and
 | 
						|
    similar widgets and the user-facing strings that should be used to
 | 
						|
    describe them, as well as data details like sort orders that may
 | 
						|
    be useful for some widgets.
 | 
						|
 | 
						|
    We plan to eventually transition much of this file to have a more
 | 
						|
    standard format and then to be populated using data sent from the
 | 
						|
    Zulip server in `page_params`, so that the data is available for
 | 
						|
    other parts of the ecosystem to use (including the mobile apps and
 | 
						|
    API documentation) without a ton of copying.
 | 
						|
*/
 | 
						|
 | 
						|
export const demote_inactive_streams_values = {
 | 
						|
    automatic: {
 | 
						|
        code: 1,
 | 
						|
        description: $t({defaultMessage: "Automatic"}),
 | 
						|
    },
 | 
						|
    always: {
 | 
						|
        code: 2,
 | 
						|
        description: $t({defaultMessage: "Always"}),
 | 
						|
    },
 | 
						|
    never: {
 | 
						|
        code: 3,
 | 
						|
        description: $t({defaultMessage: "Never"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
export const default_view_values = {
 | 
						|
    recent_topics: {
 | 
						|
        code: "recent_topics",
 | 
						|
        description: $t({defaultMessage: "Recent topics"}),
 | 
						|
    },
 | 
						|
    all_messages: {
 | 
						|
        code: "all_messages",
 | 
						|
        description: $t({defaultMessage: "All messages"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
export const color_scheme_values = {
 | 
						|
    automatic: {
 | 
						|
        code: 1,
 | 
						|
        description: $t({defaultMessage: "Automatic"}),
 | 
						|
    },
 | 
						|
    night: {
 | 
						|
        code: 2,
 | 
						|
        description: $t({defaultMessage: "Night mode"}),
 | 
						|
    },
 | 
						|
    day: {
 | 
						|
        code: 3,
 | 
						|
        description: $t({defaultMessage: "Day mode"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
export const twenty_four_hour_time_values = {
 | 
						|
    twenty_four_hour_clock: {
 | 
						|
        value: true,
 | 
						|
        description: $t({defaultMessage: "24-hour clock (17:00)"}),
 | 
						|
    },
 | 
						|
    twelve_hour_clock: {
 | 
						|
        value: false,
 | 
						|
        description: $t({defaultMessage: "12-hour clock (5:00 PM)"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
export const get_all_display_settings = () => ({
 | 
						|
    settings: {
 | 
						|
        user_display_settings: [
 | 
						|
            "dense_mode",
 | 
						|
            "high_contrast_mode",
 | 
						|
            "left_side_userlist",
 | 
						|
            "starred_message_counts",
 | 
						|
            "fluid_layout_width",
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    render_only: {
 | 
						|
        high_contrast_mode: page_params.development_environment,
 | 
						|
        dense_mode: page_params.development_environment,
 | 
						|
    },
 | 
						|
});
 | 
						|
 | 
						|
export const email_address_visibility_values = {
 | 
						|
    everyone: {
 | 
						|
        code: 1,
 | 
						|
        description: $t({defaultMessage: "Admins, members, and guests"}),
 | 
						|
    },
 | 
						|
    // // Backend support for this configuration is not available yet.
 | 
						|
    // admins_and_members: {
 | 
						|
    //     code: 2,
 | 
						|
    //     description: $t({defaultMessage: "Members and admins"}),
 | 
						|
    // },
 | 
						|
    admins_only: {
 | 
						|
        code: 3,
 | 
						|
        description: $t({defaultMessage: "Admins only"}),
 | 
						|
    },
 | 
						|
    nobody: {
 | 
						|
        code: 4,
 | 
						|
        description: $t({defaultMessage: "Nobody"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
export const create_stream_policy_values = {
 | 
						|
    by_admins_only: {
 | 
						|
        order: 1,
 | 
						|
        code: 2,
 | 
						|
        description: $t({defaultMessage: "Admins"}),
 | 
						|
    },
 | 
						|
    by_full_members: {
 | 
						|
        order: 2,
 | 
						|
        code: 3,
 | 
						|
        description: $t({defaultMessage: "Admins and full members"}),
 | 
						|
    },
 | 
						|
    by_members: {
 | 
						|
        order: 3,
 | 
						|
        code: 1,
 | 
						|
        description: $t({defaultMessage: "Admins and members"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
export const invite_to_stream_policy_values = create_stream_policy_values;
 | 
						|
 | 
						|
export const invite_to_realm_policy_values = {
 | 
						|
    by_members: 1,
 | 
						|
    by_admins_only: 2,
 | 
						|
};
 | 
						|
 | 
						|
export const user_group_edit_policy_values = {
 | 
						|
    by_admins_only: {
 | 
						|
        order: 1,
 | 
						|
        code: 2,
 | 
						|
        description: $t({defaultMessage: "Admins"}),
 | 
						|
    },
 | 
						|
    by_members: {
 | 
						|
        order: 2,
 | 
						|
        code: 1,
 | 
						|
        description: $t({defaultMessage: "Admins and members"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
export const private_message_policy_values = {
 | 
						|
    by_anyone: {
 | 
						|
        order: 1,
 | 
						|
        code: 1,
 | 
						|
        description: $t({defaultMessage: "Admins, members, and guests"}),
 | 
						|
    },
 | 
						|
    disabled: {
 | 
						|
        order: 2,
 | 
						|
        code: 2,
 | 
						|
        description: $t({defaultMessage: "Private messages disabled"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
export const wildcard_mention_policy_values = {
 | 
						|
    by_everyone: {
 | 
						|
        order: 1,
 | 
						|
        code: 1,
 | 
						|
        description: $t({defaultMessage: "Admins, members and guests"}),
 | 
						|
    },
 | 
						|
    by_members: {
 | 
						|
        order: 2,
 | 
						|
        code: 2,
 | 
						|
        description: $t({defaultMessage: "Admins and members"}),
 | 
						|
    },
 | 
						|
    by_full_members: {
 | 
						|
        order: 3,
 | 
						|
        code: 3,
 | 
						|
        description: $t({defaultMessage: "Admins and full members"}),
 | 
						|
    },
 | 
						|
    // Until we add stream administrators, we mislabel this choice
 | 
						|
    // (which we intend to be the long-term default) as "Admins only"
 | 
						|
    // and don't offer the long-term "Admins only" option.
 | 
						|
    by_stream_admins_only: {
 | 
						|
        order: 4,
 | 
						|
        code: 4,
 | 
						|
        //  description: $t({defaultMessage: "Organization and stream admins"}),
 | 
						|
        description: $t({defaultMessage: "Admins only"}),
 | 
						|
    },
 | 
						|
    // by_admins_only: {
 | 
						|
    //     order: 5,
 | 
						|
    //     code: 5,
 | 
						|
    //     description: $t({defaultMessage: "Admins only"}),
 | 
						|
    // },
 | 
						|
    nobody: {
 | 
						|
        order: 6,
 | 
						|
        code: 6,
 | 
						|
        description: $t({defaultMessage: "Nobody"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
const time_limit_dropdown_values = new Map([
 | 
						|
    [
 | 
						|
        "any_time",
 | 
						|
        {
 | 
						|
            text: $t({defaultMessage: "Any time"}),
 | 
						|
            seconds: 0,
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    [
 | 
						|
        "never",
 | 
						|
        {
 | 
						|
            text: $t({defaultMessage: "Never"}),
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    [
 | 
						|
        "upto_two_min",
 | 
						|
        {
 | 
						|
            text: $t(
 | 
						|
                {defaultMessage: "Up to {time_limit} after posting"},
 | 
						|
                {time_limit: $t({defaultMessage: "2 minutes"})},
 | 
						|
            ),
 | 
						|
            seconds: 2 * 60,
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    [
 | 
						|
        "upto_ten_min",
 | 
						|
        {
 | 
						|
            text: $t(
 | 
						|
                {defaultMessage: "Up to {time_limit} after posting"},
 | 
						|
                {time_limit: $t({defaultMessage: "10 minutes"})},
 | 
						|
            ),
 | 
						|
            seconds: 10 * 60,
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    [
 | 
						|
        "upto_one_hour",
 | 
						|
        {
 | 
						|
            text: $t(
 | 
						|
                {defaultMessage: "Up to {time_limit} after posting"},
 | 
						|
                {time_limit: $t({defaultMessage: "1 hour"})},
 | 
						|
            ),
 | 
						|
            seconds: 60 * 60,
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    [
 | 
						|
        "upto_one_day",
 | 
						|
        {
 | 
						|
            text: $t(
 | 
						|
                {defaultMessage: "Up to {time_limit} after posting"},
 | 
						|
                {time_limit: $t({defaultMessage: "1 day"})},
 | 
						|
            ),
 | 
						|
            seconds: 24 * 60 * 60,
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    [
 | 
						|
        "upto_one_week",
 | 
						|
        {
 | 
						|
            text: $t(
 | 
						|
                {defaultMessage: "Up to {time_limit} after posting"},
 | 
						|
                {time_limit: $t({defaultMessage: "1 week"})},
 | 
						|
            ),
 | 
						|
            seconds: 7 * 24 * 60 * 60,
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    [
 | 
						|
        "custom_limit",
 | 
						|
        {
 | 
						|
            text: $t({defaultMessage: "Up to N minutes after posting"}),
 | 
						|
        },
 | 
						|
    ],
 | 
						|
]);
 | 
						|
export const msg_edit_limit_dropdown_values = time_limit_dropdown_values;
 | 
						|
export const msg_delete_limit_dropdown_values = time_limit_dropdown_values;
 | 
						|
export const retain_message_forever = -1;
 | 
						|
 | 
						|
export const user_role_values = {
 | 
						|
    guest: {
 | 
						|
        code: 600,
 | 
						|
        description: $t({defaultMessage: "Guest"}),
 | 
						|
    },
 | 
						|
    member: {
 | 
						|
        code: 400,
 | 
						|
        description: $t({defaultMessage: "Member"}),
 | 
						|
    },
 | 
						|
    admin: {
 | 
						|
        code: 200,
 | 
						|
        description: $t({defaultMessage: "Administrator"}),
 | 
						|
    },
 | 
						|
    owner: {
 | 
						|
        code: 100,
 | 
						|
        description: $t({defaultMessage: "Owner"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
const user_role_array = Object.values(user_role_values);
 | 
						|
export const user_role_map = new Map(user_role_array.map((role) => [role.code, role.description]));
 | 
						|
 | 
						|
// NOTIFICATIONS
 | 
						|
 | 
						|
export const general_notifications_table_labels = {
 | 
						|
    realm: [
 | 
						|
        /* An array of notification settings of any category like
 | 
						|
         * `stream_notification_settings` which makes a single row of
 | 
						|
         * "Notification triggers" table should follow this order
 | 
						|
         */
 | 
						|
        "visual",
 | 
						|
        "audio",
 | 
						|
        "mobile",
 | 
						|
        "email",
 | 
						|
        "all_mentions",
 | 
						|
    ],
 | 
						|
    stream: {
 | 
						|
        is_muted: $t({defaultMessage: "Mute stream"}),
 | 
						|
        desktop_notifications: $t({defaultMessage: "Visual desktop notifications"}),
 | 
						|
        audible_notifications: $t({defaultMessage: "Audible desktop notifications"}),
 | 
						|
        push_notifications: $t({defaultMessage: "Mobile notifications"}),
 | 
						|
        email_notifications: $t({defaultMessage: "Email notifications"}),
 | 
						|
        pin_to_top: $t({defaultMessage: "Pin stream to top of left sidebar"}),
 | 
						|
        wildcard_mentions_notify: $t({defaultMessage: "Notifications for @all/@everyone mentions"}),
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
export const stream_specific_notification_settings = [
 | 
						|
    "desktop_notifications",
 | 
						|
    "audible_notifications",
 | 
						|
    "push_notifications",
 | 
						|
    "email_notifications",
 | 
						|
    "wildcard_mentions_notify",
 | 
						|
];
 | 
						|
 | 
						|
export const stream_notification_settings = [
 | 
						|
    "enable_stream_desktop_notifications",
 | 
						|
    "enable_stream_audible_notifications",
 | 
						|
    "enable_stream_push_notifications",
 | 
						|
    "enable_stream_email_notifications",
 | 
						|
    "wildcard_mentions_notify",
 | 
						|
];
 | 
						|
 | 
						|
const pm_mention_notification_settings = [
 | 
						|
    "enable_desktop_notifications",
 | 
						|
    "enable_sounds",
 | 
						|
    "enable_offline_push_notifications",
 | 
						|
    "enable_offline_email_notifications",
 | 
						|
];
 | 
						|
 | 
						|
const desktop_notification_settings = ["pm_content_in_desktop_notifications"];
 | 
						|
 | 
						|
const mobile_notification_settings = ["enable_online_push_notifications"];
 | 
						|
 | 
						|
const email_notification_settings = [
 | 
						|
    "enable_digest_emails",
 | 
						|
    "enable_login_emails",
 | 
						|
    "message_content_in_email_notifications",
 | 
						|
    "realm_name_in_notifications",
 | 
						|
];
 | 
						|
 | 
						|
const presence_notification_settings = ["presence_enabled"];
 | 
						|
 | 
						|
const other_notification_settings = desktop_notification_settings.concat(
 | 
						|
    ["desktop_icon_count_display"],
 | 
						|
    mobile_notification_settings,
 | 
						|
    email_notification_settings,
 | 
						|
    presence_notification_settings,
 | 
						|
    ["notification_sound"],
 | 
						|
);
 | 
						|
 | 
						|
export const all_notification_settings = other_notification_settings.concat(
 | 
						|
    pm_mention_notification_settings,
 | 
						|
    stream_notification_settings,
 | 
						|
);
 | 
						|
 | 
						|
export function get_notifications_table_row_data(notify_settings) {
 | 
						|
    return general_notifications_table_labels.realm.map((column, index) => {
 | 
						|
        const setting_name = notify_settings[index];
 | 
						|
        if (setting_name === undefined) {
 | 
						|
            return {
 | 
						|
                setting_name: "",
 | 
						|
                is_disabled: true,
 | 
						|
                is_checked: false,
 | 
						|
            };
 | 
						|
        }
 | 
						|
        const checkbox = {
 | 
						|
            setting_name,
 | 
						|
            is_disabled: false,
 | 
						|
        };
 | 
						|
        if (column === "mobile") {
 | 
						|
            checkbox.is_disabled = !page_params.realm_push_notifications_enabled;
 | 
						|
        }
 | 
						|
        checkbox.is_checked = page_params[setting_name];
 | 
						|
        return checkbox;
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
export const all_notifications = () => ({
 | 
						|
    general_settings: [
 | 
						|
        {
 | 
						|
            label: $t({defaultMessage: "Streams"}),
 | 
						|
            notification_settings: get_notifications_table_row_data(stream_notification_settings),
 | 
						|
        },
 | 
						|
        {
 | 
						|
            label: $t({defaultMessage: "PMs, mentions, and alerts"}),
 | 
						|
            notification_settings: get_notifications_table_row_data(
 | 
						|
                pm_mention_notification_settings,
 | 
						|
            ),
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    settings: {
 | 
						|
        desktop_notification_settings,
 | 
						|
        mobile_notification_settings,
 | 
						|
        email_notification_settings,
 | 
						|
        presence_notification_settings,
 | 
						|
    },
 | 
						|
    show_push_notifications_tooltip: {
 | 
						|
        push_notifications: !page_params.realm_push_notifications_enabled,
 | 
						|
        enable_online_push_notifications: !page_params.realm_push_notifications_enabled,
 | 
						|
    },
 | 
						|
});
 | 
						|
 | 
						|
const map_language_to_playground_info = {
 | 
						|
    // TODO: This is being hardcoded just for the prototype, post which we should
 | 
						|
    // add support for realm admins to configure their own choices. The keys here
 | 
						|
    // are the pygment lexer subclass names for the different language alias it
 | 
						|
    // supports.
 | 
						|
    Rust: [
 | 
						|
        {
 | 
						|
            name: "Rust playground",
 | 
						|
            url_prefix: "https://play.rust-lang.org/?edition=2018&code=",
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    Julia: [
 | 
						|
        {
 | 
						|
            name: "Julia playground",
 | 
						|
            url_prefix: "https://repl.it/languages/julia/?code=",
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    Python: [
 | 
						|
        {
 | 
						|
            name: "Python 3 playground",
 | 
						|
            url_prefix: "https://repl.it/languages/python3/?code=",
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    "Python 2.7": [
 | 
						|
        {
 | 
						|
            name: "Python 2.7 playground",
 | 
						|
            url_prefix: "https://repl.it/languages/python/?code=",
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    JavaScript: [
 | 
						|
        {
 | 
						|
            name: "JavaScript playground",
 | 
						|
            url_prefix: "https://repl.it/languages/javascript/?code=",
 | 
						|
        },
 | 
						|
    ],
 | 
						|
    Lean: [
 | 
						|
        {
 | 
						|
            name: "Lean playground",
 | 
						|
            url_prefix: "https://leanprover.github.io/live/latest/#code=",
 | 
						|
        },
 | 
						|
        {
 | 
						|
            name: "Lean community playground",
 | 
						|
            url_prefix: "https://leanprover-community.github.io/lean-web-editor/#code=",
 | 
						|
        },
 | 
						|
    ],
 | 
						|
};
 | 
						|
 | 
						|
export const get_playground_info_for_languages = (lang) => map_language_to_playground_info[lang];
 | 
						|
 | 
						|
export const desktop_icon_count_display_values = {
 | 
						|
    messages: {
 | 
						|
        code: 1,
 | 
						|
        description: $t({defaultMessage: "All unreads"}),
 | 
						|
    },
 | 
						|
    notifiable: {
 | 
						|
        code: 2,
 | 
						|
        description: $t({defaultMessage: "Private messages and mentions"}),
 | 
						|
    },
 | 
						|
    none: {
 | 
						|
        code: 3,
 | 
						|
        description: $t({defaultMessage: "None"}),
 | 
						|
    },
 | 
						|
};
 |