<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[180356] trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/180356">180356</a></dd>
<dt>Author</dt> <dd>joepeck@webkit.org</dd>
<dt>Date</dt> <dd>2015-02-19 12:25:04 -0800 (Thu, 19 Feb 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>Web Inspector: Create Separate Model and View Objects for RemoteObjects / ObjectPreview / PropertyDescriptor
https://bugs.webkit.org/show_bug.cgi?id=141696
Reviewed by Timothy Hatcher.
Source/WebInspectorUI:
* UserInterface/Main.html:
Add new files.
* UserInterface/Models/CollectionEntry.js: Added.
(WebInspector.CollectionEntry):
(WebInspector.CollectionEntry.fromPayload):
(WebInspector.CollectionEntry.prototype.get key):
(WebInspector.CollectionEntry.prototype.get value):
* UserInterface/Models/CollectionEntryPreview.js: Added.
(WebInspector.CollectionEntryPreview):
(WebInspector.CollectionEntryPreview.fromPayload):
(WebInspector.CollectionEntryPreview.prototype.get keyPreview):
(WebInspector.CollectionEntryPreview.prototype.get valuePreview):
* UserInterface/Models/ObjectPreview.js: Added.
(WebInspector.ObjectPreview):
(WebInspector.ObjectPreview.fromPayload):
(WebInspector.ObjectPreview.prototype.get type):
(WebInspector.ObjectPreview.prototype.get subtype):
(WebInspector.ObjectPreview.prototype.get description):
(WebInspector.ObjectPreview.prototype.get lossless):
(WebInspector.ObjectPreview.prototype.get overflow):
(WebInspector.ObjectPreview.prototype.get properties):
(WebInspector.ObjectPreview.prototype.get entries):
* UserInterface/Models/PropertyPreview.js: Added.
(WebInspector.PropertyPreview):
(WebInspector.PropertyPreview.fromPayload):
(WebInspector.PropertyPreview.prototype.get name):
(WebInspector.PropertyPreview.prototype.get type):
(WebInspector.PropertyPreview.prototype.get subtype):
(WebInspector.PropertyPreview.prototype.get value):
(WebInspector.PropertyPreview.prototype.get valuePreview):
* UserInterface/Models/PropertyDescriptor.js: Added.
(WebInspector.PropertyDescriptor.fromPayload):
(WebInspector.PropertyDescriptor.prototype.get name):
(WebInspector.PropertyDescriptor.prototype.get value):
(WebInspector.PropertyDescriptor.prototype.get writable):
(WebInspector.PropertyDescriptor.prototype.get configurable):
(WebInspector.PropertyDescriptor.prototype.get enumerable):
(WebInspector.PropertyDescriptor.prototype.get isOwnProperty):
(WebInspector.PropertyDescriptor.prototype.get wasThrown):
(WebInspector.PropertyDescriptor.prototype.get isInternalProperty):
(WebInspector.PropertyDescriptor.prototype.hasValue):
(WebInspector.PropertyDescriptor.prototype.hasGetter):
(WebInspector.PropertyDescriptor.prototype.hasSetter):
New Model objects for different Protocol types.
The only customizations right now are compatibility modifications
and PropertyDescriptor's "hasValue", "hasGetter", and "hasSetter"
functions to return reliable checks based on the descriptors contents.
* UserInterface/Protocol/RemoteObject.js:
(WebInspector.RemoteObject):
(WebInspector.RemoteObject.fromPayload):
(WebInspector.RemoteObject.resolveNode):
(WebInspector.RemoteObject.prototype.get value):
(WebInspector.RemoteObject.prototype._isSymbol):
(WebInspector.RemoteObject.prototype.isCollectionType):
(WebInspector.RemoteObject.prototype.isWeakCollection):
(WebInspector.RemoteObject.prototype.getCollectionEntries):
(WebInspector.RemoteObject.prototype.arrayLength):
Clean up the existing code to enforce more checks and use our
style of member variables and public accessors.
(WebInspector.RemoteObject.prototype.getOwnPropertyDescriptors):
(WebInspector.RemoteObject.prototype.getOwnAndGetterPropertyDescriptors):
(WebInspector.RemoteObject.prototype.getAllPropertyDescriptors):
(WebInspector.RemoteObject.prototype.callback):
Provide a new way of getting properties that returns Model objects
instead of raw protocol types.
* UserInterface/Views/ConsoleMessageImpl.js:
(WebInspector.ConsoleMessageImpl.prototype._format):
(WebInspector.ConsoleMessageImpl.prototype._formatParameter):
(WebInspector.ConsoleMessageImpl.prototype._propertyPreviewElement):
(WebInspector.ConsoleMessageImpl.prototype._formatParameterAsNode):
(WebInspector.ConsoleMessageImpl.prototype._formatParameterAsTable):
(WebInspector.ConsoleMessageImpl.prototype._formatAsArrayEntry):
Always include a preview when possible. Now, when forced to be an object,
force expansion even if the preview is lossless.
(WebInspector.ConsoleMessageImpl.prototype._formatParameterAsObject):
Use an ObjectTreeView instead of ObjectPropertiesSection.
(WebInspector.ConsoleMessageImpl.prototype._appendPreview): Deleted.
(WebInspector.ConsoleMessageImpl.prototype._appendEntryPreviews): Deleted.
(WebInspector.ConsoleMessageImpl.prototype._appendPropertyPreviews): Deleted.
(WebInspector.ConsoleMessageImpl.prototype._appendValuePreview): Deleted.
This code is moved into ObjectPreviewView.
* UserInterface/Views/ObjectPropertiesSection.js:
(WebInspector.CollectionEntriesMainTreeElement.prototype.onexpand.callback):
(WebInspector.CollectionEntriesMainTreeElement.prototype.onexpand):
These types are now converted to Model types in Model objects, so do not do it here.
* UserInterface/Views/ObjectPreviewView.css: Added.
(.object-preview):
(.object-preview.lossless):
(.object-preview .name):
* UserInterface/Views/ObjectPreviewView.js: Added.
(WebInspector.ObjectPreviewView):
(WebInspector.ObjectPreviewView.prototype.get preview):
(WebInspector.ObjectPreviewView.prototype.get element):
(WebInspector.ObjectPreviewView.prototype.get mode):
(WebInspector.ObjectPreviewView.prototype.get lossless):
(WebInspector.ObjectPreviewView.prototype._numberOfPropertiesToShowInMode):
(WebInspector.ObjectPreviewView.prototype._appendPreview):
(WebInspector.ObjectPreviewView.prototype._appendEntryPreviews):
(WebInspector.ObjectPreviewView.prototype._appendPropertyPreviews):
(WebInspector.ObjectPreviewView.prototype._appendValuePreview):
(WebInspector.ObjectPreviewView.prototype._formattedObjectElementForPreview):
An ObjectPreviewView can create a full/brief view given a ObjectPreview.
The view will contain formatted values everywhere possible.
* UserInterface/Views/ObjectTreePropertyTreeElement.js: Added.
(WebInspector.ObjectTreePropertyTreeElement):
(WebInspector.ObjectTreePropertyTreeElement.prototype.get property):
(WebInspector.ObjectTreePropertyTreeElement.prototype.onpopulate):
(WebInspector.ObjectTreePropertyTreeElement.prototype.onattach):
(WebInspector.ObjectTreePropertyTreeElement.prototype._updateTitle):
(WebInspector.ObjectTreePropertyTreeElement.prototype._updateTitlePropertyStyle):
(WebInspector.ObjectTreePropertyTreeElement.prototype._updateTitleAPIStyle):
(WebInspector.ObjectTreePropertyTreeElement.prototype._descriptionString):
(WebInspector.ObjectTreePropertyTreeElement.prototype._functionParameterString):
(WebInspector.ObjectTreePropertyTreeElement.prototype.mode):
(WebInspector.ObjectTreePropertyTreeElement.prototype):
* UserInterface/Views/ObjectTreeView.js: Added.
(WebInspector.ObjectTreeView):
(WebInspector.ObjectTreeView.classNameForObject):
(WebInspector.ObjectTreeView.ComparePropertyDescriptors):
(WebInspector.ObjectTreeView.prototype.get object):
(WebInspector.ObjectTreeView.prototype.get element):
(WebInspector.ObjectTreeView.prototype.get expanded):
(WebInspector.ObjectTreeView.prototype.expand):
(WebInspector.ObjectTreeView.prototype.collapse):
(WebInspector.ObjectTreeView.prototype.update):
(WebInspector.ObjectTreeView.prototype._updateProperties):
(WebInspector.ObjectTreeView.prototype._handlePreviewOrTitleElementClick):
Re-implementation of ObjectPropertiesSection for our Model objects
without "Section" semantics / dependencies. An ObjectTree will creates
an expandable tree for a RemoteObject. The top level clickable item
will be an ObjectPreview if possible, otherwise just a title element.
* UserInterface/Views/ObjectTreeView.css: Added.
(.object-tree):
(.object-tree > .title):
(.object-tree > :matches(.title, .object-preview)::before):
(.object-tree.expanded > :matches(.title, .object-preview)::before):
(.object-tree.lossless-preview > :matches(.title, .object-preview)::before):
(.object-tree-outline):
(.object-tree.expanded > .object-tree-outline):
(.object-tree-outline li):
(.object-tree-outline li.parent):
(.object-tree-outline li.parent::before):
(.object-tree-outline li.parent.expanded::before):
(.object-tree-outline ol):
(.object-tree-outline ol.expanded):
(.object-tree-outline li .empty-message):
(.object-tree-property .name):
(.object-tree-property .name.not-enumerable):
(.object-tree-property .value.error):
(.formatted-object, .formatted-node, .formatted-error, .formatted-map, .formatted-set, .formatted-weakmap):
(.formatted-number):
(.formatted-string, .formatted-regexp):
(.formatted-string):
(.formatted-regexp):
(.formatted-symbol):
(.formatted-null, .formatted-undefined):
(.console-group-messages .object-tree:not(.lossless-preview)):
(.console-group-messages .object-tree:not(.lossless-preview) > :matches(.title, .object-preview)):
(.console-group-messages .object-tree:not(.lossless-preview) > :matches(.title, .object-preview)::before):
(.console-group-messages :matches(.console-formatted-object, .console-formatted-node, .console-formatted-error, .console-formatted-map, .console-formatted-set, .console-formatted-weakmap) .object-tree):
(.console-group-messages :matches(.console-formatted-object, .console-formatted-node, .console-formatted-error, .console-formatted-map, .console-formatted-set, .console-formatted-weakmap) .object-tree-outline):
All styles for ObjectTree / ObjectPreview. Independent from
other styles in the inspector. Most of this is a copy of
the styles applied to ObjectPropertiesSection, renamed.
* UserInterface/Views/ObjectTreeCollectionTreeElement.js: Added.
(WebInspector.ObjectTreeCollectionTreeElement):
(WebInspector.ObjectTreeCollectionTreeElement.propertyDescriptorForEntry):
(WebInspector.ObjectTreeCollectionTreeElement.prototype.get remoteObject):
(WebInspector.ObjectTreeCollectionTreeElement.prototype.onexpand.callback):
(WebInspector.ObjectTreeCollectionTreeElement.prototype.onexpand):
(WebInspector.ObjectTreeCollectionTreeElement.prototype.oncollapse):
(WebInspector.ObjectTreeCollectionTreeElement.prototype.ondetach):
(WebInspector.ObjectTreeCollectionTreeElement.prototype._trackWeakEntries):
(WebInspector.ObjectTreeCollectionTreeElement.prototype._untrackWeakEntries):
(WebInspector.ObjectTreeCollectionEntryTreeElement):
(WebInspector.ObjectTreeCollectionEntryTreeElement.prototype.onpopulate):
(WebInspector.ObjectTreeCollectionEntryTreeElement.prototype.onattach):
(WebInspector.ObjectTreeEmptyCollectionTreeElement):
Essentially a copy of ObjectPropertiesSection Collection handling using
the ObjectTree class names.
* UserInterface/Views/TreeOutlineDataGridSynchronizer.js:
Fix prototype typo.
LayoutTests:
* inspector/model/remote-object-expected.txt:
* inspector/model/remote-object-get-properties-expected.txt:
* inspector/model/remote-object-get-properties.html:
* inspector/model/remote-object-weak-collection-expected.txt:
* inspector/model/remote-object-weak-collection.html:
Update tests and results to use our Model objects and not
raw protocol types.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsinspectormodelremoteobjectexpectedtxt">trunk/LayoutTests/inspector/model/remote-object-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectormodelremoteobjectgetpropertiesexpectedtxt">trunk/LayoutTests/inspector/model/remote-object-get-properties-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectormodelremoteobjectgetpropertieshtml">trunk/LayoutTests/inspector/model/remote-object-get-properties.html</a></li>
<li><a href="#trunkLayoutTestsinspectormodelremoteobjectweakcollectionexpectedtxt">trunk/LayoutTests/inspector/model/remote-object-weak-collection-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectormodelremoteobjectweakcollectionhtml">trunk/LayoutTests/inspector/model/remote-object-weak-collection.html</a></li>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceMainhtml">trunk/Source/WebInspectorUI/UserInterface/Main.html</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolRemoteObjectjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceTesthtml">trunk/Source/WebInspectorUI/UserInterface/Test.html</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsConsoleMessageImpljs">trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectPropertiesSectionjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPropertiesSection.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsTreeOutlineDataGridSynchronizerjs">trunk/Source/WebInspectorUI/UserInterface/Views/TreeOutlineDataGridSynchronizer.js</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsCollectionEntryjs">trunk/Source/WebInspectorUI/UserInterface/Models/CollectionEntry.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsCollectionEntryPreviewjs">trunk/Source/WebInspectorUI/UserInterface/Models/CollectionEntryPreview.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsObjectPreviewjs">trunk/Source/WebInspectorUI/UserInterface/Models/ObjectPreview.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsPropertyDescriptorjs">trunk/Source/WebInspectorUI/UserInterface/Models/PropertyDescriptor.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsPropertyPreviewjs">trunk/Source/WebInspectorUI/UserInterface/Models/PropertyPreview.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectPreviewViewcss">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.css</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectPreviewViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeCollectionTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeCollectionTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectTreePropertyTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreePropertyTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeViewcss">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.css</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/LayoutTests/ChangeLog        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-02-19 Joseph Pecoraro <pecoraro@apple.com>
+
+ Web Inspector: Create Separate Model and View Objects for RemoteObjects / ObjectPreview / PropertyDescriptor
+ https://bugs.webkit.org/show_bug.cgi?id=141696
+
+ Reviewed by Timothy Hatcher.
+
+ * inspector/model/remote-object-expected.txt:
+ * inspector/model/remote-object-get-properties-expected.txt:
+ * inspector/model/remote-object-get-properties.html:
+ * inspector/model/remote-object-weak-collection-expected.txt:
+ * inspector/model/remote-object-weak-collection.html:
+ Update tests and results to use our Model objects and not
+ raw protocol types.
+
</ins><span class="cx"> 2015-02-19 Brent Fulgham <bfulgham@apple.com>
</span><span class="cx">
</span><span class="cx"> [Win] Disable media tests due to bot failures.
</span></span></pre></div>
<a id="trunkLayoutTestsinspectormodelremoteobjectexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/model/remote-object-expected.txt (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/model/remote-object-expected.txt        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/LayoutTests/inspector/model/remote-object-expected.txt        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -5,7 +5,7 @@
</span><span class="cx"> "_type": "object",
</span><span class="cx"> "_subtype": "null",
</span><span class="cx"> "_description": "null",
</span><del>- "value": null
</del><ins>+ "_value": null
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "boolean",
</span><span class="cx"> "_description": "true",
</span><del>- "value": true
</del><ins>+ "_value": true
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "boolean",
</span><span class="cx"> "_description": "false",
</span><del>- "value": false
</del><ins>+ "_value": false
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "0",
</span><del>- "value": 0
</del><ins>+ "_value": 0
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "0",
</span><del>- "value": 0
</del><ins>+ "_value": 0
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "1",
</span><del>- "value": 1
</del><ins>+ "_value": 1
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "-1",
</span><del>- "value": -1
</del><ins>+ "_value": -1
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "1.234",
</span><del>- "value": 1.234
</del><ins>+ "_value": 1.234
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "-1.234",
</span><del>- "value": -1.234
</del><ins>+ "_value": -1.234
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -100,7 +100,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "1000",
</span><del>- "value": 1000
</del><ins>+ "_value": 1000
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -108,7 +108,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "1.7976931348623157e+308",
</span><del>- "value": 1.7976931348623157e+308
</del><ins>+ "_value": 1.7976931348623157e+308
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -116,7 +116,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "5e-324",
</span><del>- "value": 5e-324
</del><ins>+ "_value": 5e-324
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "NaN",
</span><del>- "value": null
</del><ins>+ "_value": null
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "number",
</span><span class="cx"> "_description": "Infinity",
</span><del>- "value": null
</del><ins>+ "_value": null
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "string",
</span><span class="cx"> "_description": "",
</span><del>- "value": ""
</del><ins>+ "_value": ""
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -148,7 +148,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "string",
</span><span class="cx"> "_description": "\"",
</span><del>- "value": "\""
</del><ins>+ "_value": "\""
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -156,7 +156,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "string",
</span><span class="cx"> "_description": "'",
</span><del>- "value": "'"
</del><ins>+ "_value": "'"
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -164,7 +164,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "string",
</span><span class="cx"> "_description": "string",
</span><del>- "value": "string"
</del><ins>+ "_value": "string"
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -172,7 +172,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "string",
</span><span class="cx"> "_description": "Unicode…",
</span><del>- "value": "Unicode…"
</del><ins>+ "_value": "Unicode…"
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -180,7 +180,7 @@
</span><span class="cx"> {
</span><span class="cx"> "_type": "string",
</span><span class="cx"> "_description": "I wish I had something to put here.",
</span><del>- "value": "I wish I had something to put here."
</del><ins>+ "_value": "I wish I had something to put here."
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> -----------------------------------------------------
</span><span class="lines">@@ -255,38 +255,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "/ /",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "/ /",
- "lossless": true,
- "subtype": "regexp",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "regexp",
+ "_description": "/ /",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "lastIndex",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "lastIndex",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "global",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "global",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "ignoreCase",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "ignoreCase",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "multiline",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "multiline",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "source",
- "type": "string",
- "value": " "
</del><ins>+ "_name": "source",
+ "_type": "string",
+ "_value": " "
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -298,38 +299,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "/(?:)/",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "/(?:)/",
- "lossless": true,
- "subtype": "regexp",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "regexp",
+ "_description": "/(?:)/",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "lastIndex",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "lastIndex",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "global",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "global",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "ignoreCase",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "ignoreCase",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "multiline",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "multiline",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "source",
- "type": "string",
- "value": "(?:)"
</del><ins>+ "_name": "source",
+ "_type": "string",
+ "_value": "(?:)"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -341,38 +343,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "/^r(e)g[e]{1,}x+/",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "/^r(e)g[e]{1,}x+/",
- "lossless": true,
- "subtype": "regexp",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "regexp",
+ "_description": "/^r(e)g[e]{1,}x+/",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "lastIndex",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "lastIndex",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "global",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "global",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "ignoreCase",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "ignoreCase",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "multiline",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "multiline",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "source",
- "type": "string",
- "value": "^r(e)g[e]{1,}x+"
</del><ins>+ "_name": "source",
+ "_type": "string",
+ "_value": "^r(e)g[e]{1,}x+"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -384,38 +387,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "/^r(e)g[e]{1,}x+/gi",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "/^r(e)g[e]{1,}x+/gi",
- "lossless": true,
- "subtype": "regexp",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "regexp",
+ "_description": "/^r(e)g[e]{1,}x+/gi",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "lastIndex",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "lastIndex",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "global",
- "type": "boolean",
- "value": "true"
</del><ins>+ "_name": "global",
+ "_type": "boolean",
+ "_value": "true"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "ignoreCase",
- "type": "boolean",
- "value": "true"
</del><ins>+ "_name": "ignoreCase",
+ "_type": "boolean",
+ "_value": "true"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "multiline",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "multiline",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "source",
- "type": "string",
- "value": "^r(e)g[e]{1,}x+"
</del><ins>+ "_name": "source",
+ "_type": "string",
+ "_value": "^r(e)g[e]{1,}x+"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -427,38 +431,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "/(?:)/",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "/(?:)/",
- "lossless": true,
- "subtype": "regexp",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "regexp",
+ "_description": "/(?:)/",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "lastIndex",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "lastIndex",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "global",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "global",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "ignoreCase",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "ignoreCase",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "multiline",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "multiline",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "source",
- "type": "string",
- "value": "(?:)"
</del><ins>+ "_name": "source",
+ "_type": "string",
+ "_value": "(?:)"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -470,38 +475,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "/test/i",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "/test/i",
- "lossless": true,
- "subtype": "regexp",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "regexp",
+ "_description": "/test/i",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "lastIndex",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "lastIndex",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "global",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "global",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "ignoreCase",
- "type": "boolean",
- "value": "true"
</del><ins>+ "_name": "ignoreCase",
+ "_type": "boolean",
+ "_value": "true"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "multiline",
- "type": "boolean",
- "value": "false"
</del><ins>+ "_name": "multiline",
+ "_type": "boolean",
+ "_value": "false"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "source",
- "type": "string",
- "value": "test"
</del><ins>+ "_name": "source",
+ "_type": "string",
+ "_value": "test"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -513,12 +519,13 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Array[0]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Array[0]",
- "lossless": true,
- "subtype": "array",
- "overflow": false,
- "properties": []
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[0]",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -530,23 +537,24 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Array[2]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Array[2]",
- "lossless": true,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[2]",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "0",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "1",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -558,31 +566,32 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Array[3]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Array[3]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[3]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "object",
- "subtype": "array",
- "value": "Array[1]"
</del><ins>+ "_name": "0",
+ "_type": "object",
+ "_subtype": "array",
+ "_value": "Array[1]"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "object",
- "subtype": "array",
- "value": "Array[1]"
</del><ins>+ "_name": "1",
+ "_type": "object",
+ "_subtype": "array",
+ "_value": "Array[1]"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "object",
- "subtype": "array",
- "value": "Array[1]"
</del><ins>+ "_name": "2",
+ "_type": "object",
+ "_subtype": "array",
+ "_value": "Array[1]"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -594,39 +603,40 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Array[5]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Array[5]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[5]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "boolean",
- "value": "true"
</del><ins>+ "_name": "0",
+ "_type": "boolean",
+ "_value": "true"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "1",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "number",
- "value": "1.234"
</del><ins>+ "_name": "2",
+ "_type": "number",
+ "_value": "1.234"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "3",
- "type": "string",
- "value": "string"
</del><ins>+ "_name": "3",
+ "_type": "string",
+ "_value": "string"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "4",
- "type": "object",
- "subtype": "regexp",
- "value": "/regex/"
</del><ins>+ "_name": "4",
+ "_type": "object",
+ "_subtype": "regexp",
+ "_value": "/regex/"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -638,28 +648,29 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Array[3]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Array[3]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[3]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "object",
- "value": "Object"
</del><ins>+ "_name": "0",
+ "_type": "object",
+ "_value": "Object"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "object",
- "value": "Object"
</del><ins>+ "_name": "1",
+ "_type": "object",
+ "_value": "Object"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "object",
- "value": "Object"
</del><ins>+ "_name": "2",
+ "_type": "object",
+ "_value": "Object"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -671,19 +682,20 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Array[1]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Array[1]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[1]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "object",
- "subtype": "array",
- "value": "Array[3]"
</del><ins>+ "_name": "0",
+ "_type": "object",
+ "_subtype": "array",
+ "_value": "Array[3]"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -695,12 +707,13 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Array[100]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Array[100]",
- "lossless": true,
- "subtype": "array",
- "overflow": false,
- "properties": []
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[100]",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -712,513 +725,514 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Array[100]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Array[100]",
- "lossless": true,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[100]",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "0",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "1",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "2",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "3",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "3",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "4",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "4",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "5",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "5",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "6",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "6",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "7",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "7",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "8",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "8",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "9",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "9",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "10",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "10",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "11",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "11",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "12",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "12",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "13",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "13",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "14",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "14",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "15",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "15",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "16",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "16",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "17",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "17",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "18",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "18",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "19",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "19",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "20",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "20",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "21",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "21",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "22",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "22",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "23",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "23",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "24",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "24",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "25",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "25",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "26",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "26",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "27",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "27",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "28",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "28",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "29",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "29",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "30",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "30",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "31",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "31",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "32",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "32",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "33",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "33",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "34",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "34",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "35",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "35",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "36",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "36",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "37",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "37",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "38",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "38",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "39",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "39",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "40",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "40",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "41",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "41",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "42",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "42",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "43",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "43",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "44",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "44",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "45",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "45",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "46",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "46",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "47",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "47",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "48",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "48",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "49",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "49",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "50",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "50",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "51",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "51",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "52",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "52",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "53",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "53",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "54",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "54",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "55",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "55",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "56",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "56",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "57",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "57",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "58",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "58",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "59",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "59",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "60",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "60",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "61",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "61",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "62",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "62",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "63",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "63",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "64",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "64",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "65",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "65",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "66",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "66",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "67",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "67",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "68",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "68",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "69",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "69",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "70",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "70",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "71",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "71",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "72",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "72",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "73",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "73",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "74",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "74",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "75",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "75",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "76",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "76",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "77",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "77",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "78",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "78",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "79",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "79",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "80",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "80",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "81",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "81",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "82",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "82",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "83",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "83",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "84",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "84",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "85",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "85",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "86",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "86",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "87",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "87",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "88",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "88",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "89",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "89",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "90",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "90",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "91",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "91",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "92",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "92",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "93",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "93",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "94",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "94",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "95",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "95",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "96",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "96",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "97",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "97",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "98",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "98",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "99",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "99",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1230,18 +1244,19 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Array[100]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Array[100]",
- "lossless": true,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[100]",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "10",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "10",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1253,29 +1268,30 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Arguments[3]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Arguments[3]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Arguments[3]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "0",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "string",
- "value": "2"
</del><ins>+ "_name": "1",
+ "_type": "string",
+ "_value": "2"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "object",
- "subtype": "regexp",
- "value": "/3/"
</del><ins>+ "_name": "2",
+ "_type": "object",
+ "_subtype": "regexp",
+ "_value": "/3/"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1287,48 +1303,49 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Int32Array[4]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Int32Array[4]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Int32Array[4]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "0",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "1",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "2",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "3",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "3",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "byteOffset",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "byteOffset",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "byteLength",
- "type": "number",
- "value": "16"
</del><ins>+ "_name": "byteLength",
+ "_type": "number",
+ "_value": "16"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "buffer",
- "type": "object",
- "value": "ArrayBuffer"
</del><ins>+ "_name": "buffer",
+ "_type": "object",
+ "_value": "ArrayBuffer"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1340,48 +1357,49 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Int32Array[4]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Int32Array[4]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Int32Array[4]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "0",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "1",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "2",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "3",
- "type": "number",
- "value": "3"
</del><ins>+ "_name": "3",
+ "_type": "number",
+ "_value": "3"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "byteOffset",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "byteOffset",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "byteLength",
- "type": "number",
- "value": "16"
</del><ins>+ "_name": "byteLength",
+ "_type": "number",
+ "_value": "16"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "buffer",
- "type": "object",
- "value": "ArrayBuffer"
</del><ins>+ "_name": "buffer",
+ "_type": "object",
+ "_value": "ArrayBuffer"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1392,10 +1410,12 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Object",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": []
</del><ins>+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1406,16 +1426,18 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Object",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "a",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "a",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1426,32 +1448,34 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Object",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Object",
- "lossless": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Object",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "a",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "a",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "b",
- "type": "string",
- "value": "string"
</del><ins>+ "_name": "b",
+ "_type": "string",
+ "_value": "string"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "c",
- "type": "object",
- "subtype": "regexp",
- "value": "/regex/"
</del><ins>+ "_name": "c",
+ "_type": "object",
+ "_subtype": "regexp",
+ "_value": "/regex/"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "d",
- "type": "symbol",
- "value": "Symbol(sym)"
</del><ins>+ "_name": "d",
+ "_type": "symbol",
+ "_value": "Symbol(sym)"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1462,29 +1486,31 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Object",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Object",
- "lossless": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Object",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "a",
- "type": "function",
- "value": ""
</del><ins>+ "_name": "a",
+ "_type": "function",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "b",
- "type": "function",
- "value": ""
</del><ins>+ "_name": "b",
+ "_type": "function",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "getter",
- "type": "accessor"
</del><ins>+ "_name": "getter",
+ "_type": "accessor"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "setter",
- "type": "accessor"
</del><ins>+ "_name": "setter",
+ "_type": "accessor"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1495,10 +1521,12 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Foo",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Foo",
- "lossless": true,
- "properties": []
</del><ins>+ "_type": "object",
+ "_description": "Foo",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1509,10 +1537,12 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Foo2",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Foo2",
- "lossless": true,
- "properties": []
</del><ins>+ "_type": "object",
+ "_description": "Foo2",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1523,10 +1553,12 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Foo3",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Foo3",
- "lossless": true,
- "properties": []
</del><ins>+ "_type": "object",
+ "_description": "Foo3",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1537,25 +1569,27 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Bar",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Bar",
- "lossless": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Bar",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "_x",
- "type": "number",
- "value": "5"
</del><ins>+ "_name": "_x",
+ "_type": "number",
+ "_value": "5"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "constructor",
- "type": "function",
- "value": ""
</del><ins>+ "_name": "constructor",
+ "_type": "function",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "x",
- "type": "accessor"
</del><ins>+ "_name": "x",
+ "_type": "accessor"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1566,16 +1600,18 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Bar2",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Bar2",
- "lossless": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Bar2",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "_x",
- "type": "number",
- "value": "5"
</del><ins>+ "_name": "_x",
+ "_type": "number",
+ "_value": "5"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1586,38 +1622,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Event",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Event",
- "lossless": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Event",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "clipboardData",
- "type": "undefined",
- "value": "undefined"
</del><ins>+ "_name": "clipboardData",
+ "_type": "undefined",
+ "_value": "undefined"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "type",
- "type": "string",
- "value": "load"
</del><ins>+ "_name": "type",
+ "_type": "string",
+ "_value": "load"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "target",
- "type": "object",
- "subtype": "node",
- "value": "#document"
</del><ins>+ "_name": "target",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "#document"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "currentTarget",
- "type": "object",
- "value": "Window"
</del><ins>+ "_name": "currentTarget",
+ "_type": "object",
+ "_value": "Window"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "eventPhase",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "eventPhase",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> }
</span><span class="cx"> ],
</span><del>- "overflow": true
</del><ins>+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1628,16 +1665,18 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "ArrayBuffer",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "ArrayBuffer",
- "lossless": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "ArrayBuffer",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "byteLength",
- "type": "number",
- "value": "16"
</del><ins>+ "_name": "byteLength",
+ "_type": "number",
+ "_value": "16"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1648,26 +1687,28 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "DataView",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "DataView",
- "lossless": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "DataView",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "byteOffset",
- "type": "number",
- "value": "0"
</del><ins>+ "_name": "byteOffset",
+ "_type": "number",
+ "_value": "0"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "byteLength",
- "type": "number",
- "value": "16"
</del><ins>+ "_name": "byteLength",
+ "_type": "number",
+ "_value": "16"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "buffer",
- "type": "object",
- "value": "ArrayBuffer"
</del><ins>+ "_name": "buffer",
+ "_type": "object",
+ "_value": "ArrayBuffer"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1679,38 +1720,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "body",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "body",
- "lossless": false,
- "subtype": "node",
- "overflow": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "node",
+ "_description": "body",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "aLink",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "aLink",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "background",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "background",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "bgColor",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "bgColor",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "link",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "link",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "text",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "text",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1722,38 +1764,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "div.foo.bar",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "div.foo.bar",
- "lossless": false,
- "subtype": "node",
- "overflow": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "node",
+ "_description": "div.foo.bar",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "align",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "align",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "title",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "title",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "lang",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "lang",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "translate",
- "type": "boolean",
- "value": "true"
</del><ins>+ "_name": "translate",
+ "_type": "boolean",
+ "_value": "true"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "dir",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "dir",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1765,38 +1808,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "span#foo",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "span#foo",
- "lossless": false,
- "subtype": "node",
- "overflow": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "node",
+ "_description": "span#foo",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "title",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "title",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "lang",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "lang",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "translate",
- "type": "boolean",
- "value": "true"
</del><ins>+ "_name": "translate",
+ "_type": "boolean",
+ "_value": "true"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "dir",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "dir",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "tabIndex",
- "type": "number",
- "value": "-1"
</del><ins>+ "_name": "tabIndex",
+ "_type": "number",
+ "_value": "-1"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1808,38 +1852,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "#text",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "#text",
- "lossless": false,
- "subtype": "node",
- "overflow": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "node",
+ "_description": "#text",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "wholeText",
- "type": "string",
- "value": "text"
</del><ins>+ "_name": "wholeText",
+ "_type": "string",
+ "_value": "text"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "splitText",
- "type": "function",
- "value": ""
</del><ins>+ "_name": "splitText",
+ "_type": "function",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "replaceWholeText",
- "type": "function",
- "value": ""
</del><ins>+ "_name": "replaceWholeText",
+ "_type": "function",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "data",
- "type": "string",
- "value": "text"
</del><ins>+ "_name": "data",
+ "_type": "string",
+ "_value": "text"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "length",
- "type": "number",
- "value": "4"
</del><ins>+ "_name": "length",
+ "_type": "number",
+ "_value": "4"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1851,41 +1896,42 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "HTMLCollection[3]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "HTMLCollection[3]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "HTMLCollection[3]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "object",
- "subtype": "node",
- "value": "meta"
</del><ins>+ "_name": "0",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "meta"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "object",
- "subtype": "node",
- "value": "script"
</del><ins>+ "_name": "1",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "script"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "object",
- "subtype": "node",
- "value": "script"
</del><ins>+ "_name": "2",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "script"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "item",
- "type": "function",
- "value": ""
</del><ins>+ "_name": "item",
+ "_type": "function",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "namedItem",
- "type": "function",
- "value": ""
</del><ins>+ "_name": "namedItem",
+ "_type": "function",
+ "_value": ""
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1897,41 +1943,42 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "NodeList[3]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "NodeList[3]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "NodeList[3]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "object",
- "subtype": "node",
- "value": "p.my-test"
</del><ins>+ "_name": "0",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "p.my-test"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "object",
- "subtype": "node",
- "value": "p.my-test"
</del><ins>+ "_name": "1",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "p.my-test"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "object",
- "subtype": "node",
- "value": "p.my-test"
</del><ins>+ "_name": "2",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "p.my-test"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "constructor",
- "type": "object",
- "value": "NodeListConstructor"
</del><ins>+ "_name": "constructor",
+ "_type": "object",
+ "_value": "NodeListConstructor"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "item",
- "type": "function",
- "value": ""
</del><ins>+ "_name": "item",
+ "_type": "function",
+ "_value": ""
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1943,41 +1990,42 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "NodeList[3]",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "NodeList[3]",
- "lossless": false,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "array",
+ "_description": "NodeList[3]",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "object",
- "subtype": "node",
- "value": "p.my-test"
</del><ins>+ "_name": "0",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "p.my-test"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "object",
- "subtype": "node",
- "value": "p.my-test"
</del><ins>+ "_name": "1",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "p.my-test"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "2",
- "type": "object",
- "subtype": "node",
- "value": "p.my-test"
</del><ins>+ "_name": "2",
+ "_type": "object",
+ "_subtype": "node",
+ "_value": "p.my-test"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "constructor",
- "type": "object",
- "value": "NodeListConstructor"
</del><ins>+ "_name": "constructor",
+ "_type": "object",
+ "_value": "NodeListConstructor"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "item",
- "type": "function",
- "value": ""
</del><ins>+ "_name": "item",
+ "_type": "function",
+ "_value": ""
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1989,33 +2037,34 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "TypeError: undefined is not an object (evaluating '[].x.x')",
- "lossless": true,
- "subtype": "error",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "error",
+ "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "message",
- "type": "string",
- "value": "undefined is not an object (evaluating '[].x.x')"
</del><ins>+ "_name": "message",
+ "_type": "string",
+ "_value": "undefined is not an object (evaluating '[].x.x')"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "line",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "line",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "column",
- "type": "number",
- "value": "25"
</del><ins>+ "_name": "column",
+ "_type": "number",
+ "_value": "25"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "stack",
- "type": "string",
- "value": "eval code\neval@[native code]\n_evaluateOn\n_evaluateAndWrap\nevaluate"
</del><ins>+ "_name": "stack",
+ "_type": "string",
+ "_value": "eval code\neval@[native code]\n_evaluateOn\n_evaluateAndWrap\nevaluate"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2027,33 +2076,34 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "SyntaxError: Unexpected token ')'",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "SyntaxError: Unexpected token ')'",
- "lossless": true,
- "subtype": "error",
- "overflow": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "error",
+ "_description": "SyntaxError: Unexpected token ')'",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "message",
- "type": "string",
- "value": "Unexpected token ')'"
</del><ins>+ "_name": "message",
+ "_type": "string",
+ "_value": "Unexpected token ')'"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "line",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "line",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "column",
- "type": "number",
- "value": "25"
</del><ins>+ "_name": "column",
+ "_type": "number",
+ "_value": "25"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "stack",
- "type": "string",
- "value": "eval@[native code]\neval code\neval@[native code]\n_evaluateOn\n_evaluateAndWrap\nevaluate"
</del><ins>+ "_name": "stack",
+ "_type": "string",
+ "_value": "eval@[native code]\neval code\neval@[native code]\n_evaluateOn\n_evaluateAndWrap\nevaluate"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2065,38 +2115,39 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Error: IndexSizeError: DOM Exception 1",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Error: IndexSizeError: DOM Exception 1",
- "lossless": false,
- "subtype": "error",
- "overflow": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_subtype": "error",
+ "_description": "Error: IndexSizeError: DOM Exception 1",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "code",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "code",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "name",
- "type": "string",
- "value": "IndexSizeError"
</del><ins>+ "_name": "name",
+ "_type": "string",
+ "_value": "IndexSizeError"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "message",
- "type": "string",
- "value": "IndexSizeError: DOM Exception 1"
</del><ins>+ "_name": "message",
+ "_type": "string",
+ "_value": "IndexSizeError: DOM Exception 1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "line",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "line",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "column",
- "type": "number",
- "value": "58"
</del><ins>+ "_name": "column",
+ "_type": "number",
+ "_value": "58"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2107,10 +2158,12 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Object",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": []
</del><ins>+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2121,10 +2174,12 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Object",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": []
</del><ins>+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2136,13 +2191,13 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Map",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Map",
- "lossless": true,
- "subtype": "map",
- "overflow": false,
- "properties": [],
- "entries": []
</del><ins>+ "_type": "object",
+ "_subtype": "map",
+ "_description": "Map",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": []
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2154,35 +2209,47 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Map",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Map",
- "lossless": true,
- "subtype": "map",
- "overflow": false,
- "properties": [],
- "entries": [
</del><ins>+ "_type": "object",
+ "_subtype": "map",
+ "_description": "Map",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": [
</ins><span class="cx"> {
</span><del>- "key": {
- "type": "number",
- "description": "1",
- "lossless": true
</del><ins>+ "_key": {
+ "_type": "number",
+ "_description": "1",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "description": "2",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "2",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "key": {
- "type": "string",
- "description": "key",
- "lossless": true
</del><ins>+ "_key": {
+ "_type": "string",
+ "_description": "key",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "string",
- "description": "value",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "string",
+ "_description": "value",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span><span class="lines">@@ -2197,92 +2264,98 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Map",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Map",
- "lossless": true,
- "subtype": "map",
- "overflow": false,
- "properties": [],
- "entries": [
</del><ins>+ "_type": "object",
+ "_subtype": "map",
+ "_description": "Map",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": [
</ins><span class="cx"> {
</span><del>- "key": {
- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": [
</del><ins>+ "_key": {
+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "a",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "a",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": [
</del><ins>+ "_value": {
+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "b",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "b",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "key": {
- "type": "object",
- "description": "body",
- "lossless": false,
- "subtype": "node",
- "overflow": true,
- "properties": [
</del><ins>+ "_key": {
+ "_type": "object",
+ "_subtype": "node",
+ "_description": "body",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "aLink",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "aLink",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "background",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "background",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "bgColor",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "bgColor",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "link",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "link",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "text",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "text",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "object",
- "description": "Array[2]",
- "lossless": true,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_value": {
+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[2]",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "0",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "1",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span><span class="lines">@@ -2297,71 +2370,101 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Map",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Map",
- "lossless": false,
- "subtype": "map",
- "overflow": true,
- "properties": [],
- "entries": [
</del><ins>+ "_type": "object",
+ "_subtype": "map",
+ "_description": "Map",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [],
+ "_entries": [
</ins><span class="cx"> {
</span><del>- "key": {
- "type": "number",
- "description": "0",
- "lossless": true
</del><ins>+ "_key": {
+ "_type": "number",
+ "_description": "0",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "description": "0",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "0",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "key": {
- "type": "number",
- "description": "1",
- "lossless": true
</del><ins>+ "_key": {
+ "_type": "number",
+ "_description": "1",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "description": "1",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "1",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "key": {
- "type": "number",
- "description": "2",
- "lossless": true
</del><ins>+ "_key": {
+ "_type": "number",
+ "_description": "2",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "description": "2",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "2",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "key": {
- "type": "number",
- "description": "3",
- "lossless": true
</del><ins>+ "_key": {
+ "_type": "number",
+ "_description": "3",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "description": "3",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "3",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "key": {
- "type": "number",
- "description": "4",
- "lossless": true
</del><ins>+ "_key": {
+ "_type": "number",
+ "_description": "4",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "description": "4",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "4",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span><span class="lines">@@ -2376,44 +2479,47 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "WeakMap",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "WeakMap",
- "lossless": true,
- "subtype": "weakmap",
- "overflow": false,
- "properties": [],
- "entries": [
</del><ins>+ "_type": "object",
+ "_subtype": "weakmap",
+ "_description": "WeakMap",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": [
</ins><span class="cx"> {
</span><del>- "key": {
- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": [
</del><ins>+ "_key": {
+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "id",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "id",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> },
</span><del>- "value": {
- "type": "object",
- "description": "Array[2]",
- "lossless": true,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_value": {
+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[2]",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "0",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "1",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span><span class="lines">@@ -2428,13 +2534,13 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Set",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Set",
- "lossless": true,
- "subtype": "set",
- "overflow": false,
- "properties": [],
- "entries": []
</del><ins>+ "_type": "object",
+ "_subtype": "set",
+ "_description": "Set",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": []
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2446,32 +2552,41 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Set",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Set",
- "lossless": true,
- "subtype": "set",
- "overflow": false,
- "properties": [],
- "entries": [
</del><ins>+ "_type": "object",
+ "_subtype": "set",
+ "_description": "Set",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": [
</ins><span class="cx"> {
</span><del>- "value": {
- "type": "number",
- "description": "1",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "1",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "value": {
- "type": "number",
- "description": "2",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "2",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "value": {
- "type": "string",
- "description": "key",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "string",
+ "_description": "key",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span><span class="lines">@@ -2486,82 +2601,86 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Set",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Set",
- "lossless": true,
- "subtype": "set",
- "overflow": false,
- "properties": [],
- "entries": [
</del><ins>+ "_type": "object",
+ "_subtype": "set",
+ "_description": "Set",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [],
+ "_entries": [
</ins><span class="cx"> {
</span><del>- "value": {
- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": [
</del><ins>+ "_value": {
+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "a",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "a",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "value": {
- "type": "object",
- "description": "body",
- "lossless": false,
- "subtype": "node",
- "overflow": true,
- "properties": [
</del><ins>+ "_value": {
+ "_type": "object",
+ "_subtype": "node",
+ "_description": "body",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "aLink",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "aLink",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "background",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "background",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "bgColor",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "bgColor",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "link",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "link",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "text",
- "type": "string",
- "value": ""
</del><ins>+ "_name": "text",
+ "_type": "string",
+ "_value": ""
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "value": {
- "type": "object",
- "description": "Array[2]",
- "lossless": true,
- "subtype": "array",
- "overflow": false,
- "properties": [
</del><ins>+ "_value": {
+ "_type": "object",
+ "_subtype": "array",
+ "_description": "Array[2]",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "0",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "0",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "1",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "1",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span><span class="lines">@@ -2576,46 +2695,61 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Set",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Set",
- "lossless": false,
- "subtype": "set",
- "overflow": true,
- "properties": [],
- "entries": [
</del><ins>+ "_type": "object",
+ "_subtype": "set",
+ "_description": "Set",
+ "_lossless": false,
+ "_overflow": true,
+ "_properties": [],
+ "_entries": [
</ins><span class="cx"> {
</span><del>- "value": {
- "type": "number",
- "description": "0",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "0",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "value": {
- "type": "number",
- "description": "1",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "1",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "value": {
- "type": "number",
- "description": "2",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "2",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "value": {
- "type": "number",
- "description": "3",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "3",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "value": {
- "type": "number",
- "description": "4",
- "lossless": true
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "4",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": null,
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span><span class="lines">@@ -2629,17 +2763,19 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Promise",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Promise",
- "lossless": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Promise",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "status",
- "type": "string",
- "value": "pending",
- "internal": true
</del><ins>+ "_name": "status",
+ "_type": "string",
+ "_value": "pending",
+ "_internal": true
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2650,23 +2786,25 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Promise",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Promise",
- "lossless": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Promise",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "status",
- "type": "string",
- "value": "rejected",
- "internal": true
</del><ins>+ "_name": "status",
+ "_type": "string",
+ "_value": "rejected",
+ "_internal": true
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "result",
- "type": "undefined",
- "value": "undefined",
- "internal": true
</del><ins>+ "_name": "result",
+ "_type": "undefined",
+ "_value": "undefined",
+ "_internal": true
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2677,23 +2815,25 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Promise",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Promise",
- "lossless": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Promise",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "status",
- "type": "string",
- "value": "rejected",
- "internal": true
</del><ins>+ "_name": "status",
+ "_type": "string",
+ "_value": "rejected",
+ "_internal": true
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "result",
- "type": "string",
- "value": "result",
- "internal": true
</del><ins>+ "_name": "result",
+ "_type": "string",
+ "_value": "result",
+ "_internal": true
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2704,23 +2844,25 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Promise",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Promise",
- "lossless": true,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Promise",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "status",
- "type": "string",
- "value": "resolved",
- "internal": true
</del><ins>+ "_name": "status",
+ "_type": "string",
+ "_value": "resolved",
+ "_internal": true
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "result",
- "type": "undefined",
- "value": "undefined",
- "internal": true
</del><ins>+ "_name": "result",
+ "_type": "undefined",
+ "_value": "undefined",
+ "_internal": true
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2731,23 +2873,25 @@
</span><span class="cx"> "_objectId": "<filtered>",
</span><span class="cx"> "_description": "Promise",
</span><span class="cx"> "_preview": {
</span><del>- "type": "object",
- "description": "Promise",
- "lossless": false,
- "properties": [
</del><ins>+ "_type": "object",
+ "_description": "Promise",
+ "_lossless": false,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "status",
- "type": "string",
- "value": "resolved",
- "internal": true
</del><ins>+ "_name": "status",
+ "_type": "string",
+ "_value": "resolved",
+ "_internal": true
</ins><span class="cx"> },
</span><span class="cx"> {
</span><del>- "name": "result",
- "type": "object",
- "value": "Object",
- "internal": true
</del><ins>+ "_name": "result",
+ "_type": "object",
+ "_value": "Object",
+ "_internal": true
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsinspectormodelremoteobjectgetpropertiesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/model/remote-object-get-properties-expected.txt (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/model/remote-object-get-properties-expected.txt        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/LayoutTests/inspector/model/remote-object-get-properties-expected.txt        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -128,15 +128,11 @@
</span><span class="cx"> _bar
</span><span class="cx"> _foo
</span><span class="cx"> constructor
</span><del>- get getterProperty
- set getterProperty
- get foo
- set foo
</del><ins>+ getterProperty
+ foo
</ins><span class="cx"> BAR_CONSTANT
</span><del>- get bar
- set bar
- get setterOnly
- set setterOnly
</del><ins>+ bar
+ setterOnly
</ins><span class="cx"> toString
</span><span class="cx"> toLocaleString
</span><span class="cx"> valueOf
</span><span class="lines">@@ -164,8 +160,7 @@
</span><span class="cx">
</span><span class="cx"> ALL PROPERTIES:
</span><span class="cx"> constructor
</span><del>- get badGetter
- set badGetter
</del><ins>+ badGetter
</ins><span class="cx"> toString
</span><span class="cx"> toLocaleString
</span><span class="cx"> valueOf
</span><span class="lines">@@ -233,10 +228,8 @@
</span><span class="cx"> OWN PROPERTIES:
</span><span class="cx"> name
</span><span class="cx"> length
</span><del>- get arguments
- set arguments
- get caller
- set caller
</del><ins>+ arguments
+ caller
</ins><span class="cx"> __proto__
</span><span class="cx"> targetFunction
</span><span class="cx"> boundThis
</span><span class="lines">@@ -245,10 +238,8 @@
</span><span class="cx"> OWN AND GETTER PROPERTIES:
</span><span class="cx"> name
</span><span class="cx"> length
</span><del>- get arguments
- set arguments
- get caller
- set caller
</del><ins>+ arguments
+ caller
</ins><span class="cx"> __proto__
</span><span class="cx"> targetFunction
</span><span class="cx"> boundThis
</span><span class="lines">@@ -257,10 +248,8 @@
</span><span class="cx"> ALL PROPERTIES:
</span><span class="cx"> name
</span><span class="cx"> length
</span><del>- get arguments
- set arguments
- get caller
- set caller
</del><ins>+ arguments
+ caller
</ins><span class="cx"> toString
</span><span class="cx"> apply
</span><span class="cx"> call
</span></span></pre></div>
<a id="trunkLayoutTestsinspectormodelremoteobjectgetpropertieshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/model/remote-object-get-properties.html (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/model/remote-object-get-properties.html        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/LayoutTests/inspector/model/remote-object-get-properties.html        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -79,26 +79,26 @@
</span><span class="cx"> if (remoteObject.subtype)
</span><span class="cx"> InspectorTest.log("subtype: " + remoteObject.subtype);
</span><span class="cx"> InspectorTest.log("description: " + remoteObject.description);
</span><del>- remoteObject.getOwnProperties(function(properties) {
</del><ins>+ remoteObject.getOwnPropertyDescriptors(function(properties) {
</ins><span class="cx"> InspectorTest.log("\nOWN PROPERTIES:");
</span><span class="cx"> for (var property of properties) {
</span><del>- InspectorTest.assert(property instanceof WebInspector.RemoteObjectProperty);
</del><ins>+ InspectorTest.assert(property instanceof WebInspector.PropertyDescriptor);
</ins><span class="cx"> InspectorTest.log(" " + property.name);
</span><span class="cx"> }
</span><span class="cx"> });
</span><span class="cx">
</span><del>- remoteObject.getOwnAndGetterProperties(function(properties) {
</del><ins>+ remoteObject.getOwnAndGetterPropertyDescriptors(function(properties) {
</ins><span class="cx"> InspectorTest.log("\nOWN AND GETTER PROPERTIES:");
</span><span class="cx"> for (var property of properties) {
</span><del>- InspectorTest.assert(property instanceof WebInspector.RemoteObjectProperty);
</del><ins>+ InspectorTest.assert(property instanceof WebInspector.PropertyDescriptor);
</ins><span class="cx"> InspectorTest.log(" " + property.name);
</span><span class="cx"> }
</span><span class="cx"> });
</span><span class="cx">
</span><del>- remoteObject.getAllProperties(function(properties) {
</del><ins>+ remoteObject.getAllPropertyDescriptors(function(properties) {
</ins><span class="cx"> InspectorTest.log("\nALL PROPERTIES:");
</span><span class="cx"> for (var property of properties) {
</span><del>- InspectorTest.assert(property instanceof WebInspector.RemoteObjectProperty);
</del><ins>+ InspectorTest.assert(property instanceof WebInspector.PropertyDescriptor);
</ins><span class="cx"> InspectorTest.log(" " + property.name);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsinspectormodelremoteobjectweakcollectionexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/model/remote-object-weak-collection-expected.txt (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/model/remote-object-weak-collection-expected.txt        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/LayoutTests/inspector/model/remote-object-weak-collection-expected.txt        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -9,53 +9,59 @@
</span><span class="cx"> ENTRIES:
</span><span class="cx"> [
</span><span class="cx"> {
</span><del>- "key": {
- "type": "object",
- "objectId": "<filtered>",
- "className": "Object",
- "description": "Object",
- "preview": {
- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": [
</del><ins>+ "_key": {
+ "_type": "object",
+ "_objectId": "<filtered>",
+ "_description": "Object",
+ "_hasChildren": true,
+ "_preview": {
+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "id",
- "type": "number",
- "value": "1"
</del><ins>+ "_name": "id",
+ "_type": "number",
+ "_value": "1"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "value": 1,
- "description": "1"
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "1",
+ "_hasChildren": false,
+ "_value": 1
</ins><span class="cx"> }
</span><span class="cx"> },
</span><span class="cx"> {
</span><del>- "key": {
- "type": "object",
- "objectId": "<filtered>",
- "className": "Object",
- "description": "Object",
- "preview": {
- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": [
</del><ins>+ "_key": {
+ "_type": "object",
+ "_objectId": "<filtered>",
+ "_description": "Object",
+ "_hasChildren": true,
+ "_preview": {
+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "id",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "id",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "value": 2,
- "description": "2"
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "2",
+ "_hasChildren": false,
+ "_value": 2
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span><span class="lines">@@ -65,28 +71,31 @@
</span><span class="cx"> ENTRIES:
</span><span class="cx"> [
</span><span class="cx"> {
</span><del>- "key": {
- "type": "object",
- "objectId": "<filtered>",
- "className": "Object",
- "description": "Object",
- "preview": {
- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": [
</del><ins>+ "_key": {
+ "_type": "object",
+ "_objectId": "<filtered>",
+ "_description": "Object",
+ "_hasChildren": true,
+ "_preview": {
+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "id",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "id",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "value": 2,
- "description": "2"
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "2",
+ "_hasChildren": false,
+ "_value": 2
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span><span class="lines">@@ -96,28 +105,31 @@
</span><span class="cx"> ENTRIES:
</span><span class="cx"> [
</span><span class="cx"> {
</span><del>- "key": {
- "type": "object",
- "objectId": "<filtered>",
- "className": "Object",
- "description": "Object",
- "preview": {
- "type": "object",
- "description": "Object",
- "lossless": true,
- "properties": [
</del><ins>+ "_key": {
+ "_type": "object",
+ "_objectId": "<filtered>",
+ "_description": "Object",
+ "_hasChildren": true,
+ "_preview": {
+ "_type": "object",
+ "_description": "Object",
+ "_lossless": true,
+ "_overflow": false,
+ "_properties": [
</ins><span class="cx"> {
</span><del>- "name": "id",
- "type": "number",
- "value": "2"
</del><ins>+ "_name": "id",
+ "_type": "number",
+ "_value": "2"
</ins><span class="cx"> }
</span><del>- ]
</del><ins>+ ],
+ "_entries": null
</ins><span class="cx"> }
</span><span class="cx"> },
</span><del>- "value": {
- "type": "number",
- "value": 2,
- "description": "2"
</del><ins>+ "_value": {
+ "_type": "number",
+ "_description": "2",
+ "_hasChildren": false,
+ "_value": 2
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> ]
</span></span></pre></div>
<a id="trunkLayoutTestsinspectormodelremoteobjectweakcollectionhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/model/remote-object-weak-collection.html (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/model/remote-object-weak-collection.html        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/LayoutTests/inspector/model/remote-object-weak-collection.html        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx">
</span><span class="cx"> function remoteObjectJSONFilter(key, value)
</span><span class="cx"> {
</span><del>- if (key === "objectId")
</del><ins>+ if (key === "_objectId")
</ins><span class="cx"> return "<filtered>";
</span><span class="cx">
</span><span class="cx"> return value;
</span><span class="lines">@@ -59,6 +59,8 @@
</span><span class="cx"> remoteObject.getCollectionEntries(0, 100, function(entries) {
</span><span class="cx"> InspectorTest.log("ENTRIES:");
</span><span class="cx"> entries.sort(function(a, b) { return a.value.value - b.value.value; });
</span><ins>+ for (var entry of entries)
+ InspectorTest.assert(entry instanceof WebInspector.CollectionEntry);
</ins><span class="cx"> InspectorTest.log(JSON.stringify(entries, remoteObjectJSONFilter, " "));
</span><span class="cx"> remoteObject.releaseWeakCollectionEntries();
</span><span class="cx"> runNextStep();
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/Source/WebInspectorUI/ChangeLog        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -1,5 +1,209 @@
</span><span class="cx"> 2015-02-19 Joseph Pecoraro <pecoraro@apple.com>
</span><span class="cx">
</span><ins>+ Web Inspector: Create Separate Model and View Objects for RemoteObjects / ObjectPreview / PropertyDescriptor
+ https://bugs.webkit.org/show_bug.cgi?id=141696
+
+ Reviewed by Timothy Hatcher.
+
+ * UserInterface/Main.html:
+ Add new files.
+
+ * UserInterface/Models/CollectionEntry.js: Added.
+ (WebInspector.CollectionEntry):
+ (WebInspector.CollectionEntry.fromPayload):
+ (WebInspector.CollectionEntry.prototype.get key):
+ (WebInspector.CollectionEntry.prototype.get value):
+ * UserInterface/Models/CollectionEntryPreview.js: Added.
+ (WebInspector.CollectionEntryPreview):
+ (WebInspector.CollectionEntryPreview.fromPayload):
+ (WebInspector.CollectionEntryPreview.prototype.get keyPreview):
+ (WebInspector.CollectionEntryPreview.prototype.get valuePreview):
+ * UserInterface/Models/ObjectPreview.js: Added.
+ (WebInspector.ObjectPreview):
+ (WebInspector.ObjectPreview.fromPayload):
+ (WebInspector.ObjectPreview.prototype.get type):
+ (WebInspector.ObjectPreview.prototype.get subtype):
+ (WebInspector.ObjectPreview.prototype.get description):
+ (WebInspector.ObjectPreview.prototype.get lossless):
+ (WebInspector.ObjectPreview.prototype.get overflow):
+ (WebInspector.ObjectPreview.prototype.get properties):
+ (WebInspector.ObjectPreview.prototype.get entries):
+ * UserInterface/Models/PropertyPreview.js: Added.
+ (WebInspector.PropertyPreview):
+ (WebInspector.PropertyPreview.fromPayload):
+ (WebInspector.PropertyPreview.prototype.get name):
+ (WebInspector.PropertyPreview.prototype.get type):
+ (WebInspector.PropertyPreview.prototype.get subtype):
+ (WebInspector.PropertyPreview.prototype.get value):
+ (WebInspector.PropertyPreview.prototype.get valuePreview):
+ * UserInterface/Models/PropertyDescriptor.js: Added.
+ (WebInspector.PropertyDescriptor.fromPayload):
+ (WebInspector.PropertyDescriptor.prototype.get name):
+ (WebInspector.PropertyDescriptor.prototype.get value):
+ (WebInspector.PropertyDescriptor.prototype.get writable):
+ (WebInspector.PropertyDescriptor.prototype.get configurable):
+ (WebInspector.PropertyDescriptor.prototype.get enumerable):
+ (WebInspector.PropertyDescriptor.prototype.get isOwnProperty):
+ (WebInspector.PropertyDescriptor.prototype.get wasThrown):
+ (WebInspector.PropertyDescriptor.prototype.get isInternalProperty):
+ (WebInspector.PropertyDescriptor.prototype.hasValue):
+ (WebInspector.PropertyDescriptor.prototype.hasGetter):
+ (WebInspector.PropertyDescriptor.prototype.hasSetter):
+ New Model objects for different Protocol types.
+ The only customizations right now are compatibility modifications
+ and PropertyDescriptor's "hasValue", "hasGetter", and "hasSetter"
+ functions to return reliable checks based on the descriptors contents.
+
+ * UserInterface/Protocol/RemoteObject.js:
+ (WebInspector.RemoteObject):
+ (WebInspector.RemoteObject.fromPayload):
+ (WebInspector.RemoteObject.resolveNode):
+ (WebInspector.RemoteObject.prototype.get value):
+ (WebInspector.RemoteObject.prototype._isSymbol):
+ (WebInspector.RemoteObject.prototype.isCollectionType):
+ (WebInspector.RemoteObject.prototype.isWeakCollection):
+ (WebInspector.RemoteObject.prototype.getCollectionEntries):
+ (WebInspector.RemoteObject.prototype.arrayLength):
+ Clean up the existing code to enforce more checks and use our
+ style of member variables and public accessors.
+
+ (WebInspector.RemoteObject.prototype.getOwnPropertyDescriptors):
+ (WebInspector.RemoteObject.prototype.getOwnAndGetterPropertyDescriptors):
+ (WebInspector.RemoteObject.prototype.getAllPropertyDescriptors):
+ (WebInspector.RemoteObject.prototype.callback):
+ Provide a new way of getting properties that returns Model objects
+ instead of raw protocol types.
+
+ * UserInterface/Views/ConsoleMessageImpl.js:
+ (WebInspector.ConsoleMessageImpl.prototype._format):
+ (WebInspector.ConsoleMessageImpl.prototype._formatParameter):
+ (WebInspector.ConsoleMessageImpl.prototype._propertyPreviewElement):
+ (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsNode):
+ (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsTable):
+ (WebInspector.ConsoleMessageImpl.prototype._formatAsArrayEntry):
+ Always include a preview when possible. Now, when forced to be an object,
+ force expansion even if the preview is lossless.
+
+ (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsObject):
+ Use an ObjectTreeView instead of ObjectPropertiesSection.
+
+ (WebInspector.ConsoleMessageImpl.prototype._appendPreview): Deleted.
+ (WebInspector.ConsoleMessageImpl.prototype._appendEntryPreviews): Deleted.
+ (WebInspector.ConsoleMessageImpl.prototype._appendPropertyPreviews): Deleted.
+ (WebInspector.ConsoleMessageImpl.prototype._appendValuePreview): Deleted.
+ This code is moved into ObjectPreviewView.
+
+
+ * UserInterface/Views/ObjectPropertiesSection.js:
+ (WebInspector.CollectionEntriesMainTreeElement.prototype.onexpand.callback):
+ (WebInspector.CollectionEntriesMainTreeElement.prototype.onexpand):
+ These types are now converted to Model types in Model objects, so do not do it here.
+
+ * UserInterface/Views/ObjectPreviewView.css: Added.
+ (.object-preview):
+ (.object-preview.lossless):
+ (.object-preview .name):
+ * UserInterface/Views/ObjectPreviewView.js: Added.
+ (WebInspector.ObjectPreviewView):
+ (WebInspector.ObjectPreviewView.prototype.get preview):
+ (WebInspector.ObjectPreviewView.prototype.get element):
+ (WebInspector.ObjectPreviewView.prototype.get mode):
+ (WebInspector.ObjectPreviewView.prototype.get lossless):
+ (WebInspector.ObjectPreviewView.prototype._numberOfPropertiesToShowInMode):
+ (WebInspector.ObjectPreviewView.prototype._appendPreview):
+ (WebInspector.ObjectPreviewView.prototype._appendEntryPreviews):
+ (WebInspector.ObjectPreviewView.prototype._appendPropertyPreviews):
+ (WebInspector.ObjectPreviewView.prototype._appendValuePreview):
+ (WebInspector.ObjectPreviewView.prototype._formattedObjectElementForPreview):
+ An ObjectPreviewView can create a full/brief view given a ObjectPreview.
+ The view will contain formatted values everywhere possible.
+
+ * UserInterface/Views/ObjectTreePropertyTreeElement.js: Added.
+ (WebInspector.ObjectTreePropertyTreeElement):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype.get property):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype.onpopulate):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype.onattach):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype._updateTitle):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype._updateTitlePropertyStyle):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype._updateTitleAPIStyle):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype._descriptionString):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype._functionParameterString):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype.mode):
+ (WebInspector.ObjectTreePropertyTreeElement.prototype):
+ * UserInterface/Views/ObjectTreeView.js: Added.
+ (WebInspector.ObjectTreeView):
+ (WebInspector.ObjectTreeView.classNameForObject):
+ (WebInspector.ObjectTreeView.ComparePropertyDescriptors):
+ (WebInspector.ObjectTreeView.prototype.get object):
+ (WebInspector.ObjectTreeView.prototype.get element):
+ (WebInspector.ObjectTreeView.prototype.get expanded):
+ (WebInspector.ObjectTreeView.prototype.expand):
+ (WebInspector.ObjectTreeView.prototype.collapse):
+ (WebInspector.ObjectTreeView.prototype.update):
+ (WebInspector.ObjectTreeView.prototype._updateProperties):
+ (WebInspector.ObjectTreeView.prototype._handlePreviewOrTitleElementClick):
+ Re-implementation of ObjectPropertiesSection for our Model objects
+ without "Section" semantics / dependencies. An ObjectTree will creates
+ an expandable tree for a RemoteObject. The top level clickable item
+ will be an ObjectPreview if possible, otherwise just a title element.
+
+ * UserInterface/Views/ObjectTreeView.css: Added.
+ (.object-tree):
+ (.object-tree > .title):
+ (.object-tree > :matches(.title, .object-preview)::before):
+ (.object-tree.expanded > :matches(.title, .object-preview)::before):
+ (.object-tree.lossless-preview > :matches(.title, .object-preview)::before):
+ (.object-tree-outline):
+ (.object-tree.expanded > .object-tree-outline):
+ (.object-tree-outline li):
+ (.object-tree-outline li.parent):
+ (.object-tree-outline li.parent::before):
+ (.object-tree-outline li.parent.expanded::before):
+ (.object-tree-outline ol):
+ (.object-tree-outline ol.expanded):
+ (.object-tree-outline li .empty-message):
+ (.object-tree-property .name):
+ (.object-tree-property .name.not-enumerable):
+ (.object-tree-property .value.error):
+ (.formatted-object, .formatted-node, .formatted-error, .formatted-map, .formatted-set, .formatted-weakmap):
+ (.formatted-number):
+ (.formatted-string, .formatted-regexp):
+ (.formatted-string):
+ (.formatted-regexp):
+ (.formatted-symbol):
+ (.formatted-null, .formatted-undefined):
+ (.console-group-messages .object-tree:not(.lossless-preview)):
+ (.console-group-messages .object-tree:not(.lossless-preview) > :matches(.title, .object-preview)):
+ (.console-group-messages .object-tree:not(.lossless-preview) > :matches(.title, .object-preview)::before):
+ (.console-group-messages :matches(.console-formatted-object, .console-formatted-node, .console-formatted-error, .console-formatted-map, .console-formatted-set, .console-formatted-weakmap) .object-tree):
+ (.console-group-messages :matches(.console-formatted-object, .console-formatted-node, .console-formatted-error, .console-formatted-map, .console-formatted-set, .console-formatted-weakmap) .object-tree-outline):
+ All styles for ObjectTree / ObjectPreview. Independent from
+ other styles in the inspector. Most of this is a copy of
+ the styles applied to ObjectPropertiesSection, renamed.
+
+
+ * UserInterface/Views/ObjectTreeCollectionTreeElement.js: Added.
+ (WebInspector.ObjectTreeCollectionTreeElement):
+ (WebInspector.ObjectTreeCollectionTreeElement.propertyDescriptorForEntry):
+ (WebInspector.ObjectTreeCollectionTreeElement.prototype.get remoteObject):
+ (WebInspector.ObjectTreeCollectionTreeElement.prototype.onexpand.callback):
+ (WebInspector.ObjectTreeCollectionTreeElement.prototype.onexpand):
+ (WebInspector.ObjectTreeCollectionTreeElement.prototype.oncollapse):
+ (WebInspector.ObjectTreeCollectionTreeElement.prototype.ondetach):
+ (WebInspector.ObjectTreeCollectionTreeElement.prototype._trackWeakEntries):
+ (WebInspector.ObjectTreeCollectionTreeElement.prototype._untrackWeakEntries):
+ (WebInspector.ObjectTreeCollectionEntryTreeElement):
+ (WebInspector.ObjectTreeCollectionEntryTreeElement.prototype.onpopulate):
+ (WebInspector.ObjectTreeCollectionEntryTreeElement.prototype.onattach):
+ (WebInspector.ObjectTreeEmptyCollectionTreeElement):
+ Essentially a copy of ObjectPropertiesSection Collection handling using
+ the ObjectTree class names.
+
+ * UserInterface/Views/TreeOutlineDataGridSynchronizer.js:
+ Fix prototype typo.
+
+2015-02-19 Joseph Pecoraro <pecoraro@apple.com>
+
</ins><span class="cx"> Web Inspector: DOMTree / Node Details Sidebar do not update as <input> content changes
</span><span class="cx"> https://bugs.webkit.org/show_bug.cgi?id=141790
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceMainhtml"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Main.html (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Main.html        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/Source/WebInspectorUI/UserInterface/Main.html        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -96,6 +96,8 @@
</span><span class="cx"> <link rel="stylesheet" href="Views/NavigationSidebarPanel.css">
</span><span class="cx"> <link rel="stylesheet" href="Views/NetworkTimelineOverviewGraph.css">
</span><span class="cx"> <link rel="stylesheet" href="Views/NetworkTimelineView.css">
</span><ins>+ <link rel="stylesheet" href="Views/ObjectPreviewView.css">
+ <link rel="stylesheet" href="Views/ObjectTreeView.css">
</ins><span class="cx"> <link rel="stylesheet" href="Views/OverviewTimelineView.css">
</span><span class="cx"> <link rel="stylesheet" href="Views/PathComponentIcons.css">
</span><span class="cx"> <link rel="stylesheet" href="Views/Popover.css">
</span><span class="lines">@@ -218,6 +220,8 @@
</span><span class="cx"> <script src="Models/CSSStyleDeclaration.js"></script>
</span><span class="cx"> <script src="Models/CSSStyleSheet.js"></script>
</span><span class="cx"> <script src="Models/CallFrame.js"></script>
</span><ins>+ <script src="Models/CollectionEntry.js"></script>
+ <script src="Models/CollectionEntryPreview.js"></script>
</ins><span class="cx"> <script src="Models/Color.js"></script>
</span><span class="cx"> <script src="Models/ContentFlow.js"></script>
</span><span class="cx"> <script src="Models/CookieStorageObject.js"></script>
</span><span class="lines">@@ -244,6 +248,7 @@
</span><span class="cx"> <script src="Models/LazySourceCodeLocation.js"></script>
</span><span class="cx"> <script src="Models/LogObject.js"></script>
</span><span class="cx"> <script src="Models/NetworkTimeline.js"></script>
</span><ins>+ <script src="Models/ObjectPreview.js"></script>
</ins><span class="cx"> <script src="Models/Probe.js"></script>
</span><span class="cx"> <script src="Models/ProbeSet.js"></script>
</span><span class="cx"> <script src="Models/ProbeSetDataFrame.js"></script>
</span><span class="lines">@@ -251,6 +256,8 @@
</span><span class="cx"> <script src="Models/Profile.js"></script>
</span><span class="cx"> <script src="Models/ProfileNode.js"></script>
</span><span class="cx"> <script src="Models/ProfileNodeCall.js"></script>
</span><ins>+ <script src="Models/PropertyDescriptor.js"></script>
+ <script src="Models/PropertyPreview.js"></script>
</ins><span class="cx"> <script src="Models/ReplayDashboard.js"></script>
</span><span class="cx"> <script src="Models/ReplaySession.js"></script>
</span><span class="cx"> <script src="Models/ReplaySessionSegment.js"></script>
</span><span class="lines">@@ -406,7 +413,11 @@
</span><span class="cx"> <script src="Views/NavigationBar.js"></script>
</span><span class="cx"> <script src="Views/NetworkTimelineOverviewGraph.js"></script>
</span><span class="cx"> <script src="Views/NetworkTimelineView.js"></script>
</span><ins>+ <script src="Views/ObjectPreviewView.js"></script>
</ins><span class="cx"> <script src="Views/ObjectPropertiesSection.js"></script>
</span><ins>+ <script src="Views/ObjectTreeCollectionTreeElement.js"></script>
+ <script src="Views/ObjectTreePropertyTreeElement.js"></script>
+ <script src="Views/ObjectTreeView.js"></script>
</ins><span class="cx"> <script src="Views/OverviewTimelineView.js"></script>
</span><span class="cx"> <script src="Views/Popover.js"></script>
</span><span class="cx"> <script src="Views/ProbeDetailsSidebarPanel.js"></script>
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsCollectionEntryjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Models/CollectionEntry.js (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/CollectionEntry.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CollectionEntry.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.CollectionEntry = function(key, value)
+{
+ WebInspector.Object.call(this);
+
+ console.assert(value instanceof WebInspector.RemoteObject);
+ console.assert(!key || key instanceof WebInspector.RemoteObject);
+
+ this._key = key;
+ this._value = value;
+};
+
+// Runtime.CollectionEntry.
+WebInspector.CollectionEntry.fromPayload = function(payload)
+{
+ if (payload.key)
+ payload.key = WebInspector.RemoteObject.fromPayload(payload.key);
+ if (payload.value)
+ payload.value = WebInspector.RemoteObject.fromPayload(payload.value);
+
+ return new WebInspector.CollectionEntry(payload.key, payload.value);
+};
+
+WebInspector.CollectionEntry.prototype = {
+ constructor: WebInspector.CollectionEntry,
+ __proto__: WebInspector.Object.prototype,
+
+ // Public
+
+ get key()
+ {
+ return this._key;
+ },
+
+ get value()
+ {
+ return this._value;
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsCollectionEntryPreviewjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Models/CollectionEntryPreview.js (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/CollectionEntryPreview.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CollectionEntryPreview.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.CollectionEntryPreview = function(keyPreview, valuePreview)
+{
+ WebInspector.Object.call(this);
+
+ console.assert(valuePreview instanceof WebInspector.ObjectPreview);
+ console.assert(!keyPreview || keyPreview instanceof WebInspector.ObjectPreview);
+
+ this._key = keyPreview;
+ this._value = valuePreview;
+};
+
+// Runtime.EntryPreview.
+WebInspector.CollectionEntryPreview.fromPayload = function(payload)
+{
+ if (payload.key)
+ payload.key = WebInspector.ObjectPreview.fromPayload(payload.key);
+ if (payload.value)
+ payload.value = WebInspector.ObjectPreview.fromPayload(payload.value);
+
+ return new WebInspector.CollectionEntryPreview(payload.key, payload.value);
+};
+
+WebInspector.CollectionEntryPreview.prototype = {
+ constructor: WebInspector.CollectionEntryPreview,
+ __proto__: WebInspector.Object.prototype,
+
+ // Public
+
+ get keyPreview()
+ {
+ return this._key;
+ },
+
+ get valuePreview()
+ {
+ return this._value;
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsObjectPreviewjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Models/ObjectPreview.js (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/ObjectPreview.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/ObjectPreview.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,96 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.ObjectPreview = function(type, subtype, description, lossless, overflow, properties, entries)
+{
+ WebInspector.Object.call(this);
+
+ console.assert(type);
+ console.assert(typeof lossless === "boolean");
+ console.assert(!properties || !properties.length || properties[0] instanceof WebInspector.PropertyPreview);
+ console.assert(!entries || !entries.length || entries[0] instanceof WebInspector.CollectionEntryPreview);
+
+ this._type = type;
+ this._subtype = subtype;
+ this._description = description || "";
+ this._lossless = lossless;
+ this._overflow = overflow || false;
+
+ this._properties = properties || null;
+ this._entries = entries || null;
+};
+
+// Runtime.ObjectPreview.
+WebInspector.ObjectPreview.fromPayload = function(payload)
+{
+ if (payload.properties)
+ payload.properties = payload.properties.map(function(property) { return WebInspector.PropertyPreview.fromPayload(property); });
+ if (payload.entries)
+ payload.entries = payload.entries.map(function(entry) { return WebInspector.CollectionEntryPreview.fromPayload(entry); });
+
+ return new WebInspector.ObjectPreview(payload.type, payload.subtype, payload.description, payload.lossless, payload.overflow, payload.properties, payload.entries);
+};
+
+WebInspector.ObjectPreview.prototype = {
+ constructor: WebInspector.ObjectPreview,
+ __proto__: WebInspector.Object.prototype,
+
+ // Public
+
+ get type()
+ {
+ return this._type;
+ },
+
+ get subtype()
+ {
+ return this._subtype;
+ },
+
+ get description()
+ {
+ return this._description;
+ },
+
+ get lossless()
+ {
+ return this._lossless;
+ },
+
+ get overflow()
+ {
+ return this._overflow;
+ },
+
+ get propertyPreviews()
+ {
+ return this._properties;
+ },
+
+ get collectionEntryPreviews()
+ {
+ return this._entries;
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsPropertyDescriptorjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Models/PropertyDescriptor.js (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/PropertyDescriptor.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/PropertyDescriptor.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,140 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.PropertyDescriptor = function(descriptor, isOwnProperty, wasThrown, isInternalProperty)
+{
+ WebInspector.Object.call(this);
+
+ console.assert(descriptor);
+ console.assert(descriptor.name);
+ console.assert(!descriptor.value || descriptor.value instanceof WebInspector.RemoteObject);
+ console.assert(!descriptor.get || descriptor.get instanceof WebInspector.RemoteObject);
+ console.assert(!descriptor.set || descriptor.set instanceof WebInspector.RemoteObject);
+
+ this._name = descriptor.name;
+ this._value = descriptor.value;
+ this._hasValue = "value" in descriptor;
+ this._get = descriptor.get;
+ this._set = descriptor.set;
+
+ this._writable = descriptor.writable || false;
+ this._configurable = descriptor.configurable || false;
+ this._enumerable = descriptor.enumerable || false;
+
+ this._own = isOwnProperty || false;
+ this._wasThrown = wasThrown || false;
+ this._internal = isInternalProperty || false;
+};
+
+// Runtime.PropertyDescriptor or Runtime.InternalPropertyDescriptor.
+WebInspector.PropertyDescriptor.fromPayload = function(payload)
+{
+ if (payload.value)
+ payload.value = WebInspector.RemoteObject.fromPayload(payload.value);
+ if (payload.get)
+ payload.get = WebInspector.RemoteObject.fromPayload(payload.get);
+ if (payload.set)
+ payload.set = WebInspector.RemoteObject.fromPayload(payload.set);
+
+ if (payload.internal) {
+ console.assert(payload.value);
+ payload.writable = payload.configurable = payload.enumerable = false;
+ payload.isOwn = true;
+ }
+
+ return new WebInspector.PropertyDescriptor(payload, payload.isOwn, payload.wasThrown, payload.internal);
+};
+
+WebInspector.PropertyDescriptor.prototype = {
+ constructor: WebInspector.PropertyDescriptor,
+ __proto__: WebInspector.Object.prototype,
+
+ // Public
+
+ get name()
+ {
+ return this._name;
+ },
+
+ get value()
+ {
+ return this._value;
+ },
+
+ get get()
+ {
+ return this._get;
+ },
+
+ get set()
+ {
+ return this._set;
+ },
+
+ get writable()
+ {
+ return this._writable;
+ },
+
+ get configurable()
+ {
+ return this._configurable;
+ },
+
+ get enumerable()
+ {
+ return this._enumerable;
+ },
+
+ get isOwnProperty()
+ {
+ return this._own;
+ },
+
+ get wasThrown()
+ {
+ return this._wasThrown;
+ },
+
+ get isInternalProperty()
+ {
+ return this._internal;
+ },
+
+ hasValue: function()
+ {
+ return this._hasValue;
+ },
+
+ hasGetter: function()
+ {
+ return this._get && this._get.type === "function";
+ },
+
+ hasSetter: function()
+ {
+ return this._set && this._set.type === "function";
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsPropertyPreviewjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Models/PropertyPreview.js (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/PropertyPreview.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/PropertyPreview.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.PropertyPreview = function(name, type, subtype, value, valuePreview, isInternalProperty)
+{
+ WebInspector.Object.call(this);
+
+ console.assert(name);
+ console.assert(type);
+ console.assert(!value || typeof value === "string");
+ console.assert(!valuePreview || valuePreview instanceof WebInspector.ObjectPreview);
+
+ this._name = name;
+ this._type = type;
+ this._subtype = subtype;
+ this._value = value;
+ this._valuePreview = valuePreview;
+ this._internal = isInternalProperty;
+};
+
+// Runtime.PropertyPreview.
+WebInspector.PropertyPreview.fromPayload = function(payload)
+{
+ if (payload.valuePreview)
+ payload.valuePreview = WebInspector.ObjectPreview.fromPayload(payload.valuePreview);
+
+ return new WebInspector.PropertyPreview(payload.name, payload.type, payload.subtype, payload.value, payload.valuePreview, payload.internal);
+};
+
+WebInspector.PropertyPreview.prototype = {
+ constructor: WebInspector.PropertyPreview,
+ __proto__: WebInspector.Object.prototype,
+
+ // Public
+
+ get name()
+ {
+ return this._name;
+ },
+
+ get type()
+ {
+ return this._type;
+ },
+
+ get subtype()
+ {
+ return this._subtype;
+ },
+
+ get value()
+ {
+ return this._value;
+ },
+
+ get valuePreview()
+ {
+ return this._valuePreview;
+ },
+
+ get internal()
+ {
+ return this._internal;
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolRemoteObjectjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -30,20 +30,32 @@
</span><span class="cx">
</span><span class="cx"> WebInspector.RemoteObject = function(objectId, type, subtype, value, description, preview)
</span><span class="cx"> {
</span><ins>+ // No superclass.
+
+ console.assert(type);
+ console.assert(!preview || preview instanceof WebInspector.ObjectPreview);
+
</ins><span class="cx"> this._type = type;
</span><span class="cx"> this._subtype = subtype;
</span><ins>+
</ins><span class="cx"> if (objectId) {
</span><del>- // handle
</del><ins>+ // Object or Symbol.
+ console.assert(!subtype || typeof subtype === "string");
+ console.assert(!description || typeof description === "string");
+ console.assert(!value);
+
</ins><span class="cx"> this._objectId = objectId;
</span><span class="cx"> this._description = description;
</span><span class="cx"> this._hasChildren = type !== "symbol";
</span><span class="cx"> this._preview = preview;
</span><span class="cx"> } else {
</span><del>- // Primitive or null object.
</del><ins>+ // Primitive or null.
</ins><span class="cx"> console.assert(type !== "object" || value === null);
</span><ins>+ console.assert(!preview);
+
</ins><span class="cx"> this._description = description || (value + "");
</span><span class="cx"> this._hasChildren = false;
</span><del>- this.value = value;
</del><ins>+ this._value = value;
</ins><span class="cx"> }
</span><span class="cx"> };
</span><span class="cx">
</span><span class="lines">@@ -52,10 +64,27 @@
</span><span class="cx"> return new WebInspector.RemoteObject(undefined, typeof value, undefined, value);
</span><span class="cx"> };
</span><span class="cx">
</span><ins>+WebInspector.RemoteObject.fromPayload = function(payload)
+{
+ console.assert(typeof payload === "object", "Remote object payload should only be an object");
+
+ if (payload.preview) {
+ // COMPATIBILITY (iOS 8): iOS 7 and 8 did not have type/subtype/description on
+ // Runtime.ObjectPreview. Copy them over from the RemoteObject.
+ if (!payload.preview.type) {
+ payload.preview.type = obj.type;
+ payload.preview.subtype = obj.subtype;
+ payload.preview.description = obj.description;
+ }
+ payload.preview = WebInspector.ObjectPreview.fromPayload(payload.preview);
+ }
+
+ return new WebInspector.RemoteObject(payload.objectId, payload.type, payload.subtype, payload.value, payload.description, payload.preview);
+};
+
</ins><span class="cx"> WebInspector.RemoteObject.resolveNode = function(node, objectGroup, callback)
</span><span class="cx"> {
</span><del>- function mycallback(error, object)
- {
</del><ins>+ DOMAgent.resolveNode(node.id, objectGroup, function(error, object) {
</ins><span class="cx"> if (!callback)
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="lines">@@ -63,17 +92,9 @@
</span><span class="cx"> callback(null);
</span><span class="cx"> else
</span><span class="cx"> callback(WebInspector.RemoteObject.fromPayload(object));
</span><del>- }
- DOMAgent.resolveNode(node.id, objectGroup, mycallback);
</del><ins>+ });
</ins><span class="cx"> };
</span><span class="cx">
</span><del>-WebInspector.RemoteObject.fromPayload = function(payload)
-{
- console.assert(typeof payload === "object", "Remote object payload should only be an object");
-
- return new WebInspector.RemoteObject(payload.objectId, payload.type, payload.subtype, payload.value, payload.description, payload.preview);
-};
-
</del><span class="cx"> WebInspector.RemoteObject.type = function(remoteObject)
</span><span class="cx"> {
</span><span class="cx"> if (remoteObject === null)
</span><span class="lines">@@ -87,6 +108,8 @@
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> WebInspector.RemoteObject.prototype = {
</span><ins>+ constructor: WebInspector.RemoteObject,
+
</ins><span class="cx"> get objectId()
</span><span class="cx"> {
</span><span class="cx"> return this._objectId;
</span><span class="lines">@@ -112,11 +135,84 @@
</span><span class="cx"> return this._hasChildren;
</span><span class="cx"> },
</span><span class="cx">
</span><ins>+ get value()
+ {
+ return this._value;
+ },
+
</ins><span class="cx"> get preview()
</span><span class="cx"> {
</span><span class="cx"> return this._preview;
</span><span class="cx"> },
</span><span class="cx">
</span><ins>+ getOwnPropertyDescriptors: function(callback)
+ {
+ this._getPropertyDescriptors(true, false, callback);
+ },
+
+ getOwnAndGetterPropertyDescriptors: function(callback)
+ {
+ this._getPropertyDescriptors(false, true, callback);
+ },
+
+ getAllPropertyDescriptors: function(callback)
+ {
+ this._getPropertyDescriptors(false, false, callback);
+ },
+
+ _getPropertyDescriptors: function(ownProperties, ownAndGetterProperties, callback)
+ {
+ if (!this._objectId || this._isSymbol()) {
+ callback([]);
+ return;
+ }
+
+ function remoteObjectBinder(error, properties, internalProperties)
+ {
+ if (error) {
+ callback(null);
+ return;
+ }
+
+ if (internalProperties)
+ properties = properties.concat(internalProperties);
+
+ var descriptors = properties.map(function(payload) {
+ return WebInspector.PropertyDescriptor.fromPayload(payload);
+ });
+
+ callback(descriptors);
+ }
+
+ // COMPATIBILITY (iOS 8): RuntimeAgent.getProperties did not support ownerAndGetterProperties.
+ // Here we do our best to reimplement it by getting all properties and reducing them down.
+ if (ownAndGetterProperties && !RuntimeAgent.getProperties.supports("ownAndGetterProperties")) {
+ RuntimeAgent.getProperties(this._objectId, function(error, allProperties) {
+ var ownOrGetterPropertiesList = [];
+ if (allProperties) {
+ for (var property of allProperties) {
+ if (property.isOwn || property.get || property.name === "__proto__") {
+ // Own property or getter property in prototype chain.
+ ownOrGetterPropertiesList.push(property);
+ } else if (property.value && property.name !== property.name.toUpperCase()) {
+ var type = property.value.type;
+ if (type && type !== "function" && property.name !== "constructor") {
+ // Possible native binding getter property converted to a value. Also, no CONSTANT name style and not "constructor".
+ ownOrGetterPropertiesList.push(property);
+ }
+ }
+ }
+ }
+ remoteObjectBinder(error, ownOrGetterPropertiesList);
+ });
+ return;
+ }
+
+ RuntimeAgent.getProperties(this._objectId, ownProperties, ownAndGetterProperties, remoteObjectBinder);
+ },
+
+ // FIXME: Phase out these functions. They return RemoteObjectProperty instead of PropertyDescriptors.
+
</ins><span class="cx"> getOwnProperties: function(callback)
</span><span class="cx"> {
</span><span class="cx"> this._getProperties(true, false, callback);
</span><span class="lines">@@ -146,7 +242,7 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- // FIXME: We should display Internal Properties visually distinct. For now treat as non-enumerable own properties.
</del><ins>+ // FIXME: WebInspector.PropertyDescriptor instead of RemoteObjectProperty.
</ins><span class="cx"> if (internalProperties) {
</span><span class="cx"> properties = properties.concat(internalProperties.map(function(descriptor) {
</span><span class="cx"> descriptor.writable = false;
</span><span class="lines">@@ -191,7 +287,7 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> remoteObjectBinder(error, ownOrGetterPropertiesList);
</span><del>- });
</del><ins>+ });
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -237,17 +333,17 @@
</span><span class="cx">
</span><span class="cx"> _isSymbol: function()
</span><span class="cx"> {
</span><del>- return this.type === "symbol";
</del><ins>+ return this._type === "symbol";
</ins><span class="cx"> },
</span><span class="cx">
</span><span class="cx"> isCollectionType: function()
</span><span class="cx"> {
</span><del>- return this.subtype === "map" || this.subtype === "set" || this.subtype === "weakmap";
</del><ins>+ return this._subtype === "map" || this._subtype === "set" || this._subtype === "weakmap";
</ins><span class="cx"> },
</span><span class="cx">
</span><span class="cx"> isWeakCollection: function()
</span><span class="cx"> {
</span><del>- return this.subtype === "weakmap";
</del><ins>+ return this._subtype === "weakmap";
</ins><span class="cx"> },
</span><span class="cx">
</span><span class="cx"> getCollectionEntries: function(start, numberToFetch, callback)
</span><span class="lines">@@ -260,11 +356,12 @@
</span><span class="cx"> console.assert(this.isCollectionType());
</span><span class="cx">
</span><span class="cx"> // WeakMaps are not ordered. We should never send a non-zero start.
</span><del>- console.assert((this.subtype === "weakmap" && start === 0) || this.subtype !== "weakmap");
</del><ins>+ console.assert((this._subtype === "weakmap" && start === 0) || this._subtype !== "weakmap");
</ins><span class="cx">
</span><span class="cx"> var objectGroup = this.isWeakCollection() ? this._weakCollectionObjectGroup() : "";
</span><span class="cx">
</span><span class="cx"> RuntimeAgent.getCollectionEntries(this._objectId, objectGroup, start, numberToFetch, function(error, entries) {
</span><ins>+ entries = entries.map(function(entry) { return WebInspector.CollectionEntry.fromPayload(entry); });
</ins><span class="cx"> callback(entries);
</span><span class="cx"> });
</span><span class="cx"> },
</span><span class="lines">@@ -311,12 +408,13 @@
</span><span class="cx">
</span><span class="cx"> arrayLength: function()
</span><span class="cx"> {
</span><del>- if (this.subtype !== "array")
</del><ins>+ if (this._subtype !== "array")
</ins><span class="cx"> return 0;
</span><span class="cx">
</span><span class="cx"> var matches = this._description.match(/\[([0-9]+)\]/);
</span><span class="cx"> if (!matches)
</span><span class="cx"> return 0;
</span><ins>+
</ins><span class="cx"> return parseInt(matches[1], 10);
</span><span class="cx"> },
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceTesthtml"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Test.html (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Test.html        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/Source/WebInspectorUI/UserInterface/Test.html        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -67,9 +67,6 @@
</span><span class="cx"> <script src="Models/TimelineRecord.js"></script>
</span><span class="cx">
</span><span class="cx"> <script src="Models/Breakpoint.js"></script>
</span><del>- <script src="Models/CallFrame.js"></script>
- <script src="Models/Color.js"></script>
- <script src="Models/ContentFlow.js"></script>
</del><span class="cx"> <script src="Models/CSSCompletions.js"></script>
</span><span class="cx"> <script src="Models/CSSKeywordCompletions.js"></script>
</span><span class="cx"> <script src="Models/CSSProperty.js"></script>
</span><span class="lines">@@ -77,10 +74,15 @@
</span><span class="cx"> <script src="Models/CSSSelector.js"></script>
</span><span class="cx"> <script src="Models/CSSStyleDeclaration.js"></script>
</span><span class="cx"> <script src="Models/CSSStyleSheet.js"></script>
</span><ins>+ <script src="Models/CallFrame.js"></script>
+ <script src="Models/CollectionEntry.js"></script>
+ <script src="Models/Color.js"></script>
+ <script src="Models/ContentFlow.js"></script>
</ins><span class="cx"> <script src="Models/DOMNode.js"></script>
</span><span class="cx"> <script src="Models/DOMNodeStyles.js"></script>
</span><span class="cx"> <script src="Models/DOMStorageObject.js"></script>
</span><span class="cx"> <script src="Models/DOMTree.js"></script>
</span><ins>+ <script src="Models/CollectionEntryPreview.js"></script>
</ins><span class="cx"> <script src="Models/ExecutionContext.js"></script>
</span><span class="cx"> <script src="Models/ExecutionContextList.js"></script>
</span><span class="cx"> <script src="Models/Frame.js"></script>
</span><span class="lines">@@ -91,6 +93,7 @@
</span><span class="cx"> <script src="Models/LayoutTimelineRecord.js"></script>
</span><span class="cx"> <script src="Models/LazySourceCodeLocation.js"></script>
</span><span class="cx"> <script src="Models/NetworkTimeline.js"></script>
</span><ins>+ <script src="Models/ObjectPreview.js"></script>
</ins><span class="cx"> <script src="Models/Probe.js"></script>
</span><span class="cx"> <script src="Models/ProbeSet.js"></script>
</span><span class="cx"> <script src="Models/ProbeSetDataFrame.js"></script>
</span><span class="lines">@@ -98,6 +101,8 @@
</span><span class="cx"> <script src="Models/Profile.js"></script>
</span><span class="cx"> <script src="Models/ProfileNode.js"></script>
</span><span class="cx"> <script src="Models/ProfileNodeCall.js"></script>
</span><ins>+ <script src="Models/PropertyDescriptor.js"></script>
+ <script src="Models/PropertyPreview.js"></script>
</ins><span class="cx"> <script src="Models/ReplaySession.js"></script>
</span><span class="cx"> <script src="Models/ReplaySessionSegment.js"></script>
</span><span class="cx"> <script src="Models/Resource.js"></script>
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsConsoleMessageImpljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -247,7 +247,7 @@
</span><span class="cx"> span.textContent = parameters[i].description;
</span><span class="cx"> formattedResult.appendChild(span);
</span><span class="cx"> } else
</span><del>- formattedResult.appendChild(this._formatParameter(parameters[i], false, true));
</del><ins>+ formattedResult.appendChild(this._formatParameter(parameters[i], false));
</ins><span class="cx">
</span><span class="cx"> if (i < parameters.length - 1 && !this._isExpandable(parameters[i]))
</span><span class="cx"> formattedResult.appendChild(document.createTextNode(" "));
</span><span class="lines">@@ -266,7 +266,7 @@
</span><span class="cx"> return remoteObject.hasChildren;
</span><span class="cx"> },
</span><span class="cx">
</span><del>- _formatParameter: function(output, forceObjectFormat, includePreview)
</del><ins>+ _formatParameter: function(output, forceObjectFormat)
</ins><span class="cx"> {
</span><span class="cx"> var type;
</span><span class="cx"> if (forceObjectFormat)
</span><span class="lines">@@ -288,7 +288,7 @@
</span><span class="cx"> if (this._isExpandable(output))
</span><span class="cx"> span.classList.add("expandable");
</span><span class="cx">
</span><del>- formatter.call(this, output, span, includePreview);
</del><ins>+ formatter.call(this, output, span, forceObjectFormat);
</ins><span class="cx"> return span;
</span><span class="cx"> },
</span><span class="cx">
</span><span class="lines">@@ -297,123 +297,21 @@
</span><span class="cx"> elem.appendChild(document.createTextNode(val));
</span><span class="cx"> },
</span><span class="cx">
</span><del>- _formatParameterAsObject: function(obj, elem, includePreview)
</del><ins>+ _formatParameterAsObject: function(obj, elem, forceExpansion)
</ins><span class="cx"> {
</span><del>- var titleElement = document.createElement("span");
- if (includePreview && obj.preview) {
- titleElement.classList.add("console-object-preview");
-
- // COMPATIBILITY (iOS 8): iOS 7 and 8 did not have type/subtype/description on
- // Runtime.ObjectPreview. Copy them over from the RemoteObject.
- var preview = obj.preview;
- if (!preview.type) {
- preview.type = obj.type;
- preview.subtype = obj.subtype;
- preview.description = obj.description;
- }
-
- var lossless = this._appendPreview(titleElement, preview);
- if (lossless) {
- titleElement.classList.add("console-object-preview-lossless");
- elem.appendChild(titleElement);
- return;
- }
- } else
- titleElement.appendChild(document.createTextNode(obj.description || ""));
-
- var section = new WebInspector.ObjectPropertiesSection(obj, titleElement);
- elem.appendChild(section.element);
</del><ins>+ var objectTree = new WebInspector.ObjectTreeView(obj, WebInspector.ObjectTreeView.Mode.Properties, forceExpansion);
+ elem.appendChild(objectTree.element);
</ins><span class="cx"> },
</span><span class="cx">
</span><del>- _appendPreview: function(element, preview)
- {
- if (preview.type === "object" && preview.subtype !== "null" && preview.subtype !== "array") {
- var previewObjectNameElement = document.createElement("span");
- previewObjectNameElement.classList.add("console-object-preview-name");
- if (preview.description === "Object")
- previewObjectNameElement.classList.add("console-object-preview-name-Object");
-
- previewObjectNameElement.textContent = preview.description + " ";
- element.appendChild(previewObjectNameElement);
- }
-
- var bodyElement = element.createChild("span", "console-object-preview-body");
- if (preview.entries)
- return this._appendEntryPreviews(bodyElement, preview);
- if (preview.properties)
- return this._appendPropertyPreviews(bodyElement, preview);
- return this._appendValuePreview(bodyElement, preview);
- },
-
- _appendEntryPreviews: function(element, preview)
- {
- var lossless = preview.lossless && !preview.properties.length;
-
- element.appendChild(document.createTextNode("{"));
-
- for (var i = 0; i < preview.entries.length; ++i) {
- if (i > 0)
- element.appendChild(document.createTextNode(", "));
-
- var entry = preview.entries[i];
- if (entry.key) {
- this._appendPreview(element, entry.key);
- element.appendChild(document.createTextNode(" => "));
- }
-
- this._appendPreview(element, entry.value);
- }
-
- if (preview.overflow)
- element.createChild("span").textContent = "\u2026";
- element.appendChild(document.createTextNode("}"));
-
- return lossless;
- },
-
- _appendPropertyPreviews: function(element, preview)
- {
- var isArray = preview.subtype === "array";
-
- element.appendChild(document.createTextNode(isArray ? "[" : "{"));
-
- for (var i = 0; i < preview.properties.length; ++i) {
- var property = preview.properties[i];
-
- // FIXME: Better handle getter/setter accessors. Should we show getters in previews?
- if (property.type === "accessor")
- continue;
-
- // Constructor name is often already visible, so don't show it as a property.
- if (property.name === "constructor")
- continue;
-
- if (i > 0)
- element.appendChild(document.createTextNode(", "));
-
- if (!isArray || property.name != i) {
- element.createChild("span", "name").textContent = property.name;
- element.appendChild(document.createTextNode(": "));
- }
-
- element.appendChild(this._propertyPreviewElement(property));
- }
-
- if (preview.overflow)
- element.createChild("span").textContent = "\u2026";
-
- element.appendChild(document.createTextNode(isArray ? "]" : "}"));
-
- return preview.lossless;
- },
-
</del><span class="cx"> _propertyPreviewElement: function(property)
</span><span class="cx"> {
</span><ins>+ // FIXME: Used by console.table. We should be able to eliminate this in favor of ObjectPreview.
+
</ins><span class="cx"> var span = document.createElement("span");
</span><del>- span.classList.add("console-formatted-" + property.type);
</del><ins>+ span.classList.add(WebInspector.ObjectTreeView.classNameForObject(property));
</ins><span class="cx">
</span><span class="cx"> if (property.type === "string") {
</span><del>- span.textContent = "\"" + property.value.replace(/\n/g, "\u21B5") + "\"";
</del><ins>+ span.textContent = "\"" + property.value.replace(/\n/g, "\u21B5").replace(/"/g, "\\\"") + "\"";
</ins><span class="cx"> return span;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -422,22 +320,10 @@
</span><span class="cx"> return span;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (property.type === "object") {
- if (property.subtype === "node")
- span.classList.add("console-formatted-preview-node");
- else if (property.subtype === "regexp")
- span.classList.add("console-formatted-regexp");
- }
-
</del><span class="cx"> span.textContent = property.value;
</span><span class="cx"> return span;
</span><span class="cx"> },
</span><span class="cx">
</span><del>- _appendValuePreview: function(element, preview)
- {
- element.appendChild(document.createTextNode(preview.description));
- },
-
</del><span class="cx"> _formatParameterAsNode: function(object, elem)
</span><span class="cx"> {
</span><span class="cx"> function printNode(nodeId)
</span><span class="lines">@@ -445,7 +331,7 @@
</span><span class="cx"> if (!nodeId) {
</span><span class="cx"> // Sometimes DOM is loaded after the sync message is being formatted, so we get no
</span><span class="cx"> // nodeId here. So we fall back to object formatting here.
</span><del>- this._formatParameterAsObject(object, elem, false);
</del><ins>+ this._formatParameterAsObject(object, elem, true);
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx"> var treeOutline = new WebInspector.DOMTreeOutline(false, false, true);
</span><span class="lines">@@ -571,7 +457,7 @@
</span><span class="cx">
</span><span class="cx"> // If lossless or not table data, output the object so full data can be gotten.
</span><span class="cx"> if (!preview.lossless || !flatValues.length) {
</span><del>- element.appendChild(this._formatParameter(table, true, false));
</del><ins>+ element.appendChild(this._formatParameter(table, true));
</ins><span class="cx"> if (!flatValues.length)
</span><span class="cx"> return element;
</span><span class="cx"> }
</span><span class="lines">@@ -589,10 +475,10 @@
</span><span class="cx"> var span = document.createElement("span");
</span><span class="cx"> span.className = "console-formatted-string source-code";
</span><span class="cx"> span.appendChild(document.createTextNode("\""));
</span><del>- span.appendChild(WebInspector.linkifyStringAsFragment(output.description));
</del><ins>+ span.appendChild(WebInspector.linkifyStringAsFragment(output.description.replace(/"/g, "\\\"")));
</ins><span class="cx"> span.appendChild(document.createTextNode("\""));
</span><span class="cx">
</span><del>- elem.classList.remove("console-formatted-string");
</del><ins>+ elem.classList.remove("console-formatted-string");
</ins><span class="cx"> elem.appendChild(span);
</span><span class="cx"> },
</span><span class="cx">
</span><span class="lines">@@ -644,7 +530,7 @@
</span><span class="cx"> _formatAsArrayEntry: function(output)
</span><span class="cx"> {
</span><span class="cx"> // Prevent infinite expansion of cross-referencing arrays.
</span><del>- return this._formatParameter(output, output.subtype && output.subtype === "array", false);
</del><ins>+ return this._formatParameter(output, output.subtype && output.subtype === "array");
</ins><span class="cx"> },
</span><span class="cx">
</span><span class="cx"> _formatWithSubstitutionString: function(parameters, formattedResult)
</span><span class="lines">@@ -653,7 +539,7 @@
</span><span class="cx">
</span><span class="cx"> function parameterFormatter(force, obj)
</span><span class="cx"> {
</span><del>- return this._formatParameter(obj, force, false);
</del><ins>+ return this._formatParameter(obj, force);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> function stringFormatter(obj)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectPreviewViewcss"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.css (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.css         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.css        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+.object-preview {
+ font-style: italic;
+}
+
+.object-preview.lossless {
+ font-style: normal;
+}
+
+.object-preview .name {
+ color: rgb(136, 19, 145);
+}
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectPreviewViewjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.js (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,191 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.ObjectPreviewView = function(preview, mode)
+{
+ WebInspector.Object.call(this);
+
+ console.assert(preview instanceof WebInspector.ObjectPreview);
+
+ this._preview = preview;
+ this._mode = mode || WebInspector.ObjectPreviewView.Mode.Full;
+
+ this._element = document.createElement("span");
+ this._element.className = "object-preview";
+ this._lossless = this._appendPreview(this._element, this._preview);
+
+ if (this._lossless)
+ this._element.classList.add("lossless");
+};
+
+WebInspector.ObjectPreviewView.Mode = {
+ Brief: Symbol("object-preview-brief"),
+ Full: Symbol("object-preview-full"),
+};
+
+WebInspector.ObjectPreviewView.prototype = {
+ constructor: WebInspector.ObjectPreviewView,
+ __proto__: WebInspector.Object,
+
+ // Public
+
+ get preview()
+ {
+ return this._preview;
+ },
+
+ get element()
+ {
+ return this._element;
+ },
+
+ get mode()
+ {
+ return this._mode;
+ },
+
+ get lossless()
+ {
+ return this._lossless;
+ },
+
+ // Private
+
+ _numberOfPropertiesToShowInMode: function()
+ {
+ return this._mode === WebInspector.ObjectPreviewView.Mode.Brief ? 3 : Infinity;
+ },
+
+ _appendPreview: function(element, preview)
+ {
+ // Class name for non-array object types.
+ if (preview.type === "object" && preview.subtype !== "null" && preview.subtype !== "array" && preview.description !== "Object") {
+ var nameElement = element.appendChild(document.createElement("span"));
+ nameElement.className = "object-preview-name";
+ nameElement.textContent = preview.description + " ";
+ }
+
+ // Content.
+ var bodyElement = element.appendChild(document.createElement("span"));
+ bodyElement.className = "object-preview-body";
+ if (preview.collectionEntryPreviews)
+ return this._appendEntryPreviews(bodyElement, preview);
+ if (preview.propertyPreviews)
+ return this._appendPropertyPreviews(bodyElement, preview);
+ return this._appendValuePreview(bodyElement, preview);
+ },
+
+ _appendEntryPreviews: function(element, preview)
+ {
+ var lossless = preview.lossless && !preview.propertyPreviews.length;
+
+ element.appendChild(document.createTextNode("{"));
+
+ var limit = Math.min(preview.collectionEntryPreviews.length, this._numberOfPropertiesToShowInMode());
+ for (var i = 0; i < limit; ++i) {
+ if (i > 0)
+ element.appendChild(document.createTextNode(", "));
+
+ var entry = preview.collectionEntryPreviews[i];
+ if (entry.keyPreview) {
+ this._appendPreview(element, entry.keyPreview);
+ element.appendChild(document.createTextNode(" => "));
+ }
+
+ this._appendPreview(element, entry.valuePreview);
+ }
+
+ if (preview.overflow)
+ element.appendChild(document.createTextNode("\u2026"));
+ element.appendChild(document.createTextNode("}"));
+
+ return lossless;
+ },
+
+ _appendPropertyPreviews: function(element, preview)
+ {
+ var isArray = preview.subtype === "array";
+
+ element.appendChild(document.createTextNode(isArray ? "[" : "{"));
+
+ var numberAdded = 0;
+ var limit = this._numberOfPropertiesToShowInMode();
+ for (var i = 0; i < preview.propertyPreviews.length && numberAdded < limit; ++i) {
+ var property = preview.propertyPreviews[i];
+
+ // FIXME: Better handle getter/setter accessors. Should we show getters in previews?
+ if (property.type === "accessor")
+ continue;
+
+ // Constructor name is often already visible, so don't show it as a property.
+ if (property.name === "constructor")
+ continue;
+
+ if (numberAdded++ > 0)
+ element.appendChild(document.createTextNode(", "));
+
+ if (!isArray || property.name != i) {
+ var nameElement = element.appendChild(document.createElement("span"));
+ nameElement.className = "name";
+ nameElement.textContent = property.name;
+ element.appendChild(document.createTextNode(": "));
+ }
+
+ element.appendChild(this._formattedObjectElementForPreview(property, property.value));
+ }
+
+ if (preview.overflow)
+ element.appendChild(document.createTextNode("\u2026"));
+
+ element.appendChild(document.createTextNode(isArray ? "]" : "}"));
+
+ return preview.lossless;
+ },
+
+ _appendValuePreview: function(element, preview)
+ {
+ element.appendChild(this._formattedObjectElementForPreview(preview, preview.description));
+ return true;
+ },
+
+ _formattedObjectElementForPreview: function(propertyPreviewOrObjectPreview, value)
+ {
+ var span = document.createElement("span");
+ span.classList.add(WebInspector.ObjectTreeView.classNameForObject(propertyPreviewOrObjectPreview));
+
+ if (propertyPreviewOrObjectPreview.type === "string") {
+ span.textContent = "\"" + value.replace(/\n/g, "\u21B5").replace(/"/g, "\\\"") + "\"";
+ return span;
+ }
+
+ if (propertyPreviewOrObjectPreview.type === "function") {
+ span.textContent = "function";
+ return span;
+ }
+
+ span.textContent = value;
+ return span;
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectPropertiesSectionjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPropertiesSection.js (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPropertiesSection.js        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPropertiesSection.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -207,7 +207,7 @@
</span><span class="cx"> if (this.property.wasThrown)
</span><span class="cx"> this.valueElement.textContent = "[Exception: " + description + "]";
</span><span class="cx"> else if (this.property.value.type === "string" && typeof description === "string") {
</span><del>- this.valueElement.textContent = "\"" + description.replace(/\n/g, "\u21B5") + "\"";
</del><ins>+ this.valueElement.textContent = "\"" + description.replace(/\n/g, "\u21B5").replace(/"/g, "\\\"") + "\"";
</ins><span class="cx"> this.valueElement._originalTextContent = "\"" + description + "\"";
</span><span class="cx"> } else if (this.property.value.type === "function" && typeof description === "string") {
</span><span class="cx"> this.valueElement.textContent = /.*/.exec(description)[0].replace(/ +$/g, "");
</span><span class="lines">@@ -404,7 +404,7 @@
</span><span class="cx"> else {
</span><span class="cx"> this.appendChild(new WebInspector.ObjectPropertyTreeElement({
</span><span class="cx"> name: "" + i,
</span><del>- value: WebInspector.RemoteObject.fromPayload(entry.value),
</del><ins>+ value: entry.value,
</ins><span class="cx"> enumerable: true,
</span><span class="cx"> writable: false,
</span><span class="cx"> }));
</span><span class="lines">@@ -472,8 +472,8 @@
</span><span class="cx"> console.assert(entry);
</span><span class="cx">
</span><span class="cx"> this._name = "" + index;
</span><del>- this._key = WebInspector.RemoteObject.fromPayload(entry.key);
- this._value = WebInspector.RemoteObject.fromPayload(entry.value);
</del><ins>+ this._key = entry.key;
+ this._value = entry.value;
</ins><span class="cx">
</span><span class="cx"> this.toggleOnClick = true;
</span><span class="cx"> this.selectable = false;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeCollectionTreeElementjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeCollectionTreeElement.js (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeCollectionTreeElement.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeCollectionTreeElement.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,215 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.ObjectTreeCollectionTreeElement = function(remoteObject)
+{
+ console.assert(remoteObject instanceof WebInspector.RemoteObject);
+
+ this._remoteObject = remoteObject;
+ this._requestingEntries = false;
+ this._trackingEntries = false;
+
+ TreeElement.call(this, "<entries>", null, false);
+ this.toggleOnClick = true;
+ this.selectable = false;
+ this.hasChildren = true;
+ this.expand();
+
+ // FIXME: When a parent TreeElement is collapsed, we do not get a chance
+ // to releaseWeakCollectionEntries. We should.
+};
+
+WebInspector.ObjectTreeCollectionTreeElement.propertyDescriptorForEntry = function(name, value)
+{
+ var descriptor = {name: name, value: value, enumerable: true, writable: false};
+ return new WebInspector.PropertyDescriptor(descriptor, true, false, false);
+}
+
+WebInspector.ObjectTreeCollectionTreeElement.prototype = {
+ constructor: WebInspector.ObjectTreeCollectionTreeElement,
+ __proto__: TreeElement.prototype,
+
+ // Public
+
+ get remoteObject()
+ {
+ return this._remoteObject;
+ },
+
+ // Protected
+
+ onexpand: function()
+ {
+ if (this.children.length && !this.shouldRefreshChildren)
+ return;
+
+ if (this._requestingEntries)
+ return;
+
+ this._requestingEntries = true;
+
+ function callback(entries) {
+ this._requestingEntries = false;
+
+ this.removeChildren();
+
+ if (!entries || !entries.length) {
+ this.appendChild(new WebInspector.ObjectTreeEmptyCollectionTreeElement);
+ return;
+ }
+
+ this._trackWeakEntries();
+
+ for (var i = 0; i < entries.length; ++i) {
+ var entry = entries[i];
+ if (entry.key)
+ this.appendChild(new WebInspector.ObjectTreeCollectionEntryTreeElement(entry, i));
+ else {
+ var propertyDescriptor = WebInspector.ObjectTreeCollectionTreeElement.propertyDescriptorForEntry("" + i, entry.value);
+ this.appendChild(new WebInspector.ObjectTreePropertyTreeElement(propertyDescriptor));
+ }
+ }
+ }
+
+ this._remoteObject.getCollectionEntries(0, 100, callback.bind(this));
+ },
+
+ oncollapse: function()
+ {
+ this._untrackWeakEntries();
+ },
+
+ ondetach: function()
+ {
+ this._untrackWeakEntries();
+ },
+
+ // Private.
+
+ _trackWeakEntries: function()
+ {
+ if (!this._remoteObject.isWeakCollection())
+ return;
+
+ if (this._trackingEntries)
+ return;
+
+ this._trackingEntries = true;
+
+ WebInspector.logManager.addEventListener(WebInspector.LogManager.Event.Cleared, this._untrackWeakEntries, this);
+ WebInspector.logManager.addEventListener(WebInspector.LogManager.Event.ActiveLogCleared, this._untrackWeakEntries, this);
+ WebInspector.logManager.addEventListener(WebInspector.LogManager.Event.SessionStarted, this._untrackWeakEntries, this);
+ },
+
+ _untrackWeakEntries: function()
+ {
+ if (!this._remoteObject.isWeakCollection())
+ return;
+
+ if (!this._trackingEntries)
+ return;
+
+ this._trackingEntries = false;
+
+ this._remoteObject.releaseWeakCollectionEntries();
+
+ WebInspector.logManager.removeEventListener(WebInspector.LogManager.Event.Cleared, this._untrackWeakEntries, this);
+ WebInspector.logManager.removeEventListener(WebInspector.LogManager.Event.ActiveLogCleared, this._untrackWeakEntries, this);
+ WebInspector.logManager.removeEventListener(WebInspector.LogManager.Event.SessionStarted, this._untrackWeakEntries, this);
+
+ this.removeChildren();
+
+ if (this.expanded)
+ this.collapse();
+ },
+};
+
+WebInspector.ObjectTreeCollectionEntryTreeElement = function(entry, index)
+{
+ console.assert(entry instanceof WebInspector.CollectionEntry);
+ console.assert(entry.key instanceof WebInspector.RemoteObject);
+ console.assert(entry.value instanceof WebInspector.RemoteObject);
+
+ this._name = "" + index;
+ this._key = entry.key;
+ this._value = entry.value;
+
+ TreeElement.call(this, "", null, false);
+ this.toggleOnClick = true;
+ this.selectable = false;
+ this.hasChildren = true;
+}
+
+WebInspector.ObjectTreeCollectionEntryTreeElement.prototype = {
+ constructor: WebInspector.ObjectTreeCollectionEntryTreeElement,
+ __proto__: TreeElement.prototype,
+
+ // Protected
+
+ onpopulate: function()
+ {
+ if (this.children.length && !this.shouldRefreshChildren)
+ return;
+
+ var keyPropertyDescriptor = WebInspector.ObjectTreeCollectionTreeElement.propertyDescriptorForEntry("key", this._key);
+ this.appendChild(new WebInspector.ObjectTreePropertyTreeElement(keyPropertyDescriptor));
+
+ var valuePropertyDescriptor = WebInspector.ObjectTreeCollectionTreeElement.propertyDescriptorForEntry("value", this._value);
+ this.appendChild(new WebInspector.ObjectTreePropertyTreeElement(valuePropertyDescriptor));
+ },
+
+ onattach: function()
+ {
+ var nameElement = document.createElement("span");
+ nameElement.className = "name";
+ nameElement.textContent = "" + this._name;
+
+ var separatorElement = document.createElement("span");
+ separatorElement.className = "separator";
+ separatorElement.textContent = ": ";
+
+ var valueElement = document.createElement("span");
+ valueElement.className = "value";
+ valueElement.textContent = "{" + this._key.description + " => " + this._value.description + "}";
+
+ this.listItemElement.classList.add("object-tree-property");
+
+ this.listItemElement.removeChildren();
+ this.listItemElement.appendChild(nameElement);
+ this.listItemElement.appendChild(separatorElement);
+ this.listItemElement.appendChild(valueElement);
+ }
+};
+
+WebInspector.ObjectTreeEmptyCollectionTreeElement = function()
+{
+ TreeElement.call(this, WebInspector.UIString("Empty Collection"), null, false);
+ this.selectable = false;
+}
+
+WebInspector.ObjectTreeEmptyCollectionTreeElement.prototype = {
+ constructor: WebInspector.ObjectTreeEmptyCollectionTreeElement,
+ __proto__: TreeElement.prototype
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectTreePropertyTreeElementjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreePropertyTreeElement.js (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreePropertyTreeElement.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreePropertyTreeElement.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,215 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.ObjectTreePropertyTreeElement = function(property, mode)
+{
+ console.assert(property instanceof WebInspector.PropertyDescriptor);
+
+ this._property = property;
+ this._mode = mode || WebInspector.ObjectTreeView.Mode.Properties;
+
+ // FIXME: API Mode not turned on yet.
+ this._mode = WebInspector.ObjectTreeView.Mode.Properties;
+
+ TreeElement.call(this, "", null, false);
+ this.toggleOnClick = true;
+ this.selectable = false;
+};
+
+WebInspector.ObjectTreePropertyTreeElement.prototype = {
+ constructor: WebInspector.ObjectTreePropertyTreeElement,
+ __proto__: TreeElement.prototype,
+
+ // Public
+
+ get property()
+ {
+ return this._property;
+ },
+
+ // Protected
+
+ onpopulate: function()
+ {
+ this._updateChildren();
+ },
+
+ onattach: function()
+ {
+ this.listItemElement.classList.add("object-tree-property");
+
+ this._updateTitle();
+ },
+
+ // Private
+
+ _updateTitle: function()
+ {
+ this.listItemElement.removeChildren();
+
+ if (this._mode === WebInspector.ObjectTreeView.Mode.Properties) {
+ this._updateTitlePropertyStyle();
+ this.hasChildren = this._property.hasValue() && this._property.value.hasChildren && !this._property.wasThrown;
+ } else {
+ this._updateTitleAPIStyle();
+ this.hasChildren = this._property.hasValue() && this._property.value.hasChildren && !this._property.wasThrown && this._property.name === "__proto__";
+ }
+ },
+
+ _updateTitlePropertyStyle: function()
+ {
+ // Property name.
+ var nameElement = document.createElement("span");
+ nameElement.className = "name";
+ nameElement.textContent = this._property.name;
+
+ // Property attributes.
+ if (this._mode === WebInspector.ObjectTreeView.Mode.Properties) {
+ if (!this._property.enumerable)
+ nameElement.classList.add("not-enumerable");
+ }
+
+ // Separator.
+ var separatorElement = document.createElement("span");
+ separatorElement.className = "separator";
+ separatorElement.textContent = ": ";
+
+ // Value / Getter.
+ var valueOrGetterElement = document.createElement("span");
+ valueOrGetterElement.className = "value";
+
+ if (this._property.hasValue()) {
+ valueOrGetterElement.textContent = this._descriptionString();
+ valueOrGetterElement.classList.add(WebInspector.ObjectTreeView.classNameForObject(this._property.value));
+ // FIXME: Context Menu for Value. (See ObjectPropertiesSection).
+ // FIXME: Option+Click for Value.
+ } else {
+ console.assert(this._property.hasGetter());
+ valueOrGetterElement.textContent = "(...)";
+ // FIXME: Click to Populate Value.
+ // FIXME: Context Menu to Populate Value.
+ }
+
+ if (this._property.wasThrown)
+ valueOrGetterElement.classList.add("error");
+
+ this.listItemElement.appendChild(nameElement);
+ this.listItemElement.appendChild(separatorElement);
+ this.listItemElement.appendChild(valueOrGetterElement);
+ },
+
+ _updateTitleAPIStyle: function()
+ {
+ // Fixed value. Display like a property.
+ const propertyNamesToDisplayAsValues = ["__proto__", "constructor"];
+ if (propertyNamesToDisplayAsValues.contains(this._property.name) || (this._property.hasValue() && this._property.value.type !== "function")) {
+ this._updateTitlePropertyStyle();
+ return;
+ }
+
+ // No API to display.
+ var isFunction = this._property.hasValue() && this._property.value.type === "function";
+ if (!isFunction && !this._property.hasGetter() && !this._property.hasSetter())
+ return;
+
+ // Function / Getter / Setter.
+ var nameElement = document.createElement("span");
+ nameElement.className = "name";
+ nameElement.textContent = this._property.name;
+ this.listItemElement.appendChild(nameElement);
+
+ if (isFunction) {
+ var paramElement = document.createElement("span");
+ paramElement.textContent = this._functionParameterString();
+ this.listItemElement.appendChild(paramElement);
+ }
+
+ if (this._property.hasGetter()) {
+ var icon = document.createElement("span");
+ icon.textContent += "[G]";
+ this.listItemElement.appendChild(icon);
+ }
+ if (this._property.hasSetter()) {
+ var icon = document.createElement("span");
+ icon.textContent += "[S]";
+ this.listItemElement.appendChild(icon);
+ }
+ },
+
+ _descriptionString: function()
+ {
+ var value = this._property.value;
+ var description = value.description;
+
+ // Exception.
+ if (this._property.wasThrown)
+ return "[Exception: " + description + "]";
+
+ // String: replace newlines as nice unicode symbols.
+ if (value.type === "string")
+ return "\"" + description.replace(/\n/g, "\u21B5").replace(/"/g, "\\\"") + "\"";
+
+ // Function: Collapse whitespace in function display strings.
+ if (value.type === "function")
+ return /.*/.exec(description)[0].replace(/ +$/g, "");
+
+ return description;
+ },
+
+ _functionParameterString: function()
+ {
+ console.assert(this._property.value.type === "function");
+
+ var match = this._property.value.description.match(/^function.*?(\([^)]+?\))/);
+ return match ? match[1] : "()";
+ },
+
+ _updateChildren: function()
+ {
+ if (this.children.length && !this.shouldRefreshChildren)
+ return;
+
+ function callback(mode, properties)
+ {
+ this.removeChildren();
+
+ if (properties) {
+ properties.sort(WebInspector.ObjectTreeView.ComparePropertyDescriptors);
+ for (var propertyDescriptor of properties)
+ this.appendChild(new WebInspector.ObjectTreePropertyTreeElement(propertyDescriptor, mode));
+ }
+
+ if (mode === WebInspector.ObjectTreeView.Mode.Properties) {
+ if (this._property.value.isCollectionType())
+ this.appendChild(new WebInspector.ObjectTreeCollectionTreeElement(this._property.value));
+ }
+ };
+
+ if (this._property.name === "__proto__")
+ this._property.value.getOwnPropertyDescriptors(callback.bind(this, WebInspector.ObjectTreeView.Mode.API));
+ else
+ this._property.value.getOwnAndGetterPropertyDescriptors(callback.bind(this, this._mode));
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeViewcss"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.css (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.css         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.css        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,203 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+.object-tree {
+ position: relative;
+}
+
+.object-tree > .title {
+ color: black;
+ padding: 0 8px 0 18px;
+ min-height: 18px;
+ white-space: nowrap;
+ background-origin: padding;
+ background-clip: padding;
+}
+
+.object-tree > :matches(.title, .object-preview)::before {
+ position: absolute;
+ top: 5px;
+ left: 7px;
+
+ width: 8px;
+ height: 8px;
+
+ background-image: -webkit-canvas(disclosure-triangle-tiny-closed-normal);
+ background-size: 8px 8px;
+ background-repeat: no-repeat;
+
+ content: "";
+}
+
+.object-tree.expanded > :matches(.title, .object-preview)::before {
+ background-image: -webkit-canvas(disclosure-triangle-tiny-open-normal);
+}
+
+.object-tree.lossless-preview > :matches(.title, .object-preview)::before {
+ background: none;
+ width: 0px;
+}
+
+.object-tree-outline {
+ display: none;
+}
+
+.object-tree.expanded > .object-tree-outline {
+ display: block;
+ padding-left: 16px;
+}
+
+.object-tree-outline {
+ margin: 0;
+ padding: 0 6px 2px;
+ list-style: none;
+ min-height: 18px;
+ outline: none;
+}
+
+.object-tree-outline li {
+ margin-left: 12px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ -webkit-user-select: text;
+ cursor: default;
+}
+
+.object-tree-outline li.parent {
+ margin-left: 1px;
+}
+
+.object-tree-outline li.parent::before {
+ float: left;
+
+ content: "";
+
+ background-image: -webkit-canvas(disclosure-triangle-tiny-closed-normal);
+ background-size: 8px 8px;
+ background-repeat: no-repeat;
+
+ width: 8px;
+ height: 8px;
+
+ margin-top: 3px;
+ padding-right: 2px;
+}
+
+.object-tree-outline li.parent.expanded::before {
+ background-image: -webkit-canvas(disclosure-triangle-tiny-open-normal);
+}
+
+.object-tree-outline ol {
+ display: none;
+ margin: 0;
+ -webkit-padding-start: 12px;
+ list-style: none;
+}
+
+.object-tree-outline ol.expanded {
+ display: block;
+}
+
+.object-tree-outline li .empty-message {
+ padding-top: 0;
+ padding-bottom: 0;
+ color: rgb(60%, 60%, 60%);
+}
+
+/* Property Colors */
+
+.object-tree-property .name {
+ color: rgb(136, 19, 145);
+}
+
+.object-tree-property .name.not-enumerable {
+ opacity: 0.6;
+}
+
+.object-tree-property .value.error {
+ color: red;
+}
+
+
+/* Object Tree Type Colors */
+
+.formatted-object, .formatted-node, .formatted-error, .formatted-map, .formatted-set, .formatted-weakmap {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+ color: black;
+}
+
+.formatted-number {
+ color: rgb(28, 0, 207);
+}
+
+.formatted-string, .formatted-regexp {
+ white-space: pre;
+}
+
+.formatted-string {
+ color: rgb(196, 26, 22);
+}
+
+.formatted-regexp {
+ color: rgb(255, 88, 0);
+}
+
+.formatted-symbol {
+ color: rgb(63, 169, 156);
+}
+
+.formatted-null, .formatted-undefined {
+ color: rgb(128, 128, 128);
+}
+
+
+/* Console Overrides */
+
+.console-group-messages .object-tree:not(.lossless-preview) {
+ margin: 0 0 0 12px !important;
+}
+
+.console-group-messages .object-tree:not(.lossless-preview) > :matches(.title, .object-preview) {
+ padding: 0 8px 0 0;
+}
+
+.console-group-messages .object-tree:not(.lossless-preview) > :matches(.title, .object-preview)::before {
+ top: 2px;
+ left: 1px;
+}
+
+/* FIXME: Transitioning the console over to formatted-object */
+.console-group-messages :matches(.formatted-object, .formatted-node, .formatted-error, .formatted-map, .formatted-set, .formatted-weakmap) .object-tree,
+.console-group-messages :matches(.console-formatted-object, .console-formatted-node, .console-formatted-error, .console-formatted-map, .console-formatted-set, .console-formatted-weakmap) .object-tree {
+ position: static;
+}
+
+.console-group-messages :matches(.formatted-object, .formatted-node, .formatted-error, .formatted-map, .formatted-set, .formatted-weakmap) .object-tree-outline,
+.console-group-messages :matches(.console-formatted-object, .console-formatted-node, .console-formatted-error, .console-formatted-map, .console-formatted-set, .console-formatted-weakmap) .object-tree-outline {
+ padding-left: 0 !important;
+}
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeViewjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.js (0 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -0,0 +1,226 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.ObjectTreeView = function(object, mode, forceExpanding)
+{
+ WebInspector.Object.call(this);
+
+ console.assert(object instanceof WebInspector.RemoteObject);
+
+ this._object = object;
+ this._mode = mode || WebInspector.ObjectTreeView.Mode.Properties;
+ this._expanded = false;
+ this._hasLosslessPreview = false;
+
+ this._element = document.createElement("div");
+ this._element.className = "object-tree";
+
+ if (this._object.preview) {
+ var previewView = new WebInspector.ObjectPreviewView(this._object.preview);
+ this._previewElement = previewView.element;
+ this._previewElement.addEventListener("click", this._handlePreviewOrTitleElementClick.bind(this));
+ this._element.appendChild(this._previewElement);
+
+ if (previewView.lossless && !forceExpanding) {
+ this._hasLosslessPreview = true;
+ this.element.classList.add("lossless-preview");
+ }
+ }
+
+ this._titleElement = document.createElement("span");
+ this._titleElement.className = "title";
+ this._titleElement.textContent = this._object.description || "";
+ this._titleElement.addEventListener("click", this._handlePreviewOrTitleElementClick.bind(this));
+ this._element.appendChild(this._titleElement);
+
+ if (this._object.preview)
+ this._titleElement.hidden = true;
+
+ this._outlineElement = document.createElement("ol");
+ this._outlineElement.className = "object-tree-outline";
+ this._outline = new TreeOutline(this._outlineElement);
+ this._element.appendChild(this._outlineElement);
+
+ // FIXME: Support editable ObjectTrees.
+};
+
+WebInspector.ObjectTreeView.Mode = {
+ Properties: Symbol("object-tree-properties"),
+ API: Symbol("object-tree-api"),
+};
+
+WebInspector.ObjectTreeView.classNameForObject = function(object)
+{
+ return "formatted-" + (object.subtype ? object.subtype : object.type);
+}
+
+WebInspector.ObjectTreeView.ComparePropertyDescriptors = function(propertyA, propertyB)
+{
+ var a = propertyA.name;
+ var b = propertyB.name;
+
+ // Put __proto__ at the bottom.
+ if (a === "__proto__")
+ return 1;
+ if (b === "__proto__")
+ return -1;
+
+ // Put internal properties at the top.
+ if (a.isInternalProperty && !b.isInternalProperty)
+ return -1;
+ if (b.isInternalProperty && !a.isInternalProperty)
+ return 1;
+
+ // if used elsewhere make sure to
+ // - convert a and b to strings (not needed here, properties are all strings)
+ // - check if a == b (not needed here, no two properties can be the same)
+
+ var diff = 0;
+ var chunk = /^\d+|^\D+/;
+ var chunka, chunkb, anum, bnum;
+ while (diff === 0) {
+ if (!a && b)
+ return -1;
+ if (!b && a)
+ return 1;
+ chunka = a.match(chunk)[0];
+ chunkb = b.match(chunk)[0];
+ anum = !isNaN(chunka);
+ bnum = !isNaN(chunkb);
+ if (anum && !bnum)
+ return -1;
+ if (bnum && !anum)
+ return 1;
+ if (anum && bnum) {
+ diff = chunka - chunkb;
+ if (diff === 0 && chunka.length !== chunkb.length) {
+ if (!+chunka && !+chunkb) // chunks are strings of all 0s (special case)
+ return chunka.length - chunkb.length;
+ else
+ return chunkb.length - chunka.length;
+ }
+ } else if (chunka !== chunkb)
+ return (chunka < chunkb) ? -1 : 1;
+ a = a.substring(chunka.length);
+ b = b.substring(chunkb.length);
+ }
+ return diff;
+};
+
+WebInspector.ObjectTreeView.prototype = {
+ constructor: WebInspector.ObjectTreeView,
+ __proto__: WebInspector.Object,
+
+ // Public
+
+ get object()
+ {
+ return this._object;
+ },
+
+ get element()
+ {
+ return this._element;
+ },
+
+ get expanded()
+ {
+ return this._expanded;
+ },
+
+ expand: function()
+ {
+ if (this._expanded)
+ return;
+
+ this._expanded = true;
+ this._element.classList.add("expanded");
+
+ if (this._previewElement) {
+ this._previewElement.hidden = true;
+ this._titleElement.hidden = false;
+ }
+
+ this.update();
+ },
+
+ collapse: function()
+ {
+ if (!this._expanded)
+ return;
+
+ this._expanded = false;
+ this._element.classList.remove("expanded");
+
+ if (this._previewElement) {
+ this._previewElement.hidden = false;
+ this._titleElement.hidden = true;
+ }
+ },
+
+ // Protected
+
+ update: function()
+ {
+ this._object.getOwnAndGetterPropertyDescriptors(this._updateProperties.bind(this));
+ },
+
+ // Private
+
+ _updateProperties: function(properties)
+ {
+ properties.sort(WebInspector.ObjectTreeView.ComparePropertyDescriptors);
+
+ this._outline.removeChildren();
+
+ for (var propertyDescriptor of properties)
+ this._outline.appendChild(new WebInspector.ObjectTreePropertyTreeElement(propertyDescriptor, this._mode));
+
+ if (this._mode === WebInspector.ObjectTreeView.Mode.Properties) {
+ if (this._object.isCollectionType())
+ this._outline.appendChild(new WebInspector.ObjectTreeCollectionTreeElement(this._object));
+ }
+
+ if (!this._outline.children.length) {
+ var emptyMessageElement = document.createElement("div");
+ emptyMessageElement.className = "empty-message";
+ emptyMessageElement.textContent = WebInspector.UIString("No Properties");;
+ this._outline.appendChild(new TreeElement(emptyMessageElement, null, false));
+ }
+ },
+
+ _handlePreviewOrTitleElementClick: function(event)
+ {
+ if (this._hasLosslessPreview)
+ return;
+
+ if (!this._expanded)
+ this.expand();
+ else
+ this.collapse();
+
+ event.stopPropagation();
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsTreeOutlineDataGridSynchronizerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TreeOutlineDataGridSynchronizer.js (180355 => 180356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/TreeOutlineDataGridSynchronizer.js        2015-02-19 20:06:46 UTC (rev 180355)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TreeOutlineDataGridSynchronizer.js        2015-02-19 20:25:04 UTC (rev 180356)
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx">
</span><span class="cx"> WebInspector.TreeOutlineDataGridSynchronizer.prototype = {
</span><span class="cx"> constructor: WebInspector.TreeOutlineDataGridSynchronizer,
</span><del>- __proto__: WebInspector.Object,
</del><ins>+ __proto__: WebInspector.Object.prototype,
</ins><span class="cx">
</span><span class="cx"> // Public
</span><span class="cx">
</span></span></pre>
</div>
</div>
</body>
</html>