Skip to content

Commit 0beaf62

Browse files
Merge pull request #2401 from spadgett/format-instance-status-messages
Automatic merge from submit-queue. Preserve newlines in broker status messages Preserve newlines in service instance status messages on the overview and the provisioned service page. Truncate long message when displayed in a tooltip. See #2217 ![screen shot 2017-10-30 at 3 44 27 pm](https://user-images.githubusercontent.com/1167259/32192505-bb62ecc8-bd8a-11e7-9531-385f538c3f52.png) ![screen shot 2017-10-30 at 4 11 12 pm](https://user-images.githubusercontent.com/1167259/32193223-fd560b4a-bd8c-11e7-8ae9-1cc37575fcdf.png) ![screen shot 2017-10-30 at 3 46 30 pm](https://user-images.githubusercontent.com/1167259/32192518-c6f75948-bd8a-11e7-8f97-f22e0a5eb258.png)
2 parents 8a67e93 + bd6c36c commit 0beaf62

File tree

9 files changed

+80
-37
lines changed

9 files changed

+80
-37
lines changed

app/scripts/directives/overview/serviceInstanceRow.js

+16
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
var row = this;
3030
var isBindingFailed = $filter('isBindingFailed');
3131
var isBindingReady = $filter('isBindingReady');
32+
var serviceInstanceFailedMessage = $filter('serviceInstanceFailedMessage');
33+
var truncate = $filter('truncate');
3234

3335
_.extend(row, ListRowUtils.ui);
3436

@@ -111,6 +113,20 @@
111113
_.set(row, 'overlay.state', state);
112114
};
113115

116+
row.getFailedTooltipText = function() {
117+
var message = serviceInstanceFailedMessage(row.apiObject);
118+
if (!message) {
119+
return '';
120+
}
121+
122+
var truncated = truncate(message, 128);
123+
if (message.length !== truncated.length) {
124+
truncated += '...';
125+
}
126+
127+
return truncated;
128+
};
129+
114130
row.deprovision = function() {
115131
ServiceInstancesService.deprovision(row.apiObject, row.deleteableBindings);
116132
};

app/styles/_instances.less

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.service-instance-details .instance-status-message {
2+
white-space: pre-line;
3+
}

app/styles/_overview.less

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
margin-top: 5px;
3030
}
3131
}
32+
.instance-status-message .truncated-content,
33+
.instance-status-notification .tooltip {
34+
// Preserve newlines in broker error messages.
35+
white-space: pre-line;
36+
}
3237
.instance-status-notification,
3338
.notification-icon-count {
3439
display: inline-block;

app/styles/main.less

+1
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,4 @@
6565
@import "_builds.less";
6666
@import "_editor.less";
6767
@import "_add-config-to-application.less";
68+
@import "_instances.less";

app/views/browse/service-instance.html

+2-4
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ <h1 class="contains-actions">
5454
</div>
5555
</div>
5656
</div><!-- /middle-header-->
57-
<div class="middle-content" persist-tab-state>
57+
<div class="middle-content service-instance-details" persist-tab-state>
5858
<div class="container-fluid">
5959
<div class="row" ng-if="serviceInstance">
6060
<div class="col-md-12">
@@ -78,9 +78,7 @@ <h3>Status</h3>
7878
<span flex>{{serviceInstance | serviceInstanceStatus | sentenceCase}}</span>
7979
</dd>
8080
<dt ng-if-start="serviceInstance | serviceInstanceConditionMessage">Status Reason:</dt>
81-
<dd ng-if-end>
82-
{{serviceInstance | serviceInstanceConditionMessage}}
83-
</dd>
81+
<dd ng-if-end class="instance-status-message">{{serviceInstance | serviceInstanceConditionMessage}}</dd>
8482
</dl>
8583
<div class="hidden-lg">
8684
<h3 ng-if-start="serviceClass.spec.description || serviceClass.spec.externalMetadata.longDescription">Description</h3>

app/views/overview/_service-instance-row.html

+21-9
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ <h3>
99
<a ng-href="{{row.apiObject | navigateResourceURL}}" ng-bind-html="row.displayName | highlightKeywords : row.state.filterKeywords"></a>
1010
<div ng-bind-html="row.apiObject.metadata.name | highlightKeywords : row.state.filterKeywords" class="list-row-longname"></div>
1111
</h3>
12-
<div class="status-icons" ng-if="!row.expanded">
12+
<div class="status-icons" ng-if="!row.expanded" ng-init="tooltipID = 'instance-status-tooltip-' + $id">
1313
<notification-icon alerts="row.notifications"></notification-icon>
14-
<div ng-switch="row.instanceStatus" class="instance-status-notification">
14+
<div ng-switch="row.instanceStatus" class="instance-status-notification" id="{{tooltipID}}">
15+
<!-- Set the tooltip container so we can add write CSS rules that target the message. -->
1516
<span ng-switch-when="failed"
16-
dynamic-content="{{row.apiObject | serviceInstanceFailedMessage}}"
17+
dynamic-content="{{row.getFailedTooltipText()}}"
1718
data-toggle="tooltip"
18-
data-trigger="hover">
19+
data-trigger="hover"
20+
data-container="#{{tooltipID}}">
1921
<span class="pficon pficon-error-circle-o" aria-hidden="true"></span>
2022
Error
2123
</span>
@@ -111,12 +113,16 @@ <h3>
111113
<span class="pficon pficon-error-circle-o" aria-hidden="true"></span>
112114
<span class="sr-only">error</span>
113115
<span class="strong">The service failed.</span>
114-
<span class="mar-right-md">
115-
<truncate-long-text content="row.apiObject | serviceInstanceFailedMessage" limit="265"></truncate-long-text>
116+
<span class="instance-status-message">
117+
<truncate-long-text
118+
content="row.apiObject | serviceInstanceFailedMessage"
119+
expandable="true"
120+
limit="265"
121+
newline-limit="4"></truncate-long-text>
116122
</span>
117-
<span ng-if="row.serviceInstancesVersion | canI : 'delete'" class="nowrap">
123+
<div ng-if="row.serviceInstancesVersion | canI : 'delete'">
118124
<a href="" ng-click="row.deprovision()">Delete This Service</a>
119-
</span>
125+
</div>
120126
</div>
121127
</div>
122128
</div>
@@ -126,7 +132,13 @@ <h3>
126132
<span class="pficon pficon-info" aria-hidden="true"></span>
127133
<span class="sr-only">info</span>
128134
<span class="strong">The service is not yet ready.</span>
129-
<truncate-long-text content="row.apiObject | serviceInstanceReadyMessage" limit="265"></truncate-long-text>
135+
<span class="instance-status-message">
136+
<truncate-long-text
137+
content="row.apiObject | serviceInstanceReadyMessage"
138+
expandable="true"
139+
limit="265"
140+
newline-limit="4"></truncate-long-text>
141+
</span>
130142
</div>
131143
</div>
132144
</div>

dist/scripts/scripts.js

+11-6
Original file line numberDiff line numberDiff line change
@@ -13838,21 +13838,21 @@ templateUrl: "views/overview/_list-row.html"
1383813838
}(), function() {
1383913839
angular.module("openshiftConsole").component("serviceInstanceRow", {
1384013840
controller: [ "$filter", "APIService", "AuthorizationService", "BindingService", "ListRowUtils", "ServiceInstancesService", function(e, t, n, a, r, o) {
13841-
var i = this, s = e("isBindingFailed"), c = e("isBindingReady");
13841+
var i = this, s = e("isBindingFailed"), c = e("isBindingReady"), l = e("serviceInstanceFailedMessage"), u = e("truncate");
1384213842
_.extend(i, r.ui);
13843-
var l = e("serviceInstanceDisplayName");
13843+
var d = e("serviceInstanceDisplayName");
1384413844
i.serviceBindingsVersion = t.getPreferredVersion("servicebindings"), i.serviceInstancesVersion = t.getPreferredVersion("serviceinstances");
13845-
var u = function() {
13845+
var m = function() {
1384613846
var e = o.getServiceClassNameForInstance(i.apiObject);
1384713847
return _.get(i, [ "state", "serviceClasses", e ]);
13848-
}, d = function() {
13848+
}, p = function() {
1384913849
var e = o.getServicePlanNameForInstance(i.apiObject);
1385013850
return _.get(i, [ "state", "servicePlans", e ]);
13851-
}, m = function() {
13851+
}, f = function() {
1385213852
_.get(i.apiObject, "metadata.deletionTimestamp") ? i.instanceStatus = "deleted" : s(i.apiObject) ? i.instanceStatus = "failed" : c(i.apiObject) ? i.instanceStatus = "ready" : i.instanceStatus = "pending";
1385313853
};
1385413854
i.$doCheck = function() {
13855-
m(), i.notifications = r.getNotifications(i.apiObject, i.state), i.serviceClass = u(), i.servicePlan = d(), i.displayName = l(i.apiObject, i.serviceClass), i.isBindable = a.isServiceBindable(i.apiObject, i.serviceClass, i.servicePlan);
13855+
f(), i.notifications = r.getNotifications(i.apiObject, i.state), i.serviceClass = m(), i.servicePlan = p(), i.displayName = d(i.apiObject, i.serviceClass), i.isBindable = a.isServiceBindable(i.apiObject, i.serviceClass, i.servicePlan);
1385613856
}, i.$onChanges = function(e) {
1385713857
e.bindings && (i.deleteableBindings = _.reject(i.bindings, "metadata.deletionTimestamp"));
1385813858
}, i.getSecretForBinding = function(e) {
@@ -13863,6 +13863,11 @@ return !(_.get(i.apiObject, "metadata.deletionTimestamp") || (!i.isBindable || !
1386313863
_.set(i, "overlay.panelVisible", !1);
1386413864
}, i.showOverlayPanel = function(e, t) {
1386513865
_.set(i, "overlay.panelVisible", !0), _.set(i, "overlay.panelName", e), _.set(i, "overlay.state", t);
13866+
}, i.getFailedTooltipText = function() {
13867+
var e = l(i.apiObject);
13868+
if (!e) return "";
13869+
var t = u(e, 128);
13870+
return e.length !== t.length && (t += "..."), t;
1386613871
}, i.deprovision = function() {
1386713872
o.deprovision(i.apiObject, i.deleteableBindings);
1386813873
};

dist/scripts/templates.js

+13-12
Original file line numberDiff line numberDiff line change
@@ -3697,7 +3697,7 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
36973697
"</div>\n" +
36983698
"</div>\n" +
36993699
"</div>\n" +
3700-
"<div class=\"middle-content\" persist-tab-state>\n" +
3700+
"<div class=\"middle-content service-instance-details\" persist-tab-state>\n" +
37013701
"<div class=\"container-fluid\">\n" +
37023702
"<div class=\"row\" ng-if=\"serviceInstance\">\n" +
37033703
"<div class=\"col-md-12\">\n" +
@@ -3721,9 +3721,7 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
37213721
"<span flex>{{serviceInstance | serviceInstanceStatus | sentenceCase}}</span>\n" +
37223722
"</dd>\n" +
37233723
"<dt ng-if-start=\"serviceInstance | serviceInstanceConditionMessage\">Status Reason:</dt>\n" +
3724-
"<dd ng-if-end>\n" +
3725-
"{{serviceInstance | serviceInstanceConditionMessage}}\n" +
3726-
"</dd>\n" +
3724+
"<dd ng-if-end class=\"instance-status-message\">{{serviceInstance | serviceInstanceConditionMessage}}</dd>\n" +
37273725
"</dl>\n" +
37283726
"<div class=\"hidden-lg\">\n" +
37293727
"<h3 ng-if-start=\"serviceClass.spec.description || serviceClass.spec.externalMetadata.longDescription\">Description</h3>\n" +
@@ -12551,10 +12549,11 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
1255112549
"<a ng-href=\"{{row.apiObject | navigateResourceURL}}\" ng-bind-html=\"row.displayName | highlightKeywords : row.state.filterKeywords\"></a>\n" +
1255212550
"<div ng-bind-html=\"row.apiObject.metadata.name | highlightKeywords : row.state.filterKeywords\" class=\"list-row-longname\"></div>\n" +
1255312551
"</h3>\n" +
12554-
"<div class=\"status-icons\" ng-if=\"!row.expanded\">\n" +
12552+
"<div class=\"status-icons\" ng-if=\"!row.expanded\" ng-init=\"tooltipID = 'instance-status-tooltip-' + $id\">\n" +
1255512553
"<notification-icon alerts=\"row.notifications\"></notification-icon>\n" +
12556-
"<div ng-switch=\"row.instanceStatus\" class=\"instance-status-notification\">\n" +
12557-
"<span ng-switch-when=\"failed\" dynamic-content=\"{{row.apiObject | serviceInstanceFailedMessage}}\" data-toggle=\"tooltip\" data-trigger=\"hover\">\n" +
12554+
"<div ng-switch=\"row.instanceStatus\" class=\"instance-status-notification\" id=\"{{tooltipID}}\">\n" +
12555+
"\n" +
12556+
"<span ng-switch-when=\"failed\" dynamic-content=\"{{row.getFailedTooltipText()}}\" data-toggle=\"tooltip\" data-trigger=\"hover\" data-container=\"#{{tooltipID}}\">\n" +
1255812557
"<span class=\"pficon pficon-error-circle-o\" aria-hidden=\"true\"></span>\n" +
1255912558
"Error\n" +
1256012559
"</span>\n" +
@@ -12640,12 +12639,12 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
1264012639
"<span class=\"pficon pficon-error-circle-o\" aria-hidden=\"true\"></span>\n" +
1264112640
"<span class=\"sr-only\">error</span>\n" +
1264212641
"<span class=\"strong\">The service failed.</span>\n" +
12643-
"<span class=\"mar-right-md\">\n" +
12644-
"<truncate-long-text content=\"row.apiObject | serviceInstanceFailedMessage\" limit=\"265\"></truncate-long-text>\n" +
12642+
"<span class=\"instance-status-message\">\n" +
12643+
"<truncate-long-text content=\"row.apiObject | serviceInstanceFailedMessage\" expandable=\"true\" limit=\"265\" newline-limit=\"4\"></truncate-long-text>\n" +
1264512644
"</span>\n" +
12646-
"<span ng-if=\"row.serviceInstancesVersion | canI : 'delete'\" class=\"nowrap\">\n" +
12645+
"<div ng-if=\"row.serviceInstancesVersion | canI : 'delete'\">\n" +
1264712646
"<a href=\"\" ng-click=\"row.deprovision()\">Delete This Service</a>\n" +
12648-
"</span>\n" +
12647+
"</div>\n" +
1264912648
"</div>\n" +
1265012649
"</div>\n" +
1265112650
"</div>\n" +
@@ -12655,7 +12654,9 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
1265512654
"<span class=\"pficon pficon-info\" aria-hidden=\"true\"></span>\n" +
1265612655
"<span class=\"sr-only\">info</span>\n" +
1265712656
"<span class=\"strong\">The service is not yet ready.</span>\n" +
12658-
"<truncate-long-text content=\"row.apiObject | serviceInstanceReadyMessage\" limit=\"265\"></truncate-long-text>\n" +
12657+
"<span class=\"instance-status-message\">\n" +
12658+
"<truncate-long-text content=\"row.apiObject | serviceInstanceReadyMessage\" expandable=\"true\" limit=\"265\" newline-limit=\"4\"></truncate-long-text>\n" +
12659+
"</span>\n" +
1265912660
"</div>\n" +
1266012661
"</div>\n" +
1266112662
"</div>\n" +

dist/styles/main.css

+8-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)