mirror of
https://github.com/zulip/zulip.git
synced 2026-06-30 21:11:04 +08:00
Allow users to upload new avatars for their bots.
(imported from commit 9d7895a658740815f454c8bba400d7cff821b7f9)
This commit is contained in:
parent
d0060f24ed
commit
f7ca0117e6
@ -38,6 +38,25 @@ exports.set_up_avatar_logic_for_creating_bots = function () {
|
||||
);
|
||||
};
|
||||
|
||||
exports.set_up_avatar_logic_for_editing_bots = function (li) {
|
||||
var get_file_input = function () {
|
||||
return li.find('.edit_bot_avatar_file_input');
|
||||
};
|
||||
|
||||
var file_name_field = li.find('.edit_bot_avatar_file');
|
||||
var input_error = li.find('.edit_bot_avatar_error');
|
||||
var clear_button = li.find('.edit_bot_avatar_clear_button');
|
||||
var upload_button = li.find('.edit_bot_avatar_upload_button');
|
||||
|
||||
return exports.set_up_file_input(
|
||||
get_file_input,
|
||||
file_name_field,
|
||||
input_error,
|
||||
clear_button,
|
||||
upload_button
|
||||
);
|
||||
};
|
||||
|
||||
exports.set_up_file_input = function (
|
||||
get_file_input, // function returns a jQuery file input object
|
||||
file_name_field, // jQuery object to show file name
|
||||
|
||||
@ -126,6 +126,7 @@ $(function () {
|
||||
});
|
||||
});
|
||||
|
||||
var image_version = 0;
|
||||
|
||||
$("#bots_list").on("click", "button.open_edit_bot_form", function (e) {
|
||||
var li = $(e.target).closest('li');
|
||||
@ -142,10 +143,13 @@ $(function () {
|
||||
bot_info.hide();
|
||||
edit_div.show();
|
||||
|
||||
var avatar_handler = avatar.set_up_avatar_logic_for_editing_bots(li);
|
||||
|
||||
function show_row_again() {
|
||||
image.show();
|
||||
bot_info.show();
|
||||
edit_div.hide();
|
||||
avatar_handler.close();
|
||||
}
|
||||
|
||||
reset_edit_bot.click(function (event) {
|
||||
@ -163,11 +167,15 @@ $(function () {
|
||||
submitHandler: function () {
|
||||
var email = form.data('email');
|
||||
var full_name = form.find('.edit_bot_name').val();
|
||||
var file_input = li.find('.edit_bot_avatar_file_input');
|
||||
var spinner = form.find('.edit_bot_spinner');
|
||||
var edit_button = form.find('.edit_bot_button');
|
||||
var formData = new FormData();
|
||||
formData.append('full_name', full_name);
|
||||
formData.append('csrfmiddlewaretoken', csrf_token);
|
||||
jQuery.each(file_input[0].files, function (i, file) {
|
||||
formData.append('file-'+i, file);
|
||||
});
|
||||
util.make_loading_indicator(spinner, {text: 'Editing bot'});
|
||||
edit_button.hide();
|
||||
$.ajax({
|
||||
@ -183,6 +191,13 @@ $(function () {
|
||||
edit_button.show();
|
||||
show_row_again();
|
||||
bot_info.find('.name').text(full_name);
|
||||
if (data.avatar_url) {
|
||||
// Note that the avatar_url won't actually change on the back end
|
||||
// when the user had a previous uploaded avatar. Only the content
|
||||
// changes, so we version it to get an uncached copy.
|
||||
image_version += 1;
|
||||
image.find('img').attr('src', data.avatar_url+'&v='+image_version.toString());
|
||||
}
|
||||
},
|
||||
error: function (xhr, error_type, exn) {
|
||||
util.destroy_loading_indicator(spinner);
|
||||
|
||||
@ -2019,6 +2019,7 @@ div.edit_bot {
|
||||
margin-left: 24em;
|
||||
}
|
||||
|
||||
.edit_bot_avatar_clear_button,
|
||||
#bot_avatar_clear_button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -29,16 +29,29 @@
|
||||
<div class='edit_bot'>
|
||||
<form class="edit_bot_form form-horizontal" data-email="{{email}}">
|
||||
<div class="bot_edit_errors alert alert-error hide"></div>
|
||||
<p>
|
||||
<div class="edit_bot_email">{{email}}</div>
|
||||
<label for="edit_bot_name" class="control-label">Full name</label>
|
||||
<input type="text" name="bot_name" class="edit_bot_name required"
|
||||
maxlength=50 />
|
||||
<div><label for="edit_bot_name" generated="true" class="text-error"></label></div>
|
||||
</p>
|
||||
<input type="submit" class="btn btn-primary edit_bot_button" value="Save" />
|
||||
<button type="submit" class="btn btn-secondary reset_edit_bot">Cancel</button>
|
||||
<div class="edit_bot_spinner"></div>
|
||||
|
||||
<div class="edit_bot_email">{{email}}</div>
|
||||
<label for="edit_bot_name" class="control-label">Full name</label>
|
||||
<input type="text" name="bot_name" class="edit_bot_name required"
|
||||
maxlength=50 />
|
||||
<div><label for="edit_bot_name" generated="true" class="text-error"></label></div>
|
||||
|
||||
|
||||
<br clear="left" />
|
||||
|
||||
<label for="bot_avatar_file_input" class="control-label">Avatar</label>
|
||||
<input type="file" name="bot_avatar_file_input" class="notdisplayed edit_bot_avatar_file_input" value="Upload avatar" />
|
||||
<button type="button" class="btn edit_bot_avatar_upload_button">Choose avatar</button>
|
||||
<button type="button" class="btn edit_bot_avatar_clear_button">Clear avatar</button>
|
||||
<span class="edit_bot_avatar_file"></span>
|
||||
<div><label for="edit_bot_avatar_file" generated="true" class="edit_bot_avatar_error text-error"></label></div>
|
||||
|
||||
|
||||
<br clear="left" />
|
||||
|
||||
<input type="submit" class="btn btn-primary edit_bot_button" value="Save" />
|
||||
<button type="submit" class="btn btn-secondary reset_edit_bot">Cancel</button>
|
||||
<div class="edit_bot_spinner"></div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
@ -2041,8 +2041,23 @@ def update_bot_backend(request, user_profile, email, full_name=REQ):
|
||||
|
||||
do_change_full_name(bot, full_name)
|
||||
|
||||
bot_avatar_url = None
|
||||
|
||||
if len(request.FILES) == 0:
|
||||
pass
|
||||
elif len(request.FILES) == 1:
|
||||
user_file = request.FILES.values()[0]
|
||||
upload_avatar_image(user_file, user_profile, bot.email)
|
||||
avatar_source = UserProfile.AVATAR_FROM_USER
|
||||
bot.avatar_source = avatar_source
|
||||
bot.save()
|
||||
bot_avatar_url = avatar_url(bot)
|
||||
else:
|
||||
return json_error("You may only upload one file at a time")
|
||||
|
||||
json_result = dict(
|
||||
full_name = full_name,
|
||||
avatar_url = bot_avatar_url
|
||||
)
|
||||
return json_success(json_result)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user