| Index: components/sync_driver/resources/sync_node_browser.js
|
| diff --git a/components/sync_driver/resources/sync_node_browser.js b/components/sync_driver/resources/sync_node_browser.js
|
| deleted file mode 100644
|
| index f236278aa83b019b05e4d4b73266b907aa37b970..0000000000000000000000000000000000000000
|
| --- a/components/sync_driver/resources/sync_node_browser.js
|
| +++ /dev/null
|
| @@ -1,233 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -// require: cr.js
|
| -// require: cr/ui.js
|
| -// require: cr/ui/tree.js
|
| -
|
| -(function() {
|
| - /**
|
| - * A helper function to determine if a node is the root of its type.
|
| - *
|
| - * @param {!Object} node The node to check.
|
| - */
|
| - var isTypeRootNode = function(node) {
|
| - return node.PARENT_ID == 'r' && node.UNIQUE_SERVER_TAG != '';
|
| - };
|
| -
|
| - /**
|
| - * A helper function to determine if a node is a child of the given parent.
|
| - *
|
| - * @param {!Object} parent node.
|
| - * @param {!Object} node The node to check.
|
| - */
|
| - var isChildOf = function(parentNode, node) {
|
| - if (node.PARENT_ID != '') {
|
| - return node.PARENT_ID == parentNode.ID;
|
| - }
|
| - else {
|
| - return node.modelType == parentNode.modelType;
|
| - }
|
| - };
|
| -
|
| - /**
|
| - * A helper function to sort sync nodes.
|
| - *
|
| - * Sorts by position index if possible, falls back to sorting by name, and
|
| - * finally sorting by METAHANDLE.
|
| - *
|
| - * If this proves to be slow and expensive, we should experiment with moving
|
| - * this functionality to C++ instead.
|
| - */
|
| - var nodeComparator = function(nodeA, nodeB) {
|
| - if (nodeA.hasOwnProperty('positionIndex') &&
|
| - nodeB.hasOwnProperty('positionIndex')) {
|
| - return nodeA.positionIndex - nodeB.positionIndex;
|
| - } else if (nodeA.NON_UNIQUE_NAME != nodeB.NON_UNIQUE_NAME) {
|
| - return nodeA.NON_UNIQUE_NAME.localeCompare(nodeB.NON_UNIQUE_NAME);
|
| - } else {
|
| - return nodeA.METAHANDLE - nodeB.METAHANDLE;
|
| - }
|
| - };
|
| -
|
| - /**
|
| - * Updates the node detail view with the details for the given node.
|
| - * @param {!Object} node The struct representing the node we want to display.
|
| - */
|
| - function updateNodeDetailView(node) {
|
| - var nodeDetailsView = $('node-details');
|
| - nodeDetailsView.hidden = false;
|
| - jstProcess(new JsEvalContext(node.entry_), nodeDetailsView);
|
| - }
|
| -
|
| - /**
|
| - * Updates the 'Last refresh time' display.
|
| - * @param {string} The text to display.
|
| - */
|
| - function setLastRefreshTime(str) {
|
| - $('node-browser-refresh-time').textContent = str;
|
| - }
|
| -
|
| - /**
|
| - * Creates a new sync node tree item.
|
| - *
|
| - * @constructor
|
| - * @param {!Object} node The nodeDetails object for the node as returned by
|
| - * chrome.sync.getAllNodes().
|
| - * @extends {cr.ui.TreeItem}
|
| - */
|
| - var SyncNodeTreeItem = function(node) {
|
| - var treeItem = new cr.ui.TreeItem();
|
| - treeItem.__proto__ = SyncNodeTreeItem.prototype;
|
| -
|
| - treeItem.entry_ = node;
|
| - treeItem.label = node.NON_UNIQUE_NAME;
|
| - if (node.IS_DIR) {
|
| - treeItem.mayHaveChildren_ = true;
|
| -
|
| - // Load children on expand.
|
| - treeItem.expanded_ = false;
|
| - treeItem.addEventListener('expand',
|
| - treeItem.handleExpand_.bind(treeItem));
|
| - } else {
|
| - treeItem.classList.add('leaf');
|
| - }
|
| - return treeItem;
|
| - };
|
| -
|
| - SyncNodeTreeItem.prototype = {
|
| - __proto__: cr.ui.TreeItem.prototype,
|
| -
|
| - /**
|
| - * Finds the children of this node and appends them to the tree.
|
| - */
|
| - handleExpand_: function(event) {
|
| - var treeItem = this;
|
| -
|
| - if (treeItem.expanded_) {
|
| - return;
|
| - }
|
| - treeItem.expanded_ = true;
|
| -
|
| - var children = treeItem.tree.allNodes.filter(
|
| - isChildOf.bind(undefined, treeItem.entry_));
|
| - children.sort(nodeComparator);
|
| -
|
| - children.forEach(function(node) {
|
| - treeItem.add(new SyncNodeTreeItem(node));
|
| - });
|
| - },
|
| - };
|
| -
|
| - /**
|
| - * Creates a new sync node tree. Technically, it's a forest since it each
|
| - * type has its own root node for its own tree, but it still looks and acts
|
| - * mostly like a tree.
|
| - *
|
| - * @param {Object=} opt_propertyBag Optional properties.
|
| - * @constructor
|
| - * @extends {cr.ui.Tree}
|
| - */
|
| - var SyncNodeTree = cr.ui.define('tree');
|
| -
|
| - SyncNodeTree.prototype = {
|
| - __proto__: cr.ui.Tree.prototype,
|
| -
|
| - decorate: function() {
|
| - cr.ui.Tree.prototype.decorate.call(this);
|
| - this.addEventListener('change', this.handleChange_.bind(this));
|
| - this.allNodes = [];
|
| - },
|
| -
|
| - populate: function(nodes) {
|
| - var tree = this;
|
| -
|
| - // We store the full set of nodes in the SyncNodeTree object.
|
| - tree.allNodes = nodes;
|
| -
|
| - var roots = tree.allNodes.filter(isTypeRootNode);
|
| - roots.sort(nodeComparator);
|
| -
|
| - roots.forEach(function(typeRoot) {
|
| - tree.add(new SyncNodeTreeItem(typeRoot));
|
| - });
|
| - },
|
| -
|
| - handleChange_: function(event) {
|
| - if (this.selectedItem) {
|
| - updateNodeDetailView(this.selectedItem);
|
| - }
|
| - }
|
| - };
|
| -
|
| - /**
|
| - * Clears any existing UI state. Useful prior to a refresh.
|
| - */
|
| - function clear() {
|
| - var treeContainer = $('sync-node-tree-container');
|
| - while (treeContainer.firstChild) {
|
| - treeContainer.removeChild(treeContainer.firstChild);
|
| - }
|
| -
|
| - var nodeDetailsView = $('node-details');
|
| - nodeDetailsView.hidden = true;
|
| - }
|
| -
|
| - /**
|
| - * Fetch the latest set of nodes and refresh the UI.
|
| - */
|
| - function refresh() {
|
| - $('node-browser-refresh-button').disabled = true;
|
| -
|
| - clear();
|
| - setLastRefreshTime('In progress since ' + (new Date()).toLocaleString());
|
| -
|
| - chrome.sync.getAllNodes(function(nodeMap) {
|
| - // Put all nodes into one big list that ignores the type.
|
| - var nodes = nodeMap.
|
| - map(function(x) { return x.nodes; }).
|
| - reduce(function(a, b) { return a.concat(b); });
|
| -
|
| - var treeContainer = $('sync-node-tree-container');
|
| - var tree = document.createElement('tree');
|
| - tree.setAttribute('id', 'sync-node-tree');
|
| - tree.setAttribute('icon-visibility', 'parent');
|
| - treeContainer.appendChild(tree);
|
| -
|
| - cr.ui.decorate(tree, SyncNodeTree);
|
| - tree.populate(nodes);
|
| -
|
| - setLastRefreshTime((new Date()).toLocaleString());
|
| - $('node-browser-refresh-button').disabled = false;
|
| - });
|
| - }
|
| -
|
| - document.addEventListener('DOMContentLoaded', function(e) {
|
| - $('node-browser-refresh-button').addEventListener('click', refresh);
|
| - var Splitter = cr.ui.Splitter;
|
| - var customSplitter = cr.ui.define('div');
|
| -
|
| - customSplitter.prototype = {
|
| - __proto__: Splitter.prototype,
|
| -
|
| - handleSplitterDragEnd: function(e) {
|
| - Splitter.prototype.handleSplitterDragEnd.apply(this, arguments);
|
| - var treeElement = $("sync-node-tree-container");
|
| - var newWidth = parseFloat(treeElement.style.width);
|
| - treeElement.style.minWidth = Math.max(newWidth, 50) + "px";
|
| - }
|
| - };
|
| -
|
| - customSplitter.decorate($("sync-node-splitter"));
|
| -
|
| - // Automatically trigger a refresh the first time this tab is selected.
|
| - $('sync-browser-tab').addEventListener('selectedChange', function f(e) {
|
| - if (this.selected) {
|
| - $('sync-browser-tab').removeEventListener('selectedChange', f);
|
| - refresh();
|
| - }
|
| - });
|
| - });
|
| -
|
| -})();
|
|
|