From 7b26d1c67624c4acf5217630f8b97399f968fb29 Mon Sep 17 00:00:00 2001 From: mokaddem Date: Fri, 30 Jul 2021 11:44:53 +0200 Subject: [PATCH] chg: [setting] Slight refactoring of search function --- templates/Instance/settings.php | 6 ++-- templates/element/Settings/search.php | 49 ++++++++++++++++----------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/templates/Instance/settings.php b/templates/Instance/settings.php index 6e7cb77..1df0f1e 100644 --- a/templates/Instance/settings.php +++ b/templates/Instance/settings.php @@ -174,7 +174,8 @@ function getResolvableID($sectionName, $panelName=false) handleSettingValueChange($input) }) - redirectToSettingFromURL() + const referencedID = window.location.hash + redirectToSetting(referencedID) }) function saveSetting(statusNode, $input, settingName, settingValue) { @@ -262,8 +263,7 @@ function getResolvableID($sectionName, $panelName=false) } } - function redirectToSettingFromURL() { - const referencedID = window.location.hash + function redirectToSetting(referencedID) { const $settingToFocus = $(referencedID) const pageNavID = $(referencedID).closest('.tab-pane').attr('aria-labelledby') const $navController = $(`#${pageNavID}`) diff --git a/templates/element/Settings/search.php b/templates/element/Settings/search.php index 25ef12d..4a3acd1 100644 --- a/templates/element/Settings/search.php +++ b/templates/element/Settings/search.php @@ -26,30 +26,39 @@ .on('select2:select', function (e) { const selected = e.params.data const settingPath = selected.setting['setting-path'] - let settingPathTokenized = settingPath.split('.') - settingPathTokenized = settingPathTokenized.map((elem) => elem.replaceAll(/(\.|\W)/g, '_')) - const tabName = settingPathTokenized[0] - const IDtoFocus = 'sp-' + settingPathTokenized.slice(1).join('-') - const $navController = $('.settings-tabs').find('a.nav-link').filter(function() { - return $(this).text() == tabName - }) - if ($navController.length == 1) { - $toFocus = $(`#${IDtoFocus}`).parent() - if ($navController.hasClass('active')) { - $toFocus[0].scrollIntoView() - $toFocus.find(`input#${selected.id}, textarea#${selected.id}`).focus() - } else { - $navController.on('shown.bs.tab.after-selection', () => { - $toFocus[0].scrollIntoView() - $toFocus.find(`input#${selected.id}, textarea#${selected.id}`).focus() - $navController.off('shown.bs.tab.after-selection') - }).tab('show') - } - } + const {tabName, IDtoFocus} = getTabAndSettingIDFromPath(settingPath) + showSetting(selected, tabName, IDtoFocus) $("#search-settings").val(null).trigger('change.select2'); }) }) + function getTabAndSettingIDFromPath(settingPath) { + let settingPathTokenized = settingPath.split('.') + settingPathTokenized = settingPathTokenized.map((elem) => elem.replaceAll(/(\.|\W)/g, '_')) + const tabName = settingPathTokenized[0] + const IDtoFocus = 'sp-' + settingPathTokenized.slice(1).join('-') + return {tabName: tabName, IDtoFocus: IDtoFocus} + } + + function showSetting(selected, tabName, IDtoFocus) { + const $navController = $('.settings-tabs').find('a.nav-link').filter(function() { + return $(this).text() == tabName + }) + if ($navController.length == 1) { + $toFocus = $(`#${IDtoFocus}`).parent() + if ($navController.hasClass('active')) { + $toFocus[0].scrollIntoView() + $toFocus.find(`input#${selected.id}, textarea#${selected.id}`).focus() + } else { + $navController.on('shown.bs.tab.after-selection', () => { + $toFocus[0].scrollIntoView() + $toFocus.find(`input#${selected.id}, textarea#${selected.id}`).focus() + $navController.off('shown.bs.tab.after-selection') + }).tab('show') + } + } + } + function settingMatcher(params, data) { if (params.term == null || params.term.trim() === '') { return data;