mirror of
https://github.com/zulip/zulip.git
synced 2026-07-06 21:18:58 +08:00
We were using Gravatar for user avatars, but now users can upload their avatars directly to Zulip, and we will store their avatar for them. This removes the old Gravatar-related interface and polling code. This commit does not attempt to update the avatars in messages that have already been loaded, either for the user making the change or other users. (imported from commit 301dc48f96f83de0136c93de57055638c79e0961)
267 lines
10 KiB
HTML
267 lines
10 KiB
HTML
{# Settings tab of the app. #}
|
|
|
|
<h1><i class="icon-vector-wrench settings-icon"></i>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>Your Account</div>
|
|
<div class="account-settings-form">
|
|
<form action="/json/settings/change" method="post"
|
|
class="form-horizontal your-account-settings">{% csrf_token %}
|
|
|
|
<div class="control-group" id="name_change_container">
|
|
<label for="full_name" class="control-label">Full name</label>
|
|
<div class="controls">
|
|
<input type="text" name="full_name" id="full_name"
|
|
value="{{ user_profile.full_name }}" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group" id="pw_change_link">
|
|
<label for="change_password_button" class="control-label">Password</label>
|
|
<div class="controls">
|
|
<button class="btn change_password_button" data-dismiss="modal" aria-hidden="true">Change Password</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="pw_change_controls">
|
|
|
|
<div class="control-group">
|
|
<label for="old_password" class="control-label">Old password</label>
|
|
<div class="controls">
|
|
<input type="password" autocomplete="off"
|
|
name="old_password" id="old_password" value="" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label for="new_password" class="control-label">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">Password strength</label>
|
|
<div class="controls">
|
|
<div class="progress" id="pw_strength">
|
|
<div class="bar bar-danger" style="width: 10%;"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label for="confirm_password" class="control-label">Confirm password</label>
|
|
<div class="controls">
|
|
<input type="password" autocomplete="off"
|
|
name="confirm_password" id="confirm_password" value="" />
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="submit" name="change_settings"
|
|
value="Save changes" class="btn btn-big btn-primary" />
|
|
</div>
|
|
</div>
|
|
|
|
</form>
|
|
|
|
|
|
<div id="user_avatar_file_input_error" class="text-error"></div>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<div id="user_avatar_file"></div>
|
|
<input type="file" name="user_avatar_file_input" class="notdisplayed" id="user_avatar_file_input" value="Upload avatar" />
|
|
<button class="btn" id="user_avatar_upload_button">Customize avatar</button>
|
|
<p>
|
|
<img id="user-settings-avatar" src="{{ avatar_url }}" />
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="upload_avatar_spinner"></div>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="alert" id="notify-settings-status"></div>
|
|
|
|
|
|
<form action="/json/notify_settings/change" method="post"
|
|
class="form-horizontal notify-settings">{% csrf_token %}
|
|
|
|
<div id="notification-settings" class="settings-section">
|
|
<div class="settings-section-title"><i class="icon-vector-warning-sign settings-section-icon"></i>Notifications <i class="tiny icon-vector-question-sign" id="notification-docs"></i></div>
|
|
<div class="notification-settings-form">
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="enable_desktop_notifications" id="enable_desktop_notifications"
|
|
{% if user_profile.enable_desktop_notifications %}
|
|
checked="yes"
|
|
{% endif %} />
|
|
</div>
|
|
<label for="enable_desktop_notifications" class="control-label">
|
|
Desktop notifications
|
|
</label>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<input type="checkbox" name="enable_sounds" id="enable_sounds"
|
|
{% if user_profile.enable_sounds %}
|
|
checked="yes"
|
|
{% endif %} />
|
|
</div>
|
|
<label for="enable_sounds" class="control-label">
|
|
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 user_profile.enable_offline_email_notifications %}
|
|
checked="yes"
|
|
{% endif %} />
|
|
</div>
|
|
<label for="enable_offline_email_notifications" class="control-label">
|
|
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 user_profile.enable_offline_push_notifications %}
|
|
checked="yes"
|
|
{% endif %} />
|
|
</div>
|
|
<label for="enable_offline_push_notifications" class="control-label">
|
|
Mobile push notifications when offline
|
|
</label>
|
|
</div>
|
|
|
|
<p class="notification-settings-note">Change notification settings for individual streams on your <a href="/#subscriptions">Streams page</a>.</p>
|
|
|
|
<div class="control-group">
|
|
<div class="controls notification-submission">
|
|
<input type="submit" name="change_settings" value="Save changes" class="btn btn-big btn-primary" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
<div id="bot-settings" class="settings-section">
|
|
|
|
<div class="settings-section-title"><i class="icon-vector-github settings-section-icon"></i>Your Bots</div>
|
|
|
|
<div class="bot-settings-form">
|
|
<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>
|
|
|
|
<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">Full name</label>
|
|
<input type="text" name="bot_name" id="create_bot_name" class="required"
|
|
maxlength=100 placeholder="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">Username</label>
|
|
<input type="text" name="bot_short_name" id="create_bot_short_name" class="required bot_local_part"
|
|
placeholder="bot_user_name" value="" />-bot@{{ user_profile.realm.domain }}
|
|
<div><label for="create_bot_short_name" generated="true" class="text-error"></label></div>
|
|
</div>
|
|
<div class="control-group">
|
|
<div class="controls">
|
|
<div id="bot_avatar_file"></div>
|
|
<input type="file" name="bot_avatar_file_input" class="notdisplayed" id="bot_avatar_file_input" value="Upload avatar" />
|
|
<button class="btn" id="bot_avatar_clear_button">Clear avatar</button>
|
|
<button class="btn" id="bot_avatar_upload_button">Customize avatar</button> (Optional)
|
|
</div>
|
|
</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="Create Bot" />
|
|
</div>
|
|
</div>
|
|
<div id="create_bot_spinner"></div>
|
|
</div>
|
|
|
|
</form>
|
|
<hr class="settings_separator" />
|
|
|
|
<div class="form-horizontal" id="api_key_button_box">
|
|
<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>
|
|
<div class="control-group">
|
|
<button class="btn" id="api_key_button">Show/change your API key</button>
|
|
</div>
|
|
</div>
|
|
<div id="get_api_key_box">
|
|
<p>Please re-enter your password to confirm your identity.
|
|
(<a href="/accounts/password/reset/" target="_blank">Forgotten it?</a>)</p>
|
|
<form action="/json/fetch_api_key" method="post" class="form-horizontal">{% csrf_token %}
|
|
<div class="control-group">
|
|
<label for="password" class="control-label">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="Get API key"
|
|
class="btn btn-primary" />
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div id="show_api_key_box">
|
|
<p>Your API key:</p>
|
|
<p><b><span id="api_key_value"></span></b></p>
|
|
<button type="submit" class="btn btn-primary regenerate_api_key">
|
|
Generate new API Key
|
|
</button>
|
|
<div id="user_api_key_error text-error">
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div id="word-alert-settings" class="settings-section">
|
|
<div class="settings-section-title"><i class="icon-vector-book settings-section-icon"></i>Custom Word Alerts</div>
|
|
<ul id="word-alerts">
|
|
</ul>
|
|
</div>
|
|
|