mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-08 04:47:22 +08:00
Add repositories dropdown list
This commit is contained in:
parent
039394d34c
commit
c1cac01b28
7 changed files with 120 additions and 10 deletions
|
@ -167,6 +167,13 @@ var MyModuleRepositories = (function() {
|
||||||
renderFullViewTable(fullViewModal.find('.table'));
|
renderFullViewTable(fullViewModal.find('.table'));
|
||||||
});
|
});
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
|
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);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,6 +181,7 @@ var MyModuleRepositories = (function() {
|
||||||
init: () => {
|
init: () => {
|
||||||
initSimpleTable();
|
initSimpleTable();
|
||||||
initRepositoryFullView();
|
initRepositoryFullView();
|
||||||
|
initRepositoriesDropdown();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}());
|
}());
|
||||||
|
|
|
@ -37,6 +37,57 @@
|
||||||
margin-top: 11px;
|
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 {
|
.complete-button-container {
|
||||||
|
|
|
@ -97,6 +97,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#assigned-items-container {
|
#assigned-items-container {
|
||||||
|
padding-top: 10px;
|
||||||
|
|
||||||
.assigned-repository {
|
.assigned-repository {
|
||||||
border: $border-default;
|
border: $border-default;
|
||||||
border-radius: $border-radius-modal;
|
border-radius: $border-radius-modal;
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class MyModuleRepositoriesController < ApplicationController
|
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
|
def show
|
||||||
@draw = params[:draw].to_i
|
@draw = params[:draw].to_i
|
||||||
|
@ -30,17 +33,30 @@ class MyModuleRepositoriesController < ApplicationController
|
||||||
render json: { html: render_to_string(partial: 'my_modules/repositories/full_view_table') }
|
render json: { html: render_to_string(partial: 'my_modules/repositories/full_view_table') }
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def load_vars
|
def load_my_module
|
||||||
@my_module = MyModule.find(params[:my_module_id])
|
@my_module = MyModule.find(params[:my_module_id])
|
||||||
@repository = Repository.find(params[:id])
|
render_404 unless @my_module
|
||||||
|
|
||||||
render_404 unless @my_module && @repository
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_view_permissions
|
def load_repository
|
||||||
render_403 unless can_read_experiment?(@my_module.experiment) &&
|
@repository = Repository.find(params[:id])
|
||||||
can_read_repository?(@repository)
|
ender_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
|
||||||
end
|
end
|
||||||
|
|
|
@ -41,7 +41,20 @@
|
||||||
<span class="task-section-title">
|
<span class="task-section-title">
|
||||||
<h2><%= t('my_modules.assigned_items.title') %></h2>
|
<h2><%= t('my_modules.assigned_items.title') %></h2>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
|
<div class="actions-block">
|
||||||
|
<div class="dropdown repositories-assign-container"
|
||||||
|
data-repositories-url="<%= dropdown_list_my_module_my_module_repositories_path(@my_module) %>"
|
||||||
|
>
|
||||||
|
<a href="#" id="repositories-assign-button" class="btn btn-secondary btn-block" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
<span class="fas fa-file-signature"></span>
|
||||||
|
<span>Assign from</span>
|
||||||
|
<span class="caret pull-right"></span>
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-menu repositories-dropdown-menu" aria-labelledby="repositories-assign-button">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse panel-group" id="assigned-items-container">
|
<div class="collapse panel-group" id="assigned-items-container">
|
||||||
<%= render partial: "my_modules/repositories/repositories_list" %>
|
<%= render partial: "my_modules/repositories/repositories_list" %>
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
<% @repositories.each do |repository| %>
|
||||||
|
<% assigned_items_count = @my_module.repository_rows_count(repository) %>
|
||||||
|
<div class="repository">
|
||||||
|
<% if repository.shared_with?(current_team) %>
|
||||||
|
<span class="shared-icon">
|
||||||
|
<i class="fas fa-users"></i>
|
||||||
|
</span>
|
||||||
|
<% end %>
|
||||||
|
<span class="name"><%= escape_input(repository.name) %></span>
|
||||||
|
<% if assigned_items_count.positive? %>
|
||||||
|
<span class="assigned-items">
|
||||||
|
<i class="fas fa-file-signature"></i>
|
||||||
|
<%= assigned_items_count %>
|
||||||
|
</span>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
|
@ -385,6 +385,9 @@ Rails.application.routes.draw do
|
||||||
member do
|
member do
|
||||||
get :full_view_table
|
get :full_view_table
|
||||||
end
|
end
|
||||||
|
collection do
|
||||||
|
get :dropdown_list
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# resources :sample_my_modules, path: '/samples_index', only: [:index]
|
# resources :sample_my_modules, path: '/samples_index', only: [:index]
|
||||||
|
|
Loading…
Add table
Reference in a new issue