diff options
| author | Phil Crosby | 2012-04-29 22:05:11 -0700 |
|---|---|---|
| committer | Phil Crosby | 2012-04-29 22:05:11 -0700 |
| commit | 7b4225050d34dd1a58fe20b782c81c90bcf0d0e9 (patch) | |
| tree | e98355e8fefa6b3e09e3ada226f30384412522ee | |
| parent | e1caed5b35997302d6b3ac14137f8374216057c6 (diff) | |
| download | vimium-7b4225050d34dd1a58fe20b782c81c90bcf0d0e9.tar.bz2 | |
Shorten the declaration of the domain completer.
| -rw-r--r-- | lib/completion.js | 119 |
1 files changed, 58 insertions, 61 deletions
diff --git a/lib/completion.js b/lib/completion.js index 3209a2f4..c46723c7 100644 --- a/lib/completion.js +++ b/lib/completion.js @@ -186,75 +186,72 @@ var completion = (function() { } /** A domain completer as it is provided by Chrome's omnibox */ - var DomainCompletionSource = function() { - this.domains = null; - } + var DomainCompletionSource = Class.extend({ + domains: null, - DomainCompletionSource.prototype.withDomains = function(callback) { - var self = this; - function buildResult() { - return Object.keys(self.domains).map(function(dom) { - return [dom, self.domains[dom]]; - }); - } - if (self.domains !== null) - return callback(buildResult()); + withDomains: function(callback) { + var self = this; + function buildResult() { + return Object.keys(self.domains).map(function(dom) { + return [dom, self.domains[dom]]; + }); + } + if (self.domains !== null) + return callback(buildResult()); - self.domains = {}; + self.domains = {}; - function processDomain(domain, https) { - // non-www version is preferrable, so check if we have it already - if (domain.indexOf('www.') == 0 && self.domains.hasOwnProperty(domain.slice(4))) - domain = domain.slice(4); + function processDomain(domain, https) { + // non-www version is preferrable, so check if we have it already + if (domain.indexOf('www.') == 0 && self.domains.hasOwnProperty(domain.slice(4))) + domain = domain.slice(4); - // HTTPS is preferrable - https = https || self.domains[domain] || self.domains['www.' + domain]; + // HTTPS is preferrable + https = https || self.domains[domain] || self.domains['www.' + domain]; - self.domains[domain] = !!https; - delete self.domains['www.' + domain]; - } - function processUrl(url) { - parts = url.split('/'); - processDomain(parts[2], parts[0] == 'https:'); - } + self.domains[domain] = !!https; + delete self.domains['www.' + domain]; + } + function processUrl(url) { + parts = url.split('/'); + processDomain(parts[2], parts[0] == 'https:'); + } - historyCache.use(function(history) { - history.forEach(function(item) { - processUrl(item.url); + historyCache.use(function(history) { + history.forEach(function(item) { processUrl(item.url); }); }); - }); - chrome.history.onVisited.addListener(function(item) { - processUrl(item.url); - }); + chrome.history.onVisited.addListener(function(item) { processUrl(item.url); }); - callback(buildResult()); - } + callback(buildResult()); + }, - DomainCompletionSource.prototype.refresh = function() { } - DomainCompletionSource.prototype.filter = function(query, callback) { - var best = null; - this.withDomains(function(domains) { - var bestOffset = 1000; - domains.forEach(function(result) { - var domain = result[0]; - var protocol = result[1] ? 'https' : 'http'; - - var offset = domain.indexOf(query); - if (offset < 0 || offset >= bestOffset) - return; - - // found a new optimum - bestOffset = offset; - best = new LazyCompletion(-1.5, function() { - return { - html: createCompletionHtml('site', domain), - action: {func: 'completion.createActionOpenUrl', args: [protocol + '://' + domain]}, - }}); + refresh: function() { }, + + filter: function(query, callback) { + var best = null; + this.withDomains(function(domains) { + var bestOffset = 1000; + domains.forEach(function(result) { + var domain = result[0]; + var protocol = result[1] ? 'https' : 'http'; + + var offset = domain.indexOf(query); + if (offset < 0 || offset >= bestOffset) + return; + + // found a new optimum + bestOffset = offset; + best = new LazyCompletion(-1.5, function() { + return { + html: createCompletionHtml('site', domain), + action: {func: 'completion.createActionOpenUrl', args: [protocol + '://' + domain]}, + }}); + }); }); - }); - callback(best ? [best] : []); - } + callback(best ? [best] : []); + } + }); /** Get completion results from the background page */ var BackgroundCompleter = function(name) { @@ -292,10 +289,9 @@ var completion = (function() { this.sources = sources; this.queryThreshold = queryThreshold; } + MultiCompleter.prototype = { - refresh: function() { - this.sources.forEach(function(x) { x.refresh(); }); - }, + refresh: function() { this.sources.forEach(function(x) { x.refresh(); }); }, filter: function(query, maxResults, callback) { if (query.length < this.queryThreshold) { @@ -321,6 +317,7 @@ var completion = (function() { }); } } + /** Singleton object that provides helpers and caching for fuzzy completion. */ var fuzzyMatcher = (function() { var self = {}; |
