Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(497)

Unified Diff: third_party/WebKit/Source/devtools/front_end/ui/TextPrompt.js

Issue 2285993002: DevTools: Fix flickering hint when typing in TextPrompt (Closed)
Patch Set: fix test Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/LayoutTests/http/tests/inspector-unit/text-prompt-hint-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/devtools/front_end/ui/TextPrompt.js
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/TextPrompt.js b/third_party/WebKit/Source/devtools/front_end/ui/TextPrompt.js
index 8ec159fc70c3c1f62ed4caa0c863fc533be1e904..b64eafa6ccf99f99708c369843d4a7cda866d91d 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/TextPrompt.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/TextPrompt.js
@@ -45,6 +45,8 @@ WebInspector.TextPrompt = function(completions, stopCharacters)
this._completionStopCharacters = stopCharacters || " =:[({;,!+-*/&|^<>.";
this._autocompletionTimeout = WebInspector.TextPrompt.DefaultAutocompletionTimeout;
this._title = "";
+ this._previousText = "";
+ this._currentHintText = "";
this._completionRequestId = 0;
}
@@ -190,6 +192,7 @@ WebInspector.TextPrompt.prototype = {
} else {
this._element.textContent = x;
}
+ this._previousText = this.userEnteredText();
this.moveCaretToEndOfPrompt();
this._element.scrollIntoView();
@@ -243,7 +246,7 @@ WebInspector.TextPrompt.prototype = {
this._element.tabIndex = 0;
this._focusRestorer = new WebInspector.ElementFocusRestorer(this._element);
if (!this.text())
- this._updateAutoComplete();
+ this.autoCompleteSoon();
},
_stopEditing: function()
@@ -277,14 +280,6 @@ WebInspector.TextPrompt.prototype = {
this._selectionTimeout = setTimeout(moveBackIfOutside.bind(this), 100);
},
- /**
- * @param {boolean=} force
- */
- _updateAutoComplete: function(force)
- {
- this._clearAutocompleteElement();
- this.autoCompleteSoon(force);
- },
/**
* @param {!Event} event
@@ -303,7 +298,6 @@ WebInspector.TextPrompt.prototype = {
return;
var handled = false;
- delete this._needUpdateAutocomplete;
switch (event.key) {
case "Tab":
@@ -328,7 +322,7 @@ WebInspector.TextPrompt.prototype = {
break;
case " ": // Space
if (event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey) {
- this._updateAutoComplete(true);
+ this.autoCompleteSoon(true);
handled = true;
}
break;
@@ -342,9 +336,6 @@ WebInspector.TextPrompt.prototype = {
if (!handled && this.isSuggestBoxVisible())
handled = this._suggestBox.keyPressed(event);
- if (!handled)
- this._needUpdateAutocomplete = true;
-
if (handled)
event.consume(true);
},
@@ -354,8 +345,15 @@ WebInspector.TextPrompt.prototype = {
*/
onInput: function(event)
{
- if (this._needUpdateAutocomplete)
- this._updateAutoComplete();
+ var text = this.userEnteredText();
+ var hasCommonPrefix = text.startsWith(this._previousText) || this._previousText.startsWith(text);
+ if (this._autocompleteElement && hasCommonPrefix)
+ this._autocompleteElement.textContent = this._currentHintText.substring(text.length);
+ else
+ this._clearAutocompleteElement();
+ this._previousText = text;
+
+ this.autoCompleteSoon();
},
/**
@@ -381,10 +379,7 @@ WebInspector.TextPrompt.prototype = {
_clearAutocompleteElement: function()
{
- if (this._completeTimeout) {
- clearTimeout(this._completeTimeout);
- delete this._completeTimeout;
- }
+ this._clearAutocompleteTimeout();
if (!this._autocompleteElement)
return;
@@ -395,6 +390,15 @@ WebInspector.TextPrompt.prototype = {
delete this._userEnteredText;
},
+ _clearAutocompleteTimeout: function()
+ {
+ if (this._completeTimeout) {
+ clearTimeout(this._completeTimeout);
+ delete this._completeTimeout;
+ }
+ this._completionRequestId++;
+ },
+
/**
* @param {boolean=} force
*/
@@ -411,7 +415,7 @@ WebInspector.TextPrompt.prototype = {
*/
complete: function(force, reverse)
{
- this.clearAutocomplete();
+ this._clearAutocompleteTimeout();
var selection = this._element.getComponentSelection();
var selectionRange = selection && selection.rangeCount ? selection.getRangeAt(0) : null;
if (!selectionRange)
@@ -426,7 +430,8 @@ WebInspector.TextPrompt.prototype = {
else if (!force) {
// BUG72018: Do not show suggest box if caret is followed by a non-stop character.
var wordSuffixRange = selectionRange.startContainer.rangeOfWord(selectionRange.endOffset, this._completionStopCharacters, this._element, "forward");
- if (wordSuffixRange.toString().length)
+ var autocompleteTextLength = (this._autocompleteElement && this._autocompleteElement.parentNode) ? this._autocompleteElement.textContent.length : 0;
+ if (wordSuffixRange.toString().length !== autocompleteTextLength)
shouldExit = true;
}
if (shouldExit) {
@@ -565,8 +570,10 @@ WebInspector.TextPrompt.prototype = {
var prefixTextNode = createTextNode(prefixText);
fullWordRange.insertNode(prefixTextNode);
- this._autocompleteElement = createElementWithClass("span", "auto-complete-text");
+ if (!this._autocompleteElement)
+ this._autocompleteElement = createElementWithClass("span", "auto-complete-text");
this._autocompleteElement.textContent = suffixText;
+ this._currentHintText = completionText;
prefixTextNode.parentNode.insertBefore(this._autocompleteElement, prefixTextNode.nextSibling);
« no previous file with comments | « third_party/WebKit/LayoutTests/http/tests/inspector-unit/text-prompt-hint-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698