diff --git a/client/app/scripts/components/node-details-controls.js b/client/app/scripts/components/node-details-controls.js index 7123a7b5a..07edc5e60 100644 --- a/client/app/scripts/components/node-details-controls.js +++ b/client/app/scripts/components/node-details-controls.js @@ -5,17 +5,25 @@ const NodeControlButton = require('./node-control-button'); const NodeDetailsControls = React.createClass({ render: function() { + let spinnerClassName = 'fa fa-circle-o-notch fa-spin'; + if (this.props.pending) { + spinnerClassName += ' node-details-controls-spinner'; + } else { + spinnerClassName += ' node-details-controls-spinner hide'; + } + return (
- {this.props.error &&
- - {this.props.error} -
} {this.props.controls && this.props.controls.map(control => { return ( ); })} + {this.props.controls && } + {this.props.error &&
+ + {this.props.error} +
}
); } diff --git a/client/app/scripts/components/node-details.js b/client/app/scripts/components/node-details.js index 2ee7ec167..6cf6d725b 100644 --- a/client/app/scripts/components/node-details.js +++ b/client/app/scripts/components/node-details.js @@ -59,15 +59,19 @@ const NodeDetails = React.createClass({ return this.renderLoading(); } - const style = { - 'backgroundColor': this.getNodeColorDark(details.label_major) + const nodeColor = this.getNodeColorDark(details.label_major); + const styles = { + controls: { + 'backgroundColor': this.brightenColor(nodeColor) + }, + header: { + 'backgroundColor': nodeColor + } }; return (
-
- +

{details.label_major}

@@ -76,6 +80,11 @@ const NodeDetails = React.createClass({
+ {details.controls && details.controls.length > 0 &&
+ +
} +
{details.tables.map(function(table) { const key = _.snakeCase(table.title); diff --git a/client/app/scripts/mixins/node-color-mixin.js b/client/app/scripts/mixins/node-color-mixin.js index c96b3468a..845d832b4 100644 --- a/client/app/scripts/mixins/node-color-mixin.js +++ b/client/app/scripts/mixins/node-color-mixin.js @@ -16,10 +16,21 @@ const NodeColorMixin = { let hsl = color.hsl(); // ensure darkness - // if (hsl.l > 0.5) { - hsl = hsl.darker(); - // } + if (hsl.l > 0.7) { + hsl = hsl.darker(1.5); + } else { + hsl = hsl.darker(1); + } + return hsl.toString(); + }, + brightenColor: function(color) { + let hsl = d3.rgb(color).hsl(); + if (hsl.l > 0.5) { + hsl = hsl.brighter(0.5); + } else { + hsl = hsl.brighter(0.8); + } return hsl.toString(); } }; diff --git a/client/app/styles/main.less b/client/app/styles/main.less index 8b4a90c4e..1cb7b1d4f 100644 --- a/client/app/styles/main.less +++ b/client/app/styles/main.less @@ -324,10 +324,12 @@ h2 { height: 100%; width: 100%; background-color: rgba(255, 255, 255, 0.86); + display: flex; + flex-flow: column; &-header { - padding: 24px 36px 24px 36px; + padding: 24px 36px 16px 36px; &-row { display: flex; @@ -360,8 +362,10 @@ h2 { &-controls { white-space: nowrap; - text-align: right; - margin: -8px -8px 0 0; + + &-wrapper { + padding: 8px 36px 8px 32px; + } .node-control-button { .palable; @@ -384,10 +388,16 @@ h2 { } } + &-spinner { + .hideable; + color: @white; + margin-left: 8px; + } + &-error { .truncate; - float: left; - width: 66%; + float: right; + width: 55%; padding-top: 6px; text-align: left; color: @white; @@ -400,9 +410,7 @@ h2 { } &-content { - position: absolute; - top: 128px; - bottom: 0; + flex: 1; padding: 0 36px 0 36px; overflow-y: scroll; width: 100%;