Commit 2ed08871450dcdcaaadfc54cf9852f34c8e21335
Exists in
spb-stable
and in
3 other branches
Merge branch 'feature/dash_projects_sort' of /home/git/repositories/gitlab/gitlabhq
Showing
6 changed files
with
65 additions
and
21 deletions
Show diff stats
app/controllers/dashboard_controller.rb
| ... | ... | @@ -41,13 +41,13 @@ class DashboardController < ApplicationController |
| 41 | 41 | |
| 42 | 42 | @projects = @projects.where(namespace_id: Group.find_by_name(params[:group])) if params[:group].present? |
| 43 | 43 | @projects = @projects.where(visibility_level: params[:visibility_level]) if params[:visibility_level].present? |
| 44 | - @projects = @projects.includes(:namespace).sorted_by_activity | |
| 44 | + @projects = @projects.includes(:namespace) | |
| 45 | + @projects = @projects.tagged_with(params[:label]) if params[:label].present? | |
| 46 | + @projects = @projects.sort(@sort = params[:sort]) | |
| 47 | + @projects = @projects.page(params[:page]).per(30) | |
| 45 | 48 | |
| 46 | 49 | @labels = current_user.authorized_projects.tags_on(:labels) |
| 47 | 50 | @groups = current_user.authorized_groups |
| 48 | - | |
| 49 | - @projects = @projects.tagged_with(params[:label]) if params[:label].present? | |
| 50 | - @projects = @projects.page(params[:page]).per(30) | |
| 51 | 51 | end |
| 52 | 52 | |
| 53 | 53 | def merge_requests | ... | ... |
app/controllers/public/projects_controller.rb
| ... | ... | @@ -8,14 +8,7 @@ class Public::ProjectsController < ApplicationController |
| 8 | 8 | def index |
| 9 | 9 | @projects = Project.public_or_internal_only(current_user) |
| 10 | 10 | @projects = @projects.search(params[:search]) if params[:search].present? |
| 11 | - @sort = params[:sort] | |
| 12 | - @projects = case @sort | |
| 13 | - when 'newest' then @projects.order('created_at DESC') | |
| 14 | - when 'oldest' then @projects.order('created_at ASC') | |
| 15 | - when 'recently_updated' then @projects.order('updated_at DESC') | |
| 16 | - when 'last_updated' then @projects.order('updated_at ASC') | |
| 17 | - else @projects.order("namespaces.path, projects.name ASC") | |
| 18 | - end | |
| 11 | + @projects = @projects.sort(@sort = params[:sort]) | |
| 19 | 12 | @projects = @projects.includes(:namespace).page(params[:page]).per(20) |
| 20 | 13 | end |
| 21 | 14 | end | ... | ... |
app/helpers/dashboard_helper.rb
| ... | ... | @@ -21,4 +21,18 @@ module DashboardHelper |
| 21 | 21 | [] |
| 22 | 22 | end.count |
| 23 | 23 | end |
| 24 | + | |
| 25 | + def projects_dashboard_filter_path(options={}) | |
| 26 | + exist_opts = { | |
| 27 | + sort: params[:sort], | |
| 28 | + scope: params[:scope], | |
| 29 | + group: params[:group], | |
| 30 | + } | |
| 31 | + | |
| 32 | + options = exist_opts.merge(options) | |
| 33 | + | |
| 34 | + path = request.path | |
| 35 | + path << "?#{options.to_param}" | |
| 36 | + path | |
| 37 | + end | |
| 24 | 38 | end | ... | ... |
app/helpers/tab_helper.rb
| ... | ... | @@ -92,7 +92,12 @@ module TabHelper |
| 92 | 92 | def nav_tab key, value, &block |
| 93 | 93 | o = {} |
| 94 | 94 | o[:class] = "" |
| 95 | - o[:class] << " active" if params[key] == value | |
| 95 | + | |
| 96 | + if value.nil? | |
| 97 | + o[:class] << " active" if params[key].blank? | |
| 98 | + else | |
| 99 | + o[:class] << " active" if params[key] == value | |
| 100 | + end | |
| 96 | 101 | |
| 97 | 102 | if block_given? |
| 98 | 103 | content_tag(:li, capture(&block), o) | ... | ... |
app/models/project.rb
| ... | ... | @@ -153,6 +153,16 @@ class Project < ActiveRecord::Base |
| 153 | 153 | def visibility_levels |
| 154 | 154 | Gitlab::VisibilityLevel.options |
| 155 | 155 | end |
| 156 | + | |
| 157 | + def sort(method) | |
| 158 | + case method.to_s | |
| 159 | + when 'newest' then reorder('projects.created_at DESC') | |
| 160 | + when 'oldest' then reorder('projects.created_at ASC') | |
| 161 | + when 'recently_updated' then reorder('projects.updated_at DESC') | |
| 162 | + when 'last_updated' then reorder('projects.updated_at ASC') | |
| 163 | + else reorder("namespaces.path, projects.name ASC") | |
| 164 | + end | |
| 165 | + end | |
| 156 | 166 | end |
| 157 | 167 | |
| 158 | 168 | def team | ... | ... |
app/views/dashboard/projects.html.haml
| 1 | -%h3.page-title My Projects | |
| 1 | +%h3.page-title | |
| 2 | + My Projects | |
| 3 | +.pull-right | |
| 4 | + .dropdown.inline | |
| 5 | + %a.dropdown-toggle.btn.btn-small{href: '#', "data-toggle" => "dropdown"} | |
| 6 | + %span.light sort: | |
| 7 | + - if @sort.present? | |
| 8 | + = @sort.humanize | |
| 9 | + - else | |
| 10 | + Name | |
| 11 | + %b.caret | |
| 12 | + %ul.dropdown-menu | |
| 13 | + %li | |
| 14 | + = link_to projects_dashboard_filter_path(sort: nil) do | |
| 15 | + Name | |
| 16 | + = link_to projects_dashboard_filter_path(sort: 'newest') do | |
| 17 | + Newest | |
| 18 | + = link_to projects_dashboard_filter_path(sort: 'oldest') do | |
| 19 | + Oldest | |
| 20 | + = link_to projects_dashboard_filter_path(sort: 'recently_updated') do | |
| 21 | + Recently updated | |
| 22 | + = link_to projects_dashboard_filter_path(sort: 'last_updated') do | |
| 23 | + Last updated | |
| 2 | 24 | %p.light |
| 3 | 25 | All projects you have access to are listed here. Public projects are not included here unless you are a member |
| 4 | 26 | %hr |
| ... | ... | @@ -6,22 +28,22 @@ |
| 6 | 28 | .span3 |
| 7 | 29 | %ul.nav.nav-pills.nav-stacked |
| 8 | 30 | = nav_tab :scope, nil do |
| 9 | - = link_to projects_dashboard_path do | |
| 31 | + = link_to projects_dashboard_filter_path(scope: nil) do | |
| 10 | 32 | All |
| 11 | 33 | %span.pull-right |
| 12 | 34 | = current_user.authorized_projects.count |
| 13 | 35 | = nav_tab :scope, 'personal' do |
| 14 | - = link_to projects_dashboard_path(scope: 'personal') do | |
| 36 | + = link_to projects_dashboard_filter_path(scope: 'personal') do | |
| 15 | 37 | Personal |
| 16 | 38 | %span.pull-right |
| 17 | 39 | = current_user.personal_projects.count |
| 18 | 40 | = nav_tab :scope, 'joined' do |
| 19 | - = link_to projects_dashboard_path(scope: 'joined') do | |
| 41 | + = link_to projects_dashboard_filter_path(scope: 'joined') do | |
| 20 | 42 | Joined |
| 21 | 43 | %span.pull-right |
| 22 | 44 | = current_user.authorized_projects.joined(current_user).count |
| 23 | 45 | = nav_tab :scope, 'owned' do |
| 24 | - = link_to projects_dashboard_path(scope: 'owned') do | |
| 46 | + = link_to projects_dashboard_filter_path(scope: 'owned') do | |
| 25 | 47 | Owned |
| 26 | 48 | %span.pull-right |
| 27 | 49 | = current_user.owned_projects.count |
| ... | ... | @@ -31,7 +53,7 @@ |
| 31 | 53 | %ul.bordered-list.visibility-filter |
| 32 | 54 | - Gitlab::VisibilityLevel.values.each do |level| |
| 33 | 55 | %li{ class: (level.to_s == params[:visibility_level]) ? 'active' : 'light' } |
| 34 | - = link_to projects_dashboard_path(visibility_level: level) do | |
| 56 | + = link_to projects_dashboard_filter_path(visibility_level: level) do | |
| 35 | 57 | = visibility_level_icon(level) |
| 36 | 58 | = visibility_level_label(level) |
| 37 | 59 | |
| ... | ... | @@ -41,7 +63,7 @@ |
| 41 | 63 | %ul.bordered-list |
| 42 | 64 | - @groups.each do |group| |
| 43 | 65 | %li{ class: (group.name == params[:group]) ? 'active' : 'light' } |
| 44 | - = link_to projects_dashboard_path(group: group.name) do | |
| 66 | + = link_to projects_dashboard_filter_path(group: group.name) do | |
| 45 | 67 | %i.icon-folder-close-alt |
| 46 | 68 | = group.name |
| 47 | 69 | %small.pull-right |
| ... | ... | @@ -55,7 +77,7 @@ |
| 55 | 77 | %ul.bordered-list |
| 56 | 78 | - @labels.each do |label| |
| 57 | 79 | %li{ class: (label.name == params[:label]) ? 'active' : 'light' } |
| 58 | - = link_to projects_dashboard_path(scope: params[:scope], label: label.name) do | |
| 80 | + = link_to projects_dashboard_filter_path(scope: params[:scope], label: label.name) do | |
| 59 | 81 | %i.icon-tag |
| 60 | 82 | = label.name |
| 61 | 83 | ... | ... |