diff --git a/README.md b/README.md index 3a4539e..3d00479 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ Easy Session Manager allows you to manage your Firefox session by backing up or # Download https://addons.mozilla.org/en-US/firefox/addon/easy-session-manager/ -# Version: 0.2.0.2 -Changed edit logic: If name is different, Editing will change the session name unless new session is checked. +# Version: 0.2.1.0 +Fixed edit logic when renaming session overwrites another session with the same name. +Split helper logic to utils.js. # Images ![1 Default interface with no sessions. ](images/pic1.png) diff --git a/src/manifest.json b/src/manifest.json index 964534b..46127f7 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": " Easy Session Manager", - "version": "0.2.0.2", + "version": "0.2.1.0", "description": " Easy Session Manager allows you to manage your Firefox session by backing up or loading your saved sessions.", "applications": { diff --git a/src/pages/import.html b/src/pages/import.html index c40fa5f..f5afcca 100644 --- a/src/pages/import.html +++ b/src/pages/import.html @@ -29,7 +29,6 @@ body, html { - diff --git a/src/pages/sessionManager.html b/src/pages/sessionManager.html index 894dcb6..ca6bd30 100755 --- a/src/pages/sessionManager.html +++ b/src/pages/sessionManager.html @@ -43,6 +43,7 @@ + diff --git a/src/scripts/sessionManager.js b/src/scripts/sessionManager.js index ab3867a..f035c52 100644 --- a/src/scripts/sessionManager.js +++ b/src/scripts/sessionManager.js @@ -99,15 +99,7 @@ const editSession = (elm = null, message = "Editing selected session...\nAllowed json = selectionData(container, keys, keysLength); if (checkedTag.checked) { // if creating from collection new session if (newName !== elm.innerText) { - let sessions = document.getElementById("savedSessions").querySelectorAll("li"); - for (var i = 0; i < sessions.length; i++) { - if (sessions[i].innerText === newName) { - let min = 1; - let max = 200000; - var random = Math.floor(Math.random() * (+max - +min)) + +min; - newName += "-" + random + "-" + Math.floor(Math.random() * (+10 - +1)) + +1; - } - } + newName = checkSessionListForDuplicate(newName); saveToStorage(newName, JSON.stringify(json), false); } else { // enforce unique name let min = 1; @@ -118,6 +110,7 @@ const editSession = (elm = null, message = "Editing selected session...\nAllowed } } else { if (newName !== elm.innerText) { // if not creating new session and diff name rename + newName = checkSessionListForDuplicate(newName); storage.get(id).then((storageResults) => { storage.remove(id); saveToStorage(newName, JSON.stringify(json), true); @@ -142,55 +135,6 @@ const editSession = (elm = null, message = "Editing selected session...\nAllowed }); } -const saveToStorage = (name, data, fromEdit = false) => { - storage.get(name).then((storageResults) => { - let json = null; - try { - json = JSON.parse(storageResults[name]); - swal("Overwrote session...", { - icon: "warning", - }); - } catch (e) { - if (fromEdit) { // minor logic fix - swal("Overwrote session...", { - icon: "warning", - }); - } else { - appendToSavedSessionsList(name); - swal("Saved session...", { - icon: "success", - }); - } - } finally { - storage.set({[name]: data}); - } - }); -} - -const deleteFromStorage = (elm = null) => { - swal({ - title: "Are you sure?", - text: "Do you wish to delete session:\n" + elm.innerText + "?", - icon: "warning", - buttons: true, - dangerMode: true, - }).then((willDelete) => { - if (willDelete) { - storage.remove(elm.innerText).then(() => { - elm.parentElement.removeChild(elm); - }); - selectedItem = null; // reset selectedItem - swal("Deleted session successfully...", { - icon: "success", - }); - } else { - swal("Canceled deletion...", { - icon: "warning", - }); - } - }); -} - const importSession = () => { browser.tabs.create({ url: browser.extension.getURL("../pages/import.html"), @@ -288,107 +232,4 @@ const loadSession = (json = null, replaceTabs = false) => { } catch (e) { console.log(e); } } -const windowMaker = (i, keysLength, keys, json) => { - for (; i < keysLength; i++) { - let store = json[keys[i]]; - let urls = []; - - for (let j = 0; j < store.length; j++) { - urls.push(store[j].link); - } - windowSys.create({ url: urls }); - } -} - -const getSavedSessionIDs = () => { - console.log("Getting saved sessions..."); - storage.get(null).then((storageResults) => { - let keys = Object.keys(storageResults); - for (let key of keys) { - appendToSavedSessionsList(key); - } - }); -} - -const appendToSavedSessionsList = (enteryName) => { - let liTag = document.createElement("LI"); - let text = document.createTextNode(enteryName.trim()); - liTag.setAttribute("name", enteryName.trim()); - liTag.className = "sessionLI"; - liTag.append(text); - document.getElementById("savedSessions").append(liTag); -} - getSavedSessionIDs(); - - - - -/* Selection Process */ - -const selectionWindow = (json = "", keys = null, keysLength = 0) => { - let container = document.createElement("DIV"); - let ulTemplate = document.querySelector('#ulTemplate'); - let liTemplate = document.querySelector('#liTemplate'); - - for (let i = 0; i < keysLength; i++) { - let ulClone = document.importNode(ulTemplate.content, true); - let ulTag = ulClone.querySelector('.collection'); - let selAll = ulClone.querySelector('input'); - let h2Tag = ulClone.querySelector('.ulHeader'); - let ulLblTag = ulClone.querySelector('label'); - let h2Txt = document.createTextNode("Window: " + (i + 1)); - let store = json[keys[i]]; - let j = 0; - - container.id = "editSelectionContainer"; - selAll.id = "selectAllWin" + i; - ulLblTag.htmlFor = "selectAllWin" + i; - selAll.addEventListener("click", function (eve) { - toggleSelect(eve.target, "Win" + i); - }); - h2Tag.appendChild(h2Txt); - - store.forEach(tab => { - let liClone = document.importNode(liTemplate.content, true); - let inptTag = liClone.querySelector("input"); - let lblTag = liClone.querySelector("label"); - let labelTxt = document.createTextNode(tab.link); - inptTag.id = "Win" + i + "Li" + j; - lblTag.htmlFor = "Win" + i + "Li" + j; - lblTag.title = tab.link; - inptTag.setAttribute("name", "Win" + i); // Used for toggle select all - lblTag.appendChild(labelTxt); - ulTag.appendChild(liClone); - j++; - }); - - container.appendChild(ulClone); - } - - return container; -} - -const selectionData = (container = null, keys = null, keysLength = 0) => { - let sessionData = {}; - let ulTags = container.querySelectorAll("ul"); - - for (let i = 0; i < keysLength; i++) { - let links = []; - - for (var ii = 0; ii < ulTags[i].children.length; ii++) { - let li = ulTags[i].children[ii]; - if (li.children[0].checked) { - links.push( - {"link" : li.children[1].innerText.trim()} - ); - } - } - - if (links.length > 0) { - sessionData[keys[i]] = links; - } - } - - return sessionData; -} diff --git a/src/scripts/utils.js b/src/scripts/utils.js new file mode 100644 index 0000000..730bb79 --- /dev/null +++ b/src/scripts/utils.js @@ -0,0 +1,163 @@ +const getSavedSessionIDs = () => { + console.log("Getting saved sessions..."); + storage.get(null).then((storageResults) => { + let keys = Object.keys(storageResults); + for (let key of keys) { + appendToSavedSessionsList(key); + } + }); +} + +const appendToSavedSessionsList = (enteryName) => { + let liTag = document.createElement("LI"); + let text = document.createTextNode(enteryName.trim()); + liTag.setAttribute("name", enteryName.trim()); + liTag.className = "sessionLI"; + liTag.append(text); + document.getElementById("savedSessions").append(liTag); +} + + +const checkSessionListForDuplicate = (newName) => { + let sessions = document.getElementById("savedSessions").querySelectorAll("li"); + for (var i = 0; i < sessions.length; i++) { + if (sessions[i].innerText === newName) { + let min = 1; + let max = 200000; + var random = Math.floor(Math.random() * (+max - +min)) + +min; + newName += "-" + random + "-" + Math.floor(Math.random() * (+10 - +1)) + +1; + } + } + return newName; +} + +const windowMaker = (i, keysLength, keys, json) => { + for (; i < keysLength; i++) { + let store = json[keys[i]]; + let urls = []; + + for (let j = 0; j < store.length; j++) { + urls.push(store[j].link); + } + windowSys.create({ url: urls }); + } +} + +const saveToStorage = (name, data, fromEdit = false) => { + storage.get(name).then((storageResults) => { + let json = null; + try { + json = JSON.parse(storageResults[name]); + swal("Overwrote session...", { + icon: "warning", + }); + } catch (e) { + if (fromEdit) { // minor logic fix + swal("Overwrote session...", { + icon: "warning", + }); + } else { + appendToSavedSessionsList(name); + swal("Saved session...", { + icon: "success", + }); + } + } finally { + storage.set({[name]: data}); + } + }); +} + +const deleteFromStorage = (elm = null) => { + swal({ + title: "Are you sure?", + text: "Do you wish to delete session:\n" + elm.innerText + "?", + icon: "warning", + buttons: true, + dangerMode: true, + }).then((willDelete) => { + if (willDelete) { + storage.remove(elm.innerText).then(() => { + elm.parentElement.removeChild(elm); + }); + selectedItem = null; // reset selectedItem + swal("Deleted session successfully...", { + icon: "success", + }); + } else { + swal("Canceled deletion...", { + icon: "warning", + }); + } + }); +} + + +/* Selection Process */ + +const selectionWindow = (json = "", keys = null, keysLength = 0) => { + let container = document.createElement("DIV"); + let ulTemplate = document.querySelector('#ulTemplate'); + let liTemplate = document.querySelector('#liTemplate'); + + for (let i = 0; i < keysLength; i++) { + let ulClone = document.importNode(ulTemplate.content, true); + let ulTag = ulClone.querySelector('.collection'); + let selAll = ulClone.querySelector('input'); + let h2Tag = ulClone.querySelector('.ulHeader'); + let ulLblTag = ulClone.querySelector('label'); + let h2Txt = document.createTextNode("Window: " + (i + 1)); + let store = json[keys[i]]; + let j = 0; + + container.id = "editSelectionContainer"; + selAll.id = "selectAllWin" + i; + ulLblTag.htmlFor = "selectAllWin" + i; + selAll.addEventListener("click", function (eve) { + toggleSelect(eve.target, "Win" + i); + }); + h2Tag.appendChild(h2Txt); + + store.forEach(tab => { + let liClone = document.importNode(liTemplate.content, true); + let inptTag = liClone.querySelector("input"); + let lblTag = liClone.querySelector("label"); + let labelTxt = document.createTextNode(tab.link); + inptTag.id = "Win" + i + "Li" + j; + lblTag.htmlFor = "Win" + i + "Li" + j; + lblTag.title = tab.link; + inptTag.setAttribute("name", "Win" + i); // Used for toggle select all + lblTag.appendChild(labelTxt); + ulTag.appendChild(liClone); + j++; + }); + + container.appendChild(ulClone); + } + + return container; +} + +const selectionData = (container = null, keys = null, keysLength = 0) => { + let sessionData = {}; + let ulTags = container.querySelectorAll("ul"); + + for (let i = 0; i < keysLength; i++) { + let links = []; + + for (var ii = 0; ii < ulTags[i].children.length; ii++) { + let li = ulTags[i].children[ii]; + if (li.children[0].checked) { + links.push( + {"link" : li.children[1].innerText.trim()} + ); + } + } + + if (links.length > 0) { + sessionData[keys[i]] = links; + } + } + + return sessionData; +}