diff options
| author | Phil Crosby | 2012-05-04 23:56:25 -0700 |
|---|---|---|
| committer | Phil Crosby | 2012-05-05 18:32:13 -0700 |
| commit | 1b35b1c6b1ecb7c88b6d060de3cab0372928b4f1 (patch) | |
| tree | 473ed34aa532ec7b793d10632e1eb6db9011e42b /lib | |
| parent | c65c9d1724a7b97f49a701512711df18e182bc79 (diff) | |
| download | vimium-1b35b1c6b1ecb7c88b6d060de3cab0372928b4f1.tar.bz2 | |
Make the bookmark flattening iterative; return the bookmarks instead of modifying an argument.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/completion.js | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/lib/completion.js b/lib/completion.js index 1f7aa2b8..fefa92fa 100644 --- a/lib/completion.js +++ b/lib/completion.js @@ -117,20 +117,23 @@ var completion = (function() { /** A fuzzy bookmark completer */ var FuzzyBookmarkCompletionSource = AsyncCompletionSource.extend({ - traverseTree: function(bookmarks, results) { - bookmarks.forEach(function(bookmark) { + // Traverses the bookmark hierarhcy and retuns a list of all bookmarks in the tree. + traverseBookmarkTree: function(bookmarks) { + var results = []; + var toVisit = bookmarks; + while (toVisit.length > 0) { + var bookmark = toVisit.shift(); results.push(bookmark); - if (bookmark.children === undefined) - return; - this.traverseTree(bookmark.children, results); - }.proxy(this)); + if (bookmark.children) + toVisit.push.apply(toVisit, bookmark.children); + } + return results; }, refresh: function() { this.reset(); chrome.bookmarks.getTree(function(bookmarks) { - var results = []; - this.traverseTree(bookmarks, results); + var results = this.traverseBookmarkTree(bookmarks); var validResults = results.filter(function(b) { return b.url !== undefined; }); var matches = validResults.map( function(bookmark) { return this.createInternalMatch("bookmark", bookmark); }.proxy(this)); |
