export-bookmarks/popup.js

69 lines
1.7 KiB
JavaScript

function print(subTree, level) {
let title = subTree.title;
let id = subTree.id;
let enabled = subTree.children.every(function(child) {
return child.children == null;
});
let indentation = ' '.repeat(level);
console.log(indentation + title + ' (' + id + '): ' + (enabled ? 'enabled' : 'disabled'));
let select = document.getElementById('select');
let option = document.createElement('option');
option.setAttribute('value', id);
if(!enabled) {
option.setAttribute('disabled', 'disabled');
}
option.innerHTML = indentation + title;
select.appendChild(option);
subTree.children.forEach(function (node) {
if(node.children == null) {
//bookmark
} else {
//folder
print(node, level + 1);
}
});
}
chrome.bookmarks.getTree(function(tree) {
tree[0].children.forEach(function(node) {
print(node, 0);
});
});
document.getElementById('exportButton').onclick = function() {
let deleteFolder = document.getElementById('delete').checked;
let includeNames = document.getElementById('includeNames').checked;
let select = document.getElementById('select');
let folderId = select.options[select.selectedIndex].value;
chrome.bookmarks.getSubTree(folderId, function(nodes) {
let folder = nodes[0];
console.log(folder);
let folderName = folder.title;
let fileContents = folderName + '\n\n';
for(bookmark of folder.children) {
if(includeNames) {
fileContents += bookmark.title + ': ' + bookmark.url + '\n';
} else {
fileContents += bookmark.url + '\n';
}
}
let fileBlob = new Blob([ fileContents ], { type: "text/plain;charset=utf-8" });
saveAs(fileBlob, folderName + '.txt');
if(deleteFolder && confirm('Delete folder?')) {
chrome.bookmarks.removeTree(folderId);
}
});
};