80b2f3fb86
It is same search like we have at issues page. It allows to quickly filter merge requests based on title or desription. I copy-pasted some js code from Issues.js. In future search (filtering) logic should be refactoed into one class for merge requests and issues
85 lines
2.7 KiB
CoffeeScript
85 lines
2.7 KiB
CoffeeScript
@Issues =
|
|
init: ->
|
|
Issues.initSearch()
|
|
Issues.initSelects()
|
|
Issues.initChecks()
|
|
|
|
$("body").on "ajax:success", ".close_issue, .reopen_issue", ->
|
|
t = $(this)
|
|
totalIssues = undefined
|
|
reopen = t.hasClass("reopen_issue")
|
|
$(".issue_counter").each ->
|
|
issue = $(this)
|
|
totalIssues = parseInt($(this).html(), 10)
|
|
if reopen and issue.closest(".main_menu").length
|
|
$(this).html totalIssues + 1
|
|
else
|
|
$(this).html totalIssues - 1
|
|
$("body").on "click", ".issues-other-filters .dropdown-menu a", ->
|
|
$('.issues-list').block(
|
|
message: null,
|
|
overlayCSS:
|
|
backgroundColor: '#DDD'
|
|
opacity: .4
|
|
)
|
|
|
|
reload: ->
|
|
Issues.initSelects()
|
|
Issues.initChecks()
|
|
$('#filter_issue_search').val($('#issue_search').val())
|
|
|
|
initSelects: ->
|
|
$("select#update_status").select2(width: 'resolve', dropdownAutoWidth: true)
|
|
$("select#update_assignee_id").select2(width: 'resolve', dropdownAutoWidth: true)
|
|
$("select#update_milestone_id").select2(width: 'resolve', dropdownAutoWidth: true)
|
|
$("select#label_name").select2(width: 'resolve', dropdownAutoWidth: true)
|
|
$("#milestone_id, #assignee_id, #label_name").on "change", ->
|
|
$(this).closest("form").submit()
|
|
|
|
initChecks: ->
|
|
$(".check_all_issues").click ->
|
|
$(".selected_issue").prop("checked", @checked)
|
|
Issues.checkChanged()
|
|
|
|
$(".selected_issue").bind "change", Issues.checkChanged
|
|
|
|
# Make sure we trigger ajax request only after user stop typing
|
|
initSearch: ->
|
|
@timer = null
|
|
$("#issue_search").keyup ->
|
|
clearTimeout(@timer)
|
|
@timer = setTimeout(Issues.filterResults, 500)
|
|
|
|
filterResults: =>
|
|
form = $("#issue_search_form")
|
|
search = $("#issue_search").val()
|
|
$('.issues-holder').css("opacity", '0.5')
|
|
issues_url = form.attr('action') + '? '+ form.serialize()
|
|
|
|
$.ajax
|
|
type: "GET"
|
|
url: form.attr('action')
|
|
data: form.serialize()
|
|
complete: ->
|
|
$('.issues-holder').css("opacity", '1.0')
|
|
success: (data) ->
|
|
$('.issues-holder').html(data.html)
|
|
# Change url so if user reload a page - search results are saved
|
|
History.replaceState {page: issues_url}, document.title, issues_url
|
|
Issues.reload()
|
|
dataType: "json"
|
|
|
|
checkChanged: ->
|
|
checked_issues = $(".selected_issue:checked")
|
|
if checked_issues.length > 0
|
|
ids = []
|
|
$.each checked_issues, (index, value) ->
|
|
ids.push $(value).attr("data-id")
|
|
|
|
$("#update_issues_ids").val ids
|
|
$(".issues-other-filters").hide()
|
|
$(".issues_bulk_update").show()
|
|
else
|
|
$("#update_issues_ids").val []
|
|
$(".issues_bulk_update").hide()
|
|
$(".issues-other-filters").show()
|