diff --git a/extension/background.js b/extension/background.js index 6f9b829..982e19a 100644 --- a/extension/background.js +++ b/extension/background.js @@ -1,10 +1,29 @@ -function bookmarkAll(folderTitle) { +var OTHER_BOOKMARKS_ID = '2'; +function getParentFolderOptions(cb) { + chrome.bookmarks.get(OTHER_BOOKMARKS_ID, function(folders) { + var otherBookmarksFolder = folders[0]; + var results = [{id: otherBookmarksFolder.id, title: otherBookmarksFolder.title}]; + chrome.bookmarks.getChildren(OTHER_BOOKMARKS_ID, function(children) { + for(var i = 0; i < children.length; i++) { + var child = children[i]; + if(!child.url) { + results.push({id: child.id, title: otherBookmarksFolder.title + ' / ' + child.title}); + } + } + cb(results); + }); + }); +} + + +function bookmarkAll(folderTitle, parentFolderId, windowsAsFolders) { console.log("Creating new bookmarks in " + folderTitle); // Create folder chrome.bookmarks.create( { title: folderTitle, - url: null + url: null, + parentId: parentFolderId }, function(folder){ if (folder == null) { @@ -18,20 +37,48 @@ function bookmarkAll(folderTitle) { }, function(windowList) { for (var i = 0; i < windowList.length; i++) { - for (var j = 0; j < windowList[i].tabs.length; j++) { - var tab = windowList[i].tabs[j]; - // Bookmark the tab - chrome.bookmarks.create( - { - parentId : folder.id, - title : tab.title, - url : tab.url - } - ); - } + bookmarkWindowTabs(windowList[i], folder, windowsAsFolders, i); } } ); } ); } + +function bookmarkWindowTabs(window, rootFolder, windowsAsFolders, index) { + if(windowsAsFolders) { + chrome.bookmarks.create( + { + parentId : rootFolder.id, + title : pad(index+1), + url : null + }, + function(windowFolder) { + bookmarkWindowTabsInFolder(window, windowFolder); + } + ); + } else { + bookmarkWindowTabsInFolder(window, rootFolder); + } +} + +function bookmarkWindowTabsInFolder(window, folder) { + for (var j = 0; j < window.tabs.length; j++) { + var tab = window.tabs[j]; + bookmarkTab(folder, tab); + } +} + +function bookmarkTab(folder, tab) { + chrome.bookmarks.create( + { + parentId : folder.id, + title : tab.title, + url : tab.url + } + ); +} + +function pad(n) { + return n<10 ? '0'+n : n +} diff --git a/extension/popup.html b/extension/popup.html index 7baba7b..e64ee41 100644 --- a/extension/popup.html +++ b/extension/popup.html @@ -4,13 +4,21 @@ body { min-width:200px; } + label { + white-space: nowrap; + } +

Bookmark All

- - - + Bookmark all open tabs ...
+ ...
+
+
+

+ +

diff --git a/extension/script.js b/extension/script.js index 4f69129..f28e3ee 100644 --- a/extension/script.js +++ b/extension/script.js @@ -1,25 +1,53 @@ function toShortISODateString(d) { - function pad(n) { - return n<10 ? '0'+n : n - } - return d.getFullYear()+'-' - + pad(d.getMonth()+1)+'-' - + pad(d.getDate()); + var pad = chrome.extension.getBackgroundPage().pad; + return d.getFullYear() + '-' + + pad(d.getMonth()+1) + '-' + + pad(d.getDate()) + ' ' + + pad(d.getHours()) + ':' + + pad(d.getMinutes()) + ':' + + pad(d.getSeconds()); } + $(document).ready(function(){ var folderTitle = toShortISODateString(new Date()); // Set default value to current date $('#folderName').val(folderTitle); console.log("Set placeholder to " + folderTitle); + + var parentFolder = $('#parentFolder'); + chrome.extension.getBackgroundPage().getParentFolderOptions( + function(parentOptions) { + var previousParentFolderId = localStorage['parentFolderId']; + for(var i = 0; i < parentOptions.length; i++) { + var parentOption = parentOptions[i]; + var option = $('