Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Joseph Pecoraro | 3 * Copyright (C) 2009 Joseph Pecoraro |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 96 this._filterStatusMessageElement.createTextChild(" "); | 96 this._filterStatusMessageElement.createTextChild(" "); |
| 97 var resetFiltersLink = this._filterStatusMessageElement.createChild("span", "console-info link"); | 97 var resetFiltersLink = this._filterStatusMessageElement.createChild("span", "console-info link"); |
| 98 resetFiltersLink.textContent = WebInspector.UIString("Show all messages."); | 98 resetFiltersLink.textContent = WebInspector.UIString("Show all messages."); |
| 99 resetFiltersLink.addEventListener("click", this._filter.reset.bind(this._fil ter), true); | 99 resetFiltersLink.addEventListener("click", this._filter.reset.bind(this._fil ter), true); |
| 100 | 100 |
| 101 this._topGroup = WebInspector.ConsoleGroup.createTopGroup(); | 101 this._topGroup = WebInspector.ConsoleGroup.createTopGroup(); |
| 102 this._currentGroup = this._topGroup; | 102 this._currentGroup = this._topGroup; |
| 103 | 103 |
| 104 this._promptElement = this._messagesElement.createChild("div", "source-code" ); | 104 this._promptElement = this._messagesElement.createChild("div", "source-code" ); |
| 105 this._promptElement.id = "console-prompt"; | 105 this._promptElement.id = "console-prompt"; |
| 106 this._promptElement.spellcheck = false; | 106 this._promptElement.addEventListener("input", this._promptInput.bind(this), false); |
| 107 | |
| 108 this._searchableView.setDefaultFocusedElement(this._promptElement); | |
| 109 | 107 |
| 110 // FIXME: This is a workaround for the selection machinery bug. See crbug.co m/410899 | 108 // FIXME: This is a workaround for the selection machinery bug. See crbug.co m/410899 |
| 111 var selectAllFixer = this._messagesElement.createChild("div", "console-view- fix-select-all"); | 109 var selectAllFixer = this._messagesElement.createChild("div", "console-view- fix-select-all"); |
| 112 selectAllFixer.textContent = "."; | 110 selectAllFixer.textContent = "."; |
| 113 | 111 |
| 114 this._showAllMessagesCheckbox = new WebInspector.ToolbarCheckbox(WebInspecto r.UIString("Show all messages")); | 112 this._showAllMessagesCheckbox = new WebInspector.ToolbarCheckbox(WebInspecto r.UIString("Show all messages")); |
| 115 this._showAllMessagesCheckbox.inputElement.checked = true; | 113 this._showAllMessagesCheckbox.inputElement.checked = true; |
| 116 this._showAllMessagesCheckbox.inputElement.addEventListener("change", this._ updateMessageList.bind(this), false); | 114 this._showAllMessagesCheckbox.inputElement.addEventListener("change", this._ updateMessageList.bind(this), false); |
| 117 | 115 |
| 118 this._showAllMessagesCheckbox.element.classList.add("hidden"); | 116 this._showAllMessagesCheckbox.element.classList.add("hidden"); |
| 119 | 117 |
| 120 toolbar.appendToolbarItem(this._showAllMessagesCheckbox); | 118 toolbar.appendToolbarItem(this._showAllMessagesCheckbox); |
| 121 | 119 |
| 122 this._registerShortcuts(); | 120 this._registerShortcuts(); |
| 123 | 121 |
| 124 this._messagesElement.addEventListener("contextmenu", this._handleContextMen uEvent.bind(this), false); | 122 this._messagesElement.addEventListener("contextmenu", this._handleContextMen uEvent.bind(this), false); |
| 125 WebInspector.moduleSetting("monitoringXHREnabled").addChangeListener(this._m onitoringXHREnabledSettingChanged, this); | 123 WebInspector.moduleSetting("monitoringXHREnabled").addChangeListener(this._m onitoringXHREnabledSettingChanged, this); |
| 126 | 124 |
| 127 this._linkifier = new WebInspector.Linkifier(); | 125 this._linkifier = new WebInspector.Linkifier(); |
| 128 | 126 |
| 129 /** @type {!Array.<!WebInspector.ConsoleViewMessage>} */ | 127 /** @type {!Array.<!WebInspector.ConsoleViewMessage>} */ |
| 130 this._consoleMessages = []; | 128 this._consoleMessages = []; |
| 131 this._viewMessageSymbol = Symbol("viewMessage"); | 129 this._viewMessageSymbol = Symbol("viewMessage"); |
| 132 | 130 |
| 133 this._prompt = new WebInspector.TextPromptWithHistory(WebInspector.Execution ContextSelector.completionsForTextPromptInCurrentContext); | 131 this._consoleHistorySetting = WebInspector.settings.createLocalSetting("cons oleHistory", []); |
| 134 this._prompt.setSuggestBoxEnabled(true); | |
| 135 this._prompt.setAutocompletionTimeout(0); | |
| 136 this._prompt.renderAsBlock(); | |
| 137 var proxyElement = this._prompt.attach(this._promptElement); | |
| 138 proxyElement.addEventListener("keydown", this._promptKeyDown.bind(this), fal se); | |
| 139 proxyElement.addEventListener("input", this._promptInput.bind(this), false); | |
| 140 | 132 |
| 141 this._consoleHistorySetting = WebInspector.settings.createLocalSetting("cons oleHistory", []); | 133 this._prompt = new WebInspector.ConsolePrompt(); |
| 142 var historyData = this._consoleHistorySetting.get(); | 134 this._prompt.show(this._promptElement); |
| 143 this._prompt.history().setHistoryData(historyData); | 135 this._prompt.element.addEventListener("keydown", this._promptKeyDown.bind(th is), true); |
| 144 | 136 |
| 145 this._consoleHistoryAutocompleteSetting = WebInspector.moduleSetting("consol eHistoryAutocomplete"); | 137 this._consoleHistoryAutocompleteSetting = WebInspector.moduleSetting("consol eHistoryAutocomplete"); |
| 146 this._consoleHistoryAutocompleteSetting.addChangeListener(this._consoleHisto ryAutocompleteChanged, this); | 138 this._consoleHistoryAutocompleteSetting.addChangeListener(this._consoleHisto ryAutocompleteChanged, this); |
| 139 | |
| 140 var historyData = this._consoleHistorySetting.get(); | |
| 141 this._prompt.history().setHistoryData(historyData); | |
| 147 this._consoleHistoryAutocompleteChanged(); | 142 this._consoleHistoryAutocompleteChanged(); |
| 148 | 143 |
| 149 this._updateFilterStatus(); | 144 this._updateFilterStatus(); |
| 150 WebInspector.moduleSetting("consoleTimestampsEnabled").addChangeListener(thi s._consoleTimestampsSettingChanged, this); | 145 WebInspector.moduleSetting("consoleTimestampsEnabled").addChangeListener(thi s._consoleTimestampsSettingChanged, this); |
| 151 | 146 |
| 152 this._registerWithMessageSink(); | 147 this._registerWithMessageSink(); |
| 153 WebInspector.targetManager.observeTargets(this); | 148 WebInspector.targetManager.observeTargets(this); |
| 154 | 149 |
| 155 this._initConsoleMessages(); | 150 this._initConsoleMessages(); |
| 156 | 151 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 208 this._fetchMultitargetMessages(); | 203 this._fetchMultitargetMessages(); |
| 209 }, | 204 }, |
| 210 | 205 |
| 211 _fetchMultitargetMessages: function() | 206 _fetchMultitargetMessages: function() |
| 212 { | 207 { |
| 213 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.Conso leModel.Events.ConsoleCleared, this._consoleCleared, this); | 208 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.Conso leModel.Events.ConsoleCleared, this._consoleCleared, this); |
| 214 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.Conso leModel.Events.MessageAdded, this._onConsoleMessageAdded, this); | 209 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.Conso leModel.Events.MessageAdded, this._onConsoleMessageAdded, this); |
| 215 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.Conso leModel.Events.MessageUpdated, this._onConsoleMessageUpdated, this); | 210 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.Conso leModel.Events.MessageUpdated, this._onConsoleMessageUpdated, this); |
| 216 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.Conso leModel.Events.CommandEvaluated, this._commandEvaluated, this); | 211 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.Conso leModel.Events.CommandEvaluated, this._commandEvaluated, this); |
| 217 WebInspector.multitargetConsoleModel.messages().forEach(this._addConsole Message, this); | 212 WebInspector.multitargetConsoleModel.messages().forEach(this._addConsole Message, this); |
| 213 this._viewport.invalidate(); | |
| 218 }, | 214 }, |
| 219 | 215 |
| 220 /** | 216 /** |
| 221 * @override | 217 * @override |
| 222 * @return {number} | 218 * @return {number} |
| 223 */ | 219 */ |
| 224 itemCount: function() | 220 itemCount: function() |
| 225 { | 221 { |
| 226 return this._visibleViewMessages.length; | 222 return this._visibleViewMessages.length; |
| 227 }, | 223 }, |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 329 }, | 325 }, |
| 330 | 326 |
| 331 willHide: function() | 327 willHide: function() |
| 332 { | 328 { |
| 333 this._hidePromptSuggestBox(); | 329 this._hidePromptSuggestBox(); |
| 334 }, | 330 }, |
| 335 | 331 |
| 336 wasShown: function() | 332 wasShown: function() |
| 337 { | 333 { |
| 338 this._viewport.refresh(); | 334 this._viewport.refresh(); |
| 339 if (!this._prompt.isCaretInsidePrompt()) | 335 this.focus(); |
| 340 this._prompt.moveCaretToEndOfPrompt(); | |
| 341 }, | 336 }, |
| 342 | 337 |
| 343 focus: function() | 338 focus: function() |
| 344 { | 339 { |
| 345 if (this._promptElement === WebInspector.currentFocusElement()) | 340 if (this._prompt.hasFocus()) |
| 346 return; | 341 return; |
| 347 // Set caret position before setting focus in order to avoid scrolling | 342 // Set caret position before setting focus in order to avoid scrolling |
| 348 // by focus(). | 343 // by focus(). |
| 349 this._prompt.moveCaretToEndOfPrompt(); | 344 this._prompt.moveCaretToEndOfPrompt(); |
| 350 WebInspector.setCurrentFocusElement(this._promptElement); | 345 this._prompt.focus(); |
| 351 }, | 346 }, |
| 352 | 347 |
| 353 restoreScrollPositions: function() | 348 restoreScrollPositions: function() |
| 354 { | 349 { |
| 355 if (this._viewport.stickToBottom()) | 350 if (this._viewport.stickToBottom()) |
| 356 this._immediatelyScrollToBottom(); | 351 this._immediatelyScrollToBottom(); |
| 357 else | 352 else |
| 358 WebInspector.Widget.prototype.restoreScrollPositions.call(this); | 353 WebInspector.Widget.prototype.restoreScrollPositions.call(this); |
| 359 }, | 354 }, |
| 360 | 355 |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 550 return new WebInspector.ConsoleViewMessage(message, this._linkifier, nestingLevel); | 545 return new WebInspector.ConsoleViewMessage(message, this._linkifier, nestingLevel); |
| 551 } | 546 } |
| 552 }, | 547 }, |
| 553 | 548 |
| 554 _consoleCleared: function() | 549 _consoleCleared: function() |
| 555 { | 550 { |
| 556 this._currentMatchRangeIndex = -1; | 551 this._currentMatchRangeIndex = -1; |
| 557 this._consoleMessages = []; | 552 this._consoleMessages = []; |
| 558 this._updateMessageList(); | 553 this._updateMessageList(); |
| 559 this._hidePromptSuggestBox(); | 554 this._hidePromptSuggestBox(); |
| 555 this._viewport.setStickToBottom(true); | |
| 560 this._linkifier.reset(); | 556 this._linkifier.reset(); |
| 561 }, | 557 }, |
| 562 | 558 |
| 563 _handleContextMenuEvent: function(event) | 559 _handleContextMenuEvent: function(event) |
| 564 { | 560 { |
| 565 if (event.target.enclosingNodeOrSelfWithNodeName("a")) | 561 if (event.target.enclosingNodeOrSelfWithNodeName("a")) |
| 566 return; | 562 return; |
| 567 | 563 |
| 568 var contextMenu = new WebInspector.ContextMenu(event); | 564 var contextMenu = new WebInspector.ContextMenu(event); |
| 569 if (event.target.isSelfOrDescendant(this._promptElement)) { | 565 if (event.target.isSelfOrDescendant(this._promptElement)) { |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 709 var enabled = /** @type {boolean} */ (event.data); | 705 var enabled = /** @type {boolean} */ (event.data); |
| 710 WebInspector.targetManager.targets().forEach(function(target) {target.ne tworkAgent().setMonitoringXHREnabled(enabled);}); | 706 WebInspector.targetManager.targets().forEach(function(target) {target.ne tworkAgent().setMonitoringXHREnabled(enabled);}); |
| 711 }, | 707 }, |
| 712 | 708 |
| 713 /** | 709 /** |
| 714 * @param {!Event} event | 710 * @param {!Event} event |
| 715 */ | 711 */ |
| 716 _messagesClicked: function(event) | 712 _messagesClicked: function(event) |
| 717 { | 713 { |
| 718 var targetElement = event.deepElementFromPoint(); | 714 var targetElement = event.deepElementFromPoint(); |
| 719 if (!this._prompt.isCaretInsidePrompt() && (!targetElement || targetElem ent.isComponentSelectionCollapsed())) | 715 if (!targetElement || targetElement.isComponentSelectionCollapsed()) |
| 720 this._prompt.moveCaretToEndOfPrompt(); | 716 this.focus(); |
| 721 var groupMessage = event.target.enclosingNodeOrSelfWithClass("console-gr oup-title"); | 717 var groupMessage = event.target.enclosingNodeOrSelfWithClass("console-gr oup-title"); |
| 722 if (!groupMessage) | 718 if (!groupMessage) |
| 723 return; | 719 return; |
| 724 var consoleGroupViewMessage = groupMessage.parentElement.message; | 720 var consoleGroupViewMessage = groupMessage.parentElement.message; |
| 725 consoleGroupViewMessage.setCollapsed(!consoleGroupViewMessage.collapsed( )); | 721 consoleGroupViewMessage.setCollapsed(!consoleGroupViewMessage.collapsed( )); |
| 726 this._updateMessageList(); | 722 this._updateMessageList(); |
| 727 }, | 723 }, |
| 728 | 724 |
| 729 _registerShortcuts: function() | 725 _registerShortcuts: function() |
| 730 { | 726 { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 763 } | 759 } |
| 764 | 760 |
| 765 section.addKey(shortcut.makeDescriptor(shortcut.Keys.Enter), WebInspecto r.UIString("Execute command")); | 761 section.addKey(shortcut.makeDescriptor(shortcut.Keys.Enter), WebInspecto r.UIString("Execute command")); |
| 766 }, | 762 }, |
| 767 | 763 |
| 768 _clearPromptBackwards: function() | 764 _clearPromptBackwards: function() |
| 769 { | 765 { |
| 770 this._prompt.setText(""); | 766 this._prompt.setText(""); |
| 771 }, | 767 }, |
| 772 | 768 |
| 769 /** | |
| 770 * @param {!Event} event | |
| 771 */ | |
| 773 _promptKeyDown: function(event) | 772 _promptKeyDown: function(event) |
| 774 { | 773 { |
| 775 if (event.key === "PageUp") { | 774 var keyboardEvent = /** @type {!KeyboardEvent} */ (event); |
| 775 if (keyboardEvent.key === "PageUp") { | |
| 776 this._updateStickToBottomOnWheel(); | 776 this._updateStickToBottomOnWheel(); |
| 777 return; | 777 return; |
| 778 } else if (isEnterKey(event)) { | 778 } else if (isEnterKey(keyboardEvent)) { |
| 779 this._enterKeyPressed(event); | 779 this._enterKeyPressed(keyboardEvent); |
| 780 return; | 780 return; |
| 781 } | 781 } |
| 782 | 782 |
| 783 var shortcut = WebInspector.KeyboardShortcut.makeKeyFromEvent(event); | 783 var shortcut = WebInspector.KeyboardShortcut.makeKeyFromEvent(keyboardEv ent); |
| 784 var handler = this._shortcuts[shortcut]; | 784 var handler = this._shortcuts[shortcut]; |
| 785 if (handler) { | 785 if (handler) { |
| 786 handler(); | 786 handler(); |
| 787 event.preventDefault(); | 787 keyboardEvent.preventDefault(); |
| 788 } | 788 } |
| 789 }, | 789 }, |
| 790 | 790 |
| 791 _enterKeyPressed: function(event) | 791 _enterKeyPressed: function(event) |
| 792 { | 792 { |
| 793 if (event.altKey || event.ctrlKey || event.shiftKey) | 793 if (event.altKey || event.ctrlKey || event.shiftKey || !this._prompt.has Focus()) |
|
dgozman
2016/09/14 21:20:17
How can this be called when prompt is not focused?
einbinder
2016/09/15 00:14:09
Done.
| |
| 794 return; | 794 return; |
| 795 | 795 |
| 796 event.consume(true); | 796 event.consume(true); |
| 797 | 797 |
| 798 this._prompt.clearAutocomplete(); | 798 this._prompt.clearAutocomplete(); |
| 799 | 799 |
| 800 var str = this._prompt.text(); | 800 var str = this._prompt.text(); |
| 801 if (!str.length) | 801 if (!str.length) |
| 802 return; | 802 return; |
| 803 this._appendCommand(str, true); | 803 this._appendCommand(str, true); |
| (...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1415 return true; | 1415 return true; |
| 1416 } | 1416 } |
| 1417 return false; | 1417 return false; |
| 1418 } | 1418 } |
| 1419 } | 1419 } |
| 1420 | 1420 |
| 1421 /** | 1421 /** |
| 1422 * @typedef {{messageIndex: number, matchIndex: number}} | 1422 * @typedef {{messageIndex: number, matchIndex: number}} |
| 1423 */ | 1423 */ |
| 1424 WebInspector.ConsoleView.RegexMatchRange; | 1424 WebInspector.ConsoleView.RegexMatchRange; |
| OLD | NEW |