1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
10 } = require("resource://devtools/client/shared/vendor/react.js");
12 loader
.lazyGetter(this, "REPS", function () {
13 return require("resource://devtools/client/shared/components/reps/index.js")
16 loader
.lazyGetter(this, "MODE", function () {
17 return require("resource://devtools/client/shared/components/reps/index.js")
20 loader
.lazyGetter(this, "ObjectInspector", function () {
21 const objectInspector
= require("resource://devtools/client/shared/components/object-inspector/index.js");
22 return createFactory(objectInspector
.ObjectInspector
);
25 loader
.lazyRequireGetter(
28 "resource://devtools/client/shared/components/SmartTrace.js"
31 loader
.lazyRequireGetter(
34 "resource://devtools/client/fronts/string.js",
38 loader
.lazyRequireGetter(
41 "resource://devtools/client/fronts/object.js",
46 * Create and return an ObjectInspector for the given front.
48 * @param {Object} grip
49 * The object grip to create an ObjectInspector for.
50 * @param {Object} serviceContainer
51 * Object containing various utility functions
52 * @param {Object} override
53 * Object containing props that should override the default props passed to
55 * @returns {ObjectInspector}
56 * An ObjectInspector for the given grip.
58 function getObjectInspector(
63 let onDOMNodeMouseOver
;
64 let onDOMNodeMouseOut
;
65 let onInspectIconClick
;
67 if (serviceContainer
) {
68 onDOMNodeMouseOver
= serviceContainer
.highlightDomElement
69 ? object
=> serviceContainer
.highlightDomElement(object
)
71 onDOMNodeMouseOut
= serviceContainer
.unHighlightDomElement
72 ? object
=> serviceContainer
.unHighlightDomElement(object
)
74 onInspectIconClick
= serviceContainer
.openNodeInInspector
76 // Stop the event propagation so we don't trigger ObjectInspector expand/collapse.
78 serviceContainer
.openNodeInInspector(object
);
83 const roots
= createRoots(frontOrPrimitiveGrip
, override
.pathPrefix
);
85 const objectInspectorProps
= {
90 onViewSourceInDebugger
: serviceContainer
.onViewSourceInDebugger
,
91 recordTelemetryEvent
: serviceContainer
.recordTelemetryEvent
,
92 openLink
: serviceContainer
.openLink
,
93 sourceMapURLService
: serviceContainer
.sourceMapURLService
,
94 customFormat
: override
.customFormat
!== false,
95 setExpanded
: override
.setExpanded
,
96 initiallyExpanded
: override
.initiallyExpanded
,
97 queueActorsForCleanup
: override
.queueActorsForCleanup
,
98 cachedNodes
: override
.cachedNodes
,
100 renderStacktrace
: stacktrace
=> {
104 onViewSourceInDebugger
: serviceContainer
105 ? serviceContainer
.onViewSourceInDebugger
||
106 serviceContainer
.onViewSource
108 onViewSource
: serviceContainer
.onViewSource
,
109 onReady
: override
.maybeScrollToBottom
,
110 sourceMapURLService
: serviceContainer
111 ? serviceContainer
.sourceMapURLService
115 if (serviceContainer
?.preventStacktraceInitialRenderDelay
) {
116 attrs
.initialRenderDelay
= 0;
118 return createElement(SmartTrace
, attrs
);
123 defaultRep
: REPS
.Grip
,
124 createElement
: serviceContainer
?.createElement
,
125 mayUseCustomFormatter
: true,
129 if (override
.autoFocusRoot
) {
130 Object
.assign(objectInspectorProps
, {
131 focusedItem
: objectInspectorProps
.roots
[0],
135 return ObjectInspector(objectInspectorProps
);
138 function createRoots(frontOrPrimitiveGrip
, pathPrefix
= "") {
140 frontOrPrimitiveGrip
instanceof ObjectFront
||
141 frontOrPrimitiveGrip
instanceof LongStringFront
;
142 const grip
= isFront
? frontOrPrimitiveGrip
.getGrip() : frontOrPrimitiveGrip
;
146 path
: `${pathPrefix}${
148 ? frontOrPrimitiveGrip.actorID || frontOrPrimitiveGrip.actor
151 contents
: { value
: grip
, front
: isFront
? frontOrPrimitiveGrip
: null },