| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 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 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 /** | 27 /** |
| 28 * @constructor | 28 * @constructor |
| 29 * @extends {WebInspector.PropertiesSection} | 29 * @extends {WebInspector.PropertiesSection} |
| 30 * @param {!WebInspector.RemoteObject} object | 30 * @param {!WebInspector.RemoteObject} object |
| 31 * @param {?string|!Element=} title | 31 * @param {?string|!Element=} title |
| 32 * @param {string=} subtitle | 32 * @param {string=} subtitle |
| 33 * @param {?string=} emptyPlaceholder | 33 * @param {?string=} emptyPlaceholder |
| 34 * @param {boolean=} ignoreHasOwnProperty | 34 * @param {boolean=} ignoreHasOwnProperty |
| 35 * @param {!Array.<!WebInspector.RemoteObjectProperty>=} extraProperties | 35 * @param {!Array.<!WebInspector.RemoteObjectProperty>=} extraProperties |
| 36 * @param {function(new:TreeElement, !WebInspector.RemoteObjectProperty)=} treeE
lementConstructor | 36 * @param {function(new:TreeElement, !WebInspector.RemoteObjectProperty)=} treeE
lementConstructor |
| 37 * @param {?WebInspector.ObjectPropertiesMemento=} memento |
| 37 */ | 38 */ |
| 38 WebInspector.ObjectPropertiesSection = function(object, title, subtitle, emptyPl
aceholder, ignoreHasOwnProperty, extraProperties, treeElementConstructor) | 39 WebInspector.ObjectPropertiesSection = function(object, title, subtitle, emptyPl
aceholder, ignoreHasOwnProperty, extraProperties, treeElementConstructor, mement
o) |
| 39 { | 40 { |
| 40 this._emptyPlaceholder = emptyPlaceholder; | 41 this._emptyPlaceholder = emptyPlaceholder; |
| 41 this.object = object; | 42 this.object = object; |
| 42 this.ignoreHasOwnProperty = ignoreHasOwnProperty; | 43 this.ignoreHasOwnProperty = ignoreHasOwnProperty; |
| 43 this.extraProperties = extraProperties; | 44 this.extraProperties = extraProperties; |
| 44 this.treeElementConstructor = treeElementConstructor || WebInspector.ObjectP
ropertyTreeElement; | 45 this.treeElementConstructor = treeElementConstructor || WebInspector.ObjectP
ropertyTreeElement; |
| 45 this.editable = true; | 46 this.editable = true; |
| 46 this.skipProto = false; | 47 this.skipProto = false; |
| 48 /** |
| 49 * @private |
| 50 */ |
| 51 this.memento = memento; |
| 47 | 52 |
| 48 WebInspector.PropertiesSection.call(this, title || "", subtitle); | 53 WebInspector.PropertiesSection.call(this, title || "", subtitle); |
| 49 } | 54 } |
| 50 | 55 |
| 51 /** @const */ | 56 /** @const */ |
| 52 WebInspector.ObjectPropertiesSection._arrayLoadThreshold = 100; | 57 WebInspector.ObjectPropertiesSection._arrayLoadThreshold = 100; |
| 53 | 58 |
| 54 WebInspector.ObjectPropertiesSection.prototype = { | 59 WebInspector.ObjectPropertiesSection.prototype = { |
| 55 enableContextMenu: function() | 60 enableContextMenu: function() |
| 56 { | 61 { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 87 if (!properties) | 92 if (!properties) |
| 88 return; | 93 return; |
| 89 this.updateProperties(properties, internalProperties); | 94 this.updateProperties(properties, internalProperties); |
| 90 } | 95 } |
| 91 | 96 |
| 92 WebInspector.RemoteObject.loadFromObject(this.object, !!this.ignoreHasOw
nProperty, callback.bind(this)); | 97 WebInspector.RemoteObject.loadFromObject(this.object, !!this.ignoreHasOw
nProperty, callback.bind(this)); |
| 93 }, | 98 }, |
| 94 | 99 |
| 95 updateProperties: function(properties, internalProperties, rootTreeElementCo
nstructor, rootPropertyComparer) | 100 updateProperties: function(properties, internalProperties, rootTreeElementCo
nstructor, rootPropertyComparer) |
| 96 { | 101 { |
| 102 if (this.memento) |
| 103 this.memento.forgetProperties(); |
| 104 |
| 97 if (!rootTreeElementConstructor) | 105 if (!rootTreeElementConstructor) |
| 98 rootTreeElementConstructor = this.treeElementConstructor; | 106 rootTreeElementConstructor = this.treeElementConstructor; |
| 99 | 107 |
| 100 if (!rootPropertyComparer) | 108 if (!rootPropertyComparer) |
| 101 rootPropertyComparer = WebInspector.ObjectPropertiesSection.CompareP
roperties; | 109 rootPropertyComparer = WebInspector.ObjectPropertiesSection.CompareP
roperties; |
| 102 | 110 |
| 103 if (this.extraProperties) { | 111 if (this.extraProperties) { |
| 104 for (var i = 0; i < this.extraProperties.length; ++i) | 112 for (var i = 0; i < this.extraProperties.length; ++i) |
| 105 properties.push(this.extraProperties[i]); | 113 properties.push(this.extraProperties[i]); |
| 106 } | 114 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 133 return -1; | 141 return -1; |
| 134 if (propertyA.symbol && !propertyB.symbol) | 142 if (propertyA.symbol && !propertyB.symbol) |
| 135 return 1; | 143 return 1; |
| 136 if (propertyB.symbol && !propertyA.symbol) | 144 if (propertyB.symbol && !propertyA.symbol) |
| 137 return -1; | 145 return -1; |
| 138 return String.naturalOrderComparator(a, b); | 146 return String.naturalOrderComparator(a, b); |
| 139 } | 147 } |
| 140 | 148 |
| 141 /** | 149 /** |
| 142 * @constructor | 150 * @constructor |
| 151 */ |
| 152 WebInspector.ObjectPropertiesMemento = function() |
| 153 { |
| 154 this._expandedProperties = new Set(); |
| 155 this._lastDescriptions = {}; |
| 156 this._propertyIdentifiers = {}; |
| 157 } |
| 158 |
| 159 WebInspector.ObjectPropertiesMemento.prototype = { |
| 160 /** |
| 161 * @return {boolean} |
| 162 */ |
| 163 isPropertyPathExpanded: function(propertyPath) |
| 164 { |
| 165 return this._expandedProperties.has(propertyPath); |
| 166 }, |
| 167 addExpandedPropertyPath: function(propertyPath) |
| 168 { |
| 169 this._expandedProperties.add(propertyPath); |
| 170 }, |
| 171 deleteExpandedPropertyPath: function(propertyPath) |
| 172 { |
| 173 this._expandedProperties['delete'](propertyPath); |
| 174 }, |
| 175 forgetProperties: function() |
| 176 { |
| 177 for (var pi in this._lastDescriptions) |
| 178 { |
| 179 if (!(pi in this._propertyIdentifiers)) |
| 180 delete this._lastDescriptions[pi]; |
| 181 } |
| 182 this._propertyIdentifiers = {}; |
| 183 }, |
| 184 /** |
| 185 * @param {!WebInspector.ObjectPropertyTreeElement} objectPropertyTreeElemen
t |
| 186 */ |
| 187 recordAndDecorate: function(objectPropertyTreeElement) |
| 188 { |
| 189 var propertyPath = objectPropertyTreeElement.propertyPath(); |
| 190 if (Runtime.experiments.isEnabled("highlightChangedProperties") && prope
rtyPath) { |
| 191 this._propertyIdentifiers[propertyPath] = 1; |
| 192 var lastDesription = this._lastDescriptions[propertyPath]; |
| 193 var hadProperty = (lastDesription != undefined); |
| 194 var description = (objectPropertyTreeElement.property.value.type + "
:" + |
| 195 (objectPropertyTreeElement.property.value.subtype? objectPro
pertyTreeElement.property.value.subtype : "") + ":" + |
| 196 /* (objectPropertyTreeElement.property.value.objectId ? obje
ctPropertyTreeElement.property.value.objectId : "") + ":" + */ |
| 197 objectPropertyTreeElement.property.value.description); |
| 198 var descriptionChanged = (!hadProperty) || (description != lastDesri
ption); |
| 199 this._lastDescriptions[propertyPath] = description; |
| 200 |
| 201 if (descriptionChanged) |
| 202 objectPropertyTreeElement.valueElement.classList.add("highlighte
d-search-result"); |
| 203 if (!hadProperty) |
| 204 objectPropertyTreeElement.nameElement.classList.add("highlighted
-search-result"); |
| 205 } |
| 206 } |
| 207 } |
| 208 |
| 209 /** |
| 210 * @constructor |
| 143 * @extends {TreeElement} | 211 * @extends {TreeElement} |
| 144 * @param {!WebInspector.RemoteObjectProperty} property | 212 * @param {!WebInspector.RemoteObjectProperty} property |
| 145 */ | 213 */ |
| 146 WebInspector.ObjectPropertyTreeElement = function(property) | 214 WebInspector.ObjectPropertyTreeElement = function(property) |
| 147 { | 215 { |
| 148 this.property = property; | 216 this.property = property; |
| 149 | 217 |
| 150 // Pass an empty title, the title gets made later in onattach. | 218 // Pass an empty title, the title gets made later in onattach. |
| 151 TreeElement.call(this, "", null, false); | 219 TreeElement.call(this, "", null, false); |
| 152 this.toggleOnClick = true; | 220 this.toggleOnClick = true; |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties | 601 * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties |
| 534 * @param {function(new:TreeElement, !WebInspector.RemoteObjectProperty)} treeEl
ementConstructor | 602 * @param {function(new:TreeElement, !WebInspector.RemoteObjectProperty)} treeEl
ementConstructor |
| 535 * @param {function(!WebInspector.RemoteObjectProperty, !WebInspector.RemoteObje
ctProperty): number} comparator | 603 * @param {function(!WebInspector.RemoteObjectProperty, !WebInspector.RemoteObje
ctProperty): number} comparator |
| 536 * @param {boolean} skipProto | 604 * @param {boolean} skipProto |
| 537 * @param {?WebInspector.RemoteObject} value | 605 * @param {?WebInspector.RemoteObject} value |
| 538 * @param {?string=} emptyPlaceholder | 606 * @param {?string=} emptyPlaceholder |
| 539 */ | 607 */ |
| 540 WebInspector.ObjectPropertyTreeElement.populateWithProperties = function(treeNod
e, properties, internalProperties, treeElementConstructor, comparator, skipProto
, value, emptyPlaceholder) { | 608 WebInspector.ObjectPropertyTreeElement.populateWithProperties = function(treeNod
e, properties, internalProperties, treeElementConstructor, comparator, skipProto
, value, emptyPlaceholder) { |
| 541 properties.sort(comparator); | 609 properties.sort(comparator); |
| 542 | 610 |
| 611 function appendChild(treeElement) { |
| 612 treeNode.appendChild(treeElement); |
| 613 if (treeElement instanceof WebInspector.ObjectPropertyTreeElement) { |
| 614 var treeElementPropertyPath = treeElement.propertyPath(); |
| 615 if (Runtime.experiments.isEnabled("highlightChangedProperties") && |
| 616 treeElementPropertyPath && |
| 617 treeNode.treeOutline.section.memento) |
| 618 treeNode.treeOutline.section.memento.recordAndDecorate(treeEleme
nt); |
| 619 } |
| 620 } |
| 621 |
| 543 for (var i = 0; i < properties.length; ++i) { | 622 for (var i = 0; i < properties.length; ++i) { |
| 544 var property = properties[i]; | 623 var property = properties[i]; |
| 545 if (skipProto && property.name === "__proto__") | 624 if (skipProto && property.name === "__proto__") |
| 546 continue; | 625 continue; |
| 547 if (property.isAccessorProperty()) { | 626 if (property.isAccessorProperty()) { |
| 548 if (property.name !== "__proto__" && property.getter) { | 627 if (property.name !== "__proto__" && property.getter) { |
| 549 property.parentObject = value; | 628 property.parentObject = value; |
| 550 treeNode.appendChild(new treeElementConstructor(property)); | 629 appendChild(new treeElementConstructor(property)); |
| 551 } | 630 } |
| 552 if (property.isOwn) { | 631 if (property.isOwn) { |
| 553 if (property.getter) { | 632 if (property.getter) { |
| 554 var getterProperty = new WebInspector.RemoteObjectProperty("
get " + property.name, property.getter); | 633 var getterProperty = new WebInspector.RemoteObjectProperty("
get " + property.name, property.getter); |
| 555 getterProperty.parentObject = value; | 634 getterProperty.parentObject = value; |
| 556 treeNode.appendChild(new treeElementConstructor(getterProper
ty)); | 635 appendChild(new treeElementConstructor(getterProperty)); |
| 557 } | 636 } |
| 558 if (property.setter) { | 637 if (property.setter) { |
| 559 var setterProperty = new WebInspector.RemoteObjectProperty("
set " + property.name, property.setter); | 638 var setterProperty = new WebInspector.RemoteObjectProperty("
set " + property.name, property.setter); |
| 560 setterProperty.parentObject = value; | 639 setterProperty.parentObject = value; |
| 561 treeNode.appendChild(new treeElementConstructor(setterProper
ty)); | 640 appendChild(new treeElementConstructor(setterProperty)); |
| 562 } | 641 } |
| 563 } | 642 } |
| 564 } else { | 643 } else { |
| 565 property.parentObject = value; | 644 property.parentObject = value; |
| 566 treeNode.appendChild(new treeElementConstructor(property)); | 645 appendChild(new treeElementConstructor(property)); |
| 567 } | 646 } |
| 568 } | 647 } |
| 569 if (internalProperties) { | 648 if (internalProperties) { |
| 570 for (var i = 0; i < internalProperties.length; i++) { | 649 for (var i = 0; i < internalProperties.length; i++) { |
| 571 internalProperties[i].parentObject = value; | 650 internalProperties[i].parentObject = value; |
| 572 treeNode.appendChild(new treeElementConstructor(internalProperties[i
])); | 651 appendChild(new treeElementConstructor(internalProperties[i])); |
| 573 } | 652 } |
| 574 } | 653 } |
| 575 if (value && value.type === "function") { | 654 if (value && value.type === "function") { |
| 576 // Whether function has TargetFunction internal property. | 655 // Whether function has TargetFunction internal property. |
| 577 // This is a simple way to tell that the function is actually a bound fu
nction (we are not told). | 656 // This is a simple way to tell that the function is actually a bound fu
nction (we are not told). |
| 578 // Bound function never has inner scope and doesn't need corresponding U
I node. | 657 // Bound function never has inner scope and doesn't need corresponding U
I node. |
| 579 var hasTargetFunction = false; | 658 var hasTargetFunction = false; |
| 580 | 659 |
| 581 if (internalProperties) { | 660 if (internalProperties) { |
| 582 for (var i = 0; i < internalProperties.length; i++) { | 661 for (var i = 0; i < internalProperties.length; i++) { |
| 583 if (internalProperties[i].name == "[[TargetFunction]]") { | 662 if (internalProperties[i].name == "[[TargetFunction]]") { |
| 584 hasTargetFunction = true; | 663 hasTargetFunction = true; |
| 585 break; | 664 break; |
| 586 } | 665 } |
| 587 } | 666 } |
| 588 } | 667 } |
| 589 if (!hasTargetFunction) | 668 if (!hasTargetFunction) |
| 590 treeNode.appendChild(new WebInspector.FunctionScopeMainTreeElement(v
alue)); | 669 appendChild(new WebInspector.FunctionScopeMainTreeElement(value)); |
| 591 } | 670 } |
| 592 if (value && value.type === "object" && (value.subtype === "map" || value.su
btype === "set" || value.subtype === "iterator")) | 671 if (value && value.type === "object" && (value.subtype === "map" || value.su
btype === "set" || value.subtype === "iterator")) |
| 593 treeNode.appendChild(new WebInspector.CollectionEntriesMainTreeElement(v
alue)); | 672 appendChild(new WebInspector.CollectionEntriesMainTreeElement(value)); |
| 594 | 673 |
| 595 WebInspector.ObjectPropertyTreeElement._appendEmptyPlaceholderIfNeeded(treeN
ode, emptyPlaceholder); | 674 WebInspector.ObjectPropertyTreeElement._appendEmptyPlaceholderIfNeeded(treeN
ode, emptyPlaceholder); |
| 596 } | 675 } |
| 597 | 676 |
| 598 /** | 677 /** |
| 599 * @param {!TreeContainerNode} treeNode | 678 * @param {!TreeContainerNode} treeNode |
| 600 * @param {?string=} emptyPlaceholder | 679 * @param {?string=} emptyPlaceholder |
| 601 */ | 680 */ |
| 602 WebInspector.ObjectPropertyTreeElement._appendEmptyPlaceholderIfNeeded = functio
n(treeNode, emptyPlaceholder) | 681 WebInspector.ObjectPropertyTreeElement._appendEmptyPlaceholderIfNeeded = functio
n(treeNode, emptyPlaceholder) |
| 603 { | 682 { |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1120 { | 1199 { |
| 1121 WebInspector.TextPrompt.call(this, WebInspector.ExecutionContextSelector.com
pletionsForTextPromptInCurrentContext); | 1200 WebInspector.TextPrompt.call(this, WebInspector.ExecutionContextSelector.com
pletionsForTextPromptInCurrentContext); |
| 1122 this.setSuggestBoxEnabled(true); | 1201 this.setSuggestBoxEnabled(true); |
| 1123 if (renderAsBlock) | 1202 if (renderAsBlock) |
| 1124 this.renderAsBlock(); | 1203 this.renderAsBlock(); |
| 1125 } | 1204 } |
| 1126 | 1205 |
| 1127 WebInspector.ObjectPropertyPrompt.prototype = { | 1206 WebInspector.ObjectPropertyPrompt.prototype = { |
| 1128 __proto__: WebInspector.TextPrompt.prototype | 1207 __proto__: WebInspector.TextPrompt.prototype |
| 1129 } | 1208 } |
| OLD | NEW |