Chromium Code Reviews| 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.
|
| }); |