From 21a72da84f1ce5d07f8cb346a3d01d5b822ad92d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Zrim=C5=A1ek?= Date: Wed, 31 May 2017 19:24:38 +0200 Subject: [PATCH] Added rename logic and improved remove logic. [SCI-1269] --- app/assets/javascripts/repositories/index.js | 60 ++++++++++++++++++- app/controllers/repositories_controller.rb | 37 +++++++++++- .../_delete_repository_modal.html.erb | 1 - .../_rename_repository_modal.html.erb | 33 ++++++++++ app/views/repositories/index.html.erb | 9 ++- config/locales/en.yml | 7 +++ config/routes.rb | 7 ++- 7 files changed, 143 insertions(+), 11 deletions(-) create mode 100644 app/views/repositories/_rename_repository_modal.html.erb diff --git a/app/assets/javascripts/repositories/index.js b/app/assets/javascripts/repositories/index.js index 59c99641a..fc293e313 100644 --- a/app/assets/javascripts/repositories/index.js +++ b/app/assets/javascripts/repositories/index.js @@ -2,7 +2,11 @@ 'use strict'; // Show modal for repository deletion - $(document).on('click', '#delete-repo-option', function() { + $(document).on('click', '#delete-repo-option', function(e) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + var url = $(this).attr('href'); $.ajax({ method: 'GET', @@ -15,5 +19,59 @@ keyboard: false }); }); + + return false; }); + + // Show modal for repository renaming + $(document).on('click', '#rename-repo-option', function(e) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + + var url = $(this).attr('href'); + $.ajax({ + method: 'GET', + url: url, + dataType: 'json' + }).done(function(xhr, settings, data) { + $('body').append($.parseHTML(data.responseJSON.html)); + $('#rename-repo-modal').modal('show', { + backdrop: true, + keyboard: false + }); + validateRenameForm($('#rename-repo-modal')); + }); + + return false; + }); + + /** + * Reload after successfully updated experiment + * @param {object} $modal Modal object + */ + function validateRenameForm($modal) { + if ($modal) { + var form = $modal.find('form'); + form + .on('ajax:success', function() { + animateSpinner(form, true); + location.reload(); + }) + .on('ajax:error', function(e, error) { + var msg = JSON.parse(error.responseText); + if ('name' in msg) { + renderFormError(e, + $modal.find('#repository_name'), + msg.name.toString(), + true); + } else { + renderFormError(e, + $modal.find('#experiment-name'), + error.statusText, + true); + } + }); + } + } })(); diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index b784e2d82..281c9b9e1 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -21,10 +21,39 @@ class RepositoriesController < ApplicationController def destroy @repo = Repository.find(params[:id]) - @repo.destroy if @repo + flash[:success] = t('repositories.index.delete_flash', name: @repo.name) + @repo.destroy + redirect_to :back + end + + def rename_modal + @repository = Repository.find(params[:repository_id]) + respond_to do |format| + format.json do + render json: { + html: render_to_string( + partial: 'rename_repository_modal.html.erb' + ) + } + end + end + end + + def update + @repo = Repository.find(params[:id]) + old_name = @repo.name + @repo.update_attributes(repository_params) respond_to do |format| - format.js { render inline: 'location.reload();' } + format.json do + if @repo.save + flash[:success] = t('repositories.index.rename_flash', + old_name: old_name, new_name: @repo.name) + render json: {}, status: :ok + else + render json: @repo.errors, status: :unprocessable_entity + end + end end end @@ -39,4 +68,8 @@ class RepositoriesController < ApplicationController def check_view_all_permissions render_403 unless can_view_team_repositories(@team) end + + def repository_params + params.require(:repository).permit(:name) + end end diff --git a/app/views/repositories/_delete_repository_modal.html.erb b/app/views/repositories/_delete_repository_modal.html.erb index 589e27c81..2ec524814 100644 --- a/app/views/repositories/_delete_repository_modal.html.erb +++ b/app/views/repositories/_delete_repository_modal.html.erb @@ -22,7 +22,6 @@ team_repository_path(id: @repository), id: "confirm-repo-delete", method: :delete, - remote: true, type: 'button', class: 'btn btn-primary' %> diff --git a/app/views/repositories/_rename_repository_modal.html.erb b/app/views/repositories/_rename_repository_modal.html.erb new file mode 100644 index 000000000..dc457d87a --- /dev/null +++ b/app/views/repositories/_rename_repository_modal.html.erb @@ -0,0 +1,33 @@ + diff --git a/app/views/repositories/index.html.erb b/app/views/repositories/index.html.erb index bb9a5fc79..5a1360a4b 100644 --- a/app/views/repositories/index.html.erb +++ b/app/views/repositories/index.html.erb @@ -37,9 +37,9 @@ <%= t("repositories.index.options_dropdown.header") %>
  • - - <%= t("repositories.index.options_dropdown.rename") %> - + <%= link_to t('repositories.index.options_dropdown.rename'), + team_repository_rename_modal_path(repository_id: repo), + id: "rename-repo-option" %>
  • @@ -50,8 +50,7 @@
  • <%= link_to t('repositories.index.modal_delete.delete'), team_repository_destroy_modal_path(repository_id: repo), - id: "delete-repo-option", - remote: true %> + id: "delete-repo-option" %>
  • diff --git a/config/locales/en.yml b/config/locales/en.yml index 9f65b8ca2..d7cc85fae 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -153,6 +153,8 @@ en: head_title: "Repositories" title: "Repositories" no_repositories: "No repositories" + delete_flash: "\"%{name}\" repository was successfully deleted!" + rename_flash: "\"%{old_name}\" repository was successfully renamed to \"%{new_name}\"!" no_teams: title: "Your dashboard is empty!" text: "It seems you're not a member of any team. See team management to sort it out." @@ -168,6 +170,11 @@ en: alert_line_1: "all data inside the repository will be lost;" alert_line_2: "all references to repository items will be rendered as invalid." delete: "Delete repository" + modal_rename: + title_html: "Rename repository %{name}" + name: "New repository name" + name_placeholder: "My repository" + copy: "Copy repository" nav: breadcrumbs: repositories: "Repositories" diff --git a/config/routes.rb b/config/routes.rb index 60f921eca..e88bf258e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -123,8 +123,11 @@ Rails.application.routes.draw do as: 'file_expired' resources :teams do - resources :repositories, only: [:index, :destroy] do - get 'destroy_modal', to: 'repositories#destroy_modal' + resources :repositories, only: [:index, :destroy, :update] do + get 'destroy_modal', to: 'repositories#destroy_modal', + defaults: { format: 'json' } + get 'rename_modal', to: 'repositories#rename_modal', + defaults: { format: 'json' } end resources :samples, only: [:new, :create] resources :sample_types, except: [:show, :new] do