diff --git a/javascript/src/BSTabs.js b/javascript/src/BSTabs.js index 4ba1df972c5e308073d02146b646429c45e7bf60..fdb1955510add0f7fd32e8130a5d08f4141715b7 100644 --- a/javascript/src/BSTabs.js +++ b/javascript/src/BSTabs.js @@ -35,6 +35,8 @@ var QfqNS = QfqNS || {}; this.tabs = {}; this.currentTab = this.getActiveTabFromDOM(); this.eventEmitter = new EventEmitter(); + this.currentFormName = $('#' + this.tabId + ' .active a[data-toggle="tab"]')[0].hash.slice(1).split("_")[0]; + this.currentRecordId = $('#' + this.tabId + ' a[data-toggle="tab"]')[0].id.split("-")[2]; // Fill this.tabs this.fillTabInformation(); diff --git a/javascript/src/QfqPage.js b/javascript/src/QfqPage.js index 6914b6efb69a1da33e550204e7b0bd2d4542dd6b..ec3f21b5382ecdc97fff0a2f09a204a171d7badb 100644 --- a/javascript/src/QfqPage.js +++ b/javascript/src/QfqPage.js @@ -45,7 +45,36 @@ var QfqNS = QfqNS || {}; try { this.bsTabs = new n.BSTabs(this.settings.tabsId); + var storedFormInfos = []; + + // get current state from session storage + if(sessionStorage.getItem("formInfos") !== null) { + storedFormInfos = JSON.parse(sessionStorage.getItem("formInfos")); + } + + var currentForm = this.bsTabs.currentFormName; + var currentRecordId = this.bsTabs.currentRecordId; + + var actualIndex = -1; + var indexNr = 0; + if(storedFormInfos.length !== 0){ + if(storedFormInfos[0] !== ''){ + storedFormInfos.forEach(function callback(element){ + if(element === currentForm && storedFormInfos[indexNr+2] === currentRecordId){ + actualIndex = indexNr; + } + indexNr++; + }); + } + } + var currentState = this.settings.pageState.getPageState(); + + // load from sessionStorage or from path given hash if not empty + if(actualIndex !== -1 && location.hash === "") { + currentState = storedFormInfos[actualIndex+1]; + } + if (currentState !== "") { this.bsTabs.activateTab(currentState); n.PageTitle.setSubTitle(this.bsTabs.getTabName(currentState)); @@ -151,6 +180,53 @@ var QfqNS = QfqNS || {}; } var currentTabId = obj.target.getCurrentTab(); n.Log.debug('Saving state: ' + currentTabId); + + // Implementation save current state in session storage + var storedFormInfos = []; + + if(sessionStorage.getItem("formInfos") !== null){ + storedFormInfos = JSON.parse(sessionStorage.getItem("formInfos")); + } + + var currentForm = obj.target.currentFormName; + var currentRecordId = obj.target.currentRecordId; + + var actualIndex = -1; + var indexNr = 0; + if(storedFormInfos.length !== 0) { + if(storedFormInfos[0] !== ''){ + storedFormInfos.forEach(function callback(element){ + if(element === currentForm && storedFormInfos[indexNr + 2] === currentRecordId){ + actualIndex = indexNr; + } + indexNr++; + }); + } + } + + // fill sessionStorage, there are 3 ways for filling the sessionStorage: 1.If empty - first time filling, 2.If there is anything - add it to them, 3 + // 1.If array from storage is empty - fill it first time + if(storedFormInfos.length === 0){ + storedFormInfos[0] = currentForm; + storedFormInfos[1] = currentTabId; + storedFormInfos[2] = currentRecordId; + + // 2.If there is anything in storage but not the actual opened forms - add this new information to the existing array + }else if(actualIndex === -1) { + storedFormInfos[indexNr] = currentForm; + storedFormInfos[indexNr + 1] = currentTabId; + storedFormInfos[indexNr + 2] = currentRecordId; + + // 3.If actual openend form is included in sessionStorage - only change the array values of the existing informations + }else{ + storedFormInfos[actualIndex] = currentForm; + storedFormInfos[actualIndex + 1] = currentTabId; + storedFormInfos[actualIndex + 2] = currentRecordId; + } + + // Set sessionStorage with customized array + sessionStorage.setItem("formInfos" , JSON.stringify(storedFormInfos)); + n.PageTitle.setSubTitle(obj.target.getTabName(currentTabId)); this.settings.pageState.setPageState(currentTabId, n.PageTitle.get()); };