From ab0c3cd2c777c2d24cb36ea14736722857e75a1b Mon Sep 17 00:00:00 2001 From: Pedro de Carvalho Date: Wed, 24 Sep 2025 01:24:08 +0800 Subject: [PATCH 1/7] Rework remember tabs --- assets/Feature/RememberTabs/rememberTabs.js | 38 ++++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/assets/Feature/RememberTabs/rememberTabs.js b/assets/Feature/RememberTabs/rememberTabs.js index 2339e7b..c7d32db 100644 --- a/assets/Feature/RememberTabs/rememberTabs.js +++ b/assets/Feature/RememberTabs/rememberTabs.js @@ -18,7 +18,7 @@ saltusRememberTabs.init = function () { saltusRememberTabs.hitTab = function (index) { setTimeout(function () { let tab = document.querySelectorAll('.csf-nav-metabox ul li a'); - if (tab) { + if (tab && tab[index]) { tab[index].click(); } }, 1000); @@ -26,30 +26,34 @@ saltusRememberTabs.hitTab = function (index) { /** * Creates the logic to check if we need to open a tab - * @returns + * @returns */ saltusRememberTabs.rememberTabInit = function () { // check if URL contains tab parameter - let referer = document.querySelector('#referredby'); - let refererUrl = new URL(window.location.origin + referer.value); + const referer = document.querySelector('#referredby'); - if (typeof refererUrl.origin === 'undefined') { - return; - } - if (refererUrl.searchParams.get('tab')) { - saltusRememberTabs.hitTab(refererUrl.searchParams.get('tab')); - } else { - let currentUrl = new URL(window.location.href); - if (currentUrl.searchParams.get('tab')) { - saltusRememberTabs.hitTab(currentUrl.searchParams.get('tab')); + let tabIndex = null; + if ( referer && referer.value ) { + try { + let refererUrl = new URL(window.location.origin + referer.value); + tabIndex = refererUrl.searchParams.get('tab'); + } catch (e) { + // Invalid referer, ignore } } + + let currentUrl = new URL(window.location.href); + if ( ! tabIndex ) { + tabIndex = currentUrl.searchParams.get('tab'); + } + if ( tabIndex ) { + saltusRememberTabs.hitTab( parseInt(tabIndex, 10 ) ); + } + // currently considers all tabs on page let tabs = document.querySelectorAll('.csf-nav-metabox ul li'); - let currentURL = window.location.href; - let url = new URL(currentURL); - let search_params = url.searchParams; + let search_params = currentUrl.searchParams; tabs.forEach(function (tab, index) { tab.addEventListener('click', function () { @@ -58,7 +62,7 @@ saltusRememberTabs.rememberTabInit = function () { const nextState = { additionalInformation: 'Updated the URL with JS' }; - window.history.replaceState(nextState, nextTitle, url.toString()); + window.history.replaceState(nextState, nextTitle, currentUrl.toString()); }); }); } From 2512eecef8597bc0900c8d98e970aff2eeaaba5c Mon Sep 17 00:00:00 2001 From: Pedro de Carvalho Date: Wed, 24 Sep 2025 01:24:20 +0800 Subject: [PATCH 2/7] remove filter on admin_url --- .../RememberTabs/SaltusRememberTabs.php | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/src/Features/RememberTabs/SaltusRememberTabs.php b/src/Features/RememberTabs/SaltusRememberTabs.php index b1a4e11..eaa1cb1 100644 --- a/src/Features/RememberTabs/SaltusRememberTabs.php +++ b/src/Features/RememberTabs/SaltusRememberTabs.php @@ -33,7 +33,6 @@ public function __construct( string $name, array $project ) { */ public function process() { add_action( 'admin_enqueue_scripts', [ $this, 'load_script_css' ] ); - add_filter( 'admin_url', [ $this, 'check_remember_tab_url' ], 10, 1 ); } /** * Check if the script and CSS should be loaded @@ -71,26 +70,4 @@ public function load_script_css() { true ); } - - /** - * Adds check to see if extra parameter is set on admin url on save cpt - * Used to remember tab - * - * @param string $link Admin url - * @return string The url - */ - public function check_remember_tab_url( $link ) { - - global $current_screen; - if ( ! is_admin() || ! isset( $current_screen ) || $this->name !== $current_screen->post_type || wp_doing_ajax() ) { - return $link; - } - - if ( isset( $_REQUEST['tab'] ) ) { - $params['tab'] = absint( $_REQUEST['tab'] ); - $link = add_query_arg( $params, $link ); - } - - return $link; - } } From f4b4b72a7d7baace97a10136c5d290dfe70e215e Mon Sep 17 00:00:00 2001 From: Pedro de Carvalho Date: Wed, 24 Sep 2025 01:31:29 +0800 Subject: [PATCH 3/7] Improve check on tabindex --- assets/Feature/RememberTabs/rememberTabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Feature/RememberTabs/rememberTabs.js b/assets/Feature/RememberTabs/rememberTabs.js index c7d32db..c79bbbe 100644 --- a/assets/Feature/RememberTabs/rememberTabs.js +++ b/assets/Feature/RememberTabs/rememberTabs.js @@ -44,7 +44,7 @@ saltusRememberTabs.rememberTabInit = function () { } let currentUrl = new URL(window.location.href); - if ( ! tabIndex ) { + if ( tabIndex === null ) { tabIndex = currentUrl.searchParams.get('tab'); } if ( tabIndex ) { From e04f47e58c32801f8abb0d2b9f1a44b87ed4bb95 Mon Sep 17 00:00:00 2001 From: Pedro de Carvalho Date: Wed, 24 Sep 2025 01:45:55 +0800 Subject: [PATCH 4/7] construct url using native functions Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- assets/Feature/RememberTabs/rememberTabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Feature/RememberTabs/rememberTabs.js b/assets/Feature/RememberTabs/rememberTabs.js index c79bbbe..6833854 100644 --- a/assets/Feature/RememberTabs/rememberTabs.js +++ b/assets/Feature/RememberTabs/rememberTabs.js @@ -36,7 +36,7 @@ saltusRememberTabs.rememberTabInit = function () { let tabIndex = null; if ( referer && referer.value ) { try { - let refererUrl = new URL(window.location.origin + referer.value); + let refererUrl = new URL(referer.value, window.location.href); tabIndex = refererUrl.searchParams.get('tab'); } catch (e) { // Invalid referer, ignore From 27e23229d55a4527a3d096c771a9c2f091ce5e89 Mon Sep 17 00:00:00 2001 From: Pedro de Carvalho Date: Wed, 24 Sep 2025 01:54:52 +0800 Subject: [PATCH 5/7] Move click event to own function --- assets/Feature/RememberTabs/rememberTabs.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/assets/Feature/RememberTabs/rememberTabs.js b/assets/Feature/RememberTabs/rememberTabs.js index 6833854..618f152 100644 --- a/assets/Feature/RememberTabs/rememberTabs.js +++ b/assets/Feature/RememberTabs/rememberTabs.js @@ -50,14 +50,19 @@ saltusRememberTabs.rememberTabInit = function () { if ( tabIndex ) { saltusRememberTabs.hitTab( parseInt(tabIndex, 10 ) ); } +} + - // currently considers all tabs on page +saltusRememberTabs.attachTabListeners = function () { let tabs = document.querySelectorAll('.csf-nav-metabox ul li'); - let search_params = currentUrl.searchParams; tabs.forEach(function (tab, index) { tab.addEventListener('click', function () { + + const currentUrl = new URL(window.location.href); + const search_params = currentUrl.searchParams; search_params.set('tab', index); + const nextTitle = document.title; const nextState = { additionalInformation: 'Updated the URL with JS' @@ -65,6 +70,12 @@ saltusRememberTabs.rememberTabInit = function () { window.history.replaceState(nextState, nextTitle, currentUrl.toString()); }); }); -} +}; + +// Initialize the feature +saltusRememberTabs.init(); -saltusRememberTabs.init(); \ No newline at end of file +// Run on DOM ready +document.addEventListener('DOMContentLoaded', function () { + saltusRememberTabs.attachTabListeners(); +}) \ No newline at end of file From 36beb38d0a1058db0d28b612f797b41706c252c0 Mon Sep 17 00:00:00 2001 From: Pedro de Carvalho Date: Wed, 24 Sep 2025 02:01:52 +0800 Subject: [PATCH 6/7] Move init to dom content loaded --- assets/Feature/RememberTabs/rememberTabs.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/assets/Feature/RememberTabs/rememberTabs.js b/assets/Feature/RememberTabs/rememberTabs.js index 618f152..b43b882 100644 --- a/assets/Feature/RememberTabs/rememberTabs.js +++ b/assets/Feature/RememberTabs/rememberTabs.js @@ -72,10 +72,13 @@ saltusRememberTabs.attachTabListeners = function () { }); }; -// Initialize the feature -saltusRememberTabs.init(); // Run on DOM ready document.addEventListener('DOMContentLoaded', function () { + + // Initialize the feature + saltusRememberTabs.init(); + + // Attach listeners to tabs saltusRememberTabs.attachTabListeners(); }) \ No newline at end of file From 1a50369e23793731f6a1b8e056529f9f346bdc40 Mon Sep 17 00:00:00 2001 From: Pedro de Carvalho Date: Wed, 24 Sep 2025 02:17:12 +0800 Subject: [PATCH 7/7] Add check for index being a proper number --- assets/Feature/RememberTabs/rememberTabs.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/assets/Feature/RememberTabs/rememberTabs.js b/assets/Feature/RememberTabs/rememberTabs.js index b43b882..5f68b7c 100644 --- a/assets/Feature/RememberTabs/rememberTabs.js +++ b/assets/Feature/RememberTabs/rememberTabs.js @@ -47,8 +47,12 @@ saltusRememberTabs.rememberTabInit = function () { if ( tabIndex === null ) { tabIndex = currentUrl.searchParams.get('tab'); } + if ( tabIndex ) { - saltusRememberTabs.hitTab( parseInt(tabIndex, 10 ) ); + tabIndex = Number( tabIndex ); + if ( ! isNaN( tabIndex ) ) { + saltusRememberTabs.hitTab( tabIndex ); + } } }