Commit f417a265d7783cb10e4b55556f5de9fd0a7c9696

Authored by randx
1 parent d4e070cf

Finalize milestones for Merge Requests

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
... ... @@ -675,3 +675,11 @@ pre {
675 675 margin-bottom: 0;
676 676 margin-top:4px;
677 677 }
  678 +
  679 +.float-link {
  680 + float:left;
  681 + margin-right:15px;
  682 + .s16 {
  683 + margin-right:5px;
  684 + }
  685 +}
... ...
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|
... ...
app/decorators/user_decorator.rb 0 → 100644
... ... @@ -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
... ... @@ -10,5 +10,9 @@ module ProjectsHelper
10 10 def link_to_project project
11 11 link_to project.name, project
12 12 end
  13 +
  14 + def tm_path team_member
  15 + project_team_member_path(@project, team_member)
  16 + end
13 17 end
14 18  
... ...
app/models/merge_request.rb
1 1 require Rails.root.join("app/models/commit")
  2 +require Rails.root.join("app/roles/static_model")
2 3  
3 4 class MergeRequest < ActiveRecord::Base
4 5 include IssueCommonality
... ...
app/models/milestone.rb
... ... @@ -16,16 +16,20 @@ class Milestone &lt; 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 &ndash;
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 &ndash;
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 &ndash;
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   - &nbsp;
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
... ...