dashboard v1

3-1-stable
Dmitriy Zaporozhets 2011-12-08 22:17:53 +02:00
parent 4107f2cc2e
commit cd779e56e1
22 changed files with 189 additions and 184 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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"

View File

@ -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}')
});

View File

@ -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|

View File

@ -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"

View File

@ -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}')
});

View File

@ -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"

View File

@ -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}')
});

View File

@ -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)

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -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 }

View File

@ -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) }

View File

@ -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