Commit ec8628fa95b54dae3a0a680e3df043ba01c3e0de

Authored by Dmitriy Zaporozhets
2 parents 9d637d57 70212889

Merge branch 'feature/mr_context' into 'master'

Allow change assignee/milestone from MergeRequest show page
app/assets/javascripts/merge_request.js.coffee 0 → 100644
@@ -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
app/views/projects/merge_requests/update.js.haml 0 → 100644
@@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
  1 +- if params[:merge_request_context]
  2 + $('.issue-box .context').effect('highlight');