Files
sousa-gecko/devtools/client/webconsole/utils/object-inspector.js
T
2018-04-13 17:47:37 +02:00

95 lines
2.9 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const { createFactory } = require("devtools/client/shared/vendor/react");
const ObjectClient = require("devtools/shared/client/object-client");
const LongStringClient = require("devtools/shared/client/long-string-client");
const reps = require("devtools/client/shared/components/reps/reps");
const { REPS, MODE } = reps;
const ObjectInspector = createFactory(reps.ObjectInspector);
const { Grip } = REPS;
/**
* Create and return an ObjectInspector for the given grip.
*
* @param {Object} grip
* The object grip to create an ObjectInspector for.
* @param {Object} serviceContainer
* Object containing various utility functions
* @param {Object} override
* Object containing props that should override the default props passed to
* ObjectInspector.
* @returns {ObjectInspector}
* An ObjectInspector for the given grip.
*/
function getObjectInspector(grip, serviceContainer, override = {}) {
let onDOMNodeMouseOver;
let onDOMNodeMouseOut;
let onInspectIconClick;
if (serviceContainer) {
onDOMNodeMouseOver = serviceContainer.highlightDomElement
? (object) => serviceContainer.highlightDomElement(object)
: null;
onDOMNodeMouseOut = serviceContainer.unHighlightDomElement;
onInspectIconClick = serviceContainer.openNodeInInspector
? (object, e) => {
// Stop the event propagation so we don't trigger ObjectInspector expand/collapse.
e.stopPropagation();
serviceContainer.openNodeInInspector(object);
}
: null;
}
const roots = createRootsFromGrip(grip);
const objectInspectorProps = {
autoExpandDepth: 0,
mode: MODE.LONG,
roots,
createObjectClient: object =>
new ObjectClient(serviceContainer.hudProxy.client, object),
createLongStringClient: object =>
new LongStringClient(serviceContainer.hudProxy.client, object),
releaseActor: actor => {
if (!actor || !serviceContainer.hudProxy.releaseActor) {
return;
}
serviceContainer.hudProxy.releaseActor(actor);
},
onViewSourceInDebugger: serviceContainer.onViewSourceInDebugger,
openLink: serviceContainer.openLink,
};
if (!(typeof grip === "string" || (grip && grip.type === "longString"))) {
Object.assign(objectInspectorProps, {
onDOMNodeMouseOver,
onDOMNodeMouseOut,
onInspectIconClick,
defaultRep: Grip,
});
}
if (override.autoFocusRoot) {
Object.assign(objectInspectorProps, {
focusedItem: roots[0]
});
}
return ObjectInspector({...objectInspectorProps, ...override});
}
function createRootsFromGrip(grip) {
return [{
path: (grip && grip.actor) || JSON.stringify(grip),
contents: { value: grip }
}];
}
module.exports = {
getObjectInspector,
};