aboutsummaryrefslogtreecommitdiff
path: root/frontend/src
diff options
context:
space:
mode:
authorRyan Mehri <[email protected]>2020-05-23 12:36:03 -0600
committerGitHub <[email protected]>2020-05-23 12:36:03 -0600
commit790127ea3a34dccd870f07180e5c384e4f5d5934 (patch)
treeb59b1a2291d25f457c4be7d6fa906ea2040f1359 /frontend/src
parentMerge pull request #30 from jackyzha0/latex-renderer (diff)
parentchange inline padding for latex (diff)
downloadctrl-v-790127ea3a34dccd870f07180e5c384e4f5d5934.tar.xz
ctrl-v-790127ea3a34dccd870f07180e5c384e4f5d5934.zip
Merge pull request #31 from jackyzha0/latex-renderer
Latex renderer
Diffstat (limited to 'frontend/src')
-rw-r--r--frontend/src/components/PasteInfo.js17
-rw-r--r--frontend/src/components/ViewPaste.js38
-rw-r--r--frontend/src/components/renderers/Code.js21
-rw-r--r--frontend/src/components/renderers/Latex.js2
-rw-r--r--frontend/src/components/renderers/RenderDispatch.js29
-rw-r--r--frontend/src/css/index.css6
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 {