Merge branch 'improve-archived-projects'
This commit is contained in:
commit
c674ffe0e0
|
@ -21,6 +21,7 @@ v 8.6.0 (unreleased)
|
|||
- Increase the notes polling timeout over time (Roberto Dip)
|
||||
- Show labels in dashboard and group milestone views
|
||||
- Add main language of a project in the list of projects (Tiago Botelho)
|
||||
- Add ability to show archived projects on dashboard, explore and group pages
|
||||
|
||||
v 8.5.4
|
||||
- Do not cache requests for badges (including builds badge)
|
||||
|
|
|
@ -81,8 +81,9 @@
|
|||
&::before {
|
||||
content: "\f00c";
|
||||
position: absolute;
|
||||
left: 4px;
|
||||
top: 8px;
|
||||
left: 5px;
|
||||
top: 50%;
|
||||
margin-top: -7px;
|
||||
font: normal normal normal 14px/1 FontAwesome;
|
||||
font-size: inherit;
|
||||
text-rendering: auto;
|
||||
|
@ -94,8 +95,8 @@
|
|||
}
|
||||
|
||||
.dropdown-header {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
color: $dropdown-header-color;
|
||||
font-size: 13px;
|
||||
line-height: 22px;
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
# == FilterProjects
|
||||
#
|
||||
# Controller concern to handle projects filtering
|
||||
# * by name
|
||||
# * by archived state
|
||||
#
|
||||
module FilterProjects
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
def filter_projects(projects)
|
||||
projects = projects.search(params[:filter_projects]) if params[:filter_projects].present?
|
||||
projects = projects.non_archived if params[:archived].blank?
|
||||
projects
|
||||
end
|
||||
end
|
|
@ -1,18 +1,15 @@
|
|||
class Dashboard::ProjectsController < Dashboard::ApplicationController
|
||||
include FilterProjects
|
||||
|
||||
before_action :event_filter
|
||||
|
||||
def index
|
||||
@projects = current_user.authorized_projects.sorted_by_activity.non_archived
|
||||
@projects = @projects.sort(@sort = params[:sort])
|
||||
@projects = current_user.authorized_projects.sorted_by_activity
|
||||
@projects = filter_projects(@projects)
|
||||
@projects = @projects.includes(:namespace)
|
||||
@projects = @projects.sort(@sort = params[:sort])
|
||||
@projects = @projects.page(params[:page]).per(PER_PAGE) if params[:filter_projects].blank?
|
||||
|
||||
terms = params[:filter_projects]
|
||||
|
||||
if terms.present?
|
||||
@projects = @projects.search(terms)
|
||||
end
|
||||
|
||||
@projects = @projects.page(params[:page]).per(PER_PAGE) if terms.blank?
|
||||
@last_push = current_user.recent_push
|
||||
|
||||
respond_to do |format|
|
||||
|
@ -32,16 +29,11 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
|
|||
|
||||
def starred
|
||||
@projects = current_user.starred_projects.sorted_by_activity
|
||||
@projects = filter_projects(@projects)
|
||||
@projects = @projects.includes(:namespace, :forked_from_project, :tags)
|
||||
@projects = @projects.sort(@sort = params[:sort])
|
||||
@projects = @projects.page(params[:page]).per(PER_PAGE) if params[:filter_projects].blank?
|
||||
|
||||
terms = params[:filter_projects]
|
||||
|
||||
if terms.present?
|
||||
@projects = @projects.search(terms)
|
||||
end
|
||||
|
||||
@projects = @projects.page(params[:page]).per(PER_PAGE) if terms.blank?
|
||||
@last_push = current_user.recent_push
|
||||
@groups = []
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
class Explore::ProjectsController < Explore::ApplicationController
|
||||
include FilterProjects
|
||||
|
||||
def index
|
||||
@projects = ProjectsFinder.new.execute(current_user)
|
||||
@tags = @projects.tags_on(:tags)
|
||||
@projects = @projects.tagged_with(params[:tag]) if params[:tag].present?
|
||||
@projects = @projects.where(visibility_level: params[:visibility_level]) if params[:visibility_level].present?
|
||||
@projects = @projects.non_archived
|
||||
@projects = @projects.search(params[:search]) if params[:search].present?
|
||||
@projects = @projects.search(params[:filter_projects]) if params[:filter_projects].present?
|
||||
@projects = filter_projects(@projects)
|
||||
@projects = @projects.sort(@sort = params[:sort])
|
||||
@projects = @projects.includes(:namespace).page(params[:page]).per(PER_PAGE) if params[:filter_projects].blank?
|
||||
|
||||
|
@ -22,8 +22,7 @@ class Explore::ProjectsController < Explore::ApplicationController
|
|||
|
||||
def trending
|
||||
@projects = TrendingProjectsFinder.new.execute(current_user)
|
||||
@projects = @projects.non_archived
|
||||
@projects = @projects.search(params[:filter_projects]) if params[:filter_projects].present?
|
||||
@projects = filter_projects(@projects)
|
||||
@projects = @projects.page(params[:page]).per(PER_PAGE) if params[:filter_projects].blank?
|
||||
|
||||
respond_to do |format|
|
||||
|
@ -38,7 +37,7 @@ class Explore::ProjectsController < Explore::ApplicationController
|
|||
|
||||
def starred
|
||||
@projects = ProjectsFinder.new.execute(current_user)
|
||||
@projects = @projects.search(params[:filter_projects]) if params[:filter_projects].present?
|
||||
@projects = filter_projects(@projects)
|
||||
@projects = @projects.reorder('star_count DESC')
|
||||
@projects = @projects.page(params[:page]).per(PER_PAGE) if params[:filter_projects].blank?
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class GroupsController < Groups::ApplicationController
|
||||
include FilterProjects
|
||||
include IssuesAction
|
||||
include MergeRequestsAction
|
||||
|
||||
|
@ -41,7 +42,8 @@ class GroupsController < Groups::ApplicationController
|
|||
def show
|
||||
@last_push = current_user.recent_push if current_user
|
||||
@projects = @projects.includes(:namespace)
|
||||
@projects = @projects.search(params[:filter_projects]) if params[:filter_projects].present?
|
||||
@projects = filter_projects(@projects)
|
||||
@projects = @projects.sort(@sort = params[:sort])
|
||||
@projects = @projects.page(params[:page]).per(PER_PAGE) if params[:filter_projects].blank?
|
||||
|
||||
respond_to do |format|
|
||||
|
@ -98,7 +100,7 @@ class GroupsController < Groups::ApplicationController
|
|||
end
|
||||
|
||||
def load_projects
|
||||
@projects ||= ProjectsFinder.new.execute(current_user, group: group).sorted_by_activity.non_archived
|
||||
@projects ||= ProjectsFinder.new.execute(current_user, group: group).sorted_by_activity
|
||||
end
|
||||
|
||||
# Dont allow unauthorized access to group
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
module ExploreHelper
|
||||
def explore_projects_filter_path(options={})
|
||||
def filter_projects_path(options={})
|
||||
exist_opts = {
|
||||
sort: params[:sort],
|
||||
scope: params[:scope],
|
||||
|
@ -9,15 +9,7 @@ module ExploreHelper
|
|||
}
|
||||
|
||||
options = exist_opts.merge(options)
|
||||
|
||||
path = if explore_controller?
|
||||
explore_projects_path
|
||||
elsif current_action?(:starred)
|
||||
starred_dashboard_projects_path
|
||||
else
|
||||
dashboard_projects_path
|
||||
end
|
||||
|
||||
path = request.path
|
||||
path << "?#{options.to_param}"
|
||||
path
|
||||
end
|
||||
|
|
|
@ -16,6 +16,16 @@ module SortingHelper
|
|||
}
|
||||
end
|
||||
|
||||
def projects_sort_options_hash
|
||||
{
|
||||
sort_value_name => sort_title_name,
|
||||
sort_value_recently_updated => sort_title_recently_updated,
|
||||
sort_value_oldest_updated => sort_title_oldest_updated,
|
||||
sort_value_recently_created => sort_title_recently_created,
|
||||
sort_value_oldest_created => sort_title_oldest_created,
|
||||
}
|
||||
end
|
||||
|
||||
def sort_title_oldest_updated
|
||||
'Oldest updated'
|
||||
end
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
.nav-controls
|
||||
= form_tag request.original_url, method: :get, class: 'project-filter-form', id: 'project-filter-form' do |f|
|
||||
= search_field_tag :filter_projects, params[:filter_projects], placeholder: 'Filter by name...', class: 'project-filter-form-field form-control input-short projects-list-filter', spellcheck: false, id: 'project-filter-form-field', tabindex: "2"
|
||||
= render 'explore/projects/dropdown'
|
||||
= render 'shared/projects/dropdown'
|
||||
- if current_user.can_create_project?
|
||||
= link_to new_project_path, class: 'btn btn-new' do
|
||||
= icon('plus')
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
.dropdown.inline
|
||||
%button.dropdown-toggle.btn{type: 'button', 'data-toggle' => 'dropdown'}
|
||||
%span.light
|
||||
- if @sort.present?
|
||||
= sort_options_hash[@sort]
|
||||
- else
|
||||
= sort_title_recently_updated
|
||||
%b.caret
|
||||
%ul.dropdown-menu.dropdown-menu-align-right
|
||||
%li
|
||||
= link_to explore_projects_filter_path(sort: sort_value_name) do
|
||||
= sort_title_name
|
||||
= link_to explore_projects_filter_path(sort: sort_value_recently_created) do
|
||||
= sort_title_recently_created
|
||||
= link_to explore_projects_filter_path(sort: sort_value_oldest_created) do
|
||||
= sort_title_oldest_created
|
||||
= link_to explore_projects_filter_path(sort: sort_value_recently_updated) do
|
||||
= sort_title_recently_updated
|
||||
= link_to explore_projects_filter_path(sort: sort_value_oldest_updated) do
|
||||
= sort_title_oldest_updated
|
|
@ -10,11 +10,11 @@
|
|||
%b.caret
|
||||
%ul.dropdown-menu
|
||||
%li
|
||||
= link_to explore_projects_filter_path(visibility_level: nil) do
|
||||
= link_to filter_projects_path(visibility_level: nil) do
|
||||
Any
|
||||
- Gitlab::VisibilityLevel.values.each do |level|
|
||||
%li{ class: (level.to_s == params[:visibility_level]) ? 'active' : 'light' }
|
||||
= link_to explore_projects_filter_path(visibility_level: level) do
|
||||
= link_to filter_projects_path(visibility_level: level) do
|
||||
= visibility_level_icon(level)
|
||||
= visibility_level_label(level)
|
||||
|
||||
|
@ -30,11 +30,11 @@
|
|||
%b.caret
|
||||
%ul.dropdown-menu
|
||||
%li
|
||||
= link_to explore_projects_filter_path(tag: nil) do
|
||||
= link_to filter_projects_path(tag: nil) do
|
||||
Any
|
||||
|
||||
- @tags.each do |tag|
|
||||
%li{ class: (tag.name == params[:tag]) ? 'active' : 'light' }
|
||||
= link_to explore_projects_filter_path(tag: tag.name) do
|
||||
%i.fa.fa-tag
|
||||
= link_to filter_projects_path(tag: tag.name) do
|
||||
= icon('tag')
|
||||
= tag.name
|
||||
|
|
|
@ -3,9 +3,10 @@
|
|||
= form_tag request.original_url, method: :get, class: 'project-filter-form', id: 'project-filter-form' do |f|
|
||||
- if @projects.present?
|
||||
= search_field_tag :filter_projects, nil, placeholder: 'Filter by name', class: 'projects-list-filter form-control', spellcheck: false
|
||||
- if can? current_user, :create_projects, @group
|
||||
= link_to new_project_path(namespace_id: @group.id), class: 'btn btn-new pull-right' do
|
||||
= icon('plus')
|
||||
New Project
|
||||
= render 'shared/projects/dropdown'
|
||||
- if can? current_user, :create_projects, @group
|
||||
= link_to new_project_path(namespace_id: @group.id), class: 'btn btn-new pull-right' do
|
||||
= icon('plus')
|
||||
New Project
|
||||
|
||||
= render 'shared/projects/list', projects: @projects, stars: false, skip_namespace: true
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
- @sort ||= sort_value_recently_updated
|
||||
- archived = params[:archived]
|
||||
.dropdown.inline
|
||||
%button.dropdown-toggle.btn{type: 'button', 'data-toggle' => 'dropdown'}
|
||||
%span.light
|
||||
= projects_sort_options_hash[@sort]
|
||||
%b.caret
|
||||
%ul.dropdown-menu.dropdown-menu-align-right.dropdown-menu-selectable
|
||||
%li.dropdown-header
|
||||
Sort by
|
||||
- projects_sort_options_hash.each do |value, title|
|
||||
%li
|
||||
= link_to filter_projects_path(sort: value, archived: archived), class: ("is-active" if @sort == value) do
|
||||
= title
|
||||
|
||||
%li.divider
|
||||
%li
|
||||
= link_to filter_projects_path(sort: @sort, archived: nil), class: ("is-active" unless params[:archived].present?) do
|
||||
Hide archived projects
|
||||
%li
|
||||
= link_to filter_projects_path(sort: @sort, archived: true), class: ("is-active" if params[:archived].present?) do
|
||||
Show archived projects
|
|
@ -10,3 +10,8 @@ Feature: Dashboard Archived Projects
|
|||
Scenario: I should see non-archived projects on dashboard
|
||||
Then I should see "Shop" project link
|
||||
And I should not see "Forum" project link
|
||||
|
||||
Scenario: I toggle show of archived projects on dashboard
|
||||
When I click "Show archived projects" link
|
||||
Then I should see "Shop" project link
|
||||
And I should see "Forum" project link
|
||||
|
|
|
@ -140,4 +140,4 @@ Feature: Explore Projects
|
|||
When I visit the explore starred projects
|
||||
Then I should see project "Community"
|
||||
And I should see project "Internal"
|
||||
And I should see project "Archive"
|
||||
And I should not see project "Archive"
|
||||
|
|
|
@ -19,4 +19,8 @@ class Spinach::Features::DashboardArchivedProjects < Spinach::FeatureSteps
|
|||
step 'I should see "Forum" project link' do
|
||||
expect(page).to have_link "Forum"
|
||||
end
|
||||
|
||||
step 'I click "Show archived projects" link' do
|
||||
click_link "Show archived projects"
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue