summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 16:15:23 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 16:15:23 +0000
commit2892f19940a8dd68fba75a5d184c19f57bea418d (patch)
treeb6ec2f1598bcfdcaebaa41c157b4f6bd7ab63f45
parent8f0efc81f4590bc20a8acb8e2f3d131460ca1bd5 (diff)
downloadchromium_src-2892f19940a8dd68fba75a5d184c19f57bea418d.zip
chromium_src-2892f19940a8dd68fba75a5d184c19f57bea418d.tar.gz
chromium_src-2892f19940a8dd68fba75a5d184c19f57bea418d.tar.bz2
Changes 'Open all' bookmarks to not recurse through nested folders.
BUG=20781 TEST=see bug R=arv@chromium.org Review URL: http://codereview.chromium.org/6801017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80787 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/resources/bookmark_manager/js/bmm/tree_iterator.js113
-rw-r--r--chrome/browser/resources/bookmark_manager/js/bmm/tree_iterator_test.html94
-rw-r--r--chrome/browser/resources/bookmark_manager/main.html20
3 files changed, 10 insertions, 217 deletions
diff --git a/chrome/browser/resources/bookmark_manager/js/bmm/tree_iterator.js b/chrome/browser/resources/bookmark_manager/js/bmm/tree_iterator.js
deleted file mode 100644
index 042f24f..0000000
--- a/chrome/browser/resources/bookmark_manager/js/bmm/tree_iterator.js
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright (c) 2010 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.
-
-cr.define('bmm', function() {
- /**
- * An inorder (document order) iterator for iterating over a bookmark tree.
- *
- * <pre>
- * var it = new TreeIterator(node);
- * while (it.moveNext()) {
- * print(it.current.title);
- * }
- * </pre>
- *
- * @param {!BookmarkTreeNode} node The node to start at.
- * @constructor
- */
- function TreeIterator(node) {
- this.current_ = node;
- this.parentStack_ = [];
- this.indexStack_ = [];
- }
-
- /**
- * Helper function for {@code TreeIterator.prototype.next}. This returns the
- * next node in document order.
- * @param {BookmarkTreeNode} node The current node.
- * @param {!Array.<!BookmarkTreeNode>} parents A stack of parents.
- * @param {!Array.<number>} index A stack of indexes.
- * @return {BookmarkTreeNode} The next node or null if no more nodes can be
- * found.
- */
- function getNext(node, parents, index) {
- var i, p;
-
- if (!node)
- return null;
-
- // If the node has children return first child.
- if (node.children && node.children.length) {
- parents.push(node);
- index.push(0);
- return node.children[0];
- }
-
- if (!parents.length)
- return null;
-
- // Walk up the parent stack until we find a node that has a next sibling.
- while (node) {
- p = parents[parents.length - 1];
- if (!p)
- return null;
- i = index[index.length - 1];
- if (i + 1 < p.children.length)
- break;
- node = parents.pop();
- index.pop();
- }
-
- // Walked out of subtree.
- if (!parents.length || !node)
- return null;
-
- // Return next child.
- i = ++index[index.length - 1];
- p = parents[parents.length - 1];
- return p.children[i];
- }
-
- TreeIterator.prototype = {
- /**
- * Whether the next move will be the first move.
- * @type {boolean}
- * @private
- */
- first_: true,
-
- /**
- * Moves the iterator to the next item.
- * @return {boolean} Whether we succeeded moving to the next item. This
- * returns false when we have moved off the end of the iterator.
- */
- moveNext: function() {
- // The first call to this should move us to the first node.
- if (this.first_) {
- this.first_ = false;
- return true;
- }
- this.current_ = getNext(this.current_, this.parentStack_,
- this.indexStack_);
-
- return !!this.current_;
- },
-
- /**
- * The current item. This throws an exception if trying to access after
- * {@code moveNext} has returned false or before {@code moveNext} has been
- * called.
- * @type {!BookmarkTreeNode}
- */
- get current() {
- if (!this.current_ || this.first_)
- throw Error('No such element');
- return this.current_;
- }
- };
-
- return {
- TreeIterator: TreeIterator
- };
-});
diff --git a/chrome/browser/resources/bookmark_manager/js/bmm/tree_iterator_test.html b/chrome/browser/resources/bookmark_manager/js/bmm/tree_iterator_test.html
deleted file mode 100644
index 543ef73..0000000
--- a/chrome/browser/resources/bookmark_manager/js/bmm/tree_iterator_test.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<!-- TODO(arv): Check in Closue unit tests and make this run as part of the
- tests -->
-<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
-<script src="../cr.js"></script>
-<script src="treeiterator.js"></script>
-<script>
-
-goog.require('goog.testing.jsunit');
-
-</script>
-</head>
-<body>
-<script>
-
-const TreeIterator = bmm.TreeIterator;
-
-var tree = {
- id: 0,
- children: [
- {
- id: 1,
- children: [
- {id: 2},
- {id: 3, children: []}
- ]
- },
- {id: 4},
- {id: 5}
- ]
-};
-
-function testIteration() {
- var it = new TreeIterator(tree);
- var expextedIds = [0, 1, 2, 3, 4, 5];
- var i = 0;
- while (it.moveNext()) {
- var node = it.current;
- assertEquals(expextedIds[i], node.id);
- i++;
- }
-}
-
-function testIteration2() {
- var it = new TreeIterator(tree.children[0]);
- var expextedIds = [1, 2, 3];
- var i = 0;
- while (it.moveNext()) {
- var node = it.current;
- assertEquals(expextedIds[i], node.id);
- i++;
- }
-}
-
-function testIteration3() {
- var it = new TreeIterator(tree.children[1]);
- var expextedIds = [4];
- var i = 0;
- while (it.moveNext()) {
- var node = it.current;
- assertEquals(expextedIds[i], node.id);
- i++;
- }
-}
-
-function testThrowsAfterEnd() {
- // Same as testIteration3
- var it = new TreeIterator(tree.children[1]);
- var expextedIds = [4];
- var i = 0;
- while (it.moveNext()) {
- var node = it.current;
- assertEquals(expextedIds[i], node.id);
- i++;
- }
-
- assertThrows(function() {
- it.current;
- });
-}
-
-function testThrowsBeforeMoveNext() {
- // Same as testIteration3
- var it = new TreeIterator(tree);
- assertThrows(function() {
- it.current;
- });
-}
-
-</script>
-</body>
-</html>
diff --git a/chrome/browser/resources/bookmark_manager/main.html b/chrome/browser/resources/bookmark_manager/main.html
index 556b7c7..4de6c54 100644
--- a/chrome/browser/resources/bookmark_manager/main.html
+++ b/chrome/browser/resources/bookmark_manager/main.html
@@ -45,7 +45,6 @@ found in the LICENSE file.
<script src="chrome://resources/js/local_strings.js"></script>
<script src="chrome://resources/js/i18n_template.js"></script>
-<script src="js/bmm/tree_iterator.js"></script>
<script src="js/bmm.js"></script>
<script src="js/bmm/bookmark_list.js"></script>
<script src="js/bmm/bookmark_tree.js"></script>
@@ -1072,9 +1071,8 @@ function updateOpenCommands(e, command) {
var multiple = selectionCount != 1 || isFolder;
function hasBookmarks(node) {
- var it = new bmm.TreeIterator(node);
- while (it.moveNext()) {
- if (!bmm.isFolder(it.current))
+ for (var i = 0; i < node.children.length; i++) {
+ if (!bmm.isFolder(node.children[i]))
return true;
}
return false;
@@ -1449,13 +1447,15 @@ function openBookmarks(kind) {
var urls = [];
- // Adds the node and all the descendants
+ // Adds the node and all its children.
function addNodes(node) {
- var it = new bmm.TreeIterator(node);
- while (it.moveNext()) {
- var n = it.current;
- if (!bmm.isFolder(n))
- urls.push(n.url);
+ if (node.children) {
+ node.children.forEach(function(child) {
+ if (!bmm.isFolder(child))
+ urls.push(child.url);
+ });
+ } else {
+ urls.push(node.url);
}
}