Skip to content

Commit bd6c36c

Browse files
committed
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.
1 parent 8a67e93 commit bd6c36c

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)