diff options
Diffstat (limited to 'lib/completion.js')
| -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)); |
