Files
2026-04-28 15:13:50 +02:00

110 lines
2.9 KiB
JavaScript

/**
* UserFeedback Admin Exclusion Banner
* Handles display and dismissal of admin exclusion notice
*/
(function() {
'use strict';
// Configuration from PHP
var config = window.userfeedback_banner_config || {};
// LocalStorage key for dismissal
var DISMISSAL_KEY = 'userfeedback_admin_banner_dismissed';
/**
* Check if banner was previously dismissed
*/
function isBannerDismissed() {
try {
return localStorage.getItem(DISMISSAL_KEY) === 'true';
} catch (e) {
return false;
}
}
/**
* Mark banner as dismissed
*/
function dismissBanner() {
try {
localStorage.setItem(DISMISSAL_KEY, 'true');
} catch (e) {
// localStorage not available, banner will show again on refresh
}
}
/**
* Hide banner with animation
*/
function hideBanner() {
var banner = document.getElementById('userfeedback-admin-banner');
if (!banner) {
return;
}
banner.classList.remove('userfeedback-admin-banner--visible');
setTimeout(function() {
banner.style.display = 'none';
}, 300);
}
/**
* Initialize and show banner
*/
function initBanner() {
// Check if already dismissed
if (isBannerDismissed()) {
return;
}
var banner = document.getElementById('userfeedback-admin-banner');
if (!banner) {
return;
}
// Populate content from config
var title = banner.querySelector('.userfeedback-admin-banner__title');
var message = banner.querySelector('.userfeedback-admin-banner__message');
var learnMore = banner.querySelector('.userfeedback-admin-banner__learn-more');
var closeBtn = banner.querySelector('.userfeedback-admin-banner__close');
if (title && config.title) {
title.textContent = config.title;
}
if (message && config.message) {
message.textContent = config.message;
}
if (learnMore && config.learn_more_url) {
learnMore.href = config.learn_more_url;
}
// Handle close button
if (closeBtn) {
closeBtn.addEventListener('click', function(e) {
e.preventDefault();
hideBanner();
dismissBanner();
});
}
// Show banner with fade-in animation after a short delay
setTimeout(function() {
banner.style.display = 'block';
// Trigger reflow for animation
banner.offsetHeight;
setTimeout(function() {
banner.classList.add('userfeedback-admin-banner--visible');
}, 10);
}, 500);
}
// Initialize on DOM ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initBanner);
} else {
initBanner();
}
})();