From 64593eb0ca43116a2037d51cf2088ac3d408aa51 Mon Sep 17 00:00:00 2001 From: Hassan Abouelela <47495861+HassanAbouelela@users.noreply.github.com> Date: Tue, 2 Mar 2021 20:20:10 +0300 Subject: Adds Basic Prism Stuff Signed-off-by: Hassan Abouelela <47495861+HassanAbouelela@users.noreply.github.com> --- package.json | 2 + src/components/InputTypes/Code.tsx | 11 -- src/components/InputTypes/code/Code.tsx | 74 ++++++++++ src/components/InputTypes/code/prism_css.tsx | 194 +++++++++++++++++++++++++++ src/components/InputTypes/index.tsx | 8 +- yarn.lock | 43 ++++++ 6 files changed, 319 insertions(+), 13 deletions(-) delete mode 100644 src/components/InputTypes/Code.tsx create mode 100644 src/components/InputTypes/code/Code.tsx create mode 100644 src/components/InputTypes/code/prism_css.tsx diff --git a/package.json b/package.json index 0ebf702..65687a1 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "fs-extra": "9.1.0", "html-webpack-plugin": "5.2.0", "identity-obj-proxy": "3.0.0", + "prismjs": "1.23.0", "react": "17.0.1", "react-app-polyfill": "2.0.0", "react-dom": "17.0.1", @@ -59,6 +60,7 @@ "@testing-library/user-event": "12.7.2", "@types/jest": "26.0.20", "@types/node": "14.14.31", + "@types/prismjs": "1.16.3", "@types/react": "17.0.1", "@types/react-dom": "17.0.1", "@types/react-router-dom": "5.1.7", diff --git a/src/components/InputTypes/Code.tsx b/src/components/InputTypes/Code.tsx deleted file mode 100644 index 51ca98d..0000000 --- a/src/components/InputTypes/Code.tsx +++ /dev/null @@ -1,11 +0,0 @@ -/** @jsx jsx */ -import { jsx } from "@emotion/react"; -import React, { ChangeEvent } from "react"; - -interface CodeProps { - handler: (event: ChangeEvent) => void -} - -export default function Code(props: CodeProps): JSX.Element { - return ; -} diff --git a/src/components/InputTypes/code/Code.tsx b/src/components/InputTypes/code/Code.tsx new file mode 100644 index 0000000..31b82f0 --- /dev/null +++ b/src/components/InputTypes/code/Code.tsx @@ -0,0 +1,74 @@ +/** @jsx jsx */ +import { jsx, css } from "@emotion/react"; +import React, { ChangeEvent } from "react"; + +import prismStyles from "./prism_css"; +import Prism from 'prismjs'; + +/** + * For supported languages, and language codes, see: + * https://prismjs.com/#supported-languages + */ +interface CodeProps { + handler: (event: ChangeEvent) => void, + language: string, +} + +const blockStyles = css` + pre[class*="language-"] { + min-height: 20rem; + height: 100%; + width: 100%; + box-sizing: border-box; + + resize: vertical; + padding: 1rem; + background: whitesmoke; + + color: black; + font-family: Hind, Helvetica, Arial, sans-serif; + + margin: auto; + + border: 0.1rem solid black; + border-radius: 8px; + font-size: 1rem; + } +`; + +const textareaStyles = css` + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0; + resize: none; + + font-family: Hind, Helvetica, Arial, sans-serif; + padding: 1rem; + box-sizing: border-box; + font-size: 1rem; + border: 0.1rem solid transparent; + border-radius: 8px; +`; + +export default class Code extends React.Component { + constructor(props: CodeProps) { + super(props); + } + + render() { + const ref: React.RefObject = React.createRef(); + const placeholder = "print(\"hello world\")" + + return
+
+                {placeholder}
+            
+