15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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)// require: cr.js 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// require: cr/ui.js 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// require: cr/ui/tree.js 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)(function() { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * A helper function to determine if a node is the root of its type. 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {!Object} node The node to check. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var isTypeRootNode = function(node) { 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return node.PARENT_ID == 'r' && node.UNIQUE_SERVER_TAG != ''; 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * A helper function to determine if a node is a child of the given parent. 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {string} parentId The ID of the parent. 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {!Object} node The node to check. 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var isChildOf = function(parentId, node) { 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return node.PARENT_ID == parentId; 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * A helper function to sort sync nodes. 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Sorts by position index if possible, falls back to sorting by name, and 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * finally sorting by METAHANDLE. 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * If this proves to be slow and expensive, we should experiment with moving 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * this functionality to C++ instead. 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var nodeComparator = function(nodeA, nodeB) { 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (nodeA.hasOwnProperty('positionIndex') && 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) nodeB.hasOwnProperty('positionIndex')) { 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return nodeA.positionIndex - nodeB.positionIndex; 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (nodeA.NON_UNIQUE_NAME != nodeB.NON_UNIQUE_NAME) { 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return nodeA.NON_UNIQUE_NAME.localeCompare(nodeB.NON_UNIQUE_NAME); 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return nodeA.METAHANDLE - nodeB.METAHANDLE; 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Updates the node detail view with the details for the given node. 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {!Object} node The struct representing the node we want to display. 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function updateNodeDetailView(node) { 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var nodeDetailsView = $('node-details'); 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) nodeDetailsView.hidden = false; 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) jstProcess(new JsEvalContext(node.entry_), nodeDetailsView); 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Updates the 'Last refresh time' display. 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {string} The text to display. 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function setLastRefreshTime(str) { 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('node-browser-refresh-time').textContent = str; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates a new sync node tree item. 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {!Object} node The nodeDetails object for the node as returned by 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * chrome.sync.getAllNodes(). 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {cr.ui.TreeItem} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var SyncNodeTreeItem = function(node) { 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var treeItem = new cr.ui.TreeItem(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) treeItem.__proto__ = SyncNodeTreeItem.prototype; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) treeItem.entry_ = node; 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) treeItem.label = node.NON_UNIQUE_NAME; 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (node.IS_DIR) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) treeItem.mayHaveChildren_ = true; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Load children on expand. 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) treeItem.expanded_ = false; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) treeItem.addEventListener('expand', 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) treeItem.handleExpand_.bind(treeItem)); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) treeItem.classList.add('leaf'); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return treeItem; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncNodeTreeItem.prototype = { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: cr.ui.TreeItem.prototype, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Finds the children of this node and appends them to the tree. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleExpand_: function(event) { 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var treeItem = this; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (treeItem.expanded_) { 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) treeItem.expanded_ = true; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var children = treeItem.tree.allNodes.filter( 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) isChildOf.bind(undefined, treeItem.entry_.ID)); 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) children.sort(nodeComparator); 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) children.forEach(function(node) { 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) treeItem.add(new SyncNodeTreeItem(node)); 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Creates a new sync node tree. Technically, it's a forest since it each 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * type has its own root node for its own tree, but it still looks and acts 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * mostly like a tree. 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object=} opt_propertyBag Optional properties. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {cr.ui.Tree} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var SyncNodeTree = cr.ui.define('tree'); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncNodeTree.prototype = { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: cr.ui.Tree.prototype, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorate: function() { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.Tree.prototype.decorate.call(this); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.addEventListener('change', this.handleChange_.bind(this)); 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.allNodes = []; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) populate: function(nodes) { 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var tree = this; 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // We store the full set of nodes in the SyncNodeTree object. 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree.allNodes = nodes; 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var roots = tree.allNodes.filter(isTypeRootNode); 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) roots.sort(nodeComparator); 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) roots.forEach(function(typeRoot) { 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree.add(new SyncNodeTreeItem(typeRoot)); 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleChange_: function(event) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.selectedItem) { 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) updateNodeDetailView(this.selectedItem); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Clears any existing UI state. Useful prior to a refresh. 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function clear() { 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var treeContainer = $('sync-node-tree-container'); 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) while (treeContainer.firstChild) { 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) treeContainer.removeChild(treeContainer.firstChild); 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var nodeDetailsView = $('node-details'); 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) nodeDetailsView.hidden = true; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Fetch the latest set of nodes and refresh the UI. 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function refresh() { 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('node-browser-refresh-button').disabled = true; 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) clear(); 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) setLastRefreshTime('In progress since ' + (new Date()).toLocaleString()); 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch chrome.sync.getAllNodes(function(nodeMap) { 182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Put all nodes into one big list that ignores the type. 183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch var nodes = nodeMap. 184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch map(function(x) { return x.nodes; }). 185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch reduce(function(a, b) { return a.concat(b); }); 186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var treeContainer = $('sync-node-tree-container'); 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var tree = document.createElement('tree'); 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree.setAttribute('id', 'sync-node-tree'); 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree.setAttribute('icon-visibility', 'parent'); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) treeContainer.appendChild(tree); 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cr.ui.decorate(tree, SyncNodeTree); 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree.populate(nodes); 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) setLastRefreshTime((new Date()).toLocaleString()); 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('node-browser-refresh-button').disabled = false; 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) document.addEventListener('DOMContentLoaded', function(e) { 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('node-browser-refresh-button').addEventListener('click', refresh); 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cr.ui.decorate('#sync-node-splitter', cr.ui.Splitter); 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Automatically trigger a refresh the first time this tab is selected. 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('sync-browser-tab').addEventListener('selectedChange', function f(e) { 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.selected) { 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('sync-browser-tab').removeEventListener('selectedChange', f); 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) refresh(); 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)})(); 215