summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/gl_dropdown.js.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/gl_dropdown.js.coffee')
-rw-r--r--app/assets/javascripts/gl_dropdown.js.coffee36
1 files changed, 24 insertions, 12 deletions
diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee
index 8ab82dc2520..c00facd921d 100644
--- a/app/assets/javascripts/gl_dropdown.js.coffee
+++ b/app/assets/javascripts/gl_dropdown.js.coffee
@@ -1,22 +1,26 @@
class GitLabDropdownFilter
BLUR_KEYCODES = [27, 40]
- constructor: (@dropdown, @remote, @data, @callback) ->
+ constructor: (@dropdown, @remote, @query, @data, @callback) ->
@input = @dropdown.find(".dropdown-input-field")
# Key events
+ timeout = ""
@input.on "keyup", (e) =>
- blur_field = @shouldBlur e.keyCode
- search_text = @input.val()
+ clearTimeout timeout
+ timeout = setTimeout =>
+ blur_field = @shouldBlur e.keyCode
+ search_text = @input.val()
- if blur_field
- @input.blur()
+ if blur_field
+ @input.blur()
- if @remote
- @remote search_text, (data) =>
- @callback(data)
- else
- @filter search_text
+ if @remote
+ @query search_text, (data) =>
+ @callback(data)
+ else
+ @filter search_text
+ , 250
shouldBlur: (keyCode) ->
return BLUR_KEYCODES.indexOf(keyCode) >= 0
@@ -38,7 +42,7 @@ class GitLabDropdownRemote
@options.beforeSend()
# Fetch the data by calling the data funcfion
- @dataEndpoint (data) =>
+ @dataEndpoint "", (data) =>
if @options.success
@options.success(data)
@@ -86,13 +90,14 @@ class GitLabDropdown
# Init filiterable
if @options.filterable
- @filter = new GitLabDropdownFilter @dropdown, @options.query, =>
+ @filter = new GitLabDropdownFilter @dropdown, @options.filterRemote, @options.data, =>
return @fullData
, (data) =>
@parseData data
# Event listeners
$(@el).parent().on "shown.bs.dropdown", @opened
+ $(@el).parent().on "hidden.bs.dropdown", @hidden
if @options.selectable
@dropdown.on "click", "a", (e) ->
@@ -124,6 +129,13 @@ class GitLabDropdown
if @remote
@remote.execute()
+ if @options.filterable
+ @dropdown.find(".dropdown-input-field").focus()
+
+ hidden: =>
+ if @options.filterable
+ @dropdown.find(".dropdown-input-field").blur().val("")
+
# Render the full menu
renderMenu: (html) ->
menu_html = ""