@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 3.92 kB
JavaScript
import*as Common from"../../../../core/common/common.js";import*as Host from"../../../../core/host/host.js";import*as i18n from"../../../../core/i18n/i18n.js";import*as Platform from"../../../../core/platform/platform.js";import*as SDK from"../../../../core/sdk/sdk.js";import imagePreviewStyles from"./imagePreview.css.js";const UIStrings={unknownSource:"unknown source",imageFromS:"Image from {PH1}",fileSize:"File size:",intrinsicSize:"Intrinsic size:",renderedSize:"Rendered size:",currentSource:"Current source:",renderedAspectRatio:"Rendered aspect ratio:",intrinsicAspectRatio:"Intrinsic aspect ratio:"},str_=i18n.i18n.registerUIStrings("ui/legacy/components/utils/ImagePreview.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);function isImageResource(e){return null!==e&&e.resourceType()===Common.ResourceType.resourceTypes.Image}export class ImagePreview{static async build(e,t,r,i={precomputedFeatures:void 0,imageAltText:void 0}){const{precomputedFeatures:n,imageAltText:o}=i,s=e.model(SDK.ResourceTreeModel.ResourceTreeModel);if(!s)return null;let c=s.resourceForURL(t),a=t;if(!isImageResource(c)&&n&&n.currentSrc&&(a=n.currentSrc,c=s.resourceForURL(a)),!c||!isImageResource(c))return null;const d=c,l=c.displayName,m=c.content?c.content:c.url.split("base64,")[1],u=c.contentSize(),p=u||Platform.StringUtilities.base64ToSize(m),S=p>0?Platform.NumberUtilities.bytesToString(p):"";return new Promise((e=>{const t=document.createElement("img");t.addEventListener("load",(function(){const i=document.createElement("div"),o=i.attachShadow({mode:"open"});o.adoptedStyleSheets=[imagePreviewStyles];const s=o.createChild("table");s.className="image-preview-container";const c=s.createChild("tr").createChild("td","image-container");c.colSpan=2;const d=c.createChild("div");d.title=l,d.appendChild(t),d.addEventListener("click",(()=>{Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(a)}));const m=t.naturalWidth,u=t.naturalHeight,p=n?n.renderedWidth:m,g=n?n.renderedHeight:u;if(r){const e=s.createChild("tr","row");e.createChild("td","title").textContent=i18nString(UIStrings.renderedSize),e.createChild("td","description").textContent=`${p} × ${g} px`;const t=s.createChild("tr","row");if(t.createChild("td","title").textContent=i18nString(UIStrings.renderedAspectRatio),t.createChild("td","description").textContent=Platform.NumberUtilities.aspectRatio(p,g),g!==u||p!==m){const e=s.createChild("tr","row");e.createChild("td","title").textContent=i18nString(UIStrings.intrinsicSize),e.createChild("td","description").textContent=`${m} × ${u} px`;const t=s.createChild("tr","row");t.createChild("td","title").textContent=i18nString(UIStrings.intrinsicAspectRatio),t.createChild("td","description").textContent=Platform.NumberUtilities.aspectRatio(m,u)}}const h=s.createChild("tr","row");h.createChild("td","title").textContent=i18nString(UIStrings.fileSize),h.createChild("td","description").textContent=S;const C=s.createChild("tr","row");C.createChild("td","title").textContent=i18nString(UIStrings.currentSource);const I=Platform.StringUtilities.trimMiddle(a,100),f=C.createChild("td","description description-link").createChild("span","source-link");f.textContent=I,f.addEventListener("click",(()=>{Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(a)})),e(i)}),!1),t.addEventListener("error",(()=>e(null)),!1),o&&(t.alt=o),d.populateImageSource(t)}))}static async loadDimensionsForNode(e){if(!e.nodeName()||"img"!==e.nodeName().toLowerCase())return;const t=await e.resolveToObject("");if(!t)return;const r=await t.callFunctionJSON((function(){return{renderedWidth:this.width,renderedHeight:this.height,currentSrc:this.currentSrc}}),void 0);return t.release(),r}static defaultAltTextForImageURL(e){const t=new Common.ParsedURL.ParsedURL(e),r=t.isValid?t.displayName:i18nString(UIStrings.unknownSource);return i18nString(UIStrings.imageFromS,{PH1:r})}}