76 lines
1.8 KiB
CoffeeScript
76 lines
1.8 KiB
CoffeeScript
|
class @Search
|
||
|
constructor: ->
|
||
|
$groupDropdown = $('.js-search-group-dropdown')
|
||
|
$projectDropdown = $('.js-search-project-dropdown')
|
||
|
@eventListeners()
|
||
|
|
||
|
$groupDropdown.glDropdown(
|
||
|
selectable: true
|
||
|
filterable: true
|
||
|
fieldName: 'group_id'
|
||
|
data: (term, callback) ->
|
||
|
Api.groups term, null, (data) ->
|
||
|
data.unshift(
|
||
|
name: 'Any'
|
||
|
)
|
||
|
data.splice 1, 0, 'divider'
|
||
|
|
||
|
callback(data)
|
||
|
id: (obj) ->
|
||
|
obj.id
|
||
|
text: (obj) ->
|
||
|
obj.name
|
||
|
toggleLabel: (obj) ->
|
||
|
"#{$groupDropdown.data('default-label')} #{obj.name}"
|
||
|
clicked: =>
|
||
|
@submitSearch()
|
||
|
)
|
||
|
|
||
|
$projectDropdown.glDropdown(
|
||
|
selectable: true
|
||
|
filterable: true
|
||
|
fieldName: 'project_id'
|
||
|
data: (term, callback) ->
|
||
|
Api.projects term, 'id', (data) ->
|
||
|
data.unshift(
|
||
|
name_with_namespace: 'Any'
|
||
|
)
|
||
|
data.splice 1, 0, 'divider'
|
||
|
|
||
|
callback(data)
|
||
|
id: (obj) ->
|
||
|
obj.id
|
||
|
text: (obj) ->
|
||
|
obj.name_with_namespace
|
||
|
toggleLabel: (obj) ->
|
||
|
"#{$projectDropdown.data('default-label')} #{obj.name_with_namespace}"
|
||
|
clicked: =>
|
||
|
@submitSearch()
|
||
|
)
|
||
|
|
||
|
eventListeners: ->
|
||
|
$(document)
|
||
|
.off 'keyup', '.js-search-input'
|
||
|
.on 'keyup', '.js-search-input', @searchKeyUp
|
||
|
|
||
|
$(document)
|
||
|
.off 'click', '.js-search-clear'
|
||
|
.on 'click', '.js-search-clear', @clearSearchField
|
||
|
|
||
|
submitSearch: ->
|
||
|
$('.js-search-form').submit()
|
||
|
|
||
|
searchKeyUp: ->
|
||
|
$input = $(@)
|
||
|
|
||
|
if $input.val() is ''
|
||
|
$('.js-search-clear').addClass 'hidden'
|
||
|
else
|
||
|
$('.js-search-clear').removeClass 'hidden'
|
||
|
|
||
|
clearSearchField: ->
|
||
|
$('.js-search-input')
|
||
|
.val ''
|
||
|
.trigger 'keyup'
|
||
|
.focus()
|