diff --git a/app/static/js/app.js b/app/static/js/app.js index 8af400d..dd7f966 100644 --- a/app/static/js/app.js +++ b/app/static/js/app.js @@ -16,6 +16,35 @@ let unreadCounts = {}; // Track unread message counts per channel let dmLastSeenTimestamps = {}; // Track last seen DM timestamp per conversation let dmUnreadCounts = {}; // Track unread DM counts per conversation +/** + * Global navigation function - closes offcanvas and cleans up before navigation + * This prevents Bootstrap backdrop/body classes from persisting after page change + */ +window.navigateTo = function(url) { + // Close offcanvas if open + const offcanvasEl = document.getElementById('mainMenu'); + if (offcanvasEl) { + const offcanvas = bootstrap.Offcanvas.getInstance(offcanvasEl); + if (offcanvas) { + offcanvas.hide(); + } + } + + // Remove any lingering Bootstrap classes/backdrops + document.body.classList.remove('modal-open', 'offcanvas-open'); + document.body.style.overflow = ''; + document.body.style.paddingRight = ''; + + // Remove any backdrops + const backdrops = document.querySelectorAll('.offcanvas-backdrop, .modal-backdrop'); + backdrops.forEach(backdrop => backdrop.remove()); + + // Navigate after cleanup + setTimeout(() => { + window.location.href = url; + }, 100); +}; + // Initialize on page load document.addEventListener('DOMContentLoaded', async function() { console.log('mc-webui initialized'); diff --git a/app/static/js/contacts.js b/app/static/js/contacts.js index d851aba..2554e60 100644 --- a/app/static/js/contacts.js +++ b/app/static/js/contacts.js @@ -10,6 +10,30 @@ * - Mobile-first design */ +// ============================================================================= +// Global Navigation Helper +// ============================================================================= + +/** + * Global navigation function - cleans up DOM before navigation + * This prevents viewport issues when navigating between pages + */ +window.navigateTo = function(url) { + // Remove any lingering Bootstrap classes/backdrops + document.body.classList.remove('modal-open', 'offcanvas-open'); + document.body.style.overflow = ''; + document.body.style.paddingRight = ''; + + // Remove any backdrops + const backdrops = document.querySelectorAll('.offcanvas-backdrop, .modal-backdrop'); + backdrops.forEach(backdrop => backdrop.remove()); + + // Navigate after cleanup + setTimeout(() => { + window.location.href = url; + }, 100); +}; + // ============================================================================= // State Management // ============================================================================= diff --git a/app/templates/base.html b/app/templates/base.html index 15de2bf..ca6a654 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -41,7 +41,7 @@ @@ -63,14 +63,14 @@ Manage Channels - - diff --git a/app/templates/contacts-existing.html b/app/templates/contacts-existing.html index 0a021ac..7efdcbd 100644 --- a/app/templates/contacts-existing.html +++ b/app/templates/contacts-existing.html @@ -18,10 +18,10 @@
- -
diff --git a/app/templates/contacts-manage.html b/app/templates/contacts-manage.html index bd94443..b1a0007 100644 --- a/app/templates/contacts-manage.html +++ b/app/templates/contacts-manage.html @@ -7,7 +7,7 @@ Contact Management
-
@@ -44,7 +44,7 @@ -