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); } }); };