aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/bootstrap.js
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/bootstrap.js')
-rw-r--r--web_src/js/bootstrap.js19
1 files changed, 15 insertions, 4 deletions
diff --git a/web_src/js/bootstrap.js b/web_src/js/bootstrap.js
index 15e5b21204..f8d0c0cac0 100644
--- a/web_src/js/bootstrap.js
+++ b/web_src/js/bootstrap.js
@@ -8,10 +8,21 @@ __webpack_public_path__ = `${window.config?.assetUrlPrefix ?? '/assets'}/`;
export function showGlobalErrorMessage(msg) {
const pageContent = document.querySelector('.page-content');
if (!pageContent) return;
- const el = document.createElement('div');
- el.innerHTML = `<div class="ui container negative message center aligned js-global-error" style="white-space: pre-line;"></div>`;
- el.childNodes[0].textContent = msg;
- pageContent.prepend(el.childNodes[0]);
+
+ // compact the message to a data attribute to avoid too many duplicated messages
+ const msgCompact = msg.replace(/\W/g, '').trim();
+ let msgDiv = pageContent.querySelector(`.js-global-error[data-global-error-msg-compact="${msgCompact}"]`);
+ if (!msgDiv) {
+ const el = document.createElement('div');
+ el.innerHTML = `<div class="ui container negative message center aligned js-global-error" style="white-space: pre-line;"></div>`;
+ msgDiv = el.childNodes[0];
+ }
+ // merge duplicated messages into "the message (count)" format
+ const msgCount = Number(msgDiv.getAttribute(`data-global-error-msg-count`)) + 1;
+ msgDiv.setAttribute(`data-global-error-msg-compact`, msgCompact);
+ msgDiv.setAttribute(`data-global-error-msg-count`, msgCount.toString());
+ msgDiv.textContent = msg + (msgCount > 1 ? ` (${msgCount})` : '');
+ pageContent.prepend(msgDiv);
}
/**