From 1b35b1c6b1ecb7c88b6d060de3cab0372928b4f1 Mon Sep 17 00:00:00 2001 From: Phil Crosby Date: Fri, 4 May 2012 23:56:25 -0700 Subject: Make the bookmark flattening iterative; return the bookmarks instead of modifying an argument. --- lib/completion.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'lib') 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)); -- cgit v1.2.3