| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) IBM Corp. 2009 All rights reserved. | 2 * Copyright (C) IBM Corp. 2009 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 12 matching lines...) Expand all Loading... |
| 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 /** | 31 /** |
| 32 * @constructor | 32 * @constructor |
| 33 * @extends {WebInspector.SimpleView} | 33 * @extends {WebInspector.ThrottledWidget} |
| 34 * @implements {WebInspector.ActionDelegate} |
| 35 * @implements {WebInspector.ToolbarItem.ItemsProvider} |
| 36 * @implements {WebInspector.ContextMenu.Provider} |
| 34 */ | 37 */ |
| 35 WebInspector.WatchExpressionsSidebarPane = function() | 38 WebInspector.WatchExpressionsSidebarPane = function() |
| 36 { | 39 { |
| 37 WebInspector.SimpleView.call(this, WebInspector.UIString("Watch")); | 40 WebInspector.ThrottledWidget.call(this); |
| 38 this.registerRequiredCSS("components/objectValue.css"); | 41 this.registerRequiredCSS("components/objectValue.css"); |
| 39 | 42 |
| 40 this._requiresUpdate = true; | |
| 41 /** @type {!Array.<!WebInspector.WatchExpression>} */ | 43 /** @type {!Array.<!WebInspector.WatchExpression>} */ |
| 42 this._watchExpressions = []; | 44 this._watchExpressions = []; |
| 43 this._watchExpressionsSetting = WebInspector.settings.createLocalSetting("wa
tchExpressions", []); | 45 this._watchExpressionsSetting = WebInspector.settings.createLocalSetting("wa
tchExpressions", []); |
| 44 | 46 |
| 45 var addButton = new WebInspector.ToolbarButton(WebInspector.UIString("Add ex
pression"), "add-toolbar-item"); | 47 this._addButton = new WebInspector.ToolbarButton(WebInspector.UIString("Add
expression"), "add-toolbar-item"); |
| 46 addButton.addEventListener("click", this._addButtonClicked.bind(this)); | 48 this._addButton.addEventListener("click", this._addButtonClicked.bind(this))
; |
| 47 this.addToolbarItem(addButton); | 49 this._refreshButton = new WebInspector.ToolbarButton(WebInspector.UIString("
Refresh"), "refresh-toolbar-item"); |
| 48 var refreshButton = new WebInspector.ToolbarButton(WebInspector.UIString("Re
fresh"), "refresh-toolbar-item"); | 50 this._refreshButton.addEventListener("click", this._refreshButtonClicked.bin
d(this)); |
| 49 refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this
)); | |
| 50 this.addToolbarItem(refreshButton); | |
| 51 | 51 |
| 52 this._bodyElement = this.element.createChild("div", "vbox watch-expressions"
); | 52 this._bodyElement = this.element.createChild("div", "vbox watch-expressions"
); |
| 53 this._bodyElement.addEventListener("contextmenu", this._contextMenu.bind(thi
s), false); | 53 this._bodyElement.addEventListener("contextmenu", this._contextMenu.bind(thi
s), false); |
| 54 this._expandController = new WebInspector.ObjectPropertiesSectionExpandContr
oller(); | 54 this._expandController = new WebInspector.ObjectPropertiesSectionExpandContr
oller(); |
| 55 | 55 |
| 56 WebInspector.context.addFlavorChangeListener(WebInspector.ExecutionContext,
this._refreshExpressions, this); | 56 WebInspector.context.addFlavorChangeListener(WebInspector.ExecutionContext,
this.update, this); |
| 57 WebInspector.context.addFlavorChangeListener(WebInspector.DebuggerModel.Call
Frame, this._refreshExpressions, this); | 57 WebInspector.context.addFlavorChangeListener(WebInspector.DebuggerModel.Call
Frame, this.update, this); |
| 58 this._linkifier = new WebInspector.Linkifier(); | 58 this._linkifier = new WebInspector.Linkifier(); |
| 59 this.update(); |
| 59 } | 60 } |
| 60 | 61 |
| 61 WebInspector.WatchExpressionsSidebarPane.prototype = { | 62 WebInspector.WatchExpressionsSidebarPane.prototype = { |
| 62 wasShown: function() | 63 /** |
| 64 * @override |
| 65 * @return {!Array<!WebInspector.ToolbarItem>} |
| 66 */ |
| 67 toolbarItems: function() |
| 63 { | 68 { |
| 64 this._refreshExpressionsIfNeeded(); | 69 return [this._addButton, this._refreshButton]; |
| 65 }, | |
| 66 | |
| 67 _refreshExpressions: function() | |
| 68 { | |
| 69 this._requiresUpdate = true; | |
| 70 this._refreshExpressionsIfNeeded(); | |
| 71 }, | 70 }, |
| 72 | 71 |
| 73 /** | 72 /** |
| 74 * @param {string} expressionString | |
| 75 */ | |
| 76 addExpression: function(expressionString) | |
| 77 { | |
| 78 this.revealView(); | |
| 79 if (this._requiresUpdate) { | |
| 80 this._rebuildWatchExpressions(); | |
| 81 delete this._requiresUpdate; | |
| 82 } | |
| 83 this._createWatchExpression(expressionString); | |
| 84 this._saveExpressions(); | |
| 85 }, | |
| 86 | |
| 87 /** | |
| 88 * @return {boolean} | 73 * @return {boolean} |
| 89 */ | 74 */ |
| 90 hasExpressions: function() | 75 hasExpressions: function() |
| 91 { | 76 { |
| 92 return !!this._watchExpressionsSetting.get().length; | 77 return !!this._watchExpressionsSetting.get().length; |
| 93 }, | 78 }, |
| 94 | 79 |
| 95 _saveExpressions: function() | 80 _saveExpressions: function() |
| 96 { | 81 { |
| 97 var toSave = []; | 82 var toSave = []; |
| 98 for (var i = 0; i < this._watchExpressions.length; i++) | 83 for (var i = 0; i < this._watchExpressions.length; i++) |
| 99 if (this._watchExpressions[i].expression()) | 84 if (this._watchExpressions[i].expression()) |
| 100 toSave.push(this._watchExpressions[i].expression()); | 85 toSave.push(this._watchExpressions[i].expression()); |
| 101 | 86 |
| 102 this._watchExpressionsSetting.set(toSave); | 87 this._watchExpressionsSetting.set(toSave); |
| 103 }, | 88 }, |
| 104 | 89 |
| 105 _refreshExpressionsIfNeeded: function() | |
| 106 { | |
| 107 if (this._requiresUpdate && this.isShowing()) { | |
| 108 this._rebuildWatchExpressions(); | |
| 109 delete this._requiresUpdate; | |
| 110 } else | |
| 111 this._requiresUpdate = true; | |
| 112 }, | |
| 113 | |
| 114 /** | 90 /** |
| 115 * @param {!WebInspector.Event=} event | 91 * @param {!WebInspector.Event=} event |
| 116 */ | 92 */ |
| 117 _addButtonClicked: function(event) | 93 _addButtonClicked: function(event) |
| 118 { | 94 { |
| 119 if (event) | 95 if (event) |
| 120 event.consume(true); | 96 event.consume(true); |
| 121 this.revealView(); | 97 WebInspector.viewManager.revealViewWithWidget(this); |
| 122 this._createWatchExpression(null).startEditing(); | 98 this._createWatchExpression(null).startEditing(); |
| 123 }, | 99 }, |
| 124 | 100 |
| 125 /** | 101 /** |
| 126 * @param {!WebInspector.Event} event | 102 * @param {!WebInspector.Event} event |
| 127 */ | 103 */ |
| 128 _refreshButtonClicked: function(event) | 104 _refreshButtonClicked: function(event) |
| 129 { | 105 { |
| 130 event.consume(); | 106 event.consume(); |
| 131 this._refreshExpressions(); | 107 this.update(); |
| 132 }, | 108 }, |
| 133 | 109 |
| 134 _rebuildWatchExpressions: function() | 110 /** |
| 111 * @override |
| 112 * @return {!Promise.<?>} |
| 113 */ |
| 114 doUpdate: function() |
| 135 { | 115 { |
| 136 this._linkifier.reset(); | 116 this._linkifier.reset(); |
| 137 this._bodyElement.removeChildren(); | 117 this._bodyElement.removeChildren(); |
| 138 this._watchExpressions = []; | 118 this._watchExpressions = []; |
| 139 this._emptyElement = this._bodyElement.createChild("div", "gray-info-mes
sage"); | 119 this._emptyElement = this._bodyElement.createChild("div", "gray-info-mes
sage"); |
| 140 this._emptyElement.textContent = WebInspector.UIString("No Watch Express
ions"); | 120 this._emptyElement.textContent = WebInspector.UIString("No Watch Express
ions"); |
| 141 var watchExpressionStrings = this._watchExpressionsSetting.get(); | 121 var watchExpressionStrings = this._watchExpressionsSetting.get(); |
| 142 for (var i = 0; i < watchExpressionStrings.length; ++i) { | 122 for (var i = 0; i < watchExpressionStrings.length; ++i) { |
| 143 var expression = watchExpressionStrings[i]; | 123 var expression = watchExpressionStrings[i]; |
| 144 if (!expression) | 124 if (!expression) |
| 145 continue; | 125 continue; |
| 146 | 126 |
| 147 this._createWatchExpression(expression); | 127 this._createWatchExpression(expression); |
| 148 } | 128 } |
| 129 return Promise.resolve(); |
| 149 }, | 130 }, |
| 150 | 131 |
| 151 /** | 132 /** |
| 152 * @param {?string} expression | 133 * @param {?string} expression |
| 153 * @return {!WebInspector.WatchExpression} | 134 * @return {!WebInspector.WatchExpression} |
| 154 */ | 135 */ |
| 155 _createWatchExpression: function(expression) | 136 _createWatchExpression: function(expression) |
| 156 { | 137 { |
| 157 this._emptyElement.classList.add("hidden"); | 138 this._emptyElement.classList.add("hidden"); |
| 158 var watchExpression = new WebInspector.WatchExpression(expression, this.
_expandController, this._linkifier); | 139 var watchExpression = new WebInspector.WatchExpression(expression, this.
_expandController, this._linkifier); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 | 186 |
| 206 for (var watchExpression of this._watchExpressions) | 187 for (var watchExpression of this._watchExpressions) |
| 207 if (watchExpression.element().containsEventPoint(event)) | 188 if (watchExpression.element().containsEventPoint(event)) |
| 208 watchExpression._populateContextMenu(contextMenu, event); | 189 watchExpression._populateContextMenu(contextMenu, event); |
| 209 }, | 190 }, |
| 210 | 191 |
| 211 _deleteAllButtonClicked: function() | 192 _deleteAllButtonClicked: function() |
| 212 { | 193 { |
| 213 this._watchExpressions = []; | 194 this._watchExpressions = []; |
| 214 this._saveExpressions(); | 195 this._saveExpressions(); |
| 215 this._rebuildWatchExpressions(); | 196 this.update(); |
| 216 }, | 197 }, |
| 217 | 198 |
| 218 __proto__: WebInspector.SimpleView.prototype | 199 /** |
| 200 * @override |
| 201 * @param {!WebInspector.Context} context |
| 202 * @param {string} actionId |
| 203 * @return {boolean} |
| 204 */ |
| 205 handleAction: function(context, actionId) |
| 206 { |
| 207 var range = context.flavor(WebInspector.TextRangeWithContent); |
| 208 var expressionString = range.content; |
| 209 WebInspector.viewManager.revealViewWithWidget(this); |
| 210 this.doUpdate(); |
| 211 this._createWatchExpression(expressionString); |
| 212 this._saveExpressions(); |
| 213 return true; |
| 214 }, |
| 215 |
| 216 /** |
| 217 * @override |
| 218 * @param {!Event} event |
| 219 * @param {!WebInspector.ContextMenu} contextMenu |
| 220 * @param {!Object} target |
| 221 */ |
| 222 appendApplicableItems: function(event, contextMenu, target) |
| 223 { |
| 224 contextMenu.appendAction("sources.add-to-watch"); |
| 225 }, |
| 226 |
| 227 __proto__: WebInspector.ThrottledWidget.prototype |
| 219 } | 228 } |
| 220 | 229 |
| 221 /** | 230 /** |
| 222 * @constructor | 231 * @constructor |
| 223 * @extends {WebInspector.Object} | 232 * @extends {WebInspector.Object} |
| 224 * @param {?string} expression | 233 * @param {?string} expression |
| 225 * @param {!WebInspector.ObjectPropertiesSectionExpandController} expandControll
er | 234 * @param {!WebInspector.ObjectPropertiesSectionExpandController} expandControll
er |
| 226 * @param {!WebInspector.Linkifier} linkifier | 235 * @param {!WebInspector.Linkifier} linkifier |
| 227 */ | 236 */ |
| 228 WebInspector.WatchExpression = function(expression, expandController, linkifier) | 237 WebInspector.WatchExpression = function(expression, expandController, linkifier) |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 contextMenu.appendApplicableItems(this._result); | 447 contextMenu.appendApplicableItems(this._result); |
| 439 }, | 448 }, |
| 440 | 449 |
| 441 _copyValueButtonClicked: function() | 450 _copyValueButtonClicked: function() |
| 442 { | 451 { |
| 443 InspectorFrontendHost.copyText(this._valueElement.textContent); | 452 InspectorFrontendHost.copyText(this._valueElement.textContent); |
| 444 }, | 453 }, |
| 445 | 454 |
| 446 __proto__: WebInspector.Object.prototype | 455 __proto__: WebInspector.Object.prototype |
| 447 } | 456 } |
| OLD | NEW |