diff --git a/assets/Feature/RememberTabs/rememberTabs.js b/assets/Feature/RememberTabs/rememberTabs.js index 2339e7b..5f68b7c 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,41 +26,63 @@ 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; + let tabIndex = null; + if ( referer && referer.value ) { + try { + let refererUrl = new URL(referer.value, window.location.href); + tabIndex = refererUrl.searchParams.get('tab'); + } catch (e) { + // Invalid referer, ignore + } + } + + let currentUrl = new URL(window.location.href); + if ( tabIndex === null ) { + tabIndex = currentUrl.searchParams.get('tab'); } - 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')); + + if ( tabIndex ) { + tabIndex = Number( tabIndex ); + if ( ! isNaN( tabIndex ) ) { + saltusRememberTabs.hitTab( tabIndex ); } } - // currently considers all tabs on page +} + + +saltusRememberTabs.attachTabListeners = function () { let tabs = document.querySelectorAll('.csf-nav-metabox ul li'); - let currentURL = window.location.href; - let url = new URL(currentURL); - let search_params = url.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' }; - window.history.replaceState(nextState, nextTitle, url.toString()); + window.history.replaceState(nextState, nextTitle, currentUrl.toString()); }); }); -} +}; + + +// Run on DOM ready +document.addEventListener('DOMContentLoaded', function () { + + // Initialize the feature + saltusRememberTabs.init(); -saltusRememberTabs.init(); \ No newline at end of file + // Attach listeners to tabs + saltusRememberTabs.attachTabListeners(); +}) \ No newline at end of file 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; - } }