feat(ui-mode): add font preview to network tab
This commit is contained in:
parent
570e05699e
commit
561b4b6362
|
|
@ -48,6 +48,17 @@
|
|||
overflow: hidden;
|
||||
}
|
||||
|
||||
.network-font-preview {
|
||||
font-family: font-preview;
|
||||
font-size: 30px;
|
||||
line-height: 40px;
|
||||
padding: 16px;
|
||||
padding-left: 6px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.tab-network .toolbar {
|
||||
min-height: 30px !important;
|
||||
background-color: initial !important;
|
||||
|
|
|
|||
|
|
@ -101,12 +101,13 @@ const ResponseTab: React.FunctionComponent<{
|
|||
const BodyTab: React.FunctionComponent<{
|
||||
resource: ResourceSnapshot;
|
||||
}> = ({ resource }) => {
|
||||
const [responseBody, setResponseBody] = React.useState<{ dataUrl?: string, text?: string, mimeType?: string } | null>(null);
|
||||
const [responseBody, setResponseBody] = React.useState<{ dataUrl?: string, text?: string, mimeType?: string, font?: BinaryData } | null>(null);
|
||||
|
||||
React.useEffect(() => {
|
||||
const readResources = async () => {
|
||||
if (resource.response.content._sha1) {
|
||||
const useBase64 = resource.response.content.mimeType.includes('image');
|
||||
const isFont = resource.response.content.mimeType.includes('font');
|
||||
const response = await fetch(`sha1/${resource.response.content._sha1}`);
|
||||
if (useBase64) {
|
||||
const blob = await response.blob();
|
||||
|
|
@ -114,6 +115,9 @@ const BodyTab: React.FunctionComponent<{
|
|||
const eventPromise = new Promise<any>(f => reader.onload = f);
|
||||
reader.readAsDataURL(blob);
|
||||
setResponseBody({ dataUrl: (await eventPromise).target.result });
|
||||
} else if (isFont) {
|
||||
const font = await response.blob().then(blob => blob.arrayBuffer());
|
||||
setResponseBody({ font });
|
||||
} else {
|
||||
const formattedBody = formatBody(await response.text(), resource.response.content.mimeType);
|
||||
setResponseBody({ text: formattedBody, mimeType: resource.response.content.mimeType });
|
||||
|
|
@ -128,11 +132,33 @@ const BodyTab: React.FunctionComponent<{
|
|||
|
||||
return <div className='network-request-details-tab'>
|
||||
{!resource.response.content._sha1 && <div>Response body is not available for this request.</div>}
|
||||
{responseBody && responseBody.font && <FontPreview font={responseBody.font} />}
|
||||
{responseBody && responseBody.dataUrl && <img draggable='false' src={responseBody.dataUrl} />}
|
||||
{responseBody && responseBody.text && <CodeMirrorWrapper text={responseBody.text} mimeType={responseBody.mimeType} readOnly lineNumbers={true}/>}
|
||||
</div>;
|
||||
};
|
||||
|
||||
const FontPreview: React.FunctionComponent<{
|
||||
font: BinaryData;
|
||||
}> = ({ font }) => {
|
||||
React.useEffect(() => {
|
||||
const fontFace = new FontFace('font-preview', font);
|
||||
document.fonts.add(fontFace);
|
||||
|
||||
return () => {
|
||||
document.fonts.delete(fontFace);
|
||||
};
|
||||
}, [font]);
|
||||
|
||||
return <div className='network-font-preview'>
|
||||
ABCDEFGHIJKLM<br />
|
||||
NOPQRSTUVWXYZ<br />
|
||||
abcdefghijklm<br />
|
||||
nopqrstuvwxyz<br />
|
||||
1234567890
|
||||
</div>;
|
||||
};
|
||||
|
||||
function statusClass(statusCode: number): string {
|
||||
if (statusCode < 300 || statusCode === 304)
|
||||
return 'green-circle';
|
||||
|
|
|
|||
Loading…
Reference in a new issue