Files
gerrit/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.html
Kasper Nilsson 0b0e727096 Correct autocomplete focus jank again
In Ic872d5597d4bfcf5260d9907baec3882fa9f80d9, autocomplete focus
behavior was made significantly less aggressive. This resulted in some
issues:
- When cycling between autocomplete options, a user was unable to type
  in the input.
- When an autocomplete option was selected, keypresses bubbled up to
  the parent view.
- After selecting an autocomplete entry, focus did not return to the
  input.

This change fixes all of these by adding the _handleKeydown handler to
the autocomplete-dropdown and revamping the _handleItemSelect behavior.

Bug: Issue 6743
Change-Id: Ie91f69e2f3e5b78e68b2df3612a1a771a01ea51a
2017-07-18 17:01:00 -07:00

67 lines
2.3 KiB
HTML

<!--
Copyright (C) 2016 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
<link rel="import" href="../../../bower_components/iron-input/iron-input.html">
<link rel="import" href="../../shared/gr-autocomplete-dropdown/gr-autocomplete-dropdown.html">
<link rel="import" href="../../shared/gr-cursor-manager/gr-cursor-manager.html">
<link rel="import" href="../../../styles/shared-styles.html">
<dom-module id="gr-autocomplete">
<template>
<style include="shared-styles">
input {
font-size: 1em;
height: 100%;
width: 100%;
@apply --gr-autocomplete;
}
input.borderless,
input.borderless:focus {
border: none;
outline: none;
}
input.warnUncommitted {
color: red;
}
</style>
<input
id="input"
class$="[[_computeClass(borderless)]]"
is="iron-input"
disabled$="[[disabled]]"
bind-value="{{text}}"
placeholder="[[placeholder]]"
on-keydown="_handleKeydown"
on-focus="_onInputFocus"
on-blur="_onInputBlur"
autocomplete="off"/>
<!-- This container is needed for Safari and Firefox -->
<div id="suggestionContainer">
<gr-autocomplete-dropdown
id="suggestions"
on-item-selected="_handleItemSelect"
on-keydown="_handleKeydown"
suggestions="[[_suggestions]]"
role="listbox"
index="[[_index]]"
hidden$="[[_computeSuggestionsHidden(_suggestions, _focused)]]">
</gr-autocomplete-dropdown>
</div>
</template>
<script src="gr-autocomplete.js"></script>
</dom-module>