summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/app/map/LoadingScreen.js11
-rw-r--r--src/components/app/map/MapConstants.js29
-rw-r--r--src/components/app/map/MapStageComponent.js126
-rw-r--r--src/components/app/map/controls/ExportCanvasComponent.js13
-rw-r--r--src/components/app/map/controls/ScaleIndicatorComponent.js14
-rw-r--r--src/components/app/map/controls/ScaleIndicatorComponent.sass9
-rw-r--r--src/components/app/map/controls/ToolPanelComponent.js13
-rw-r--r--src/components/app/map/controls/ToolPanelComponent.sass5
-rw-r--r--src/components/app/map/controls/ZoomControlComponent.js24
-rw-r--r--src/components/app/map/elements/Backdrop.js16
-rw-r--r--src/components/app/map/elements/GrayLayer.js17
-rw-r--r--src/components/app/map/elements/HoverTile.js30
-rw-r--r--src/components/app/map/elements/ImageComponent.js48
-rw-r--r--src/components/app/map/elements/RackFillBar.js89
-rw-r--r--src/components/app/map/elements/RoomTile.js20
-rw-r--r--src/components/app/map/elements/TileObject.js29
-rw-r--r--src/components/app/map/elements/TilePlusIcon.js52
-rw-r--r--src/components/app/map/elements/WallSegment.js39
-rw-r--r--src/components/app/map/groups/DatacenterGroup.js40
-rw-r--r--src/components/app/map/groups/GridGroup.js41
-rw-r--r--src/components/app/map/groups/RackGroup.js43
-rw-r--r--src/components/app/map/groups/RoomGroup.js56
-rw-r--r--src/components/app/map/groups/TileGroup.js43
-rw-r--r--src/components/app/map/groups/WallGroup.js22
-rw-r--r--src/components/app/map/layers/HoverLayerComponent.js85
-rw-r--r--src/components/app/map/layers/MapLayerComponent.js22
-rw-r--r--src/components/app/map/layers/ObjectHoverLayerComponent.js11
-rw-r--r--src/components/app/map/layers/RoomHoverLayerComponent.js6
-rw-r--r--src/components/app/sidebars/Sidebar.js50
-rw-r--r--src/components/app/sidebars/Sidebar.sass50
-rw-r--r--src/components/app/sidebars/elements/LoadBarComponent.js22
-rw-r--r--src/components/app/sidebars/elements/LoadChartComponent.js90
-rw-r--r--src/components/app/sidebars/simulation/ExperimentMetadataComponent.js23
-rw-r--r--src/components/app/sidebars/simulation/LoadMetricComponent.js40
-rw-r--r--src/components/app/sidebars/simulation/SimulationSidebarComponent.js22
-rw-r--r--src/components/app/sidebars/simulation/SimulationSidebarComponent.sass8
-rw-r--r--src/components/app/sidebars/simulation/TaskComponent.js58
-rw-r--r--src/components/app/sidebars/simulation/TraceComponent.js20
-rw-r--r--src/components/app/sidebars/topology/NameComponent.js13
-rw-r--r--src/components/app/sidebars/topology/TopologySidebarComponent.js31
-rw-r--r--src/components/app/sidebars/topology/building/BuildingSidebarComponent.js20
-rw-r--r--src/components/app/sidebars/topology/building/NewRoomConstructionComponent.js31
-rw-r--r--src/components/app/sidebars/topology/machine/BackToRackComponent.js10
-rw-r--r--src/components/app/sidebars/topology/machine/DeleteMachineComponent.js10
-rw-r--r--src/components/app/sidebars/topology/machine/MachineNameComponent.js7
-rw-r--r--src/components/app/sidebars/topology/machine/MachineSidebarComponent.js27
-rw-r--r--src/components/app/sidebars/topology/machine/UnitAddComponent.js46
-rw-r--r--src/components/app/sidebars/topology/machine/UnitComponent.js78
-rw-r--r--src/components/app/sidebars/topology/machine/UnitListComponent.js29
-rw-r--r--src/components/app/sidebars/topology/machine/UnitTabsComponent.js65
-rw-r--r--src/components/app/sidebars/topology/rack/BackToRoomComponent.js10
-rw-r--r--src/components/app/sidebars/topology/rack/DeleteRackComponent.js10
-rw-r--r--src/components/app/sidebars/topology/rack/EmptySlotComponent.js19
-rw-r--r--src/components/app/sidebars/topology/rack/MachineComponent.js78
-rw-r--r--src/components/app/sidebars/topology/rack/MachineListComponent.js26
-rw-r--r--src/components/app/sidebars/topology/rack/MachineListComponent.sass2
-rw-r--r--src/components/app/sidebars/topology/rack/RackNameComponent.js8
-rw-r--r--src/components/app/sidebars/topology/rack/RackSidebarComponent.js34
-rw-r--r--src/components/app/sidebars/topology/rack/RackSidebarComponent.sass11
-rw-r--r--src/components/app/sidebars/topology/room/BackToBuildingComponent.js10
-rw-r--r--src/components/app/sidebars/topology/room/DeleteRoomComponent.js10
-rw-r--r--src/components/app/sidebars/topology/room/EditRoomComponent.js27
-rw-r--r--src/components/app/sidebars/topology/room/RackConstructionComponent.js32
-rw-r--r--src/components/app/sidebars/topology/room/RoomNameComponent.js8
-rw-r--r--src/components/app/sidebars/topology/room/RoomSidebarComponent.js38
-rw-r--r--src/components/app/sidebars/topology/room/RoomTypeComponent.js8
-rw-r--r--src/components/app/timeline/PlayButtonComponent.js30
-rw-r--r--src/components/app/timeline/Timeline.sass116
-rw-r--r--src/components/app/timeline/TimelineComponent.js37
-rw-r--r--src/components/app/timeline/TimelineControlsComponent.js49
-rw-r--r--src/components/app/timeline/TimelineLabelsComponent.js15
-rw-r--r--src/components/experiments/ExperimentListComponent.js59
-rw-r--r--src/components/experiments/ExperimentRowComponent.js40
-rw-r--r--src/components/experiments/NewExperimentButtonComponent.js17
-rw-r--r--src/components/home/ContactSection.js64
-rw-r--r--src/components/home/ContactSection.sass15
-rw-r--r--src/components/home/ContentSection.js19
-rw-r--r--src/components/home/ContentSection.sass9
-rw-r--r--src/components/home/IntroSection.js40
-rw-r--r--src/components/home/JumbotronHeader.js20
-rw-r--r--src/components/home/JumbotronHeader.sass24
-rw-r--r--src/components/home/ModelingSection.js24
-rw-r--r--src/components/home/ScreenshotSection.js32
-rw-r--r--src/components/home/ScreenshotSection.sass5
-rw-r--r--src/components/home/SimulationSection.js25
-rw-r--r--src/components/home/StakeholderSection.js42
-rw-r--r--src/components/home/TeamSection.js56
-rw-r--r--src/components/home/TechnologiesSection.js42
-rw-r--r--src/components/modals/ConfirmationModal.js37
-rw-r--r--src/components/modals/Modal.js132
-rw-r--r--src/components/modals/TextInputModal.js58
-rw-r--r--src/components/modals/custom-components/NewExperimentModalComponent.js104
-rw-r--r--src/components/navigation/AppNavbar.js56
-rw-r--r--src/components/navigation/HomeNavbar.js24
-rw-r--r--src/components/navigation/LogoutButton.js16
-rw-r--r--src/components/navigation/Navbar.js102
-rw-r--r--src/components/navigation/Navbar.sass29
-rw-r--r--src/components/not-found/BlinkingCursor.js6
-rw-r--r--src/components/not-found/BlinkingCursor.sass35
-rw-r--r--src/components/not-found/CodeBlock.js34
-rw-r--r--src/components/not-found/CodeBlock.sass3
-rw-r--r--src/components/not-found/TerminalWindow.js29
-rw-r--r--src/components/not-found/TerminalWindow.sass70
-rw-r--r--src/components/simulations/FilterButton.js24
-rw-r--r--src/components/simulations/FilterPanel.js13
-rw-r--r--src/components/simulations/FilterPanel.sass5
-rw-r--r--src/components/simulations/NewSimulationButtonComponent.js17
-rw-r--r--src/components/simulations/SimulationActionButtons.js37
-rw-r--r--src/components/simulations/SimulationAuthList.js43
-rw-r--r--src/components/simulations/SimulationAuthRow.js32
110 files changed, 0 insertions, 3720 deletions
diff --git a/src/components/app/map/LoadingScreen.js b/src/components/app/map/LoadingScreen.js
deleted file mode 100644
index 9f379e0b..00000000
--- a/src/components/app/map/LoadingScreen.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from "react";
-import FontAwesome from "react-fontawesome";
-
-const LoadingScreen = () => (
- <div className="display-4">
- <FontAwesome name="refresh" className="mr-4" spin />
- Loading your datacenter...
- </div>
-);
-
-export default LoadingScreen;
diff --git a/src/components/app/map/MapConstants.js b/src/components/app/map/MapConstants.js
deleted file mode 100644
index 32438b5e..00000000
--- a/src/components/app/map/MapConstants.js
+++ /dev/null
@@ -1,29 +0,0 @@
-export const MAP_SIZE = 50;
-export const TILE_SIZE_IN_PIXELS = 100;
-export const TILE_SIZE_IN_METERS = 0.5;
-export const MAP_SIZE_IN_PIXELS = MAP_SIZE * TILE_SIZE_IN_PIXELS;
-
-export const OBJECT_MARGIN_IN_PIXELS = TILE_SIZE_IN_PIXELS / 5;
-export const TILE_PLUS_MARGIN_IN_PIXELS = TILE_SIZE_IN_PIXELS / 3;
-export const OBJECT_SIZE_IN_PIXELS =
- TILE_SIZE_IN_PIXELS - OBJECT_MARGIN_IN_PIXELS * 2;
-
-export const GRID_LINE_WIDTH_IN_PIXELS = 2;
-export const WALL_WIDTH_IN_PIXELS = TILE_SIZE_IN_PIXELS / 8;
-export const OBJECT_BORDER_WIDTH_IN_PIXELS = TILE_SIZE_IN_PIXELS / 12;
-export const TILE_PLUS_WIDTH_IN_PIXELS = TILE_SIZE_IN_PIXELS / 10;
-
-export const SIDEBAR_WIDTH = 350;
-export const VIEWPORT_PADDING = 50;
-
-export const RACK_FILL_ICON_WIDTH = OBJECT_SIZE_IN_PIXELS / 3;
-export const RACK_FILL_ICON_OPACITY = 0.8;
-
-export const MAP_MOVE_PIXELS_PER_EVENT = 20;
-export const MAP_SCALE_PER_EVENT = 1.1;
-export const MAP_MIN_SCALE = 0.5;
-export const MAP_MAX_SCALE = 1.5;
-
-export const MAX_NUM_UNITS_PER_MACHINE = 4;
-export const DEFAULT_RACK_SLOT_CAPACITY = 42;
-export const DEFAULT_RACK_POWER_CAPACITY = 10000;
diff --git a/src/components/app/map/MapStageComponent.js b/src/components/app/map/MapStageComponent.js
deleted file mode 100644
index 67b3349c..00000000
--- a/src/components/app/map/MapStageComponent.js
+++ /dev/null
@@ -1,126 +0,0 @@
-import React from "react";
-import { Stage } from "react-konva";
-import { Shortcuts } from "react-shortcuts";
-import MapLayer from "../../../containers/app/map/layers/MapLayer";
-import ObjectHoverLayer from "../../../containers/app/map/layers/ObjectHoverLayer";
-import RoomHoverLayer from "../../../containers/app/map/layers/RoomHoverLayer";
-import jQuery from "../../../util/jquery";
-import { NAVBAR_HEIGHT } from "../../navigation/Navbar";
-import { MAP_MOVE_PIXELS_PER_EVENT } from "./MapConstants";
-import { Provider } from "react-redux";
-import { store } from "../../../store/configure-store";
-
-class MapStageComponent extends React.Component {
- state = {
- mouseX: 0,
- mouseY: 0
- };
-
- constructor(props) {
- super(props);
-
- this.updateDimensions = this.updateDimensions.bind(this);
- this.updateScale = this.updateScale.bind(this);
- }
-
- componentWillMount() {
- this.updateDimensions();
- }
-
- componentDidMount() {
- window.addEventListener("resize", this.updateDimensions);
- window.addEventListener("wheel", this.updateScale);
-
- window["exportCanvasToImage"] = () => {
- const download = document.createElement("a");
- download.href = this.stage.getStage().toDataURL();
- download.download = "opendc-canvas-export-" + Date.now() + ".png";
- download.click();
- };
- }
-
- componentWillUnmount() {
- window.removeEventListener("resize", this.updateDimensions);
- window.removeEventListener("wheel", this.updateScale);
- }
-
- updateDimensions() {
- this.props.setMapDimensions(
- jQuery(window).width(),
- jQuery(window).height() - NAVBAR_HEIGHT
- );
- }
-
- updateScale(e) {
- e.preventDefault();
- this.props.zoomInOnPosition(
- e.deltaY < 0,
- this.state.mouseX,
- this.state.mouseY
- );
- }
-
- updateMousePosition() {
- const mousePos = this.stage.getStage().getPointerPosition();
- this.setState({ mouseX: mousePos.x, mouseY: mousePos.y });
- }
-
- handleShortcuts(action) {
- switch (action) {
- case "MOVE_LEFT":
- this.moveWithDelta(MAP_MOVE_PIXELS_PER_EVENT, 0);
- break;
- case "MOVE_RIGHT":
- this.moveWithDelta(-MAP_MOVE_PIXELS_PER_EVENT, 0);
- break;
- case "MOVE_UP":
- this.moveWithDelta(0, MAP_MOVE_PIXELS_PER_EVENT);
- break;
- case "MOVE_DOWN":
- this.moveWithDelta(0, -MAP_MOVE_PIXELS_PER_EVENT);
- break;
- default:
- break;
- }
- }
-
- moveWithDelta(deltaX, deltaY) {
- this.props.setMapPositionWithBoundsCheck(
- this.props.mapPosition.x + deltaX,
- this.props.mapPosition.y + deltaY
- );
- }
-
- render() {
- return (
- <Shortcuts
- name="MAP"
- handler={this.handleShortcuts.bind(this)}
- targetNodeSelector="body"
- >
- <Stage
- ref={stage => {
- this.stage = stage;
- }}
- width={this.props.mapDimensions.width}
- height={this.props.mapDimensions.height}
- onMouseMove={this.updateMousePosition.bind(this)}
- >
- <Provider store={store}>
- <MapLayer />
- <RoomHoverLayer
- mouseX={this.state.mouseX}
- mouseY={this.state.mouseY}
- />
- <ObjectHoverLayer
- mouseX={this.state.mouseX}
- mouseY={this.state.mouseY}
- />
- </Provider>
- </Stage>
- </Shortcuts>
- );
- }
-}
-
-export default MapStageComponent;
diff --git a/src/components/app/map/controls/ExportCanvasComponent.js b/src/components/app/map/controls/ExportCanvasComponent.js
deleted file mode 100644
index ee934f21..00000000
--- a/src/components/app/map/controls/ExportCanvasComponent.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from "react";
-
-const ExportCanvasComponent = () => (
- <button
- className="btn btn-success btn-circle btn-sm"
- title="Export Canvas to PNG Image"
- onClick={() => window["exportCanvasToImage"]()}
- >
- <span className="fa fa-camera" />
- </button>
-);
-
-export default ExportCanvasComponent;
diff --git a/src/components/app/map/controls/ScaleIndicatorComponent.js b/src/components/app/map/controls/ScaleIndicatorComponent.js
deleted file mode 100644
index b7b5cc36..00000000
--- a/src/components/app/map/controls/ScaleIndicatorComponent.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from "react";
-import { TILE_SIZE_IN_METERS, TILE_SIZE_IN_PIXELS } from "../MapConstants";
-import "./ScaleIndicatorComponent.css";
-
-const ScaleIndicatorComponent = ({ scale }) => (
- <div
- className="scale-indicator"
- style={{ width: TILE_SIZE_IN_PIXELS * scale }}
- >
- {TILE_SIZE_IN_METERS}m
- </div>
-);
-
-export default ScaleIndicatorComponent;
diff --git a/src/components/app/map/controls/ScaleIndicatorComponent.sass b/src/components/app/map/controls/ScaleIndicatorComponent.sass
deleted file mode 100644
index f2d2b55b..00000000
--- a/src/components/app/map/controls/ScaleIndicatorComponent.sass
+++ /dev/null
@@ -1,9 +0,0 @@
-.scale-indicator
- position: absolute
- right: 10px
- bottom: 10px
- z-index: 50
-
- border: solid 2px #212529
- border-top: none
- border-left: none
diff --git a/src/components/app/map/controls/ToolPanelComponent.js b/src/components/app/map/controls/ToolPanelComponent.js
deleted file mode 100644
index 605e9887..00000000
--- a/src/components/app/map/controls/ToolPanelComponent.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from "react";
-import ZoomControlContainer from "../../../../containers/app/map/controls/ZoomControlContainer";
-import ExportCanvasComponent from "./ExportCanvasComponent";
-import "./ToolPanelComponent.css";
-
-const ToolPanelComponent = () => (
- <div className="tool-panel">
- <ZoomControlContainer />
- <ExportCanvasComponent />
- </div>
-);
-
-export default ToolPanelComponent;
diff --git a/src/components/app/map/controls/ToolPanelComponent.sass b/src/components/app/map/controls/ToolPanelComponent.sass
deleted file mode 100644
index 996712b3..00000000
--- a/src/components/app/map/controls/ToolPanelComponent.sass
+++ /dev/null
@@ -1,5 +0,0 @@
-.tool-panel
- position: absolute
- left: 10px
- bottom: 10px
- z-index: 50
diff --git a/src/components/app/map/controls/ZoomControlComponent.js b/src/components/app/map/controls/ZoomControlComponent.js
deleted file mode 100644
index e1b7491e..00000000
--- a/src/components/app/map/controls/ZoomControlComponent.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from "react";
-
-const ZoomControlComponent = ({ zoomInOnCenter }) => {
- return (
- <span>
- <button
- className="btn btn-default btn-circle btn-sm mr-1"
- title="Zoom in"
- onClick={() => zoomInOnCenter(true)}
- >
- <span className="fa fa-plus" />
- </button>
- <button
- className="btn btn-default btn-circle btn-sm mr-1"
- title="Zoom out"
- onClick={() => zoomInOnCenter(false)}
- >
- <span className="fa fa-minus" />
- </button>
- </span>
- );
-};
-
-export default ZoomControlComponent;
diff --git a/src/components/app/map/elements/Backdrop.js b/src/components/app/map/elements/Backdrop.js
deleted file mode 100644
index 57414463..00000000
--- a/src/components/app/map/elements/Backdrop.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from "react";
-import { Rect } from "react-konva";
-import { BACKDROP_COLOR } from "../../../../util/colors";
-import { MAP_SIZE_IN_PIXELS } from "../MapConstants";
-
-const Backdrop = () => (
- <Rect
- x={0}
- y={0}
- width={MAP_SIZE_IN_PIXELS}
- height={MAP_SIZE_IN_PIXELS}
- fill={BACKDROP_COLOR}
- />
-);
-
-export default Backdrop;
diff --git a/src/components/app/map/elements/GrayLayer.js b/src/components/app/map/elements/GrayLayer.js
deleted file mode 100644
index 28fadd8a..00000000
--- a/src/components/app/map/elements/GrayLayer.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from "react";
-import { Rect } from "react-konva";
-import { GRAYED_OUT_AREA_COLOR } from "../../../../util/colors";
-import { MAP_SIZE_IN_PIXELS } from "../MapConstants";
-
-const GrayLayer = ({ onClick }) => (
- <Rect
- x={0}
- y={0}
- width={MAP_SIZE_IN_PIXELS}
- height={MAP_SIZE_IN_PIXELS}
- fill={GRAYED_OUT_AREA_COLOR}
- onClick={onClick}
- />
-);
-
-export default GrayLayer;
diff --git a/src/components/app/map/elements/HoverTile.js b/src/components/app/map/elements/HoverTile.js
deleted file mode 100644
index 42e6547c..00000000
--- a/src/components/app/map/elements/HoverTile.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Rect } from "react-konva";
-import {
- ROOM_HOVER_INVALID_COLOR,
- ROOM_HOVER_VALID_COLOR
-} from "../../../../util/colors";
-import { TILE_SIZE_IN_PIXELS } from "../MapConstants";
-
-const HoverTile = ({ pixelX, pixelY, isValid, scale, onClick }) => (
- <Rect
- x={pixelX}
- y={pixelY}
- scaleX={scale}
- scaleY={scale}
- width={TILE_SIZE_IN_PIXELS}
- height={TILE_SIZE_IN_PIXELS}
- fill={isValid ? ROOM_HOVER_VALID_COLOR : ROOM_HOVER_INVALID_COLOR}
- onClick={onClick}
- />
-);
-
-HoverTile.propTypes = {
- pixelX: PropTypes.number.isRequired,
- pixelY: PropTypes.number.isRequired,
- isValid: PropTypes.bool.isRequired,
- onClick: PropTypes.func.isRequired
-};
-
-export default HoverTile;
diff --git a/src/components/app/map/elements/ImageComponent.js b/src/components/app/map/elements/ImageComponent.js
deleted file mode 100644
index cf41ddfe..00000000
--- a/src/components/app/map/elements/ImageComponent.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Image } from "react-konva";
-
-class ImageComponent extends React.Component {
- static imageCaches = {};
- static propTypes = {
- src: PropTypes.string.isRequired,
- x: PropTypes.number.isRequired,
- y: PropTypes.number.isRequired,
- width: PropTypes.number.isRequired,
- height: PropTypes.number.isRequired,
- opacity: PropTypes.number.isRequired
- };
-
- state = {
- image: null
- };
-
- componentDidMount() {
- if (ImageComponent.imageCaches[this.props.src]) {
- this.setState({ image: ImageComponent.imageCaches[this.props.src] });
- return;
- }
-
- const image = new window.Image();
- image.src = this.props.src;
- image.onload = () => {
- this.setState({ image });
- ImageComponent.imageCaches[this.props.src] = image;
- };
- }
-
- render() {
- return (
- <Image
- image={this.state.image}
- x={this.props.x}
- y={this.props.y}
- width={this.props.width}
- height={this.props.height}
- opacity={this.props.opacity}
- />
- );
- }
-}
-
-export default ImageComponent;
diff --git a/src/components/app/map/elements/RackFillBar.js b/src/components/app/map/elements/RackFillBar.js
deleted file mode 100644
index 43701d97..00000000
--- a/src/components/app/map/elements/RackFillBar.js
+++ /dev/null
@@ -1,89 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Group, Rect } from "react-konva";
-import {
- RACK_ENERGY_BAR_BACKGROUND_COLOR,
- RACK_ENERGY_BAR_FILL_COLOR,
- RACK_SPACE_BAR_BACKGROUND_COLOR,
- RACK_SPACE_BAR_FILL_COLOR
-} from "../../../../util/colors";
-import {
- OBJECT_BORDER_WIDTH_IN_PIXELS,
- OBJECT_MARGIN_IN_PIXELS,
- RACK_FILL_ICON_OPACITY,
- RACK_FILL_ICON_WIDTH,
- TILE_SIZE_IN_PIXELS
-} from "../MapConstants";
-import ImageComponent from "./ImageComponent";
-
-const RackFillBar = ({ positionX, positionY, type, fillFraction }) => {
- const halfOfObjectBorderWidth = OBJECT_BORDER_WIDTH_IN_PIXELS / 2;
- const x =
- positionX * TILE_SIZE_IN_PIXELS +
- OBJECT_MARGIN_IN_PIXELS +
- (type === "space"
- ? halfOfObjectBorderWidth
- : 0.5 * (TILE_SIZE_IN_PIXELS - 2 * OBJECT_MARGIN_IN_PIXELS));
- const startY =
- positionY * TILE_SIZE_IN_PIXELS +
- OBJECT_MARGIN_IN_PIXELS +
- halfOfObjectBorderWidth;
- const width =
- 0.5 * (TILE_SIZE_IN_PIXELS - OBJECT_MARGIN_IN_PIXELS * 2) -
- halfOfObjectBorderWidth;
- const fullHeight =
- TILE_SIZE_IN_PIXELS -
- OBJECT_MARGIN_IN_PIXELS * 2 -
- OBJECT_BORDER_WIDTH_IN_PIXELS;
-
- const fractionHeight = fillFraction * fullHeight;
- const fractionY =
- (positionY + 1) * TILE_SIZE_IN_PIXELS -
- OBJECT_MARGIN_IN_PIXELS -
- halfOfObjectBorderWidth -
- fractionHeight;
-
- return (
- <Group>
- <Rect
- x={x}
- y={startY}
- width={width}
- height={fullHeight}
- fill={
- type === "space"
- ? RACK_SPACE_BAR_BACKGROUND_COLOR
- : RACK_ENERGY_BAR_BACKGROUND_COLOR
- }
- />
- <Rect
- x={x}
- y={fractionY}
- width={width}
- height={fractionHeight}
- fill={
- type === "space"
- ? RACK_SPACE_BAR_FILL_COLOR
- : RACK_ENERGY_BAR_FILL_COLOR
- }
- />
- <ImageComponent
- src={"/img/topology/rack-" + type + "-icon.png"}
- x={x + width * 0.5 - RACK_FILL_ICON_WIDTH * 0.5}
- y={startY + fullHeight * 0.5 - RACK_FILL_ICON_WIDTH * 0.5}
- width={RACK_FILL_ICON_WIDTH}
- height={RACK_FILL_ICON_WIDTH}
- opacity={RACK_FILL_ICON_OPACITY}
- />
- </Group>
- );
-};
-
-RackFillBar.propTypes = {
- positionX: PropTypes.number.isRequired,
- positionY: PropTypes.number.isRequired,
- type: PropTypes.string.isRequired,
- fillFraction: PropTypes.number.isRequired
-};
-
-export default RackFillBar;
diff --git a/src/components/app/map/elements/RoomTile.js b/src/components/app/map/elements/RoomTile.js
deleted file mode 100644
index 71c3bf15..00000000
--- a/src/components/app/map/elements/RoomTile.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from "react";
-import { Rect } from "react-konva";
-import Shapes from "../../../../shapes/index";
-import { TILE_SIZE_IN_PIXELS } from "../MapConstants";
-
-const RoomTile = ({ tile, color }) => (
- <Rect
- x={tile.positionX * TILE_SIZE_IN_PIXELS}
- y={tile.positionY * TILE_SIZE_IN_PIXELS}
- width={TILE_SIZE_IN_PIXELS}
- height={TILE_SIZE_IN_PIXELS}
- fill={color}
- />
-);
-
-RoomTile.propTypes = {
- tile: Shapes.Tile
-};
-
-export default RoomTile;
diff --git a/src/components/app/map/elements/TileObject.js b/src/components/app/map/elements/TileObject.js
deleted file mode 100644
index c1b631db..00000000
--- a/src/components/app/map/elements/TileObject.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Rect } from "react-konva";
-import { OBJECT_BORDER_COLOR } from "../../../../util/colors";
-import {
- OBJECT_BORDER_WIDTH_IN_PIXELS,
- OBJECT_MARGIN_IN_PIXELS,
- TILE_SIZE_IN_PIXELS
-} from "../MapConstants";
-
-const TileObject = ({ positionX, positionY, color }) => (
- <Rect
- x={positionX * TILE_SIZE_IN_PIXELS + OBJECT_MARGIN_IN_PIXELS}
- y={positionY * TILE_SIZE_IN_PIXELS + OBJECT_MARGIN_IN_PIXELS}
- width={TILE_SIZE_IN_PIXELS - OBJECT_MARGIN_IN_PIXELS * 2}
- height={TILE_SIZE_IN_PIXELS - OBJECT_MARGIN_IN_PIXELS * 2}
- fill={color}
- stroke={OBJECT_BORDER_COLOR}
- strokeWidth={OBJECT_BORDER_WIDTH_IN_PIXELS}
- />
-);
-
-TileObject.propTypes = {
- positionX: PropTypes.number.isRequired,
- positionY: PropTypes.number.isRequired,
- color: PropTypes.string.isRequired
-};
-
-export default TileObject;
diff --git a/src/components/app/map/elements/TilePlusIcon.js b/src/components/app/map/elements/TilePlusIcon.js
deleted file mode 100644
index 06377152..00000000
--- a/src/components/app/map/elements/TilePlusIcon.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Group, Line } from "react-konva";
-import { TILE_PLUS_COLOR } from "../../../../util/colors";
-import {
- TILE_PLUS_MARGIN_IN_PIXELS,
- TILE_PLUS_WIDTH_IN_PIXELS,
- TILE_SIZE_IN_PIXELS
-} from "../MapConstants";
-
-const TilePlusIcon = ({ pixelX, pixelY, mapScale }) => {
- const linePoints = [
- [
- pixelX + 0.5 * TILE_SIZE_IN_PIXELS * mapScale,
- pixelY + TILE_PLUS_MARGIN_IN_PIXELS * mapScale,
- pixelX + 0.5 * TILE_SIZE_IN_PIXELS * mapScale,
- pixelY +
- TILE_SIZE_IN_PIXELS * mapScale -
- TILE_PLUS_MARGIN_IN_PIXELS * mapScale
- ],
- [
- pixelX + TILE_PLUS_MARGIN_IN_PIXELS * mapScale,
- pixelY + 0.5 * TILE_SIZE_IN_PIXELS * mapScale,
- pixelX +
- TILE_SIZE_IN_PIXELS * mapScale -
- TILE_PLUS_MARGIN_IN_PIXELS * mapScale,
- pixelY + 0.5 * TILE_SIZE_IN_PIXELS * mapScale
- ]
- ];
- return (
- <Group>
- {linePoints.map((points, index) => (
- <Line
- key={index}
- points={points}
- lineCap="round"
- stroke={TILE_PLUS_COLOR}
- strokeWidth={TILE_PLUS_WIDTH_IN_PIXELS * mapScale}
- listening={false}
- />
- ))}
- </Group>
- );
-};
-
-TilePlusIcon.propTypes = {
- pixelX: PropTypes.number,
- pixelY: PropTypes.number,
- mapScale: PropTypes.number
-};
-
-export default TilePlusIcon;
diff --git a/src/components/app/map/elements/WallSegment.js b/src/components/app/map/elements/WallSegment.js
deleted file mode 100644
index c5011656..00000000
--- a/src/components/app/map/elements/WallSegment.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from "react";
-import { Line } from "react-konva";
-import Shapes from "../../../../shapes/index";
-import { WALL_COLOR } from "../../../../util/colors";
-import { TILE_SIZE_IN_PIXELS, WALL_WIDTH_IN_PIXELS } from "../MapConstants";
-
-const WallSegment = ({ wallSegment }) => {
- let points;
- if (wallSegment.isHorizontal) {
- points = [
- wallSegment.startPosX * TILE_SIZE_IN_PIXELS,
- wallSegment.startPosY * TILE_SIZE_IN_PIXELS,
- (wallSegment.startPosX + wallSegment.length) * TILE_SIZE_IN_PIXELS,
- wallSegment.startPosY * TILE_SIZE_IN_PIXELS
- ];
- } else {
- points = [
- wallSegment.startPosX * TILE_SIZE_IN_PIXELS,
- wallSegment.startPosY * TILE_SIZE_IN_PIXELS,
- wallSegment.startPosX * TILE_SIZE_IN_PIXELS,
- (wallSegment.startPosY + wallSegment.length) * TILE_SIZE_IN_PIXELS
- ];
- }
-
- return (
- <Line
- points={points}
- lineCap="round"
- stroke={WALL_COLOR}
- strokeWidth={WALL_WIDTH_IN_PIXELS}
- />
- );
-};
-
-WallSegment.propTypes = {
- wallSegment: Shapes.WallSegment
-};
-
-export default WallSegment;
diff --git a/src/components/app/map/groups/DatacenterGroup.js b/src/components/app/map/groups/DatacenterGroup.js
deleted file mode 100644
index 51e32db6..00000000
--- a/src/components/app/map/groups/DatacenterGroup.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from "react";
-import { Group } from "react-konva";
-import GrayContainer from "../../../../containers/app/map/GrayContainer";
-import RoomContainer from "../../../../containers/app/map/RoomContainer";
-import Shapes from "../../../../shapes/index";
-
-const DatacenterGroup = ({ datacenter, interactionLevel }) => {
- if (!datacenter) {
- return <Group />;
- }
-
- if (interactionLevel.mode === "BUILDING") {
- return (
- <Group>
- {datacenter.roomIds.map(roomId => (
- <RoomContainer key={roomId} roomId={roomId} />
- ))}
- </Group>
- );
- }
-
- return (
- <Group>
- {datacenter.roomIds
- .filter(roomId => roomId !== interactionLevel.roomId)
- .map(roomId => <RoomContainer key={roomId} roomId={roomId} />)}
- {interactionLevel.mode === "ROOM" ? <GrayContainer /> : null}
- {datacenter.roomIds
- .filter(roomId => roomId === interactionLevel.roomId)
- .map(roomId => <RoomContainer key={roomId} roomId={roomId} />)}
- </Group>
- );
-};
-
-DatacenterGroup.propTypes = {
- datacenter: Shapes.Datacenter,
- interactionLevel: Shapes.InteractionLevel
-};
-
-export default DatacenterGroup;
diff --git a/src/components/app/map/groups/GridGroup.js b/src/components/app/map/groups/GridGroup.js
deleted file mode 100644
index bbb1eb68..00000000
--- a/src/components/app/map/groups/GridGroup.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import React from "react";
-import { Group, Line } from "react-konva";
-import { GRID_COLOR } from "../../../../util/colors";
-import {
- GRID_LINE_WIDTH_IN_PIXELS,
- MAP_SIZE,
- MAP_SIZE_IN_PIXELS,
- TILE_SIZE_IN_PIXELS
-} from "../MapConstants";
-
-const MAP_COORDINATE_ENTRIES = Array.from(new Array(MAP_SIZE), (x, i) => i);
-const HORIZONTAL_POINT_PAIRS = MAP_COORDINATE_ENTRIES.map(index => [
- 0,
- index * TILE_SIZE_IN_PIXELS,
- MAP_SIZE_IN_PIXELS,
- index * TILE_SIZE_IN_PIXELS
-]);
-const VERTICAL_POINT_PAIRS = MAP_COORDINATE_ENTRIES.map(index => [
- index * TILE_SIZE_IN_PIXELS,
- 0,
- index * TILE_SIZE_IN_PIXELS,
- MAP_SIZE_IN_PIXELS
-]);
-
-const GridGroup = () => (
- <Group>
- {HORIZONTAL_POINT_PAIRS.concat(
- VERTICAL_POINT_PAIRS
- ).map((points, index) => (
- <Line
- key={index}
- points={points}
- stroke={GRID_COLOR}
- strokeWidth={GRID_LINE_WIDTH_IN_PIXELS}
- listening={false}
- />
- ))}
- </Group>
-);
-
-export default GridGroup;
diff --git a/src/components/app/map/groups/RackGroup.js b/src/components/app/map/groups/RackGroup.js
deleted file mode 100644
index 69d6ac10..00000000
--- a/src/components/app/map/groups/RackGroup.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import React from "react";
-import { Group } from "react-konva";
-import RackEnergyFillContainer from "../../../../containers/app/map/RackEnergyFillContainer";
-import RackSpaceFillContainer from "../../../../containers/app/map/RackSpaceFillContainer";
-import Shapes from "../../../../shapes/index";
-import { RACK_BACKGROUND_COLOR } from "../../../../util/colors";
-import { convertLoadToSimulationColor } from "../../../../util/simulation-load";
-import TileObject from "../elements/TileObject";
-
-const RackGroup = ({ tile, inSimulation, rackLoad }) => {
- let color = RACK_BACKGROUND_COLOR;
- if (inSimulation && rackLoad >= 0) {
- color = convertLoadToSimulationColor(rackLoad);
- }
-
- return (
- <Group>
- <TileObject
- positionX={tile.positionX}
- positionY={tile.positionY}
- color={color}
- />
- <Group opacity={inSimulation ? 0.3 : 1}>
- <RackSpaceFillContainer
- tileId={tile.id}
- positionX={tile.positionX}
- positionY={tile.positionY}
- />
- <RackEnergyFillContainer
- tileId={tile.id}
- positionX={tile.positionX}
- positionY={tile.positionY}
- />
- </Group>
- </Group>
- );
-};
-
-RackGroup.propTypes = {
- tile: Shapes.Tile
-};
-
-export default RackGroup;
diff --git a/src/components/app/map/groups/RoomGroup.js b/src/components/app/map/groups/RoomGroup.js
deleted file mode 100644
index c8f0d3db..00000000
--- a/src/components/app/map/groups/RoomGroup.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import React from "react";
-import { Group } from "react-konva";
-import GrayContainer from "../../../../containers/app/map/GrayContainer";
-import TileContainer from "../../../../containers/app/map/TileContainer";
-import WallContainer from "../../../../containers/app/map/WallContainer";
-import Shapes from "../../../../shapes/index";
-
-const RoomGroup = ({
- room,
- interactionLevel,
- currentRoomInConstruction,
- onClick
-}) => {
- if (currentRoomInConstruction === room.id) {
- return (
- <Group onClick={onClick}>
- {room.tileIds.map(tileId => (
- <TileContainer key={tileId} tileId={tileId} newTile={true} />
- ))}
- </Group>
- );
- }
-
- return (
- <Group onClick={onClick}>
- {(() => {
- if (
- (interactionLevel.mode === "RACK" ||
- interactionLevel.mode === "MACHINE") &&
- interactionLevel.roomId === room.id
- ) {
- return [
- room.tileIds
- .filter(tileId => tileId !== interactionLevel.tileId)
- .map(tileId => <TileContainer key={tileId} tileId={tileId} />),
- <GrayContainer key={-1} />,
- room.tileIds
- .filter(tileId => tileId === interactionLevel.tileId)
- .map(tileId => <TileContainer key={tileId} tileId={tileId} />)
- ];
- } else {
- return room.tileIds.map(tileId => (
- <TileContainer key={tileId} tileId={tileId} />
- ));
- }
- })()}
- <WallContainer roomId={room.id} />
- </Group>
- );
-};
-
-RoomGroup.propTypes = {
- room: Shapes.Room
-};
-
-export default RoomGroup;
diff --git a/src/components/app/map/groups/TileGroup.js b/src/components/app/map/groups/TileGroup.js
deleted file mode 100644
index 8f3953d7..00000000
--- a/src/components/app/map/groups/TileGroup.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Group } from "react-konva";
-import RackContainer from "../../../../containers/app/map/RackContainer";
-import Shapes from "../../../../shapes/index";
-import {
- ROOM_DEFAULT_COLOR,
- ROOM_IN_CONSTRUCTION_COLOR
-} from "../../../../util/colors";
-import { convertLoadToSimulationColor } from "../../../../util/simulation-load";
-import RoomTile from "../elements/RoomTile";
-
-const TileGroup = ({ tile, newTile, inSimulation, roomLoad, onClick }) => {
- let tileObject;
- switch (tile.objectType) {
- case "RACK":
- tileObject = <RackContainer tile={tile} />;
- break;
- default:
- tileObject = null;
- }
-
- let color = ROOM_DEFAULT_COLOR;
- if (newTile) {
- color = ROOM_IN_CONSTRUCTION_COLOR;
- } else if (inSimulation && roomLoad >= 0) {
- color = convertLoadToSimulationColor(roomLoad);
- }
-
- return (
- <Group onClick={() => onClick(tile)}>
- <RoomTile tile={tile} color={color} />
- {tileObject}
- </Group>
- );
-};
-
-TileGroup.propTypes = {
- tile: Shapes.Tile,
- newTile: PropTypes.bool
-};
-
-export default TileGroup;
diff --git a/src/components/app/map/groups/WallGroup.js b/src/components/app/map/groups/WallGroup.js
deleted file mode 100644
index 43de66e8..00000000
--- a/src/components/app/map/groups/WallGroup.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Group } from "react-konva";
-import Shapes from "../../../../shapes/index";
-import { deriveWallLocations } from "../../../../util/tile-calculations";
-import WallSegment from "../elements/WallSegment";
-
-const WallGroup = ({ tiles }) => {
- return (
- <Group>
- {deriveWallLocations(tiles).map((wallSegment, index) => (
- <WallSegment key={index} wallSegment={wallSegment} />
- ))}
- </Group>
- );
-};
-
-WallGroup.propTypes = {
- tiles: PropTypes.arrayOf(Shapes.Tile).isRequired
-};
-
-export default WallGroup;
diff --git a/src/components/app/map/layers/HoverLayerComponent.js b/src/components/app/map/layers/HoverLayerComponent.js
deleted file mode 100644
index c39532f1..00000000
--- a/src/components/app/map/layers/HoverLayerComponent.js
+++ /dev/null
@@ -1,85 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Layer } from "react-konva";
-import HoverTile from "../elements/HoverTile";
-import { TILE_SIZE_IN_PIXELS } from "../MapConstants";
-
-class HoverLayerComponent extends React.Component {
- static propTypes = {
- mouseX: PropTypes.number.isRequired,
- mouseY: PropTypes.number.isRequired,
- mapPosition: PropTypes.object.isRequired,
- mapScale: PropTypes.number.isRequired,
- isEnabled: PropTypes.func.isRequired,
- onClick: PropTypes.func.isRequired
- };
-
- state = {
- positionX: -1,
- positionY: -1,
- validity: false
- };
-
- componentDidUpdate() {
- if (!this.props.isEnabled()) {
- return;
- }
-
- const positionX = Math.floor(
- (this.props.mouseX - this.props.mapPosition.x) /
- (this.props.mapScale * TILE_SIZE_IN_PIXELS)
- );
- const positionY = Math.floor(
- (this.props.mouseY - this.props.mapPosition.y) /
- (this.props.mapScale * TILE_SIZE_IN_PIXELS)
- );
-
- if (
- positionX !== this.state.positionX ||
- positionY !== this.state.positionY
- ) {
- this.setState({
- positionX,
- positionY,
- validity: this.props.isValid(positionX, positionY)
- });
- }
- }
-
- render() {
- if (!this.props.isEnabled()) {
- return <Layer />;
- }
-
- const pixelX =
- this.props.mapScale * this.state.positionX * TILE_SIZE_IN_PIXELS +
- this.props.mapPosition.x;
- const pixelY =
- this.props.mapScale * this.state.positionY * TILE_SIZE_IN_PIXELS +
- this.props.mapPosition.y;
-
- return (
- <Layer opacity={0.6}>
- <HoverTile
- pixelX={pixelX}
- pixelY={pixelY}
- scale={this.props.mapScale}
- isValid={this.state.validity}
- onClick={() =>
- this.state.validity
- ? this.props.onClick(this.state.positionX, this.state.positionY)
- : undefined}
- />
- {this.props.children
- ? React.cloneElement(this.props.children, {
- pixelX,
- pixelY,
- scale: this.props.mapScale
- })
- : undefined}
- </Layer>
- );
- }
-}
-
-export default HoverLayerComponent;
diff --git a/src/components/app/map/layers/MapLayerComponent.js b/src/components/app/map/layers/MapLayerComponent.js
deleted file mode 100644
index 6ad3cb88..00000000
--- a/src/components/app/map/layers/MapLayerComponent.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from "react";
-import { Group, Layer } from "react-konva";
-import DatacenterContainer from "../../../../containers/app/map/DatacenterContainer";
-import Backdrop from "../elements/Backdrop";
-import GridGroup from "../groups/GridGroup";
-
-const MapLayerComponent = ({ mapPosition, mapScale }) => (
- <Layer>
- <Group
- x={mapPosition.x}
- y={mapPosition.y}
- scaleX={mapScale}
- scaleY={mapScale}
- >
- <Backdrop />
- <DatacenterContainer />
- <GridGroup />
- </Group>
- </Layer>
-);
-
-export default MapLayerComponent;
diff --git a/src/components/app/map/layers/ObjectHoverLayerComponent.js b/src/components/app/map/layers/ObjectHoverLayerComponent.js
deleted file mode 100644
index e7342d3c..00000000
--- a/src/components/app/map/layers/ObjectHoverLayerComponent.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from "react";
-import TilePlusIcon from "../elements/TilePlusIcon";
-import HoverLayerComponent from "./HoverLayerComponent";
-
-const ObjectHoverLayerComponent = props => (
- <HoverLayerComponent {...props}>
- <TilePlusIcon {...props} />
- </HoverLayerComponent>
-);
-
-export default ObjectHoverLayerComponent;
diff --git a/src/components/app/map/layers/RoomHoverLayerComponent.js b/src/components/app/map/layers/RoomHoverLayerComponent.js
deleted file mode 100644
index feea5ae5..00000000
--- a/src/components/app/map/layers/RoomHoverLayerComponent.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import React from "react";
-import HoverLayerComponent from "./HoverLayerComponent";
-
-const RoomHoverLayerComponent = props => <HoverLayerComponent {...props} />;
-
-export default RoomHoverLayerComponent;
diff --git a/src/components/app/sidebars/Sidebar.js b/src/components/app/sidebars/Sidebar.js
deleted file mode 100644
index 33dbe011..00000000
--- a/src/components/app/sidebars/Sidebar.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import classNames from "classnames";
-import React from "react";
-import "./Sidebar.css";
-
-class Sidebar extends React.Component {
- state = {
- collapsed: false
- };
-
- render() {
- const collapseButton = (
- <div
- className={classNames("sidebar-collapse-button", {
- "sidebar-collapse-button-right": this.props.isRight
- })}
- onClick={() => this.setState({ collapsed: !this.state.collapsed })}
- >
- {(this.state.collapsed && this.props.isRight) ||
- (!this.state.collapsed && !this.props.isRight) ? (
- <span
- className="fa fa-angle-left"
- title={this.props.isRight ? "Expand" : "Collapse"}
- />
- ) : (
- <span
- className="fa fa-angle-right"
- title={this.props.isRight ? "Collapse" : "Expand"}
- />
- )}
- </div>
- );
-
- if (this.state.collapsed) {
- return collapseButton;
- }
- return (
- <div
- className={classNames("sidebar p-3 h-100", {
- "sidebar-right": this.props.isRight
- })}
- onWheel={e => e.stopPropagation()}
- >
- {this.props.children}
- {collapseButton}
- </div>
- );
- }
-}
-
-export default Sidebar;
diff --git a/src/components/app/sidebars/Sidebar.sass b/src/components/app/sidebars/Sidebar.sass
deleted file mode 100644
index 4d0e5f1e..00000000
--- a/src/components/app/sidebars/Sidebar.sass
+++ /dev/null
@@ -1,50 +0,0 @@
-@import ../../../style-globals/_variables.sass
-@import ../../../style-globals/_mixins.sass
-
-.sidebar-collapse-button
- position: absolute
- left: 5px
- top: 5px
- padding: 5px 7px
-
- background: white
- border: solid 1px $gray-semi-light
- z-index: 99
-
- +clickable
- +border-radius(5px)
- +transition(background, 200ms)
-
- &.sidebar-collapse-button-right
- left: auto
- right: 5px
- top: 5px
-
- &:hover
- background: #eeeeee
-
-.sidebar
- position: absolute
- top: 0
- left: 0
- width: 350px
-
- z-index: 100
- background: white
-
- border-right: $gray-semi-dark 1px solid
-
- .sidebar-collapse-button
- left: auto
- right: -25px
-
-.sidebar-right
- left: auto
- right: 0
-
- border-left: $gray-semi-dark 1px solid
- border-right: none
-
- .sidebar-collapse-button-right
- left: -25px
- right: auto
diff --git a/src/components/app/sidebars/elements/LoadBarComponent.js b/src/components/app/sidebars/elements/LoadBarComponent.js
deleted file mode 100644
index 8c9b164b..00000000
--- a/src/components/app/sidebars/elements/LoadBarComponent.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import classNames from "classnames";
-import React from "react";
-
-const LoadBarComponent = ({ percent, disabled }) => (
- <div className="mt-1">
- <strong>Current load</strong>
- <div className={classNames("progress", { disabled })}>
- <div
- className="progress-bar"
- role="progressbar"
- aria-valuenow={percent}
- aria-valuemin="0"
- aria-valuemax="100"
- style={{ width: percent + "%" }}
- >
- {percent}%
- </div>
- </div>
- </div>
-);
-
-export default LoadBarComponent;
diff --git a/src/components/app/sidebars/elements/LoadChartComponent.js b/src/components/app/sidebars/elements/LoadChartComponent.js
deleted file mode 100644
index 5f0d40cb..00000000
--- a/src/components/app/sidebars/elements/LoadChartComponent.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import React from "react";
-import ReactDOM from "react-dom/server";
-import SvgSaver from "svgsaver";
-import {
- VictoryAxis,
- VictoryChart,
- VictoryLabel,
- VictoryLine,
- VictoryScatter
-} from "victory";
-import { convertSecondsToFormattedTime } from "../../../../util/date-time";
-
-const LoadChartComponent = ({ data, currentTick }) => {
- const onExport = () => {
- const div = document.createElement("div");
- div.innerHTML = ReactDOM.renderToString(
- <VictoryChartComponent
- data={data}
- currentTick={currentTick}
- showCurrentTick={false}
- />
- );
- div.firstChild.style =
- "font-family: Roboto, Arial, sans-serif; font-size: 10pt;";
- const svgSaver = new SvgSaver();
- svgSaver.asSvg(
- div.firstChild,
- "opendc-chart-export-" + Date.now() + ".svg"
- );
- };
-
- return (
- <div className="mt-1" style={{ position: "relative" }}>
- <strong>Load over time</strong>
- <VictoryChartComponent
- data={data}
- currentTick={currentTick}
- showCurrentTick={true}
- />
- <ExportChartComponent onExport={onExport} />
- </div>
- );
-};
-
-const VictoryChartComponent = ({ data, currentTick, showCurrentTick }) => (
- <VictoryChart
- height={250}
- padding={{ top: 10, bottom: 50, left: 50, right: 50 }}
- >
- <VictoryAxis
- tickFormat={tick => convertSecondsToFormattedTime(tick)}
- fixLabelOverlap={true}
- label="Simulated Time"
- />
- <VictoryAxis dependentAxis label="Load" />
- <VictoryLine data={data} />
- <VictoryScatter data={data} />
- {showCurrentTick ? (
- <VictoryLine
- labelComponent={
- <VictoryLabel renderInPortal angle={90} dy={-5} dx={60} />
- }
- data={[{ x: currentTick + 1, y: 0 }, { x: currentTick + 1, y: 1 }]}
- labels={point =>
- point.y === 1
- ? "Current tick : " + convertSecondsToFormattedTime(currentTick)
- : ""}
- style={{
- data: { stroke: "#00A6D6", strokeWidth: 4 },
- labels: { fill: "#00A6D6" }
- }}
- />
- ) : (
- undefined
- )}
- </VictoryChart>
-);
-
-const ExportChartComponent = ({ onExport }) => (
- <button
- className="btn btn-success btn-circle btn-sm"
- title="Export Chart to PNG Image"
- onClick={onExport}
- style={{ position: "absolute", top: 0, right: 0 }}
- >
- <span className="fa fa-camera" />
- </button>
-);
-
-export default LoadChartComponent;
diff --git a/src/components/app/sidebars/simulation/ExperimentMetadataComponent.js b/src/components/app/sidebars/simulation/ExperimentMetadataComponent.js
deleted file mode 100644
index bc563dab..00000000
--- a/src/components/app/sidebars/simulation/ExperimentMetadataComponent.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from "react";
-
-const ExperimentMetadataComponent = ({
- experimentName,
- pathName,
- traceName,
- schedulerName
-}) => (
- <div>
- <h2>{experimentName}</h2>
- <p>
- Path: <strong>{pathName}</strong>
- </p>
- <p>
- Trace: <strong>{traceName}</strong>
- </p>
- <p>
- Scheduler: <strong>{schedulerName}</strong>
- </p>
- </div>
-);
-
-export default ExperimentMetadataComponent;
diff --git a/src/components/app/sidebars/simulation/LoadMetricComponent.js b/src/components/app/sidebars/simulation/LoadMetricComponent.js
deleted file mode 100644
index 3e4cf810..00000000
--- a/src/components/app/sidebars/simulation/LoadMetricComponent.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from "react";
-import {
- SIM_HIGH_COLOR,
- SIM_LOW_COLOR,
- SIM_MID_HIGH_COLOR,
- SIM_MID_LOW_COLOR
-} from "../../../../util/colors";
-import { LOAD_NAME_MAP } from "../../../../util/simulation-load";
-
-const LoadMetricComponent = ({ loadMetric }) => (
- <div>
- <div>
- Colors represent <strong>{LOAD_NAME_MAP[loadMetric]}</strong>
- </div>
- <div className="btn-group mb-2" style={{ display: "flex" }}>
- <span
- className="btn btn-secondary"
- style={{ backgroundColor: SIM_LOW_COLOR, flex: 1 }}
- title="0-25%"
- />
- <span
- className="btn btn-secondary"
- style={{ backgroundColor: SIM_MID_LOW_COLOR, flex: 1 }}
- title="25-50%"
- />
- <span
- className="btn btn-secondary"
- style={{ backgroundColor: SIM_MID_HIGH_COLOR, flex: 1 }}
- title="50-75%"
- />
- <span
- className="btn btn-secondary"
- style={{ backgroundColor: SIM_HIGH_COLOR, flex: 1 }}
- title="75-100%"
- />
- </div>
- </div>
-);
-
-export default LoadMetricComponent;
diff --git a/src/components/app/sidebars/simulation/SimulationSidebarComponent.js b/src/components/app/sidebars/simulation/SimulationSidebarComponent.js
deleted file mode 100644
index 08dbb29a..00000000
--- a/src/components/app/sidebars/simulation/SimulationSidebarComponent.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from "react";
-import ExperimentMetadataContainer from "../../../../containers/app/sidebars/simulation/ExperimentMetadataContainer";
-import LoadMetricContainer from "../../../../containers/app/sidebars/simulation/LoadMetricContainer";
-import TraceContainer from "../../../../containers/app/sidebars/simulation/TraceContainer";
-import Sidebar from "../Sidebar";
-import "./SimulationSidebarComponent.css";
-
-const SimulationSidebarComponent = () => {
- return (
- <Sidebar isRight={false}>
- <div className="simulation-sidebar-container flex-column">
- <ExperimentMetadataContainer />
- <LoadMetricContainer />
- <div className="trace-container">
- <TraceContainer />
- </div>
- </div>
- </Sidebar>
- );
-};
-
-export default SimulationSidebarComponent;
diff --git a/src/components/app/sidebars/simulation/SimulationSidebarComponent.sass b/src/components/app/sidebars/simulation/SimulationSidebarComponent.sass
deleted file mode 100644
index 82af97fa..00000000
--- a/src/components/app/sidebars/simulation/SimulationSidebarComponent.sass
+++ /dev/null
@@ -1,8 +0,0 @@
-.simulation-sidebar-container
- display: flex
- height: 100%
- max-height: 100%
-
-.trace-container
- flex: 1
- overflow-y: scroll
diff --git a/src/components/app/sidebars/simulation/TaskComponent.js b/src/components/app/sidebars/simulation/TaskComponent.js
deleted file mode 100644
index bd917cc9..00000000
--- a/src/components/app/sidebars/simulation/TaskComponent.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import approx from "approximate-number";
-import classNames from "classnames";
-import React from "react";
-import { convertSecondsToFormattedTime } from "../../../../util/date-time";
-
-const TaskComponent = ({ task, flopsLeft }) => {
- let icon;
- let progressBarContent;
- let percent;
- let infoTitle;
-
- if (flopsLeft === task.totalFlopCount) {
- icon = "hourglass-half";
- progressBarContent = "";
- percent = 0;
- infoTitle = "Not submitted yet";
- } else if (flopsLeft > 0) {
- icon = "refresh";
- progressBarContent = approx(task.totalFlopCount - flopsLeft) + " FLOP";
- percent = 100 * (task.totalFlopCount - flopsLeft) / task.totalFlopCount;
- infoTitle =
- progressBarContent + " (" + Math.round(percent * 10) / 10 + "%)";
- } else {
- icon = "check";
- progressBarContent = "Completed";
- percent = 100;
- infoTitle = "Completed";
- }
-
- return (
- <li className="list-group-item flex-column align-items-start">
- <div className="d-flex w-100 justify-content-between">
- <h5 className="mb-1">{approx(task.totalFlopCount)} FLOP</h5>
- <small>Starts at {convertSecondsToFormattedTime(task.startTick)}</small>
- </div>
- <div title={infoTitle} style={{ display: "flex" }}>
- <span
- className={classNames("fa", "fa-" + icon)}
- style={{ width: "20px" }}
- />
- <div className="progress" style={{ flexGrow: 1 }}>
- <div
- className="progress-bar"
- role="progressbar"
- aria-valuenow={percent}
- aria-valuemin="0"
- aria-valuemax="100"
- style={{ width: percent + "%" }}
- >
- {progressBarContent}
- </div>
- </div>
- </div>
- </li>
- );
-};
-
-export default TaskComponent;
diff --git a/src/components/app/sidebars/simulation/TraceComponent.js b/src/components/app/sidebars/simulation/TraceComponent.js
deleted file mode 100644
index 2b6559b4..00000000
--- a/src/components/app/sidebars/simulation/TraceComponent.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from "react";
-import TaskContainer from "../../../../containers/app/sidebars/simulation/TaskContainer";
-
-const TraceComponent = ({ jobs }) => (
- <div>
- <h3>Trace</h3>
- {jobs.map(job => (
- <div key={job.id}>
- <h4>Job: {job.name}</h4>
- <ul className="list-group">
- {job.taskIds.map(taskId => (
- <TaskContainer taskId={taskId} key={taskId} />
- ))}
- </ul>
- </div>
- ))}
- </div>
-);
-
-export default TraceComponent;
diff --git a/src/components/app/sidebars/topology/NameComponent.js b/src/components/app/sidebars/topology/NameComponent.js
deleted file mode 100644
index 805538b3..00000000
--- a/src/components/app/sidebars/topology/NameComponent.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from "react";
-import FontAwesome from "react-fontawesome";
-
-const NameComponent = ({ name, onEdit }) => (
- <h2>
- {name}
- <button className="btn btn-outline-secondary float-right" onClick={onEdit}>
- <FontAwesome name="pencil" />
- </button>
- </h2>
-);
-
-export default NameComponent;
diff --git a/src/components/app/sidebars/topology/TopologySidebarComponent.js b/src/components/app/sidebars/topology/TopologySidebarComponent.js
deleted file mode 100644
index 81e510a1..00000000
--- a/src/components/app/sidebars/topology/TopologySidebarComponent.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from "react";
-import BuildingSidebarContainer from "../../../../containers/app/sidebars/topology/building/BuildingSidebarContainer";
-import MachineSidebarContainer from "../../../../containers/app/sidebars/topology/machine/MachineSidebarContainer";
-import RackSidebarContainer from "../../../../containers/app/sidebars/topology/rack/RackSidebarContainer";
-import RoomSidebarContainer from "../../../../containers/app/sidebars/topology/room/RoomSidebarContainer";
-import Sidebar from "../Sidebar";
-
-const TopologySidebarComponent = ({ interactionLevel }) => {
- let sidebarContent;
-
- switch (interactionLevel.mode) {
- case "BUILDING":
- sidebarContent = <BuildingSidebarContainer />;
- break;
- case "ROOM":
- sidebarContent = <RoomSidebarContainer />;
- break;
- case "RACK":
- sidebarContent = <RackSidebarContainer />;
- break;
- case "MACHINE":
- sidebarContent = <MachineSidebarContainer />;
- break;
- default:
- sidebarContent = "Missing Content";
- }
-
- return <Sidebar isRight={true}>{sidebarContent}</Sidebar>;
-};
-
-export default TopologySidebarComponent;
diff --git a/src/components/app/sidebars/topology/building/BuildingSidebarComponent.js b/src/components/app/sidebars/topology/building/BuildingSidebarComponent.js
deleted file mode 100644
index f16c19f0..00000000
--- a/src/components/app/sidebars/topology/building/BuildingSidebarComponent.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from "react";
-import NewRoomConstructionContainer from "../../../../../containers/app/sidebars/topology/building/NewRoomConstructionContainer";
-
-const BuildingSidebarComponent = ({ inSimulation }) => {
- return (
- <div>
- <h2>Building</h2>
- {inSimulation ? (
- <div className="alert alert-info">
- <span className="fa fa-info-circle mr-2" />
- <strong>Click on individual rooms</strong> to see their stats!
- </div>
- ) : (
- <NewRoomConstructionContainer />
- )}
- </div>
- );
-};
-
-export default BuildingSidebarComponent;
diff --git a/src/components/app/sidebars/topology/building/NewRoomConstructionComponent.js b/src/components/app/sidebars/topology/building/NewRoomConstructionComponent.js
deleted file mode 100644
index 7b049642..00000000
--- a/src/components/app/sidebars/topology/building/NewRoomConstructionComponent.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from "react";
-
-const NewRoomConstructionComponent = ({
- onStart,
- onFinish,
- onCancel,
- currentRoomInConstruction
-}) => {
- if (currentRoomInConstruction === -1) {
- return (
- <div className="btn btn-outline-primary btn-block" onClick={onStart}>
- <span className="fa fa-plus mr-2" />
- Construct a new room
- </div>
- );
- }
- return (
- <div>
- <div className="btn btn-primary btn-block" onClick={onFinish}>
- <span className="fa fa-check mr-2" />
- Finalize new room
- </div>
- <div className="btn btn-default btn-block" onClick={onCancel}>
- <span className="fa fa-times mr-2" />
- Cancel construction
- </div>
- </div>
- );
-};
-
-export default NewRoomConstructionComponent;
diff --git a/src/components/app/sidebars/topology/machine/BackToRackComponent.js b/src/components/app/sidebars/topology/machine/BackToRackComponent.js
deleted file mode 100644
index 7f56aca0..00000000
--- a/src/components/app/sidebars/topology/machine/BackToRackComponent.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from "react";
-
-const BackToRackComponent = ({ onClick }) => (
- <div className="btn btn-secondary btn-block" onClick={onClick}>
- <span className="fa fa-angle-left mr-2" />
- Back to rack
- </div>
-);
-
-export default BackToRackComponent;
diff --git a/src/components/app/sidebars/topology/machine/DeleteMachineComponent.js b/src/components/app/sidebars/topology/machine/DeleteMachineComponent.js
deleted file mode 100644
index d8774bf9..00000000
--- a/src/components/app/sidebars/topology/machine/DeleteMachineComponent.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from "react";
-
-const DeleteMachineComponent = ({ onClick }) => (
- <div className="btn btn-outline-danger btn-block" onClick={onClick}>
- <span className="fa fa-trash mr-2" />
- Delete this machine
- </div>
-);
-
-export default DeleteMachineComponent;
diff --git a/src/components/app/sidebars/topology/machine/MachineNameComponent.js b/src/components/app/sidebars/topology/machine/MachineNameComponent.js
deleted file mode 100644
index 0ad8b79c..00000000
--- a/src/components/app/sidebars/topology/machine/MachineNameComponent.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import React from "react";
-
-const MachineNameComponent = ({ position }) => (
- <h2>Machine at slot {position}</h2>
-);
-
-export default MachineNameComponent;
diff --git a/src/components/app/sidebars/topology/machine/MachineSidebarComponent.js b/src/components/app/sidebars/topology/machine/MachineSidebarComponent.js
deleted file mode 100644
index 5ccaf25c..00000000
--- a/src/components/app/sidebars/topology/machine/MachineSidebarComponent.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from "react";
-import LoadBarContainer from "../../../../../containers/app/sidebars/elements/LoadBarContainer";
-import LoadChartContainer from "../../../../../containers/app/sidebars/elements/LoadChartContainer";
-import BackToRackContainer from "../../../../../containers/app/sidebars/topology/machine/BackToRackContainer";
-import DeleteMachineContainer from "../../../../../containers/app/sidebars/topology/machine/DeleteMachineContainer";
-import MachineNameContainer from "../../../../../containers/app/sidebars/topology/machine/MachineNameContainer";
-import UnitTabsContainer from "../../../../../containers/app/sidebars/topology/machine/UnitTabsContainer";
-
-const MachineSidebarComponent = ({ inSimulation, machineId }) => {
- return (
- <div>
- <MachineNameContainer />
- <BackToRackContainer />
- {inSimulation ? (
- <div>
- <LoadBarContainer objectType="machine" objectId={machineId} />
- <LoadChartContainer objectType="machine" objectId={machineId} />
- </div>
- ) : (
- <DeleteMachineContainer />
- )}
- <UnitTabsContainer />
- </div>
- );
-};
-
-export default MachineSidebarComponent;
diff --git a/src/components/app/sidebars/topology/machine/UnitAddComponent.js b/src/components/app/sidebars/topology/machine/UnitAddComponent.js
deleted file mode 100644
index 0c903228..00000000
--- a/src/components/app/sidebars/topology/machine/UnitAddComponent.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-
-class UnitAddComponent extends React.Component {
- static propTypes = {
- units: PropTypes.array.isRequired,
- onAdd: PropTypes.func.isRequired
- };
-
- render() {
- return (
- <div className="form-inline">
- <div className="form-group w-100">
- <select
- className="form-control w-75 mr-1"
- ref={unitSelect => (this.unitSelect = unitSelect)}
- >
- {this.props.units.map(unit => (
- <option value={unit.id} key={unit.id}>
- {unit.manufacturer +
- " " +
- unit.family +
- " " +
- unit.model +
- " " +
- unit.generation}
- </option>
- ))}
- </select>
- <button
- type="submit"
- className="btn btn-outline-primary"
- onClick={() =>
- this.props.onAdd(parseInt(this.unitSelect.value, 10))
- }
- >
- <span className="fa fa-plus mr-2" />
- Add
- </button>
- </div>
- </div>
- );
- }
-}
-
-export default UnitAddComponent;
diff --git a/src/components/app/sidebars/topology/machine/UnitComponent.js b/src/components/app/sidebars/topology/machine/UnitComponent.js
deleted file mode 100644
index 7c27043d..00000000
--- a/src/components/app/sidebars/topology/machine/UnitComponent.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import React from "react";
-import jQuery from "../../../../../util/jquery";
-
-class UnitComponent extends React.Component {
- componentDidMount() {
- jQuery(".unit-info-popover").popover({
- trigger: "focus"
- });
- }
-
- render() {
- let unitInfo;
- if (this.props.unitType === "cpu" || this.props.unitType === "gpu") {
- unitInfo =
- "<strong>Clockrate:</strong> <code>" +
- this.props.unit.clockRateMhz +
- " MHz</code><br/>" +
- "<strong>Num. Cores:</strong> <code>" +
- this.props.unit.numberOfCores +
- "</code><br/>" +
- "<strong>Energy Cons.:</strong> <code>" +
- this.props.unit.energyConsumptionW +
- " W</code>";
- } else if (
- this.props.unitType === "memory" ||
- this.props.unitType === "storage"
- ) {
- unitInfo =
- "<strong>Speed:</strong> <code>" +
- this.props.unit.speedMbPerS +
- " Mb/s</code><br/>" +
- "<strong>Size:</strong> <code>" +
- this.props.unit.sizeMb +
- " MB</code><br/>" +
- "<strong>Energy Cons.:</strong> <code> " +
- this.props.unit.energyConsumptionW +
- " W</code>";
- }
-
- return (
- <li className="d-flex list-group-item justify-content-between align-items-center">
- <span style={{ maxWidth: "60%" }}>
- {this.props.unit.manufacturer +
- " " +
- this.props.unit.family +
- " " +
- this.props.unit.model +
- " " +
- this.props.unit.generation}
- </span>
- <span>
- <span
- tabIndex="0"
- className="unit-info-popover btn btn-outline-info mr-1 fa fa-info-circle"
- role="button"
- data-toggle="popover"
- data-trigger="focus"
- title="Unit information"
- data-content={unitInfo}
- data-html="true"
- />
- {this.props.inSimulation ? (
- undefined
- ) : (
- <span
- className="btn btn-outline-danger"
- onClick={this.props.onDelete}
- >
- <span className="fa fa-trash" />
- </span>
- )}
- </span>
- </li>
- );
- }
-}
-
-export default UnitComponent;
diff --git a/src/components/app/sidebars/topology/machine/UnitListComponent.js b/src/components/app/sidebars/topology/machine/UnitListComponent.js
deleted file mode 100644
index 38df806b..00000000
--- a/src/components/app/sidebars/topology/machine/UnitListComponent.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import React from "react";
-import UnitContainer from "../../../../../containers/app/sidebars/topology/machine/UnitContainer";
-
-const UnitListComponent = ({ unitType, unitIds, inSimulation }) => (
- <ul className="list-group mt-1">
- {unitIds.length !== 0 ? (
- unitIds.map((unitId, index) => (
- <UnitContainer
- unitType={unitType}
- unitId={unitId}
- index={index}
- key={index}
- />
- ))
- ) : (
- <div className="alert alert-info">
- {inSimulation ? (
- <strong>No units of this type in this machine</strong>
- ) : (
- <span>
- <strong>No units...</strong> Add some with the menu above!
- </span>
- )}
- </div>
- )}
- </ul>
-);
-
-export default UnitListComponent;
diff --git a/src/components/app/sidebars/topology/machine/UnitTabsComponent.js b/src/components/app/sidebars/topology/machine/UnitTabsComponent.js
deleted file mode 100644
index 0683c796..00000000
--- a/src/components/app/sidebars/topology/machine/UnitTabsComponent.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import React from "react";
-import UnitAddContainer from "../../../../../containers/app/sidebars/topology/machine/UnitAddContainer";
-import UnitListContainer from "../../../../../containers/app/sidebars/topology/machine/UnitListContainer";
-
-const UnitTabsComponent = ({ inSimulation }) => (
- <div>
- <ul className="nav nav-tabs mt-2 mb-1" role="tablist">
- <li className="nav-item">
- <a
- className="nav-link active"
- data-toggle="tab"
- href="#cpu-units"
- role="tab"
- >
- CPU
- </a>
- </li>
- <li className="nav-item">
- <a className="nav-link" data-toggle="tab" href="#gpu-units" role="tab">
- GPU
- </a>
- </li>
- <li className="nav-item">
- <a
- className="nav-link"
- data-toggle="tab"
- href="#memory-units"
- role="tab"
- >
- Memory
- </a>
- </li>
- <li className="nav-item">
- <a
- className="nav-link"
- data-toggle="tab"
- href="#storage-units"
- role="tab"
- >
- Storage
- </a>
- </li>
- </ul>
- <div className="tab-content">
- <div className="tab-pane active" id="cpu-units" role="tabpanel">
- {inSimulation ? undefined : <UnitAddContainer unitType="cpu" />}
- <UnitListContainer unitType="cpu" />
- </div>
- <div className="tab-pane" id="gpu-units" role="tabpanel">
- {inSimulation ? undefined : <UnitAddContainer unitType="gpu" />}
- <UnitListContainer unitType="gpu" />
- </div>
- <div className="tab-pane" id="memory-units" role="tabpanel">
- {inSimulation ? undefined : <UnitAddContainer unitType="memory" />}
- <UnitListContainer unitType="memory" />
- </div>
- <div className="tab-pane" id="storage-units" role="tabpanel">
- {inSimulation ? undefined : <UnitAddContainer unitType="storage" />}
- <UnitListContainer unitType="storage" />
- </div>
- </div>
- </div>
-);
-
-export default UnitTabsComponent;
diff --git a/src/components/app/sidebars/topology/rack/BackToRoomComponent.js b/src/components/app/sidebars/topology/rack/BackToRoomComponent.js
deleted file mode 100644
index 6bcf4088..00000000
--- a/src/components/app/sidebars/topology/rack/BackToRoomComponent.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from "react";
-
-const BackToRoomComponent = ({ onClick }) => (
- <div className="btn btn-secondary btn-block mb-2" onClick={onClick}>
- <span className="fa fa-angle-left mr-2" />
- Back to room
- </div>
-);
-
-export default BackToRoomComponent;
diff --git a/src/components/app/sidebars/topology/rack/DeleteRackComponent.js b/src/components/app/sidebars/topology/rack/DeleteRackComponent.js
deleted file mode 100644
index d8aa7634..00000000
--- a/src/components/app/sidebars/topology/rack/DeleteRackComponent.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from "react";
-
-const DeleteRackComponent = ({ onClick }) => (
- <div className="btn btn-outline-danger btn-block" onClick={onClick}>
- <span className="fa fa-trash mr-2" />
- Delete this rack
- </div>
-);
-
-export default DeleteRackComponent;
diff --git a/src/components/app/sidebars/topology/rack/EmptySlotComponent.js b/src/components/app/sidebars/topology/rack/EmptySlotComponent.js
deleted file mode 100644
index d86f9fee..00000000
--- a/src/components/app/sidebars/topology/rack/EmptySlotComponent.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from "react";
-
-const EmptySlotComponent = ({ position, onAdd, inSimulation }) => (
- <li className="list-group-item d-flex justify-content-between align-items-center">
- <span className="badge badge-default badge-info mr-1 disabled">
- {position}
- </span>
- {inSimulation ? (
- <span className="badge badge-default badge-success">Empty Slot</span>
- ) : (
- <button className="btn btn-outline-primary" onClick={onAdd}>
- <span className="fa fa-plus mr-2" />
- Add machine
- </button>
- )}
- </li>
-);
-
-export default EmptySlotComponent;
diff --git a/src/components/app/sidebars/topology/rack/MachineComponent.js b/src/components/app/sidebars/topology/rack/MachineComponent.js
deleted file mode 100644
index 2521f4a2..00000000
--- a/src/components/app/sidebars/topology/rack/MachineComponent.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import React from "react";
-import Shapes from "../../../../../shapes";
-import { convertLoadToSimulationColor } from "../../../../../util/simulation-load";
-
-const UnitIcon = ({ id, type }) => (
- <div>
- <img
- src={"/img/topology/" + id + "-icon.png"}
- alt={"Machine contains " + type + " units"}
- className="img-fluid ml-1"
- style={{ maxHeight: "35px" }}
- />
- </div>
-);
-
-const MachineComponent = ({
- position,
- machine,
- inSimulation,
- machineLoad,
- onClick
-}) => {
- let color = "white";
- if (inSimulation && machineLoad >= 0) {
- color = convertLoadToSimulationColor(machineLoad);
- }
- const hasNoUnits =
- machine.cpuIds.length +
- machine.gpuIds.length +
- machine.memoryIds.length +
- machine.storageIds.length ===
- 0;
-
- return (
- <li
- className="d-flex list-group-item list-group-item-action justify-content-between align-items-center"
- onClick={onClick}
- style={{ backgroundColor: color }}
- >
- <span className="badge badge-default badge-info mr-1">{position}</span>
- <div className="d-inline-flex">
- {machine.cpuIds.length > 0 ? (
- <UnitIcon id="cpu" type="CPU" />
- ) : (
- undefined
- )}
- {machine.gpuIds.length > 0 ? (
- <UnitIcon id="gpu" type="GPU" />
- ) : (
- undefined
- )}
- {machine.memoryIds.length > 0 ? (
- <UnitIcon id="memory" type="memory" />
- ) : (
- undefined
- )}
- {machine.storageIds.length > 0 ? (
- <UnitIcon id="storage" type="storage" />
- ) : (
- undefined
- )}
- {hasNoUnits ? (
- <span className="badge badge-default badge-warning">
- Machine with no units
- </span>
- ) : (
- undefined
- )}
- </div>
- </li>
- );
-};
-
-MachineComponent.propTypes = {
- machine: Shapes.Machine
-};
-
-export default MachineComponent;
diff --git a/src/components/app/sidebars/topology/rack/MachineListComponent.js b/src/components/app/sidebars/topology/rack/MachineListComponent.js
deleted file mode 100644
index d5521557..00000000
--- a/src/components/app/sidebars/topology/rack/MachineListComponent.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from "react";
-import EmptySlotContainer from "../../../../../containers/app/sidebars/topology/rack/EmptySlotContainer";
-import MachineContainer from "../../../../../containers/app/sidebars/topology/rack/MachineContainer";
-import "./MachineListComponent.css";
-
-const MachineListComponent = ({ machineIds }) => {
- return (
- <ul className="list-group machine-list">
- {machineIds.map((machineId, index) => {
- if (machineId === null) {
- return <EmptySlotContainer key={index} position={index + 1} />;
- } else {
- return (
- <MachineContainer
- key={index}
- position={index + 1}
- machineId={machineId}
- />
- );
- }
- })}
- </ul>
- );
-};
-
-export default MachineListComponent;
diff --git a/src/components/app/sidebars/topology/rack/MachineListComponent.sass b/src/components/app/sidebars/topology/rack/MachineListComponent.sass
deleted file mode 100644
index bbcfe696..00000000
--- a/src/components/app/sidebars/topology/rack/MachineListComponent.sass
+++ /dev/null
@@ -1,2 +0,0 @@
-.machine-list li
- min-height: 64px
diff --git a/src/components/app/sidebars/topology/rack/RackNameComponent.js b/src/components/app/sidebars/topology/rack/RackNameComponent.js
deleted file mode 100644
index 5e095823..00000000
--- a/src/components/app/sidebars/topology/rack/RackNameComponent.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import React from "react";
-import NameComponent from "../NameComponent";
-
-const RackNameComponent = ({ rackName, onEdit }) => (
- <NameComponent name={rackName} onEdit={onEdit} />
-);
-
-export default RackNameComponent;
diff --git a/src/components/app/sidebars/topology/rack/RackSidebarComponent.js b/src/components/app/sidebars/topology/rack/RackSidebarComponent.js
deleted file mode 100644
index f832b9b9..00000000
--- a/src/components/app/sidebars/topology/rack/RackSidebarComponent.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from "react";
-import LoadBarContainer from "../../../../../containers/app/sidebars/elements/LoadBarContainer";
-import LoadChartContainer from "../../../../../containers/app/sidebars/elements/LoadChartContainer";
-import BackToRoomContainer from "../../../../../containers/app/sidebars/topology/rack/BackToRoomContainer";
-import DeleteRackContainer from "../../../../../containers/app/sidebars/topology/rack/DeleteRackContainer";
-import MachineListContainer from "../../../../../containers/app/sidebars/topology/rack/MachineListContainer";
-import RackNameContainer from "../../../../../containers/app/sidebars/topology/rack/RackNameContainer";
-import "./RackSidebarComponent.css";
-
-const RackSidebarComponent = ({ inSimulation, rackId }) => {
- return (
- <div className="rack-sidebar-container flex-column">
- <div className="rack-sidebar-header-container">
- <RackNameContainer />
- <BackToRoomContainer />
- {inSimulation ? (
- <div>
- <LoadBarContainer objectType="rack" objectId={rackId} />
- <LoadChartContainer objectType="rack" objectId={rackId} />
- </div>
- ) : (
- <div>
- <DeleteRackContainer />
- </div>
- )}
- </div>
- <div className="machine-list-container mt-2">
- <MachineListContainer />
- </div>
- </div>
- );
-};
-
-export default RackSidebarComponent;
diff --git a/src/components/app/sidebars/topology/rack/RackSidebarComponent.sass b/src/components/app/sidebars/topology/rack/RackSidebarComponent.sass
deleted file mode 100644
index 822804bc..00000000
--- a/src/components/app/sidebars/topology/rack/RackSidebarComponent.sass
+++ /dev/null
@@ -1,11 +0,0 @@
-.rack-sidebar-container
- display: flex
- height: 100%
- max-height: 100%
-
-.rack-sidebar-header-container
- flex: 0
-
-.machine-list-container
- flex: 1
- overflow-y: scroll
diff --git a/src/components/app/sidebars/topology/room/BackToBuildingComponent.js b/src/components/app/sidebars/topology/room/BackToBuildingComponent.js
deleted file mode 100644
index 0409dbdd..00000000
--- a/src/components/app/sidebars/topology/room/BackToBuildingComponent.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from "react";
-
-const BackToBuildingComponent = ({ onClick }) => (
- <div className="btn btn-secondary btn-block mb-2" onClick={onClick}>
- <span className="fa fa-angle-left mr-2" />
- Back to building
- </div>
-);
-
-export default BackToBuildingComponent;
diff --git a/src/components/app/sidebars/topology/room/DeleteRoomComponent.js b/src/components/app/sidebars/topology/room/DeleteRoomComponent.js
deleted file mode 100644
index 3e3b3b36..00000000
--- a/src/components/app/sidebars/topology/room/DeleteRoomComponent.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from "react";
-
-const DeleteRoomComponent = ({ onClick }) => (
- <div className="btn btn-outline-danger btn-block" onClick={onClick}>
- <span className="fa fa-trash mr-2" />
- Delete this room
- </div>
-);
-
-export default DeleteRoomComponent;
diff --git a/src/components/app/sidebars/topology/room/EditRoomComponent.js b/src/components/app/sidebars/topology/room/EditRoomComponent.js
deleted file mode 100644
index c3b9f0ad..00000000
--- a/src/components/app/sidebars/topology/room/EditRoomComponent.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import classNames from "classnames";
-import React from "react";
-
-const EditRoomComponent = ({
- onEdit,
- onFinish,
- isEditing,
- isInRackConstructionMode
-}) =>
- isEditing ? (
- <div className="btn btn-info btn-block" onClick={onFinish}>
- <span className="fa fa-check mr-2" />
- Finish editing room
- </div>
- ) : (
- <div
- className={classNames("btn btn-outline-info btn-block", {
- disabled: isInRackConstructionMode
- })}
- onClick={() => (isInRackConstructionMode ? undefined : onEdit())}
- >
- <span className="fa fa-pencil mr-2" />
- Edit the tiles of this room
- </div>
- );
-
-export default EditRoomComponent;
diff --git a/src/components/app/sidebars/topology/room/RackConstructionComponent.js b/src/components/app/sidebars/topology/room/RackConstructionComponent.js
deleted file mode 100644
index 06b8a2aa..00000000
--- a/src/components/app/sidebars/topology/room/RackConstructionComponent.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import classNames from "classnames";
-import React from "react";
-
-const RackConstructionComponent = ({
- onStart,
- onStop,
- inRackConstructionMode,
- isEditingRoom
-}) => {
- if (inRackConstructionMode) {
- return (
- <div className="btn btn-primary btn-block" onClick={onStop}>
- <span className="fa fa-times mr-2" />
- Stop rack construction
- </div>
- );
- }
-
- return (
- <div
- className={classNames("btn btn-outline-primary btn-block", {
- disabled: isEditingRoom
- })}
- onClick={() => (isEditingRoom ? undefined : onStart())}
- >
- <span className="fa fa-plus mr-2" />
- Start rack construction
- </div>
- );
-};
-
-export default RackConstructionComponent;
diff --git a/src/components/app/sidebars/topology/room/RoomNameComponent.js b/src/components/app/sidebars/topology/room/RoomNameComponent.js
deleted file mode 100644
index 11b88edd..00000000
--- a/src/components/app/sidebars/topology/room/RoomNameComponent.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import React from "react";
-import NameComponent from "../NameComponent";
-
-const RoomNameComponent = ({ roomName, onEdit }) => (
- <NameComponent name={roomName} onEdit={onEdit} />
-);
-
-export default RoomNameComponent;
diff --git a/src/components/app/sidebars/topology/room/RoomSidebarComponent.js b/src/components/app/sidebars/topology/room/RoomSidebarComponent.js
deleted file mode 100644
index 275f9624..00000000
--- a/src/components/app/sidebars/topology/room/RoomSidebarComponent.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import React from "react";
-import LoadBarContainer from "../../../../../containers/app/sidebars/elements/LoadBarContainer";
-import LoadChartContainer from "../../../../../containers/app/sidebars/elements/LoadChartContainer";
-import BackToBuildingContainer from "../../../../../containers/app/sidebars/topology/room/BackToBuildingContainer";
-import DeleteRoomContainer from "../../../../../containers/app/sidebars/topology/room/DeleteRoomContainer";
-import EditRoomContainer from "../../../../../containers/app/sidebars/topology/room/EditRoomContainer";
-import RackConstructionContainer from "../../../../../containers/app/sidebars/topology/room/RackConstructionContainer";
-import RoomNameContainer from "../../../../../containers/app/sidebars/topology/room/RoomNameContainer";
-import RoomTypeContainer from "../../../../../containers/app/sidebars/topology/room/RoomTypeContainer";
-
-const RoomSidebarComponent = ({ roomId, roomType, inSimulation }) => {
- let allowedObjects;
- if (!inSimulation && roomType === "SERVER") {
- allowedObjects = <RackConstructionContainer />;
- }
-
- return (
- <div>
- <RoomNameContainer />
- <RoomTypeContainer />
- <BackToBuildingContainer />
- {inSimulation ? (
- <div>
- <LoadBarContainer objectType="room" objectId={roomId} />
- <LoadChartContainer objectType="room" objectId={roomId} />
- </div>
- ) : (
- <div>
- {allowedObjects}
- <EditRoomContainer />
- <DeleteRoomContainer />
- </div>
- )}
- </div>
- );
-};
-
-export default RoomSidebarComponent;
diff --git a/src/components/app/sidebars/topology/room/RoomTypeComponent.js b/src/components/app/sidebars/topology/room/RoomTypeComponent.js
deleted file mode 100644
index 46d91c2c..00000000
--- a/src/components/app/sidebars/topology/room/RoomTypeComponent.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import React from "react";
-import { ROOM_TYPE_TO_NAME_MAP } from "../../../../../util/room-types";
-
-const RoomTypeComponent = ({ roomType }) => (
- <p className="lead">{ROOM_TYPE_TO_NAME_MAP[roomType]}</p>
-);
-
-export default RoomTypeComponent;
diff --git a/src/components/app/timeline/PlayButtonComponent.js b/src/components/app/timeline/PlayButtonComponent.js
deleted file mode 100644
index 1a9b0ced..00000000
--- a/src/components/app/timeline/PlayButtonComponent.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from "react";
-
-const PlayButtonComponent = ({
- isPlaying,
- currentTick,
- lastSimulatedTick,
- onPlay,
- onPause
-}) => (
- <div
- className="play-btn"
- onClick={() => {
- if (isPlaying) {
- onPause();
- } else {
- if (currentTick !== lastSimulatedTick) {
- onPlay();
- }
- }
- }}
- >
- {isPlaying ? (
- <span className="fa fa-pause" />
- ) : (
- <span className="fa fa-play" />
- )}
- </div>
-);
-
-export default PlayButtonComponent;
diff --git a/src/components/app/timeline/Timeline.sass b/src/components/app/timeline/Timeline.sass
deleted file mode 100644
index 4c99a218..00000000
--- a/src/components/app/timeline/Timeline.sass
+++ /dev/null
@@ -1,116 +0,0 @@
-@import ../../../style-globals/_variables.sass
-@import ../../../style-globals/_mixins.sass
-
-$container-size: 500px
-$play-btn-size: 40px
-$border-width: 1px
-$timeline-border: $border-width solid $gray-semi-dark
-
-.timeline-bar
- display: block
- position: absolute
- left: 0
- bottom: 20px
- width: 100%
- text-align: center
- z-index: 2000
-
- pointer-events: none
-
-.timeline-container
- display: inline-block
- margin: 0 auto
- text-align: left
-
- width: $container-size
-
-.timeline-labels
- display: block
- height: 25px
- line-height: 25px
-
- div
- display: inline-block
-
- .start-time-label
- margin-left: $play-btn-size - $border-width
- padding-left: 4px
-
- .end-time-label
- padding-right: 4px
- float: right
-
-.timeline-controls
- display: flex
- border: $timeline-border
- overflow: hidden
-
- pointer-events: all
-
- +border-radius($standard-border-radius)
-
- .play-btn
- width: $play-btn-size
- height: $play-btn-size + $border-width
- line-height: $play-btn-size + $border-width
- text-align: center
- float: left
- margin-top: -$border-width
-
- font-size: 16pt
- background: #333
- color: #eee
-
- +transition(background, $transition-length)
- +user-select
- +clickable
-
- .play-btn:hover
- background: #656565
-
- .play-btn:active
- background: #000
-
- .timeline
- position: relative
- flex: 1
- height: $play-btn-size
- line-height: $play-btn-size
- float: right
-
- background: $blue-light
-
- z-index: 500
-
- div
- +transition(all, $transition-length)
-
- .time-marker
- position: absolute
- top: 0
- left: 0
-
- width: 6px
- height: 100%
-
- background: $blue-very-dark
-
- +border-radius(2px)
-
- z-index: 503
-
- pointer-events: none
-
- .section-marker
- position: absolute
- top: 0
- left: 0
-
- width: 3px
- height: 100%
-
- background: #222222
-
- z-index: 504
-
- pointer-events: none
diff --git a/src/components/app/timeline/TimelineComponent.js b/src/components/app/timeline/TimelineComponent.js
deleted file mode 100644
index 0f88b8f4..00000000
--- a/src/components/app/timeline/TimelineComponent.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import React from "react";
-import TimelineControlsContainer from "../../../containers/app/timeline/TimelineControlsContainer";
-import TimelineLabelsContainer from "../../../containers/app/timeline/TimelineLabelsContainer";
-import "./Timeline.css";
-
-class TimelineComponent extends React.Component {
- componentDidMount() {
- this.interval = setInterval(() => {
- if (!this.props.isPlaying) {
- return;
- }
-
- if (this.props.currentTick < this.props.lastSimulatedTick) {
- this.props.incrementTick();
- } else {
- this.props.pauseSimulation();
- }
- }, 1000);
- }
-
- componentWillUnmount() {
- clearInterval(this.interval);
- }
-
- render() {
- return (
- <div className="timeline-bar">
- <div className="timeline-container">
- <TimelineLabelsContainer />
- <TimelineControlsContainer />
- </div>
- </div>
- );
- }
-}
-
-export default TimelineComponent;
diff --git a/src/components/app/timeline/TimelineControlsComponent.js b/src/components/app/timeline/TimelineControlsComponent.js
deleted file mode 100644
index f3d55154..00000000
--- a/src/components/app/timeline/TimelineControlsComponent.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import React from "react";
-import PlayButtonContainer from "../../../containers/app/timeline/PlayButtonContainer";
-import { convertTickToPercentage } from "../../../util/timeline";
-
-class TimelineControlsComponent extends React.Component {
- onTimelineClick(e) {
- const percentage = e.nativeEvent.offsetX / this.timeline.clientWidth;
- const tick = Math.floor(percentage * (this.props.lastSimulatedTick + 1));
- this.props.goToTick(tick);
- }
-
- render() {
- return (
- <div className="timeline-controls">
- <PlayButtonContainer />
- <div
- className="timeline"
- ref={timeline => (this.timeline = timeline)}
- onClick={this.onTimelineClick.bind(this)}
- >
- <div
- className="time-marker"
- style={{
- left: convertTickToPercentage(
- this.props.currentTick,
- this.props.lastSimulatedTick
- )
- }}
- />
- {this.props.sectionTicks.map(sectionTick => (
- <div
- key={sectionTick}
- className="section-marker"
- style={{
- left: convertTickToPercentage(
- sectionTick,
- this.props.lastSimulatedTick
- )
- }}
- title="Topology changes at this tick"
- />
- ))}
- </div>
- </div>
- );
- }
-}
-
-export default TimelineControlsComponent;
diff --git a/src/components/app/timeline/TimelineLabelsComponent.js b/src/components/app/timeline/TimelineLabelsComponent.js
deleted file mode 100644
index 6943a86f..00000000
--- a/src/components/app/timeline/TimelineLabelsComponent.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import React from "react";
-import { convertSecondsToFormattedTime } from "../../../util/date-time";
-
-const TimelineLabelsComponent = ({ currentTick, lastSimulatedTick }) => (
- <div className="timeline-labels">
- <div className="start-time-label">
- {convertSecondsToFormattedTime(currentTick)}
- </div>
- <div className="end-time-label">
- {convertSecondsToFormattedTime(lastSimulatedTick)}
- </div>
- </div>
-);
-
-export default TimelineLabelsComponent;
diff --git a/src/components/experiments/ExperimentListComponent.js b/src/components/experiments/ExperimentListComponent.js
deleted file mode 100644
index 2f7106e5..00000000
--- a/src/components/experiments/ExperimentListComponent.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import ExperimentRowContainer from "../../containers/experiments/ExperimentRowContainer";
-
-const ExperimentListComponent = ({ experimentIds, loading }) => {
- let alert;
-
- if (loading) {
- alert = (
- <div className="alert alert-success">
- <span className="fa fa-refresh fa-spin mr-2" />
- <strong>Loading Experiments...</strong>
- </div>
- );
- } else if (experimentIds.length === 0 && !loading) {
- alert = (
- <div className="alert alert-info">
- <span className="fa fa-question-circle mr-2" />
- <strong>No experiments here yet...</strong> Add some with the button
- below!
- </div>
- );
- }
-
- return (
- <div className="vertically-expanding-container">
- {alert ? (
- alert
- ) : (
- <table className="table table-striped">
- <thead>
- <tr>
- <th>Name</th>
- <th>Path</th>
- <th>Trace</th>
- <th>Scheduler</th>
- <th />
- </tr>
- </thead>
- <tbody>
- {experimentIds.map(experimentId => (
- <ExperimentRowContainer
- experimentId={experimentId}
- key={experimentId}
- />
- ))}
- </tbody>
- </table>
- )}
- </div>
- );
-};
-
-ExperimentListComponent.propTypes = {
- experimentIds: PropTypes.arrayOf(PropTypes.number).isRequired,
- loading: PropTypes.bool
-};
-
-export default ExperimentListComponent;
diff --git a/src/components/experiments/ExperimentRowComponent.js b/src/components/experiments/ExperimentRowComponent.js
deleted file mode 100644
index e71c6a00..00000000
--- a/src/components/experiments/ExperimentRowComponent.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Link } from "react-router-dom";
-import Shapes from "../../shapes/index";
-
-const ExperimentRowComponent = ({ experiment, simulationId, onDelete }) => (
- <tr>
- <td className="pt-3">{experiment.name}</td>
- <td className="pt-3">
- {experiment.path.name
- ? experiment.path.name
- : "Path " + experiment.path.id}
- </td>
- <td className="pt-3">{experiment.trace.name}</td>
- <td className="pt-3">{experiment.scheduler.name}</td>
- <td className="text-right">
- <Link
- to={"/simulations/" + simulationId + "/experiments/" + experiment.id}
- className="btn btn-outline-primary btn-sm mr-2"
- title="Open this experiment"
- >
- <span className="fa fa-play" />
- </Link>
- <div
- className="btn btn-outline-danger btn-sm"
- title="Delete this experiment"
- onClick={() => onDelete(experiment.id)}
- >
- <span className="fa fa-trash" />
- </div>
- </td>
- </tr>
-);
-
-ExperimentRowComponent.propTypes = {
- experiment: Shapes.Experiment.isRequired,
- simulationId: PropTypes.number.isRequired
-};
-
-export default ExperimentRowComponent;
diff --git a/src/components/experiments/NewExperimentButtonComponent.js b/src/components/experiments/NewExperimentButtonComponent.js
deleted file mode 100644
index 651172e3..00000000
--- a/src/components/experiments/NewExperimentButtonComponent.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-
-const NewExperimentButtonComponent = ({ onClick }) => (
- <div className="bottom-btn-container">
- <div className="btn btn-primary float-right" onClick={onClick}>
- <span className="fa fa-plus mr-2" />
- New Experiment
- </div>
- </div>
-);
-
-NewExperimentButtonComponent.propTypes = {
- onClick: PropTypes.func.isRequired
-};
-
-export default NewExperimentButtonComponent;
diff --git a/src/components/home/ContactSection.js b/src/components/home/ContactSection.js
deleted file mode 100644
index 4e640924..00000000
--- a/src/components/home/ContactSection.js
+++ /dev/null
@@ -1,64 +0,0 @@
-import React from "react";
-import FontAwesome from "react-fontawesome";
-import "./ContactSection.css";
-import ContentSection from "./ContentSection";
-
-const ContactSection = () => (
- <ContentSection name="contact" title="Contact">
- <div className="row justify-content-center">
- <div className="col-4">
- <a href="https://github.com/atlarge-research/opendc">
- <FontAwesome name="github" size="3x" className="mb-2" />
- <div className="w-100" />
- atlarge-research/opendc
- </a>
- </div>
- <div className="col-4">
- <a href="mailto:opendc@atlarge-research.com">
- <FontAwesome name="envelope" size="3x" className="mb-2" />
- <div className="w-100" />
- opendc@atlarge-research.com
- </a>
- </div>
- </div>
- <div className="row">
- <div className="col text-center">
- <img
- src="img/tudelft-icon.png"
- className="img-fluid tudelft-icon"
- alt="TU Delft"
- />
- </div>
- </div>
- <div className="row">
- <div className="col text-center">
- A project by the &nbsp;
- <a
- href="http://atlarge.science"
- target="_blank"
- rel="noopener noreferrer"
- >
- <strong>@Large Research Group</strong>
- </a>.
- </div>
- </div>
- <div className="row">
- <div className="col text-center disclaimer mt-5 small">
- <FontAwesome name="exclamation-triangle" size="2x" className="mr-2" />
- <br />
- OpenDC is an experimental tool. Your data may get lost, overwritten, or
- otherwise become unavailable.
- <br />
- The OpenDC authors should in no way be liable in the event this happens
- (see our{" "}
- <strong>
- <a href="https://github.com/atlarge-research/opendc/blob/master/LICENSE.md">
- license
- </a>
- </strong>). Sorry for the inconvenience.
- </div>
- </div>
- </ContentSection>
-);
-
-export default ContactSection;
diff --git a/src/components/home/ContactSection.sass b/src/components/home/ContactSection.sass
deleted file mode 100644
index 2cde7391..00000000
--- a/src/components/home/ContactSection.sass
+++ /dev/null
@@ -1,15 +0,0 @@
-.contact-section
- background-color: #444
- color: #ddd
-
- a
- color: #ddd
-
- a:hover
- color: #fff
-
- .tudelft-icon
- height: 100px
-
- .disclaimer
- color: #cccccc
diff --git a/src/components/home/ContentSection.js b/src/components/home/ContentSection.js
deleted file mode 100644
index 2e24ee10..00000000
--- a/src/components/home/ContentSection.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import classNames from "classnames";
-import PropTypes from "prop-types";
-import React from "react";
-import "./ContentSection.css";
-
-const ContentSection = ({ name, title, children }) => (
- <div id={name} className={classNames(name + "-section", "content-section")}>
- <div className="container">
- <h1>{title}</h1>
- {children}
- </div>
- </div>
-);
-
-ContentSection.propTypes = {
- name: PropTypes.string.isRequired
-};
-
-export default ContentSection;
diff --git a/src/components/home/ContentSection.sass b/src/components/home/ContentSection.sass
deleted file mode 100644
index 67541179..00000000
--- a/src/components/home/ContentSection.sass
+++ /dev/null
@@ -1,9 +0,0 @@
-@import ../../style-globals/_variables.sass
-
-.content-section
- padding-top: 50px
- padding-bottom: 100px
- text-align: center
-
- h1
- margin-bottom: 30px
diff --git a/src/components/home/IntroSection.js b/src/components/home/IntroSection.js
deleted file mode 100644
index 59f5face..00000000
--- a/src/components/home/IntroSection.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from "react";
-
-const IntroSection = () => (
- <section id="intro" className="intro-section">
- <div className="container pt-5 pb-3">
- <div className="row justify-content-center">
- <div className="col-xl-4 col-lg-4 col-md-4 col-sm-8 col-8">
- <h4>The datacenter (DC) industry...</h4>
- <ul>
- <li>Is worth over $15 bn, and growing</li>
- <li>Has many hard-to-grasp concepts</li>
- <li>Needs to become accessible to many</li>
- </ul>
- </div>
- <div className="col-xl-4 col-lg-4 col-md-4 col-sm-8 col-8">
- <img
- src="img/datacenter-drawing.png"
- className="col-12 img-fluid"
- alt="Schematic top-down view of a datacenter"
- />
- <p className="col-12 figure-caption text-center">
- <a href="http://www.dolphinhosts.co.uk/wp-content/uploads/2013/07/data-centers.gif">
- Image source
- </a>
- </p>
- </div>
- <div className="col-xl-4 col-lg-4 col-md-4 col-sm-8 col-8">
- <h4>OpenDC provides...</h4>
- <ul>
- <li>Collaborative online DC modeling</li>
- <li>Diverse and effective DC simulation</li>
- <li>Exploratory DC performance feedback</li>
- </ul>
- </div>
- </div>
- </div>
- </section>
-);
-
-export default IntroSection;
diff --git a/src/components/home/JumbotronHeader.js b/src/components/home/JumbotronHeader.js
deleted file mode 100644
index 8a5312b3..00000000
--- a/src/components/home/JumbotronHeader.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from "react";
-import "./JumbotronHeader.css";
-
-const JumbotronHeader = () => (
- <section className="jumbotron-header">
- <div className="container">
- <div className="jumbotron text-center">
- <h1>
- Open<span className="dc">DC</span>
- </h1>
- <p className="lead">
- Collaborative Datacenter Simulation and Exploration for Everybody
- </p>
- <img src="img/logo.png" className="img-responsive mt-3" alt="OpenDC" />
- </div>
- </div>
- </section>
-);
-
-export default JumbotronHeader;
diff --git a/src/components/home/JumbotronHeader.sass b/src/components/home/JumbotronHeader.sass
deleted file mode 100644
index b88b79f7..00000000
--- a/src/components/home/JumbotronHeader.sass
+++ /dev/null
@@ -1,24 +0,0 @@
-.jumbotron-header
- background: #00A6D6
-
-.jumbotron
- background-color: inherit
- margin-bottom: 0
-
- padding-top: 120px
- padding-bottom: 120px
-
- img
- max-width: 110px
-
- h1
- color: #fff
- font-size: 4.5em
-
- .dc
- color: #fff
- font-weight: bold
-
- .lead
- color: #fff
- font-size: 1.4em
diff --git a/src/components/home/ModelingSection.js b/src/components/home/ModelingSection.js
deleted file mode 100644
index 17834b0b..00000000
--- a/src/components/home/ModelingSection.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from "react";
-import ScreenshotSection from "./ScreenshotSection";
-
-const ModelingSection = () => (
- <ScreenshotSection
- name="modeling"
- title="Datacenter Modeling"
- imageUrl="https://github.com/atlarge-research/opendc/raw/master/images/opendc-frontend-construction.PNG"
- caption="Building a datacenter in OpenDC"
- imageIsRight={true}
- >
- <h3>Collaboratively...</h3>
- <ul>
- <li>Model DC layout, and room locations and types</li>
- <li>Place racks in rooms and nodes in racks</li>
- <li>
- Add real-world CPU, GPU, memory, storage and network units to each node
- </li>
- <li>Select from diverse scheduling policies</li>
- </ul>
- </ScreenshotSection>
-);
-
-export default ModelingSection;
diff --git a/src/components/home/ScreenshotSection.js b/src/components/home/ScreenshotSection.js
deleted file mode 100644
index 42b8ac77..00000000
--- a/src/components/home/ScreenshotSection.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import classNames from "classnames";
-import React from "react";
-import ContentSection from "./ContentSection";
-import "./ScreenshotSection.css";
-
-const ScreenshotSection = ({
- name,
- title,
- imageUrl,
- caption,
- imageIsRight,
- children
-}) => (
- <ContentSection name={name} title={title}>
- <div className="row">
- <div
- className={classNames(
- "col-xl-5 col-lg-5 col-md-5 col-sm-12 col-12 text-left",
- { "order-1": !imageIsRight }
- )}
- >
- {children}
- </div>
- <div className="col-xl-7 col-lg-7 col-md-7 col-sm-12 col-12">
- <img src={imageUrl} className="col-12 screenshot" alt={caption} />
- <div className="row text-muted justify-content-center">{caption}</div>
- </div>
- </div>
- </ContentSection>
-);
-
-export default ScreenshotSection;
diff --git a/src/components/home/ScreenshotSection.sass b/src/components/home/ScreenshotSection.sass
deleted file mode 100644
index a349ad48..00000000
--- a/src/components/home/ScreenshotSection.sass
+++ /dev/null
@@ -1,5 +0,0 @@
-.screenshot
- outline: 2px black solid
- padding-left: 0
- padding-right: 0
- margin-bottom: 5px
diff --git a/src/components/home/SimulationSection.js b/src/components/home/SimulationSection.js
deleted file mode 100644
index 3961e549..00000000
--- a/src/components/home/SimulationSection.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-import ScreenshotSection from "./ScreenshotSection";
-
-const ModelingSection = () => (
- <ScreenshotSection
- name="simulation"
- title="Datacenter Simulation"
- imageUrl="https://github.com/atlarge-research/opendc/raw/master/images/opendc-frontend-simulation-zoom.PNG"
- caption="Running an experiment in OpenDC"
- imageIsRight={false}
- >
- <h3>Working with OpenDC:</h3>
- <ul>
- <li>Seamlessly switch between construction and simulation modes</li>
- <li>
- Choose one of several predefined workloads (Big Data, Bag of Tasks,
- Hadoop, etc.)
- </li>
- <li>Play, pause, and skip around the informative simulation timeline</li>
- <li>Visualize and demo live</li>
- </ul>
- </ScreenshotSection>
-);
-
-export default ModelingSection;
diff --git a/src/components/home/StakeholderSection.js b/src/components/home/StakeholderSection.js
deleted file mode 100644
index 6d25fd86..00000000
--- a/src/components/home/StakeholderSection.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from "react";
-import ContentSection from "./ContentSection";
-
-const Stakeholder = ({ name, title, subtitle }) => (
- <div className="col-xl-4 col-lg-4 col-md-4 col-sm-6 col-6">
- <img
- src={"img/stakeholders/" + name + ".png"}
- className="col-xl-3 col-lg-4 col-md-4 col-sm-4 col-4 img-fluid"
- alt={title}
- />
- <div className="text-center mt-2">
- <h4>{title}</h4>
- <p>{subtitle}</p>
- </div>
- </div>
-);
-
-const StakeholderSection = () => (
- <ContentSection name="stakeholders" title="Stakeholders">
- <div className="row justify-content-center">
- <Stakeholder
- name="Manager"
- title="Managers"
- subtitle="Seeing is deciding"
- />
- <Stakeholder name="Sales" title="Sales" subtitle="Demo concepts" />
- <Stakeholder name="Developer" title="DevOps" subtitle="Develop & tune" />
- <Stakeholder
- name="Researcher"
- title="Researchers"
- subtitle="Understand & design"
- />
- <Stakeholder
- name="Student"
- title="Students"
- subtitle="Grasp complex concepts"
- />
- </div>
- </ContentSection>
-);
-
-export default StakeholderSection;
diff --git a/src/components/home/TeamSection.js b/src/components/home/TeamSection.js
deleted file mode 100644
index b86655b4..00000000
--- a/src/components/home/TeamSection.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import React from "react";
-import ContentSection from "./ContentSection";
-
-const TeamMember = ({ photoId, name, description }) => (
- <div className="col-xl-3 col-lg-3 col-md-5 col-sm-6 col-12 justify-content-center">
- <img
- src={"img/portraits/" + photoId + ".png"}
- className="col-xl-10 col-lg-10 col-md-10 col-sm-8 col-5 mb-2 mt-2"
- alt={name}
- />
- <div className="col-12">
- <h4>{name}</h4>
- <div className="team-member-description">{description}</div>
- </div>
- </div>
-);
-
-const TeamSection = () => (
- <ContentSection name="team" title="Core Team">
- <div className="row justify-content-center">
- <TeamMember
- photoId="aiosup"
- name="Prof. dr. ir. Alexandru Iosup"
- description="Project Lead"
- />
- <TeamMember
- photoId="gandreadis"
- name="Georgios Andreadis"
- description="Technology Lead and Software Engineer responsible for the frontend web application"
- />
- <TeamMember
- photoId="fmastenbroek"
- name="Fabian Mastenbroek"
- description="Software Engineer responsible for the datacenter simulator"
- />
- <TeamMember
- photoId="loverweel"
- name="Leon Overweel"
- description="Software Engineer responsible for the web server, database, and API specification"
- />
- </div>
- <div className="text-center lead mt-3">
- See{" "}
- <a
- target="_blank"
- href="http://atlarge.science/opendc#team"
- rel="noopener noreferrer"
- >
- atlarge.science/opendc
- </a>{" "}
- for the full team!
- </div>
- </ContentSection>
-);
-
-export default TeamSection;
diff --git a/src/components/home/TechnologiesSection.js b/src/components/home/TechnologiesSection.js
deleted file mode 100644
index fdcfc522..00000000
--- a/src/components/home/TechnologiesSection.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from "react";
-import FontAwesome from "react-fontawesome";
-import ContentSection from "./ContentSection";
-
-const TechnologiesSection = () => (
- <ContentSection name="technologies" title="Technologies">
- <ul className="list-group text-left">
- <li className="d-flex list-group-item justify-content-between align-items-center list-group-item-primary">
- <span style={{ minWidth: 100 }}>
- <FontAwesome name="window-maximize" className="mr-2" />
- <strong className="">Browser</strong>
- </span>
- <span className="text-right">JavaScript, React, Redux, Konva</span>
- </li>
- <li className="d-flex list-group-item justify-content-between align-items-center list-group-item-warning">
- <span style={{ minWidth: 100 }}>
- <FontAwesome name="television" className="mr-2" />
- <strong>Server</strong>
- </span>
- <span className="text-right">
- Python, Flask, FlaskSocketIO, OpenAPI
- </span>
- </li>
- <li className="d-flex list-group-item justify-content-between align-items-center list-group-item-success">
- <span style={{ minWidth: 100 }}>
- <FontAwesome name="database" className="mr-2" />
- <strong>Database</strong>
- </span>
- <span className="text-right">MariaDB</span>
- </li>
- <li className="d-flex list-group-item justify-content-between align-items-center list-group-item-danger">
- <span style={{ minWidth: 100 }}>
- <FontAwesome name="cogs" className="mr-2" />
- <strong>Simulator</strong>
- </span>
- <span className="text-right">Kotlin</span>
- </li>
- </ul>
- </ContentSection>
-);
-
-export default TechnologiesSection;
diff --git a/src/components/modals/ConfirmationModal.js b/src/components/modals/ConfirmationModal.js
deleted file mode 100644
index abdce5ac..00000000
--- a/src/components/modals/ConfirmationModal.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import Modal from "./Modal";
-
-class ConfirmationModal extends React.Component {
- static propTypes = {
- title: PropTypes.string.isRequired,
- message: PropTypes.string.isRequired,
- show: PropTypes.bool.isRequired,
- callback: PropTypes.func.isRequired
- };
-
- onConfirm() {
- this.props.callback(true);
- }
-
- onCancel() {
- this.props.callback(false);
- }
-
- render() {
- return (
- <Modal
- title={this.props.title}
- show={this.props.show}
- onSubmit={this.onConfirm.bind(this)}
- onCancel={this.onCancel.bind(this)}
- submitButtonType="danger"
- submitButtonText="Confirm"
- >
- {this.props.message}
- </Modal>
- );
- }
-}
-
-export default ConfirmationModal;
diff --git a/src/components/modals/Modal.js b/src/components/modals/Modal.js
deleted file mode 100644
index 19337db8..00000000
--- a/src/components/modals/Modal.js
+++ /dev/null
@@ -1,132 +0,0 @@
-import classNames from "classnames";
-import PropTypes from "prop-types";
-import React from "react";
-import jQuery from "../../util/jquery";
-
-class Modal extends React.Component {
- static propTypes = {
- title: PropTypes.string.isRequired,
- show: PropTypes.bool.isRequired,
- onSubmit: PropTypes.func.isRequired,
- onCancel: PropTypes.func.isRequired,
- submitButtonType: PropTypes.string,
- submitButtonText: PropTypes.string
- };
- static defaultProps = {
- submitButtonType: "primary",
- submitButtonText: "Save"
- };
- static idCounter = 0;
-
- // Local, up-to-date copy of modal visibility for time between close event and a props update (to prevent duplicate
- // 'close' triggers)
- visible = false;
-
- constructor(props) {
- super(props);
- this.id = "modal-" + Modal.idCounter++;
- }
-
- componentDidMount() {
- this.visible = this.props.show;
- this.openOrCloseModal();
-
- // Trigger auto-focus
- jQuery("#" + this.id)
- .on("shown.bs.modal", function() {
- jQuery(this)
- .find("input")
- .first()
- .focus();
- })
- .on("hide.bs.modal", () => {
- if (this.visible) {
- this.props.onCancel();
- }
- })
- .on("keydown", e => {
- e.stopPropagation();
- });
- }
-
- componentDidUpdate() {
- this.visible = this.props.show;
- this.openOrCloseModal();
- }
-
- onSubmit() {
- if (this.visible) {
- this.props.onSubmit();
- this.visible = false;
- this.closeModal();
- }
- }
-
- onCancel() {
- if (this.visible) {
- this.props.onCancel();
- this.visible = false;
- this.closeModal();
- }
- }
-
- openModal() {
- jQuery("#" + this.id).modal("show");
- }
-
- closeModal() {
- jQuery("#" + this.id).modal("hide");
- }
-
- openOrCloseModal() {
- if (this.visible) {
- this.openModal();
- } else {
- this.closeModal();
- }
- }
-
- render() {
- return (
- <div className="modal fade" id={this.id} role="dialog">
- <div className="modal-dialog" role="document">
- <div className="modal-content">
- <div className="modal-header">
- <h5 className="modal-title">{this.props.title}</h5>
- <button
- type="button"
- className="close"
- onClick={this.onCancel.bind(this)}
- aria-label="Close"
- >
- <span>&times;</span>
- </button>
- </div>
- <div className="modal-body">{this.props.children}</div>
- <div className="modal-footer">
- <button
- type="button"
- className="btn btn-secondary"
- onClick={this.onCancel.bind(this)}
- >
- Close
- </button>
- <button
- type="button"
- className={classNames(
- "btn",
- "btn-" + this.props.submitButtonType
- )}
- onClick={this.onSubmit.bind(this)}
- >
- {this.props.submitButtonText}
- </button>
- </div>
- </div>
- </div>
- </div>
- );
- }
-}
-
-export default Modal;
diff --git a/src/components/modals/TextInputModal.js b/src/components/modals/TextInputModal.js
deleted file mode 100644
index cc16f8e1..00000000
--- a/src/components/modals/TextInputModal.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import Modal from "./Modal";
-
-class TextInputModal extends React.Component {
- static propTypes = {
- title: PropTypes.string.isRequired,
- label: PropTypes.string.isRequired,
- show: PropTypes.bool.isRequired,
- callback: PropTypes.func.isRequired,
- initialValue: PropTypes.string
- };
-
- componentDidUpdate() {
- if (this.props.initialValue) {
- this.textInput.value = this.props.initialValue;
- }
- }
-
- onSubmit() {
- this.props.callback(this.textInput.value);
- this.textInput.value = "";
- }
-
- onCancel() {
- this.props.callback(undefined);
- this.textInput.value = "";
- }
-
- render() {
- return (
- <Modal
- title={this.props.title}
- show={this.props.show}
- onSubmit={this.onSubmit.bind(this)}
- onCancel={this.onCancel.bind(this)}
- >
- <form
- onSubmit={e => {
- e.preventDefault();
- this.onSubmit();
- }}
- >
- <div className="form-group">
- <label className="form-control-label">{this.props.label}</label>
- <input
- type="text"
- className="form-control"
- ref={textInput => (this.textInput = textInput)}
- />
- </div>
- </form>
- </Modal>
- );
- }
-}
-
-export default TextInputModal;
diff --git a/src/components/modals/custom-components/NewExperimentModalComponent.js b/src/components/modals/custom-components/NewExperimentModalComponent.js
deleted file mode 100644
index e356fe96..00000000
--- a/src/components/modals/custom-components/NewExperimentModalComponent.js
+++ /dev/null
@@ -1,104 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import Shapes from "../../../shapes";
-import Modal from "../Modal";
-
-class NewExperimentModalComponent extends React.Component {
- static propTypes = {
- show: PropTypes.bool.isRequired,
- paths: PropTypes.arrayOf(Shapes.Path),
- schedulers: PropTypes.arrayOf(Shapes.Scheduler),
- traces: PropTypes.arrayOf(Shapes.Trace),
- callback: PropTypes.func.isRequired
- };
-
- reset() {
- this.textInput.value = "";
- this.pathSelect.selectedIndex = 0;
- this.traceSelect.selectedIndex = 0;
- this.schedulerSelect.selectedIndex = 0;
- }
-
- onSubmit() {
- this.props.callback(
- this.textInput.value,
- parseInt(this.pathSelect.value, 10),
- parseInt(this.traceSelect.value, 10),
- this.schedulerSelect.value
- );
- this.reset();
- }
-
- onCancel() {
- this.props.callback(undefined);
- this.reset();
- }
-
- render() {
- return (
- <Modal
- title="New Experiment"
- show={this.props.show}
- onSubmit={this.onSubmit.bind(this)}
- onCancel={this.onCancel.bind(this)}
- >
- <form
- onSubmit={e => {
- e.preventDefault();
- this.onSubmit();
- }}
- >
- <div className="form-group">
- <label className="form-control-label">Name</label>
- <input
- type="text"
- className="form-control"
- ref={textInput => (this.textInput = textInput)}
- />
- </div>
- <div className="form-group">
- <label className="form-control-label">Path</label>
- <select
- className="form-control"
- ref={pathSelect => (this.pathSelect = pathSelect)}
- >
- {this.props.paths.map(path => (
- <option value={path.id} key={path.id}>
- {path.name ? path.name : "Path " + path.id}
- </option>
- ))}
- </select>
- </div>
- <div className="form-group">
- <label className="form-control-label">Trace</label>
- <select
- className="form-control"
- ref={traceSelect => (this.traceSelect = traceSelect)}
- >
- {this.props.traces.map(trace => (
- <option value={trace.id} key={trace.id}>
- {trace.name}
- </option>
- ))}
- </select>
- </div>
- <div className="form-group">
- <label className="form-control-label">Scheduler</label>
- <select
- className="form-control"
- ref={schedulerSelect => (this.schedulerSelect = schedulerSelect)}
- >
- {this.props.schedulers.map(scheduler => (
- <option value={scheduler.name} key={scheduler.name}>
- {scheduler.name}
- </option>
- ))}
- </select>
- </div>
- </form>
- </Modal>
- );
- }
-}
-
-export default NewExperimentModalComponent;
diff --git a/src/components/navigation/AppNavbar.js b/src/components/navigation/AppNavbar.js
deleted file mode 100644
index 1a35f85d..00000000
--- a/src/components/navigation/AppNavbar.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import React from "react";
-import FontAwesome from "react-fontawesome";
-import { Link } from "react-router-dom";
-import Navbar, { NavItem } from "./Navbar";
-import "./Navbar.css";
-
-const AppNavbar = ({ simulationId, inSimulation, fullWidth }) => (
- <Navbar fullWidth={fullWidth}>
- {inSimulation ? (
- <NavItem route={"/simulations/" + simulationId}>
- <Link
- className="nav-link"
- title="Construction"
- to={"/simulations/" + simulationId}
- >
- <FontAwesome name="industry" className="mr-2" />
- Construction
- </Link>
- </NavItem>
- ) : (
- undefined
- )}
- {inSimulation ? (
- <NavItem route={"/simulations/" + simulationId + "/experiments"}>
- <Link
- className="nav-link"
- title="Experiments"
- to={"/simulations/" + simulationId + "/experiments"}
- >
- <FontAwesome name="play" className="mr-2" />
- Experiments
- </Link>
- </NavItem>
- ) : (
- undefined
- )}
- <NavItem route="/simulations">
- <Link className="nav-link" title="My Simulations" to="/simulations">
- <FontAwesome name="list" className="mr-2" />
- My Simulations
- </Link>
- </NavItem>
- <NavItem route="email">
- <a
- className="nav-link"
- title="Support"
- href="mailto:opendc@atlarge-research.com"
- >
- <FontAwesome name="envelope" className="mr-2" />
- Support
- </a>
- </NavItem>
- </Navbar>
-);
-
-export default AppNavbar;
diff --git a/src/components/navigation/HomeNavbar.js b/src/components/navigation/HomeNavbar.js
deleted file mode 100644
index 5d08bf3c..00000000
--- a/src/components/navigation/HomeNavbar.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from "react";
-import Navbar from "./Navbar";
-import "./Navbar.css";
-
-const ScrollNavItem = ({ id, name }) => (
- <li className="nav-item">
- <a className="nav-link" href={id}>
- {name}
- </a>
- </li>
-);
-
-const HomeNavbar = () => (
- <Navbar fullWidth={false}>
- <ScrollNavItem id="#stakeholders" name="Stakeholders" />
- <ScrollNavItem id="#modeling" name="Modeling" />
- <ScrollNavItem id="#simulation" name="Simulation" />
- <ScrollNavItem id="#technologies" name="Technologies" />
- <ScrollNavItem id="#team" name="Team" />
- <ScrollNavItem id="#contact" name="Contact" />
- </Navbar>
-);
-
-export default HomeNavbar;
diff --git a/src/components/navigation/LogoutButton.js b/src/components/navigation/LogoutButton.js
deleted file mode 100644
index 800a3da8..00000000
--- a/src/components/navigation/LogoutButton.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import FontAwesome from "react-fontawesome";
-import { Link } from "react-router-dom";
-
-const LogoutButton = ({ onLogout }) => (
- <Link className="logout nav-link" title="Sign out" to="#" onClick={onLogout}>
- <FontAwesome name="power-off" size="lg" />
- </Link>
-);
-
-LogoutButton.propTypes = {
- onLogout: PropTypes.func.isRequired
-};
-
-export default LogoutButton;
diff --git a/src/components/navigation/Navbar.js b/src/components/navigation/Navbar.js
deleted file mode 100644
index 44458949..00000000
--- a/src/components/navigation/Navbar.js
+++ /dev/null
@@ -1,102 +0,0 @@
-import classNames from "classnames";
-import React from "react";
-import { Link, withRouter } from "react-router-dom";
-import { userIsLoggedIn } from "../../auth/index";
-import Login from "../../containers/auth/Login";
-import Logout from "../../containers/auth/Logout";
-import ProfileName from "../../containers/auth/ProfileName";
-import "./Navbar.css";
-
-export const NAVBAR_HEIGHT = 60;
-
-export const NavItem = withRouter(props => <NavItemWithoutRoute {...props} />);
-export const LoggedInSection = withRouter(props => (
- <LoggedInSectionWithoutRoute {...props} />
-));
-
-const GitHubLink = () => (
- <a
- href="https://github.com/atlarge-research/opendc"
- className="ml-2 mr-3 text-dark"
- style={{ position: "relative", top: 7 }}
- >
- <span className="fa fa-github fa-2x" />
- </a>
-);
-
-const NavItemWithoutRoute = ({ route, location, children }) => (
- <li
- className={classNames(
- "nav-item",
- location.pathname === route ? "active" : undefined
- )}
- >
- {children}
- </li>
-);
-
-const LoggedInSectionWithoutRoute = ({ location }) => (
- <ul className="navbar-nav auth-links">
- {userIsLoggedIn() ? (
- [
- location.pathname === "/" ? (
- <NavItem route="/simulations" key="simulations">
- <Link className="nav-link" title="My Simulations" to="/simulations">
- My Simulations
- </Link>
- </NavItem>
- ) : (
- <NavItem route="/profile" key="profile">
- <Link className="nav-link" title="My Profile" to="/profile">
- <ProfileName />
- </Link>
- </NavItem>
- ),
- <NavItem route="logout" key="logout">
- <Logout />
- </NavItem>
- ]
- ) : (
- <NavItem route="login">
- <GitHubLink />
- <Login visible={true} />
- </NavItem>
- )}
- </ul>
-);
-
-const Navbar = ({ fullWidth, children }) => (
- <nav
- className="navbar fixed-top navbar-expand-lg navbar-light bg-faded"
- id="navbar"
- >
- <div className={fullWidth ? "container-fluid" : "container"}>
- <button
- className="navbar-toggler navbar-toggler-right"
- type="button"
- data-toggle="collapse"
- data-target="#navbarSupportedContent"
- aria-controls="navbarSupportedContent"
- aria-expanded="false"
- aria-label="Toggle navigation"
- >
- <span className="navbar-toggler-icon" />
- </button>
- <Link
- className="navbar-brand opendc-brand"
- to="/"
- title="OpenDC"
- onClick={() => window.scrollTo(0, 0)}
- >
- <img src="/img/logo.png" alt="OpenDC" />
- </Link>
-
- <div className="collapse navbar-collapse" id="navbarSupportedContent">
- <ul className="navbar-nav mr-auto">{children}</ul>
- <LoggedInSection />
- </div>
- </div>
- </nav>
-);
-
-export default Navbar;
diff --git a/src/components/navigation/Navbar.sass b/src/components/navigation/Navbar.sass
deleted file mode 100644
index 94c52936..00000000
--- a/src/components/navigation/Navbar.sass
+++ /dev/null
@@ -1,29 +0,0 @@
-@import ../../style-globals/_mixins.sass
-@import ../../style-globals/_variables.sass
-
-.navbar
- border-top: $blue 3px solid
- border-bottom: $gray-semi-dark 1px solid
- color: $gray-very-dark
- background: #fafafb
-
-.opendc-brand
- display: inline-block
- color: $gray-very-dark
-
- +transition(background, $transition-length)
-
- img
- position: relative
- bottom: 3px
- display: inline-block
- width: 30px
-
-.login
- height: 40px
- background: $blue
- border: none
- +clickable
-
- &:hover
- background: $blue-dark
diff --git a/src/components/not-found/BlinkingCursor.js b/src/components/not-found/BlinkingCursor.js
deleted file mode 100644
index eea89e7b..00000000
--- a/src/components/not-found/BlinkingCursor.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import React from "react";
-import "./BlinkingCursor.css";
-
-const BlinkingCursor = () => <span className="blinking-cursor">_</span>;
-
-export default BlinkingCursor;
diff --git a/src/components/not-found/BlinkingCursor.sass b/src/components/not-found/BlinkingCursor.sass
deleted file mode 100644
index 6be1476d..00000000
--- a/src/components/not-found/BlinkingCursor.sass
+++ /dev/null
@@ -1,35 +0,0 @@
-.blinking-cursor
- -webkit-animation: 1s blink step-end infinite
- -moz-animation: 1s blink step-end infinite
- -o-animation: 1s blink step-end infinite
- animation: 1s blink step-end infinite
-
-@keyframes blink
- from, to
- color: #eeeeee
- 50%
- color: #333333
-
-@-moz-keyframes blink
- from, to
- color: #eeeeee
- 50%
- color: #333333
-
-@-webkit-keyframes blink
- from, to
- color: #eeeeee
- 50%
- color: #333333
-
-@-ms-keyframes blink
- from, to
- color: #eeeeee
- 50%
- color: #333333
-
-@-o-keyframes blink
- from, to
- color: #eeeeee
- 50%
- color: #333333
diff --git a/src/components/not-found/CodeBlock.js b/src/components/not-found/CodeBlock.js
deleted file mode 100644
index 46dc4402..00000000
--- a/src/components/not-found/CodeBlock.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from "react";
-import "./CodeBlock.css";
-
-const CodeBlock = () => {
- const textBlock =
- " oo oooo oo <br/>" +
- " oo oo oo oo <br/>" +
- " oo oo oo oo <br/>" +
- " oooooo oo oo oooooo <br/>" +
- " oo oo oo oo <br/>" +
- " oo oooo oo <br/>";
- const charList = textBlock.split("");
-
- // Binary representation of the string "OpenDC!" ;)
- const binaryString =
- "01001111011100000110010101101110010001000100001100100001";
-
- let binaryIndex = 0;
- for (let i = 0; i < charList.length; i++) {
- if (charList[i] === "o") {
- charList[i] = binaryString[binaryIndex];
- binaryIndex++;
- }
- }
-
- return (
- <div
- className="code-block"
- dangerouslySetInnerHTML={{ __html: textBlock }}
- />
- );
-};
-
-export default CodeBlock;
diff --git a/src/components/not-found/CodeBlock.sass b/src/components/not-found/CodeBlock.sass
deleted file mode 100644
index 51a3d3d0..00000000
--- a/src/components/not-found/CodeBlock.sass
+++ /dev/null
@@ -1,3 +0,0 @@
-.code-block
- white-space: pre-wrap
- margin-top: 60px
diff --git a/src/components/not-found/TerminalWindow.js b/src/components/not-found/TerminalWindow.js
deleted file mode 100644
index c6b8b78b..00000000
--- a/src/components/not-found/TerminalWindow.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import React from "react";
-import { Link } from "react-router-dom";
-import BlinkingCursor from "./BlinkingCursor";
-import CodeBlock from "./CodeBlock";
-import "./TerminalWindow.css";
-
-const TerminalWindow = () => (
- <div className="terminal-window">
- <div className="terminal-header">Terminal -- bash</div>
- <div className="terminal-body">
- <div className="segfault">
- $ status<br />
- opendc[4264]: segfault at 0000051497be459d1 err 12 in libopendc.9.0.4<br
- />
- opendc[4269]: segfault at 000004234855fc2db err 3 in libopendc.9.0.4<br />
- opendc[4270]: STDERR Page does not exist<br />
- </div>
- <CodeBlock />
- <div className="sub-title">
- Got lost?<BlinkingCursor />
- </div>
- <Link to="/" className="home-btn">
- <span className="fa fa-home" /> GET ME BACK TO OPENDC
- </Link>
- </div>
- </div>
-);
-
-export default TerminalWindow;
diff --git a/src/components/not-found/TerminalWindow.sass b/src/components/not-found/TerminalWindow.sass
deleted file mode 100644
index 4f51a77f..00000000
--- a/src/components/not-found/TerminalWindow.sass
+++ /dev/null
@@ -1,70 +0,0 @@
-.terminal-window
- width: 600px
- height: 400px
- display: block
-
- position: absolute
- top: 0
- bottom: 0
- left: 0
- right: 0
-
- margin: auto
-
- -webkit-user-select: none
- -moz-user-select: none
- -ms-user-select: none
- user-select: none
- cursor: default
-
- overflow: hidden
-
- box-shadow: 5px 5px 20px #444444
-
-.terminal-header
- font-family: monospace
- background: #cccccc
- color: #444444
- height: 30px
- line-height: 30px
- padding-left: 10px
-
- border-top-left-radius: 7px
- border-top-right-radius: 7px
-
-.terminal-body
- font-family: monospace
- text-align: center
- background-color: #333333
- color: #eeeeee
- padding: 10px
-
- height: 100%
-
-.segfault
- text-align: left
-
-.sub-title
- margin-top: 20px
-
-.home-btn
- margin-top: 10px
- padding: 5px
- display: inline-block
- border: 1px solid #eeeeee
- color: #eeeeee
- text-decoration: none
- cursor: pointer
-
- -webkit-transition: all 200ms
- -moz-transition: all 200ms
- -o-transition: all 200ms
- transition: all 200ms
-
-.home-btn:hover
- background: #eeeeee
- color: #333333
-
-.home-btn:active
- background: #333333
- color: #eeeeee
diff --git a/src/components/simulations/FilterButton.js b/src/components/simulations/FilterButton.js
deleted file mode 100644
index aa41f180..00000000
--- a/src/components/simulations/FilterButton.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import classNames from "classnames";
-import PropTypes from "prop-types";
-import React from "react";
-
-const FilterButton = ({ active, children, onClick }) => (
- <button
- className={classNames("btn btn-secondary", { active: active })}
- onClick={() => {
- if (!active) {
- onClick();
- }
- }}
- >
- {children}
- </button>
-);
-
-FilterButton.propTypes = {
- active: PropTypes.bool.isRequired,
- children: PropTypes.node.isRequired,
- onClick: PropTypes.func.isRequired
-};
-
-export default FilterButton;
diff --git a/src/components/simulations/FilterPanel.js b/src/components/simulations/FilterPanel.js
deleted file mode 100644
index 836c0842..00000000
--- a/src/components/simulations/FilterPanel.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from "react";
-import FilterLink from "../../containers/simulations/FilterLink";
-import "./FilterPanel.css";
-
-const FilterPanel = () => (
- <div className="btn-group filter-panel mb-2">
- <FilterLink filter="SHOW_ALL">All Simulations</FilterLink>
- <FilterLink filter="SHOW_OWN">My Simulations</FilterLink>
- <FilterLink filter="SHOW_SHARED">Shared with me</FilterLink>
- </div>
-);
-
-export default FilterPanel;
diff --git a/src/components/simulations/FilterPanel.sass b/src/components/simulations/FilterPanel.sass
deleted file mode 100644
index e10e4746..00000000
--- a/src/components/simulations/FilterPanel.sass
+++ /dev/null
@@ -1,5 +0,0 @@
-.filter-panel
- display: flex
-
- button
- flex: 1 !important
diff --git a/src/components/simulations/NewSimulationButtonComponent.js b/src/components/simulations/NewSimulationButtonComponent.js
deleted file mode 100644
index 7e12d30f..00000000
--- a/src/components/simulations/NewSimulationButtonComponent.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-
-const NewSimulationButtonComponent = ({ onClick }) => (
- <div className="bottom-btn-container">
- <div className="btn btn-primary float-right" onClick={onClick}>
- <span className="fa fa-plus mr-2" />
- New Simulation
- </div>
- </div>
-);
-
-NewSimulationButtonComponent.propTypes = {
- onClick: PropTypes.func.isRequired
-};
-
-export default NewSimulationButtonComponent;
diff --git a/src/components/simulations/SimulationActionButtons.js b/src/components/simulations/SimulationActionButtons.js
deleted file mode 100644
index 46f4f159..00000000
--- a/src/components/simulations/SimulationActionButtons.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import { Link } from "react-router-dom";
-
-const SimulationActionButtons = ({ simulationId, onViewUsers, onDelete }) => (
- <td className="text-right">
- <Link
- to={"/simulations/" + simulationId}
- className="btn btn-outline-primary btn-sm mr-2"
- title="Open this simulation"
- >
- <span className="fa fa-play" />
- </Link>
- <div
- className="btn btn-outline-success btn-sm disabled mr-2"
- title="View and edit collaborators (not supported yet)"
- onClick={() => onViewUsers(simulationId)}
- >
- <span className="fa fa-users" />
- </div>
- <div
- className="btn btn-outline-danger btn-sm"
- title="Delete this simulation"
- onClick={() => onDelete(simulationId)}
- >
- <span className="fa fa-trash" />
- </div>
- </td>
-);
-
-SimulationActionButtons.propTypes = {
- simulationId: PropTypes.number.isRequired,
- onViewUsers: PropTypes.func,
- onDelete: PropTypes.func
-};
-
-export default SimulationActionButtons;
diff --git a/src/components/simulations/SimulationAuthList.js b/src/components/simulations/SimulationAuthList.js
deleted file mode 100644
index f29dc96d..00000000
--- a/src/components/simulations/SimulationAuthList.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import PropTypes from "prop-types";
-import React from "react";
-import Shapes from "../../shapes/index";
-import SimulationAuthRow from "./SimulationAuthRow";
-
-const SimulationAuthList = ({ authorizations }) => {
- return (
- <div className="vertically-expanding-container">
- {authorizations.length === 0 ? (
- <div className="alert alert-info">
- <span className="info-icon fa fa-question-circle mr-2" />
- <strong>No simulations here yet...</strong> Add some with the 'New
- Simulation' button!
- </div>
- ) : (
- <table className="table table-striped">
- <thead>
- <tr>
- <th>Simulation name</th>
- <th>Last edited</th>
- <th>Access rights</th>
- <th />
- </tr>
- </thead>
- <tbody>
- {authorizations.map(authorization => (
- <SimulationAuthRow
- simulationAuth={authorization}
- key={authorization.simulation.id}
- />
- ))}
- </tbody>
- </table>
- )}
- </div>
- );
-};
-
-SimulationAuthList.propTypes = {
- authorizations: PropTypes.arrayOf(Shapes.Authorization).isRequired
-};
-
-export default SimulationAuthList;
diff --git a/src/components/simulations/SimulationAuthRow.js b/src/components/simulations/SimulationAuthRow.js
deleted file mode 100644
index b638fbce..00000000
--- a/src/components/simulations/SimulationAuthRow.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import classNames from "classnames";
-import React from "react";
-import SimulationActions from "../../containers/simulations/SimulationActions";
-import Shapes from "../../shapes/index";
-import { AUTH_DESCRIPTION_MAP, AUTH_ICON_MAP } from "../../util/authorizations";
-import { parseAndFormatDateTime } from "../../util/date-time";
-
-const SimulationAuthRow = ({ simulationAuth }) => (
- <tr>
- <td className="pt-3">{simulationAuth.simulation.name}</td>
- <td className="pt-3">
- {parseAndFormatDateTime(simulationAuth.simulation.datetimeLastEdited)}
- </td>
- <td className="pt-3">
- <span
- className={classNames(
- "fa",
- "fa-" + AUTH_ICON_MAP[simulationAuth.authorizationLevel],
- "mr-2"
- )}
- />
- {AUTH_DESCRIPTION_MAP[simulationAuth.authorizationLevel]}
- </td>
- <SimulationActions simulationId={simulationAuth.simulation.id} />
- </tr>
-);
-
-SimulationAuthRow.propTypes = {
- simulationAuth: Shapes.Authorization.isRequired
-};
-
-export default SimulationAuthRow;