Chromium Code Reviews| Index: chrome/browser/resources/md_bookmarks/store.js |
| diff --git a/chrome/browser/resources/md_bookmarks/store.js b/chrome/browser/resources/md_bookmarks/store.js |
| index f9f50c556ddfd879701828e344e0e274cd291c9c..c0693fe1556f2c73f0d3fd4a7ee52d938054dd8c 100644 |
| --- a/chrome/browser/resources/md_bookmarks/store.js |
| +++ b/chrome/browser/resources/md_bookmarks/store.js |
| @@ -55,9 +55,14 @@ Polymer({ |
| chrome.bookmarks.getTree(function(results) { |
| this.setupStore_(results[0]); |
| }.bind(this)); |
| + // Attach bookmarks API listeners. |
| chrome.bookmarks.onRemoved.addListener(this.onBookmarkRemoved_.bind(this)); |
| + chrome.bookmarks.onChanged.addListener(this.onBookmarkChanged_.bind(this)); |
| }, |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// bookmarks-store, private: |
|
tsergeant
2017/01/09 00:21:05
👍 I like this lots
|
| + |
| /** |
| * @param {BookmarkTreeNode} rootNode |
| * @private |
| @@ -72,32 +77,23 @@ Polymer({ |
| }, |
| /** |
| - * Selects the folder specified by the event and deselects the previously |
| - * selected folder. |
| - * @param {CustomEvent} e |
| + * Initializes the nodes in the bookmarks tree as follows: |
| + * - Populates |idToNodeMap_| with a mapping of all node ids to their |
| + * corresponding BookmarkTreeNode. |
| + * - Sets all the nodes to not selected and open by default. |
| + * @param {BookmarkTreeNode} bookmarkNode |
| * @private |
| */ |
| - onSelectedFolderChanged_: function(e) { |
| - // Deselect the old folder if defined. |
| - if (this.selectedId) |
| - this.set(this.idToNodeMap_[this.selectedId].path + '.isSelected', false); |
| - |
| - var selectedId = /** @type {string} */ (e.detail); |
| - var newFolder = this.idToNodeMap_[selectedId]; |
| - this.set(newFolder.path + '.isSelected', true); |
| - this.selectedId = selectedId; |
| - }, |
| + initNodes_: function(bookmarkNode) { |
| + this.idToNodeMap_[bookmarkNode.id] = bookmarkNode; |
| + if (bookmarkNode.url) |
| + return; |
| - /** |
| - * Handles events that open and close folders. |
| - * @param {CustomEvent} e |
| - * @private |
| - */ |
| - onFolderOpenChanged_: function(e) { |
| - var folder = this.idToNodeMap_[e.detail.id]; |
| - this.set(folder.path + '.isOpen', e.detail.open); |
| - if (!folder.isOpen && this.isAncestorOfSelected_(folder)) |
| - this.fire('selected-folder-changed', folder.id); |
| + bookmarkNode.isSelected = false; |
| + bookmarkNode.isOpen = true; |
| + for (var i = 0; i < bookmarkNode.children.length; i++) { |
| + this.initNodes_(bookmarkNode.children[i]); |
| + } |
| }, |
| /** |
| @@ -117,6 +113,43 @@ Polymer({ |
| }, |
| /** |
| + * Stores the path from the store to a node inside the node. |
| + * @param {BookmarkTreeNode} bookmarkNode |
| + * @param {number} startIndex |
| + * @private |
| + */ |
| + generatePaths_: function(bookmarkNode, startIndex) { |
| + if (!bookmarkNode.children) |
| + return; |
| + |
| + for (var i = startIndex; i < bookmarkNode.children.length; i++) { |
| + bookmarkNode.children[i].path = bookmarkNode.path + '.children.#' + i; |
| + this.generatePaths_(bookmarkNode.children[i], 0); |
| + } |
| + }, |
| + |
| + /** |
| + * Remove all descendants of a given node from the map. |
| + * @param {string} id |
| + * @private |
| + */ |
| + removeDescendantsFromMap_: function(id) { |
| + var node = this.idToNodeMap_[id]; |
| + if (!node) |
| + return; |
| + |
| + if (node.children) { |
| + for (var i = 0; i < node.children.length; i++) |
| + this.removeDescendantsFromMap_(node.children[i].id); |
| + } |
| + delete this.idToNodeMap_[id]; |
| + }, |
| + |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// bookmarks-store, bookmarks API event listeners: |
| + |
|
tsergeant
2017/01/09 00:21:04
Just one blank line here
jiaxi
2017/01/09 02:17:46
Done.
|
| + |
| + /** |
| * Callback for when a bookmark node is removed. |
| * If a folder is selected or is an ancestor of a selected folder, the parent |
| * of the removed folder will be selected. |
| @@ -136,55 +169,46 @@ Polymer({ |
| }, |
| /** |
| - * Initializes the nodes in the bookmarks tree as follows: |
| - * - Populates |idToNodeMap_| with a mapping of all node ids to their |
| - * corresponding BookmarkTreeNode. |
| - * - Sets all the nodes to not selected and open by default. |
| - * @param {BookmarkTreeNode} bookmarkNode |
| - * @private |
| + * Called when the title of a bookmark changes. |
| + * @param {string} id The id of changed bookmark node. |
| + * @param {!Object} changeInfo |
| */ |
| - initNodes_: function(bookmarkNode) { |
| - this.idToNodeMap_[bookmarkNode.id] = bookmarkNode; |
| - if (bookmarkNode.url) |
| - return; |
| - |
| - bookmarkNode.isSelected = false; |
| - bookmarkNode.isOpen = true; |
| - for (var i = 0; i < bookmarkNode.children.length; i++) { |
| - this.initNodes_(bookmarkNode.children[i]); |
| - } |
| + onBookmarkChanged_: function(id, changeInfo) { |
| + if (changeInfo.title) |
| + this.set(this.idToNodeMap_[id].path + '.title', changeInfo.title); |
| + if (changeInfo.url) |
| + this.set(this.idToNodeMap_[id].path + '.url', changeInfo.url); |
| }, |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// bookmarks-store, bookmarks app event listeners: |
| + |
| /** |
| - * Stores the path from the store to a node inside the node. |
| - * @param {BookmarkTreeNode} bookmarkNode |
| - * @param {number} startIndex |
| + * Selects the folder specified by the event and deselects the previously |
| + * selected folder. |
| + * @param {CustomEvent} e |
| * @private |
| */ |
| - generatePaths_: function(bookmarkNode, startIndex) { |
| - if (!bookmarkNode.children) |
| - return; |
| + onSelectedFolderChanged_: function(e) { |
| + // Deselect the old folder if defined. |
| + if (this.selectedId) |
| + this.set(this.idToNodeMap_[this.selectedId].path + '.isSelected', false); |
| - for (var i = startIndex; i < bookmarkNode.children.length; i++) { |
| - bookmarkNode.children[i].path = bookmarkNode.path + '.children.#' + i; |
| - this.generatePaths_(bookmarkNode.children[i], 0); |
| - } |
| + var selectedId = /** @type {string} */ (e.detail); |
| + var newFolder = this.idToNodeMap_[selectedId]; |
| + this.set(newFolder.path + '.isSelected', true); |
| + this.selectedId = selectedId; |
| }, |
| /** |
| - * Remove all descendants of a given node from the map. |
| - * @param {string} id |
| + * Handles events that open and close folders. |
| + * @param {CustomEvent} e |
| * @private |
| */ |
| - removeDescendantsFromMap_: function(id) { |
| - var node = this.idToNodeMap_[id]; |
| - if (!node) |
| - return; |
| - |
| - if (node.children) { |
| - for (var i = 0; i < node.children.length; i++) |
| - this.removeDescendantsFromMap_(node.children[i].id); |
| - } |
| - delete this.idToNodeMap_[id]; |
| - } |
| + onFolderOpenChanged_: function(e) { |
| + var folder = this.idToNodeMap_[e.detail.id]; |
| + this.set(folder.path + '.isOpen', e.detail.open); |
| + if (!folder.isOpen && this.isAncestorOfSelected_(folder)) |
| + this.fire('selected-folder-changed', folder.id); |
| + }, |
| }); |