Commit f417a265d7783cb10e4b55556f5de9fd0a7c9696
1 parent
d4e070cf
Exists in
master
and in
4 other branches
Finalize milestones for Merge Requests
Showing
9 changed files
with
57 additions
and
25 deletions
Show diff stats
app/assets/javascripts/milestones.js.coffee
... | ... | @@ -5,3 +5,10 @@ $ -> |
5 | 5 | $('.milestone-issue-filter li').toggleClass('active') |
6 | 6 | $('.milestone-issue-filter tr[data-closed]').toggleClass('hide') |
7 | 7 | false |
8 | + | |
9 | + $('.milestone-merge-requests-filter tr[data-closed]').addClass('hide') | |
10 | + | |
11 | + $('.milestone-merge-requests-filter ul.nav li a').click -> | |
12 | + $('.milestone-merge-requests-filter li').toggleClass('active') | |
13 | + $('.milestone-merge-requests-filter tr[data-closed]').toggleClass('hide') | |
14 | + false | ... | ... |
app/assets/stylesheets/common.scss
app/controllers/milestones_controller.rb
... | ... | @@ -31,7 +31,7 @@ class MilestonesController < ProjectResourceController |
31 | 31 | |
32 | 32 | def show |
33 | 33 | @issues = @milestone.issues |
34 | - @users = @milestone.participants | |
34 | + @users = UserDecorator.decorate(@milestone.participants) | |
35 | 35 | @merge_requests = @milestone.merge_requests |
36 | 36 | |
37 | 37 | respond_to do |format| | ... | ... |
... | ... | @@ -0,0 +1,11 @@ |
1 | +class UserDecorator < ApplicationDecorator | |
2 | + decorates :user | |
3 | + | |
4 | + def avatar_image size = 16 | |
5 | + h.image_tag h.gravatar_icon(self.email, size), class: "avatar #{"s#{size}"}", width: size | |
6 | + end | |
7 | + | |
8 | + def tm_of(project) | |
9 | + project.team_member_by_id(self.id) | |
10 | + end | |
11 | +end | ... | ... |
app/helpers/projects_helper.rb
app/models/merge_request.rb
app/models/milestone.rb
... | ... | @@ -16,16 +16,20 @@ class Milestone < ActiveRecord::Base |
16 | 16 | User.where(id: issues.pluck(:assignee_id)) |
17 | 17 | end |
18 | 18 | |
19 | - def issues_percent_complete | |
20 | - ((self.issues.closed.count * 100) / self.issues.count).abs | |
19 | + def open_items_count | |
20 | + self.issues.opened.count + self.merge_requests.opened.count | |
21 | 21 | end |
22 | 22 | |
23 | - def merge_requests_percent_complete | |
24 | - ((self.merge_requests.closed.count * 100) / self.merge_requests.count).abs | |
23 | + def closed_items_count | |
24 | + self.issues.closed.count + self.merge_requests.closed.count | |
25 | + end | |
26 | + | |
27 | + def total_items_count | |
28 | + self.issues.count + self.merge_requests.count | |
25 | 29 | end |
26 | 30 | |
27 | 31 | def percent_complete |
28 | - (issues_percent_complete + merge_requests_percent_complete) / 2 | |
32 | + ((closed_items_count * 100) / total_items_count).abs | |
29 | 33 | rescue ZeroDivisionError |
30 | 34 | 100 |
31 | 35 | end | ... | ... |
app/views/milestones/_milestone.html.haml
... | ... | @@ -9,13 +9,13 @@ |
9 | 9 | %small |
10 | 10 | = milestone.expires_at |
11 | 11 | .row |
12 | - .progress.progress-success.span4 | |
12 | + .progress.progress-info.span4 | |
13 | 13 | .bar{style: "width: #{milestone.percent_complete}%;"} |
14 | 14 | .span6 |
15 | 15 | - if milestone.issues.any? |
16 | - = link_to project_issues_path(milestone.project, milestone_id: milestone.id), class: "padded" do | |
16 | + = link_to project_issues_path(milestone.project, milestone_id: milestone.id), class: "btn very_small" do | |
17 | 17 | %strong= pluralize milestone.issues.count, 'Issue' |
18 | 18 | |
19 | 19 | - if milestone.merge_requests.any? |
20 | - = link_to project_merge_requests_path(milestone.project, milestone_id: milestone.id), class: "padded" do | |
20 | + = link_to project_merge_requests_path(milestone.project, milestone_id: milestone.id), class: "btn very_small" do | |
21 | 21 | %strong= pluralize milestone.issues.count, 'Merge Request' | ... | ... |
app/views/milestones/show.html.haml
... | ... | @@ -31,10 +31,10 @@ |
31 | 31 | %h5 |
32 | 32 | Progress: |
33 | 33 | %small |
34 | - #{@milestone.issues.closed.count} closed | |
34 | + #{@milestone.closed_items_count} closed | |
35 | 35 | – |
36 | - #{@milestone.issues.opened.count} open | |
37 | - .progress.progress-success | |
36 | + #{@milestone.open_items_count} open | |
37 | + .progress.progress-info | |
38 | 38 | .bar{style: "width: #{@milestone.percent_complete}%;"} |
39 | 39 | |
40 | 40 | |
... | ... | @@ -58,10 +58,9 @@ |
58 | 58 | %span.badge.badge-info ##{issue.id} |
59 | 59 | – |
60 | 60 | = link_to_gfm truncate(issue.title, length: 60), [@project, issue] |
61 | - %br | |
62 | 61 | |
63 | 62 | .span6 |
64 | - %table.milestone-merge_requests-filter | |
63 | + %table.milestone-merge-requests-filter | |
65 | 64 | %thead |
66 | 65 | %th |
67 | 66 | %ul.nav.nav-pills |
... | ... | @@ -74,15 +73,13 @@ |
74 | 73 | %span.badge.badge-info ##{merge_request.id} |
75 | 74 | – |
76 | 75 | = link_to_gfm truncate(merge_request.title, length: 60), [@project, merge_request] |
77 | - %br | |
78 | 76 | |
79 | - .span6 | |
80 | - %table | |
81 | - %thead | |
82 | - %th Participants | |
83 | - - @users.each do |user| | |
84 | - %tr | |
85 | - %td | |
86 | - = image_tag gravatar_icon(user.email, 24), width: "24" | |
87 | - | |
88 | - = user.name | |
77 | +%hr | |
78 | +%h6 Participants: | |
79 | +%div | |
80 | + - @users.each do |user| | |
81 | + = link_to tm_path(user.tm_of(@project)), class: 'float-link' do | |
82 | + = user.avatar_image | |
83 | + = user.name | |
84 | + | |
85 | +.clearfix | ... | ... |