diff --git a/static/scripts/app/views/repo.js b/static/scripts/app/views/repo.js index a0d4e193a4..590bb30530 100644 --- a/static/scripts/app/views/repo.js +++ b/static/scripts/app/views/repo.js @@ -31,6 +31,7 @@ define([ }, initialize: function() { + this.listenTo(this.model, "change", this.render); }, render: function() { @@ -145,7 +146,6 @@ define([ repo_name: repo_name })); - var $name_span = this.$('.repo-name-span'), $op_td = this.$('.repo-op-td'), $name_td = $name_span.closest('td'); @@ -169,6 +169,52 @@ define([ }; $('.cancel', form).click(cancelRename); + var form_id = form.attr('id'); + var _this = this; + form.submit(function() { + var new_name = $.trim($('[name="newname"]', form).val()); + if (!new_name) { + return false; + } + if (new_name == repo_name) { + cancelRename(); + return false; + } + var post_data = { + 'repo_name': new_name + }; + var post_url = Common.getUrl({ + name: 'rename_repo', + repo_id: _this.model.get('id') + }); + var after_op_success = function(data) { + _this.model.set({ 'name': new_name }); // it will trigger 'change' event + }; + var after_op_error = function(xhr) { + var err_msg; + if (xhr.responseText) { + err_msg = $.parseJSON(xhr.responseText).error; + } else { + err_msg = gettext("Failed. Please check the network."); + } + Common.feedback(err_msg, 'error'); + Common.enableButton(submit_btn); + }; + + var submit_btn = $('[type="submit"]', form); + Common.disableButton(submit_btn); + $.ajax({ + url: post_url, + type: 'POST', + dataType: 'json', + beforeSend: Common.prepareCSRFToken, + data: post_data, + success: after_op_success, + error: after_op_error + }); + return false; + }); + return false; }, diff --git a/static/scripts/common.js b/static/scripts/common.js index eb248b963b..49edc2c479 100644 --- a/static/scripts/common.js +++ b/static/scripts/common.js @@ -98,6 +98,7 @@ define([ case 'dir_shared_items': return siteRoot + 'api2/repos/' + options.repo_id + '/dir/shared_items/'; case 'shared_repos': return siteRoot + 'api2/shared-repos/' + options.repo_id + '/'; case 'ajax_unset_inner_pub_repo': return siteRoot + 'ajax/unset-inner-pub-repo/' + options.repo_id + '/'; + case 'rename_repo': return siteRoot + 'api2/repos/' + options.repo_id + '/?op=rename'; // Permission case 'set_user_folder_perm': return siteRoot + 'ajax/repo/' + options.repo_id + '/set-user-folder-perm/';