diff --git a/public/js/components/feedback.js b/public/js/components/feedback.js index 89fff9c3..0db81cdb 100644 --- a/public/js/components/feedback.js +++ b/public/js/components/feedback.js @@ -65,8 +65,8 @@ class TractausFeedback { renderFAB() { const fabHTML = ` + @@ -397,6 +402,17 @@ class TractatusNavbar { }); }); + // Mobile feedback button — close drawer then open feedback modal + const mobileFeedbackBtn = document.getElementById('mobile-feedback-btn'); + if (mobileFeedbackBtn) { + mobileFeedbackBtn.addEventListener('click', () => { + if (this.mobileMenuOpen) { + toggleMobileMenu(); + } + window.dispatchEvent(new CustomEvent('openFeedbackModal')); + }); + } + // Mobile accordion sections const mobileSections = document.querySelectorAll('.mobile-nav-section'); mobileSections.forEach(section => { diff --git a/public/js/version-manager.js b/public/js/version-manager.js index 8febb2ce..002c18ea 100644 --- a/public/js/version-manager.js +++ b/public/js/version-manager.js @@ -208,6 +208,12 @@ class VersionManager { } setupInstallPrompt() { + // Skip entirely if already running as installed PWA + if (window.matchMedia('(display-mode: standalone)').matches || + window.navigator.standalone === true) { + return; + } + // Listen for beforeinstallprompt event window.addEventListener('beforeinstallprompt', (e) => { // Prevent Chrome 67 and earlier from automatically showing the prompt @@ -217,7 +223,7 @@ class VersionManager { this.deferredInstallPrompt = e; // Check if user has dismissed install prompt before - const dismissed = sessionStorage.getItem('install_prompt_dismissed'); + const dismissed = localStorage.getItem('tractatus_install_dismissed'); if (!dismissed) { // Show install prompt after 30 seconds setTimeout(() => { @@ -230,6 +236,7 @@ class VersionManager { window.addEventListener('appinstalled', () => { console.log('[VersionManager] PWA installed'); this.deferredInstallPrompt = null; + localStorage.setItem('tractatus_install_dismissed', 'true'); // Hide install prompt if visible const prompt = document.getElementById('tractatus-install-prompt'); @@ -407,8 +414,8 @@ class VersionManager { }, 300); } - // Remember dismissal for this session - sessionStorage.setItem('install_prompt_dismissed', 'true'); + // Remember dismissal persistently across sessions + localStorage.setItem('tractatus_install_dismissed', 'true'); } }