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 | 1 | a { |
| 2 | + outline: none; | |
| 2 | 3 | color: $link_color; |
| 3 | 4 | &:hover { |
| 4 | 5 | text-decoration:none; |
| ... | ... | @@ -10,6 +11,10 @@ a { |
| 10 | 11 | } |
| 11 | 12 | } |
| 12 | 13 | |
| 14 | +a:focus { | |
| 15 | + outline: none; | |
| 16 | +} | |
| 17 | + | |
| 13 | 18 | .vlink { |
| 14 | 19 | color: $link_color !important; |
| 15 | 20 | } |
| ... | ... | @@ -442,36 +447,6 @@ input.git_clone_url { |
| 442 | 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 | 452 | * COMMIT SHOw |
| ... | ... | @@ -610,26 +585,6 @@ p.time { |
| 610 | 585 | .dashboard_category { |
| 611 | 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 | 590 | h3 a { |
| ... | ... | @@ -688,3 +643,39 @@ p.time { |
| 688 | 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 | 11 | before_filter :require_non_empty_project, :only => [:blob, :tree, :graph] |
| 12 | 12 | |
| 13 | 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 | 16 | end |
| 17 | 17 | |
| 18 | 18 | def new |
| ... | ... | @@ -67,9 +67,19 @@ class ProjectsController < ApplicationController |
| 67 | 67 | end |
| 68 | 68 | |
| 69 | 69 | def show |
| 70 | - return render "projects/empty" unless @project.repo_exists? && @project.has_commits? | |
| 71 | 70 | limit = (params[:limit] || 20).to_i |
| 72 | 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 | 83 | end |
| 74 | 84 | |
| 75 | 85 | def files | ... | ... |
| ... | ... | @@ -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 | -- @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 | 7 | New Project |
| 8 | 8 | %hr |
| 9 | 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 | 21 | - else |
| 23 | 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 @@ |
| 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 | + | ... | ... |