Added selective opening of tabs and added new or current session opening of tabs.
This commit is contained in:
@@ -1,45 +1,150 @@
|
||||
let selectedItem = null;
|
||||
|
||||
const toggleSelect = (name) => {
|
||||
let checkboxes = document.getElementsByName(name);
|
||||
for (var i = 0; i < checkboxes.length; i++) {
|
||||
checkboxes[i].checked = !checkboxes[i].checked;
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener("click", (e) => {
|
||||
if (e.button == 0) { // Left click
|
||||
let name = e.target.name;
|
||||
if (e.target.tagName == "LI") {
|
||||
|
||||
if (/(download|delete|edit)/.test(name)) {
|
||||
if (selectedItem) {
|
||||
if (selectedItem == e.target && selectedItem.className == "selected") {
|
||||
selectedItem.setAttribute("class", "");
|
||||
selectedItem = null;
|
||||
} else {
|
||||
selectedItem.setAttribute("class", "");
|
||||
selectedItem = e.target;
|
||||
selectedItem.setAttribute("class", "selected");
|
||||
}
|
||||
if (name == "download")
|
||||
downloadSession(selectedItem);
|
||||
else if (name == "delete")
|
||||
deleteFromStorage(selectedItem);
|
||||
else if (name == "edit")
|
||||
editSession(selectedItem);
|
||||
} else {
|
||||
selectedItem = e.target;
|
||||
selectedItem.setAttribute("class", "selected");
|
||||
swal("Select a session first...", {
|
||||
icon: "warning",
|
||||
});
|
||||
}
|
||||
} else if (name == "save") {
|
||||
saveSession(selectedItem);
|
||||
} else if (name == "import") {
|
||||
importSession();
|
||||
} else if (selectedItem) {
|
||||
if (name == "download")
|
||||
downloadSession(selectedItem);
|
||||
else if (name == "delete")
|
||||
deleteFromStorage(selectedItem);
|
||||
else if (name == "edit")
|
||||
editSession(selectedItem);
|
||||
} else if (/(download|delete|edit)/.test(name)) {
|
||||
swal("Select a session first...", {
|
||||
icon: "warning",
|
||||
});
|
||||
} else if (name == "donate") {
|
||||
var dlAnchorElem = document.getElementById('downloadAnchorElem');
|
||||
dlAnchorElem.setAttribute("href", "https://www.paypal.me/ITDominator");
|
||||
dlAnchorElem.setAttribute("_blank", "");
|
||||
dlAnchorElem.click();
|
||||
}
|
||||
|
||||
if (e.target.tagName == "LI" && e.target.className.includes("sessionLI")) {
|
||||
if (selectedItem) {
|
||||
if (selectedItem == e.target && selectedItem.className == "sessionLI selected") {
|
||||
selectedItem.setAttribute("class", "sessionLI");
|
||||
selectedItem = null;
|
||||
} else {
|
||||
selectedItem.setAttribute("class", "sessionLI");
|
||||
selectedItem = e.target;
|
||||
selectedItem.setAttribute("class", "sessionLI selected");
|
||||
}
|
||||
} else {
|
||||
selectedItem = e.target;
|
||||
selectedItem.setAttribute("class", "sessionLI selected");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener("dblclick", (e) => {
|
||||
if (e.button == 0) { // Left click
|
||||
if (e.target.tagName == "LI") {
|
||||
loadSession(e.target.innerHTML.trim());
|
||||
if (e.target.tagName == "LI" && e.target.className.includes("sessionLI")) {
|
||||
selectedItem = e.target;
|
||||
selectedItem.setAttribute("class", "sessionLI selected");
|
||||
try {
|
||||
let id = e.target.innerHTML.trim();
|
||||
storage.get(id).then(storageResults => {
|
||||
let json = JSON.parse(storageResults[id]);
|
||||
let keys = Object.keys(json);
|
||||
let keysLength = Object.keys(json).length;
|
||||
let replaceTabs = document.getElementsByName("replaceTabs")[0];
|
||||
let selectiveOpen = document.getElementsByName("selectiveOpen")[0];
|
||||
|
||||
if (!selectiveOpen.checked) {
|
||||
loadSession(json, replaceTabs.checked);
|
||||
} else {
|
||||
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 h2Txt = document.createTextNode("Window: " + (i + 1));
|
||||
let store = json[keys[i]];
|
||||
let j = 0;
|
||||
|
||||
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);
|
||||
lblTag.appendChild(labelTxt);
|
||||
ulTag.appendChild(liClone);
|
||||
j++;
|
||||
});
|
||||
|
||||
container.id = "editSelectionContainer";
|
||||
ulClone.querySelector('#selectAll')
|
||||
.addEventListener("click", function () {
|
||||
toggleSelect("Win" + i);
|
||||
});
|
||||
ulClone.querySelector('.ulHeader').appendChild(h2Txt);
|
||||
container.appendChild(ulClone);
|
||||
}
|
||||
|
||||
swal("Selective Open", {
|
||||
content: container,
|
||||
buttons: true,
|
||||
}).then((willOpen) => {
|
||||
if (willOpen) {
|
||||
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].title.trim()}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (links.length > 0) {
|
||||
sessionData[keys[i]] = links;
|
||||
}
|
||||
}
|
||||
|
||||
json = sessionData;
|
||||
keysLength = Object.keys(json).length;
|
||||
if (keysLength > 0) {
|
||||
loadSession(json, replaceTabs.checked);
|
||||
} else {
|
||||
swal("Canceled operation; no tabs were selected...", {
|
||||
icon: "warning",
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@@ -172,7 +172,8 @@ const downloadSession = (elm = null) => {
|
||||
swal("Download Session?", {
|
||||
content: pTag,
|
||||
buttons: true,
|
||||
}).then((willDl) => { if (willDl) {
|
||||
}).then((willDl) => {
|
||||
if (willDl) {
|
||||
if (chkBoxTag.checked) {
|
||||
fileName = "session:" + id + ":" +
|
||||
new Date().toLocaleString().split(',')[0].replace(/\//g, "-") + ".json";
|
||||
@@ -183,24 +184,23 @@ const downloadSession = (elm = null) => {
|
||||
let dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(json));
|
||||
dlAnchorElem.setAttribute("href", dataStr);
|
||||
dlAnchorElem.setAttribute("download", fileName);
|
||||
dlAnchorElem.setAttribute("target", "");
|
||||
dlAnchorElem.click();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const loadSession = (id = null) => {
|
||||
const loadSession = (json = null, replaceTabs = false) => {
|
||||
console.log("Loading session...");
|
||||
let keys = Object.keys(json);
|
||||
let keysLength = Object.keys(json).length;
|
||||
try {
|
||||
storage.get(id).then(storageResults => {
|
||||
let json = JSON.parse(storageResults[id]);
|
||||
let keys = Object.keys(json);
|
||||
let keysLength = Object.keys(json).length;
|
||||
|
||||
browser.windows.getAll().then(windows => {
|
||||
windowSys.getCurrent({populate: true}).then(currentWindow => {
|
||||
let wasCurrentTabId = null;
|
||||
browser.windows.getAll().then(windows => {
|
||||
windowSys.getCurrent({populate: true}).then(currentWindow => {
|
||||
let wasCurrentTabId = null;
|
||||
|
||||
if (replaceTabs) { // Clear all windows but main then load...
|
||||
// Clear all non-current windows and then current window's tabs
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
if (currentWindow.id != windows[i].id) {
|
||||
@@ -223,26 +223,35 @@ const loadSession = (id = null) => {
|
||||
store.forEach(tab => {
|
||||
browser.tabs.create({ url: tab.link });
|
||||
});
|
||||
browser.tabs.remove(wasCurrentTabId);
|
||||
|
||||
// If more than one window, load tabs to new windows.
|
||||
browser.tabs.remove(wasCurrentTabId);
|
||||
if (keysLength > 1) {
|
||||
for (let i = 1; 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 });
|
||||
}
|
||||
windowMaker(1, keysLength, keys, json)
|
||||
}
|
||||
});
|
||||
} else { // Load into new windows...
|
||||
if (keysLength > 0) {
|
||||
windowMaker(0, keysLength, keys, json)
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
} 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) => {
|
||||
@@ -254,9 +263,10 @@ const getSavedSessionIDs = () => {
|
||||
}
|
||||
|
||||
const appendToSavedSessionsList = (enteryName) => {
|
||||
let liTag = document.createElement("LI");
|
||||
let text = document.createTextNode(enteryName);
|
||||
liTag.setAttribute("name", 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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user