15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('bmm', function() { 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether a node contains another node. 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * TODO(yosin): Once JavaScript style guide is updated and linter follows 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * that, we'll remove useless documentations for |parent| and |descendant|. 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * TODO(yosin): bmm.contains() should be method of BookmarkTreeNode. 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {!BookmarkTreeNode} parent . 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {!BookmarkTreeNode} descendant . 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} Whether the parent contains the descendant. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function contains(parent, descendant) { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (descendant.parentId == parent.id) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the bmm.treeLookup contains all folders 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var parentTreeItem = bmm.treeLookup[descendant.parentId]; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!parentTreeItem || !parentTreeItem.bookmarkNode) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.contains(parent, parentTreeItem.bookmarkNode); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!BookmarkTreeNode} node The node to test. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} Whether a bookmark node is a folder. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function isFolder(node) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !('url' in node); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var loadingPromises = {}; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Promise version of chrome.bookmarkManagerPrivate.getSubtree. 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {string} id . 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {boolean} foldersOnly . 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @return {!Promise.<!Array.<!BookmarkTreeNode>>} . 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function getSubtreePromise(id, foldersOnly) { 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return new Promise(function(resolve) { 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome.bookmarkManagerPrivate.getSubtree(id, foldersOnly, resolve); 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Loads a subtree of the bookmark tree and returns a {@code Promise} that 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * will be fulfilled when done. This reuses multiple loads so that we do not 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * load the same subtree more than once at the same time. 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @return {!Promise.<!BookmarkTreeNode>} The future promise for the load. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function loadSubtree(id) { 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!loadingPromises[id]) { 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) loadingPromises[id] = getSubtreePromise(id, false).then(function(nodes) { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete loadingPromises[id]; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return nodes && nodes[0]; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return loadingPromises[id]; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Loads the entire bookmark tree and returns a {@code Promise} that will 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * be fulfilled when done. This reuses multiple loads so that we do not load 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the same tree more than once at the same time. 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @return {!Promise.<Node>} The future promise for the load. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function loadTree() { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loadSubtree(''); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var bookmarkCache = { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Removes the cached item from both the list and tree lookups. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remove: function(id) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var treeItem = bmm.treeLookup[id]; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (treeItem) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var items = treeItem.items; // is an HTMLCollection 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < items.length; ++i) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var item = items[i]; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var bookmarkNode = item.bookmarkNode; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete bmm.treeLookup[bookmarkNode.id]; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete bmm.treeLookup[id]; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the underlying bookmark node for the tree items and list items by 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * querying the bookmark backend. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} id The id of the node to update the children for. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Function=} opt_f A funciton to call when done. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateChildren: function(id, opt_f) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function updateItem(bookmarkNode) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var treeItem = bmm.treeLookup[bookmarkNode.id]; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (treeItem) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) treeItem.bookmarkNode = bookmarkNode; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.getChildren(id, function(children) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (children) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) children.forEach(updateItem); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (opt_f) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt_f(children); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when the title of a bookmark changes. 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {string} id The id of changed bookmark node. 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {!Object} changeInfo The information about how the node changed. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function handleBookmarkChanged(id, changeInfo) { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.tree) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.tree.handleBookmarkChanged(id, changeInfo); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.list) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.list.handleBookmarkChanged(id, changeInfo); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Callback for when the user reorders by title. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} id The id of the bookmark folder that was reordered. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!Object} reorderInfo The information about how the items where 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * reordered. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function handleChildrenReordered(id, reorderInfo) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.tree) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.tree.handleChildrenReordered(id, reorderInfo); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.list) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.list.handleChildrenReordered(id, reorderInfo); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bookmarkCache.updateChildren(id); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Callback for when a bookmark node is created. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} id The id of the newly created bookmark node. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!Object} bookmarkNode The new bookmark node. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function handleCreated(id, bookmarkNode) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.list) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.list.handleCreated(id, bookmarkNode); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.tree) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.tree.handleCreated(id, bookmarkNode); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bookmarkCache.updateChildren(bookmarkNode.parentId); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Callback for when a bookmark node is moved. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} id The id of the moved bookmark node. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!Object} moveInfo The information about move. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function handleMoved(id, moveInfo) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.list) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.list.handleMoved(id, moveInfo); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.tree) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.tree.handleMoved(id, moveInfo); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bookmarkCache.updateChildren(moveInfo.parentId); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (moveInfo.parentId != moveInfo.oldParentId) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bookmarkCache.updateChildren(moveInfo.oldParentId); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Callback for when a bookmark node is removed. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} id The id of the removed bookmark node. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!Object} bookmarkNode The information about removed. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function handleRemoved(id, removeInfo) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.list) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.list.handleRemoved(id, removeInfo); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.tree) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.tree.handleRemoved(id, removeInfo); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bookmarkCache.updateChildren(removeInfo.parentId); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bookmarkCache.remove(id); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Callback for when all bookmark nodes have been deleted. 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) function handleRemoveAll() { 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Reload the list and the tree. 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (bmm.list) 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bmm.list.reload(); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (bmm.tree) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bmm.tree.reload(); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Callback for when importing bookmark is started. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function handleImportBegan() { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onCreated.removeListener(handleCreated); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onChanged.removeListener(handleBookmarkChanged); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Callback for when importing bookmark node is finished. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function handleImportEnded() { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When importing is done we reload the tree and the list. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function f() { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.tree.removeEventListener('load', f); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onCreated.addListener(handleCreated); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onChanged.addListener(handleBookmarkChanged); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!bmm.list) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(estade): this should navigate to the newly imported folder, which 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // may be the bookmark bar if there were no previous bookmarks. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.list.reload(); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bmm.tree) { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.tree.addEventListener('load', f); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bmm.tree.reload(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds the listeners for the bookmark model change events. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function addBookmarkModelListeners() { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onChanged.addListener(handleBookmarkChanged); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onChildrenReordered.addListener(handleChildrenReordered); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onCreated.addListener(handleCreated); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onMoved.addListener(handleMoved); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onRemoved.addListener(handleRemoved); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onImportBegan.addListener(handleImportBegan); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.bookmarks.onImportEnded.addListener(handleImportEnded); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contains: contains, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isFolder: isFolder, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadSubtree: loadSubtree, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadTree: loadTree, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addBookmarkModelListeners: addBookmarkModelListeners 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 250