diff options
| author | Ryan Mehri <[email protected]> | 2020-05-23 12:36:03 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-05-23 12:36:03 -0600 |
| commit | 790127ea3a34dccd870f07180e5c384e4f5d5934 (patch) | |
| tree | b59b1a2291d25f457c4be7d6fa906ea2040f1359 | |
| parent | Merge pull request #30 from jackyzha0/latex-renderer (diff) | |
| parent | change inline padding for latex (diff) | |
| download | ctrl-v-790127ea3a34dccd870f07180e5c384e4f5d5934.tar.xz ctrl-v-790127ea3a34dccd870f07180e5c384e4f5d5934.zip | |
Merge pull request #31 from jackyzha0/latex-renderer
Latex renderer
| -rw-r--r-- | frontend/src/components/PasteInfo.js | 17 | ||||
| -rw-r--r-- | frontend/src/components/ViewPaste.js | 38 | ||||
| -rw-r--r-- | frontend/src/components/renderers/Code.js | 21 | ||||
| -rw-r--r-- | frontend/src/components/renderers/Latex.js | 2 | ||||
| -rw-r--r-- | frontend/src/components/renderers/RenderDispatch.js | 29 | ||||
| -rw-r--r-- | frontend/src/css/index.css | 6 |
6 files changed, 80 insertions, 33 deletions
diff --git a/frontend/src/components/PasteInfo.js b/frontend/src/components/PasteInfo.js index 9cf4da3..0b4188d 100644 --- a/frontend/src/components/PasteInfo.js +++ b/frontend/src/components/PasteInfo.js @@ -2,7 +2,7 @@ import React from 'react'; import styled from 'styled-components' import { useHistory } from 'react-router-dom'; import { ThemeInput } from './Inputs' -import { exportComponentAsJPEG } from "react-component-export-image"; +import { exportComponentAsPNG } from "react-component-export-image"; const Bold = styled.span` font-weight: 700 @@ -37,18 +37,15 @@ const PasteInfo = (props) => { history.push(redirUrl); } - const render = () => { - } - const renderable = () => { + const buttonTxt = props.isRenderMode ? 'text' : 'render' if (props.lang === 'latex') { return ( <Button className="lt-shadow lt-hover" type="button" - onClick={render} - > - render + onClick={props.toggleRenderCallback}> + {buttonTxt} </Button> ); } @@ -60,15 +57,13 @@ const PasteInfo = (props) => { <Button className="lt-shadow lt-hover" type="button" - onClick={redirRaw} - > + onClick={redirRaw}> view raw </Button> <Button className="lt-shadow lt-hover" type="button" - onClick={() => exportComponentAsJPEG(props.compref, `paste-${props.hash}.png`)} - > + onClick={() => exportComponentAsPNG(props.compref, `paste-${props.hash}.png`)}> save png </Button> {renderable()} diff --git a/frontend/src/components/ViewPaste.js b/frontend/src/components/ViewPaste.js index 914f94c..30fb29e 100644 --- a/frontend/src/components/ViewPaste.js +++ b/frontend/src/components/ViewPaste.js @@ -6,6 +6,7 @@ import PasteInfo from './PasteInfo'; import PasswordModal from './modals/PasswordModal' import { FetchPaste, FetchPasswordPaste } from '../helpers/httpHelper' import { LANGS } from './renderers/Code' +import RenderDispatch from './renderers/RenderDispatch' class ViewPaste extends React.Component { @@ -21,11 +22,13 @@ class ViewPaste extends React.Component { error: '', passError: '', theme: 'atom', + inRenderMode: false, language: LANGS.raw, }; this.handleChange = this.handleChange.bind(this); this.typedPass = this.typedPass.bind(this); + this.toggleRender = this.toggleRender.bind(this); this.validatePass = this.validatePass.bind(this); this.ErrorLabel = React.createRef(); this.PasswordModal = React.createRef(); @@ -45,6 +48,10 @@ class ViewPaste extends React.Component { this.setState({ enteredPass: event.target.value }); } + toggleRender() { + this.setState({ isRenderMode: !this.state.isRenderMode }); + } + validatePass(pass) { FetchPasswordPaste(this.props.hash, pass) .then((response) => { @@ -73,6 +80,25 @@ class ViewPaste extends React.Component { } render() { + + var display + if (this.state.isRenderMode) { + display = + <RenderDispatch + language={this.state.language} + content={this.state.content} + ref={this.componentRef} + /> + } else { + display = + <CodeRenderer + content={this.state.content} + lang={this.state.language} + theme={this.state.theme} + ref={this.componentRef} + id="pasteInput" /> + } + return ( <div> <PasswordModal @@ -86,20 +112,18 @@ class ViewPaste extends React.Component { value={this.state.title} id="titleInput" readOnly /> - <CodeRenderer - content={this.state.content} - lang={this.state.language} - theme={this.state.theme} - ref={this.componentRef} - id="pasteInput" /> + {display} <PasteInfo hash={this.props.hash} lang={this.state.language} theme={this.state.theme} + expiry={this.state.expiry} + toggleRenderCallback={this.toggleRender} + isRenderMode={this.state.isRenderMode} onChange={this.handleChange} compref={this.componentRef} err={<Error ref={this.ErrorLabel} />} - expiry={this.state.expiry} /> + /> </div> ); } diff --git a/frontend/src/components/renderers/Code.js b/frontend/src/components/renderers/Code.js index 9e7521b..524ea30 100644 --- a/frontend/src/components/renderers/Code.js +++ b/frontend/src/components/renderers/Code.js @@ -36,19 +36,20 @@ export const LANGS = Object.freeze({ }) const StyledPre = styled.pre` - padding: calc(0.8em - 1px) !important; - margin: 0; -` - -const CodeBlock = styled.div` width: 100%; font-size: 0.8em; min-height: 1.2em; - border-radius: 3px; - border: 1px solid #565656; + border-radius: 3px !important; + border: 1px solid #565656 !important; + padding: calc(0.8em - 1px) !important; outline: none; margin: 1.7em 0; - padding-right: calc(1.6em - 2px); + + & code:first-child { + margin-right: 10px !important; + border-radius: 0 !important; + border-right: 1px solid #11111155 !important; + } ` const CodeRenderer = React.forwardRef((props, ref) => { @@ -60,7 +61,7 @@ const CodeRenderer = React.forwardRef((props, ref) => { } return ( - <CodeBlock className="lt-shadow"> + <div className="lt-shadow"> <SyntaxHighlighter ref={ref} language={props.lang} @@ -69,7 +70,7 @@ const CodeRenderer = React.forwardRef((props, ref) => { PreTag={Pre}> {props.content} </SyntaxHighlighter> - </CodeBlock> + </div> ); }); diff --git a/frontend/src/components/renderers/Latex.js b/frontend/src/components/renderers/Latex.js index c5dd57c..7aacf7a 100644 --- a/frontend/src/components/renderers/Latex.js +++ b/frontend/src/components/renderers/Latex.js @@ -5,7 +5,7 @@ import styled from 'styled-components' const StyledInlineLatex = styled.div` display: block; - margin-bottom: 0.5em; + margin-bottom: 1em; ` class Latex extends React.Component { diff --git a/frontend/src/components/renderers/RenderDispatch.js b/frontend/src/components/renderers/RenderDispatch.js new file mode 100644 index 0000000..892c649 --- /dev/null +++ b/frontend/src/components/renderers/RenderDispatch.js @@ -0,0 +1,29 @@ +import React from 'react'; +import styled from 'styled-components' +import Latex from './Latex' +import CodeRenderer from './Code' + +const LatexWrapper = styled.div` + padding: 2em; +` + +const RenderDispatch = React.forwardRef((props, ref) => { + switch (props.language) { + case 'latex': + return ( + <LatexWrapper ref={ref}> + <Latex + content={props.content} /> + </LatexWrapper>) + default: + return ( + <CodeRenderer + content={props.content} + lang={props.language} + theme={props.theme} + ref={ref} + id="pasteInput" />) + } +}); + +export default RenderDispatch
\ No newline at end of file diff --git a/frontend/src/css/index.css b/frontend/src/css/index.css index 9aa48e1..36c6d2c 100644 --- a/frontend/src/css/index.css +++ b/frontend/src/css/index.css @@ -25,10 +25,8 @@ textarea, input[type=text], input[type=password], .Dropdown-root { margin: 1.7em 0; } -.codeBlock code:first-child { - margin-right: 10px; - border-radius: 0; - border-right: 1px solid #11111155; +.large-op { + transform: translateY(-0.6em); } code, pre { |