diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-12-29 12:58:00 +0200 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-12-29 12:58:00 +0200 |
commit | 611c5f1d7cb0ae74d923499d01c2f30d5e8f9384 (patch) | |
tree | 6a7e1c03f93c80ad7f4474bbdfe4ddd9ddd59ddb | |
parent | 231b91d0c819ef1e4fb1beb23c5decfa34876ec6 (diff) | |
download | gitlab-ce-611c5f1d7cb0ae74d923499d01c2f30d5e8f9384.tar.gz |
Sort dropdown for Dashboard#projects page
Be default it sorts by name now
Respect filters like scope, label, visibility when do sort or another
filter
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
-rw-r--r-- | app/controllers/dashboard_controller.rb | 8 | ||||
-rw-r--r-- | app/controllers/public/projects_controller.rb | 9 | ||||
-rw-r--r-- | app/helpers/dashboard_helper.rb | 14 | ||||
-rw-r--r-- | app/helpers/tab_helper.rb | 7 | ||||
-rw-r--r-- | app/models/project.rb | 10 | ||||
-rw-r--r-- | app/views/dashboard/projects.html.haml | 38 |
6 files changed, 65 insertions, 21 deletions
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 78456995b3b..27955c62488 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -41,13 +41,13 @@ class DashboardController < ApplicationController @projects = @projects.where(namespace_id: Group.find_by_name(params[:group])) if params[:group].present? @projects = @projects.where(visibility_level: params[:visibility_level]) if params[:visibility_level].present? - @projects = @projects.includes(:namespace).sorted_by_activity + @projects = @projects.includes(:namespace) + @projects = @projects.tagged_with(params[:label]) if params[:label].present? + @projects = @projects.sort(@sort = params[:sort]) + @projects = @projects.page(params[:page]).per(30) @labels = current_user.authorized_projects.tags_on(:labels) @groups = current_user.authorized_groups - - @projects = @projects.tagged_with(params[:label]) if params[:label].present? - @projects = @projects.page(params[:page]).per(30) end def merge_requests diff --git a/app/controllers/public/projects_controller.rb b/app/controllers/public/projects_controller.rb index e00cd8c7f84..d7297161c22 100644 --- a/app/controllers/public/projects_controller.rb +++ b/app/controllers/public/projects_controller.rb @@ -8,14 +8,7 @@ class Public::ProjectsController < ApplicationController def index @projects = Project.public_or_internal_only(current_user) @projects = @projects.search(params[:search]) if params[:search].present? - @sort = params[:sort] - @projects = case @sort - when 'newest' then @projects.order('created_at DESC') - when 'oldest' then @projects.order('created_at ASC') - when 'recently_updated' then @projects.order('updated_at DESC') - when 'last_updated' then @projects.order('updated_at ASC') - else @projects.order("namespaces.path, projects.name ASC") - end + @projects = @projects.sort(@sort = params[:sort]) @projects = @projects.includes(:namespace).page(params[:page]).per(20) end end diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb index d93eac407b7..7f86a833cb0 100644 --- a/app/helpers/dashboard_helper.rb +++ b/app/helpers/dashboard_helper.rb @@ -21,4 +21,18 @@ module DashboardHelper [] end.count end + + def projects_dashboard_filter_path(options={}) + exist_opts = { + sort: params[:sort], + scope: params[:scope], + group: params[:group], + } + + options = exist_opts.merge(options) + + path = request.path + path << "?#{options.to_param}" + path + end end diff --git a/app/helpers/tab_helper.rb b/app/helpers/tab_helper.rb index ce675872264..bd373c5f3cf 100644 --- a/app/helpers/tab_helper.rb +++ b/app/helpers/tab_helper.rb @@ -92,7 +92,12 @@ module TabHelper def nav_tab key, value, &block o = {} o[:class] = "" - o[:class] << " active" if params[key] == value + + if value.nil? + o[:class] << " active" if params[key].blank? + else + o[:class] << " active" if params[key] == value + end if block_given? content_tag(:li, capture(&block), o) diff --git a/app/models/project.rb b/app/models/project.rb index 93aac1abf6d..a55f7a65b0b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -153,6 +153,16 @@ class Project < ActiveRecord::Base def visibility_levels Gitlab::VisibilityLevel.options end + + def sort(method) + case method.to_s + when 'newest' then reorder('projects.created_at DESC') + when 'oldest' then reorder('projects.created_at ASC') + when 'recently_updated' then reorder('projects.updated_at DESC') + when 'last_updated' then reorder('projects.updated_at ASC') + else reorder("namespaces.path, projects.name ASC") + end + end end def team diff --git a/app/views/dashboard/projects.html.haml b/app/views/dashboard/projects.html.haml index 96917c39b55..c59d5aee0ac 100644 --- a/app/views/dashboard/projects.html.haml +++ b/app/views/dashboard/projects.html.haml @@ -1,4 +1,26 @@ -%h3.page-title My Projects +%h3.page-title + My Projects +.pull-right + .dropdown.inline + %a.dropdown-toggle.btn.btn-small{href: '#', "data-toggle" => "dropdown"} + %span.light sort: + - if @sort.present? + = @sort.humanize + - else + Name + %b.caret + %ul.dropdown-menu + %li + = link_to projects_dashboard_filter_path(sort: nil) do + Name + = link_to projects_dashboard_filter_path(sort: 'newest') do + Newest + = link_to projects_dashboard_filter_path(sort: 'oldest') do + Oldest + = link_to projects_dashboard_filter_path(sort: 'recently_updated') do + Recently updated + = link_to projects_dashboard_filter_path(sort: 'last_updated') do + Last updated %p.light All projects you have access to are listed here. Public projects are not included here unless you are a member %hr @@ -6,22 +28,22 @@ .span3 %ul.nav.nav-pills.nav-stacked = nav_tab :scope, nil do - = link_to projects_dashboard_path do + = link_to projects_dashboard_filter_path(scope: nil) do All %span.pull-right = current_user.authorized_projects.count = nav_tab :scope, 'personal' do - = link_to projects_dashboard_path(scope: 'personal') do + = link_to projects_dashboard_filter_path(scope: 'personal') do Personal %span.pull-right = current_user.personal_projects.count = nav_tab :scope, 'joined' do - = link_to projects_dashboard_path(scope: 'joined') do + = link_to projects_dashboard_filter_path(scope: 'joined') do Joined %span.pull-right = current_user.authorized_projects.joined(current_user).count = nav_tab :scope, 'owned' do - = link_to projects_dashboard_path(scope: 'owned') do + = link_to projects_dashboard_filter_path(scope: 'owned') do Owned %span.pull-right = current_user.owned_projects.count @@ -31,7 +53,7 @@ %ul.bordered-list.visibility-filter - Gitlab::VisibilityLevel.values.each do |level| %li{ class: (level.to_s == params[:visibility_level]) ? 'active' : 'light' } - = link_to projects_dashboard_path(visibility_level: level) do + = link_to projects_dashboard_filter_path(visibility_level: level) do = visibility_level_icon(level) = visibility_level_label(level) @@ -41,7 +63,7 @@ %ul.bordered-list - @groups.each do |group| %li{ class: (group.name == params[:group]) ? 'active' : 'light' } - = link_to projects_dashboard_path(group: group.name) do + = link_to projects_dashboard_filter_path(group: group.name) do %i.icon-folder-close-alt = group.name %small.pull-right @@ -55,7 +77,7 @@ %ul.bordered-list - @labels.each do |label| %li{ class: (label.name == params[:label]) ? 'active' : 'light' } - = link_to projects_dashboard_path(scope: params[:scope], label: label.name) do + = link_to projects_dashboard_filter_path(scope: params[:scope], label: label.name) do %i.icon-tag = label.name |