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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/ui/SuggestBox.js

Issue 2331053002: DevTools: Implement the console prompt with CodeMirror (Closed)
Patch Set: Fix browser tests Created 4 years, 3 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 /** 45 /**
46 * acceptSuggestion will be always called after call to applySuggestion with isIntermediateSuggestion being equal to false. 46 * acceptSuggestion will be always called after call to applySuggestion with isIntermediateSuggestion being equal to false.
47 */ 47 */
48 acceptSuggestion: function() { }, 48 acceptSuggestion: function() { },
49 } 49 }
50 50
51 /** 51 /**
52 * @constructor 52 * @constructor
53 * @param {!WebInspector.SuggestBoxDelegate} suggestBoxDelegate 53 * @param {!WebInspector.SuggestBoxDelegate} suggestBoxDelegate
54 * @param {number=} maxItemsHeight 54 * @param {number=} maxItemsHeight
55 * @param {boolean=} captureEnter
55 */ 56 */
56 WebInspector.SuggestBox = function(suggestBoxDelegate, maxItemsHeight) 57 WebInspector.SuggestBox = function(suggestBoxDelegate, maxItemsHeight, captureEn ter)
57 { 58 {
58 this._suggestBoxDelegate = suggestBoxDelegate; 59 this._suggestBoxDelegate = suggestBoxDelegate;
59 this._length = 0; 60 this._length = 0;
60 this._selectedIndex = -1; 61 this._selectedIndex = -1;
61 this._selectedElement = null; 62 this._selectedElement = null;
62 this._maxItemsHeight = maxItemsHeight; 63 this._maxItemsHeight = maxItemsHeight;
63 this._maybeHideBound = this._maybeHide.bind(this); 64 this._maybeHideBound = this._maybeHide.bind(this);
64 this._container = createElementWithClass("div", "suggest-box-container"); 65 this._container = createElementWithClass("div", "suggest-box-container");
65 this._element = this._container.createChild("div", "suggest-box"); 66 this._element = this._container.createChild("div", "suggest-box");
66 this._element.addEventListener("mousedown", this._onBoxMouseDown.bind(this), true); 67 this._element.addEventListener("mousedown", this._onBoxMouseDown.bind(this), true);
67 this._detailsPopup = this._container.createChild("div", "suggest-box details -popup monospace"); 68 this._detailsPopup = this._container.createChild("div", "suggest-box details -popup monospace");
68 this._detailsPopup.classList.add("hidden"); 69 this._detailsPopup.classList.add("hidden");
69 this._asyncDetailsCallback = null; 70 this._asyncDetailsCallback = null;
70 /** @type {!Map<number, !Promise<{detail: string, description: string}>>} */ 71 /** @type {!Map<number, !Promise<{detail: string, description: string}>>} */
71 this._asyncDetailsPromises = new Map(); 72 this._asyncDetailsPromises = new Map();
73 this._userInteracted = false;
74 this._captureEnter = captureEnter;
72 } 75 }
73 76
74 /** 77 /**
75 * @typedef {!Array.<{title: string, className: (string|undefined)}>} 78 * @typedef {!Array.<{title: string, className: (string|undefined)}>}
76 */ 79 */
77 WebInspector.SuggestBox.Suggestions; 80 WebInspector.SuggestBox.Suggestions;
78 81
79 WebInspector.SuggestBox.prototype = { 82 WebInspector.SuggestBox.prototype = {
80 /** 83 /**
81 * @return {boolean} 84 * @return {boolean}
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 this._bodyElement.addEventListener("mousedown", this._maybeHideBound, tr ue); 157 this._bodyElement.addEventListener("mousedown", this._maybeHideBound, tr ue);
155 this._overlay = new WebInspector.SuggestBox.Overlay(); 158 this._overlay = new WebInspector.SuggestBox.Overlay();
156 this._overlay.setContentElement(this._container); 159 this._overlay.setContentElement(this._container);
157 }, 160 },
158 161
159 hide: function() 162 hide: function()
160 { 163 {
161 if (!this.visible()) 164 if (!this.visible())
162 return; 165 return;
163 166
167 this._userInteracted = false;
164 this._bodyElement.removeEventListener("mousedown", this._maybeHideBound, true); 168 this._bodyElement.removeEventListener("mousedown", this._maybeHideBound, true);
165 delete this._bodyElement; 169 delete this._bodyElement;
166 this._container.remove(); 170 this._container.remove();
167 this._overlay.dispose(); 171 this._overlay.dispose();
168 delete this._overlay; 172 delete this._overlay;
169 delete this._selectedElement; 173 delete this._selectedElement;
170 this._selectedIndex = -1; 174 this._selectedIndex = -1;
171 delete this._lastAnchorBox; 175 delete this._lastAnchorBox;
172 }, 176 },
173 177
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 /** 219 /**
216 * @param {number} shift 220 * @param {number} shift
217 * @param {boolean=} isCircular 221 * @param {boolean=} isCircular
218 * @return {boolean} is changed 222 * @return {boolean} is changed
219 */ 223 */
220 _selectClosest: function(shift, isCircular) 224 _selectClosest: function(shift, isCircular)
221 { 225 {
222 if (!this._length) 226 if (!this._length)
223 return false; 227 return false;
224 228
229 this._userInteracted = true;
230
225 if (this._selectedIndex === -1 && shift < 0) 231 if (this._selectedIndex === -1 && shift < 0)
226 shift += 1; 232 shift += 1;
227 233
228 var index = this._selectedIndex + shift; 234 var index = this._selectedIndex + shift;
229 235
230 if (isCircular) 236 if (isCircular)
231 index = (this._length + index) % this._length; 237 index = (this._length + index) % this._length;
232 else 238 else
233 index = Number.constrain(index, 0, this._length - 1); 239 index = Number.constrain(index, 0, this._length - 1);
234 240
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 { 458 {
453 this._ensureRowCountPerViewport(); 459 this._ensureRowCountPerViewport();
454 return this._selectClosest(this._rowCountPerViewport, false); 460 return this._selectClosest(this._rowCountPerViewport, false);
455 }, 461 },
456 462
457 /** 463 /**
458 * @return {boolean} 464 * @return {boolean}
459 */ 465 */
460 enterKeyPressed: function() 466 enterKeyPressed: function()
461 { 467 {
468 if (!this._userInteracted && this._captureEnter)
469 return false;
470
462 var hasSelectedItem = !!this._selectedElement || this._onlyCompletion; 471 var hasSelectedItem = !!this._selectedElement || this._onlyCompletion;
463 this.acceptSuggestion(); 472 this.acceptSuggestion();
464 473
465 // Report the event as non-handled if there is no selected item, 474 // Report the event as non-handled if there is no selected item,
466 // to commit the input or handle it otherwise. 475 // to commit the input or handle it otherwise.
467 return hasSelectedItem; 476 return hasSelectedItem;
468 } 477 }
469 } 478 }
470 479
471 /** 480 /**
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 this.element.style.top = containerBox.y + "px"; 537 this.element.style.top = containerBox.y + "px";
529 this.element.style.height = containerBox.height + "px"; 538 this.element.style.height = containerBox.height + "px";
530 this.element.style.width = containerBox.width + "px"; 539 this.element.style.width = containerBox.width + "px";
531 }, 540 },
532 541
533 dispose: function() 542 dispose: function()
534 { 543 {
535 this.element.remove(); 544 this.element.remove();
536 } 545 }
537 } 546 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698