merge master

This commit is contained in:
MathuraMG 2016-08-11 20:59:01 -04:00
commit c8dbb8bef7
8 changed files with 177 additions and 67 deletions

View file

@ -16,8 +16,15 @@ import * as ProjectActions from '../actions/project';
import * as EditorAccessibilityActions from '../actions/editorAccessibility'; import * as EditorAccessibilityActions from '../actions/editorAccessibility';
import * as PreferencesActions from '../actions/preferences'; import * as PreferencesActions from '../actions/preferences';
import { getFile, getHTMLFile, getJSFiles, getCSSFiles, setSelectedFile } from '../reducers/files'; import { getFile, getHTMLFile, getJSFiles, getCSSFiles, setSelectedFile } from '../reducers/files';
import SplitPane from 'react-split-pane';
class IDEView extends React.Component { class IDEView extends React.Component {
constructor(props) {
super(props);
this._handleConsolePaneOnDragFinished = this._handleConsolePaneOnDragFinished.bind(this);
this._handleSidebarPaneOnDragFinished = this._handleSidebarPaneOnDragFinished.bind(this);
}
componentDidMount() { componentDidMount() {
if (this.props.params.project_id) { if (this.props.params.project_id) {
const id = 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.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) { componentDidUpdate(prevProps) {
@ -54,6 +74,22 @@ class IDEView extends React.Component {
this.autosaveInterval = null; 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() { render() {
return ( return (
<div className="ide"> <div className="ide">
@ -91,58 +127,84 @@ class IDEView extends React.Component {
setLintWarning={this.props.setLintWarning} setLintWarning={this.props.setLintWarning}
/> />
<div className="editor-preview-container"> <div className="editor-preview-container">
<Sidebar <SplitPane
files={this.props.files} split="vertical"
setSelectedFile={this.props.setSelectedFile} defaultSize={this.sidebarSize}
newFile={this.props.newFile} ref="sidebarPane"
isExpanded={this.props.ide.sidebarIsExpanded} onDragFinished={this._handleSidebarPaneOnDragFinished}
expandSidebar={this.props.expandSidebar} allowResize={this.props.ide.sidebarIsExpanded}
collapseSidebar={this.props.collapseSidebar} >
showFileOptions={this.props.showFileOptions} <Sidebar
hideFileOptions={this.props.hideFileOptions}
deleteFile={this.props.deleteFile}
showEditFileName={this.props.showEditFileName}
hideEditFileName={this.props.hideEditFileName}
updateFileName={this.props.updateFileName}
/>
<div className="editor-console-container">
<Editor
lintWarning={this.props.preferences.lintWarning}
lintMessages={this.props.editorAccessibility.lintMessages}
updateLineNumber={this.props.updateLineNumber}
updateLintMessage={this.props.updateLintMessage}
clearLintMessage={this.props.clearLintMessage}
file={this.props.selectedFile}
updateFileContent={this.props.updateFileContent}
fontSize={this.props.preferences.fontSize}
indentationAmount={this.props.preferences.indentationAmount}
isTabIndent={this.props.preferences.isTabIndent}
files={this.props.files} files={this.props.files}
setSelectedFile={this.props.setSelectedFile}
newFile={this.props.newFile}
isExpanded={this.props.ide.sidebarIsExpanded}
expandSidebar={this.props.expandSidebar}
collapseSidebar={this.props.collapseSidebar}
showFileOptions={this.props.showFileOptions}
hideFileOptions={this.props.hideFileOptions}
deleteFile={this.props.deleteFile}
showEditFileName={this.props.showEditFileName}
hideEditFileName={this.props.hideEditFileName}
updateFileName={this.props.updateFileName}
/> />
<EditorAccessibility <SplitPane
lintMessages={this.props.editorAccessibility.lintMessages} split="vertical"
lineNo={this.props.editorAccessibility.lineNo} defaultSize={'50%'}
/> onChange={() => (this.refs.overlay.style.display = 'block')}
<Console onDragFinished={() => (this.refs.overlay.style.display = 'none')}
consoleEvent={this.props.ide.consoleEvent} >
isPlaying={this.props.ide.isPlaying} <SplitPane
isExpanded={this.props.ide.consoleIsExpanded} split="horizontal"
expandConsole={this.props.expandConsole} primary="second"
collapseConsole={this.props.collapseConsole} defaultSize={this.consoleSize}
/> minSize={29}
</div> ref="consolePane"
<PreviewFrame onDragFinished={this._handleConsolePaneOnDragFinished}
htmlFile={this.props.htmlFile} allowResize={this.props.ide.consoleIsExpanded}
jsFiles={this.props.jsFiles} >
cssFiles={this.props.cssFiles} <Editor
files={this.props.files} lintWarning={this.props.preferences.lintWarning}
content={this.props.selectedFile.content} lintMessages={this.props.editorAccessibility.lintMessages}
head={ updateLineNumber={this.props.updateLineNumber}
<link type="text/css" rel="stylesheet" href="/preview-styles.css" /> updateLintMessage={this.props.updateLintMessage}
} clearLintMessage={this.props.clearLintMessage}
isPlaying={this.props.ide.isPlaying} file={this.props.selectedFile}
dispatchConsoleEvent={this.props.dispatchConsoleEvent} updateFileContent={this.props.updateFileContent}
/> fontSize={this.props.preferences.fontSize}
indentationAmount={this.props.preferences.indentationAmount}
isTabIndent={this.props.preferences.isTabIndent}
/>
<EditorAccessibility
lintMessages={this.props.editorAccessibility.lintMessages}
lineNo={this.props.editorAccessibility.lineNo}
/>
<Console
consoleEvent={this.props.ide.consoleEvent}
isPlaying={this.props.ide.isPlaying}
isExpanded={this.props.ide.consoleIsExpanded}
expandConsole={this.props.expandConsole}
collapseConsole={this.props.collapseConsole}
/>
</SplitPane>
<div>
<div className="preview-frame-overlay" ref="overlay">
</div>
<PreviewFrame
htmlFile={this.props.htmlFile}
jsFiles={this.props.jsFiles}
cssFiles={this.props.cssFiles}
files={this.props.files}
content={this.props.selectedFile.content}
head={
<link type="text/css" rel="stylesheet" href="/preview-styles.css" />
}
isPlaying={this.props.ide.isPlaying}
dispatchConsoleEvent={this.props.dispatchConsoleEvent}
/>
</div>
</SplitPane>
</SplitPane>
</div> </div>
{(() => { {(() => {
if (this.props.ide.modalIsVisible) { if (this.props.ide.modalIsVisible) {

View file

@ -113,6 +113,7 @@
border: 1px solid $light-modal-border-color; border: 1px solid $light-modal-border-color;
border-radius: 2px; border-radius: 2px;
box-shadow: 0 12px 12px $light-shadow-color; box-shadow: 0 12px 12px $light-shadow-color;
z-index: 20;
} }
%hidden-element { %hidden-element {

View file

@ -1,10 +1,6 @@
.preview-console { .preview-console {
position: absolute;
width: 100%; width: 100%;
height: #{150 / $base-font-size}rem; height: 100%;
right: 0;
bottom: 0;
left: 0;
background: $console-light-background-color; background: $console-light-background-color;
z-index: 1000; z-index: 1000;
overflow: hidden; overflow: hidden;
@ -26,10 +22,6 @@
.preview-console__warn { .preview-console__warn {
color: $console-warn-color; color: $console-warn-color;
} }
&.preview-console--collapsed {
height: #{29 / $base-font-size}rem;
}
} }
.preview-console__header { .preview-console__header {

View file

@ -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);
}

View file

@ -13,6 +13,8 @@
.sidebar--contracted & { .sidebar--contracted & {
display: none; display: none;
} }
white-space: nowrap;
overflow: hidden;
} }
.sidebar__add { .sidebar__add {

View file

@ -9,11 +9,13 @@
width: 100%; width: 100%;
flex: 1 0 0px; flex: 1 0 0px;
display: flex; display: flex;
position: relative;
} }
.editor-console-container { .editor-console-container {
flex: 1 0 0px; // flex: 1 0 0px;
max-width: 45%; // max-width: 45%;
width: 100%;
height: 100%; height: 100%;
position: relative; position: relative;
@ -32,8 +34,16 @@
} }
.preview-frame { .preview-frame {
flex: 1 0 0px; height: 100%;
min-height: 100%; width: 100%;
position: absolute;
}
.preview-frame-overlay {
height: 100%;
width: 100%;
position: absolute;
z-index: 10;
} }
.toolbar { .toolbar {
@ -41,8 +51,6 @@
} }
.sidebar { .sidebar {
width: #{180 / $base-font-size}rem; width: 100%;
&.sidebar--contracted { height: 100%;
width: #{20 / $base-font-size}rem;
}
} }

View file

@ -19,6 +19,7 @@
@import 'components/sidebar'; @import 'components/sidebar';
@import 'components/modal'; @import 'components/modal';
@import 'components/console'; @import 'components/console';
@import 'components/resizer';
@import 'layout/ide'; @import 'layout/ide';
@import 'layout/sketch-list'; @import 'layout/sketch-list';

View file

@ -93,6 +93,7 @@
"react-inlinesvg": "^0.4.2", "react-inlinesvg": "^0.4.2",
"react-redux": "^4.4.5", "react-redux": "^4.4.5",
"react-router": "^2.4.1", "react-router": "^2.4.1",
"react-split-pane": "^0.1.44",
"redux": "^3.5.2", "redux": "^3.5.2",
"redux-form": "^5.2.5", "redux-form": "^5.2.5",
"redux-thunk": "^2.1.0", "redux-thunk": "^2.1.0",