From 9af97a039509107c0affa83dbd2631a9ef709d8d Mon Sep 17 00:00:00 2001 From: Etienne Wan Date: Mon, 15 May 2023 03:34:37 +0200 Subject: [PATCH] Add a global setting for Ctrl-F focus (improve #14947) (#15023) * Add a global setting for Ctrl-F focus (improve #14947) * Move this new global setting to user setting (improve #14947) * Update preferences.blade.php Cleaner wording, and Copy & Paste bled through. * Fix indents and @endif position in menu.blade.php --------- Co-authored-by: Justin Lentz --- .../Controllers/UserPreferencesController.php | 2 ++ app/Http/ViewComposers/MenuComposer.php | 1 + resources/views/layouts/menu.blade.php | 33 +++++++++--------- resources/views/user/preferences.blade.php | 34 +++++++++++++++++++ 4 files changed, 54 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/UserPreferencesController.php b/app/Http/Controllers/UserPreferencesController.php index e77eaf0b9e..d9e1d9ce0b 100644 --- a/app/Http/Controllers/UserPreferencesController.php +++ b/app/Http/Controllers/UserPreferencesController.php @@ -75,6 +75,7 @@ class UserPreferencesController extends Controller 'site_styles' => $styles, 'timezone' => UserPref::getPref($user, 'timezone'), 'hide_dashboard_editor' => UserPref::getPref($user, 'hide_dashboard_editor') ?? 0, + 'global_search_ctrlf_focus' => UserPref::getPref($user, 'global_search_ctrlf_focus'), ]; if (Config::get('twofactor')) { @@ -116,6 +117,7 @@ class UserPreferencesController extends Controller Rule::in(array_merge(['default'], timezone_identifiers_list())), ], 'hide_dashboard_editor' => 'required|integer', + 'global_search_ctrlf_focus' => 'required|integer', ]; $this->validate($request, [ diff --git a/app/Http/ViewComposers/MenuComposer.php b/app/Http/ViewComposers/MenuComposer.php index 9ef73d8a61..2f736fbb82 100644 --- a/app/Http/ViewComposers/MenuComposer.php +++ b/app/Http/ViewComposers/MenuComposer.php @@ -256,6 +256,7 @@ class MenuComposer // Search bar $vars['typeahead_limit'] = Config::get('webui.global_search_result_limit'); + $vars['global_search_ctrlf_focus'] = UserPref::getPref(Auth::user(), 'global_search_ctrlf_focus'); // Plugins $vars['has_v1_plugins'] = Plugins::count() != 0; diff --git a/resources/views/layouts/menu.blade.php b/resources/views/layouts/menu.blade.php index 4516d24ccb..6f02f99829 100644 --- a/resources/views/layouts/menu.blade.php +++ b/resources/views/layouts/menu.blade.php @@ -761,21 +761,22 @@ } @endif - $(document).ready(function(){ - // Function to focus Global Search on Ctrl-F - window.addEventListener("keydown",function (e) { - if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)){ - if($('#gsearch').is(":focus")) { - //allow normal Ctrl-F on a 2nd Hit - return true; - } else { - //set Focus on Global Search and ignore Browsers defaults - e.preventDefault(); - $('#gsearch').focus(); - } - } + @if($global_search_ctrlf_focus) + $(document).ready(function(){ + // Function to focus Global Search on Ctrl-F + window.addEventListener("keydown",function (e) { + if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)){ + if($('#gsearch').is(":focus")) { + //allow normal Ctrl-F on a 2nd Hit + return true; + } else { + //set Focus on Global Search and ignore Browsers defaults + e.preventDefault(); + $('#gsearch').focus(); + } + } + }) }) - - - }) + @endif + diff --git a/resources/views/user/preferences.blade.php b/resources/views/user/preferences.blade.php index 9b6cf08921..76b059d91c 100644 --- a/resources/views/user/preferences.blade.php +++ b/resources/views/user/preferences.blade.php @@ -109,6 +109,12 @@ +
+ +
+ +
+
@@ -230,6 +236,34 @@ }); }); + $("[name='global_search_ctrlf_focus']") + .bootstrapSwitch('offColor', 'danger') + .on('switchChange.bootstrapSwitch', function (e, state) { + var $this = $(this); + $.ajax({ + url: '{{ route('preferences.store') }}', + dataType: 'json', + type: 'POST', + data: { + pref: 'global_search_ctrlf_focus', + value: state ? 1 : 0 + }, + success: function () { + $this.closest('.form-group').addClass('has-success'); + setTimeout(function () { + $this.closest('.form-group').removeClass('has-success'); + }, 2000); + }, + error: function () { + $this.bootstrapSwitch('toggleState', true); + $this.closest('.form-group').addClass('has-error'); + setTimeout(function(){ + $this.closest('.form-group').removeClass('has-error'); + }, 2000); + } + }); + }); + $('.ajax-select').on("change", function () { var $this = $(this); var value = $this.val();