From 8bb43c14db20f1aff9ce207a5bb1ae7888487ee0 Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Tue, 17 Mar 2026 23:34:59 -0400 Subject: [PATCH] Guard lt.* calls when base.js unavailable to prevent crash Wraps all lt.keys.initDefaults() calls in `if (window.lt)` guards across 6 view files. Adds `if (!window.lt) return` bail-out in keyboard-shortcuts.js and `if (window.lt)` guard in settings.js DOMContentLoaded handler. This prevents TypeError crashes when /web_template/base.js returns 404, which was causing the admin menu click delegation to never register. Co-Authored-By: Claude Sonnet 4.6 --- assets/js/keyboard-shortcuts.js | 2 ++ assets/js/settings.js | 4 +++- views/DashboardView.php | 2 +- views/TicketView.php | 2 +- views/admin/CustomFieldsView.php | 2 +- views/admin/RecurringTicketsView.php | 2 +- views/admin/TemplatesView.php | 2 +- views/admin/WorkflowDesignerView.php | 2 +- 8 files changed, 11 insertions(+), 7 deletions(-) diff --git a/assets/js/keyboard-shortcuts.js b/assets/js/keyboard-shortcuts.js index 9c1ccc9..9e1e037 100644 --- a/assets/js/keyboard-shortcuts.js +++ b/assets/js/keyboard-shortcuts.js @@ -78,6 +78,8 @@ function showKeyboardHelp() { } document.addEventListener('DOMContentLoaded', function() { + if (!window.lt) return; + // Ctrl+E: Toggle edit mode (ticket pages) lt.keys.on('ctrl+e', function() { const editButton = document.getElementById('editButton'); diff --git a/assets/js/settings.js b/assets/js/settings.js index 7038a9f..58aeec2 100644 --- a/assets/js/settings.js +++ b/assets/js/settings.js @@ -131,4 +131,6 @@ document.addEventListener('keydown', (e) => { }); // Initialize on page load -document.addEventListener('DOMContentLoaded', loadUserPreferences); +document.addEventListener('DOMContentLoaded', function() { + if (window.lt) loadUserPreferences(); +}); diff --git a/views/DashboardView.php b/views/DashboardView.php index 9a28962..645a7b5 100644 --- a/views/DashboardView.php +++ b/views/DashboardView.php @@ -854,7 +854,7 @@ $nonce = SecurityHeadersMiddleware::getNonce(); - + \ No newline at end of file diff --git a/views/admin/CustomFieldsView.php b/views/admin/CustomFieldsView.php index 2286305..2c15266 100644 --- a/views/admin/CustomFieldsView.php +++ b/views/admin/CustomFieldsView.php @@ -204,7 +204,7 @@ $nonce = SecurityHeadersMiddleware::getNonce(); saveField(e); }); - lt.keys.initDefaults(); + if (window.lt) lt.keys.initDefaults(); function toggleOptionsField() { const type = document.getElementById('field_type').value; diff --git a/views/admin/RecurringTicketsView.php b/views/admin/RecurringTicketsView.php index 406f4ae..525d50e 100644 --- a/views/admin/RecurringTicketsView.php +++ b/views/admin/RecurringTicketsView.php @@ -241,7 +241,7 @@ $nonce = SecurityHeadersMiddleware::getNonce(); saveRecurring(e); }); - lt.keys.initDefaults(); + if (window.lt) lt.keys.initDefaults(); function updateScheduleOptions() { const type = document.getElementById('schedule_type').value; diff --git a/views/admin/TemplatesView.php b/views/admin/TemplatesView.php index 165fc32..0e14aa4 100644 --- a/views/admin/TemplatesView.php +++ b/views/admin/TemplatesView.php @@ -202,7 +202,7 @@ $nonce = SecurityHeadersMiddleware::getNonce(); saveTemplate(e); }); - lt.keys.initDefaults(); + if (window.lt) lt.keys.initDefaults(); function saveTemplate(e) { e.preventDefault(); diff --git a/views/admin/WorkflowDesignerView.php b/views/admin/WorkflowDesignerView.php index e2720e9..a45a78b 100644 --- a/views/admin/WorkflowDesignerView.php +++ b/views/admin/WorkflowDesignerView.php @@ -219,7 +219,7 @@ $nonce = SecurityHeadersMiddleware::getNonce(); saveTransition(e); }); - lt.keys.initDefaults(); + if (window.lt) lt.keys.initDefaults(); function saveTransition(e) { e.preventDefault();