diff --git a/static/js/avatar.js b/static/js/avatar.js index 61658dfa89..733ca080de 100644 --- a/static/js/avatar.js +++ b/static/js/avatar.js @@ -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 diff --git a/static/js/settings.js b/static/js/settings.js index be8ffef8db..5128c78dc7 100644 --- a/static/js/settings.js +++ b/static/js/settings.js @@ -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); diff --git a/static/styles/zulip.css b/static/styles/zulip.css index c502455ded..0bc9a0fab0 100644 --- a/static/styles/zulip.css +++ b/static/styles/zulip.css @@ -2019,6 +2019,7 @@ div.edit_bot { margin-left: 24em; } +.edit_bot_avatar_clear_button, #bot_avatar_clear_button { display: none; } diff --git a/static/templates/bot_avatar_row.handlebars b/static/templates/bot_avatar_row.handlebars index 76f3538901..7a6298bfeb 100644 --- a/static/templates/bot_avatar_row.handlebars +++ b/static/templates/bot_avatar_row.handlebars @@ -29,16 +29,29 @@