diff options
Diffstat (limited to 'web_src/js/bootstrap.js')
-rw-r--r-- | web_src/js/bootstrap.js | 19 |
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); } /** |