118 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			CoffeeScript
		
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			CoffeeScript
		
	
	
	
| #= require flash
 | |
| #= require jquery.waitforimages
 | |
| #= require task_list
 | |
| 
 | |
| class @Issue
 | |
|   constructor: ->
 | |
|     # Prevent duplicate event bindings
 | |
|     @disableTaskList()
 | |
|     if $('a.btn-close').length
 | |
|       @initTaskList()
 | |
|       @initIssueBtnEventListeners()
 | |
| 
 | |
|     @initMergeRequests()
 | |
|     @initRelatedBranches()
 | |
|     @initCanCreateBranch()
 | |
| 
 | |
|   initTaskList: ->
 | |
|     $('.detail-page-description .js-task-list-container').taskList('enable')
 | |
|     $(document).on 'tasklist:changed', '.detail-page-description .js-task-list-container', @updateTaskList
 | |
| 
 | |
|   initIssueBtnEventListeners: ->
 | |
|     _this = @
 | |
|     issueFailMessage = 'Unable to update this issue 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) ->
 | |
|           issueStatus = if isClose then 'close' else 'open'
 | |
|           new Flash(issueFailMessage, 'alert')
 | |
|         success: (data, textStatus, jqXHR) ->
 | |
|           if 'id' of data
 | |
|             $(document).trigger('issuable:change');
 | |
|             if isClose
 | |
|               $('a.btn-close').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.btn-close').removeClass('hidden')
 | |
|               $('div.status-box-closed').addClass('hidden')
 | |
|               $('div.status-box-open').removeClass('hidden')
 | |
|           else
 | |
|             new Flash(issueFailMessage, 'alert')
 | |
|           $this.prop('disabled', false)
 | |
| 
 | |
|   submitNoteForm: (form) =>
 | |
|     noteText = form.find("textarea.js-note-text").val()
 | |
|     if noteText.trim().length > 0
 | |
|       form.submit()
 | |
| 
 | |
|   disableTaskList: ->
 | |
|     $('.detail-page-description .js-task-list-container').taskList('disable')
 | |
|     $(document).off 'tasklist:changed', '.detail-page-description .js-task-list-container'
 | |
| 
 | |
|   # TODO (rspeicher): Make the issue description inline-editable like a note so
 | |
|   # that we can re-use its form here
 | |
|   updateTaskList: ->
 | |
|     patchData = {}
 | |
|     patchData['issue'] = {'description': $('.js-task-list-field', this).val()}
 | |
| 
 | |
|     $.ajax
 | |
|       type: 'PATCH'
 | |
|       url: $('form.js-issuable-update').attr('action')
 | |
|       data: patchData
 | |
| 
 | |
|   initMergeRequests: ->
 | |
|     $container = $('#merge-requests')
 | |
| 
 | |
|     $.getJSON($container.data('url'))
 | |
|       .error ->
 | |
|         new Flash('Failed to load referenced merge requests', 'alert')
 | |
|       .success (data) ->
 | |
|         if 'html' of data
 | |
|           $container.html(data.html)
 | |
| 
 | |
|   initRelatedBranches: ->
 | |
|     $container = $('#related-branches')
 | |
| 
 | |
|     $.getJSON($container.data('url'))
 | |
|       .error ->
 | |
|         new Flash('Failed to load related branches', 'alert')
 | |
|       .success (data) ->
 | |
|         if 'html' of data
 | |
|           $container.html(data.html)
 | |
| 
 | |
|   initCanCreateBranch: ->
 | |
|     $container = $('div#new-branch')
 | |
| 
 | |
|     # If the user doesn't have the required permissions the container isn't
 | |
|     # rendered at all.
 | |
|     return unless $container
 | |
| 
 | |
|     $.getJSON($container.data('path'))
 | |
|       .error ->
 | |
|         $container.find('.checking').hide()
 | |
|         $container.find('.unavailable').show()
 | |
| 
 | |
|         new Flash('Failed to check if a new branch can be created.', 'alert')
 | |
|       .success (data) ->
 | |
|         if data.can_create_branch
 | |
|           $container.find('.checking').hide()
 | |
|           $container.find('.available').show()
 | |
|           $container.find('a').attr('disabled', false)
 | |
|         else
 | |
|           $container.find('.checking').hide()
 | |
|           $container.find('.unavailable').show()
 |