diff --git a/static/js/managers/BannerService.js b/static/js/managers/BannerService.js
index 3711585f..c2226fce 100644
--- a/static/js/managers/BannerService.js
+++ b/static/js/managers/BannerService.js
@@ -62,6 +62,12 @@ class BannerService {
*/
registerBanner(id, bannerConfig) {
this.banners.set(id, bannerConfig);
+
+ // If already initialized, render the banner immediately
+ if (this.initialized && !this.isBannerDismissed(id) && this.container) {
+ this.renderBanner(bannerConfig);
+ this.updateContainerVisibility();
+ }
}
/**
@@ -88,6 +94,12 @@ class BannerService {
// Remove banner from DOM
const bannerElement = document.querySelector(`[data-banner-id="${bannerId}"]`);
if (bannerElement) {
+ // Call onRemove callback if provided
+ const banner = this.banners.get(bannerId);
+ if (banner && typeof banner.onRemove === 'function') {
+ banner.onRemove(bannerElement);
+ }
+
bannerElement.style.animation = 'banner-slide-up 0.3s ease-in-out forwards';
setTimeout(() => {
bannerElement.remove();
@@ -122,12 +134,16 @@ class BannerService {
bannerElement.className = 'banner-item';
bannerElement.setAttribute('data-banner-id', banner.id);
- const actionsHtml = banner.actions ? banner.actions.map(action =>
- `
+ const actionsHtml = banner.actions ? banner.actions.map(action => {
+ const actionAttribute = action.action ? `data-action="${action.action}"` : '';
+ const href = action.url ? `href="${action.url}"` : '#';
+ const target = action.url ? 'target="_blank" rel="noopener noreferrer"' : '';
+
+ return `
${action.text}
- `
- ).join('') : '';
+ `;
+ }).join('') : '';
const dismissButtonHtml = banner.dismissible ?
`