From 2ad968aa4d2af8b190d82306b4c7eec33814f7e0 Mon Sep 17 00:00:00 2001
From: Max <m.giller@tu-braunschweig.de>
Date: Tue, 10 May 2022 07:09:17 +0200
Subject: [PATCH] Very basic, and broken, scaffolding for the layout

---
 src/editor/js/components/editor.tsx        | 209 +--------------------
 src/editor/js/components/graphrenderer.tsx |  12 ++
 src/editor/js/components/spaceselect.tsx   |  12 ++
 src/editor/js/components/tooldetails.tsx   | 199 ++++++++++++++++++++
 4 files changed, 231 insertions(+), 201 deletions(-)
 create mode 100644 src/editor/js/components/graphrenderer.tsx
 create mode 100644 src/editor/js/components/spaceselect.tsx
 create mode 100644 src/editor/js/components/tooldetails.tsx

diff --git a/src/editor/js/components/editor.tsx b/src/editor/js/components/editor.tsx
index 88483dc..4f1c4ce 100644
--- a/src/editor/js/components/editor.tsx
+++ b/src/editor/js/components/editor.tsx
@@ -6,6 +6,9 @@ import { Graph } from "../structures/graph/graph";
 import ForceGraph from "force-graph";
 import { loadGraphJson } from "../../../datasets";
 import { ToolPool } from "./toolpool";
+import { ToolDetails } from "./tooldetails";
+import { GraphRenderer } from "./graphrenderer";
+import { SpaceSelect } from "./spaceselect";
 
 export class Editor extends React.PureComponent<
     InferType<typeof Editor.propTypes>,
@@ -153,208 +156,12 @@ export class Editor extends React.PureComponent<
         return (
             <div id="ks-editor">
                 <h1>Interface</h1>
-                <div id="box-select-layer">
-                    <div id="2d-graph"></div>
+                <div id="sidepanel">
+                    <SpaceSelect/>
+                    <ToolPool state={this.state.state} />
+                    <ToolDetails/>
                 </div>
-                <ToolPool state={this.state.state} />
-                <section id="tool-menu">
-                    <div id="delete-menu" className="hidden">
-                        <p>
-                            Drag and drop while pressing SHIFT to delete all the
-                            nodes that are being selected.
-                        </p>
-                    </div>
-                    <div id="collect-menu" className="hidden">
-                        <h3>Collected items</h3>
-                        <button id="clear-collection">Clear</button>
-                        <ul id="selected-items"></ul>
-                    </div>
-                    <div id="select-menu" className="">
-                        <p id="nothing-selected">Nothing selected</p>
-                        <div id="node-selected" className="hidden">
-                            <label htmlFor="node-name" hidden>
-                                Name
-                            </label>
-                            <br />
-                            <input
-                                type="text"
-                                id="node-name"
-                                name="node-name"
-                                placeholder="Enter name"
-                                className="bottom-space"
-                            ></input>
-                            <br />
-                            <label htmlFor="node-description">
-                                Description
-                            </label>
-                            <br />
-                            <textarea
-                                id="node-description"
-                                name="node-description"
-                                className="bottom-space"
-                            ></textarea>
-                            <br />
-                            <label htmlFor="node-image">Node Image</label>
-                            <br />
-                            <img
-                                id="node-image-preview"
-                                className="preview-image"
-                                src=""
-                            />
-                            <br />
-                            <input
-                                type="text"
-                                id="node-image"
-                                name="node-image"
-                                placeholder="Enter file name or URL"
-                                className="bottom-space"
-                            />
-                            <br />
-                            <label htmlFor="node-detail-image">
-                                Info Image
-                            </label>
-                            <br />
-                            <img
-                                id="node-detail-image-preview"
-                                className="preview-image"
-                                src=""
-                            />
-                            <br />
-                            <input
-                                type="text"
-                                id="node-detail-image"
-                                name="node-detail-image"
-                                placeholder="Enter file name or URL"
-                                className="bottom-space"
-                            />
-                            <br />
-                            <label htmlFor="node-type">Type</label>
-                            <br />
-                            <select
-                                id="node-type"
-                                name="node-type"
-                                className="bottom-space"
-                            >
-                                <option value="Vorlesung">Vorlesung</option>
-                                <option value="Algorithmus">Algorithmus</option>
-                                <option value="Definition">Definition</option>
-                                <option value="Beispiel">Beispiel</option>
-                                <option value="Ãœbung">Ãœbung</option>
-                                <option value="Kapitel">Kapitel</option>
-                            </select>
-                            <br />
-                            <label htmlFor="node-video">Video</label>
-                            <br />
-                            <input
-                                type="text"
-                                placeholder="Video URL"
-                                id="node-video"
-                                name="node-video"
-                            ></input>
-                            <br />
-                            <label htmlFor="node-references">
-                                References
-                            </label>{" "}
-                            <small>One URL per line</small>
-                            <br />
-                            <textarea
-                                id="node-references"
-                                name="node-references"
-                                className="bottom-space"
-                            ></textarea>
-                        </div>
-                        <div id="link-selected" className="hidden">
-                            <h3 id="link-name"></h3>
-                        </div>
-                    </div>
-                    <div id="settings-menu" className="hidden">
-                        <label htmlFor="label-toggle" className="bottom-space">
-                            <input
-                                type="checkbox"
-                                checked
-                                id="label-toggle"
-                                name="label-toggle"
-                            ></input>
-                            Show labels in graph
-                        </label>
-                        <br />
-                        <br />
-
-                        <h3>Space</h3>
-                        <label htmlFor="space-id-select">Currently open</label>
-                        <br />
-                        <select
-                            id="space-id-select"
-                            name="space-id-select"
-                            className="bottom-space"
-                        ></select>
-
-                        <br />
-                        <br />
-
-                        <h3>Physics Simulation</h3>
-
-                        <button
-                            id="reanimate-button"
-                            name="reanimate-button"
-                            className="bottom-space"
-                        >
-                            Re-simulate
-                        </button>
-
-                        <br />
-
-                        <label htmlFor="stop-physics-delay">
-                            Amount of time [in seconds] after which the physics
-                            simulation is stopped
-                        </label>
-                        <br />
-                        <input
-                            type="number"
-                            onKeyPress={(event) =>
-                                (event.charCode != 8 && event.charCode == 0) ||
-                                (event.charCode >= 48 && event.charCode <= 57)
-                            }
-                            value="5"
-                            id="stop-physics-delay"
-                            name="stop-physics-delay"
-                            className="small-width"
-                        ></input>
-                        <br />
-                        <br />
-
-                        <h3>Import Space</h3>
-                        <label htmlFor="import-space-area">Space JSON</label>
-                        <br />
-                        <textarea
-                            id="import-space-area"
-                            name="import-space-area"
-                            className="bottom-space"
-                        ></textarea>
-                        <br />
-                        <label htmlFor="import-space-name-text">
-                            Space Name
-                        </label>
-                        <br />
-                        <input
-                            type="text"
-                            id="import-space-name-text"
-                            name="import-space-name-text"
-                            className="bottom-space"
-                        ></input>
-                        <br />
-                        <button
-                            id="import-space-btn"
-                            name="import-space-btn"
-                            className="bottom-space"
-                        >
-                            Import
-                        </button>
-
-                        <br />
-                        <br />
-                    </div>
-                </section>
+                <GraphRenderer/>
             </div>
         );
     }
diff --git a/src/editor/js/components/graphrenderer.tsx b/src/editor/js/components/graphrenderer.tsx
new file mode 100644
index 0000000..a79d6e1
--- /dev/null
+++ b/src/editor/js/components/graphrenderer.tsx
@@ -0,0 +1,12 @@
+import React from "react";
+import { ReactNode } from "react";
+
+export class GraphRenderer extends React.Component {
+    render(): ReactNode {
+        return (
+            <div id="box-select-layer">
+                <div id="2d-graph"></div>
+            </div>
+        );
+    }
+}
diff --git a/src/editor/js/components/spaceselect.tsx b/src/editor/js/components/spaceselect.tsx
new file mode 100644
index 0000000..f8ba042
--- /dev/null
+++ b/src/editor/js/components/spaceselect.tsx
@@ -0,0 +1,12 @@
+import React from "react";
+import { ReactNode } from "react";
+
+export class SpaceSelect extends React.Component {
+    render(): ReactNode {
+        return (
+            <div id="box-select-layer">
+                <div id="2d-graph"></div>
+            </div>
+        );
+    }
+}
diff --git a/src/editor/js/components/tooldetails.tsx b/src/editor/js/components/tooldetails.tsx
new file mode 100644
index 0000000..a9d58d3
--- /dev/null
+++ b/src/editor/js/components/tooldetails.tsx
@@ -0,0 +1,199 @@
+import React from "react";
+import { ReactNode } from "react";
+
+export class ToolDetails extends React.Component {
+    render(): ReactNode {
+        return (
+            <div id="tooldetails">
+                <div id="delete-menu" className="hidden">
+                    <p>
+                        Drag and drop while pressing SHIFT to delete all the
+                        nodes that are being selected.
+                    </p>
+                </div>
+                <div id="collect-menu" className="hidden">
+                    <h3>Collected items</h3>
+                    <button id="clear-collection">Clear</button>
+                    <ul id="selected-items"></ul>
+                </div>
+                <div id="select-menu" className="">
+                    <p id="nothing-selected">Nothing selected</p>
+                    <div id="node-selected" className="hidden">
+                        <label htmlFor="node-name" hidden>
+                            Name
+                        </label>
+                        <br />
+                        <input
+                            type="text"
+                            id="node-name"
+                            name="node-name"
+                            placeholder="Enter name"
+                            className="bottom-space"
+                        ></input>
+                        <br />
+                        <label htmlFor="node-description">Description</label>
+                        <br />
+                        <textarea
+                            id="node-description"
+                            name="node-description"
+                            className="bottom-space"
+                        ></textarea>
+                        <br />
+                        <label htmlFor="node-image">Node Image</label>
+                        <br />
+                        <img
+                            id="node-image-preview"
+                            className="preview-image"
+                            src=""
+                        />
+                        <br />
+                        <input
+                            type="text"
+                            id="node-image"
+                            name="node-image"
+                            placeholder="Enter file name or URL"
+                            className="bottom-space"
+                        />
+                        <br />
+                        <label htmlFor="node-detail-image">Info Image</label>
+                        <br />
+                        <img
+                            id="node-detail-image-preview"
+                            className="preview-image"
+                            src=""
+                        />
+                        <br />
+                        <input
+                            type="text"
+                            id="node-detail-image"
+                            name="node-detail-image"
+                            placeholder="Enter file name or URL"
+                            className="bottom-space"
+                        />
+                        <br />
+                        <label htmlFor="node-type">Type</label>
+                        <br />
+                        <select
+                            id="node-type"
+                            name="node-type"
+                            className="bottom-space"
+                        >
+                            <option value="Vorlesung">Vorlesung</option>
+                            <option value="Algorithmus">Algorithmus</option>
+                            <option value="Definition">Definition</option>
+                            <option value="Beispiel">Beispiel</option>
+                            <option value="Ãœbung">Ãœbung</option>
+                            <option value="Kapitel">Kapitel</option>
+                        </select>
+                        <br />
+                        <label htmlFor="node-video">Video</label>
+                        <br />
+                        <input
+                            type="text"
+                            placeholder="Video URL"
+                            id="node-video"
+                            name="node-video"
+                        ></input>
+                        <br />
+                        <label htmlFor="node-references">References</label>{" "}
+                        <small>One URL per line</small>
+                        <br />
+                        <textarea
+                            id="node-references"
+                            name="node-references"
+                            className="bottom-space"
+                        ></textarea>
+                    </div>
+                    <div id="link-selected" className="hidden">
+                        <h3 id="link-name"></h3>
+                    </div>
+                </div>
+                <div id="settings-menu" className="hidden">
+                    <label htmlFor="label-toggle" className="bottom-space">
+                        <input
+                            type="checkbox"
+                            checked
+                            id="label-toggle"
+                            name="label-toggle"
+                        ></input>
+                        Show labels in graph
+                    </label>
+                    <br />
+                    <br />
+
+                    <h3>Space</h3>
+                    <label htmlFor="space-id-select">Currently open</label>
+                    <br />
+                    <select
+                        id="space-id-select"
+                        name="space-id-select"
+                        className="bottom-space"
+                    ></select>
+
+                    <br />
+                    <br />
+
+                    <h3>Physics Simulation</h3>
+
+                    <button
+                        id="reanimate-button"
+                        name="reanimate-button"
+                        className="bottom-space"
+                    >
+                        Re-simulate
+                    </button>
+
+                    <br />
+
+                    <label htmlFor="stop-physics-delay">
+                        Amount of time [in seconds] after which the physics
+                        simulation is stopped
+                    </label>
+                    <br />
+                    <input
+                        type="number"
+                        onKeyPress={(event) =>
+                            (event.charCode != 8 && event.charCode == 0) ||
+                            (event.charCode >= 48 && event.charCode <= 57)
+                        }
+                        value="5"
+                        id="stop-physics-delay"
+                        name="stop-physics-delay"
+                        className="small-width"
+                    ></input>
+                    <br />
+                    <br />
+
+                    <h3>Import Space</h3>
+                    <label htmlFor="import-space-area">Space JSON</label>
+                    <br />
+                    <textarea
+                        id="import-space-area"
+                        name="import-space-area"
+                        className="bottom-space"
+                    ></textarea>
+                    <br />
+                    <label htmlFor="import-space-name-text">Space Name</label>
+                    <br />
+                    <input
+                        type="text"
+                        id="import-space-name-text"
+                        name="import-space-name-text"
+                        className="bottom-space"
+                    ></input>
+                    <br />
+                    <button
+                        id="import-space-btn"
+                        name="import-space-btn"
+                        className="bottom-space"
+                    >
+                        Import
+                    </button>
+
+                    <br />
+                    <br />
+                </div>
+            </div>
+        );
+    }
+}
-- 
GitLab