Commit ec8628fa95b54dae3a0a680e3df043ba01c3e0de
Exists in
spb-stable
and in
3 other branches
Merge branch 'feature/mr_context' into 'master'
Allow change assignee/milestone from MergeRequest show page
Showing
7 changed files
with
138 additions
and
107 deletions
Show diff stats
@@ -0,0 +1,103 @@ | @@ -0,0 +1,103 @@ | ||
1 | +class MergeRequest | ||
2 | + constructor: (@opts) -> | ||
3 | + @initContextWidget() | ||
4 | + this.$el = $('.merge-request') | ||
5 | + @diffs_loaded = if @opts.action == 'diffs' then true else false | ||
6 | + @commits_loaded = false | ||
7 | + | ||
8 | + this.activateTab(@opts.action) | ||
9 | + | ||
10 | + this.bindEvents() | ||
11 | + | ||
12 | + this.initMergeWidget() | ||
13 | + this.$('.show-all-commits').on 'click', => | ||
14 | + this.showAllCommits() | ||
15 | + | ||
16 | + modal = $('#modal_merge_info').modal(show: false) | ||
17 | + | ||
18 | + disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request' | ||
19 | + | ||
20 | + | ||
21 | + # Local jQuery finder | ||
22 | + $: (selector) -> | ||
23 | + this.$el.find(selector) | ||
24 | + | ||
25 | + initContextWidget: -> | ||
26 | + $('.edit-merge_request.inline-update input[type="submit"]').hide() | ||
27 | + $(".issue-box .inline-update").on "change", "select", -> | ||
28 | + $(this).submit() | ||
29 | + $(".issue-box .inline-update").on "change", "#merge_request_assignee_id", -> | ||
30 | + $(this).submit() | ||
31 | + | ||
32 | + initMergeWidget: -> | ||
33 | + this.showState( @opts.current_status ) | ||
34 | + | ||
35 | + if this.$('.automerge_widget').length and @opts.check_enable | ||
36 | + $.get @opts.url_to_automerge_check, (data) => | ||
37 | + this.showState( data.merge_status ) | ||
38 | + , 'json' | ||
39 | + | ||
40 | + if @opts.ci_enable | ||
41 | + $.get @opts.url_to_ci_check, (data) => | ||
42 | + this.showCiState data.status | ||
43 | + , 'json' | ||
44 | + | ||
45 | + bindEvents: -> | ||
46 | + this.$('.nav-tabs').on 'click', 'a', (event) => | ||
47 | + a = $(event.currentTarget) | ||
48 | + | ||
49 | + href = a.attr('href') | ||
50 | + History.replaceState {path: href}, document.title, href | ||
51 | + | ||
52 | + event.preventDefault() | ||
53 | + | ||
54 | + this.$('.nav-tabs').on 'click', 'li', (event) => | ||
55 | + this.activateTab($(event.currentTarget).data('action')) | ||
56 | + | ||
57 | + this.$('.accept_merge_request').on 'click', -> | ||
58 | + $('.automerge_widget.can_be_merged').hide() | ||
59 | + $('.merge-in-progress').show() | ||
60 | + | ||
61 | + activateTab: (action) -> | ||
62 | + this.$('.nav-tabs li').removeClass 'active' | ||
63 | + this.$('.tab-content').hide() | ||
64 | + switch action | ||
65 | + when 'diffs' | ||
66 | + this.$('.nav-tabs .diffs-tab').addClass 'active' | ||
67 | + this.loadDiff() unless @diffs_loaded | ||
68 | + this.$('.diffs').show() | ||
69 | + else | ||
70 | + this.$('.nav-tabs .notes-tab').addClass 'active' | ||
71 | + this.$('.notes').show() | ||
72 | + | ||
73 | + showState: (state) -> | ||
74 | + $('.automerge_widget').hide() | ||
75 | + $('.automerge_widget.' + state).show() | ||
76 | + | ||
77 | + showCiState: (state) -> | ||
78 | + $('.ci_widget').hide() | ||
79 | + $('.ci_widget.ci-' + state).show() | ||
80 | + | ||
81 | + loadDiff: (event) -> | ||
82 | + $.ajax | ||
83 | + type: 'GET' | ||
84 | + url: this.$('.nav-tabs .diffs-tab a').attr('href') | ||
85 | + beforeSend: => | ||
86 | + this.$('.status').addClass 'loading' | ||
87 | + complete: => | ||
88 | + @diffs_loaded = true | ||
89 | + this.$('.status').removeClass 'loading' | ||
90 | + success: (data) => | ||
91 | + this.$(".diffs").html(data.html) | ||
92 | + dataType: 'json' | ||
93 | + | ||
94 | + showAllCommits: -> | ||
95 | + this.$('.first-commits').remove() | ||
96 | + this.$('.all-commits').removeClass 'hide' | ||
97 | + | ||
98 | + alreadyOrCannotBeMerged: -> | ||
99 | + this.$('.automerge_widget').hide() | ||
100 | + this.$('.merge-in-progress').hide() | ||
101 | + this.$('.automerge_widget.already_cannot_be_merged').show() | ||
102 | + | ||
103 | +this.MergeRequest = MergeRequest |
app/assets/javascripts/merge_requests.js.coffee
@@ -6,99 +6,3 @@ | @@ -6,99 +6,3 @@ | ||
6 | $('#milestone_id').select2() | 6 | $('#milestone_id').select2() |
7 | $('#milestone_id, #assignee_id').on 'change', -> | 7 | $('#milestone_id, #assignee_id').on 'change', -> |
8 | $(this).closest('form').submit() | 8 | $(this).closest('form').submit() |
9 | - | ||
10 | -class MergeRequest | ||
11 | - | ||
12 | - constructor: (@opts) -> | ||
13 | - this.$el = $('.merge-request') | ||
14 | - @diffs_loaded = if @opts.action == 'diffs' then true else false | ||
15 | - @commits_loaded = false | ||
16 | - | ||
17 | - this.activateTab(@opts.action) | ||
18 | - | ||
19 | - this.bindEvents() | ||
20 | - | ||
21 | - this.initMergeWidget() | ||
22 | - this.$('.show-all-commits').on 'click', => | ||
23 | - this.showAllCommits() | ||
24 | - | ||
25 | - modal = $('#modal_merge_info').modal(show: false) | ||
26 | - | ||
27 | - disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request' | ||
28 | - | ||
29 | - # Local jQuery finder | ||
30 | - $: (selector) -> | ||
31 | - this.$el.find(selector) | ||
32 | - | ||
33 | - initMergeWidget: -> | ||
34 | - this.showState( @opts.current_status ) | ||
35 | - | ||
36 | - if this.$('.automerge_widget').length and @opts.check_enable | ||
37 | - $.get @opts.url_to_automerge_check, (data) => | ||
38 | - this.showState( data.merge_status ) | ||
39 | - , 'json' | ||
40 | - | ||
41 | - if @opts.ci_enable | ||
42 | - $.get @opts.url_to_ci_check, (data) => | ||
43 | - this.showCiState data.status | ||
44 | - , 'json' | ||
45 | - | ||
46 | - bindEvents: -> | ||
47 | - this.$('.nav-tabs').on 'click', 'a', (event) => | ||
48 | - a = $(event.currentTarget) | ||
49 | - | ||
50 | - href = a.attr('href') | ||
51 | - History.replaceState {path: href}, document.title, href | ||
52 | - | ||
53 | - event.preventDefault() | ||
54 | - | ||
55 | - this.$('.nav-tabs').on 'click', 'li', (event) => | ||
56 | - this.activateTab($(event.currentTarget).data('action')) | ||
57 | - | ||
58 | - this.$('.accept_merge_request').on 'click', -> | ||
59 | - $('.automerge_widget.can_be_merged').hide() | ||
60 | - $('.merge-in-progress').show() | ||
61 | - | ||
62 | - activateTab: (action) -> | ||
63 | - this.$('.nav-tabs li').removeClass 'active' | ||
64 | - this.$('.tab-content').hide() | ||
65 | - switch action | ||
66 | - when 'diffs' | ||
67 | - this.$('.nav-tabs .diffs-tab').addClass 'active' | ||
68 | - this.loadDiff() unless @diffs_loaded | ||
69 | - this.$('.diffs').show() | ||
70 | - else | ||
71 | - this.$('.nav-tabs .notes-tab').addClass 'active' | ||
72 | - this.$('.notes').show() | ||
73 | - | ||
74 | - showState: (state) -> | ||
75 | - $('.automerge_widget').hide() | ||
76 | - $('.automerge_widget.' + state).show() | ||
77 | - | ||
78 | - showCiState: (state) -> | ||
79 | - $('.ci_widget').hide() | ||
80 | - $('.ci_widget.ci-' + state).show() | ||
81 | - | ||
82 | - loadDiff: (event) -> | ||
83 | - $.ajax | ||
84 | - type: 'GET' | ||
85 | - url: this.$('.nav-tabs .diffs-tab a').attr('href') | ||
86 | - beforeSend: => | ||
87 | - this.$('.status').addClass 'loading' | ||
88 | - complete: => | ||
89 | - @diffs_loaded = true | ||
90 | - this.$('.status').removeClass 'loading' | ||
91 | - success: (data) => | ||
92 | - this.$(".diffs").html(data.html) | ||
93 | - dataType: 'json' | ||
94 | - | ||
95 | - showAllCommits: -> | ||
96 | - this.$('.first-commits').remove() | ||
97 | - this.$('.all-commits').removeClass 'hide' | ||
98 | - | ||
99 | - alreadyOrCannotBeMerged: -> | ||
100 | - this.$('.automerge_widget').hide() | ||
101 | - this.$('.merge-in-progress').hide() | ||
102 | - this.$('.automerge_widget.already_cannot_be_merged').show() | ||
103 | - | ||
104 | -this.MergeRequest = MergeRequest |
app/controllers/projects/merge_requests_controller.rb
@@ -108,8 +108,15 @@ class Projects::MergeRequestsController < Projects::ApplicationController | @@ -108,8 +108,15 @@ class Projects::MergeRequestsController < Projects::ApplicationController | ||
108 | if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id)) | 108 | if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id)) |
109 | @merge_request.reload_code | 109 | @merge_request.reload_code |
110 | @merge_request.mark_as_unchecked | 110 | @merge_request.mark_as_unchecked |
111 | + | ||
111 | @merge_request.reset_events_cache | 112 | @merge_request.reset_events_cache |
112 | - redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.' | 113 | + |
114 | + respond_to do |format| | ||
115 | + format.js | ||
116 | + format.html do | ||
117 | + redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.' | ||
118 | + end | ||
119 | + end | ||
113 | else | 120 | else |
114 | render "edit" | 121 | render "edit" |
115 | end | 122 | end |
app/views/projects/issues/_issue_context.html.haml
@@ -4,7 +4,7 @@ | @@ -4,7 +4,7 @@ | ||
4 | \ and currently assigned to | 4 | \ and currently assigned to |
5 | 5 | ||
6 | - if can?(current_user, :modify_issue, @issue) | 6 | - if can?(current_user, :modify_issue, @issue) |
7 | - = project_users_select_tag('issue[assignee_id]', placeholder: 'Select a user', class: 'custom-form-control', selected: @issue.assignee_id) | 7 | + = project_users_select_tag('issue[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control', selected: @issue.assignee_id) |
8 | - elsif issue.assignee | 8 | - elsif issue.assignee |
9 | = link_to_member(@project, @issue.assignee) | 9 | = link_to_member(@project, @issue.assignee) |
10 | 10 |
app/views/projects/merge_requests/show/_context.html.haml
0 → 100644
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | += form_for [@project, @merge_request], remote: true, html: {class: 'edit-merge_request inline-update'} do |f| | ||
2 | + Created by #{link_to_member(@project, merge_request.author)} | ||
3 | + - if merge_request.assignee | ||
4 | + \ and currently assigned to | ||
5 | + | ||
6 | + - if can?(current_user, :modify_merge_request, @merge_request) | ||
7 | + = project_users_select_tag('merge_request[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control', selected: @merge_request.assignee_id) | ||
8 | + - elsif merge_request.assignee | ||
9 | + = link_to_member(@project, @merge_request.assignee) | ||
10 | + | ||
11 | + | ||
12 | + .pull-right.hidden-sm.hidden-xs | ||
13 | + - if merge_request.milestone | ||
14 | + - milestone = merge_request.milestone | ||
15 | + %cite.cgray Attached to milestone | ||
16 | + | ||
17 | + - if can?(current_user, :modify_merge_request, @merge_request) | ||
18 | + = f.select(:milestone_id, milestone_options(@merge_request), { include_blank: "Select milestone (none):" }, {class: 'select2 select2-compact'}) | ||
19 | + | ||
20 | + = hidden_field_tag :merge_request_context | ||
21 | + = f.submit class: 'btn' | ||
22 | + - elsif merge_request.milestone | ||
23 | + = link_to merge_request.milestone.title, project_milestone_path |
app/views/projects/merge_requests/show/_mr_box.html.haml
@@ -4,15 +4,7 @@ | @@ -4,15 +4,7 @@ | ||
4 | 4 | ||
5 | .context | 5 | .context |
6 | %cite.cgray | 6 | %cite.cgray |
7 | - Created by #{link_to_member(@project, @merge_request.author)}. | ||
8 | - - if @merge_request.assignee | ||
9 | - Currently assigned to #{link_to_member(@project, @merge_request.assignee)}. | ||
10 | - - if @merge_request.milestone | ||
11 | - .pull-right | ||
12 | - - milestone = @merge_request.milestone | ||
13 | - %cite.cgray Attached to milestone | ||
14 | - %strong= link_to_gfm truncate(milestone.title, length: 20), project_milestone_path(milestone.project, milestone) | ||
15 | - | 7 | + = render partial: 'projects/merge_requests/show/context', locals: { merge_request: @merge_request } |
16 | 8 | ||
17 | - if @merge_request.description.present? | 9 | - if @merge_request.description.present? |
18 | .description | 10 | .description |