Fixed issue based on feedback

This commit is contained in:
Phil Hughes 2016-03-31 08:55:12 +01:00
parent a103fcb7cb
commit f76066b9fb

View file

@ -1,5 +1,6 @@
class GitLabDropdownFilter class GitLabDropdownFilter
BLUR_KEYCODES = [27, 40] BLUR_KEYCODES = [27, 40]
ARROW_KEY_CODES = [38, 40]
HAS_VALUE_CLASS = "has-value" HAS_VALUE_CLASS = "has-value"
constructor: (@input, @options) -> constructor: (@input, @options) ->
@ -22,19 +23,23 @@ class GitLabDropdownFilter
# Key events # Key events
timeout = "" timeout = ""
@input.on "keyup", (e) => @input.on "keyup", (e) =>
keyCode = e.which
return if ARROW_KEY_CODES.indexOf(keyCode) >= 0
if @input.val() isnt "" and !$inputContainer.hasClass HAS_VALUE_CLASS if @input.val() isnt "" and !$inputContainer.hasClass HAS_VALUE_CLASS
$inputContainer.addClass HAS_VALUE_CLASS $inputContainer.addClass HAS_VALUE_CLASS
else if @input.val() is "" and $inputContainer.hasClass HAS_VALUE_CLASS else if @input.val() is "" and $inputContainer.hasClass HAS_VALUE_CLASS
$inputContainer.removeClass HAS_VALUE_CLASS $inputContainer.removeClass HAS_VALUE_CLASS
if e.keyCode is 13 and @input.val() isnt "" if keyCode is 13 and @input.val() isnt ""
if @options.enterCallback if @options.enterCallback
@options.enterCallback() @options.enterCallback()
return return
clearTimeout timeout clearTimeout timeout
timeout = setTimeout => timeout = setTimeout =>
blur_field = @shouldBlur e.keyCode blur_field = @shouldBlur keyCode
search_text = @input.val() search_text = @input.val()
if blur_field and @filterInputBlur if blur_field and @filterInputBlur
@ -96,7 +101,7 @@ class GitLabDropdown
LOADING_CLASS = "is-loading" LOADING_CLASS = "is-loading"
PAGE_TWO_CLASS = "is-page-two" PAGE_TWO_CLASS = "is-page-two"
ACTIVE_CLASS = "is-active" ACTIVE_CLASS = "is-active"
CURRENT_INDEX = -1 currentIndex = -1
FILTER_INPUT = '.dropdown-input .dropdown-input-field' FILTER_INPUT = '.dropdown-input .dropdown-input-field'
@ -146,7 +151,7 @@ class GitLabDropdown
data: => data: =>
return @fullData return @fullData
callback: (data) => callback: (data) =>
CURRENT_INDEX = -1 currentIndex = -1
@parseData data @parseData data
enterCallback: => enterCallback: =>
if @enterCallback if @enterCallback
@ -311,11 +316,11 @@ class GitLabDropdown
if @highlight if @highlight
text = @highlightTextMatches(text, @filterInput.val()) text = @highlightTextMatches(text, @filterInput.val())
html = "<li>" html = "<li>
html += "<a href='#{url}' class='#{cssClass}'>" <a href='#{url}' class='#{cssClass}'>
html += text #{text}
html += "</a>" </a>
html += "</li>" </li>"
return html return html
@ -398,31 +403,31 @@ class GitLabDropdown
selector = ".dropdown-page-one #{selector}" selector = ".dropdown-page-one #{selector}"
$('body').on 'keydown', (e) => $('body').on 'keydown', (e) =>
currentKeyCode = e.keyCode currentKeyCode = e.which
if ARROW_KEY_CODES.indexOf(currentKeyCode) >= 0 if ARROW_KEY_CODES.indexOf(currentKeyCode) >= 0
e.preventDefault() e.preventDefault()
e.stopPropagation() e.stopImmediatePropagation()
PREV_INDEX = CURRENT_INDEX PREV_INDEX = currentIndex
$listItems = $(selector, @dropdown) $listItems = $(selector, @dropdown)
if @options.filterable # if @options.filterable
$input.blur() # $input.blur()
if currentKeyCode is 40 if currentKeyCode is 40
# Move down # Move down
CURRENT_INDEX += 1 if CURRENT_INDEX < ($listItems.length - 1) currentIndex += 1 if currentIndex < ($listItems.length - 1)
else if currentKeyCode is 38 else if currentKeyCode is 38
# Move up # Move up
CURRENT_INDEX -= 1 if CURRENT_INDEX > 0 currentIndex -= 1 if currentIndex > 0
@highlightRowAtIndex($listItems, CURRENT_INDEX) if CURRENT_INDEX isnt PREV_INDEX @highlightRowAtIndex($listItems, currentIndex) if currentIndex isnt PREV_INDEX
return false return false
if currentKeyCode is 13 if currentKeyCode is 13
@selectRowAtIndex CURRENT_INDEX @selectRowAtIndex currentIndex
removeArrayKeyEvent: -> removeArrayKeyEvent: ->
$('body').off 'keydown' $('body').off 'keydown'
@ -437,13 +442,13 @@ class GitLabDropdown
# Dropdown content scroll area # Dropdown content scroll area
$dropdownContent = $listItem.closest('.dropdown-content') $dropdownContent = $listItem.closest('.dropdown-content')
dropdownScrollTop = $dropdownContent.prop('scrollTop') dropdownScrollTop = $dropdownContent.scrollTop()
dropdownContentHeight = $dropdownContent.prop('offsetHeight') dropdownContentHeight = $dropdownContent.outerHeight()
dropdownContentTop = $dropdownContent.prop('offsetTop') dropdownContentTop = $dropdownContent.prop('offsetTop')
dropdownContentBottom = dropdownContentTop + dropdownContentHeight dropdownContentBottom = dropdownContentTop + dropdownContentHeight
# Get the offset bottom of the list item # Get the offset bottom of the list item
listItemHeight = $listItem.prop('offsetHeight') listItemHeight = $listItem.outerHeight()
listItemTop = $listItem.prop('offsetTop') listItemTop = $listItem.prop('offsetTop')
listItemBottom = listItemTop + listItemHeight listItemBottom = listItemTop + listItemHeight