Association Web Portal

If you're unable to access your account, don’t worry!
You can request important association information like governing documents, design standards, and the architectural request form through our contact form.

Need a quick answer? Our A.I. assistant is ready to help!
Look for the chat bubble in the bottom right to get started.
// BRIX Templates - Auto-Hide Announcement Bar using Attributes (Enhanced Version - Fixed) document.addEventListener('DOMContentLoaded', function() { const component = document.querySelector('[brix-announcement="component"]'); if (!component) { console.warn('BRIX Announcement: No component found with attribute [brix-announcement="component"]'); // Crear herramientas de debug incluso sin componente window.AnnouncementDebug = { status: function() { console.error('❌ No announcement component found on page'); console.log('Add [brix-announcement="component"] attribute to your announcement bar'); return { error: 'No component found' }; } }; return; } // --- Configuration via Attributes --- const closeButton = component.querySelector('[brix-announcement="close"]'); const dontShowButton = component.querySelector('[brix-announcement="dont-show-again"]'); const maxViews = parseInt(component.getAttribute('brix-announcement-max-views'), 10) || 3; const version = component.getAttribute('brix-announcement-version') || 'v1'; // Get original display style for better restoration const originalDisplay = window.getComputedStyle(component).display === 'none' ? 'block' : window.getComputedStyle(component).display; // --- localStorage Keys --- const keys = { views: `brix_announcement_views_${version}`, hidden: `brix_announcement_hidden_${version}`, lastShown: `brix_announcement_last_shown_${version}` }; // --- Utility Functions --- function showComponent() { component.style.display = originalDisplay; component.setAttribute('aria-hidden', 'false'); // Smooth fade-in animation component.style.opacity = '0'; component.style.transition = 'opacity 0.3s ease-in-out'; setTimeout(() => { component.style.opacity = '1'; }, 10); } function hideComponent(permanent = false) { // Smooth fade-out animation component.style.transition = 'opacity 0.3s ease-in-out'; component.style.opacity = '0'; setTimeout(() => { component.style.display = 'none'; component.setAttribute('aria-hidden', 'true'); }, 300); if (permanent) { localStorage.setItem(keys.hidden, 'true'); console.log('BRIX Announcement: Permanently hidden by user'); } } function incrementViewCount() { const currentViews = parseInt(localStorage.getItem(keys.views), 10) || 0; const newViewCount = currentViews + 1; localStorage.setItem(keys.views, newViewCount); localStorage.setItem(keys.lastShown, new Date().toISOString()); return newViewCount; } // --- CREAR DEBUGGING TOOLS ANTES DE CUALQUIER RETURN --- window.AnnouncementDebug = { reset: function() { try { localStorage.removeItem(keys.views); localStorage.removeItem(keys.hidden); localStorage.removeItem(keys.lastShown); console.log(`✅ BRIX Announcement (version: ${version}) has been reset.`); window.location.reload(); } catch (error) { console.error('Error resetting announcement:', error); } }, status: function() { const status = { version: version, isPermanentlyHidden: localStorage.getItem(keys.hidden) === 'true', currentViews: parseInt(localStorage.getItem(keys.views), 10) || 0, maxViews: maxViews, lastShown: localStorage.getItem(keys.lastShown) || 'Never', isCurrentlyVisible: component.style.display !== 'none', elementFound: !!component, closeButtonFound: !!closeButton, dontShowButtonFound: !!dontShowButton }; console.table(status); return status; }, show: function() { // Primero quitar el estado de oculto permanente si existe localStorage.removeItem(keys.hidden); showComponent(); console.log('✅ BRIX Announcement: Manually shown'); }, hide: function(permanent = false) { hideComponent(permanent); console.log(`✅ BRIX Announcement: Manually hidden${permanent ? ' (permanent)' : ''}`); }, setViews: function(count) { if (typeof count !== 'number' || count < 0) { console.error('Please provide a valid number >= 0'); return; } localStorage.setItem(keys.views, count.toString()); console.log(`✅ View count set to: ${count}`); window.location.reload(); }, simulate: function(views) { console.log(`🎭 Simulating ${views} views...`); this.setViews(views); }, forceShow: function() { // Forzar mostrar removiendo todas las restricciones localStorage.removeItem(keys.hidden); localStorage.removeItem(keys.views); console.log('🔧 Forcing announcement to show on next reload...'); window.location.reload(); } }; // --- Main Logic --- try { const isPermanentlyHidden = localStorage.getItem(keys.hidden) === 'true'; if (isPermanentlyHidden) { console.log('BRIX Announcement: Hidden permanently by user preference'); console.log('💡 Use AnnouncementDebug.reset() or AnnouncementDebug.forceShow() to show again'); return; // AnnouncementDebug ya está creado arriba } const currentViews = parseInt(localStorage.getItem(keys.views), 10) || 0; if (currentViews < maxViews) { showComponent(); const newViewCount = incrementViewCount(); console.log(`BRIX Announcement: Shown (${newViewCount}/${maxViews} views)`); // Auto-hide after max views reached if (newViewCount >= maxViews) { console.log('BRIX Announcement: Max views reached, will auto-hide on next visit'); } } else { console.log(`BRIX Announcement: Max views (${maxViews}) reached, staying hidden`); } } catch (error) { console.error('BRIX Announcement: localStorage error, showing announcement as fallback', error); showComponent(); } // --- Event Listeners --- if (closeButton) { closeButton.addEventListener('click', (e) => { e.preventDefault(); hideComponent(false); console.log('BRIX Announcement: Closed temporarily by user'); }); // Add keyboard support closeButton.addEventListener('keydown', (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); hideComponent(false); } }); } else { console.warn('BRIX Announcement: No close button found with [brix-announcement="close"]'); } if (dontShowButton) { dontShowButton.addEventListener('click', (e) => { e.preventDefault(); hideComponent(true); }); // Add keyboard support dontShowButton.addEventListener('keydown', (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); hideComponent(true); } }); } else { console.warn('BRIX Announcement: No "don\'t show again" button found with [brix-announcement="dont-show-again"]'); } // Show helpful info in console console.log('🎉 BRIX Auto-Hide Announcement Bar loaded successfully!'); console.log('💡 Use AnnouncementDebug.status() to see current state'); console.log('🔄 Use AnnouncementDebug.reset() to reset as new visitor'); });