summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Schatz <jacobschatz@Jacobs-MBP.fios-router.home>2016-01-05 20:42:25 -0500
committerJacob Schatz <jacobschatz@Jacobs-MBP.fios-router.home>2016-01-05 20:42:25 -0500
commitcbdc8dd46ff2b74e5817053f774cc8f17db55f77 (patch)
tree0753a6a7ba16e2b7656f8dd82c8b47daf5af6c53
parent5a997a02a2cd71877d2af7b72fb67e86722882b2 (diff)
downloadgitlab-ce-cbdc8dd46ff2b74e5817053f774cc8f17db55f77.tar.gz
adds ajax open and close merges, with discussion/comments working as well
-rw-r--r--app/assets/javascripts/merge_request.js.coffee43
-rw-r--r--app/helpers/merge_requests_helper.rb4
-rw-r--r--app/models/merge_request.rb10
-rw-r--r--app/views/projects/merge_requests/_discussion.html.haml9
-rw-r--r--app/views/projects/merge_requests/show/_mr_title.html.haml26
5 files changed, 67 insertions, 25 deletions
diff --git a/app/assets/javascripts/merge_request.js.coffee b/app/assets/javascripts/merge_request.js.coffee
index 9047587db81..8c321319b30 100644
--- a/app/assets/javascripts/merge_request.js.coffee
+++ b/app/assets/javascripts/merge_request.js.coffee
@@ -22,6 +22,7 @@ class @MergeRequest
if $("a.btn-close").length
@initTaskList()
+ @initMergeRequestBtnEventListeners()
# Local jQuery finder
$: (selector) ->
@@ -35,6 +36,48 @@ class @MergeRequest
# Show the first tab (Commits)
$('.merge-request-tabs a[data-toggle="tab"]:first').tab('show')
+ initMergeRequestBtnEventListeners: ->
+ _this = @
+ mergeRequestFailMessage = 'Unable to update this merge request at this time.'
+ $('a.btn-close, a.btn-reopen').on 'click', (e) ->
+ e.preventDefault()
+ e.stopImmediatePropagation()
+ $this = $(this)
+ isClose = $this.hasClass('btn-close')
+ shouldSubmit = $this.hasClass('btn-comment')
+ if shouldSubmit
+ _this.submitNoteForm($this.closest('form'))
+ $this.prop('disabled', true)
+ url = $this.attr('href')
+ $.ajax
+ type: 'PUT',
+ url: url,
+ error: (jqXHR, textStatus, errorThrown) ->
+ mergeRequestStatus = if isClose then 'close' else 'open'
+ new Flash(mergeRequestFailMessage, 'alert')
+ success: (data, textStatus, jqXHR) ->
+ if data.saved
+ if isClose
+ $('a.btn-close').addClass('hidden')
+ $('a.issuable-edit').addClass('hidden')
+ $('a.btn-reopen').removeClass('hidden')
+ $('div.status-box-closed').removeClass('hidden')
+ $('div.status-box-open').addClass('hidden')
+ else
+ $('a.btn-reopen').addClass('hidden')
+ $('a.issuable-edit').removeClass('hidden')
+ $('a.btn-close').removeClass('hidden')
+ $('div.status-box-closed').addClass('hidden')
+ $('div.status-box-open').removeClass('hidden')
+ else
+ new Flash(mergeRequestFailMessage, 'alert')
+ $this.prop('disabled', false)
+
+ submitNoteForm: (form) =>
+ noteText = form.find("textarea.js-note-text").val()
+ if noteText.trim().length > 0
+ form.submit()
+
showAllCommits: ->
this.$('.first-commits').remove()
this.$('.all-commits').removeClass 'hide'
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index 1dd07a2a220..fafe2acd538 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -19,6 +19,10 @@ module MergeRequestsHelper
}
end
+ def merge_request_button_visibility(mr, closed)
+ return 'hidden' if mr.closed? == closed
+ end
+
def mr_css_classes(mr)
classes = "merge-request"
classes << " closed" if mr.closed?
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index ac25d38eb63..f013018ec08 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -456,16 +456,6 @@ class MergeRequest < ActiveRecord::Base
::Gitlab::GitAccess.new(user, project).can_push_to_branch?(target_branch)
end
- def state_human_name
- if merged?
- "Merged"
- elsif closed?
- "Closed"
- else
- "Open"
- end
- end
-
def target_sha
@target_sha ||= target_project.
repository.commit(target_branch).sha
diff --git a/app/views/projects/merge_requests/_discussion.html.haml b/app/views/projects/merge_requests/_discussion.html.haml
index bff3c3b283d..ed3628a36a3 100644
--- a/app/views/projects/merge_requests/_discussion.html.haml
+++ b/app/views/projects/merge_requests/_discussion.html.haml
@@ -1,8 +1,7 @@
- content_for :note_actions do
- if can?(current_user, :update_merge_request, @merge_request)
- - if @merge_request.open?
- = link_to 'Close', merge_request_path(@merge_request, merge_request: {state_event: :close }), method: :put, class: "btn btn-nr btn-grouped btn-close close-mr-link js-note-target-close", title: "Close merge request"
- - if @merge_request.closed?
- = link_to 'Reopen', merge_request_path(@merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-nr btn-grouped btn-reopen reopen-mr-link js-note-target-reopen", title: "Reopen merge request"
+ = link_to 'Close', merge_request_path(@merge_request, merge_request: {state_event: :close}, format: 'json'), data: {no_turbolinks: true}, method: :put, class: "btn btn-nr btn-grouped btn-close close-mr-link btn-comment js-note-target-close #{merge_request_button_visibility(@merge_request, true)}", title: "Close merge request"
+ = link_to 'Reopen', merge_request_path(@merge_request, merge_request: {state_event: :reopen}, format: 'json'), data: {no_turbolinks: true}, method: :put, class: "btn btn-nr btn-grouped btn-reopen reopen-mr-link btn-comment js-note-target-reopen #{merge_request_button_visibility(@merge_request, false)}", title: "Reopen merge request"
-#notes= render "projects/notes/notes_with_form"
+#notes
+ = render "projects/notes/notes_with_form"
diff --git a/app/views/projects/merge_requests/show/_mr_title.html.haml b/app/views/projects/merge_requests/show/_mr_title.html.haml
index fc6fb2a0d42..7996d35c462 100644
--- a/app/views/projects/merge_requests/show/_mr_title.html.haml
+++ b/app/views/projects/merge_requests/show/_mr_title.html.haml
@@ -1,6 +1,12 @@
.detail-page-header
- .status-box{ class: status_box_class(@merge_request) }
- = @merge_request.state_human_name
+ - if @merge_request.merged?
+ .status-box{ class: "status-box-merged" }
+ Merged
+ - else
+ .status-box{ class: "status-box-closed #{merge_request_button_visibility(@merge_request, false)}"}
+ Closed
+ .status-box{ class: "status-box-open #{merge_request_button_visibility(@merge_request, true)}"}
+ Open
%span.identifier
Merge Request ##{@merge_request.iid}
%span.creator
@@ -15,11 +21,11 @@
= time_ago_with_tooltip(@merge_request.updated_at, placement: 'bottom')
.issue-btn-group.pull-right
- - if can?(current_user, :update_merge_request, @merge_request)
- - if @merge_request.open?
- = link_to 'Close', merge_request_path(@merge_request, merge_request: { state_event: :close }), method: :put, class: 'btn btn-nr btn-grouped btn-close', title: 'Close merge request'
- = link_to edit_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), class: 'btn btn-nr btn-grouped issuable-edit', id: 'edit_merge_request' do
- %i.fa.fa-pencil-square-o
- Edit
- - if @merge_request.closed?
- = link_to 'Reopen', merge_request_path(@merge_request, merge_request: {state_event: :reopen }), method: :put, class: 'btn btn-nr btn-grouped btn-reopen reopen-mr-link', title: 'Reopen merge request'
+ - if can?(current_user, :update_merge_request, @merge_request) && !@merge_request.merged?
+
+ = link_to 'Reopen', merge_request_path(@merge_request, merge_request: {state_event: :reopen }, format: 'json'), data: {no_turbolink: true}, method: :put, class: "btn btn-nr btn-grouped btn-reopen reopen-mr-link #{merge_request_button_visibility(@merge_request, false)}", title: 'Reopen merge request'
+ = link_to 'Close', merge_request_path(@merge_request, merge_request: { state_event: :close }, format: 'json'), data: {no_turbolink: true}, method: :put, class: "btn btn-nr btn-grouped btn-close #{merge_request_button_visibility(@merge_request, true)}", title: 'Close merge request'
+
+ = link_to edit_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), class: "btn btn-nr btn-grouped issuable-edit #{merge_request_button_visibility(@merge_request, true)}", id: 'edit_merge_request' do
+ %i.fa.fa-pencil-square-o
+ Edit \ No newline at end of file