Commit 6de7dc1e67a8595c80626e35987a96e190515230
1 parent
9f1a5f41
Exists in
master
and in
4 other branches
New projects page
Showing
6 changed files
with
111 additions
and
77 deletions
Show diff stats
app/assets/stylesheets/common.scss
1 | a { | 1 | a { |
2 | + outline: none; | ||
2 | color: $link_color; | 3 | color: $link_color; |
3 | &:hover { | 4 | &:hover { |
4 | text-decoration:none; | 5 | text-decoration:none; |
@@ -10,6 +11,10 @@ a { | @@ -10,6 +11,10 @@ a { | ||
10 | } | 11 | } |
11 | } | 12 | } |
12 | 13 | ||
14 | +a:focus { | ||
15 | + outline: none; | ||
16 | +} | ||
17 | + | ||
13 | .vlink { | 18 | .vlink { |
14 | color: $link_color !important; | 19 | color: $link_color !important; |
15 | } | 20 | } |
@@ -442,36 +447,6 @@ input.git_clone_url { | @@ -442,36 +447,6 @@ input.git_clone_url { | ||
442 | background:#fff !important; | 447 | background:#fff !important; |
443 | } | 448 | } |
444 | 449 | ||
445 | -.project_tile { | ||
446 | - @include shade; | ||
447 | - @include round-borders-all(4px); | ||
448 | - margin-bottom:20px; | ||
449 | - width:298px; | ||
450 | - float:left; | ||
451 | - margin-left:20px; | ||
452 | - border: 1px solid #DDD; | ||
453 | - padding-bottom:20px; | ||
454 | - | ||
455 | - .title { | ||
456 | - background:#f5f5f5; | ||
457 | - padding: 5px 10px 2px 20px; | ||
458 | - border-bottom: 1px solid #DDD; | ||
459 | - margin-bottom: 15px; | ||
460 | - | ||
461 | - h3 { | ||
462 | - &:hover { | ||
463 | - text-decoration: underline; | ||
464 | - } | ||
465 | - } | ||
466 | - } | ||
467 | - .data { | ||
468 | - margin: 0 20px; | ||
469 | - } | ||
470 | - .buttons { | ||
471 | - margin: 0 20px; | ||
472 | - } | ||
473 | -} | ||
474 | - | ||
475 | /** | 450 | /** |
476 | * | 451 | * |
477 | * COMMIT SHOw | 452 | * COMMIT SHOw |
@@ -610,26 +585,6 @@ p.time { | @@ -610,26 +585,6 @@ p.time { | ||
610 | .dashboard_category { | 585 | .dashboard_category { |
611 | margin-bottom:30px; | 586 | margin-bottom:30px; |
612 | 587 | ||
613 | - .ico { | ||
614 | - background: url("images.png") no-repeat -85px -77px; | ||
615 | - width: 19px; | ||
616 | - height: 16px; | ||
617 | - float: left; | ||
618 | - position: relative; | ||
619 | - margin-right: 10px; | ||
620 | - top: 8px; | ||
621 | - | ||
622 | - &.project { | ||
623 | - background-position: -37px -77px; | ||
624 | - } | ||
625 | - | ||
626 | - &.activities { | ||
627 | - background-position:-162px -22px; | ||
628 | - } | ||
629 | - &.projects { | ||
630 | - background-position:-209px -21px; | ||
631 | - } | ||
632 | - } | ||
633 | 588 | ||
634 | 589 | ||
635 | h3 a { | 590 | h3 a { |
@@ -688,3 +643,39 @@ p.time { | @@ -688,3 +643,39 @@ p.time { | ||
688 | .wll:hover { background:none } | 643 | .wll:hover { background:none } |
689 | } | 644 | } |
690 | 645 | ||
646 | + | ||
647 | +.projects_list { | ||
648 | + a.project { | ||
649 | + h4 { | ||
650 | + color:#888; | ||
651 | + } | ||
652 | + &.active { | ||
653 | + h4 { | ||
654 | + color:#111; | ||
655 | + .ico.project { | ||
656 | + background-position:-209px -21px; | ||
657 | + } | ||
658 | + } | ||
659 | + } | ||
660 | + } | ||
661 | +} | ||
662 | +.ico { | ||
663 | + background: url("images.png") no-repeat -85px -77px; | ||
664 | + width: 19px; | ||
665 | + height: 16px; | ||
666 | + float: left; | ||
667 | + position: relative; | ||
668 | + margin-right: 10px; | ||
669 | + top: 8px; | ||
670 | + | ||
671 | + &.project { | ||
672 | + background-position: -37px -77px; | ||
673 | + } | ||
674 | + | ||
675 | + &.activities { | ||
676 | + background-position:-162px -22px; | ||
677 | + } | ||
678 | + &.projects { | ||
679 | + background-position:-209px -21px; | ||
680 | + } | ||
681 | +} |
app/controllers/projects_controller.rb
@@ -11,8 +11,8 @@ class ProjectsController < ApplicationController | @@ -11,8 +11,8 @@ class ProjectsController < ApplicationController | ||
11 | before_filter :require_non_empty_project, :only => [:blob, :tree, :graph] | 11 | before_filter :require_non_empty_project, :only => [:blob, :tree, :graph] |
12 | 12 | ||
13 | def index | 13 | def index |
14 | - @limit, @offset = (params[:limit] || 16), (params[:offset] || 0) | ||
15 | - @projects = current_user.projects.limit(@limit).offset(@offset) | 14 | + @projects = current_user.projects |
15 | + @projects = @projects.select(&:last_activity_date).sort_by(&:last_activity_date).reverse | ||
16 | end | 16 | end |
17 | 17 | ||
18 | def new | 18 | def new |
@@ -67,9 +67,19 @@ class ProjectsController < ApplicationController | @@ -67,9 +67,19 @@ class ProjectsController < ApplicationController | ||
67 | end | 67 | end |
68 | 68 | ||
69 | def show | 69 | def show |
70 | - return render "projects/empty" unless @project.repo_exists? && @project.has_commits? | ||
71 | limit = (params[:limit] || 20).to_i | 70 | limit = (params[:limit] || 20).to_i |
72 | @events = @project.events.recent.limit(limit) | 71 | @events = @project.events.recent.limit(limit) |
72 | + | ||
73 | + respond_to do |format| | ||
74 | + format.html do | ||
75 | + if @project.repo_exists? && @project.has_commits? | ||
76 | + render :show | ||
77 | + else | ||
78 | + render "projects/empty" | ||
79 | + end | ||
80 | + end | ||
81 | + format.js | ||
82 | + end | ||
73 | end | 83 | end |
74 | 84 | ||
75 | def files | 85 | def files |
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +%h4 | ||
2 | + = @project.name | ||
3 | +%hr | ||
4 | +%div | ||
5 | + %a.btn.info{:href => tree_project_ref_path(@project, @project.root_ref)} Browse code | ||
6 | + | ||
7 | + %a.btn{:href => project_commits_path(@project)} Commits | ||
8 | + %strong.right | ||
9 | + = link_to project_path(@project) do | ||
10 | + Switch to project → | ||
11 | +%hr | ||
12 | +.alert-message.block-message.warning | ||
13 | + .input | ||
14 | + .input-prepend | ||
15 | + %span.add-on git clone | ||
16 | + = text_field_tag :project_clone, @project.url_to_repo, :class => "xlarge one_click_select git_clone_url" | ||
17 | + | ||
18 | += simple_format @project.description | ||
19 | +- unless @events.blank? | ||
20 | + %h5.cgray Recent Activity | ||
21 | + .content_list= render @events | ||
22 | + | ||
23 | + |
app/views/projects/_tile.html.haml
@@ -1,13 +0,0 @@ | @@ -1,13 +0,0 @@ | ||
1 | -- @projects.in_groups_of(3, false) do |projects| | ||
2 | - .row | ||
3 | - - projects.each_with_index do |project, i| | ||
4 | - %div.project_tile | ||
5 | - .title | ||
6 | - = link_to project_path(project) do | ||
7 | - %h3= truncate(project.name, :length => 28) | ||
8 | - .data | ||
9 | - %p | ||
10 | - %input{ :value => project.url_to_repo, :class => ['git-url', 'one_click_select', 'text', 'project_list_url'], :readonly => 'readonly' } | ||
11 | - .buttons | ||
12 | - %a.btn.info{:href => tree_project_ref_path(project, project.root_ref)} Browse code | ||
13 | - %a.btn{:href => project_commits_path(project)} Commits |
app/views/projects/index.html.haml
@@ -7,17 +7,33 @@ | @@ -7,17 +7,33 @@ | ||
7 | New Project | 7 | New Project |
8 | %hr | 8 | %hr |
9 | - unless @projects.empty? | 9 | - unless @projects.empty? |
10 | - %div.content_list= render "tile" | 10 | + .row |
11 | + .span5 | ||
12 | + %div.content_list.projects_list | ||
13 | + - @projects.each do |project| | ||
14 | + = link_to project_path(project), :remote => true, :class => dom_class(project) do | ||
15 | + %h4 | ||
16 | + %span.ico.project | ||
17 | + = truncate(project.name, :length => 26) | ||
18 | + .span11.right.show_holder | ||
19 | + .loading | ||
11 | 20 | ||
12 | - -# If projects requris paging | ||
13 | - -# We add ajax loader & init script | ||
14 | - - if @projects.count == @limit | ||
15 | - .loading{ :style => "display:none;"} | ||
16 | - %center= image_tag "ajax-loader.gif" | ||
17 | - | ||
18 | - :javascript | ||
19 | - $(function(){ | ||
20 | - Pager.init(#{@limit}); | ||
21 | - }); | ||
22 | - else | 21 | - else |
23 | %h2 Nothing here | 22 | %h2 Nothing here |
23 | + | ||
24 | + | ||
25 | +:javascript | ||
26 | + $(function(){ | ||
27 | + $("a.project").live("ajax:before", function() { | ||
28 | + $(".show_holder").html("<div class='loading'>"); | ||
29 | + $('a.project').removeClass("active"); | ||
30 | + $(this).addClass("active"); | ||
31 | + }); | ||
32 | + $('a.project:first-child').trigger("click"); | ||
33 | + }); | ||
34 | + | ||
35 | +- if @projects.count == @limit | ||
36 | + :javascript | ||
37 | + $(function(){ | ||
38 | + Pager.init(#{@limit}); | ||
39 | + }); |
@@ -0,0 +1,7 @@ | @@ -0,0 +1,7 @@ | ||
1 | +- if @project.repo_exists? && @project.has_commits? | ||
2 | + :plain | ||
3 | + $(".show_holder").html("#{escape_javascript(render(:partial => 'projects/show'))}"); | ||
4 | +- else | ||
5 | + :plain | ||
6 | + $(".show_holder").html("#{escape_javascript(render(:template => 'projects/empty'))}"); | ||
7 | + |