summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>2011-12-08 22:17:53 +0200
committerDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>2011-12-08 22:17:53 +0200
commitcd779e56e1ce799fc6ec25dc2fbc8a3e0f775ee8 (patch)
treeb10daacc88ec915f7f61e43a2b38701c4722daa2
parent4107f2cc2e6d0b93208573f4873305ba0ef4c5de (diff)
downloadgitlab-ce-cd779e56e1ce799fc6ec25dc2fbc8a3e0f775ee8.tar.gz
dashboard v1
-rw-r--r--app/controllers/dashboard_controller.rb31
-rw-r--r--app/controllers/user_issues_controller.rb20
-rw-r--r--app/controllers/user_merge_requests_controller.rb8
-rw-r--r--app/views/dashboard/_issues_feed.html.haml29
-rw-r--r--app/views/dashboard/_merge_requests_feed.html.haml31
-rw-r--r--app/views/dashboard/_projects_feed.html.haml20
-rw-r--r--app/views/dashboard/_sidebar.html.haml15
-rw-r--r--app/views/dashboard/index.html.haml17
-rw-r--r--app/views/dashboard/index.js.haml7
-rw-r--r--app/views/dashboard/issues.atom.builder (renamed from app/views/user_issues/index.atom.builder)6
-rw-r--r--app/views/dashboard/issues.html.haml5
-rw-r--r--app/views/dashboard/issues.js.haml7
-rw-r--r--app/views/dashboard/merge_requests.html.haml5
-rw-r--r--app/views/dashboard/merge_requests.js.haml7
-rw-r--r--app/views/merge_requests/_merge_request.html.haml3
-rw-r--r--app/views/user_issues/index.html.haml18
-rw-r--r--app/views/user_merge_requests/index.html.haml18
-rw-r--r--config/routes.rb6
-rw-r--r--spec/requests/dashboard_issues_spec.rb58
-rw-r--r--spec/requests/dashboard_merge_requests_spec.rb (renamed from spec/requests/user_merge_requests_spec.rb)5
-rw-r--r--spec/requests/issues_spec.rb2
-rw-r--r--spec/requests/user_issues_spec.rb55
22 files changed, 189 insertions, 184 deletions
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index 1c50c66e5f6..7c5739936cd 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/app/controllers/dashboard_controller.rb
@@ -1,6 +1,37 @@
class DashboardController < ApplicationController
+ respond_to :js, :html
+
def index
@projects = current_user.projects.all
@active_projects = @projects.select(&:last_activity_date).sort_by(&:last_activity_date).reverse
+
+ respond_to do |format|
+ format.html
+ format.js { no_cache_headers }
+ end
+ end
+
+ def merge_requests
+ @projects = current_user.projects.all
+ @merge_requests = current_user.assigned_merge_requests.order("created_at DESC").limit(40)
+
+ respond_to do |format|
+ format.html
+ format.js { no_cache_headers }
+ end
+ end
+
+ def issues
+ @projects = current_user.projects.all
+ @user = current_user
+ @issues = current_user.assigned_issues.opened.order("created_at DESC").limit(40)
+
+ @issues = @issues.includes(:author, :project)
+
+ respond_to do |format|
+ format.html
+ format.js { no_cache_headers }
+ format.atom { render :layout => false }
+ end
end
end
diff --git a/app/controllers/user_issues_controller.rb b/app/controllers/user_issues_controller.rb
deleted file mode 100644
index d7613aa090d..00000000000
--- a/app/controllers/user_issues_controller.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-class UserIssuesController < ApplicationController
- before_filter :authenticate_user!
-
- respond_to :js, :html
-
- def index
- @projects = current_user.projects.all
- @user = current_user
- @issues = current_user.assigned_issues.opened
-
- @issues = @issues.includes(:author, :project)
-
- respond_to do |format|
- format.html
- format.js
- format.atom { render :layout => false }
- end
- end
-
-end
diff --git a/app/controllers/user_merge_requests_controller.rb b/app/controllers/user_merge_requests_controller.rb
deleted file mode 100644
index 879499e1013..00000000000
--- a/app/controllers/user_merge_requests_controller.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class UserMergeRequestsController < ApplicationController
- before_filter :authenticate_user!
-
- def index
- @projects = current_user.projects.all
- @merge_requests = current_user.assigned_merge_requests
- end
-end
diff --git a/app/views/dashboard/_issues_feed.html.haml b/app/views/dashboard/_issues_feed.html.haml
index bd0d144d930..5945a370d37 100644
--- a/app/views/dashboard/_issues_feed.html.haml
+++ b/app/views/dashboard/_issues_feed.html.haml
@@ -1,28 +1,31 @@
-#news-feed.news-feed
- %div
- = link_to dashboard_path, :class => "left" do
- .box-arrow
- &larr;
- %h2{:style => "width:86%; text-align:center"}
- Issues
- = link_to merge_requests_path, :class => "right" do
- .box-arrow
- &rarr;
+%div
+ = link_to dashboard_path, :remote => true, :class => "left" do
+ .box-arrow
+ &larr;
+ %h2{:style => "width:86%; text-align:center"}
+ Issues
+ = link_to dashboard_merge_requests_path, :remote => true, :class => "right" do
+ .box-arrow
+ &rarr;
+#feeds_content_holder
.project-box.project-updates.ui-box.ui-box-small.ui-box-big
.data
- @issues.each do |update|
%a.project-update{:href => dashboard_feed_path(update.project, update)}
= image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
%span.update-title
- = dashboard_feed_title(update)
+ = truncate update.title, :length => 50
+ .right= update.project.name
%span.update-author
%strong= update.author_name
authored
= time_ago_in_words(update.created_at)
ago
.right
- - klass = update.class.to_s.split("::").last.downcase
- %span.tag{ :class => klass }= klass
+ - if update.critical
+ %span.tag.high critical
+ - if update.today?
+ %span.tag.today today
diff --git a/app/views/dashboard/_merge_requests_feed.html.haml b/app/views/dashboard/_merge_requests_feed.html.haml
index 7443d5fa2f8..22a7e703a31 100644
--- a/app/views/dashboard/_merge_requests_feed.html.haml
+++ b/app/views/dashboard/_merge_requests_feed.html.haml
@@ -1,27 +1,28 @@
-#news-feed.news-feed
- %div
- = link_to issues_path, :class => "left" do
- .box-arrow
- &larr;
- %h2{:style => "width:86%; text-align:center"}
- Merge Requests
- = link_to dashboard_path, :class => "right" do
- .box-arrow
- &rarr;
+%div
+ = link_to dashboard_issues_path, :remote => true, :class => "left" do
+ .box-arrow
+ &larr;
+ %h2{:style => "width:86%; text-align:center"}
+ Merge Requests
+ = link_to dashboard_path, :remote => true, :class => "right" do
+ .box-arrow
+ &rarr;
+#feeds_content_holder
.project-box.project-updates.ui-box.ui-box-small.ui-box-big
.data
- @merge_requests.each do |update|
- %a.project-update{:href => dashboard_feed_path(update.project, update)}
+ %a.project-update{:href => project_merge_request_path(update.project, update)}
= image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
%span.update-title
- = dashboard_feed_title(update)
+ = truncate update.title, :length => 70
+ .right= update.project.name
%span.update-author
%strong= update.author_name
authored
= time_ago_in_words(update.created_at)
ago
.right
- - klass = update.class.to_s.split("::").last.downcase
- %span.tag{ :class => klass }= klass
-
+ %span.tag.commit= update.source_branch
+ &rarr;
+ %span.tag.commit= update.target_branch
diff --git a/app/views/dashboard/_projects_feed.html.haml b/app/views/dashboard/_projects_feed.html.haml
index 7fe93240fd6..bae5fbfb595 100644
--- a/app/views/dashboard/_projects_feed.html.haml
+++ b/app/views/dashboard/_projects_feed.html.haml
@@ -1,14 +1,14 @@
-#news-feed.news-feed
- %div
- = link_to merge_requests_path, :class => "left" do
- .box-arrow
- &larr;
- %h2{:style => "width:86%; text-align:center"}
- Activities
- = link_to issues_path, :class => "right" do
- .box-arrow
- &rarr;
+%div
+ = link_to dashboard_merge_requests_path, :remote => true, :class => "left", :id => "merge_requests_slide" do
+ .box-arrow
+ &larr;
+ %h2{:style => "width:86%; text-align:center"}
+ Activities
+ = link_to dashboard_issues_path, :remote => true, :class => "right", :id => "issues_slide" do
+ .box-arrow
+ &rarr;
+#feeds_content_holder
- @active_projects.first(3).each do |project|
.project-box.project-updates.ui-box.ui-box-small.ui-box-big
= link_to project, do
diff --git a/app/views/dashboard/_sidebar.html.haml b/app/views/dashboard/_sidebar.html.haml
new file mode 100644
index 00000000000..337c1541a3e
--- /dev/null
+++ b/app/views/dashboard/_sidebar.html.haml
@@ -0,0 +1,15 @@
+%aside
+ %h4
+ - if current_user.can_create_project?
+ %a.button-small.button-green{:href => new_project_path} New Project
+ Your Projects
+ %ol.project-list
+ - @projects.each do |project|
+ %li
+ %a{:href => project_path(project)}
+ %span.arrow →
+ %span.project-name= project.name
+ %span.time
+ %strong Last activity:
+ = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
+
diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml
index 2c934998f68..b3de30f2ecd 100644
--- a/app/views/dashboard/index.html.haml
+++ b/app/views/dashboard/index.html.haml
@@ -1,18 +1,5 @@
- content_for(:body_class, "dashboard-page")
#dashboard-content.dashboard-content.content
- %aside
- %h4
- - if current_user.can_create_project?
- %a.button-small.button-green{:href => new_project_path} New Project
- Your Projects
- %ol.project-list
- - @projects.each do |project|
- %li
- %a{:href => project_path(project)}
- %span.arrow →
- %span.project-name= project.name
- %span.time
- %strong Last activity:
- = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
- = render "dashboard/projects_feed"
+ = render "dashboard/sidebar"
+ #news-feed.news-feed= render "dashboard/projects_feed"
diff --git a/app/views/dashboard/index.js.haml b/app/views/dashboard/index.js.haml
new file mode 100644
index 00000000000..44b3b801f7b
--- /dev/null
+++ b/app/views/dashboard/index.js.haml
@@ -0,0 +1,7 @@
+:plain
+ $("#feeds_content_holder").hide("slide", { direction: "left" }, 150, function(){
+ $("#news-feed").html("#{escape_javascript(render(:partial => "projects_feed"))}");
+ $("#feeds_content_holder").show("slide", { direction: "right" }, 150);
+ history.pushState({ path: this.path }, '', '#{dashboard_path}')
+ });
+
diff --git a/app/views/user_issues/index.atom.builder b/app/views/dashboard/issues.atom.builder
index 42fc5245f72..5bd07bcd89f 100644
--- a/app/views/user_issues/index.atom.builder
+++ b/app/views/dashboard/issues.atom.builder
@@ -1,9 +1,9 @@
xml.instruct!
xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
xml.title "#{@user.name} issues"
- xml.link :href => issues_url(:atom, :private_token => @user.private_token), :rel => "self", :type => "application/atom+xml"
- xml.link :href => issues_url(:private_token => @user.private_token), :rel => "alternate", :type => "text/html"
- xml.id issues_url(:private_token => @user.private_token)
+ xml.link :href => dashboard_issues_url(:atom, :private_token => @user.private_token), :rel => "self", :type => "application/atom+xml"
+ xml.link :href => dashboard_issues_url(:private_token => @user.private_token), :rel => "alternate", :type => "text/html"
+ xml.id dashboard_issues_url(:private_token => @user.private_token)
xml.updated @issues.first.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") if @issues.any?
@issues.each do |issue|
diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml
new file mode 100644
index 00000000000..063183ed0d1
--- /dev/null
+++ b/app/views/dashboard/issues.html.haml
@@ -0,0 +1,5 @@
+- content_for(:body_class, "dashboard-page")
+
+#dashboard-content.dashboard-content.content
+ = render "dashboard/sidebar"
+ #news-feed.news-feed= render "dashboard/issues_feed"
diff --git a/app/views/dashboard/issues.js.haml b/app/views/dashboard/issues.js.haml
new file mode 100644
index 00000000000..30a71af6c72
--- /dev/null
+++ b/app/views/dashboard/issues.js.haml
@@ -0,0 +1,7 @@
+:plain
+ $("#feeds_content_holder").hide("slide", { direction: "left" }, 150, function(){
+ $("#news-feed").html("#{escape_javascript(render(:partial => "issues_feed"))}");
+ $("#feeds_content_holder").show("slide", { direction: "right" }, 150);
+ history.pushState({ path: this.path }, '', '#{dashboard_issues_path}')
+ });
+
diff --git a/app/views/dashboard/merge_requests.html.haml b/app/views/dashboard/merge_requests.html.haml
new file mode 100644
index 00000000000..088577eaf50
--- /dev/null
+++ b/app/views/dashboard/merge_requests.html.haml
@@ -0,0 +1,5 @@
+- content_for(:body_class, "dashboard-page")
+
+#dashboard-content.dashboard-content.content
+ = render "dashboard/sidebar"
+ #news-feed.news-feed= render "dashboard/merge_requests_feed"
diff --git a/app/views/dashboard/merge_requests.js.haml b/app/views/dashboard/merge_requests.js.haml
new file mode 100644
index 00000000000..81d3424b5d0
--- /dev/null
+++ b/app/views/dashboard/merge_requests.js.haml
@@ -0,0 +1,7 @@
+:plain
+ $("#feeds_content_holder").hide("slide", { direction: "left" }, 150, function(){
+ $("#news-feed").html("#{escape_javascript(render(:partial => "merge_requests_feed"))}");
+ $("#feeds_content_holder").show("slide", { direction: "right" }, 150);
+ history.pushState({ path: this.path }, '', '#{dashboard_merge_requests_path}')
+ });
+
diff --git a/app/views/merge_requests/_merge_request.html.haml b/app/views/merge_requests/_merge_request.html.haml
index ef290833a27..937af5b98d8 100644
--- a/app/views/merge_requests/_merge_request.html.haml
+++ b/app/views/merge_requests/_merge_request.html.haml
@@ -3,9 +3,6 @@
%span.update-title
= merge_request.title
%span.update-author
- - if not @project.present?
- %strong= merge_request.project.name
- = '-'
%strong= merge_request.author_name
authored
= time_ago_in_words(merge_request.created_at)
diff --git a/app/views/user_issues/index.html.haml b/app/views/user_issues/index.html.haml
deleted file mode 100644
index d2c745e8c31..00000000000
--- a/app/views/user_issues/index.html.haml
+++ /dev/null
@@ -1,18 +0,0 @@
-- content_for(:body_class, "dashboard-page")
-
-#dashboard-content.dashboard-content.content
- %aside
- %h4
- - if current_user.can_create_project?
- %a.button-small.button-green{:href => new_project_path} New Project
- Your Projects
- %ol.project-list
- - @projects.each do |project|
- %li
- %a{:href => project_path(project)}
- %span.arrow →
- %span.project-name= project.name
- %span.time
- %strong Last activity:
- = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
- = render "dashboard/issues_feed"
diff --git a/app/views/user_merge_requests/index.html.haml b/app/views/user_merge_requests/index.html.haml
deleted file mode 100644
index 75d56bf5e44..00000000000
--- a/app/views/user_merge_requests/index.html.haml
+++ /dev/null
@@ -1,18 +0,0 @@
-- content_for(:body_class, "dashboard-page")
-
-#dashboard-content.dashboard-content.content
- %aside
- %h4
- - if current_user.can_create_project?
- %a.button-small.button-green{:href => new_project_path} New Project
- Your Projects
- %ol.project-list
- - @projects.each do |project|
- %li
- %a{:href => project_path(project)}
- %span.arrow →
- %span.project-name= project.name
- %span.time
- %strong Last activity:
- = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
- = render "dashboard/merge_requests_feed"
diff --git a/config/routes.rb b/config/routes.rb
index a49aa7a21b6..27d0612de03 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,6 +1,5 @@
Gitlab::Application.routes.draw do
- get "user_issues/index"
get 'tags'=> 'tags#index'
get 'tags/:tag' => 'projects#index'
@@ -22,9 +21,10 @@ Gitlab::Application.routes.draw do
put "profile/reset_private_token", :to => "profile#reset_private_token"
put "profile/edit", :to => "profile#social_update"
get "profile", :to => "profile#show"
+
get "dashboard", :to => "dashboard#index"
- get "issues", :to => "user_issues#index", :as => "issues"
- get "merge_requests", :to => "user_merge_requests#index", :as => "merge_requests"
+ get "dashboard/issues", :to => "dashboard#issues"
+ get "dashboard/merge_requests", :to => "dashboard#merge_requests"
#get "profile/:id", :to => "profile#show"
diff --git a/spec/requests/dashboard_issues_spec.rb b/spec/requests/dashboard_issues_spec.rb
new file mode 100644
index 00000000000..b9304512457
--- /dev/null
+++ b/spec/requests/dashboard_issues_spec.rb
@@ -0,0 +1,58 @@
+require 'spec_helper'
+
+describe "User Issues Dashboard", :js => true do
+ describe "GET /issues" do
+ before do
+
+ login_as :user
+
+ @project1 = Factory :project,
+ :path => "project1",
+ :code => "TEST1"
+
+ @project2 = Factory :project,
+ :path => "project2",
+ :code => "TEST2"
+
+ @project1.add_access(@user, :read, :write)
+ @project2.add_access(@user, :read, :write)
+
+ @issue1 = Factory :issue,
+ :author => @user,
+ :assignee => @user,
+ :project => @project1
+
+ @issue2 = Factory :issue,
+ :author => @user,
+ :assignee => @user,
+ :project => @project2
+
+ visit dashboard_path
+ click_link "issues_slide"
+ end
+
+ subject { page }
+
+ it { should have_content(@issue1.title[0..10]) }
+ it { should have_content(@issue1.project.name) }
+ it { should have_content(@issue1.assignee.name) }
+
+ it { should have_content(@issue2.title[0..10]) }
+ it { should have_content(@issue2.project.name) }
+ it { should have_content(@issue2.assignee.name) }
+
+ describe "atom feed", :js => false do
+ it "should render atom feed via private token" do
+ logout
+ visit dashboard_issues_path(:atom, :private_token => @user.private_token)
+
+ page.response_headers['Content-Type'].should have_content("application/atom+xml")
+ page.body.should have_selector("title", :text => "#{@user.name} issues")
+ page.body.should have_selector("author email", :text => @issue1.author_email)
+ page.body.should have_selector("entry summary", :text => @issue1.title)
+ page.body.should have_selector("author email", :text => @issue2.author_email)
+ page.body.should have_selector("entry summary", :text => @issue2.title)
+ end
+ end
+ end
+end
diff --git a/spec/requests/user_merge_requests_spec.rb b/spec/requests/dashboard_merge_requests_spec.rb
index fb47f3dd4ab..2706497044b 100644
--- a/spec/requests/user_merge_requests_spec.rb
+++ b/spec/requests/dashboard_merge_requests_spec.rb
@@ -1,6 +1,6 @@
require 'spec_helper'
-describe "User MergeRequests" do
+describe "User MergeRequests", :js => true do
describe "GET /issues" do
before do
@@ -27,7 +27,8 @@ describe "User MergeRequests" do
:assignee => @user,
:project => @project2
- visit merge_requests_path
+ visit dashboard_path
+ click_link "merge_requests_slide"
end
subject { page }
diff --git a/spec/requests/issues_spec.rb b/spec/requests/issues_spec.rb
index 29dc473939f..a2ad68d0cb9 100644
--- a/spec/requests/issues_spec.rb
+++ b/spec/requests/issues_spec.rb
@@ -23,7 +23,7 @@ describe "Issues" do
subject { page }
- it { should have_content(@issue.title) }
+ it { should have_content(@issue.title[0..20]) }
it { should have_content(@issue.project.name) }
it { should have_content(@issue.assignee.name) }
diff --git a/spec/requests/user_issues_spec.rb b/spec/requests/user_issues_spec.rb
deleted file mode 100644
index bd29eae303d..00000000000
--- a/spec/requests/user_issues_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require 'spec_helper'
-
-describe "User Issues Dashboard" do
- describe "GET /issues" do
- before do
-
- login_as :user
-
- @project1 = Factory :project,
- :path => "project1",
- :code => "TEST1"
-
- @project2 = Factory :project,
- :path => "project2",
- :code => "TEST2"
-
- @project1.add_access(@user, :read, :write)
- @project2.add_access(@user, :read, :write)
-
- @issue1 = Factory :issue,
- :author => @user,
- :assignee => @user,
- :project => @project1
-
- @issue2 = Factory :issue,
- :author => @user,
- :assignee => @user,
- :project => @project2
-
- visit issues_path
- end
-
- subject { page }
-
- it { should have_content(@issue1.title) }
- it { should have_content(@issue1.project.name) }
- it { should have_content(@issue1.assignee.name) }
-
- it { should have_content(@issue2.title) }
- it { should have_content(@issue2.project.name) }
- it { should have_content(@issue2.assignee.name) }
-
- it "should render atom feed via private token" do
- logout
- visit issues_path(:atom, :private_token => @user.private_token)
-
- page.response_headers['Content-Type'].should have_content("application/atom+xml")
- page.body.should have_selector("title", :text => "#{@user.name} issues")
- page.body.should have_selector("author email", :text => @issue1.author_email)
- page.body.should have_selector("entry summary", :text => @issue1.title)
- page.body.should have_selector("author email", :text => @issue2.author_email)
- page.body.should have_selector("entry summary", :text => @issue2.title)
- end
- end
-end