From 5f9857113ec5a00d31cff8a743a7b94a2ae5f586 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 6 Jul 2016 14:48:25 +0100 Subject: Fixed enter submitting form in dropdown Closes #19549 --- app/assets/javascripts/gl_dropdown.js.coffee | 55 ++++++++++++++-------------- app/assets/javascripts/project.js.coffee | 7 +++- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index 1b0d0db8954..bfed7e438c4 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -24,33 +24,34 @@ class GitLabDropdownFilter # Key events timeout = "" - @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 - $inputContainer.addClass HAS_VALUE_CLASS - else if @input.val() is "" and $inputContainer.hasClass HAS_VALUE_CLASS - $inputContainer.removeClass HAS_VALUE_CLASS - - if keyCode is 13 - return false - - # Only filter asynchronously only if option remote is set - if @options.remote - clearTimeout timeout - timeout = setTimeout => - blur_field = @shouldBlur keyCode - - if blur_field and @filterInputBlur - @input.blur() - - @options.query @input.val(), (data) => - @options.callback(data) - , 250 - else - @filter @input.val() + @input + .on 'keydown', (e) -> + keyCode = e.which + e.preventDefault() if keyCode is 13 + .on 'keyup', (e) => + keyCode = e.which + + return if ARROW_KEY_CODES.indexOf(keyCode) >= 0 + + if @input.val() isnt '' and !$inputContainer.hasClass HAS_VALUE_CLASS + $inputContainer.addClass HAS_VALUE_CLASS + else if @input.val() is '' and $inputContainer.hasClass HAS_VALUE_CLASS + $inputContainer.removeClass HAS_VALUE_CLASS + + # Only filter asynchronously only if option remote is set + if @options.remote + clearTimeout timeout + timeout = setTimeout => + blur_field = @shouldBlur keyCode + + if blur_field and @filterInputBlur + @input.blur() + + @options.query @input.val(), (data) => + @options.callback(data) + , 250 + else + @filter @input.val() shouldBlur: (keyCode) -> return BLUR_KEYCODES.indexOf(keyCode) >= 0 diff --git a/app/assets/javascripts/project.js.coffee b/app/assets/javascripts/project.js.coffee index 3288c801388..80ea179948d 100644 --- a/app/assets/javascripts/project.js.coffee +++ b/app/assets/javascripts/project.js.coffee @@ -87,5 +87,10 @@ class @Project toggleLabel: (obj, $el) -> $el.text().trim() clicked: (e) -> - $dropdown.closest('form').submit() + if $('input[name="ref"]').length + $form = $dropdown.closest('form') + action = $form.attr('action') + divider = if action.indexOf('?') < 0 then '?' else '&' + + Turbolinks.visit "#{action}#{divider}#{$form.serialize()}" ) -- cgit v1.2.1 From f91cfa8ea48ab975c9f33085c6b13ae1b27c6025 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 14 Jul 2016 09:07:37 +0100 Subject: Fixed navigational keys not working when filtering --- app/assets/javascripts/gl_dropdown.js.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index bfed7e438c4..3688d049a83 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -554,7 +554,7 @@ class GitLabDropdown ARROW_KEY_CODES = [38, 40] $input = @dropdown.find(".dropdown-input-field") - selector = '.dropdown-content li:not(.divider,.dropdown-header,.separator)' + selector = '.dropdown-content li:not(.divider,.dropdown-header,.separator):visible' if @dropdown.find(".dropdown-toggle-page").length selector = ".dropdown-page-one #{selector}" -- cgit v1.2.1 From 1dc706dbd57b3d63e02bbe04c9a1a152ef9af34f Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Mon, 18 Jul 2016 16:43:13 -0500 Subject: Improve conditional --- app/assets/javascripts/gl_dropdown.js.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index 3688d049a83..bd814dd15a2 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -31,7 +31,7 @@ class GitLabDropdownFilter .on 'keyup', (e) => keyCode = e.which - return if ARROW_KEY_CODES.indexOf(keyCode) >= 0 + return unless ARROW_KEY_CODES.indexOf(keyCode) is -1 if @input.val() isnt '' and !$inputContainer.hasClass HAS_VALUE_CLASS $inputContainer.addClass HAS_VALUE_CLASS -- cgit v1.2.1 From 5d7b2bd44e08414addde7eb700e5ccf21f59f94c Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 19 Jul 2016 08:29:57 +0100 Subject: Prevent default on link click in ref switcher --- app/assets/javascripts/project.js.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/project.js.coffee b/app/assets/javascripts/project.js.coffee index 80ea179948d..2a8e8f2552b 100644 --- a/app/assets/javascripts/project.js.coffee +++ b/app/assets/javascripts/project.js.coffee @@ -86,7 +86,8 @@ class @Project $el.attr('data-ref') toggleLabel: (obj, $el) -> $el.text().trim() - clicked: (e) -> + clicked: (selected, $el, e) -> + e.preventDefault() if $('input[name="ref"]').length $form = $dropdown.closest('form') action = $form.attr('action') -- cgit v1.2.1 From 896b9c1dc80af349bab9681bb0c668de65151572 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 19 Jul 2016 19:52:40 +0100 Subject: Fixed issue with filtering & pressing enter key --- app/assets/javascripts/gl_dropdown.js.coffee | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index bd814dd15a2..ab41caa28f8 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -311,6 +311,7 @@ class GitLabDropdown return true opened: => + currentIndex = -1 @addArrowKeyEvent() if @options.setIndeterminateIds @@ -568,9 +569,6 @@ class GitLabDropdown PREV_INDEX = currentIndex $listItems = $(selector, @dropdown) - # if @options.filterable - # $input.blur() - if currentKeyCode is 40 # Move down currentIndex += 1 if currentIndex < ($listItems.length - 1) @@ -583,7 +581,7 @@ class GitLabDropdown return false if currentKeyCode is 13 and currentIndex isnt -1 - @selectRowAtIndex e, currentIndex + @selectRowAtIndex e, $('.is-focused', @dropdown).closest('li').index() - 1 removeArrayKeyEvent: -> $('body').off 'keydown' -- cgit v1.2.1 From e5b64f20c730bd6e18af694b2c1503020ba1db51 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 19 Jul 2016 20:26:41 +0100 Subject: Added ref switcher enter key tests --- spec/features/projects/ref_switcher_spec.rb | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 spec/features/projects/ref_switcher_spec.rb diff --git a/spec/features/projects/ref_switcher_spec.rb b/spec/features/projects/ref_switcher_spec.rb new file mode 100644 index 00000000000..b3ba40b35af --- /dev/null +++ b/spec/features/projects/ref_switcher_spec.rb @@ -0,0 +1,29 @@ +require 'rails_helper' + +feature 'Ref switcher', feature: true, js: true do + include WaitForAjax + let(:user) { create(:user) } + let(:project) { create(:project, :public) } + + before do + project.team << [user, :master] + login_as(user) + visit namespace_project_tree_path(project.namespace, project, 'master') + end + + it 'allow user to change ref by enter key' do + click_button 'master' + wait_for_ajax + + page.within '.project-refs-form' do + input = find('input[type="search"]') + input.set 'expand' + + input.native.send_keys :down + input.native.send_keys :down + input.native.send_keys :enter + + expect(page).to have_content 'expand-collapse-files' + end + end +end -- cgit v1.2.1 From b1b32bfcf8c28e038a7450238a4109288e1146ed Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 3 Aug 2016 09:31:36 +0100 Subject: Fixed issue with `this` not being defined --- app/assets/javascripts/gl_dropdown.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/gl_dropdown.js b/app/assets/javascripts/gl_dropdown.js index a9a7c802f87..356810c85cc 100644 --- a/app/assets/javascripts/gl_dropdown.js +++ b/app/assets/javascripts/gl_dropdown.js @@ -60,8 +60,8 @@ } return this.options.query(this.input.val(), function(data) { return this.options.callback(data); - }); - }, 250); + }.bind(this)); + }.bind(this), 250); } else { return this.filter(this.input.val()); } -- cgit v1.2.1 From 4d716b765c66d51aa8026ce8622d704c2d52844a Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 4 Aug 2016 12:07:46 +0100 Subject: Underscore variable to camelCase --- app/assets/javascripts/gl_dropdown.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/gl_dropdown.js b/app/assets/javascripts/gl_dropdown.js index 356810c85cc..cc7e422fd89 100644 --- a/app/assets/javascripts/gl_dropdown.js +++ b/app/assets/javascripts/gl_dropdown.js @@ -53,9 +53,8 @@ if (this.options.remote) { clearTimeout(timeout); return timeout = setTimeout(function() { - var blur_field; - blur_field = this.shouldBlur(keyCode); - if (blur_field && this.filterInputBlur) { + var blurField = this.shouldBlur(keyCode); + if (blurField && this.filterInputBlur) { this.input.blur(); } return this.options.query(this.input.val(), function(data) { -- cgit v1.2.1