Commit 6f32ccf432c8c3c634dbacd3fc3a28d1c59d01e0
1 parent
3a50b6ca
Exists in
master
and in
4 other branches
merge_requests restyle with forms
Showing
6 changed files
with
130 additions
and
73 deletions
Show diff stats
app/assets/stylesheets/projects.css.scss
| @@ -555,44 +555,78 @@ h4.middle-panel { | @@ -555,44 +555,78 @@ h4.middle-panel { | ||
| 555 | .merge-tabs { | 555 | .merge-tabs { |
| 556 | margin: 0; | 556 | margin: 0; |
| 557 | border: 1px solid #ccc; | 557 | border: 1px solid #ccc; |
| 558 | - padding: 10px; | ||
| 559 | - font-size: 11px; | ||
| 560 | - font-weight: bold; text-transform: uppercase; | 558 | + padding: 5px; |
| 559 | + font-size: 12px; | ||
| 561 | background: #F7F7F7; | 560 | background: #F7F7F7; |
| 562 | margin-bottom:20px; | 561 | margin-bottom:20px; |
| 562 | + height:26px; | ||
| 563 | 563 | ||
| 564 | - a { | ||
| 565 | - margin-right:5px; | ||
| 566 | - @include round-borders-all(4px); | ||
| 567 | - border: 1px solid #ddd; | 564 | + .tab { |
| 565 | + font-weight: bold; | ||
| 566 | + text-transform: uppercase; | ||
| 567 | + border-right: 1px solid #ddd; | ||
| 568 | background:none; | 568 | background:none; |
| 569 | - padding: 4px 10px; | ||
| 570 | - width:160px; | 569 | + padding: 10px; |
| 570 | + width:60px; | ||
| 571 | + float:left; | ||
| 572 | + position:relative; | ||
| 573 | + top:-5px; | ||
| 574 | + left:-5px; | ||
| 575 | + height:16px; | ||
| 576 | + padding-left:34px; | ||
| 577 | + | ||
| 578 | + span { | ||
| 579 | + width: 20px; | ||
| 580 | + height: 20px; | ||
| 581 | + display: inline-block; | ||
| 582 | + position: absolute; | ||
| 583 | + left: 8px; | ||
| 584 | + top: 8px; | ||
| 585 | + } | ||
| 571 | 586 | ||
| 572 | &.active { | 587 | &.active { |
| 573 | background: #eaeaea; | 588 | background: #eaeaea; |
| 574 | } | 589 | } |
| 575 | } | 590 | } |
| 576 | } | 591 | } |
| 577 | -.merge-tabs .reopen-request { | ||
| 578 | - @include round-borders-all(4px); | ||
| 579 | - padding:2px 4px; | ||
| 580 | - border:1px solid #aaa; | ||
| 581 | - text-shadow:none; | ||
| 582 | - background: #D12F19; | ||
| 583 | - color:white; | ||
| 584 | -} | ||
| 585 | 592 | ||
| 586 | -.merge-tabs .close-request { | ||
| 587 | - @include round-borders-all(4px); | ||
| 588 | - padding:2px 4px; | ||
| 589 | - border:1px solid #aaa; | ||
| 590 | - text-shadow:none; | ||
| 591 | - background: #44aa22; | ||
| 592 | - color:white; | ||
| 593 | -} | 593 | +.merge-notes-tab span { background: url("images.png") no-repeat -161px -1px; } |
| 594 | +.merge-commits-tab span { background: url("images.png") no-repeat -86px 1px; } | ||
| 595 | +.merge-diffs-tab span { background: url("images.png") no-repeat -118px 1px; } | ||
| 596 | +.merge-tabs .dashboard-loader { padding:8px; } | ||
| 594 | 597 | ||
| 595 | .user-mention { | 598 | .user-mention { |
| 596 | color: #2FA0BB; | 599 | color: #2FA0BB; |
| 597 | font-weight: bold; | 600 | font-weight: bold; |
| 598 | } | 601 | } |
| 602 | + | ||
| 603 | +.author { | ||
| 604 | + color: #999; | ||
| 605 | +} | ||
| 606 | + | ||
| 607 | + | ||
| 608 | +.red-button{ | ||
| 609 | + border-radius: 5px; | ||
| 610 | + font-size: 12px; | ||
| 611 | + font-weight: bold; | ||
| 612 | + padding: 5px 17px; | ||
| 613 | + border: 1px solid #999; | ||
| 614 | + color: #666; | ||
| 615 | + display: inline-block; | ||
| 616 | + box-shadow: 0 1px 2px rgba(0,0,0,.3); | ||
| 617 | + background: #D12F19; | ||
| 618 | + color: white; | ||
| 619 | +} | ||
| 620 | + | ||
| 621 | +.positive-button{ | ||
| 622 | + border-radius: 5px; | ||
| 623 | + font-size: 12px; | ||
| 624 | + font-weight: bold; | ||
| 625 | + padding: 5px 17px; | ||
| 626 | + border: 1px solid #999; | ||
| 627 | + color: #666; | ||
| 628 | + display: inline-block; | ||
| 629 | + box-shadow: 0 1px 2px rgba(0,0,0,.3); | ||
| 630 | + background: #4A2; | ||
| 631 | + color: white; | ||
| 632 | +} |
app/assets/stylesheets/style.scss
| @@ -130,7 +130,7 @@ table tr:hover, .listed_items tr.odd:hover{background-color:#FFFFCF} | @@ -130,7 +130,7 @@ table tr:hover, .listed_items tr.odd:hover{background-color:#FFFFCF} | ||
| 130 | border-radius: 5px; | 130 | border-radius: 5px; |
| 131 | font-size: 12px; | 131 | font-size: 12px; |
| 132 | font-weight: bold; | 132 | font-weight: bold; |
| 133 | - padding: 6px 20px; | 133 | + padding: 5px 17px; |
| 134 | border: 1px solid #999; | 134 | border: 1px solid #999; |
| 135 | color: #666; | 135 | color: #666; |
| 136 | display: inline-block; | 136 | display: inline-block; |
app/models/project.rb
| @@ -90,6 +90,10 @@ class Project < ActiveRecord::Base | @@ -90,6 +90,10 @@ class Project < ActiveRecord::Base | ||
| 90 | users_projects.find_by_user_id(user.id) if user | 90 | users_projects.find_by_user_id(user.id) if user |
| 91 | end | 91 | end |
| 92 | 92 | ||
| 93 | + def team_member_by_id(user_id) | ||
| 94 | + users_projects.find_by_user_id(user_id) | ||
| 95 | + end | ||
| 96 | + | ||
| 93 | def fresh_issues(n) | 97 | def fresh_issues(n) |
| 94 | issues.includes(:project, :author).order("created_at desc").first(n) | 98 | issues.includes(:project, :author).order("created_at desc").first(n) |
| 95 | end | 99 | end |
app/views/merge_requests/_form.html.haml
| 1 | -%div.merge-request-form-holder | ||
| 2 | - .ui-box.width-100p | ||
| 3 | - %h3 | ||
| 4 | - = @merge_request.new_record? ? "New Merge Request" : "Edit Merge Request ##{@merge_request.id}" | ||
| 5 | - = form_for [@project, @merge_request] do |f| | ||
| 6 | - .data | ||
| 7 | - %table.no-borders | ||
| 8 | - -if @merge_request.errors.any? | ||
| 9 | - %tr | ||
| 10 | - %td Errors | ||
| 11 | - %td | ||
| 12 | - #error_explanation | ||
| 13 | - - @merge_request.errors.full_messages.each do |msg| | ||
| 14 | - %span= msg | ||
| 15 | - %br | 1 | += form_for [@project, @merge_request] do |f| |
| 2 | + %div | ||
| 3 | + %span.entity-info | ||
| 4 | + - if @merge_request.new_record? | ||
| 5 | + = link_to project_merge_requests_path(@project) do | ||
| 6 | + .entity-button | ||
| 7 | + Back | ||
| 8 | + %i | ||
| 9 | + - else | ||
| 10 | + = link_to project_merge_request_path(@project, @merge_request) do | ||
| 11 | + .entity-button | ||
| 12 | + Back | ||
| 13 | + %i | ||
| 14 | + | ||
| 15 | + %h2= @merge_request.new_record? ? "New Merge Request" : "Edit Merge Request ##{@merge_request.id}" | ||
| 16 | + | ||
| 17 | + %hr | ||
| 18 | + %table.no-borders | ||
| 19 | + -if @merge_request.errors.any? | ||
| 20 | + %tr | ||
| 21 | + %td{:colspan => 2} | ||
| 22 | + #error_explanation | ||
| 23 | + - @merge_request.errors.full_messages.each do |msg| | ||
| 24 | + %span= msg | ||
| 25 | + %br | ||
| 26 | + %tr | ||
| 27 | + %td= f.label :source_branch, "From" | ||
| 28 | + %td= f.select(:source_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px") | ||
| 29 | + %tr | ||
| 30 | + %td= f.label :target_branch, "To" | ||
| 31 | + %td= f.select(:target_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px") | ||
| 32 | + %tr | ||
| 33 | + %td= f.label :assignee_id, "Assign to" | ||
| 34 | + %td= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }, :style => "width:250px") | ||
| 35 | + = f.text_area :title, :style => "width:718px; height:100px", :maxlength => 255 | ||
| 36 | + %br | ||
| 37 | + %br | ||
| 38 | + .merge-tabs | ||
| 39 | + = f.submit 'Save', :class => "grey-button" | ||
| 40 | + | ||
| 41 | + - unless @merge_request.new_record? | ||
| 42 | + .right | ||
| 43 | + = link_to 'Remove', [@project, @merge_request], :confirm => 'Are you sure?', :method => :delete, :class => "red-button" | ||
| 44 | + | ||
| 16 | 45 | ||
| 17 | - %tr | ||
| 18 | - %td= f.label :title | ||
| 19 | - %td= f.text_field :title | ||
| 20 | - %tr | ||
| 21 | - %td= f.label :source_branch, "From" | ||
| 22 | - %td= f.select(:source_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }) | ||
| 23 | - %tr | ||
| 24 | - %td= f.label :target_branch, "To" | ||
| 25 | - %td= f.select(:target_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }) | ||
| 26 | - %tr | ||
| 27 | - %td= f.label :assignee_id, "Assign to" | ||
| 28 | - %td= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }) | ||
| 29 | - .buttons | ||
| 30 | - = f.submit 'Save', :class => "grey-button" | ||
| 31 | - | ||
| 32 | - = link_to 'Back', project_merge_requests_path(@project), :class => "grey-button" | ||
| 33 | - - unless @merge_request.new_record? | ||
| 34 | - .right | ||
| 35 | - = link_to 'Remove', [@project, @merge_request], :confirm => 'Are you sure?', :method => :delete, :class => "grey-button" | ||
| 36 | 46 | ||
| 37 | 47 | ||
| 38 | :javascript | 48 | :javascript |
app/views/merge_requests/show.html.haml
| @@ -15,33 +15,42 @@ | @@ -15,33 +15,42 @@ | ||
| 15 | .tag.commit.inline= @merge_request.target_branch | 15 | .tag.commit.inline= @merge_request.target_branch |
| 16 | %span.commit-author | 16 | %span.commit-author |
| 17 | %strong | 17 | %strong |
| 18 | - = link_to project_team_member_path(@project, @project.users_projects.find(@merge_request.author.id)) do | ||
| 19 | - = @merge_request.author_name | 18 | + = link_to project_team_member_path(@project, @project.team_member_by_id(@merge_request.author.id)) do |
| 19 | + %span.author= @merge_request.author_name | ||
| 20 | → | 20 | → |
| 21 | - = link_to project_team_member_path(@project, @project.users_projects.find(@merge_request.assignee.id)) do | ||
| 22 | - = @merge_request.assignee_name | 21 | + = link_to project_team_member_path(@project, @project.team_member_by_id(@merge_request.assignee.id)) do |
| 22 | + %span.author= @merge_request.assignee_name | ||
| 23 | 23 | ||
| 24 | | 24 | |
| 25 | | 25 | |
| 26 | = @merge_request.created_at.stamp("Aug 21, 2011 9:23pm") | 26 | = @merge_request.created_at.stamp("Aug 21, 2011 9:23pm") |
| 27 | 27 | ||
| 28 | %hr | 28 | %hr |
| 29 | - %h3= @merge_request.title | 29 | + %br |
| 30 | + %h3 | ||
| 31 | + = simple_format @merge_request.title | ||
| 30 | 32 | ||
| 31 | .clear | 33 | .clear |
| 32 | %br | 34 | %br |
| 33 | %br | 35 | %br |
| 34 | 36 | ||
| 35 | .merge-tabs | 37 | .merge-tabs |
| 36 | - = link_to "Notes", "#notes", :class => "merge-notes-tab active" | ||
| 37 | - = link_to "Commits","#commits", "data-url" => commits_project_merge_request_path(@project, @merge_request), :class => "merge-commits-tab" | ||
| 38 | - = link_to "Diff", "#diffs", "data-url" => diffs_project_merge_request_path(@project, @merge_request), :class => "merge-diffs-tab" | 38 | + = link_to "#notes", :class => "merge-notes-tab active tab" do |
| 39 | + %span | ||
| 40 | + Notes | ||
| 41 | + = link_to "#commits", "data-url" => commits_project_merge_request_path(@project, @merge_request), :class => "merge-commits-tab tab" do | ||
| 42 | + %span | ||
| 43 | + Commits | ||
| 44 | + = link_to "#diffs", "data-url" => diffs_project_merge_request_path(@project, @merge_request), :class => "merge-diffs-tab tab" do | ||
| 45 | + %span | ||
| 46 | + Diff | ||
| 47 | + | ||
| 39 | - if can?(current_user, :admin_project, @project) || @merge_request.author == current_user | 48 | - if can?(current_user, :admin_project, @project) || @merge_request.author == current_user |
| 40 | .right | 49 | .right |
| 41 | - if @merge_request.closed | 50 | - if @merge_request.closed |
| 42 | - = link_to 'Reopen', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => false }, :status_only => true), :method => :put, :class => "reopen-request" | 51 | + = link_to 'Reopen', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => false }, :status_only => true), :method => :put, :class => "red-button" |
| 43 | - else | 52 | - else |
| 44 | - = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "close-request", :title => "Close merge request" | 53 | + = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "positive-button", :title => "Close merge request" |
| 45 | %img{:src => "/assets/ajax-loader-facebook.gif", :class => "dashboard-loader"} | 54 | %img{:src => "/assets/ajax-loader-facebook.gif", :class => "dashboard-loader"} |
| 46 | 55 | ||
| 47 | .merge-request-notes | 56 | .merge-request-notes |
spec/requests/merge_requests_spec.rb
| @@ -42,8 +42,8 @@ describe "MergeRequests" do | @@ -42,8 +42,8 @@ describe "MergeRequests" do | ||
| 42 | 42 | ||
| 43 | it { should have_content(@merge_request.title) } | 43 | it { should have_content(@merge_request.title) } |
| 44 | it "Show page should inform user that merge request closed" do | 44 | it "Show page should inform user that merge request closed" do |
| 45 | - within ".merge-request-show-holder h3" do | ||
| 46 | - page.should have_content "Closed" | 45 | + within ".merge-tabs" do |
| 46 | + page.should have_content "Reopen" | ||
| 47 | end | 47 | end |
| 48 | end | 48 | end |
| 49 | end | 49 | end |
| @@ -62,7 +62,7 @@ describe "MergeRequests" do | @@ -62,7 +62,7 @@ describe "MergeRequests" do | ||
| 62 | it { current_path.should == project_merge_request_path(project, project.merge_requests.last) } | 62 | it { current_path.should == project_merge_request_path(project, project.merge_requests.last) } |
| 63 | 63 | ||
| 64 | it "should create merge request" do | 64 | it "should create merge request" do |
| 65 | - page.should have_content "Open" | 65 | + page.should have_content "Close" |
| 66 | page.should have_content @user.name | 66 | page.should have_content @user.name |
| 67 | end | 67 | end |
| 68 | end | 68 | end |