Commit cd779e56 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

dashboard v1

parent fac5ada6198d
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
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
class UserMergeRequestsController < ApplicationController
before_filter :authenticate_user!
def index
@projects = current_user.projects.all
@merge_requests = current_user.assigned_merge_requests
end
end
#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
#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
#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
......
%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"
- 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"
: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}')
});
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|
......
- content_for(:body_class, "dashboard-page")
#dashboard-content.dashboard-content.content
= render "dashboard/sidebar"
#news-feed.news-feed= render "dashboard/issues_feed"
: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}')
});
- content_for(:body_class, "dashboard-page")
#dashboard-content.dashboard-content.content
= render "dashboard/sidebar"
#news-feed.news-feed= render "dashboard/merge_requests_feed"
: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}')
});
......@@ -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)
......
- 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"
- 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"
Gitlab::Application.routes.draw do
get "user_issues/index"
get 'tags'=> 'tags#index'
get 'tags/:tag' => 'projects#index'
......@@ -22,9 +21,10 @@
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"
......
require 'spec_helper'
describe "User Issues Dashboard" do
describe "User Issues Dashboard", :js => true do
describe "GET /issues" do
before do
......@@ -27,29 +27,32 @@
:assignee => @user,
:project => @project2
visit issues_path
visit dashboard_path
click_link "issues_slide"
end
subject { page }
it { should have_content(@issue1.title) }
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) }
it { should have_content(@issue2.title[0..10]) }
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)
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
require 'spec_helper'
describe "User MergeRequests" do
describe "User MergeRequests", :js => true do
describe "GET /issues" do
before do
......@@ -27,7 +27,8 @@
:assignee => @user,
:project => @project2
visit merge_requests_path
visit dashboard_path
click_link "merge_requests_slide"
end
subject { page }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment