Index: chrome/browser/resources/bookmark_manager/js/bmm.js |
diff --git a/chrome/browser/resources/bookmark_manager/js/bmm.js b/chrome/browser/resources/bookmark_manager/js/bmm.js |
index f3d824aa768f24bdb7836de79dadcc8a74d81deb..1d64a0fb40675918198eef90f3707e4eeb10476d 100644 |
--- a/chrome/browser/resources/bookmark_manager/js/bmm.js |
+++ b/chrome/browser/resources/bookmark_manager/js/bmm.js |
@@ -63,10 +63,161 @@ cr.define('bmm', function() { |
return loadSubtree(''); |
} |
+ var bookmarkCache = { |
+ /** |
+ * Removes the cached item from both the list and tree lookups. |
+ */ |
+ remove: function(id) { |
+ var treeItem = bmm.treeLookup[id]; |
+ if (treeItem) { |
+ var items = treeItem.items; // is an HTMLCollection |
+ for (var i = 0, item; item = items[i]; i++) { |
mazda
2011/11/09 04:49:43
for (var i = 0; i < items.length; ++i) {
yoshiki
2011/11/09 15:06:39
Done.
|
+ var bookmarkNode = item.bookmarkNode; |
+ delete bmm.treeLookup[bookmarkNode.id]; |
+ } |
+ delete bmm.treeLookup[id]; |
+ } |
+ }, |
+ |
+ /** |
+ * Updates the underlying bookmark node for the tree items and list items by |
+ * querying the bookmark backend. |
+ * @param {string} id The id of the node to update the children for. |
+ * @param {Function=} opt_f A funciton to call when done. |
+ */ |
+ updateChildren: function(id, opt_f) { |
+ function updateItem(bookmarkNode) { |
+ var treeItem = bmm.treeLookup[bookmarkNode.id]; |
+ if (treeItem) { |
+ treeItem.bookmarkNode = bookmarkNode; |
+ } |
+ } |
+ |
+ chrome.bookmarks.getChildren(id, function(children) { |
+ if (children) |
+ children.forEach(updateItem); |
+ |
+ if (opt_f) |
+ opt_f(children); |
+ }); |
+ } |
+ }; |
+ |
+ /** |
+ * Called when the title of a bookmark changes. |
+ * @param {string} id |
+ * @param {!Object} changeInfo |
+ */ |
+ function handleBookmarkChanged(id, changeInfo) { |
+ if (bmm.tree) |
+ bmm.tree.handleBookmarkChanged(id, changeInfo); |
+ if (bmm.list) |
+ bmm.list.handleBookmarkChanged(id, changeInfo); |
+ } |
+ |
+ /** |
+ * Callback for when the user reorders by title. |
+ * @param {string} id The id of the bookmark folder that was reordered. |
+ * @param {!Object} reorderInfo The information about how the items where |
+ * reordered. |
+ */ |
+ function handleChildrenReordered(id, reorderInfo) { |
+ if (bmm.tree) |
+ bmm.tree.handleChildrenReordered(id, changeInfo); |
+ if (bmm.list) |
+ bmm.list.handleChildrenReordered(id, changeInfo); |
+ bookmarkCache.updateChildren(id); |
+ } |
+ |
+ /** |
+ * Callback for when a bookmark node is created. |
+ * @param {string} id The id of the newly created bookmark node. |
+ * @param {!Object} bookmarkNode The new bookmark node. |
+ */ |
+ function handleCreated(id, bookmarkNode) { |
+ // console.info('handleCreated', id, bookmarkNode); |
mazda
2011/11/09 04:49:43
Please delete this.
yoshiki
2011/11/09 15:06:39
Done.
|
+ if (bmm.list) |
+ bmm.list.handleCreated(id, bookmarkNode); |
+ if (bmm.tree) |
+ bmm.tree.handleCreated(id, bookmarkNode); |
+ bookmarkCache.updateChildren(bookmarkNode.parentId); |
+ } |
+ |
+ function handleMoved(id, moveInfo) { |
mazda
2011/11/09 04:49:43
Please add comment.
yoshiki
2011/11/09 15:06:39
Done.
|
+ // console.info('handleMoved', id, moveInfo); |
mazda
2011/11/09 04:49:43
Please delete this.
yoshiki
2011/11/09 15:06:39
Done.
|
+ if (bmm.list) |
+ bmm.list.handleMoved(id, moveInfo); |
+ if (bmm.tree) |
+ bmm.tree.handleMoved(id, moveInfo); |
+ |
+ bookmarkCache.updateChildren(moveInfo.parentId); |
+ if (moveInfo.parentId != moveInfo.oldParentId) |
+ bookmarkCache.updateChildren(moveInfo.oldParentId); |
+ } |
+ |
+ function handleRemoved(id, removeInfo) { |
mazda
2011/11/09 04:49:43
Please add comment.
yoshiki
2011/11/09 15:06:39
Done.
|
+ // console.info('handleRemoved', id, removeInfo); |
mazda
2011/11/09 04:49:43
Please delete this.
yoshiki
2011/11/09 15:06:39
Done.
|
+ if (bmm.list) |
+ bmm.list.handleRemoved(id, removeInfo); |
+ if (bmm.tree) |
+ bmm.tree.handleRemoved(id, removeInfo); |
+ |
+ bookmarkCache.updateChildren(removeInfo.parentId); |
+ bookmarkCache.remove(id); |
+ } |
+ |
+ function handleImportBegan() { |
mazda
2011/11/09 04:49:43
Please add comment.
yoshiki
2011/11/09 15:06:39
Done.
|
+ chrome.bookmarks.onCreated.removeListener(handleCreated); |
+ chrome.bookmarks.onChanged.removeListener(handleBookmarkChanged); |
+ } |
+ |
+ function handleImportEnded() { |
mazda
2011/11/09 04:49:43
Please add comment.
yoshiki
2011/11/09 15:06:39
Done.
|
+ // When importing is done we reload the tree and the list. |
+ |
+ function f() { |
+ bmm.tree.removeEventListener('load', f); |
+ |
+ chrome.bookmarks.onCreated.addListener(handleCreated); |
+ chrome.bookmarks.onChanged.addListener(handleBookmarkChanged); |
+ |
+ if (!bmm.list) |
+ return; |
+ |
+ if (bmm.list.selectImportedFolder) { |
+ var otherBookmarks = bmm.tree.items[1].items; |
+ var importedFolder = otherBookmarks[otherBookmarks.length - 1]; |
+ navigateTo(importedFolder.bookmarkId) |
+ bmm.list.selectImportedFolder = false |
+ } else { |
+ bmm.list.reload(); |
+ } |
+ } |
+ |
+ if (bmm.tree) { |
+ bmm.treeaddEventListener('load', f); |
+ bmm.tree.reload(); |
+ } |
+ } |
+ |
+ /** |
+ * Adds the listeners for the bookmark model change events. |
+ */ |
+ function addBookmarkModelListeners() { |
+ chrome.bookmarks.onChanged.addListener(handleBookmarkChanged); |
+ chrome.bookmarks.onChildrenReordered.addListener(handleChildrenReordered); |
+ chrome.bookmarks.onCreated.addListener(handleCreated); |
+ chrome.bookmarks.onMoved.addListener(handleMoved); |
+ chrome.bookmarks.onRemoved.addListener(handleRemoved); |
+ chrome.bookmarks.onImportBegan.addListener(handleImportBegan); |
+ chrome.bookmarks.onImportEnded.addListener(handleImportEnded); |
+ }; |
+ |
return { |
contains: contains, |
isFolder: isFolder, |
loadSubtree: loadSubtree, |
- loadTree: loadTree |
+ loadTree: loadTree, |
+ addBookmarkModelListeners: addBookmarkModelListeners |
}; |
+ |
mazda
2011/11/09 04:49:43
Unnecessary empty line.
yoshiki
2011/11/09 15:06:39
Done.
|
}); |