diff --git a/assets/ts_src/event_listeners.ts b/assets/ts_src/event_listeners.ts index ad50f4db..2ce13bbd 100644 --- a/assets/ts_src/event_listeners.ts +++ b/assets/ts_src/event_listeners.ts @@ -264,6 +264,46 @@ $(document).on("ajaxUI:start", function registerJumpToTop() { }).tooltip(); }); +/** + * This listener keeps track of which tab is currently selected (using hash and localstorage) and will try to open + * that tab on reload. That means that if the user changes something, he does not have to switch back to the tab + * where he was before submit. + */ +$(document).on("ajaxUI:reload ajaxUI:start", function () { + //Determine which tab should be shown (use hash if specified, otherwise use localstorage) + var $activeTab = null; + if (location.hash) { + $activeTab = $('a[href=\'' + location.hash + '\']'); + } else if(localStorage.getItem('activeTab')) { + $activeTab = $('a[href="' + localStorage.getItem('activeTab') + '"]'); + } + + if($activeTab) { + //Findout if the tab has any parent tab we have to show before + var parents = $($activeTab).parents('.tab-pane'); + parents.each(function(n) { + $('a[href="#' + $(this).attr('id') + '"]').tab('show'); + }); + //Finally show the active tab itself + $activeTab.tab('show'); + } + + $('body').on('click', 'a[data-toggle=\'tab\']', function (e) { + e.preventDefault() + var tab_name = this.getAttribute('href') + if (history.pushState) { + history.pushState(null, null, tab_name) + } + else { + location.hash = tab_name + } + localStorage.setItem('activeTab', tab_name) + + $(this).tab('show'); + return false; + }); +}); + //Need for proper body padding, with every navbar height $(window).resize(function () {