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%;