upskill-event-manager/assets/js/hvac-safari-debug.js
Ben Reed cdc5ea85f4 feat: Add comprehensive CSS, JavaScript and theme asset infrastructure
Add massive collection of CSS, JavaScript and theme assets that were previously excluded:

**CSS Files (681 total):**
- HVAC plugin-specific styles (hvac-*.css): 34 files including dashboard, certificates, registration, mobile nav, accessibility fixes, animations, and welcome popup
- Theme framework files (Astra, builder systems, layouts): 200+ files
- Plugin compatibility styles (WooCommerce, WPForms, Elementor, Contact Form 7): 150+ files
- WordPress core and editor styles: 50+ files
- Responsive and RTL language support: 200+ files

**JavaScript Files (400+ total):**
- HVAC plugin functionality (hvac-*.js): 27 files including menu systems, dashboard enhancements, profile sharing, mobile responsive features, accessibility, and animations
- Framework and library files: jQuery plugins, GSAP, AOS, Swiper, Chart.js, Lottie, Isotope
- Plugin compatibility scripts: WPForms, WooCommerce, Elementor, Contact Form 7, LifterLMS
- WordPress core functionality: customizer, admin, block editor compatibility
- Third-party integrations: Stripe, SMTP, analytics, search functionality

**Assets:**
- Certificate background images and logos
- Comprehensive theme styling infrastructure
- Mobile-responsive design systems
- Cross-browser compatibility assets
- Performance-optimized minified versions

**Updated .gitignore:**
- Fixed asset directory whitelisting patterns to properly include CSS/JS/images
- Added proper directory structure recognition (!/assets/css/, !/assets/js/, etc.)
- Maintains security by excluding sensitive files while including essential assets

This commit provides the complete frontend infrastructure needed for:
- Full theme functionality and styling
- Plugin feature implementations
- Mobile responsiveness and accessibility
- Cross-browser compatibility
- Performance optimization
- Developer workflow support
2025-08-11 16:20:31 -03:00

270 lines
No EOL
9.2 KiB
JavaScript

/**
* HVAC Safari Debug System
* Comprehensive debugging for Safari compatibility issues
*/
(function() {
'use strict';
// Debug logger that works in all browsers
var SafariDebug = {
logs: [],
log: function(message, data) {
var timestamp = new Date().toISOString();
var logEntry = {
time: timestamp,
message: message,
data: data || null,
userAgent: navigator.userAgent
};
this.logs.push(logEntry);
// Also log to console
if (console && console.log) {
console.log('[SAFARI-DEBUG]', timestamp, message, data);
}
// Send to server for logging (ES5 compatible) - only if actually Safari
if (this.isActualSafari()) {
this.sendToServer(logEntry);
}
},
error: function(message, error) {
var timestamp = new Date().toISOString();
var errorEntry = {
time: timestamp,
message: 'ERROR: ' + message,
error: error ? error.toString() : null,
stack: error && error.stack ? error.stack : null,
userAgent: navigator.userAgent
};
this.logs.push(errorEntry);
if (console && console.error) {
console.error('[SAFARI-DEBUG]', timestamp, message, error);
}
if (this.isActualSafari()) {
this.sendToServer(errorEntry);
}
},
isActualSafari: function() {
var userAgent = navigator.userAgent;
// Check for Safari but not Chrome/Chromium (more precise detection)
return (userAgent.indexOf('Safari') !== -1 &&
userAgent.indexOf('Chrome') === -1 &&
userAgent.indexOf('Chromium') === -1 &&
userAgent.indexOf('Version/') !== -1); // Safari always has Version/
},
sendToServer: function(logEntry) {
// Only send if we have AJAX capability
if (typeof XMLHttpRequest !== 'undefined') {
try {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/wp-admin/admin-ajax.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('action=hvac_safari_debug&log=' + encodeURIComponent(JSON.stringify(logEntry)));
} catch(e) {
// Silent fail - don't break the page
}
}
},
getSummary: function() {
return {
totalLogs: this.logs.length,
errors: this.logs.filter(function(log) { return log.message.indexOf('ERROR:') === 0; }),
userAgent: navigator.userAgent,
logs: this.logs
};
}
};
// Make SafariDebug globally available
window.SafariDebug = SafariDebug;
// Log initial load
SafariDebug.log('Safari Debug System Initialized', {
url: window.location.href,
userAgent: navigator.userAgent,
documentReadyState: document.readyState
});
// Test basic JavaScript features
SafariDebug.log('Testing JavaScript Features');
try {
// Test variable declarations
var testVar = 'test';
SafariDebug.log('✓ var declaration works');
// Test function declarations
function testFunction() {
return 'function test';
}
SafariDebug.log('✓ function declaration works', testFunction());
// Test object creation
var testObj = {
prop: 'value',
method: function() {
return 'method test';
}
};
SafariDebug.log('✓ object creation works', testObj.method());
// Test array operations
var testArray = [1, 2, 3];
SafariDebug.log('✓ array creation works', testArray.length);
// Test DOM access
if (document) {
SafariDebug.log('✓ document object available');
if (document.getElementById) {
SafariDebug.log('✓ getElementById available');
}
}
// Test jQuery detection
if (typeof jQuery !== 'undefined') {
SafariDebug.log('✓ jQuery available', jQuery.fn.jquery);
} else if (typeof $ !== 'undefined') {
SafariDebug.log('✓ $ available but not jQuery');
} else {
SafariDebug.log('⚠ jQuery/$ not detected');
}
// Test HVAC plugin detection
if (typeof hvac_ajax !== 'undefined') {
SafariDebug.log('✓ HVAC AJAX object available', hvac_ajax);
} else {
SafariDebug.log('⚠ HVAC AJAX object not available');
}
} catch (error) {
SafariDebug.error('JavaScript feature test failed', error);
}
// Monitor for errors
if (window.addEventListener) {
window.addEventListener('error', function(event) {
SafariDebug.error('Global JavaScript Error', {
message: event.message,
filename: event.filename,
lineno: event.lineno,
colno: event.colno,
error: event.error
});
});
SafariDebug.log('✓ Error monitoring enabled');
}
// Monitor unhandled promise rejections (if supported)
if (window.addEventListener && typeof Promise !== 'undefined') {
window.addEventListener('unhandledrejection', function(event) {
SafariDebug.error('Unhandled Promise Rejection', {
reason: event.reason,
promise: event.promise
});
});
SafariDebug.log('✓ Promise rejection monitoring enabled');
}
// DOM Ready monitoring
var domReadyChecks = 0;
var maxDomChecks = 50; // 5 seconds max
function checkDOMReady() {
domReadyChecks++;
SafariDebug.log('DOM Ready Check #' + domReadyChecks, {
readyState: document.readyState,
body: document.body ? 'present' : 'missing'
});
if (document.readyState === 'complete' || document.readyState === 'interactive') {
SafariDebug.log('✓ DOM Ready State Achieved', document.readyState);
initializePageDebug();
} else if (domReadyChecks < maxDomChecks) {
setTimeout(checkDOMReady, 100);
} else {
SafariDebug.error('DOM Ready State Never Achieved', {
finalState: document.readyState,
checksPerformed: domReadyChecks
});
}
}
function initializePageDebug() {
SafariDebug.log('Initializing Page-Specific Debug');
try {
// Check for critical page elements
var criticalElements = [
'body',
'.hvac-trainer-grid',
'.hvac-map-container',
'#hvac-trainer-modal',
'.hvac-filter-controls'
];
for (var i = 0; i < criticalElements.length; i++) {
var selector = criticalElements[i];
var element = document.querySelector ? document.querySelector(selector) : null;
if (element) {
SafariDebug.log('✓ Found critical element: ' + selector);
} else {
SafariDebug.log('⚠ Missing critical element: ' + selector);
}
}
// Check for script loading
var scripts = document.getElementsByTagName('script');
var hvacScripts = [];
for (var j = 0; j < scripts.length; j++) {
if (scripts[j].src && scripts[j].src.indexOf('hvac') !== -1) {
hvacScripts.push({
src: scripts[j].src,
loaded: scripts[j].readyState || 'unknown'
});
}
}
SafariDebug.log('HVAC Scripts Found', hvacScripts);
// Test MapGeo integration
if (typeof window.hvacShowTrainerModal === 'function') {
SafariDebug.log('✓ MapGeo integration function available');
} else {
SafariDebug.log('⚠ MapGeo integration function missing');
}
} catch (error) {
SafariDebug.error('Page debug initialization failed', error);
}
}
// Start DOM monitoring
if (document.readyState === 'complete' || document.readyState === 'interactive') {
initializePageDebug();
} else {
checkDOMReady();
}
// Create global debug function for manual testing
window.getSafariDebugReport = function() {
return SafariDebug.getSummary();
};
// Log completion
SafariDebug.log('Safari Debug System Setup Complete');
})();