1231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/* 2231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) IBM Corp. 2009 All rights reserved. 3231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 4231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Redistribution and use in source and binary forms, with or without 5231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * modification, are permitted provided that the following conditions are 6231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * met: 7231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 8231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * * Redistributions of source code must retain the above copyright 9231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * notice, this list of conditions and the following disclaimer. 10231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * * Redistributions in binary form must reproduce the above 11231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * copyright notice, this list of conditions and the following disclaimer 12231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * in the documentation and/or other materials provided with the 13231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * distribution. 14231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * * Neither the name of IBM Corp. nor the names of its 15231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * contributors may be used to endorse or promote products derived from 16231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * this software without specific prior written permission. 17231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 18231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */ 30231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionsSidebarPane = function() 32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block WebInspector.SidebarPane.call(this, WebInspector.UIString("Watch Expressions")); 34e14391e94c850b8bd03680c23b38978db68687a8John Reck this.reset(); 35d0825bca7fe65beaee391d30da42e937db621564Steve Block} 36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 37d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.WatchExpressionsSidebarPane.prototype = { 38e14391e94c850b8bd03680c23b38978db68687a8John Reck reset: function() 39d0825bca7fe65beaee391d30da42e937db621564Steve Block { 40d0825bca7fe65beaee391d30da42e937db621564Steve Block this.bodyElement.removeChildren(); 41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 4228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this.expanded = WebInspector.settings.watchExpressions.length > 0; 43d0825bca7fe65beaee391d30da42e937db621564Steve Block this.section = new WebInspector.WatchExpressionsSection(); 44d0825bca7fe65beaee391d30da42e937db621564Steve Block this.bodyElement.appendChild(this.section.element); 45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 46d0825bca7fe65beaee391d30da42e937db621564Steve Block var addElement = document.createElement("button"); 47d0825bca7fe65beaee391d30da42e937db621564Steve Block addElement.setAttribute("type", "button"); 48d0825bca7fe65beaee391d30da42e937db621564Steve Block addElement.textContent = WebInspector.UIString("Add"); 49d0825bca7fe65beaee391d30da42e937db621564Steve Block addElement.addEventListener("click", this.section.addExpression.bind(this.section), false); 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 51d0825bca7fe65beaee391d30da42e937db621564Steve Block var refreshElement = document.createElement("button"); 52d0825bca7fe65beaee391d30da42e937db621564Steve Block refreshElement.setAttribute("type", "button"); 53d0825bca7fe65beaee391d30da42e937db621564Steve Block refreshElement.textContent = WebInspector.UIString("Refresh"); 54d0825bca7fe65beaee391d30da42e937db621564Steve Block refreshElement.addEventListener("click", this.section.update.bind(this.section), false); 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 56d0825bca7fe65beaee391d30da42e937db621564Steve Block var centerElement = document.createElement("div"); 57d0825bca7fe65beaee391d30da42e937db621564Steve Block centerElement.addStyleClass("watch-expressions-buttons-container"); 58d0825bca7fe65beaee391d30da42e937db621564Steve Block centerElement.appendChild(addElement); 59d0825bca7fe65beaee391d30da42e937db621564Steve Block centerElement.appendChild(refreshElement); 60d0825bca7fe65beaee391d30da42e937db621564Steve Block this.bodyElement.appendChild(centerElement); 61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 62d0825bca7fe65beaee391d30da42e937db621564Steve Block this.onexpand = this.refreshExpressions.bind(this); 63d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 65231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block refreshExpressions: function() 66231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 67d0825bca7fe65beaee391d30da42e937db621564Steve Block if (this.section) 68d0825bca7fe65beaee391d30da42e937db621564Steve Block this.section.update(); 69231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionsSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; 73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 74231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionsSection = function() 75231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._watchObjectGroupId = "watch-group"; 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 78231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block WebInspector.ObjectPropertiesSection.call(this); 79231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 8028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this.watchExpressions = WebInspector.settings.watchExpressions; 81231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 82231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.headerElement.className = "hidden"; 83231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.editable = true; 84231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.expanded = true; 85231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.propertiesElement.addStyleClass("watch-expressions"); 86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 87231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionsSection.NewWatchExpression = "\xA0"; 89231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 90231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionsSection.prototype = { 91231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block update: function() 92231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 93f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick function appendResult(expression, watchIndex, result) 94231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 95f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick var property = new WebInspector.RemoteObjectProperty(expression, result); 96231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block property.watchIndex = watchIndex; 97231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 98231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // To clarify what's going on here: 99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // In the outer function, we calculate the number of properties 100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // that we're going to be updating, and set that in the 101231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // propertyCount variable. 102231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // In this function, we test to see when we are processing the 103231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // last property, and then call the superclass's updateProperties() 104231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // method to get all the properties refreshed at once. 105231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block properties.push(property); 1062bde8e466a4451c7319e3a072d118917957d6554Steve Block 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (properties.length == propertyCount) { 108231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.updateProperties(properties, WebInspector.WatchExpressionTreeElement, WebInspector.WatchExpressionsSection.CompareProperties); 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // check to see if we just added a new watch expression, 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // which will always be the last property 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (this._newExpressionAdded) { 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block delete this._newExpressionAdded; 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block treeElement = this.findAddedTreeElement(); 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (treeElement) 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block treeElement.startEditing(); 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 121231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 122d0825bca7fe65beaee391d30da42e937db621564Steve Block // TODO: pass exact injected script id. 1232bde8e466a4451c7319e3a072d118917957d6554Steve Block RuntimeAgent.releaseObjectGroup(this._watchObjectGroupId) 124231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var properties = []; 125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 126231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Count the properties, so we known when to call this.updateProperties() 127231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // in appendResult() 128231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var propertyCount = 0; 129231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (var i = 0; i < this.watchExpressions.length; ++i) { 130231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!this.watchExpressions[i]) 131231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block continue; 132231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ++propertyCount; 133231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 134231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 135231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Now process all the expressions, since we have the actual count, 136231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // which is checked in the appendResult inner function. 137231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (var i = 0; i < this.watchExpressions.length; ++i) { 138231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var expression = this.watchExpressions[i]; 139231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!expression) 140231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block continue; 141231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block WebInspector.console.evalInInspectedWindow("(" + expression + ")", this._watchObjectGroupId, false, appendResult.bind(this, expression, i)); 143231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 144231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 145231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // note this is setting the expansion of the tree, not the section; 146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // with no expressions, and expanded tree, we get some extra vertical 147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // white space 148231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // FIXME: should change to use header buttons instead of the buttons 149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // at the bottom of the section, then we can add a "No Watch Expressions 150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // element when there are no watch expressions, and this issue should 151231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // go away. 152231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.expanded = (propertyCount != 0); 153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 154231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 155231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block addExpression: function() 156231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 157643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._newExpressionAdded = true; 158231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.watchExpressions.push(WebInspector.WatchExpressionsSection.NewWatchExpression); 159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.update(); 160231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 161231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 162231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block updateExpression: function(element, value) 163231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 164231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.watchExpressions[element.property.watchIndex] = value; 165231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.saveExpressions(); 166231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.update(); 167231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 168231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 169231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block findAddedTreeElement: function() 170231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 171231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var children = this.propertiesTreeOutline.children; 172231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (var i = 0; i < children.length; ++i) 173231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (children[i].property.name === WebInspector.WatchExpressionsSection.NewWatchExpression) 174231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return children[i]; 175231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 176231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 177231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block saveExpressions: function() 178231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var toSave = []; 180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (var i = 0; i < this.watchExpressions.length; i++) 181231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (this.watchExpressions[i]) 182231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block toSave.push(this.watchExpressions[i]); 183231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 18428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WebInspector.settings.watchExpressions = toSave; 185231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return toSave.length; 186231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 187231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 188231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 189231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionsSection.prototype.__proto__ = WebInspector.ObjectPropertiesSection.prototype; 190231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 191231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionsSection.CompareProperties = function(propertyA, propertyB) 192231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 193231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (propertyA.watchIndex == propertyB.watchIndex) 194231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return 0; 195231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else if (propertyA.watchIndex < propertyB.watchIndex) 196231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return -1; 197231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else 198231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return 1; 199231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 200231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 201231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionTreeElement = function(property) 202231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 203231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block WebInspector.ObjectPropertyTreeElement.call(this, property); 204231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 205231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 206231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionTreeElement.prototype = { 207231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block update: function() 208231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 209231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block WebInspector.ObjectPropertyTreeElement.prototype.update.call(this); 210231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 211f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (this.property.value.isError()) 212231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.valueElement.addStyleClass("watch-expressions-error-level"); 213231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 214231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var deleteButton = document.createElement("input"); 215231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block deleteButton.type = "button"; 216231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block deleteButton.title = WebInspector.UIString("Delete watch expression."); 217231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block deleteButton.addStyleClass("enabled-button"); 218231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block deleteButton.addStyleClass("delete-button"); 219231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block deleteButton.addEventListener("click", this._deleteButtonClicked.bind(this), false); 220231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 221231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.insertBefore(deleteButton, this.listItemElement.firstChild); 222231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 223231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 224231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block _deleteButtonClicked: function() 225231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 226231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.treeOutline.section.updateExpression(this, null); 227231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 228231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 229231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block startEditing: function() 230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 231231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (WebInspector.isBeingEdited(this.nameElement) || !this.treeOutline.section.editable) 232231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 233231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 234d0825bca7fe65beaee391d30da42e937db621564Steve Block this.nameElement.textContent = this.property.name.trim(); 235231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 236231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var context = { expanded: this.expanded }; 237231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 238231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // collapse temporarily, if required 239231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.hasChildren = false; 240231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 241231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.listItemElement.addStyleClass("editing-sub-part"); 242231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 243f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebInspector.startEditing(this.nameElement, { 244f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch context: context, 245f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch commitHandler: this.editingCommitted.bind(this), 246f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch cancelHandler: this.editingCancelled.bind(this) 247f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }); 248231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 249231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 250231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block editingCancelled: function(element, context) 251231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 252231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!this.nameElement.textContent) 253231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.treeOutline.section.updateExpression(this, null); 254231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 255231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.update(); 256231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.editingEnded(context); 257231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 258231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 259231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block applyExpression: function(expression, updateInterface) 260231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 261d0825bca7fe65beaee391d30da42e937db621564Steve Block expression = expression.trim(); 262231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 263231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!expression) 264231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block expression = null; 265231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 266231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.property.name = expression; 267231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.treeOutline.section.updateExpression(this, expression); 268231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 269231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 270231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 271231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockWebInspector.WatchExpressionTreeElement.prototype.__proto__ = WebInspector.ObjectPropertyTreeElement.prototype; 272