mirror of https://github.com/zulip/zulip.git
412 lines
17 KiB
Handlebars
412 lines
17 KiB
Handlebars
<h1><i class="icon-vector-wrench settings-icon"></i>{{t "Settings" }}</h1>
|
|
|
|
<div id="settings-change-box">
|
|
|
|
<div class="alert" id="settings-status"></div>
|
|
|
|
<div id="account-settings" class="settings-section">
|
|
<div class="settings-section-title"><i class="icon-vector-user settings-section-icon"></i>{{t "Your Account" }}</div>
|
|
<div class="account-settings-form">
|
|
<form action="/json/settings/change" method="post"
|
|
class="form-horizontal your-account-settings">
|
|
<div class="control-group" id="name_change_container">
|
|
<label for="full_name" class="control-label">{{t "Full name" }}</label>
|
|
<div class="controls">
|
|
<input type="text" name="full_name" id="full_name"
|
|
value="{{ page_params.fullname }}" />
|
|
</div>
|
|
</div>
|
|
|
|
{{#if page_params.password_auth_enabled}}
|
|
<div class="control-group" id="pw_change_link">
|
|
<label for="change_password_button" class="control-label">{{t "Password" }}</label>
|
|
<div class="controls">
|
|
<button class="btn btn-default change_password_button" data-dismiss="modal" aria-hidden="true">{{t "Change Password" }}</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="pw_change_controls">
|
|
<div class="control-group">
|
|
<label for="old_password" class="control-label">{{t "Old password" }}</label>
|
|
<div class="controls">
|
|
<input type="password" autocomplete="off"
|
|
name="old_password" id="old_password" value="" />
|
|
(<a href="/accounts/password/reset/" target="_blank">{{t "Forgotten it?" }}</a>)
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label for="new_password" class="control-label">{{t "New password" }}</label>
|
|
<div class="controls">
|
|
<input type="password" autocomplete="off"
|
|
name="new_password" id="new_password" value="" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label class="control-label">{{t "Password strength" }}</label>
|
|
<div class="controls">
|
|
<div class="progress" id="pw_strength">
|
|
<div class="bar bar-danger fade" style="width: 10%;"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label for="confirm_password" class="control-label">{{t "Confirm password" }}</label>
|
|
<div class="controls">
|
|
<input type="password" autocomplete="off"
|
|
name="confirm_password" id="confirm_password" value="" />
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
{{/if}}
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="submit" name="change_settings"
|
|
value="{{t 'Save changes' }}" class="btn btn-big btn-primary" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="user-avatar-section">
|
|
<p>
|
|
<img id="user-settings-avatar" src="{{ page_params.avatar_url }}" />
|
|
</p>
|
|
<div id="user_avatar_file_input_error" class="text-error"></div>
|
|
<div id="user_avatar_file"></div>
|
|
<input type="file" name="user_avatar_file_input" class="notvisible" id="user_avatar_file_input" value="{{t 'Upload avatar' }}" />
|
|
<div id="upload_avatar_spinner"></div>
|
|
<button class="btn btn-default" id="user_avatar_upload_button">{{t 'Customize avatar' }}</button>
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<div id="display-settings" class="settings-section">
|
|
<div class="settings-section-title"><i class="icon-vector-time settings-section-icon"></i>
|
|
{{t 'Display Settings' }}</div>
|
|
<div class="alert" id="display-settings-status"></div>
|
|
<div class="display-settings-form">
|
|
|
|
<div class="control-group">
|
|
<label for="default_language" class="control-label inline">{{t "Default Language" }}:</label>
|
|
<select name="default_language" id="default_language" class="controls">
|
|
{{#each page_params.language_list}}
|
|
<option value='{{this.code}}'>{{this.name}}</option>
|
|
{{/each}}
|
|
</select>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="left_side_userlist" id="left_side_userlist"
|
|
{{#if page_params.left_side_userlist}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="left_side_userlist" class="control-label">{{t "Display user list on left side in narrow windows." }}</label>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="twenty_four_hour_time" id="twenty_four_hour_time"
|
|
{{#if page_params.twenty_four_hour_time}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="twenty_four_hour_time" class="control-label">
|
|
{{t "Display time in 24-hour format (17:00 instead of 5:00 PM)" }}
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<div id="notification-settings" class="settings-section">
|
|
<div class="settings-section-title"><i class="icon-vector-warning-sign settings-section-icon"></i>{{t "Notifications" }}</div>
|
|
<div class="notification-reminder">{{#tr this }}You'll receive notifications when a message arrives and __page_params.product_name__ isn't in focus or the message is offscreen.{{/tr}}</div>
|
|
<div class="alert" id="notify-settings-status"></div>
|
|
<div class="notification-settings-form">
|
|
<h4>{{t "Stream messages" }}</h4>
|
|
|
|
<p>{{t "Unless I say otherwise for a particular stream, I want:" }}</p>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="enable_stream_desktop_notifications"
|
|
id="enable_stream_desktop_notifications"
|
|
{{#if page_params.stream_desktop_notifications_enabled}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="enable_stream_desktop_notifications" class="control-label">
|
|
{{t "Desktop notifications" }}
|
|
</label>
|
|
<div class="propagate_stream_notifications_change"></div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="enable_stream_sounds" id="enable_stream_sounds"
|
|
{{#if page_params.stream_sounds_enabled}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="enable_stream_sounds" class="control-label">
|
|
{{t "Audible notifications" }}
|
|
</label>
|
|
<div class="propagate_stream_notifications_change"></div>
|
|
</div>
|
|
|
|
<p class="notification-settings-note">
|
|
{{#tr this}}Change notification settings for individual streams on your <a href="/#subscriptions">Streams page</a>.{{/tr}}
|
|
</p>
|
|
|
|
<h4>{{t "Private messages and @-mentions" }}</h4>
|
|
|
|
<p>{{t "I want:" }}</p>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="enable_desktop_notifications" id="enable_desktop_notifications"
|
|
{{#if page_params.desktop_notifications_enabled}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="enable_desktop_notifications" class="control-label">
|
|
{{t "Desktop notifications" }}
|
|
</label>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="enable_sounds" id="enable_sounds"
|
|
{{#if page_params.sounds_enabled}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="enable_sounds" class="control-label">
|
|
{{t "Audible notifications" }}
|
|
</label>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="enable_offline_email_notifications" id="enable_offline_email_notifications"
|
|
{{#if page_params.enable_offline_email_notifications}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="enable_offline_email_notifications" class="control-label">
|
|
{{t "Email notifications when offline" }}
|
|
</label>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="enable_offline_push_notifications" id="enable_offline_push_notifications"
|
|
{{#if page_params.enable_offline_push_notifications}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="enable_offline_push_notifications" class="control-label">
|
|
{{t "Mobile push notifications when offline" }}
|
|
</label>
|
|
</div>
|
|
|
|
<div id="other_notifications">
|
|
<h4>{{t "Other notifications" }}</h4>
|
|
|
|
<p>{{t "I want:" }}</p>
|
|
|
|
<div class="control-group" id="digest_container">
|
|
<div class="controls">
|
|
<input type="checkbox" name="enable_digest_emails" id="enable_digest_emails"
|
|
{{#if page_params.enable_digest_emails}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="enable_digest_emails" class="control-label">
|
|
{{t "Digest emails when I'm away" }}
|
|
</label>
|
|
</div>
|
|
{{!-- If you add another control group here, make sure to change
|
|
$("#other_notifications").hide(); in settings.js to
|
|
$("#digest_container").hide();
|
|
--}}
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<div class="controls notification-submission">
|
|
<input type="submit" id="change_notification_settings"
|
|
name="change_notification_settings" value="{{t 'Save changes' }}"
|
|
class="btn btn-big btn-primary" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="bot-settings" class="settings-section">
|
|
|
|
<div class="settings-section-title"><i class="icon-vector-github settings-section-icon"></i>{{t "Your Bots" }}</div>
|
|
|
|
<div class="bot-settings-form">
|
|
{{#tr this}}
|
|
<p class="bot-settings-note">Looking for our <a href="/integrations" target="_blank">Integrations</a>
|
|
or <a href="/api" target="_blank">API</a> documentation?</p>
|
|
{{/tr}}
|
|
|
|
<ol id="bots_list">
|
|
</ol>
|
|
<div id="bot_table_error" class="alert alert-error hide"></div>
|
|
<form id="create_bot_form" class="form-horizontal">
|
|
<div class="add-new-bot-box">
|
|
<div class="settings-section-title new-bot-section-title">Add a New Bot</div>
|
|
<div class="new-bot-form">
|
|
<div class="control-group">
|
|
<label for="create_bot_name" class="control-label">{{t "Full name" }}</label>
|
|
<input type="text" name="bot_name" id="create_bot_name" class="required"
|
|
maxlength=100 placeholder="{{t 'Full Bot Name' }}" value="" />
|
|
<div><label for="create_bot_name" generated="true" class="text-error"></label></div>
|
|
</div>
|
|
<div class="control-group">
|
|
<label for="bot_short_name" class="control-label">{{t "Username" }}</label>
|
|
<input type="text" name="bot_short_name" id="create_bot_short_name" class="required bot_local_part"
|
|
placeholder="{{t 'bot_user_name' }}" value="" />-{{t "bot" }}@{{ page_params.domain }}
|
|
<div><label for="create_bot_short_name" generated="true" class="text-error"></label></div>
|
|
</div>
|
|
<div class="control-group new-bot-ui">
|
|
<label for="create_bot_default_sending_stream" class="control-label">{{t "Send to stream" }}</label>
|
|
<select name="bot_default_sending_stream" id="create_bot_default_sending_stream"></select>
|
|
</div>
|
|
<div class="control-group new-bot-ui">
|
|
<label for="create_bot_default_events_register_stream" class="control-label">{{t "Listen on" }}</label>
|
|
<select name="bot_default_events_register_stream" id="create_bot_default_events_register_stream"></select>
|
|
</div>
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<div id="bot_avatar_file"></div>
|
|
<input type="file" name="bot_avatar_file_input" class="notvisible" id="bot_avatar_file_input" value="{{t 'Upload avatar' }}" />
|
|
<button class="btn btn-default" id="bot_avatar_clear_button">{{t "Clear avatar" }}</button>
|
|
<button class="btn btn-default" id="bot_avatar_upload_button">{{t "Customize avatar" }}</button> ({{t "Optional" }})
|
|
</div>
|
|
</div>
|
|
<p>
|
|
<div id="bot_avatar_file_input_error" class="text-error"></div>
|
|
</p>
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="submit" class="btn btn-primary" id="create_bot_button" value="{{t 'Create Bot' }}" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<hr class="settings_separator" />
|
|
|
|
<div class="form-horizontal" id="api_key_button_box">
|
|
{{#tr this}}
|
|
<p class="api-key-note">For most bots using the API, you'll want to give each bot
|
|
its own name and API key using the above section. But if you
|
|
want to write a bot that can access your own private
|
|
messages, you should use your personal API key.
|
|
</p>
|
|
{{/tr}}
|
|
<div class="control-group">
|
|
<button class="btn btn-default" id="api_key_button">{{t "Show/change your API key" }}</button>
|
|
</div>
|
|
</div>
|
|
<div id="get_api_key_box">
|
|
{{#tr this}}
|
|
<p>Please re-enter your password to confirm your identity.
|
|
(<a href="/accounts/password/reset/" target="_blank">Forgotten it?</a>)</p>
|
|
{{/tr}}
|
|
<form action="/json/fetch_api_key" method="post" class="form-horizontal">
|
|
<div class="control-group">
|
|
<label for="password" class="control-label">{{t "Current password" }}</label>
|
|
<input type="password" autocomplete="off"
|
|
name="password" id="get_api_key_password" value="" />
|
|
</div>
|
|
<div class="control-group">
|
|
<input type="submit" name="view_api_key" value="{{t 'Get API key' }}"
|
|
class="btn btn-primary" />
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div id="show_api_key_box">
|
|
<p>{{t "Your API key:" }}</p>
|
|
<p><b><span id="api_key_value"></span></b></p>
|
|
<button type="submit" class="btn btn-primary regenerate_api_key">
|
|
{{t "Generate new API Key" }}
|
|
</button>
|
|
<div id="user_api_key_error text-error">
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="alert-word-settings" class="settings-section">
|
|
<div class="settings-section-title"><i class="icon-vector-book settings-section-icon"></i>{{t "Custom Alert Words" }}</div>
|
|
<div class="form-horizontal" id="alert_word_info_box">
|
|
{{#tr this}}
|
|
<p class="alert-word-settings-note">
|
|
{{t "Alert words allow you to be notified as if you were @-mentioned
|
|
when certain words or phrases are used in Zulip."}}
|
|
</p>
|
|
{{/tr}}
|
|
</div>
|
|
<ul id="alert_words_list">
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="ui-settings">
|
|
<div id="ui-settings" class="settings-section">
|
|
<div class="settings-section-title"><i class="icon-vector-beaker settings-section-icon"></i>{{#tr this}}__page_params.product_name__ Labs{{/tr}}</div>
|
|
<div class="alert" id="ui-settings-status"></div>
|
|
<div class="ui-settings-form">
|
|
<p>
|
|
{{t "Warning: the below features are experimental features and may not work as well as you would like." }}
|
|
</p>
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="autoscroll_forever" id="autoscroll_forever"
|
|
{{#if page_params.autoscroll_forever}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="autoscroll_forever" class="control-label">
|
|
{{t "Always auto-scroll to new messages" }}
|
|
</label>
|
|
|
|
<div class="controls">
|
|
<input type="checkbox" name="default_desktop_notifications" id="default_desktop_notifications"
|
|
{{#if page_params.default_desktop_notifications}}
|
|
checked="checked"
|
|
{{/if}} />
|
|
</div>
|
|
<label for="default_desktop_notifications" class="control-label">
|
|
{{t "Enable desktop notifications for new streams" }}
|
|
</label>
|
|
|
|
</div>
|
|
<div class="control-group">
|
|
<div class="controls ui-submission">
|
|
<input type="submit" name="change_settings" value="{{t 'Save changes' }}" class="btn btn-big btn-primary" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|