From af25dc65c2a8ba71836366c2d67788ad1add1206 Mon Sep 17 00:00:00 2001 From: anandamarsh Date: Mon, 28 Aug 2023 17:00:02 -0700 Subject: [PATCH] Pe 11 12 18 (#5) * ready to tackle the height issue * height adjusts, but requires some more testing * removed fullscreen * height now works * set font family to "JetBrains Mono" --- src/linecomps.tsx | 2 +- src/lines.less | 4 +++ src/plugins.ts | 13 ------- src/types.ts | 8 +---- src/view/code.tsx | 33 +++++++++--------- src/view/json.tsx | 86 ----------------------------------------------- 6 files changed, 22 insertions(+), 124 deletions(-) delete mode 100644 src/view/json.tsx diff --git a/src/linecomps.tsx b/src/linecomps.tsx index 7d8d986d..dae0e060 100644 --- a/src/linecomps.tsx +++ b/src/linecomps.tsx @@ -704,7 +704,7 @@ class LineCmd extends React.Component<
; -// @mike - I guess we can remove SimpleJsonRendererComponent - its doesnt have any references -type SimpleJsonRendererComponent = React.ComponentType<{ - data: any; - context: RendererContext; - opts: RendererOpts; - savedHeight: number; -}>; type FullRendererComponent = React.ComponentType<{ model: any }>; type WindowSize = { diff --git a/src/view/code.tsx b/src/view/code.tsx index bd7faa17..5a76c01c 100644 --- a/src/view/code.tsx +++ b/src/view/code.tsx @@ -3,6 +3,7 @@ import * as mobx from "mobx"; import * as mobxReact from "mobx-react"; import { RendererContext, RendererOpts } from "../types"; import Editor from "@monaco-editor/react"; +import { GlobalModel } from "../model"; type OV = mobx.IObservableValue; @@ -18,14 +19,8 @@ class SourceCodeRenderer extends React.Component< }, {} > { - code: OV = mobx.observable.box(null, { - name: "code", - deep: false, - }); - language: OV = mobx.observable.box(null, { - name: "language", - deep: false, - }); + code: OV = mobx.observable.box(""); + language: OV = mobx.observable.box(""); languages: OV = mobx.observable.box([]); selectedLanguage: OV = mobx.observable.box(""); @@ -73,26 +68,30 @@ class SourceCodeRenderer extends React.Component< render() { let opts = this.props.opts; - let maxWidth = opts.maxSize.width; - let minWidth = opts.maxSize.width; - if (minWidth > 1000) { - minWidth = 1000; - } let lang = this.language.get(); let code = this.code.get(); - if (!code) return <>; + if (!code) { + return
; + } + const noOfLines = code.split("\n").length; + const editorHeight = Math.min( + noOfLines * GlobalModel.termFontSize.get() * 1.5 + 10, + parseInt(opts.maxSize.height) + ); return (
-
+
diff --git a/src/view/json.tsx b/src/view/json.tsx deleted file mode 100644 index 2aebf7ec..00000000 --- a/src/view/json.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import * as React from "react"; -import * as mobx from "mobx"; -import * as mobxReact from "mobx-react"; -import cn from "classnames"; -import { If, For, When, Otherwise, Choose } from "tsx-control-statements/components"; -import { WindowSize, RendererContext, TermOptsType, LineType, RendererOpts } from "../types"; -import { sprintf } from "sprintf-js"; -import { Markdown } from "../elements"; -import ReactJson from "react-json-view"; - -type OV = mobx.IObservableValue; - -const MaxJsonSize = 50000; - -@mobxReact.observer -class SimpleJsonRenderer extends React.Component< - { data: Blob; context: RendererContext; opts: RendererOpts; savedHeight: number }, - {} -> { - jsonObj: OV = mobx.observable.box(null, { name: "jsonObj", deep: false }); - jsonError: OV = mobx.observable.box(null, { name: "jsonError" }); - - setJsonError(err: string) { - mobx.action(() => { - this.jsonError.set(err); - })(); - } - - componentDidMount() { - let dataBlob = this.props.data; - if (dataBlob.size > MaxJsonSize) { - this.setJsonError(sprintf("error: json too large to render size=%d", dataBlob.size)); - return; - } - let prtn = dataBlob.text(); - prtn.then((text) => { - if (/[\x00-\x08]/.test(text)) { - this.setJsonError(sprintf("error: not rendering json, binary characters detected")); - return; - } - try { - let obj = JSON.parse(text); - mobx.action(() => { - this.jsonObj.set(obj); - })(); - } catch (e) { - this.setJsonError(sprintf("error: JSON parse error: %s", e.message)); - } - }); - } - - render() { - if (this.jsonError.get() != null) { - return ( -
-
{this.jsonError.get()}
-
- ); - } - if (this.jsonObj.get() == null) { - return
; - } - let opts = this.props.opts; - let maxWidth = opts.maxSize.width; - let minWidth = opts.maxSize.width; - if (minWidth > 1000) { - minWidth = 1000; - } - return ( -
-
- -
-
- ); - } -} - -export { SimpleJsonRenderer };