| Index: third_party/WebKit/Source/devtools/front_end/components/ObjectPopoverHelper.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/components/ObjectPopoverHelper.js b/third_party/WebKit/Source/devtools/front_end/components/ObjectPopoverHelper.js
|
| index 0e643beb5cbb63a6040b3c14aca7d567e4594a7f..5573ba134917d9b980dafd45afa24d9752fb36bb 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/components/ObjectPopoverHelper.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/components/ObjectPopoverHelper.js
|
| @@ -27,177 +27,173 @@
|
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| */
|
| -
|
| /**
|
| - * @constructor
|
| - * @extends {WebInspector.PopoverHelper}
|
| - * @param {!Element} panelElement
|
| - * @param {function(!Element, !Event):(!Element|!AnchorBox|undefined)} getAnchor
|
| - * @param {function(!Element, function(!WebInspector.RemoteObject, boolean, !Element=):undefined, string):undefined} queryObject
|
| - * @param {function()=} onHide
|
| - * @param {boolean=} disableOnClick
|
| + * @unrestricted
|
| */
|
| -WebInspector.ObjectPopoverHelper = function(panelElement, getAnchor, queryObject, onHide, disableOnClick)
|
| -{
|
| - WebInspector.PopoverHelper.call(this, panelElement, disableOnClick);
|
| +WebInspector.ObjectPopoverHelper = class extends WebInspector.PopoverHelper {
|
| + /**
|
| + * @param {!Element} panelElement
|
| + * @param {function(!Element, !Event):(!Element|!AnchorBox|undefined)} getAnchor
|
| + * @param {function(!Element, function(!WebInspector.RemoteObject, boolean, !Element=):undefined, string):undefined} queryObject
|
| + * @param {function()=} onHide
|
| + * @param {boolean=} disableOnClick
|
| + */
|
| + constructor(panelElement, getAnchor, queryObject, onHide, disableOnClick) {
|
| + super(panelElement, disableOnClick);
|
| this.initializeCallbacks(getAnchor, this._showObjectPopover.bind(this), this._onHideObjectPopover.bind(this));
|
| this._queryObject = queryObject;
|
| this._onHideCallback = onHide;
|
| - this._popoverObjectGroup = "popover";
|
| - panelElement.addEventListener("scroll", this.hidePopover.bind(this), true);
|
| -};
|
| + this._popoverObjectGroup = 'popover';
|
| + panelElement.addEventListener('scroll', this.hidePopover.bind(this), true);
|
| + }
|
|
|
| -WebInspector.ObjectPopoverHelper.MaxPopoverTextLength = 10000;
|
| -
|
| -WebInspector.ObjectPopoverHelper.prototype = {
|
| + /**
|
| + * @param {!Element} element
|
| + * @param {!WebInspector.Popover} popover
|
| + */
|
| + _showObjectPopover(element, popover) {
|
| /**
|
| - * @param {!Element} element
|
| - * @param {!WebInspector.Popover} popover
|
| + * @param {!WebInspector.RemoteObject} funcObject
|
| + * @param {!Element} popoverContentElement
|
| + * @param {!Element} popoverValueElement
|
| + * @param {!Element} anchorElement
|
| + * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
|
| + * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
|
| + * @this {WebInspector.ObjectPopoverHelper}
|
| */
|
| - _showObjectPopover: function(element, popover)
|
| - {
|
| - /**
|
| - * @param {!WebInspector.RemoteObject} funcObject
|
| - * @param {!Element} popoverContentElement
|
| - * @param {!Element} popoverValueElement
|
| - * @param {!Element} anchorElement
|
| - * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
|
| - * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
|
| - * @this {WebInspector.ObjectPopoverHelper}
|
| - */
|
| - function didGetFunctionProperties(funcObject, popoverContentElement, popoverValueElement, anchorElement, properties, internalProperties)
|
| - {
|
| - if (internalProperties) {
|
| - for (var i = 0; i < internalProperties.length; i++) {
|
| - if (internalProperties[i].name === "[[TargetFunction]]") {
|
| - funcObject = internalProperties[i].value;
|
| - break;
|
| - }
|
| - }
|
| - }
|
| - WebInspector.ObjectPropertiesSection.formatObjectAsFunction(funcObject, popoverValueElement, true);
|
| - funcObject.debuggerModel().functionDetailsPromise(funcObject).then(didGetFunctionDetails.bind(this, popoverContentElement, anchorElement));
|
| + function didGetFunctionProperties(
|
| + funcObject, popoverContentElement, popoverValueElement, anchorElement, properties, internalProperties) {
|
| + if (internalProperties) {
|
| + for (var i = 0; i < internalProperties.length; i++) {
|
| + if (internalProperties[i].name === '[[TargetFunction]]') {
|
| + funcObject = internalProperties[i].value;
|
| + break;
|
| + }
|
| }
|
| + }
|
| + WebInspector.ObjectPropertiesSection.formatObjectAsFunction(funcObject, popoverValueElement, true);
|
| + funcObject.debuggerModel()
|
| + .functionDetailsPromise(funcObject)
|
| + .then(didGetFunctionDetails.bind(this, popoverContentElement, anchorElement));
|
| + }
|
|
|
| - /**
|
| - * @param {!Element} popoverContentElement
|
| - * @param {!Element} anchorElement
|
| - * @param {?WebInspector.DebuggerModel.FunctionDetails} response
|
| - * @this {WebInspector.ObjectPopoverHelper}
|
| - */
|
| - function didGetFunctionDetails(popoverContentElement, anchorElement, response)
|
| - {
|
| - if (!response || popover.disposed)
|
| - return;
|
| -
|
| - var container = createElementWithClass("div", "object-popover-container");
|
| - var title = container.createChild("div", "function-popover-title source-code");
|
| - var functionName = title.createChild("span", "function-name");
|
| - functionName.textContent = WebInspector.beautifyFunctionName(response.functionName);
|
| -
|
| - var rawLocation = response.location;
|
| - var linkContainer = title.createChild("div", "function-title-link-container");
|
| - if (rawLocation && Runtime.experiments.isEnabled("continueToFirstInvocation")) {
|
| - var sectionToolbar = new WebInspector.Toolbar("function-location-step-into", linkContainer);
|
| - var stepInto = new WebInspector.ToolbarButton(WebInspector.UIString("Continue to first invocation"), "step-in-toolbar-item");
|
| - stepInto.addEventListener("click", () => rawLocation.continueToLocation());
|
| - sectionToolbar.appendToolbarItem(stepInto);
|
| - }
|
| - var sourceURL = rawLocation && rawLocation.script() ? rawLocation.script().sourceURL : null;
|
| - if (rawLocation && sourceURL)
|
| - linkContainer.appendChild(this._lazyLinkifier().linkifyRawLocation(rawLocation, sourceURL));
|
| - container.appendChild(popoverContentElement);
|
| - popover.showForAnchor(container, anchorElement);
|
| - }
|
| + /**
|
| + * @param {!Element} popoverContentElement
|
| + * @param {!Element} anchorElement
|
| + * @param {?WebInspector.DebuggerModel.FunctionDetails} response
|
| + * @this {WebInspector.ObjectPopoverHelper}
|
| + */
|
| + function didGetFunctionDetails(popoverContentElement, anchorElement, response) {
|
| + if (!response || popover.disposed)
|
| + return;
|
|
|
| - /**
|
| - * @param {!WebInspector.RemoteObject} result
|
| - * @param {boolean} wasThrown
|
| - * @param {!Element=} anchorOverride
|
| - * @this {WebInspector.ObjectPopoverHelper}
|
| - */
|
| - function didQueryObject(result, wasThrown, anchorOverride)
|
| - {
|
| - if (popover.disposed)
|
| - return;
|
| - if (wasThrown) {
|
| - this.hidePopover();
|
| - return;
|
| - }
|
| - this._objectTarget = result.target();
|
| - var anchorElement = anchorOverride || element;
|
| - var description = result.description.trimEnd(WebInspector.ObjectPopoverHelper.MaxPopoverTextLength);
|
| - var popoverContentElement = null;
|
| - if (result.type !== "object") {
|
| - popoverContentElement = createElement("span");
|
| - WebInspector.appendStyle(popoverContentElement, "components/objectValue.css");
|
| - var valueElement = popoverContentElement.createChild("span", "monospace object-value-" + result.type);
|
| - valueElement.style.whiteSpace = "pre";
|
| + var container = createElementWithClass('div', 'object-popover-container');
|
| + var title = container.createChild('div', 'function-popover-title source-code');
|
| + var functionName = title.createChild('span', 'function-name');
|
| + functionName.textContent = WebInspector.beautifyFunctionName(response.functionName);
|
|
|
| - if (result.type === "string")
|
| - valueElement.createTextChildren("\"", description, "\"");
|
| - else if (result.type !== "function")
|
| - valueElement.textContent = description;
|
| + var rawLocation = response.location;
|
| + var linkContainer = title.createChild('div', 'function-title-link-container');
|
| + if (rawLocation && Runtime.experiments.isEnabled('continueToFirstInvocation')) {
|
| + var sectionToolbar = new WebInspector.Toolbar('function-location-step-into', linkContainer);
|
| + var stepInto = new WebInspector.ToolbarButton(
|
| + WebInspector.UIString('Continue to first invocation'), 'step-in-toolbar-item');
|
| + stepInto.addEventListener('click', () => rawLocation.continueToLocation());
|
| + sectionToolbar.appendToolbarItem(stepInto);
|
| + }
|
| + var sourceURL = rawLocation && rawLocation.script() ? rawLocation.script().sourceURL : null;
|
| + if (rawLocation && sourceURL)
|
| + linkContainer.appendChild(this._lazyLinkifier().linkifyRawLocation(rawLocation, sourceURL));
|
| + container.appendChild(popoverContentElement);
|
| + popover.showForAnchor(container, anchorElement);
|
| + }
|
|
|
| - if (result.type === "function") {
|
| - result.getOwnProperties(didGetFunctionProperties.bind(this, result, popoverContentElement, valueElement, anchorElement));
|
| - return;
|
| - }
|
| - popover.showForAnchor(popoverContentElement, anchorElement);
|
| - } else {
|
| - if (result.subtype === "node") {
|
| - WebInspector.DOMModel.highlightObjectAsDOMNode(result);
|
| - this._resultHighlightedAsDOM = true;
|
| - }
|
| + /**
|
| + * @param {!WebInspector.RemoteObject} result
|
| + * @param {boolean} wasThrown
|
| + * @param {!Element=} anchorOverride
|
| + * @this {WebInspector.ObjectPopoverHelper}
|
| + */
|
| + function didQueryObject(result, wasThrown, anchorOverride) {
|
| + if (popover.disposed)
|
| + return;
|
| + if (wasThrown) {
|
| + this.hidePopover();
|
| + return;
|
| + }
|
| + this._objectTarget = result.target();
|
| + var anchorElement = anchorOverride || element;
|
| + var description = result.description.trimEnd(WebInspector.ObjectPopoverHelper.MaxPopoverTextLength);
|
| + var popoverContentElement = null;
|
| + if (result.type !== 'object') {
|
| + popoverContentElement = createElement('span');
|
| + WebInspector.appendStyle(popoverContentElement, 'components/objectValue.css');
|
| + var valueElement = popoverContentElement.createChild('span', 'monospace object-value-' + result.type);
|
| + valueElement.style.whiteSpace = 'pre';
|
|
|
| - if (result.customPreview()) {
|
| - var customPreviewComponent = new WebInspector.CustomPreviewComponent(result);
|
| - customPreviewComponent.expandIfPossible();
|
| - popoverContentElement = customPreviewComponent.element;
|
| - } else {
|
| - popoverContentElement = createElement("div");
|
| - this._titleElement = popoverContentElement.createChild("div", "monospace");
|
| - this._titleElement.createChild("span", "source-frame-popover-title").textContent = description;
|
| - var section = new WebInspector.ObjectPropertiesSection(result, "", this._lazyLinkifier());
|
| - section.element.classList.add("source-frame-popover-tree");
|
| - section.titleLessMode();
|
| - popoverContentElement.appendChild(section.element);
|
| - }
|
| - var popoverWidth = 300;
|
| - var popoverHeight = 250;
|
| - popover.showForAnchor(popoverContentElement, anchorElement, popoverWidth, popoverHeight);
|
| - }
|
| - }
|
| - this._queryObject(element, didQueryObject.bind(this), this._popoverObjectGroup);
|
| - },
|
| + if (result.type === 'string')
|
| + valueElement.createTextChildren('"', description, '"');
|
| + else if (result.type !== 'function')
|
| + valueElement.textContent = description;
|
|
|
| - _onHideObjectPopover: function()
|
| - {
|
| - if (this._resultHighlightedAsDOM) {
|
| - WebInspector.DOMModel.hideDOMNodeHighlight();
|
| - delete this._resultHighlightedAsDOM;
|
| + if (result.type === 'function') {
|
| + result.getOwnProperties(
|
| + didGetFunctionProperties.bind(this, result, popoverContentElement, valueElement, anchorElement));
|
| + return;
|
| }
|
| - if (this._linkifier) {
|
| - this._linkifier.dispose();
|
| - delete this._linkifier;
|
| + popover.showForAnchor(popoverContentElement, anchorElement);
|
| + } else {
|
| + if (result.subtype === 'node') {
|
| + WebInspector.DOMModel.highlightObjectAsDOMNode(result);
|
| + this._resultHighlightedAsDOM = true;
|
| }
|
| - if (this._onHideCallback)
|
| - this._onHideCallback();
|
| - if (this._objectTarget) {
|
| - this._objectTarget.runtimeAgent().releaseObjectGroup(this._popoverObjectGroup);
|
| - delete this._objectTarget;
|
| +
|
| + if (result.customPreview()) {
|
| + var customPreviewComponent = new WebInspector.CustomPreviewComponent(result);
|
| + customPreviewComponent.expandIfPossible();
|
| + popoverContentElement = customPreviewComponent.element;
|
| + } else {
|
| + popoverContentElement = createElement('div');
|
| + this._titleElement = popoverContentElement.createChild('div', 'monospace');
|
| + this._titleElement.createChild('span', 'source-frame-popover-title').textContent = description;
|
| + var section = new WebInspector.ObjectPropertiesSection(result, '', this._lazyLinkifier());
|
| + section.element.classList.add('source-frame-popover-tree');
|
| + section.titleLessMode();
|
| + popoverContentElement.appendChild(section.element);
|
| }
|
| - },
|
| + var popoverWidth = 300;
|
| + var popoverHeight = 250;
|
| + popover.showForAnchor(popoverContentElement, anchorElement, popoverWidth, popoverHeight);
|
| + }
|
| + }
|
| + this._queryObject(element, didQueryObject.bind(this), this._popoverObjectGroup);
|
| + }
|
|
|
| - /**
|
| - * @return {!WebInspector.Linkifier}
|
| - */
|
| - _lazyLinkifier: function()
|
| - {
|
| - if (!this._linkifier)
|
| - this._linkifier = new WebInspector.Linkifier();
|
| - return this._linkifier;
|
| - },
|
| + _onHideObjectPopover() {
|
| + if (this._resultHighlightedAsDOM) {
|
| + WebInspector.DOMModel.hideDOMNodeHighlight();
|
| + delete this._resultHighlightedAsDOM;
|
| + }
|
| + if (this._linkifier) {
|
| + this._linkifier.dispose();
|
| + delete this._linkifier;
|
| + }
|
| + if (this._onHideCallback)
|
| + this._onHideCallback();
|
| + if (this._objectTarget) {
|
| + this._objectTarget.runtimeAgent().releaseObjectGroup(this._popoverObjectGroup);
|
| + delete this._objectTarget;
|
| + }
|
| + }
|
|
|
| - __proto__: WebInspector.PopoverHelper.prototype
|
| + /**
|
| + * @return {!WebInspector.Linkifier}
|
| + */
|
| + _lazyLinkifier() {
|
| + if (!this._linkifier)
|
| + this._linkifier = new WebInspector.Linkifier();
|
| + return this._linkifier;
|
| + }
|
| };
|
| +
|
| +WebInspector.ObjectPopoverHelper.MaxPopoverTextLength = 10000;
|
|
|