57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
/* eslint no-param-reassign: ["error", { "props": false }]*/
|
|
/* eslint no-new: "off" */
|
|
import AccessorUtilities from './lib/utils/accessor';
|
|
|
|
((global) => {
|
|
/**
|
|
* Memorize the last selected tab after reloading a page.
|
|
* Does that setting the current selected tab in the localStorage
|
|
*/
|
|
class ActiveTabMemoizer {
|
|
constructor({ currentTabKey = 'current_signin_tab', tabSelector = 'ul.nav-tabs' } = {}) {
|
|
this.currentTabKey = currentTabKey;
|
|
this.tabSelector = tabSelector;
|
|
this.isLocalStorageAvailable = AccessorUtilities.isLocalStorageAccessSafe();
|
|
|
|
this.bootstrap();
|
|
}
|
|
|
|
bootstrap() {
|
|
const tabs = document.querySelectorAll(this.tabSelector);
|
|
if (tabs.length > 0) {
|
|
tabs[0].addEventListener('click', (e) => {
|
|
if (e.target && e.target.nodeName === 'A') {
|
|
const anchorName = e.target.getAttribute('href');
|
|
this.saveData(anchorName);
|
|
}
|
|
});
|
|
}
|
|
|
|
this.showTab();
|
|
}
|
|
|
|
showTab() {
|
|
const anchorName = this.readData();
|
|
if (anchorName) {
|
|
const tab = document.querySelector(`${this.tabSelector} a[href="${anchorName}"]`);
|
|
if (tab) {
|
|
tab.click();
|
|
}
|
|
}
|
|
}
|
|
|
|
saveData(val) {
|
|
if (!this.isLocalStorageAvailable) return undefined;
|
|
|
|
return window.localStorage.setItem(this.currentTabKey, val);
|
|
}
|
|
|
|
readData() {
|
|
if (!this.isLocalStorageAvailable) return null;
|
|
|
|
return window.localStorage.getItem(this.currentTabKey);
|
|
}
|
|
}
|
|
|
|
global.ActiveTabMemoizer = ActiveTabMemoizer;
|
|
})(window);
|