
Makes autocomplete entries focusable, supplies the <li> elements with proper keydown handling, and adds a focus() call to <gr-cursor-manager>. This focus() call is optional, enabled by the 'focus-on-move' property. Bug: Issue 4281, Issue 4279, Issue 5321 Change-Id: I944350090ccb240bde6302f0aba8f2585172f5df
90 lines
2.6 KiB
HTML
90 lines
2.6 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-cursor-manager/gr-cursor-manager.html">
|
|
|
|
<dom-module id="gr-autocomplete">
|
|
<template>
|
|
<style>
|
|
input {
|
|
font-size: 1em;
|
|
height: 100%;
|
|
width: 100%;
|
|
}
|
|
input.borderless,
|
|
input.borderless:focus {
|
|
border: none;
|
|
outline: none;
|
|
}
|
|
#suggestions {
|
|
background-color: #fff;
|
|
box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
|
|
position: absolute;
|
|
z-index: 10;
|
|
}
|
|
ul {
|
|
list-style: none;
|
|
}
|
|
li {
|
|
cursor: pointer;
|
|
padding: .5em .75em;
|
|
}
|
|
li:focus {
|
|
outline: none;
|
|
}
|
|
li.selected {
|
|
background-color: #eee;
|
|
}
|
|
</style>
|
|
<input
|
|
id="input"
|
|
class$="[[_computeClass(borderless)]]"
|
|
is="iron-input"
|
|
disabled$="[[disabled]]"
|
|
bind-value="{{text}}"
|
|
placeholder="[[placeholder]]"
|
|
on-keydown="_handleKeydown"
|
|
on-focus="_onInputFocus"
|
|
autocomplete="off" />
|
|
<div
|
|
id="suggestions"
|
|
role="listbox"
|
|
hidden$="[[_computeSuggestionsHidden(_suggestions, _focused)]]">
|
|
<ul>
|
|
<template is="dom-repeat" items="[[_suggestions]]">
|
|
<li
|
|
data-index$="[[index]]"
|
|
tabindex="-1"
|
|
aria-label$="[[item.name]]"
|
|
on-keydown="_handleKeydown"
|
|
role="option"
|
|
on-tap="_handleSuggestionTap">[[item.name]]</li>
|
|
</template>
|
|
</ul>
|
|
</div>
|
|
<gr-cursor-manager
|
|
id="cursor"
|
|
index="{{_index}}"
|
|
cursor-target-class="selected"
|
|
scroll-behavior="keep-visible"
|
|
focus-on-move
|
|
stops="[[_getSuggestionElems(_suggestions)]]"></gr-cursor-manager>
|
|
</template>
|
|
<script src="gr-autocomplete.js"></script>
|
|
</dom-module>
|