UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 3.47 kB
import*as i18n from"../../../../core/i18n/i18n.js";import*as Platform from"../../../../core/platform/platform.js";import*as TextUtils from"../../../../models/text_utils/text_utils.js";import*as UI from"../../legacy.js";import fontViewStyles from"./fontView.css.legacy.js";const UIStrings={font:"Font",previewOfFontFromS:"Preview of font from {PH1}"},str_=i18n.i18n.registerUIStrings("ui/legacy/components/source_frame/FontView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class FontView extends UI.View.SimpleView{url;mimeType;contentProvider;mimeTypeLabel;fontPreviewElement;dummyElement;fontStyleElement;inResize;constructor(e,t){super(i18nString(UIStrings.font)),this.registerRequiredCSS(fontViewStyles),this.element.classList.add("font-view"),this.url=t.contentURL(),UI.ARIAUtils.setLabel(this.element,i18nString(UIStrings.previewOfFontFromS,{PH1:this.url})),this.mimeType=e,this.contentProvider=t,this.mimeTypeLabel=new UI.Toolbar.ToolbarText(e)}async toolbarItems(){return[this.mimeTypeLabel]}onFontContentLoaded(e,t){const{content:i}=t,n=i?TextUtils.ContentProvider.contentAsDataURL(i,this.mimeType,!0):this.url;this.fontStyleElement&&(this.fontStyleElement.textContent=Platform.StringUtilities.sprintf('@font-face { font-family: "%s"; src: url(%s); }',e,n),this.updateFontPreviewSize())}createContentIfNeeded(){if(this.fontPreviewElement)return;const e="WebInspectorFontPreview"+ ++_fontId;this.fontStyleElement=document.createElement("style"),this.contentProvider.requestContent().then((t=>{this.onFontContentLoaded(e,t)})),this.element.appendChild(this.fontStyleElement);const t=document.createElement("div");for(let e=0;e<_fontPreviewLines.length;++e)e>0&&t.createChild("br"),UI.UIUtils.createTextChild(t,_fontPreviewLines[e]);this.fontPreviewElement=t.cloneNode(!0),this.fontPreviewElement&&(UI.ARIAUtils.markAsHidden(this.fontPreviewElement),this.fontPreviewElement.style.overflow="hidden",this.fontPreviewElement.style.setProperty("font-family",e),this.fontPreviewElement.style.setProperty("visibility","hidden"),this.dummyElement=t,this.dummyElement.style.visibility="hidden",this.dummyElement.style.zIndex="-1",this.dummyElement.style.display="inline",this.dummyElement.style.position="absolute",this.dummyElement.style.setProperty("font-family",e),this.dummyElement.style.setProperty("font-size",_measureFontSize+"px"),this.element.appendChild(this.fontPreviewElement))}wasShown(){this.createContentIfNeeded(),this.updateFontPreviewSize()}onResize(){if(!this.inResize){this.inResize=!0;try{this.updateFontPreviewSize()}finally{this.inResize=null}}}measureElement(){if(!this.dummyElement)throw new Error("No font preview loaded");this.element.appendChild(this.dummyElement);const e={width:this.dummyElement.offsetWidth,height:this.dummyElement.offsetHeight};return this.element.removeChild(this.dummyElement),e}updateFontPreviewSize(){if(!this.fontPreviewElement||!this.isShowing())return;this.fontPreviewElement.style.removeProperty("visibility");const e=this.measureElement(),t=e.height,i=e.width,n=this.element.offsetWidth-50,s=this.element.offsetHeight-30;if(!(t&&i&&n&&s))return void this.fontPreviewElement.style.removeProperty("font-size");const o=n/i,r=s/t,l=Math.floor(_measureFontSize*Math.min(o,r))-2;this.fontPreviewElement.style.setProperty("font-size",l+"px",void 0)}}let _fontId=0;const _fontPreviewLines=["ABCDEFGHIJKLM","NOPQRSTUVWXYZ","abcdefghijklm","nopqrstuvwxyz","1234567890"],_measureFontSize=50;