initial commit v1.0.0
This commit is contained in:
commit
47f1550092
14
manifest.json
Normal file
14
manifest.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "TabSaver",
|
||||
"description": "Save all windows and tabs to a local file",
|
||||
"homepage_url": "https://miketheburns.com/browser-extensions/tabsaver",
|
||||
"version": "1.0.0",
|
||||
"manifest_version": 3,
|
||||
"icons": {
|
||||
"256": "icon.png"
|
||||
},
|
||||
"action": {
|
||||
"default_popup": "popup.html"
|
||||
},
|
||||
"permissions": ["tabs"]
|
||||
}
|
||||
18
popup.css
Normal file
18
popup.css
Normal file
@ -0,0 +1,18 @@
|
||||
html, body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
display: block;
|
||||
padding: 10px 20px;
|
||||
border-bottom: 1px solid #999;
|
||||
background-color: #ccc;
|
||||
white-space: nowrap;
|
||||
}
|
||||
a:hover {
|
||||
background-color: #999;
|
||||
color: #fff;
|
||||
}
|
||||
11
popup.html
Normal file
11
popup.html
Normal file
@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="popup.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a href="#" class="save">Save tabs to file</a>
|
||||
<a href="#" class="restore">Restore tabs from file</a>
|
||||
<script src="popup.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
48
popup.js
Executable file
48
popup.js
Executable file
@ -0,0 +1,48 @@
|
||||
async function save(event) {
|
||||
event.preventDefault();
|
||||
event.stopImmediatePropagation();
|
||||
let content = "";
|
||||
// iterate ghrough all windows and all tabs
|
||||
// windows are separated by a blank line
|
||||
// tabs are separated by newline
|
||||
const _windows = await chrome.windows.getAll({ populate: true });
|
||||
_windows.forEach((_window, _windowIndex) => {
|
||||
_window.tabs.forEach((_tab, _tabIndex) => {
|
||||
content += _tab.url + "\n";
|
||||
});
|
||||
content += "\n";
|
||||
});
|
||||
|
||||
const fileHandle = await showSaveFilePicker();
|
||||
const writable = await fileHandle.createWritable();
|
||||
await writable.write(content);
|
||||
await writable.close();
|
||||
window.close();
|
||||
}
|
||||
|
||||
async function restore(event) {
|
||||
event.preventDefault();
|
||||
event.stopImmediatePropagation();
|
||||
let tabs = [];
|
||||
const [fileHandle] = await window.showOpenFilePicker();
|
||||
const file = await fileHandle.getFile();
|
||||
const contents = await file.text();
|
||||
|
||||
// get tabs from text file (each line is a tab, an empty line indicates we can open a window with previous tabs)
|
||||
contents.split("\n").forEach(async (line) => {
|
||||
if (line == "" && tabs.length) {
|
||||
// create new window with tabs in array
|
||||
chrome.windows.create({
|
||||
state: "maximized",
|
||||
url: tabs,
|
||||
});
|
||||
tabs = []; // reset tabs array
|
||||
} else {
|
||||
// add tab to array
|
||||
tabs.push(line);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelector("a.save").onclick = save;
|
||||
document.querySelector("a.restore").onclick = restore;
|
||||
Loading…
x
Reference in New Issue
Block a user