Commit 4a53e0285c9f823cde7cf8dec9d065952b707864

Authored by Dmitriy Zaporozhets
2 parents c9370b75 a3b42b6f

Merge branch 'improve/dash_projects_page' of /home/git/repositories/gitlab/gitlabhq into 6-0-dev

app/controllers/dashboard_controller.rb
1 class DashboardController < ApplicationController 1 class DashboardController < ApplicationController
2 respond_to :html 2 respond_to :html
3 3
4 - before_filter :load_projects 4 + before_filter :load_projects, except: [:projects]
5 before_filter :event_filter, only: :show 5 before_filter :event_filter, only: :show
6 6
7 def show 7 def show
@@ -26,16 +26,18 @@ class DashboardController &lt; ApplicationController @@ -26,16 +26,18 @@ class DashboardController &lt; ApplicationController
26 def projects 26 def projects
27 @projects = case params[:scope] 27 @projects = case params[:scope]
28 when 'personal' then 28 when 'personal' then
29 - @projects.personal(current_user) 29 + current_user.namespace.projects
30 when 'joined' then 30 when 'joined' then
31 - @projects.joined(current_user) 31 + current_user.authorized_projects.joined(current_user)
  32 + when 'owned' then
  33 + current_user.owned_projects
32 else 34 else
33 - @projects  
34 - end 35 + current_user.authorized_projects
  36 + end.sorted_by_activity
35 37
36 @projects = @projects.search(params[:search]) if params[:search].present? 38 @projects = @projects.search(params[:search]) if params[:search].present?
37 39
38 - @labels = Project.where(id: @projects.map(&:id)).tags_on(:labels) 40 + @labels = current_user.authorized_projects.tags_on(:labels)
39 41
40 @projects = @projects.tagged_with(params[:label]) if params[:label].present? 42 @projects = @projects.tagged_with(params[:label]) if params[:label].present?
41 @projects = @projects.page(params[:page]).per(30) 43 @projects = @projects.page(params[:page]).per(30)
app/views/dashboard/projects.html.haml
1 -%h3.page_title  
2 - Projects  
3 - %span  
4 - (#{@projects.total_count})  
5 - - if current_user.can_create_project?  
6 - %span.pull-right  
7 - = link_to new_project_path, class: "btn btn-tiny info" do  
8 - %i.icon-plus  
9 - New Project  
10 -  
11 -  
12 -%hr  
13 .row 1 .row
14 .span3 2 .span3
15 %ul.nav.nav-pills.nav-stacked 3 %ul.nav.nav-pills.nav-stacked
@@ -19,58 +7,43 @@ @@ -19,58 +7,43 @@
19 = link_to "Personal", projects_dashboard_path(scope: 'personal') 7 = link_to "Personal", projects_dashboard_path(scope: 'personal')
20 = nav_tab :scope, 'joined' do 8 = nav_tab :scope, 'joined' do
21 = link_to "Joined", projects_dashboard_path(scope: 'joined') 9 = link_to "Joined", projects_dashboard_path(scope: 'joined')
  10 + = nav_tab :scope, 'owned' do
  11 + = link_to "Owned", projects_dashboard_path(scope: 'owned')
22 12
23 - %p.light Filter by label:  
24 - %ul.bordered-list  
25 - - @labels.each do |label|  
26 - %li{ class: (label.name == params[:label]) ? 'active' : 'light' }  
27 - = link_to projects_dashboard_path(scope: params[:scope], label: label.name) do  
28 - %i.icon-tag  
29 - = label.name 13 + - if @labels.present?
  14 + %p.light Filter by label:
  15 + %ul.bordered-list
  16 + - @labels.each do |label|
  17 + %li{ class: (label.name == params[:label]) ? 'active' : 'light' }
  18 + = link_to projects_dashboard_path(scope: params[:scope], label: label.name) do
  19 + %i.icon-tag
  20 + = label.name
30 21
31 22
32 .span9 23 .span9
33 - = form_tag projects_dashboard_path, method: 'get' do  
34 - %fieldset.dashboard-search-filter  
35 - = hidden_field_tag "scope", params[:scope]  
36 - = search_field_tag "search", params[:search], { id: 'dashboard_projects_search', placeholder: 'Search', class: 'left input-xxlarge'}  
37 - = button_tag type: 'submit', class: 'btn' do  
38 - %i.icon-search  
39 -  
40 - %ul.bordered-list  
41 - - @projects.each do |project|  
42 - %li.clearfix  
43 - .clearfix  
44 - %h5  
45 - = link_to project_path(project), class: dom_class(project) do  
46 - - if project.namespace  
47 - = project.namespace.human_name  
48 - %span= "/"  
49 - %strong  
50 - = truncate(project.name, length: 45)  
51 - .pull-right.light  
52 - - if project.owner == current_user  
53 - %i.icon-wrench  
54 - - tm = project.team.get_tm(current_user.id)  
55 - - if tm  
56 - %strong= tm.project_access_human  
57 - .clearfix  
58 - .left  
59 - - if project.description.present?  
60 - %span.light= project.description  
61 - - project.labels.each do |label|  
62 - %span.label.label-info  
63 - %i.icon-tag  
64 - = label.name 24 + .ui-box
  25 + %h5.title
  26 + Projects (#{@projects.total_count})
  27 + %ul.well-list
  28 + - @projects.each do |project|
  29 + %li
  30 + - if project.public
  31 + = public_icon
  32 + - else
  33 + = private_icon
  34 + = link_to project_path(project), class: dom_class(project) do
  35 + %strong
  36 + = project.name_with_namespace
  37 + - if project.description.present?
  38 + %span.light
  39 + = truncate project.description, length: 80
65 40
66 .pull-right.light 41 .pull-right.light
67 - %small.light  
68 - Last activity #{project_last_activity(project)} 42 + %small Last activity #{project_last_activity(project)}
69 43
70 - - if @projects.blank?  
71 - %li  
72 - %h3.nothing_here_message There are no projects here. 44 + - if @projects.blank?
  45 + %li
  46 + %h3.nothing_here_message There are no projects here.
73 .bottom 47 .bottom
74 - %hr  
75 = paginate @projects, theme: "gitlab" 48 = paginate @projects, theme: "gitlab"
76 49
features/dashboard/projects.feature
@@ -6,7 +6,3 @@ Feature: Dashboard projects @@ -6,7 +6,3 @@ Feature: Dashboard projects
6 6
7 Scenario: I should see projects list 7 Scenario: I should see projects list
8 Then I should see projects list 8 Then I should see projects list
9 -  
10 - Scenario: I should see project I am looking for  
11 - Given I search for "Sho"  
12 - Then I should see "Shop" project link  
features/steps/dashboard/dashboard_projects.rb
@@ -8,16 +8,4 @@ class DashboardProjects &lt; Spinach::FeatureSteps @@ -8,16 +8,4 @@ class DashboardProjects &lt; Spinach::FeatureSteps
8 page.should have_link project.name_with_namespace 8 page.should have_link project.name_with_namespace
9 end 9 end
10 end 10 end
11 -  
12 - Given 'I search for "Sho"' do  
13 - fill_in "dashboard_projects_search", with: "Sho"  
14 -  
15 - within ".dashboard-search-filter" do  
16 - find('button').click  
17 - end  
18 - end  
19 -  
20 - Then 'I should see "Shop" project link' do  
21 - page.should have_link "Shop"  
22 - end  
23 end 11 end