diff --git a/package-lock.json b/package-lock.json
index e83e5fbb..2e9cf5c9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4705,9 +4705,9 @@
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
},
"core-js": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz",
- "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw=="
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.2.tgz",
+ "integrity": "sha512-hIE5dXkRzRvnZ5vhkRfQxUvDxQZmD9oueA08jDYRBKJHx+VIl/Pne/e0A4x9LObEEthC/TqiZybUoNM4tRgnKg=="
},
"core-js-compat": {
"version": "3.6.4",
@@ -7120,9 +7120,9 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
},
"faye-websocket": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
"requires": {
"websocket-driver": ">=0.5.1"
}
@@ -16618,6 +16618,16 @@
"requires": {
"faye-websocket": "^0.10.0",
"uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ }
}
},
"sockjs-client": {
@@ -16640,14 +16650,6 @@
"requires": {
"ms": "^2.1.1"
}
- },
- "faye-websocket": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
- "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
}
}
},
diff --git a/src/actions/outputActions.js b/src/actions/outputActions.js
index 00486b18..45eee7d8 100644
--- a/src/actions/outputActions.js
+++ b/src/actions/outputActions.js
@@ -3,21 +3,21 @@ export function clearOutput() {
return { type: CLEAR_OUTPUT };
}
-export const SET_RUN_RESULT = 'SET_RUN_RESULT'
-export function setRunResult(value){
- return {type: SET_RUN_RESULT, value}
+export const SET_RUN_RESULT = "SET_RUN_RESULT";
+export function setRunResult(value) {
+ return { type: SET_RUN_RESULT, value };
}
-export const SET_OUTPUT_LANGUAGE = 'SET_OUTPUT_LANGAUGE'
-export function setOutputLanguage(value){
- return {type: SET_OUTPUT_LANGUAGE, value}
+export const SET_OUTPUT_LANGUAGE = "SET_OUTPUT_LANGAUGE";
+export function setOutputLanguage(value) {
+ return { type: SET_OUTPUT_LANGUAGE, value };
}
-export const SET_OUTPUT = 'SET_OUTPUT'
-export function setOutput({output}){
+export const SET_OUTPUT = "SET_OUTPUT";
+export function setOutput({ output }) {
//if output is not an object
- if(!output){
- return {type:"IGNORE"}
+ if (!output) {
+ return { type: "IGNORE" };
}
- return {type:SET_OUTPUT, runResult:output.code, language: output.language}
-}
\ No newline at end of file
+ return { type: SET_OUTPUT, runResult: output.code, language: output.language };
+}
diff --git a/src/components/EditorAndOutput/EditorAndOutput.js b/src/components/EditorAndOutput/EditorAndOutput.js
new file mode 100644
index 00000000..e3aff3ad
--- /dev/null
+++ b/src/components/EditorAndOutput/EditorAndOutput.js
@@ -0,0 +1,101 @@
+import React from "react";
+import SplitPane from "react-split-pane";
+import OutputContainer from "../Output/OutputContainer.js";
+import TextEditorContainer from "../TextEditor/containers/TextEditorContainer.js";
+
+import { EDITOR_WIDTH_BREAKPOINT, CODE_ONLY, OUTPUT_ONLY, PANEL_SIZE } from "../../constants";
+import CodeDownloader from "../../util/languages/CodeDownloader";
+
+import "codemirror/lib/codemirror.css";
+import "codemirror/theme/material.css";
+import "codemirror/theme/duotone-light.css";
+import "styles/CustomCM.scss";
+import "styles/Resizer.scss";
+import "styles/Editor.scss";
+
+class EditorAndOutput extends React.Component {
+ handleDownload = () => {
+ CodeDownloader.download(this.props.sketchName, this.props.language, this.props.code);
+ };
+
+ renderCodeAndOutput = () => (
+