Readd tab remember function to improve UX.

This commit is contained in:
Jan Böhmer 2022-07-29 22:52:58 +02:00
parent 9cc5208223
commit 47130846a2
7 changed files with 40 additions and 36 deletions

View file

@ -43,7 +43,7 @@ require('bootstrap');
import "./sidebar" import "./sidebar"
import "./datatables"; import "./datatables";
import "./error_handler"; import "./error_handler";
//import "./tab_remember"; import "./tab_remember";
import "./register_events"; import "./register_events";
import "./tristate_checkboxes"; import "./tristate_checkboxes";

View file

@ -17,7 +17,7 @@ import 'datatables.net-responsive-bs5';
import './lib/datatables'; import './lib/datatables';
const DatatablesHelper = class { class DatatablesHelper {
constructor() { constructor() {
this.registerLoadHandler(() => this.initDataTables()); this.registerLoadHandler(() => this.initDataTables());
} }

View file

@ -4,7 +4,7 @@ import * as bootbox from "bootbox";
* If this class is imported the user is shown an error dialog if he calls an page via Turbo and an error is responded. * If this class is imported the user is shown an error dialog if he calls an page via Turbo and an error is responded.
* @type {ErrorHandlerHelper} * @type {ErrorHandlerHelper}
*/ */
const ErrorHandlerHelper = class { class ErrorHandlerHelper {
constructor() { constructor() {
console.log('Error Handler registered'); console.log('Error Handler registered');

View file

@ -9,7 +9,7 @@ import "bootstrap-fileinput";
const RegisterEventHelper = class { class RegisterEventHelper {
constructor() { constructor() {
this.registerTooltips(); this.registerTooltips();
this.registerJumpToTopBtn(); this.registerJumpToTopBtn();

View file

@ -3,7 +3,7 @@
import "patternfly-bootstrap-treeview/src/css/bootstrap-treeview.css" import "patternfly-bootstrap-treeview/src/css/bootstrap-treeview.css"
import "patternfly-bootstrap-treeview"; import "patternfly-bootstrap-treeview";
const SidebarHelper = class { class SidebarHelper {
constructor() { constructor() {
this.BASE = $("body").data("base-url"); this.BASE = $("body").data("base-url");
//If path doesn't end with slash, add it. //If path doesn't end with slash, add it.

View file

@ -5,42 +5,46 @@
* that tab on reload. That means that if the user changes something, he does not have to switch back to the tab * 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. * where he was before submit.
*/ */
let TabRememberHelper = new class { class TabRememberHelper {
constructor() { constructor() {
document.addEventListener("turbo:load", () => { document.addEventListener("turbo:load", this.onLoad);
//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) { onLoad(event) {
e.preventDefault() //Determine which tab should be shown (use hash if specified, otherwise use localstorage)
var tab_name = this.getAttribute('href') let $activeTab = null;
if (history.replaceState) { if (location.hash) {
history.replaceState(null, null, tab_name) $activeTab = $('a[href=\'' + location.hash + '\']');
} else { } else if (localStorage.getItem('activeTab')) {
location.hash = tab_name $activeTab = $('a[href="' + localStorage.getItem('activeTab') + '"]');
} }
localStorage.setItem('activeTab', tab_name)
$(this).tab('show'); if ($activeTab) {
return false; //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-bs-toggle=\'tab\']', function (e) {
e.preventDefault()
var tab_name = this.getAttribute('href')
if (history.replaceState) {
history.replaceState(null, null, tab_name)
} else {
location.hash = tab_name
}
localStorage.setItem('activeTab', tab_name)
$(this).tab('show');
return false;
}); });
} }
} }
//export default new TabRememberHelper(); export default new TabRememberHelper();

View file

@ -2,7 +2,7 @@
import "./lib/jquery.tristate" import "./lib/jquery.tristate"
const TristateHelper = class { class TristateHelper {
constructor() { constructor() {
this.registerTriStateCheckboxes(); this.registerTriStateCheckboxes();
this.registerSubmitHandler(); this.registerSubmitHandler();