diff --git a/app/assets/javascripts/my_modules/repositories.js b/app/assets/javascripts/my_modules/repositories.js
index 5d1ace471..aba7b9215 100644
--- a/app/assets/javascripts/my_modules/repositories.js
+++ b/app/assets/javascripts/my_modules/repositories.js
@@ -170,10 +170,20 @@ var MyModuleRepositories = (function() {
});
}
+ function initRepositoriesDropdown() {
+ $('.repositories-assign-container').on('show.bs.dropdown', function() {
+ var dropdownContainer = $(this);
+ $.get(dropdownContainer.data('repositories-url'), function(result) {
+ dropdownContainer.find('.repositories-dropdown-menu').html(result.html);
+ });
+ });
+ }
+
return {
init: () => {
initSimpleTable();
initRepositoryFullView();
+ initRepositoriesDropdown();
}
};
}());
diff --git a/app/assets/stylesheets/my_modules/protocols/index.scss b/app/assets/stylesheets/my_modules/protocols/index.scss
index 4a7080031..605f46f32 100644
--- a/app/assets/stylesheets/my_modules/protocols/index.scss
+++ b/app/assets/stylesheets/my_modules/protocols/index.scss
@@ -37,6 +37,57 @@
margin-top: 11px;
}
}
+
+ .task-section-header {
+ display: flex;
+ flex-wrap: wrap;
+
+ .actions-block {
+ display: flex;
+ flex-grow: 1;
+ justify-content: flex-end;
+
+ .repositories-assign-container {
+ flex-grow: 1;
+ max-width: 200px;
+
+ .btn {
+ text-align: left;
+
+ .caret {
+ margin: 8px 0;
+ }
+ }
+
+ .repositories-dropdown-menu {
+ width: 100%;
+
+ .repository {
+ @include font-button;
+ display: flex;
+ padding: 8px 16px;
+
+ .assigned-items,
+ .shared-icon {
+ flex-shrink: 0;
+
+ .fas {
+ padding-right: 5px;
+ }
+ }
+
+ .assigned-items {
+ color: $color-alto;
+ }
+
+ .name {
+ flex-grow: 1;
+ }
+ }
+ }
+ }
+ }
+ }
}
.complete-button-container {
diff --git a/app/assets/stylesheets/my_modules/repositories.scss b/app/assets/stylesheets/my_modules/repositories.scss
index e0ac69f13..7e0e9cdd4 100644
--- a/app/assets/stylesheets/my_modules/repositories.scss
+++ b/app/assets/stylesheets/my_modules/repositories.scss
@@ -97,6 +97,8 @@
}
#assigned-items-container {
+ padding-top: 10px;
+
.assigned-repository {
border: $border-default;
border-radius: $border-radius-modal;
diff --git a/app/assets/stylesheets/repositories.scss b/app/assets/stylesheets/repositories.scss
index b9c797564..b4a1b741d 100644
--- a/app/assets/stylesheets/repositories.scss
+++ b/app/assets/stylesheets/repositories.scss
@@ -187,29 +187,6 @@
}
}
-.repositories-dropdown-menu {
- border: 1px solid $color-gainsboro;
- border-top: 0;
- box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .05);
- height: auto;
- max-height: 400px;
- overflow-x: hidden;
- text-transform: initial;
- width: 300px;
-
- li:not(:first-child) {
- border-top: 1px solid $color-gainsboro;
- }
-
- .fas-custom {
- float: right;
- }
-
- a.muted {
- opacity: .7;
- }
-}
-
.repository-share-status {
display: contents !important;
diff --git a/app/assets/stylesheets/themes/scinote.scss b/app/assets/stylesheets/themes/scinote.scss
index a6cdea83a..8626e39c7 100644
--- a/app/assets/stylesheets/themes/scinote.scss
+++ b/app/assets/stylesheets/themes/scinote.scss
@@ -1899,10 +1899,6 @@ th.custom-field .modal-tooltiptext {
background-color: $color-alto;
}
-.my_module-state-buttons {
- padding-top: 6px;
-}
-
.parse-records-table {
max-height: 200px;
}
diff --git a/app/controllers/my_module_repositories_controller.rb b/app/controllers/my_module_repositories_controller.rb
index 324f4d640..7b0b92890 100644
--- a/app/controllers/my_module_repositories_controller.rb
+++ b/app/controllers/my_module_repositories_controller.rb
@@ -1,8 +1,10 @@
# frozen_string_literal: true
class MyModuleRepositoriesController < ApplicationController
- before_action :load_vars, only: %i(show full_view_table)
- before_action :check_view_permissions, only: %i(show full_view_table)
+ before_action :load_my_module, only: %i(show full_view_table dropdown_list)
+ before_action :load_repository, only: %i(show full_view_table)
+ before_action :check_my_module_view_permissions, only: %i(show full_view_table dropdown_list)
+ before_action :check_repository_view_permissions, only: %i(show full_view_table)
def show
@draw = params[:draw].to_i
@@ -30,17 +32,29 @@ class MyModuleRepositoriesController < ApplicationController
render json: { html: render_to_string(partial: 'my_modules/repositories/full_view_table') }
end
+ def dropdown_list
+ @repositories = Repository.accessible_by_teams(current_team)
+
+ render json: { html: render_to_string(partial: 'my_modules/repositories/repositories_dropdown_list') }
+ end
+
private
- def load_vars
- @my_module = MyModule.find(params[:my_module_id])
- @repository = Repository.find(params[:id])
-
- render_404 unless @my_module && @repository
+ def load_my_module
+ @my_module = MyModule.find_by(id: params[:my_module_id])
+ render_404 unless @my_module
end
- def check_view_permissions
- render_403 unless can_read_experiment?(@my_module.experiment) &&
- can_read_repository?(@repository)
+ def load_repository
+ @repository = Repository.find_by(id: params[:id])
+ render_404 unless @repository
+ end
+
+ def check_my_module_view_permissions
+ render_403 unless can_read_experiment?(@my_module.experiment)
+ end
+
+ def check_repository_view_permissions
+ render_403 unless can_read_repository?(@repository)
end
end
diff --git a/app/views/my_modules/protocols.html.erb b/app/views/my_modules/protocols.html.erb
index 385618052..76ebaa98f 100644
--- a/app/views/my_modules/protocols.html.erb
+++ b/app/views/my_modules/protocols.html.erb
@@ -11,7 +11,7 @@
<%= t('my_modules.details.title') %>
-