diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000000..e7817078cd Binary files /dev/null and b/images/logo.png differ diff --git a/images/logo@2x.png b/images/logo@2x.png new file mode 100644 index 0000000000..51b2e73f68 Binary files /dev/null and b/images/logo@2x.png differ diff --git a/src/ContainerDetails.react.js b/src/ContainerDetails.react.js index e11f4d2092..cbc99e24c5 100644 --- a/src/ContainerDetails.react.js +++ b/src/ContainerDetails.react.js @@ -11,7 +11,6 @@ var dialog = remote.require('dialog'); var ContainerStore = require('./ContainerStore'); var ContainerUtil = require('./ContainerUtil'); var boot2docker = require('./Boot2Docker'); -var ProgressBar = require('react-bootstrap/ProgressBar'); var ContainerDetailsHeader = require('./ContainerDetailsHeader.react'); var ContainerHome = require('./ContainerHome.react'); var RetinaImage = require('react-retina-image'); diff --git a/src/ContainerHome.react.js b/src/ContainerHome.react.js index a5660cee25..72eae2ec0d 100644 --- a/src/ContainerHome.react.js +++ b/src/ContainerHome.react.js @@ -3,6 +3,7 @@ var $ = require('jquery'); var React = require('react/addons'); var RetinaImage = require('react-retina-image'); var path = require('path'); +var exec = require('exec'); var ContainerHome = React.createClass({ handleResize: function () { @@ -33,6 +34,18 @@ var ContainerHome = React.createClass({ this._oldHeight = parent[0].scrollHeight - parent.height(); } }, + handleClickFolder: function (path) { + exec(['open', path], function (err) { + if (err) { throw err; } + }); + }, + handleClickPreview: function () { + if (this.props.defaultPort) { + exec(['open', this.props.ports[this.props.defaultPort].url], function (err) { + if (err) { throw err; } + }); + } + }, render: function () { var preview; if (this.props.defaultPort) { @@ -40,19 +53,22 @@ var ContainerHome = React.createClass({

Web Preview

- + +
Open in Browser
+
Not showing correctly?
); } console.log(this.props.container.Volumes); - var folders = _.map(this.props.container.Volumes, function (val, key) { + var self = this; + var folders = _.map(self.props.container.Volumes, function (val, key) { var firstFolder = key.split(path.sep)[1]; if (!val || val.indexOf(process.env.HOME) === -1) { return; } else { return ( -
+
{firstFolder}
@@ -70,6 +86,7 @@ var ContainerHome = React.createClass({

Logs

{this.props.logs} +
View Logs
@@ -77,6 +94,7 @@ var ContainerHome = React.createClass({
{folders}
+
Change Folders
diff --git a/src/Header.react.js b/src/Header.react.js index e91bf9beaa..69b20baf08 100644 --- a/src/Header.react.js +++ b/src/Header.react.js @@ -1,5 +1,6 @@ var React = require('react/addons'); var remote = require('remote'); +var RetinaImage = require('react-retina-image'); var Header = React.createClass({ getInitialState: function () { @@ -43,6 +44,7 @@ var Header = React.createClass({
+ ); } else { @@ -53,6 +55,7 @@ var Header = React.createClass({
+ ); } diff --git a/src/NewContainer.react.js b/src/NewContainer.react.js index d6512783ea..5855140cc7 100644 --- a/src/NewContainer.react.js +++ b/src/NewContainer.react.js @@ -78,6 +78,7 @@ var NewContainer = React.createClass({ if (err) { throw err; } + $(document.body).find('.new-container-item').parent().fadeOut(); }.bind(this)); }, handleDropdownClick: function (name) { diff --git a/styles/containers.less b/styles/containers.less index 5fafe40909..b25da369e6 100644 --- a/styles/containers.less +++ b/styles/containers.less @@ -598,6 +598,9 @@ &.stopped { color: @gray-lighter; } + &.downloading { + color: @brand-action; + } } /*.details-header-actions { @@ -631,9 +634,12 @@ } .details-progress { - margin: 26% auto 0; + margin: 20% auto 0; text-align: center; width: 300px; + h2 { + margin-bottom: 20px; + } } .details-panel { @@ -642,6 +648,7 @@ background-color: #FFF; &.home { background-color: #F9F9F9; + overflow: hidden; .content { display: flex; flex: 1 auto; @@ -652,17 +659,54 @@ flex-direction: column; .web-preview { margin-right: 30px; + .subtext { + text-align: right; + color: @gray-lightest; + margin-top: 2px; + } .widget { background-color: white; width: 100%; height: 100%; border-radius: 4px; border: 1px solid @gray-lightest; + position: relative; iframe { border: 0; border-radius: 4px; + /*width: 100%; + height: 100%;*/ + position: relative; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + transform: scale(0.5); + } + .iframe-overlay { + position: absolute; + top: 0; + left: 0; width: 100%; height: 100%; + z-index: 100; + color: transparent; + transition: all 0.25s; + .icon { + margin-top: 40%; + display: block; + font-size: 60px; + text-align: center; + } + .text { + font-size: 20px; + text-align: center; + } + &:hover { + color: white; + background-color: @gray-darkest; + opacity: 0.75; + } } } } @@ -673,22 +717,54 @@ .mini-logs { margin-bottom: 50px; .widget { + position: relative; border-radius: 4px; border: 1px solid @gray-lightest; background-color: @gray-darkest; color: @gray-lightest; height: 100%; padding: 10px; - overflow: scroll; + overflow: hidden; font-family: Menlo; font-size: 8px; white-space: pre-wrap; p { margin-bottom: 0px; } + .mini-logs-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; + color: transparent; + transition: all 0.25s; + .icon { + margin-top: 25%; + display: block; + font-size: 60px; + text-align: center; + } + .text { + font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + font-size: 20px; + text-align: center; + } + &:hover { + color: white; + background-color: @gray-darkest; + opacity: 0.75; + } + } } } .folders { + .subtext { + text-align: right; + color: @gray-lightest; + margin-top: 2px; + } .widget { padding: 20px 10px; background-color: white; diff --git a/styles/header.less b/styles/header.less index a55c503aab..58337f4a67 100644 --- a/styles/header.less +++ b/styles/header.less @@ -13,6 +13,14 @@ -webkit-app-region: no-drag; } + .logo { + position: relative; + float: right; + top: 10px; + right: 10px; + z-index: 1000; + } + .buttons { display: inline-block; position: relative; diff --git a/styles/theme.less b/styles/theme.less index 132faa7545..2a404974b3 100644 --- a/styles/theme.less +++ b/styles/theme.less @@ -5,6 +5,11 @@ @import "bootstrap/variables.less"; @import "bootstrap/mixins.less"; +h2 { + font-size: 18px; + color: @gray-normal; +} + h3 { font-size: 14px; color: @gray-darkest;