diff --git a/client/modules/IDE/pages/IDEView.js b/client/modules/IDE/pages/IDEView.js
index dbde2d7b..5429eeb2 100644
--- a/client/modules/IDE/pages/IDEView.js
+++ b/client/modules/IDE/pages/IDEView.js
@@ -16,8 +16,15 @@ import * as ProjectActions from '../actions/project';
import * as EditorAccessibilityActions from '../actions/editorAccessibility';
import * as PreferencesActions from '../actions/preferences';
import { getFile, getHTMLFile, getJSFiles, getCSSFiles, setSelectedFile } from '../reducers/files';
+import SplitPane from 'react-split-pane';
class IDEView extends React.Component {
+ constructor(props) {
+ super(props);
+ this._handleConsolePaneOnDragFinished = this._handleConsolePaneOnDragFinished.bind(this);
+ this._handleSidebarPaneOnDragFinished = this._handleSidebarPaneOnDragFinished.bind(this);
+ }
+
componentDidMount() {
if (this.props.params.project_id) {
const id = this.props.params.project_id;
@@ -30,6 +37,19 @@ class IDEView extends React.Component {
this.autosaveInterval = setInterval(this.props.saveProject, 30000);
}
}
+
+ this.consoleSize = this.props.ide.consoleIsExpanded ? 180 : 29;
+ this.sidebarSize = this.props.ide.sidebarIsExpanded ? 180 : 20;
+ }
+
+ componentWillUpdate(nextProps) {
+ if (this.props.ide.consoleIsExpanded !== nextProps.ide.consoleIsExpanded) {
+ this.consoleSize = nextProps.ide.consoleIsExpanded ? 180 : 29;
+ }
+
+ if (this.props.ide.sidebarIsExpanded !== nextProps.ide.sidebarIsExpanded) {
+ this.sidebarSize = nextProps.ide.sidebarIsExpanded ? 180 : 20;
+ }
}
componentDidUpdate(prevProps) {
@@ -54,6 +74,22 @@ class IDEView extends React.Component {
this.autosaveInterval = null;
}
+ _handleConsolePaneOnDragFinished() {
+ this.consoleSize = this.refs.consolePane.state.draggedSize;
+ this.refs.consolePane.setState({
+ resized: false,
+ draggedSize: undefined,
+ });
+ }
+
+ _handleSidebarPaneOnDragFinished() {
+ this.sidebarSize = this.refs.sidebarPane.state.draggedSize;
+ this.refs.sidebarPane.setState({
+ resized: false,
+ draggedSize: undefined
+ });
+ }
+
render() {
return (
@@ -91,58 +127,84 @@ class IDEView extends React.Component {
setLintWarning={this.props.setLintWarning}
/>
-
-
-
+
-
-
-
-
- }
- isPlaying={this.props.ide.isPlaying}
- dispatchConsoleEvent={this.props.dispatchConsoleEvent}
- />
+
(this.refs.overlay.style.display = 'block')}
+ onDragFinished={() => (this.refs.overlay.style.display = 'none')}
+ >
+
+
+
+
+
+
+
+
+
+ }
+ isPlaying={this.props.ide.isPlaying}
+ dispatchConsoleEvent={this.props.dispatchConsoleEvent}
+ />
+
+
+
{(() => {
if (this.props.ide.modalIsVisible) {
diff --git a/client/styles/abstracts/_placeholders.scss b/client/styles/abstracts/_placeholders.scss
index 4a0be1a3..8149e3c6 100644
--- a/client/styles/abstracts/_placeholders.scss
+++ b/client/styles/abstracts/_placeholders.scss
@@ -113,6 +113,7 @@
border: 1px solid $light-modal-border-color;
border-radius: 2px;
box-shadow: 0 12px 12px $light-shadow-color;
+ z-index: 20;
}
%hidden-element {
diff --git a/client/styles/components/_console.scss b/client/styles/components/_console.scss
index 2b7b2151..e1fd9658 100644
--- a/client/styles/components/_console.scss
+++ b/client/styles/components/_console.scss
@@ -1,10 +1,6 @@
.preview-console {
- position: absolute;
width: 100%;
- height: #{150 / $base-font-size}rem;
- right: 0;
- bottom: 0;
- left: 0;
+ height: 100%;
background: $console-light-background-color;
z-index: 1000;
overflow: hidden;
@@ -26,10 +22,6 @@
.preview-console__warn {
color: $console-warn-color;
}
-
- &.preview-console--collapsed {
- height: #{29 / $base-font-size}rem;
- }
}
.preview-console__header {
diff --git a/client/styles/components/_resizer.scss b/client/styles/components/_resizer.scss
new file mode 100644
index 00000000..2e30edfb
--- /dev/null
+++ b/client/styles/components/_resizer.scss
@@ -0,0 +1,43 @@
+.Resizer {
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ background: $ide-border-color;
+ opacity: .2;
+ z-index: 1;
+ -moz-background-clip: padding;
+ -webkit-background-clip: padding;
+ background-clip: padding-box;
+}
+
+// .Resizer:hover {
+// -webkit-transition: all 2s ease;
+// transition: all 2s ease;
+// }
+
+.Resizer.horizontal {
+ height: 11px;
+ margin: -5px 0;
+ border-top: 5px solid rgba(255, 255, 255, 0);
+ border-bottom: 5px solid rgba(255, 255, 255, 0);
+ cursor: row-resize;
+ width: 100%;
+}
+
+.Resizer.horizontal:hover {
+ // border-top: 5px solid rgba(0, 0, 0, 0.5);
+ // border-bottom: 5px solid rgba(0, 0, 0, 0.5);
+}
+
+.Resizer.vertical {
+ width: 11px;
+ margin: 0 -5px;
+ border-left: 5px solid rgba(255, 255, 255, 0);
+ border-right: 5px solid rgba(255, 255, 255, 0);
+ cursor: col-resize;
+}
+
+.Resizer.vertical:hover {
+ // border-left: 5px solid rgba(0, 0, 0, 0.5);
+ // border-right: 5px solid rgba(0, 0, 0, 0.5);
+}
\ No newline at end of file
diff --git a/client/styles/components/_sidebar.scss b/client/styles/components/_sidebar.scss
index c3e4bb54..94248be3 100644
--- a/client/styles/components/_sidebar.scss
+++ b/client/styles/components/_sidebar.scss
@@ -13,6 +13,8 @@
.sidebar--contracted & {
display: none;
}
+ white-space: nowrap;
+ overflow: hidden;
}
.sidebar__add {
diff --git a/client/styles/layout/_ide.scss b/client/styles/layout/_ide.scss
index 581c9628..0a041542 100644
--- a/client/styles/layout/_ide.scss
+++ b/client/styles/layout/_ide.scss
@@ -9,11 +9,13 @@
width: 100%;
flex: 1 0 0px;
display: flex;
+ position: relative;
}
.editor-console-container {
- flex: 1 0 0px;
- max-width: 45%;
+ // flex: 1 0 0px;
+ // max-width: 45%;
+ width: 100%;
height: 100%;
position: relative;
@@ -32,8 +34,16 @@
}
.preview-frame {
- flex: 1 0 0px;
- min-height: 100%;
+ height: 100%;
+ width: 100%;
+ position: absolute;
+}
+
+.preview-frame-overlay {
+ height: 100%;
+ width: 100%;
+ position: absolute;
+ z-index: 10;
}
.toolbar {
@@ -41,8 +51,6 @@
}
.sidebar {
- width: #{180 / $base-font-size}rem;
- &.sidebar--contracted {
- width: #{20 / $base-font-size}rem;
- }
+ width: 100%;
+ height: 100%;
}
diff --git a/client/styles/main.scss b/client/styles/main.scss
index 170d84fb..7a565c25 100644
--- a/client/styles/main.scss
+++ b/client/styles/main.scss
@@ -19,6 +19,7 @@
@import 'components/sidebar';
@import 'components/modal';
@import 'components/console';
+@import 'components/resizer';
@import 'layout/ide';
@import 'layout/sketch-list';
diff --git a/package.json b/package.json
index 4140cf0b..98e9ab23 100644
--- a/package.json
+++ b/package.json
@@ -93,6 +93,7 @@
"react-inlinesvg": "^0.4.2",
"react-redux": "^4.4.5",
"react-router": "^2.4.1",
+ "react-split-pane": "^0.1.44",
"redux": "^3.5.2",
"redux-form": "^5.2.5",
"redux-thunk": "^2.1.0",