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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 | 57 |
58 var note = this.expandedTitleElement.createChild("span", "object-state-n
ote"); | 58 var note = this.expandedTitleElement.createChild("span", "object-state-n
ote"); |
59 note.classList.add("info-note"); | 59 note.classList.add("info-note"); |
60 note.title = WebInspector.UIString("Value below was evaluated just now."
); | 60 note.title = WebInspector.UIString("Value below was evaluated just now."
); |
61 } | 61 } |
62 | 62 |
63 this.element._section = this; | 63 this.element._section = this; |
64 this.registerRequiredCSS("components/objectValue.css"); | 64 this.registerRequiredCSS("components/objectValue.css"); |
65 this.registerRequiredCSS("components/objectPropertiesSection.css"); | 65 this.registerRequiredCSS("components/objectPropertiesSection.css"); |
66 this.rootElement().childrenListElement.classList.add("source-code", "object-
properties-section"); | 66 this.rootElement().childrenListElement.classList.add("source-code", "object-
properties-section"); |
67 } | 67 }; |
68 | 68 |
69 /** @const */ | 69 /** @const */ |
70 WebInspector.ObjectPropertiesSection._arrayLoadThreshold = 100; | 70 WebInspector.ObjectPropertiesSection._arrayLoadThreshold = 100; |
71 | 71 |
72 /** | 72 /** |
73 * @param {!WebInspector.RemoteObject} object | 73 * @param {!WebInspector.RemoteObject} object |
74 * @param {!WebInspector.Linkifier=} linkifier | 74 * @param {!WebInspector.Linkifier=} linkifier |
75 * @param {boolean=} skipProto | 75 * @param {boolean=} skipProto |
76 * @return {!Element} | 76 * @return {!Element} |
77 */ | 77 */ |
78 WebInspector.ObjectPropertiesSection.defaultObjectPresentation = function(object
, linkifier, skipProto) | 78 WebInspector.ObjectPropertiesSection.defaultObjectPresentation = function(object
, linkifier, skipProto) |
79 { | 79 { |
80 var componentRoot = createElementWithClass("span", "source-code"); | 80 var componentRoot = createElementWithClass("span", "source-code"); |
81 var shadowRoot = WebInspector.createShadowRootWithCoreStyles(componentRoot,
"components/objectValue.css"); | 81 var shadowRoot = WebInspector.createShadowRootWithCoreStyles(componentRoot,
"components/objectValue.css"); |
82 shadowRoot.appendChild(WebInspector.ObjectPropertiesSection.createValueEleme
nt(object, false)); | 82 shadowRoot.appendChild(WebInspector.ObjectPropertiesSection.createValueEleme
nt(object, false)); |
83 if (!object.hasChildren) | 83 if (!object.hasChildren) |
84 return componentRoot; | 84 return componentRoot; |
85 | 85 |
86 var objectPropertiesSection = new WebInspector.ObjectPropertiesSection(objec
t, componentRoot, linkifier); | 86 var objectPropertiesSection = new WebInspector.ObjectPropertiesSection(objec
t, componentRoot, linkifier); |
87 objectPropertiesSection.editable = false; | 87 objectPropertiesSection.editable = false; |
88 if (skipProto) | 88 if (skipProto) |
89 objectPropertiesSection.skipProto(); | 89 objectPropertiesSection.skipProto(); |
90 | 90 |
91 return objectPropertiesSection.element; | 91 return objectPropertiesSection.element; |
92 } | 92 }; |
93 | 93 |
94 WebInspector.ObjectPropertiesSection.prototype = { | 94 WebInspector.ObjectPropertiesSection.prototype = { |
95 skipProto: function() | 95 skipProto: function() |
96 { | 96 { |
97 this._skipProto = true; | 97 this._skipProto = true; |
98 }, | 98 }, |
99 | 99 |
100 expand: function() | 100 expand: function() |
101 { | 101 { |
102 this._objectTreeElement.expand(); | 102 this._objectTreeElement.expand(); |
(...skipping 28 matching lines...) Expand all Loading... |
131 }, | 131 }, |
132 | 132 |
133 titleLessMode: function() | 133 titleLessMode: function() |
134 { | 134 { |
135 this._objectTreeElement.listItemElement.classList.add("hidden"); | 135 this._objectTreeElement.listItemElement.classList.add("hidden"); |
136 this._objectTreeElement.childrenListElement.classList.add("title-less-mo
de"); | 136 this._objectTreeElement.childrenListElement.classList.add("title-less-mo
de"); |
137 this._objectTreeElement.expand(); | 137 this._objectTreeElement.expand(); |
138 }, | 138 }, |
139 | 139 |
140 __proto__: TreeOutlineInShadow.prototype | 140 __proto__: TreeOutlineInShadow.prototype |
141 } | 141 }; |
142 | 142 |
143 /** | 143 /** |
144 * @param {!WebInspector.RemoteObjectProperty} propertyA | 144 * @param {!WebInspector.RemoteObjectProperty} propertyA |
145 * @param {!WebInspector.RemoteObjectProperty} propertyB | 145 * @param {!WebInspector.RemoteObjectProperty} propertyB |
146 * @return {number} | 146 * @return {number} |
147 */ | 147 */ |
148 WebInspector.ObjectPropertiesSection.CompareProperties = function(propertyA, pro
pertyB) | 148 WebInspector.ObjectPropertiesSection.CompareProperties = function(propertyA, pro
pertyB) |
149 { | 149 { |
150 var a = propertyA.name; | 150 var a = propertyA.name; |
151 var b = propertyB.name; | 151 var b = propertyB.name; |
152 if (a === "__proto__") | 152 if (a === "__proto__") |
153 return 1; | 153 return 1; |
154 if (b === "__proto__") | 154 if (b === "__proto__") |
155 return -1; | 155 return -1; |
156 if (propertyA.symbol && !propertyB.symbol) | 156 if (propertyA.symbol && !propertyB.symbol) |
157 return 1; | 157 return 1; |
158 if (propertyB.symbol && !propertyA.symbol) | 158 if (propertyB.symbol && !propertyA.symbol) |
159 return -1; | 159 return -1; |
160 return String.naturalOrderComparator(a, b); | 160 return String.naturalOrderComparator(a, b); |
161 } | 161 }; |
162 | 162 |
163 /** | 163 /** |
164 * @constructor | 164 * @constructor |
165 * @extends {TreeElement} | 165 * @extends {TreeElement} |
166 * @param {!WebInspector.RemoteObject} object | 166 * @param {!WebInspector.RemoteObject} object |
167 * @param {!WebInspector.Linkifier=} linkifier | 167 * @param {!WebInspector.Linkifier=} linkifier |
168 * @param {?string=} emptyPlaceholder | 168 * @param {?string=} emptyPlaceholder |
169 * @param {boolean=} ignoreHasOwnProperty | 169 * @param {boolean=} ignoreHasOwnProperty |
170 * @param {!Array.<!WebInspector.RemoteObjectProperty>=} extraProperties | 170 * @param {!Array.<!WebInspector.RemoteObjectProperty>=} extraProperties |
171 */ | 171 */ |
172 WebInspector.ObjectPropertiesSection.RootElement = function(object, linkifier, e
mptyPlaceholder, ignoreHasOwnProperty, extraProperties) | 172 WebInspector.ObjectPropertiesSection.RootElement = function(object, linkifier, e
mptyPlaceholder, ignoreHasOwnProperty, extraProperties) |
173 { | 173 { |
174 this._object = object; | 174 this._object = object; |
175 this._extraProperties = extraProperties || []; | 175 this._extraProperties = extraProperties || []; |
176 this._ignoreHasOwnProperty = !!ignoreHasOwnProperty; | 176 this._ignoreHasOwnProperty = !!ignoreHasOwnProperty; |
177 this._emptyPlaceholder = emptyPlaceholder; | 177 this._emptyPlaceholder = emptyPlaceholder; |
178 var contentElement = createElement("content"); | 178 var contentElement = createElement("content"); |
179 TreeElement.call(this, contentElement); | 179 TreeElement.call(this, contentElement); |
180 this.setExpandable(true); | 180 this.setExpandable(true); |
181 this.selectable = false; | 181 this.selectable = false; |
182 this.toggleOnClick = true; | 182 this.toggleOnClick = true; |
183 this.listItemElement.classList.add("object-properties-section-root-element")
; | 183 this.listItemElement.classList.add("object-properties-section-root-element")
; |
184 this._linkifier = linkifier; | 184 this._linkifier = linkifier; |
185 } | 185 }; |
186 | 186 |
187 WebInspector.ObjectPropertiesSection.RootElement.prototype = { | 187 WebInspector.ObjectPropertiesSection.RootElement.prototype = { |
188 /** | 188 /** |
189 * @override | 189 * @override |
190 */ | 190 */ |
191 onexpand: function() | 191 onexpand: function() |
192 { | 192 { |
193 if (this.treeOutline) { | 193 if (this.treeOutline) { |
194 this.treeOutline.element.classList.add("expanded"); | 194 this.treeOutline.element.classList.add("expanded"); |
195 this._showExpandedTitleElement(true); | 195 this._showExpandedTitleElement(true); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 { | 229 { |
230 return true; | 230 return true; |
231 }, | 231 }, |
232 | 232 |
233 onpopulate: function() | 233 onpopulate: function() |
234 { | 234 { |
235 WebInspector.ObjectPropertyTreeElement._populate(this, this._object, !!t
his.treeOutline._skipProto, this._linkifier, this._emptyPlaceholder, this._ignor
eHasOwnProperty, this._extraProperties); | 235 WebInspector.ObjectPropertyTreeElement._populate(this, this._object, !!t
his.treeOutline._skipProto, this._linkifier, this._emptyPlaceholder, this._ignor
eHasOwnProperty, this._extraProperties); |
236 }, | 236 }, |
237 | 237 |
238 __proto__: TreeElement.prototype | 238 __proto__: TreeElement.prototype |
239 } | 239 }; |
240 | 240 |
241 /** | 241 /** |
242 * @constructor | 242 * @constructor |
243 * @extends {TreeElement} | 243 * @extends {TreeElement} |
244 * @param {!WebInspector.RemoteObjectProperty} property | 244 * @param {!WebInspector.RemoteObjectProperty} property |
245 * @param {!WebInspector.Linkifier=} linkifier | 245 * @param {!WebInspector.Linkifier=} linkifier |
246 */ | 246 */ |
247 WebInspector.ObjectPropertyTreeElement = function(property, linkifier) | 247 WebInspector.ObjectPropertyTreeElement = function(property, linkifier) |
248 { | 248 { |
249 this.property = property; | 249 this.property = property; |
250 | 250 |
251 // Pass an empty title, the title gets made later in onattach. | 251 // Pass an empty title, the title gets made later in onattach. |
252 TreeElement.call(this); | 252 TreeElement.call(this); |
253 this.toggleOnClick = true; | 253 this.toggleOnClick = true; |
254 this.selectable = false; | 254 this.selectable = false; |
255 /** @type {!Array.<!Object>} */ | 255 /** @type {!Array.<!Object>} */ |
256 this._highlightChanges = []; | 256 this._highlightChanges = []; |
257 this._linkifier = linkifier; | 257 this._linkifier = linkifier; |
258 } | 258 }; |
259 | 259 |
260 WebInspector.ObjectPropertyTreeElement.prototype = { | 260 WebInspector.ObjectPropertyTreeElement.prototype = { |
261 /** | 261 /** |
262 * @param {!RegExp} regex | 262 * @param {!RegExp} regex |
263 * @param {string=} additionalCssClassName | 263 * @param {string=} additionalCssClassName |
264 * @return {boolean} | 264 * @return {boolean} |
265 */ | 265 */ |
266 setSearchRegex: function(regex, additionalCssClassName) | 266 setSearchRegex: function(regex, additionalCssClassName) |
267 { | 267 { |
268 var cssClasses = WebInspector.highlightedSearchResultClassName; | 268 var cssClasses = WebInspector.highlightedSearchResultClassName; |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
572 | 572 |
573 _updateExpandable: function() | 573 _updateExpandable: function() |
574 { | 574 { |
575 if (this.property.value) | 575 if (this.property.value) |
576 this.setExpandable(!this.property.value.customPreview() && this.prop
erty.value.hasChildren && !this.property.wasThrown); | 576 this.setExpandable(!this.property.value.customPreview() && this.prop
erty.value.hasChildren && !this.property.wasThrown); |
577 else | 577 else |
578 this.setExpandable(false); | 578 this.setExpandable(false); |
579 }, | 579 }, |
580 | 580 |
581 __proto__: TreeElement.prototype | 581 __proto__: TreeElement.prototype |
582 } | 582 }; |
583 | 583 |
584 /** | 584 /** |
585 * @param {!TreeElement} treeElement | 585 * @param {!TreeElement} treeElement |
586 * @param {!WebInspector.RemoteObject} value | 586 * @param {!WebInspector.RemoteObject} value |
587 * @param {boolean} skipProto | 587 * @param {boolean} skipProto |
588 * @param {!WebInspector.Linkifier=} linkifier | 588 * @param {!WebInspector.Linkifier=} linkifier |
589 * @param {?string=} emptyPlaceholder | 589 * @param {?string=} emptyPlaceholder |
590 * @param {boolean=} flattenProtoChain | 590 * @param {boolean=} flattenProtoChain |
591 * @param {!Array.<!WebInspector.RemoteObjectProperty>=} extraProperties | 591 * @param {!Array.<!WebInspector.RemoteObjectProperty>=} extraProperties |
592 * @param {!WebInspector.RemoteObject=} targetValue | 592 * @param {!WebInspector.RemoteObject=} targetValue |
(...skipping 21 matching lines...) Expand all Loading... |
614 properties.push(extraProperties[i]); | 614 properties.push(extraProperties[i]); |
615 | 615 |
616 WebInspector.ObjectPropertyTreeElement.populateWithProperties(treeElemen
t, properties, internalProperties, | 616 WebInspector.ObjectPropertyTreeElement.populateWithProperties(treeElemen
t, properties, internalProperties, |
617 skipProto, targetValue || value, linkifier, emptyPlaceholder); | 617 skipProto, targetValue || value, linkifier, emptyPlaceholder); |
618 } | 618 } |
619 | 619 |
620 if (flattenProtoChain) | 620 if (flattenProtoChain) |
621 value.getAllProperties(false, callback); | 621 value.getAllProperties(false, callback); |
622 else | 622 else |
623 WebInspector.RemoteObject.loadFromObjectPerProto(value, callback); | 623 WebInspector.RemoteObject.loadFromObjectPerProto(value, callback); |
624 } | 624 }; |
625 | 625 |
626 /** | 626 /** |
627 * @param {!TreeElement} treeNode | 627 * @param {!TreeElement} treeNode |
628 * @param {!Array.<!WebInspector.RemoteObjectProperty>} properties | 628 * @param {!Array.<!WebInspector.RemoteObjectProperty>} properties |
629 * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties | 629 * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties |
630 * @param {boolean} skipProto | 630 * @param {boolean} skipProto |
631 * @param {?WebInspector.RemoteObject} value | 631 * @param {?WebInspector.RemoteObject} value |
632 * @param {!WebInspector.Linkifier=} linkifier | 632 * @param {!WebInspector.Linkifier=} linkifier |
633 * @param {?string=} emptyPlaceholder | 633 * @param {?string=} emptyPlaceholder |
634 */ | 634 */ |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 internalProperties[i].parentObject = value; | 666 internalProperties[i].parentObject = value; |
667 var treeElement = new WebInspector.ObjectPropertyTreeElement(interna
lProperties[i], linkifier); | 667 var treeElement = new WebInspector.ObjectPropertyTreeElement(interna
lProperties[i], linkifier); |
668 if (internalProperties[i].name === "[[Entries]]") { | 668 if (internalProperties[i].name === "[[Entries]]") { |
669 treeElement.setExpandable(true); | 669 treeElement.setExpandable(true); |
670 treeElement.expand(); | 670 treeElement.expand(); |
671 } | 671 } |
672 treeNode.appendChild(treeElement); | 672 treeNode.appendChild(treeElement); |
673 } | 673 } |
674 } | 674 } |
675 WebInspector.ObjectPropertyTreeElement._appendEmptyPlaceholderIfNeeded(treeN
ode, emptyPlaceholder); | 675 WebInspector.ObjectPropertyTreeElement._appendEmptyPlaceholderIfNeeded(treeN
ode, emptyPlaceholder); |
676 } | 676 }; |
677 | 677 |
678 /** | 678 /** |
679 * @param {!TreeElement} treeNode | 679 * @param {!TreeElement} treeNode |
680 * @param {?string=} emptyPlaceholder | 680 * @param {?string=} emptyPlaceholder |
681 */ | 681 */ |
682 WebInspector.ObjectPropertyTreeElement._appendEmptyPlaceholderIfNeeded = functio
n(treeNode, emptyPlaceholder) | 682 WebInspector.ObjectPropertyTreeElement._appendEmptyPlaceholderIfNeeded = functio
n(treeNode, emptyPlaceholder) |
683 { | 683 { |
684 if (treeNode.childCount()) | 684 if (treeNode.childCount()) |
685 return; | 685 return; |
686 var title = createElementWithClass("div", "gray-info-message"); | 686 var title = createElementWithClass("div", "gray-info-message"); |
687 title.textContent = emptyPlaceholder || WebInspector.UIString("No Properties
"); | 687 title.textContent = emptyPlaceholder || WebInspector.UIString("No Properties
"); |
688 var infoElement = new TreeElement(title); | 688 var infoElement = new TreeElement(title); |
689 treeNode.appendChild(infoElement); | 689 treeNode.appendChild(infoElement); |
690 } | 690 }; |
691 | 691 |
692 /** | 692 /** |
693 * @param {?WebInspector.RemoteObject} object | 693 * @param {?WebInspector.RemoteObject} object |
694 * @param {!Array.<string>} propertyPath | 694 * @param {!Array.<string>} propertyPath |
695 * @param {function(?WebInspector.RemoteObject, boolean=)} callback | 695 * @param {function(?WebInspector.RemoteObject, boolean=)} callback |
696 * @return {!Element} | 696 * @return {!Element} |
697 */ | 697 */ |
698 WebInspector.ObjectPropertyTreeElement.createRemoteObjectAccessorPropertySpan =
function(object, propertyPath, callback) | 698 WebInspector.ObjectPropertyTreeElement.createRemoteObjectAccessorPropertySpan =
function(object, propertyPath, callback) |
699 { | 699 { |
700 var rootElement = createElement("span"); | 700 var rootElement = createElement("span"); |
701 var element = rootElement.createChild("span"); | 701 var element = rootElement.createChild("span"); |
702 element.textContent = WebInspector.UIString("(...)"); | 702 element.textContent = WebInspector.UIString("(...)"); |
703 if (!object) | 703 if (!object) |
704 return rootElement; | 704 return rootElement; |
705 element.classList.add("object-value-calculate-value-button"); | 705 element.classList.add("object-value-calculate-value-button"); |
706 element.title = WebInspector.UIString("Invoke property getter"); | 706 element.title = WebInspector.UIString("Invoke property getter"); |
707 element.addEventListener("click", onInvokeGetterClick, false); | 707 element.addEventListener("click", onInvokeGetterClick, false); |
708 | 708 |
709 function onInvokeGetterClick(event) | 709 function onInvokeGetterClick(event) |
710 { | 710 { |
711 event.consume(); | 711 event.consume(); |
712 object.getProperty(propertyPath, callback); | 712 object.getProperty(propertyPath, callback); |
713 } | 713 } |
714 | 714 |
715 return rootElement; | 715 return rootElement; |
716 } | 716 }; |
717 | 717 |
718 /** | 718 /** |
719 * @constructor | 719 * @constructor |
720 * @extends {TreeElement} | 720 * @extends {TreeElement} |
721 * @param {!WebInspector.RemoteObject} object | 721 * @param {!WebInspector.RemoteObject} object |
722 * @param {number} fromIndex | 722 * @param {number} fromIndex |
723 * @param {number} toIndex | 723 * @param {number} toIndex |
724 * @param {number} propertyCount | 724 * @param {number} propertyCount |
725 * @param {!WebInspector.Linkifier=} linkifier | 725 * @param {!WebInspector.Linkifier=} linkifier |
726 */ | 726 */ |
727 WebInspector.ArrayGroupingTreeElement = function(object, fromIndex, toIndex, pro
pertyCount, linkifier) | 727 WebInspector.ArrayGroupingTreeElement = function(object, fromIndex, toIndex, pro
pertyCount, linkifier) |
728 { | 728 { |
729 TreeElement.call(this, String.sprintf("[%d \u2026 %d]", fromIndex, toIndex),
true); | 729 TreeElement.call(this, String.sprintf("[%d \u2026 %d]", fromIndex, toIndex),
true); |
730 this.toggleOnClick = true; | 730 this.toggleOnClick = true; |
731 this.selectable = false; | 731 this.selectable = false; |
732 this._fromIndex = fromIndex; | 732 this._fromIndex = fromIndex; |
733 this._toIndex = toIndex; | 733 this._toIndex = toIndex; |
734 this._object = object; | 734 this._object = object; |
735 this._readOnly = true; | 735 this._readOnly = true; |
736 this._propertyCount = propertyCount; | 736 this._propertyCount = propertyCount; |
737 this._linkifier = linkifier; | 737 this._linkifier = linkifier; |
738 } | 738 }; |
739 | 739 |
740 WebInspector.ArrayGroupingTreeElement._bucketThreshold = 100; | 740 WebInspector.ArrayGroupingTreeElement._bucketThreshold = 100; |
741 WebInspector.ArrayGroupingTreeElement._sparseIterationThreshold = 250000; | 741 WebInspector.ArrayGroupingTreeElement._sparseIterationThreshold = 250000; |
742 WebInspector.ArrayGroupingTreeElement._getOwnPropertyNamesThreshold = 500000; | 742 WebInspector.ArrayGroupingTreeElement._getOwnPropertyNamesThreshold = 500000; |
743 | 743 |
744 /** | 744 /** |
745 * @param {!TreeElement} treeNode | 745 * @param {!TreeElement} treeNode |
746 * @param {!WebInspector.RemoteObject} object | 746 * @param {!WebInspector.RemoteObject} object |
747 * @param {number} fromIndex | 747 * @param {number} fromIndex |
748 * @param {number} toIndex | 748 * @param {number} toIndex |
749 * @param {!WebInspector.Linkifier=} linkifier | 749 * @param {!WebInspector.Linkifier=} linkifier |
750 */ | 750 */ |
751 WebInspector.ArrayGroupingTreeElement._populateArray = function(treeNode, object
, fromIndex, toIndex, linkifier) | 751 WebInspector.ArrayGroupingTreeElement._populateArray = function(treeNode, object
, fromIndex, toIndex, linkifier) |
752 { | 752 { |
753 WebInspector.ArrayGroupingTreeElement._populateRanges(treeNode, object, from
Index, toIndex, true, linkifier); | 753 WebInspector.ArrayGroupingTreeElement._populateRanges(treeNode, object, from
Index, toIndex, true, linkifier); |
754 } | 754 }; |
755 | 755 |
756 /** | 756 /** |
757 * @param {!TreeElement} treeNode | 757 * @param {!TreeElement} treeNode |
758 * @param {!WebInspector.RemoteObject} object | 758 * @param {!WebInspector.RemoteObject} object |
759 * @param {number} fromIndex | 759 * @param {number} fromIndex |
760 * @param {number} toIndex | 760 * @param {number} toIndex |
761 * @param {boolean} topLevel | 761 * @param {boolean} topLevel |
762 * @param {!WebInspector.Linkifier=} linkifier | 762 * @param {!WebInspector.Linkifier=} linkifier |
763 * @this {WebInspector.ArrayGroupingTreeElement} | 763 * @this {WebInspector.ArrayGroupingTreeElement} |
764 */ | 764 */ |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 var count = ranges[i][2]; | 864 var count = ranges[i][2]; |
865 if (fromIndex === toIndex) | 865 if (fromIndex === toIndex) |
866 WebInspector.ArrayGroupingTreeElement._populateAsFragment(tr
eeNode, object, fromIndex, toIndex, linkifier); | 866 WebInspector.ArrayGroupingTreeElement._populateAsFragment(tr
eeNode, object, fromIndex, toIndex, linkifier); |
867 else | 867 else |
868 treeNode.appendChild(new WebInspector.ArrayGroupingTreeEleme
nt(object, fromIndex, toIndex, count, linkifier)); | 868 treeNode.appendChild(new WebInspector.ArrayGroupingTreeEleme
nt(object, fromIndex, toIndex, count, linkifier)); |
869 } | 869 } |
870 } | 870 } |
871 if (topLevel) | 871 if (topLevel) |
872 WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties(tr
eeNode, object, result.skipGetOwnPropertyNames, linkifier); | 872 WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties(tr
eeNode, object, result.skipGetOwnPropertyNames, linkifier); |
873 } | 873 } |
874 } | 874 }; |
875 | 875 |
876 /** | 876 /** |
877 * @param {!TreeElement} treeNode | 877 * @param {!TreeElement} treeNode |
878 * @param {!WebInspector.RemoteObject} object | 878 * @param {!WebInspector.RemoteObject} object |
879 * @param {number} fromIndex | 879 * @param {number} fromIndex |
880 * @param {number} toIndex | 880 * @param {number} toIndex |
881 * @param {!WebInspector.Linkifier=} linkifier | 881 * @param {!WebInspector.Linkifier=} linkifier |
882 * @this {WebInspector.ArrayGroupingTreeElement} | 882 * @this {WebInspector.ArrayGroupingTreeElement} |
883 */ | 883 */ |
884 WebInspector.ArrayGroupingTreeElement._populateAsFragment = function(treeNode, o
bject, fromIndex, toIndex, linkifier) | 884 WebInspector.ArrayGroupingTreeElement._populateAsFragment = function(treeNode, o
bject, fromIndex, toIndex, linkifier) |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
931 return; | 931 return; |
932 | 932 |
933 properties.sort(WebInspector.ObjectPropertiesSection.CompareProperties); | 933 properties.sort(WebInspector.ObjectPropertiesSection.CompareProperties); |
934 for (var i = 0; i < properties.length; ++i) { | 934 for (var i = 0; i < properties.length; ++i) { |
935 properties[i].parentObject = this._object; | 935 properties[i].parentObject = this._object; |
936 var childTreeElement = new WebInspector.ObjectPropertyTreeElement(pr
operties[i], linkifier); | 936 var childTreeElement = new WebInspector.ObjectPropertyTreeElement(pr
operties[i], linkifier); |
937 childTreeElement._readOnly = true; | 937 childTreeElement._readOnly = true; |
938 treeNode.appendChild(childTreeElement); | 938 treeNode.appendChild(childTreeElement); |
939 } | 939 } |
940 } | 940 } |
941 } | 941 }; |
942 | 942 |
943 /** | 943 /** |
944 * @param {!TreeElement} treeNode | 944 * @param {!TreeElement} treeNode |
945 * @param {!WebInspector.RemoteObject} object | 945 * @param {!WebInspector.RemoteObject} object |
946 * @param {boolean} skipGetOwnPropertyNames | 946 * @param {boolean} skipGetOwnPropertyNames |
947 * @param {!WebInspector.Linkifier=} linkifier | 947 * @param {!WebInspector.Linkifier=} linkifier |
948 * @this {WebInspector.ArrayGroupingTreeElement} | 948 * @this {WebInspector.ArrayGroupingTreeElement} |
949 */ | 949 */ |
950 WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties = function(tre
eNode, object, skipGetOwnPropertyNames, linkifier) | 950 WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties = function(tre
eNode, object, skipGetOwnPropertyNames, linkifier) |
951 { | 951 { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
996 if (!properties) | 996 if (!properties) |
997 return; | 997 return; |
998 properties.sort(WebInspector.ObjectPropertiesSection.CompareProperties); | 998 properties.sort(WebInspector.ObjectPropertiesSection.CompareProperties); |
999 for (var i = 0; i < properties.length; ++i) { | 999 for (var i = 0; i < properties.length; ++i) { |
1000 properties[i].parentObject = this._object; | 1000 properties[i].parentObject = this._object; |
1001 var childTreeElement = new WebInspector.ObjectPropertyTreeElement(pr
operties[i], linkifier); | 1001 var childTreeElement = new WebInspector.ObjectPropertyTreeElement(pr
operties[i], linkifier); |
1002 childTreeElement._readOnly = true; | 1002 childTreeElement._readOnly = true; |
1003 treeNode.appendChild(childTreeElement); | 1003 treeNode.appendChild(childTreeElement); |
1004 } | 1004 } |
1005 } | 1005 } |
1006 } | 1006 }; |
1007 | 1007 |
1008 WebInspector.ArrayGroupingTreeElement.prototype = { | 1008 WebInspector.ArrayGroupingTreeElement.prototype = { |
1009 onpopulate: function() | 1009 onpopulate: function() |
1010 { | 1010 { |
1011 if (this._propertyCount >= WebInspector.ArrayGroupingTreeElement._bucket
Threshold) { | 1011 if (this._propertyCount >= WebInspector.ArrayGroupingTreeElement._bucket
Threshold) { |
1012 WebInspector.ArrayGroupingTreeElement._populateRanges(this, this._ob
ject, this._fromIndex, this._toIndex, false, this._linkifier); | 1012 WebInspector.ArrayGroupingTreeElement._populateRanges(this, this._ob
ject, this._fromIndex, this._toIndex, false, this._linkifier); |
1013 return; | 1013 return; |
1014 } | 1014 } |
1015 WebInspector.ArrayGroupingTreeElement._populateAsFragment(this, this._ob
ject, this._fromIndex, this._toIndex, this._linkifier); | 1015 WebInspector.ArrayGroupingTreeElement._populateAsFragment(this, this._ob
ject, this._fromIndex, this._toIndex, this._linkifier); |
1016 }, | 1016 }, |
1017 | 1017 |
1018 onattach: function() | 1018 onattach: function() |
1019 { | 1019 { |
1020 this.listItemElement.classList.add("object-properties-section-name"); | 1020 this.listItemElement.classList.add("object-properties-section-name"); |
1021 }, | 1021 }, |
1022 | 1022 |
1023 __proto__: TreeElement.prototype | 1023 __proto__: TreeElement.prototype |
1024 } | 1024 }; |
1025 | 1025 |
1026 /** | 1026 /** |
1027 * @constructor | 1027 * @constructor |
1028 * @extends {WebInspector.TextPrompt} | 1028 * @extends {WebInspector.TextPrompt} |
1029 */ | 1029 */ |
1030 WebInspector.ObjectPropertyPrompt = function() | 1030 WebInspector.ObjectPropertyPrompt = function() |
1031 { | 1031 { |
1032 WebInspector.TextPrompt.call(this, WebInspector.ExecutionContextSelector.com
pletionsForTextPromptInCurrentContext); | 1032 WebInspector.TextPrompt.call(this, WebInspector.ExecutionContextSelector.com
pletionsForTextPromptInCurrentContext); |
1033 this.setSuggestBoxEnabled(true); | 1033 this.setSuggestBoxEnabled(true); |
1034 } | 1034 }; |
1035 | 1035 |
1036 WebInspector.ObjectPropertyPrompt.prototype = { | 1036 WebInspector.ObjectPropertyPrompt.prototype = { |
1037 __proto__: WebInspector.TextPrompt.prototype | 1037 __proto__: WebInspector.TextPrompt.prototype |
1038 } | 1038 }; |
1039 | 1039 |
1040 /** | 1040 /** |
1041 * @param {?string} name | 1041 * @param {?string} name |
1042 * @return {!Element} | 1042 * @return {!Element} |
1043 */ | 1043 */ |
1044 WebInspector.ObjectPropertiesSection.createNameElement = function(name) | 1044 WebInspector.ObjectPropertiesSection.createNameElement = function(name) |
1045 { | 1045 { |
1046 var nameElement = createElementWithClass("span", "name"); | 1046 var nameElement = createElementWithClass("span", "name"); |
1047 if (/^\s|\s$|^$|\n/.test(name)) | 1047 if (/^\s|\s$|^$|\n/.test(name)) |
1048 nameElement.createTextChildren("\"", name.replace(/\n/g, "\u21B5"), "\""
); | 1048 nameElement.createTextChildren("\"", name.replace(/\n/g, "\u21B5"), "\""
); |
1049 else | 1049 else |
1050 nameElement.textContent = name; | 1050 nameElement.textContent = name; |
1051 return nameElement; | 1051 return nameElement; |
1052 } | 1052 }; |
1053 | 1053 |
1054 WebInspector.ObjectPropertiesSection._functionPrefixSource = /^(?:async\s)?funct
ion\*?\s/; | 1054 WebInspector.ObjectPropertiesSection._functionPrefixSource = /^(?:async\s)?funct
ion\*?\s/; |
1055 | 1055 |
1056 /** | 1056 /** |
1057 * @param {?string=} description | 1057 * @param {?string=} description |
1058 * @return {string} valueText | 1058 * @return {string} valueText |
1059 */ | 1059 */ |
1060 WebInspector.ObjectPropertiesSection.valueTextForFunctionDescription = function(
description) | 1060 WebInspector.ObjectPropertiesSection.valueTextForFunctionDescription = function(
description) |
1061 { | 1061 { |
1062 var text = description.replace(/^function [gs]et /, "function "); | 1062 var text = description.replace(/^function [gs]et /, "function "); |
1063 var functionPrefixWithArguments = new RegExp(WebInspector.ObjectPropertiesSe
ction._functionPrefixSource.source + "([^)]*)"); | 1063 var functionPrefixWithArguments = new RegExp(WebInspector.ObjectPropertiesSe
ction._functionPrefixSource.source + "([^)]*)"); |
1064 var matches = functionPrefixWithArguments.exec(text); | 1064 var matches = functionPrefixWithArguments.exec(text); |
1065 if (!matches) { | 1065 if (!matches) { |
1066 // process shorthand methods | 1066 // process shorthand methods |
1067 matches = /[^(]*(\([^)]*)/.exec(text); | 1067 matches = /[^(]*(\([^)]*)/.exec(text); |
1068 } | 1068 } |
1069 var match = matches ? matches[1] : null; | 1069 var match = matches ? matches[1] : null; |
1070 return match ? match.replace(/\n/g, " ") + ")" : (text || ""); | 1070 return match ? match.replace(/\n/g, " ") + ")" : (text || ""); |
1071 } | 1071 }; |
1072 | 1072 |
1073 /** | 1073 /** |
1074 * @param {!WebInspector.RemoteObject} value | 1074 * @param {!WebInspector.RemoteObject} value |
1075 * @param {boolean} wasThrown | 1075 * @param {boolean} wasThrown |
1076 * @param {!Element=} parentElement | 1076 * @param {!Element=} parentElement |
1077 * @param {!WebInspector.Linkifier=} linkifier | 1077 * @param {!WebInspector.Linkifier=} linkifier |
1078 * @return {!Element} | 1078 * @return {!Element} |
1079 */ | 1079 */ |
1080 WebInspector.ObjectPropertiesSection.createValueElementWithCustomSupport = funct
ion(value, wasThrown, parentElement, linkifier) | 1080 WebInspector.ObjectPropertiesSection.createValueElementWithCustomSupport = funct
ion(value, wasThrown, parentElement, linkifier) |
1081 { | 1081 { |
1082 if (value.customPreview()) { | 1082 if (value.customPreview()) { |
1083 var result = (new WebInspector.CustomPreviewComponent(value)).element; | 1083 var result = (new WebInspector.CustomPreviewComponent(value)).element; |
1084 result.classList.add("object-properties-section-custom-section"); | 1084 result.classList.add("object-properties-section-custom-section"); |
1085 return result | 1085 return result; |
1086 } | 1086 } |
1087 return WebInspector.ObjectPropertiesSection.createValueElement(value, wasThr
own, parentElement, linkifier); | 1087 return WebInspector.ObjectPropertiesSection.createValueElement(value, wasThr
own, parentElement, linkifier); |
1088 } | 1088 }; |
1089 | 1089 |
1090 /** | 1090 /** |
1091 * @param {!WebInspector.RemoteObject} value | 1091 * @param {!WebInspector.RemoteObject} value |
1092 * @param {boolean} wasThrown | 1092 * @param {boolean} wasThrown |
1093 * @param {!Element=} parentElement | 1093 * @param {!Element=} parentElement |
1094 * @param {!WebInspector.Linkifier=} linkifier | 1094 * @param {!WebInspector.Linkifier=} linkifier |
1095 * @return {!Element} | 1095 * @return {!Element} |
1096 */ | 1096 */ |
1097 WebInspector.ObjectPropertiesSection.createValueElement = function(value, wasThr
own, parentElement, linkifier) | 1097 WebInspector.ObjectPropertiesSection.createValueElement = function(value, wasThr
own, parentElement, linkifier) |
1098 { | 1098 { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1168 /** | 1168 /** |
1169 * @param {!Event} event | 1169 * @param {!Event} event |
1170 */ | 1170 */ |
1171 function mouseClick(event) | 1171 function mouseClick(event) |
1172 { | 1172 { |
1173 WebInspector.Revealer.reveal(value); | 1173 WebInspector.Revealer.reveal(value); |
1174 event.consume(true); | 1174 event.consume(true); |
1175 } | 1175 } |
1176 | 1176 |
1177 return valueElement; | 1177 return valueElement; |
1178 } | 1178 }; |
1179 | 1179 |
1180 /** | 1180 /** |
1181 * @param {!WebInspector.RemoteObject} object | 1181 * @param {!WebInspector.RemoteObject} object |
1182 * @return {boolean} | 1182 * @return {boolean} |
1183 */ | 1183 */ |
1184 WebInspector.ObjectPropertiesSection._needsAlternateTitle = function(object) | 1184 WebInspector.ObjectPropertiesSection._needsAlternateTitle = function(object) |
1185 { | 1185 { |
1186 return object && object.hasChildren && !object.customPreview() && object.sub
type !== "node" && object.type !== "function" && (object.type !== "object" || ob
ject.preview); | 1186 return object && object.hasChildren && !object.customPreview() && object.sub
type !== "node" && object.type !== "function" && (object.type !== "object" || ob
ject.preview); |
1187 } | 1187 }; |
1188 | 1188 |
1189 /** | 1189 /** |
1190 * @param {!WebInspector.RemoteObject} func | 1190 * @param {!WebInspector.RemoteObject} func |
1191 * @param {!Element} element | 1191 * @param {!Element} element |
1192 * @param {boolean} linkify | 1192 * @param {boolean} linkify |
1193 * @param {boolean=} includePreview | 1193 * @param {boolean=} includePreview |
1194 */ | 1194 */ |
1195 WebInspector.ObjectPropertiesSection.formatObjectAsFunction = function(func, ele
ment, linkify, includePreview) | 1195 WebInspector.ObjectPropertiesSection.formatObjectAsFunction = function(func, ele
ment, linkify, includePreview) |
1196 { | 1196 { |
1197 func.debuggerModel().functionDetailsPromise(func).then(didGetDetails); | 1197 func.debuggerModel().functionDetailsPromise(func).then(didGetDetails); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1260 if (doneProcessing) | 1260 if (doneProcessing) |
1261 return; | 1261 return; |
1262 if (token === "(") { | 1262 if (token === "(") { |
1263 params = []; | 1263 params = []; |
1264 return; | 1264 return; |
1265 } | 1265 } |
1266 if (params && tokenType === "js-def") | 1266 if (params && tokenType === "js-def") |
1267 params.push(token); | 1267 params.push(token); |
1268 } | 1268 } |
1269 } | 1269 } |
1270 } | 1270 }; |
1271 | 1271 |
1272 /** | 1272 /** |
1273 * @constructor | 1273 * @constructor |
1274 */ | 1274 */ |
1275 WebInspector.ObjectPropertiesSectionExpandController = function() | 1275 WebInspector.ObjectPropertiesSectionExpandController = function() |
1276 { | 1276 { |
1277 /** @type {!Set.<string>} */ | 1277 /** @type {!Set.<string>} */ |
1278 this._expandedProperties = new Set(); | 1278 this._expandedProperties = new Set(); |
1279 } | 1279 }; |
1280 | 1280 |
1281 WebInspector.ObjectPropertiesSectionExpandController._cachedPathSymbol = Symbol(
"cachedPath"); | 1281 WebInspector.ObjectPropertiesSectionExpandController._cachedPathSymbol = Symbol(
"cachedPath"); |
1282 WebInspector.ObjectPropertiesSectionExpandController._treeOutlineId = Symbol("tr
eeOutlineId"); | 1282 WebInspector.ObjectPropertiesSectionExpandController._treeOutlineId = Symbol("tr
eeOutlineId"); |
1283 | 1283 |
1284 WebInspector.ObjectPropertiesSectionExpandController.prototype = { | 1284 WebInspector.ObjectPropertiesSectionExpandController.prototype = { |
1285 /** | 1285 /** |
1286 * @param {string} id | 1286 * @param {string} id |
1287 * @param {!WebInspector.ObjectPropertiesSection} section | 1287 * @param {!WebInspector.ObjectPropertiesSection} section |
1288 */ | 1288 */ |
1289 watchSection: function(id, section) | 1289 watchSection: function(id, section) |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1359 currentName = typeof current.title === "string" ? current.title
: current.title.textContent; | 1359 currentName = typeof current.title === "string" ? current.title
: current.title.textContent; |
1360 | 1360 |
1361 result = currentName + (result ? "." + result : ""); | 1361 result = currentName + (result ? "." + result : ""); |
1362 current = current.parent; | 1362 current = current.parent; |
1363 } | 1363 } |
1364 var treeOutlineId = treeElement.treeOutline[WebInspector.ObjectPropertie
sSectionExpandController._treeOutlineId]; | 1364 var treeOutlineId = treeElement.treeOutline[WebInspector.ObjectPropertie
sSectionExpandController._treeOutlineId]; |
1365 result = treeOutlineId + (result ? ":" + result : ""); | 1365 result = treeOutlineId + (result ? ":" + result : ""); |
1366 treeElement[WebInspector.ObjectPropertiesSectionExpandController._cached
PathSymbol] = result; | 1366 treeElement[WebInspector.ObjectPropertiesSectionExpandController._cached
PathSymbol] = result; |
1367 return result; | 1367 return result; |
1368 } | 1368 } |
1369 } | 1369 }; |
OLD | NEW |