Commit cbdc8dd4 authored by Jacob Schatz's avatar Jacob Schatz

adds ajax open and close merges, with discussion/comments working as well

parent 5a997a02
...@@ -22,6 +22,7 @@ class @MergeRequest ...@@ -22,6 +22,7 @@ class @MergeRequest
if $("a.btn-close").length if $("a.btn-close").length
@initTaskList() @initTaskList()
@initMergeRequestBtnEventListeners()
# Local jQuery finder # Local jQuery finder
$: (selector) -> $: (selector) ->
...@@ -35,6 +36,48 @@ class @MergeRequest ...@@ -35,6 +36,48 @@ class @MergeRequest
# Show the first tab (Commits) # Show the first tab (Commits)
$('.merge-request-tabs a[data-toggle="tab"]:first').tab('show') $('.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: -> showAllCommits: ->
this.$('.first-commits').remove() this.$('.first-commits').remove()
this.$('.all-commits').removeClass 'hide' this.$('.all-commits').removeClass 'hide'
......
...@@ -19,6 +19,10 @@ module MergeRequestsHelper ...@@ -19,6 +19,10 @@ module MergeRequestsHelper
} }
end end
def merge_request_button_visibility(mr, closed)
return 'hidden' if mr.closed? == closed
end
def mr_css_classes(mr) def mr_css_classes(mr)
classes = "merge-request" classes = "merge-request"
classes << " closed" if mr.closed? classes << " closed" if mr.closed?
......
...@@ -456,16 +456,6 @@ class MergeRequest < ActiveRecord::Base ...@@ -456,16 +456,6 @@ class MergeRequest < ActiveRecord::Base
::Gitlab::GitAccess.new(user, project).can_push_to_branch?(target_branch) ::Gitlab::GitAccess.new(user, project).can_push_to_branch?(target_branch)
end end
def state_human_name
if merged?
"Merged"
elsif closed?
"Closed"
else
"Open"
end
end
def target_sha def target_sha
@target_sha ||= target_project. @target_sha ||= target_project.
repository.commit(target_branch).sha repository.commit(target_branch).sha
......
- content_for :note_actions do - content_for :note_actions do
- if can?(current_user, :update_merge_request, @merge_request) - 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}, 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 '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" = 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"
- 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"
#notes= render "projects/notes/notes_with_form" #notes
= render "projects/notes/notes_with_form"
.detail-page-header .detail-page-header
.status-box{ class: status_box_class(@merge_request) } - if @merge_request.merged?
= @merge_request.state_human_name .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 %span.identifier
Merge Request ##{@merge_request.iid} Merge Request ##{@merge_request.iid}
%span.creator %span.creator
...@@ -15,11 +21,11 @@ ...@@ -15,11 +21,11 @@
= time_ago_with_tooltip(@merge_request.updated_at, placement: 'bottom') = time_ago_with_tooltip(@merge_request.updated_at, placement: 'bottom')
.issue-btn-group.pull-right .issue-btn-group.pull-right
- if can?(current_user, :update_merge_request, @merge_request) - if can?(current_user, :update_merge_request, @merge_request) && !@merge_request.merged?
- 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 '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 edit_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), class: 'btn btn-nr btn-grouped issuable-edit', id: 'edit_merge_request' do = 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'
%i.fa.fa-pencil-square-o
Edit = 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
- if @merge_request.closed? %i.fa.fa-pencil-square-o
= 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' Edit
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment