diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Account.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Account.razor
index 62823be1..da2a4ffd 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Account.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Account.razor
@@ -60,7 +60,7 @@
{
@foreach (var g in ldapGroups)
{
- @g
+ @DisplayText.Abbreviate(g, 40)
}
}
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/AlarmsHistorian.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/AlarmsHistorian.razor
index 55c3be0f..751d759b 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/AlarmsHistorian.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/AlarmsHistorian.razor
@@ -38,7 +38,7 @@ else
Last success@(_status.LastSuccessUtc?.ToString("u") ?? "—")
@if (!string.IsNullOrWhiteSpace(_status.LastError))
{
- Last error@_status.LastError
+ Last error@DisplayText.Abbreviate(_status.LastError, 80)
}
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Alerts.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Alerts.razor
index 58dd2250..da30583b 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Alerts.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Alerts.razor
@@ -81,7 +81,7 @@ else
@e.TransitionKind |
@e.Severity |
@e.User |
- @e.Message |
+ @DisplayText.Abbreviate(e.Message, 80) |
@if (_canOperate)
{
@* DriverOperator-gated Acknowledge / Shelve / Unshelve. Each routes through
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Certificates.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Certificates.razor
index ebeb9c3a..3c8b4d0b 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Certificates.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Certificates.razor
@@ -74,8 +74,8 @@ else
@foreach (var c in store.Certificates)
{
- | @c.Subject |
- @c.Issuer |
+ @DisplayText.Abbreviate(c.Subject, 48) |
+ @DisplayText.Abbreviate(c.Issuer, 48) |
@DisplayText.Abbreviate(c.Thumbprint, 16) |
@c.NotBefore.ToString("u") |
@c.NotAfter.ToString("u") |
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAcls.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAcls.razor
index 8c1c63f4..b3ef922a 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAcls.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAcls.razor
@@ -85,7 +85,7 @@ else
@perm
}
- @(a.Notes ?? "") |
+ @(string.IsNullOrEmpty(a.Notes) ? "" : DisplayText.Abbreviate(a.Notes, 60)) |
Edit |
}
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor
index 7ae6baa5..f7131fca 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor
@@ -52,7 +52,8 @@ else
@a.EventType |
@(a.NodeId ?? "—") |
@(a.CorrelationId?.ToString("N")[..8] ?? "—") |
-
+ |
@(a.DetailsJson ?? "")
|
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterOverview.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterOverview.razor
index 051ff6db..c9070c49 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterOverview.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterOverview.razor
@@ -46,7 +46,7 @@ else
}
@if (!string.IsNullOrWhiteSpace(_cluster.Notes))
{
- Notes@_cluster.Notes
+ Notes@DisplayText.Abbreviate(_cluster.Notes, 120)
}
@@ -97,9 +97,9 @@ else
{
| @n.NodeId |
- @n.Host |
+ @DisplayText.Abbreviate(n.Host, 30) |
@n.OpcUaPort |
- @n.ApplicationUri |
+ @DisplayText.Abbreviate(n.ApplicationUri, 40) |
@n.ServiceLevelBase |
Edit |
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor
index 9e11a1c9..507ab9f3 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor
@@ -125,7 +125,7 @@ else
{
| @n.NodeId |
- @n.ApplicationUri |
+ @DisplayText.Abbreviate(n.ApplicationUri, 40) |
@n.ServiceLevelBase |
@if (n.ServiceLevelBase >= 200) { Primary preference }
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Fleet.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Fleet.razor
index b620daa8..fbf97694 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Fleet.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Fleet.razor
@@ -89,7 +89,7 @@ else
| @StatusLabel(r.Status) |
@(r.AppliedAtUtc?.ToString("u") ?? "—") |
@(r.StartedAtUtc?.ToString("u") ?? "—") |
- @(r.FailureReason ?? "") |
+ @(string.IsNullOrEmpty(r.FailureReason) ? "" : DisplayText.Abbreviate(r.FailureReason, 80)) |
}
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/RoleGrants.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/RoleGrants.razor
index afa68372..51f99111 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/RoleGrants.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/RoleGrants.razor
@@ -21,7 +21,7 @@
Enabled@(_options.Enabled ? "yes" : "no")
Server@_options.Server:@_options.Port
Transport@_options.Transport
- SearchBase@_options.SearchBase
+ SearchBase@DisplayText.Abbreviate(_options.SearchBase, 48)
@if (_options.Transport == ZB.MOM.WW.Auth.Abstractions.Ldap.LdapTransport.None && _options.AllowInsecure)
{
WarningPlaintext credentials over LDAP — dev mode only
@@ -62,7 +62,7 @@
@foreach (var r in _rows)
{
- | @r.LdapGroup |
+ @DisplayText.Abbreviate(r.LdapGroup, 48) |
@r.Role |
|
@@ -93,7 +93,7 @@
@foreach (var kvp in _options.GroupToRole.OrderBy(k => k.Key, StringComparer.OrdinalIgnoreCase))
{
- | @kvp.Key |
+ @DisplayText.Abbreviate(kvp.Key, 48) |
@kvp.Value |
}
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/ScriptLog.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/ScriptLog.razor
index fbe41e43..ebdb8d17 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/ScriptLog.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/ScriptLog.razor
@@ -68,7 +68,7 @@ else
@if (!string.IsNullOrEmpty(e.AlarmId)) { alarm=@e.AlarmId }
@if (!string.IsNullOrEmpty(e.EquipmentId)) { eq=@e.EquipmentId }
- @e.Message |
+ @DisplayText.Abbreviate(e.Message, 120) |
}
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverStatusPanel.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverStatusPanel.razor
index c1a1db57..4a2a7e10 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverStatusPanel.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverStatusPanel.razor
@@ -38,7 +38,7 @@
}
else if (_error is not null)
{
- SignalR error: @_error
+ SignalR error: @DisplayText.Abbreviate(_error, 60)
}
else if (_snapshot is null)
{
@@ -166,7 +166,7 @@
@if (_opResultMessage is not null)
{
- @_opResultMessage
+ @_opResultMessage
}
@@ -212,7 +212,11 @@
private bool _busyReconnect;
private bool _busyRestart;
private bool _showRestartConfirm;
+ // Display text for the op-result chip (truncated at the ShowOpResult choke point) plus the
+ // untruncated original, which rides the chip's title attribute so the full message stays
+ // reachable on hover.
private string? _opResultMessage;
+ private string? _opResultMessageFull;
private bool _opResultOk;
private System.Threading.Timer? _opResultClearTimer;
@@ -303,6 +307,7 @@
{
_busyReconnect = true;
_opResultMessage = null;
+ _opResultMessageFull = null;
StateHasChanged();
try
{
@@ -315,7 +320,7 @@
}
catch (Exception ex)
{
- ShowOpResult(false, ex.Message.Length > 60 ? ex.Message[..60] + "…" : ex.Message);
+ ShowOpResult(false, ex.Message);
}
finally
{
@@ -329,6 +334,7 @@
_showRestartConfirm = false;
_busyRestart = true;
_opResultMessage = null;
+ _opResultMessageFull = null;
StateHasChanged();
try
{
@@ -341,7 +347,7 @@
}
catch (Exception ex)
{
- ShowOpResult(false, ex.Message.Length > 60 ? ex.Message[..60] + "…" : ex.Message);
+ ShowOpResult(false, ex.Message);
}
finally
{
@@ -367,13 +373,17 @@
private void ShowOpResult(bool ok, string message)
{
_opResultOk = ok;
- _opResultMessage = message;
+ // Single truncation choke point: callers pass the untruncated message, the chip renders the
+ // abbreviation and carries the original on its title attribute.
+ _opResultMessageFull = message;
+ _opResultMessage = DisplayText.Abbreviate(message, 60);
// Auto-clear the result chip after 8 s. System.Threading.Timer is used (not
// System.Timers.Timer) so DisposeAsync can drain any in-flight callback.
_opResultClearTimer?.Dispose();
_opResultClearTimer = new System.Threading.Timer(_ =>
{
_opResultMessage = null;
+ _opResultMessageFull = null;
InvokeAsync(StateHasChanged);
}, null, TimeSpan.FromSeconds(8), Timeout.InfiniteTimeSpan);
}
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverTagPicker.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverTagPicker.razor
index a5a26f07..75d8da56 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverTagPicker.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverTagPicker.razor
@@ -18,7 +18,7 @@
- @if (_openError is not null)
- {
- @_openError
- }
@if (_token != Guid.Empty)
{
@@ -207,7 +205,7 @@ else
TagConfig:
- @(_built.Length == 0 ? "—" : _built)
+ @DisplayText.Abbreviate(_built, 64)
@code {
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/Pickers/TwinCATAddressPickerBody.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/Pickers/TwinCATAddressPickerBody.razor
index 22875bdc..5306a27c 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/Pickers/TwinCATAddressPickerBody.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/Pickers/TwinCATAddressPickerBody.razor
@@ -61,7 +61,7 @@
Result:
- @_built
+ @DisplayText.Abbreviate(_built, 64)
@code {