Changed URL loading from window.create to browser.tabs.create

This commit is contained in:
2024-05-09 19:00:52 -05:00
parent 6ea60a0723
commit 41e70b1c3e
12 changed files with 304 additions and 37 deletions

View File

@@ -48,13 +48,16 @@ const deleteFromStorage = (elm = null, name = null) => {
}
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);
}
windowApi.create({ url: urls });
for (; i < keysLength; i++) {
let _store = json[keys[i]];
browser.runtime.sendMessage(
{
action: "new-window",
store: _store
}
)
}
}

75
src/scripts/listener.js Normal file
View File

@@ -0,0 +1,75 @@
const onMessageListener = async (request, sender, sendResponse) => {
switch (request.action) {
case "new-window": {
let store = request.store;
let newWindow = await browser.windows.create({focused: false});
for (let i = 0; i < store.length; i++) {
let createOption = (store[i].link !== "about:newtab") ?
{
active: false,
discarded: true,
pinned: false,
url: store[i].link,
windowId: newWindow.id,
index: i + 1
}
: { };
browser.tabs.create(createOption).catch( async (e) => {
createOption.url = returnReplaceURL(
"open_faild",
store[i].title,
store[i].link,
"../images/icons/error.png"
);
await browser.tabs.create(createOption);
});
}
let tabs = await browser.tabs.query({currentWindow: true});
browser.tabs.update(tabs.at(-1).id, { active: true });
browser.tabs.remove( tabs.at(0).id )
}
}
}
const returnReplaceURL = (state, title, url, favIconUrl) => {
let retUrl =
"/pages/replaced.html"
+ "?state="
+ encodeURIComponent(state)
+ "&title="
+ encodeURIComponent(title)
+ "&url="
+ encodeURIComponent(url)
+ "&favIconUrl="
+ encodeURIComponent(favIconUrl)
+ "&theme=dark";
// Reader mode
if (url.startsWith("about:reader?url=")) {
retUrl =
"/pages/replaced.html?state="
+ encodeURIComponent(state)
+ "&title="
+ encodeURIComponent(title)
+ "&url="
+ url.slice(17)
+ "&favIconUrl="
+ encodeURIComponent(favIconUrl)
+ "&openInReaderMode=true&theme=dark"
+ "&theme=dark";
}
return retUrl;
}
browser.runtime.onMessage.addListener(onMessageListener);

54
src/scripts/replaced.js Normal file
View File

@@ -0,0 +1,54 @@
const sanitaize = {
encode: str => {
str = str || "";
return str
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#39;");
},
decode: str => {
str = str || "";
return str
.replace(/&lt;/g, "<")
.replace(/&gt;/g, ">")
.replace(/&quot;/g, '"')
.replace(/&#39;/g, "'")
.replace(/&amp;/g, "&");
}
};
let parameter = returnReplaceParameter(location.href);
document.title = parameter.title;
document.getElementsByClassName("title")[0].innerText = parameter.title;
document.getElementsByClassName("replacedUrl")[0].value = parameter.url;
if (parameter.favIconUrl === "" || parameter.favIconUrl === "undefined") {
parameter.favIconUrl = "../icons/nofavicon.png";
}
document.head.insertAdjacentHTML(
"beforeend",
`<link rel="shortcut icon" href="${sanitaize.encode(parameter.favIconUrl)}">`
);
document.body.dataset.theme = parameter.theme || "light";
const copy = () => {
const url = document.querySelector(".replacedUrl");
url.select();
document.execCommand("Copy");
document.querySelector(".copyButton").innerText = "Copied.";
};
document.querySelector(".copyButton").onclick = copy;
function returnReplaceParameter(url) {
let parameter = {};
let paras = url.split("?")[1].split("&");
for (let p of paras) {
parameter[p.split("=")[0]] = decodeURIComponent(p.split("=")[1]);
}
return parameter;
}

62
src/scripts/replaced_.js Normal file
View File

@@ -0,0 +1,62 @@
const sanitaize = {
encode: str => {
str = str || "";
return str
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#39;");
},
decode: str => {
str = str || "";
return str
.replace(/&lt;/g, "<")
.replace(/&gt;/g, ">")
.replace(/&quot;/g, '"')
.replace(/&#39;/g, "'")
.replace(/&amp;/g, "&");
}
};
let parameter = returnReplaceParameter(location.href);
document.title = parameter.title;
document.getElementsByClassName("title")[0].innerText = parameter.title;
document.getElementsByClassName("replacedUrl")[0].value = parameter.url;
if (parameter.favIconUrl === "" || parameter.favIconUrl === "undefined") {
parameter.favIconUrl = "../icons/nofavicon.png";
}
document.head.insertAdjacentHTML(
"beforeend",
`<link rel="shortcut icon" href="${sanitaize.encode(parameter.favIconUrl)}">`
);
document.body.dataset.theme = parameter.theme || "light";
const copy = () => {
const url = document.querySelector(".replacedUrl");
url.select();
document.execCommand("Copy");
document.querySelector(".copyButton").innerText = browser.i18n.getMessage("copiedLabel");
};
document.querySelector(".copyButton").onclick = copy;
document.querySelector(".copyButton").innerText = browser.i18n.getMessage("copyUrlLabel");
if (parameter.state == "open_faild") {
document.getElementsByClassName("replacedPageMessage")[0].innerText = browser.i18n.getMessage(
"replacedPageMessage"
);
}
function returnReplaceParameter(url) {
let parameter = {};
let paras = url.split("?")[1].split("&");
for (let p of paras) {
parameter[p.split("=")[0]] = decodeURIComponent(p.split("=")[1]);
}
return parameter;
}

View File

@@ -37,17 +37,12 @@ const loadContainer = (sessionData, keys, keysLength, divID) => {
/* Selection Process */
const generateSelectionWindow = (json = "", keys = null, keysLength = 0) => {
let invalidURLsMessage = document.createElement("P")
let container = document.createElement("DIV");
let ulTemplate = document.querySelector('#ulTemplate');
let liTemplate = document.querySelector('#liTemplate');
invalidURLsMessage.innerText = "The Session has invalid URLs (highlighted for convenience). They might break loading of a session...";
invalidURLsMessage.classList.add("warning");
for (let i = 0; i < keysLength; i++) {
let ulClone = document.importNode(ulTemplate.content, true);
let ulTag = ulClone.querySelector('.collection');
@@ -60,7 +55,6 @@ const generateSelectionWindow = (json = "", keys = null, keysLength = 0) => {
let ulLblTag2 = ulClone.querySelector('.titleAllLbl');
let store = json[keys[i]];
let j = 0;
let hasInvalidURLs = false;
container.id = "editSelectionContainer";
selAll.id = "selectAllWin" + i;
@@ -99,13 +93,6 @@ const generateSelectionWindow = (json = "", keys = null, keysLength = 0) => {
inptTag.setAttribute("name", "Win" + i); // Used for toggle select all
if (/(file:\/\/|ws:\/\/|wss:\/\/|moz-extension:\/\/|about:)/.test(tab.link)) {
liTag.classList.add("error-bg");
lblTag.classList.add("error");
lblTag2.classList.add("error");
hasInvalidURLs = true;
}
lblTag.appendChild(labelTxt);
lblTag2.appendChild(labelTxt2);
@@ -114,10 +101,6 @@ const generateSelectionWindow = (json = "", keys = null, keysLength = 0) => {
j++;
});
if (hasInvalidURLs) {
container.appendChild(invalidURLsMessage);
}
container.appendChild(ulClone);
}
@@ -171,12 +154,10 @@ const getSessionData = (windows) => {
for (let i = 0; i < windows.length; i++) {
let links = [];
for (var ii = 0; ii < windows[i].tabs.length; ii++) {
if (!windows[i].tabs[ii].url.includes("about:")) {
links.push(
{"link" : windows[i].tabs[ii].url.trim(),
"title" : windows[i].tabs[ii].title.trim()}
);
}
links.push(
{"link" : windows[i].tabs[ii].url.trim(),
"title" : windows[i].tabs[ii].title.trim()}
);
}
sessionData["WindowID:" + windows[i].id] = links;
}