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 | 555 | .merge-tabs { |
| 556 | 556 | margin: 0; |
| 557 | 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 | 560 | background: #F7F7F7; |
| 562 | 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 | 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 | 587 | &.active { |
| 573 | 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 | 598 | .user-mention { |
| 596 | 599 | color: #2FA0BB; |
| 597 | 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 | 130 | border-radius: 5px; |
| 131 | 131 | font-size: 12px; |
| 132 | 132 | font-weight: bold; |
| 133 | - padding: 6px 20px; | |
| 133 | + padding: 5px 17px; | |
| 134 | 134 | border: 1px solid #999; |
| 135 | 135 | color: #666; |
| 136 | 136 | display: inline-block; | ... | ... |
app/models/project.rb
| ... | ... | @@ -90,6 +90,10 @@ class Project < ActiveRecord::Base |
| 90 | 90 | users_projects.find_by_user_id(user.id) if user |
| 91 | 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 | 97 | def fresh_issues(n) |
| 94 | 98 | issues.includes(:project, :author).order("created_at desc").first(n) |
| 95 | 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 | 48 | :javascript | ... | ... |
app/views/merge_requests/show.html.haml
| ... | ... | @@ -15,33 +15,42 @@ |
| 15 | 15 | .tag.commit.inline= @merge_request.target_branch |
| 16 | 16 | %span.commit-author |
| 17 | 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 | 26 | = @merge_request.created_at.stamp("Aug 21, 2011 9:23pm") |
| 27 | 27 | |
| 28 | 28 | %hr |
| 29 | - %h3= @merge_request.title | |
| 29 | + %br | |
| 30 | + %h3 | |
| 31 | + = simple_format @merge_request.title | |
| 30 | 32 | |
| 31 | 33 | .clear |
| 32 | 34 | %br |
| 33 | 35 | %br |
| 34 | 36 | |
| 35 | 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 | 48 | - if can?(current_user, :admin_project, @project) || @merge_request.author == current_user |
| 40 | 49 | .right |
| 41 | 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 | 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 | 54 | %img{:src => "/assets/ajax-loader-facebook.gif", :class => "dashboard-loader"} |
| 46 | 55 | |
| 47 | 56 | .merge-request-notes | ... | ... |
spec/requests/merge_requests_spec.rb
| ... | ... | @@ -42,8 +42,8 @@ describe "MergeRequests" do |
| 42 | 42 | |
| 43 | 43 | it { should have_content(@merge_request.title) } |
| 44 | 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 | 47 | end |
| 48 | 48 | end |
| 49 | 49 | end |
| ... | ... | @@ -62,7 +62,7 @@ describe "MergeRequests" do |
| 62 | 62 | it { current_path.should == project_merge_request_path(project, project.merge_requests.last) } |
| 63 | 63 | |
| 64 | 64 | it "should create merge request" do |
| 65 | - page.should have_content "Open" | |
| 65 | + page.should have_content "Close" | |
| 66 | 66 | page.should have_content @user.name |
| 67 | 67 | end |
| 68 | 68 | end | ... | ... |