ObjectPopoverHelper.js 3.3 KB

123456789101112
  1. export default class ObjectPopoverHelper{constructor(linkifier,resultHighlightedAsDOM){this._linkifier=linkifier;this._resultHighlightedAsDOM=resultHighlightedAsDOM;}
  2. dispose(){if(this._resultHighlightedAsDOM){SDK.OverlayModel.hideDOMNodeHighlight();}
  3. if(this._linkifier){this._linkifier.dispose();}}
  4. static async buildObjectPopover(result,popover){const description=result.description.trimEndWithMaxLength(MaxPopoverTextLength);let popoverContentElement=null;if(result.type==='object'){let linkifier=null;let resultHighlightedAsDOM=false;if(result.subtype==='node'){SDK.OverlayModel.highlightObjectAsDOMNode(result);resultHighlightedAsDOM=true;}
  5. if(result.customPreview()){const customPreviewComponent=new ObjectUI.CustomPreviewComponent(result);customPreviewComponent.expandIfPossible();popoverContentElement=customPreviewComponent.element;}else{popoverContentElement=createElementWithClass('div','object-popover-content');UI.appendStyle(popoverContentElement,'object_ui/objectPopover.css');const titleElement=popoverContentElement.createChild('div','monospace object-popover-title');titleElement.createChild('span').textContent=description;linkifier=new Components.Linkifier();const section=new ObjectUI.ObjectPropertiesSection(result,'',linkifier,undefined,undefined,undefined,true);section.element.classList.add('object-popover-tree');section.titleLessMode();popoverContentElement.appendChild(section.element);}
  6. popover.setMaxContentSize(new UI.Size(300,250));popover.setSizeBehavior(UI.GlassPane.SizeBehavior.SetExactSize);popover.contentElement.appendChild(popoverContentElement);return new ObjectPopoverHelper(linkifier,resultHighlightedAsDOM);}
  7. popoverContentElement=createElement('span');UI.appendStyle(popoverContentElement,'object_ui/objectValue.css');UI.appendStyle(popoverContentElement,'object_ui/objectPopover.css');const valueElement=popoverContentElement.createChild('span','monospace object-value-'+result.type);valueElement.style.whiteSpace='pre';if(result.type==='string'){valueElement.createTextChildren(`"${description}"`);}else if(result.type!=='function'){valueElement.textContent=description;}
  8. if(result.type!=='function'){popover.contentElement.appendChild(popoverContentElement);return new ObjectPopoverHelper(null,false);}
  9. ObjectUI.ObjectPropertiesSection.formatObjectAsFunction(result,valueElement,true);const response=await result.debuggerModel().functionDetailsPromise(result);if(!response){return null;}
  10. const container=createElementWithClass('div','object-popover-container');const title=container.createChild('div','function-popover-title source-code');const functionName=title.createChild('span','function-name');functionName.textContent=UI.beautifyFunctionName(response.functionName);const rawLocation=response.location;const linkContainer=title.createChild('div','function-title-link-container');const sourceURL=rawLocation&&rawLocation.script()&&rawLocation.script().sourceURL;let linkifier=null;if(sourceURL){linkifier=new Components.Linkifier();linkContainer.appendChild(linkifier.linkifyRawLocation((rawLocation),sourceURL));}
  11. container.appendChild(popoverContentElement);popover.contentElement.appendChild(container);return new ObjectPopoverHelper(linkifier,false);}}
  12. const MaxPopoverTextLength=10000;self.ObjectUI=self.ObjectUI||{};ObjectUI=ObjectUI||{};ObjectUI.ObjectPopoverHelper=ObjectPopoverHelper;