Show autocomplete suggestions only when input is focused
This change adds a flag that tracks whether or not the input is focused
to conditionally show the suggestions.
Change-Id: I86b09462cd34d8999b41780a8923e61fdf1d88c3
diff --git a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.html b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.html
index cda2492..97a4f3d 100644
--- a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.html
+++ b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.html
@@ -59,7 +59,7 @@
autocomplete="off" />
<div
id="suggestions"
- hidden$="[[_computeSuggestionsHidden(_suggestions)]]">
+ hidden$="[[_computeSuggestionsHidden(_suggestions, _focused)]]">
<ul>
<template is="dom-repeat" items="[[_suggestions]]">
<li
diff --git a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js
index 4f3cd34..467acb7 100644
--- a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js
+++ b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete.js
@@ -110,6 +110,11 @@
value: false,
},
+ _focused: {
+ type: Boolean,
+ value: false,
+ },
+
},
attached: function() {
@@ -164,8 +169,8 @@
}.bind(this));
},
- _computeSuggestionsHidden: function(suggestions) {
- return !suggestions.length;
+ _computeSuggestionsHidden: function(suggestions, focused) {
+ return !(suggestions.length && focused);
},
_computeClass: function(borderless) {
@@ -229,10 +234,12 @@
var eventPath = Polymer.dom(e).path;
for (var i = 0; i < eventPath.length; i++) {
if (eventPath[i] == this) {
+ this._focused = true;
return;
}
}
this._suggestions = [];
+ this._focused = false;
},
_handleSuggestionTap: function(e) {
diff --git a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete_test.html b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete_test.html
index ba1cbd2..63c1b3c 100644
--- a/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-autocomplete/gr-autocomplete_test.html
@@ -57,6 +57,7 @@
element.text = 'blah';
assert.isTrue(queryStub.called);
+ element._focused = true;
promise.then(function() {
assert.isFalse(element.$.suggestions.hasAttribute('hidden'));
@@ -69,7 +70,6 @@
}
assert.notEqual(element.$.cursor.index, -1);
-
done();
});
});
@@ -85,6 +85,7 @@
assert.isTrue(element.$.suggestions.hasAttribute('hidden'));
+ element._focused = true;
element.text = 'blah';
promise.then(function() {
@@ -94,7 +95,6 @@
element.addEventListener('cancel', cancelHandler);
MockInteractions.pressAndReleaseKeyOn(element.$.input, 27); // Esc
-
assert.isTrue(cancelHandler.called);
assert.isTrue(element.$.suggestions.hasAttribute('hidden'));
@@ -117,7 +117,7 @@
assert.isTrue(element.$.suggestions.hasAttribute('hidden'));
assert.equal(element.$.cursor.index, -1);
-
+ element._focused = true;
element.text = 'blah';
promise.then(function() {
@@ -265,5 +265,11 @@
MockInteractions.pressAndReleaseKeyOn(element.$.input, 9); // tab
assert.isTrue(commitHandler.called);
});
+
+ test('_focused flag shows/hides the suggestions', function() {
+ var suggestions = ['hello', 'its me'];
+ assert.isTrue(element._computeSuggestionsHidden(suggestions, false));
+ assert.isFalse(element._computeSuggestionsHidden(suggestions, true));
+ });
});
</script>