# HG changeset patch # User Atul Varma # Date 1238200265 25200 # Node ID abe54fcda16c357eef5526a8a4d1a2652d8f6203 # Parent c894236602724bfd1b9080050ecb98c295534a75 Suggestions for the 'go' command now show up in the preview area rather than as noun suggestions, since async noun suggestions aren't very mature and suggestions don't have much display room. diff -r c89423660272 -r abe54fcda16c chromeless-browsing/chromeless.js --- a/chromeless-browsing/chromeless.js Fri Mar 27 16:43:18 2009 -0700 +++ b/chromeless-browsing/chromeless.js Fri Mar 27 17:31:05 2009 -0700 @@ -1,118 +1,70 @@ -var noun_type_url = { - _name: "url", - _getHistoryLinks: function(partialSearch, onSearchComplete) { - function AutoCompleteInput(aSearches) { - this.searches = aSearches; - } - AutoCompleteInput.prototype = { - constructor: AutoCompleteInput, - searches: null, - minResultsForPopup: 0, - timeout: 10, - searchParam: "", - textValue: "", - disableAutoComplete: false, - completeDefaultIndex: false, - get searchCount() { - return this.searches.length; - }, - getSearchAt: function(aIndex) { - return this.searches[aIndex]; - }, - onSearchBegin: function() {}, - onSearchComplete: function() {}, - popupOpen: false, - popup: { - setSelectedIndex: function(aIndex) {}, - invalidate: function() {}, - // nsISupports implementation - QueryInterface: function(iid) { - if (iid.equals(Ci.nsISupports) || - iid.equals(Ci.nsIAutoCompletePopup)) - return this; - throw Components.results.NS_ERROR_NO_INTERFACE; - } - }, - // nsISupports implementation - QueryInterface: function(iid) { - if (iid.equals(Ci.nsISupports) || - iid.equals(Ci.nsIAutoCompleteInput)) - return this; - throw Components.results.NS_ERROR_NO_INTERFACE; - } - }; - - var controller = Cc["@mozilla.org/autocomplete/controller;1"] - .getService(Ci.nsIAutoCompleteController); - var input = new AutoCompleteInput(["history"]); - controller.input = input; - input.onSearchComplete = function() { - onSearchComplete(controller); - }; - - controller.startSearch(partialSearch); - }, - _onSearchComplete: function(controller, callback) { - var max_suggs = 5; - for (var i = 0; i < controller.matchCount && i <= max_suggs; i++) { - var result = { - title: controller.getCommentAt(i), - url: controller.getValueAt(i), - image: controller.getImageAt(i), - style: controller.getStyleAt(i) - }; - if (!result.title) - result.title = result.url; - if (result.image.indexOf("moz-anno:favicon:") == 0) - result.image = result.image.slice("moz-anno:favicon:".length); - else - result.image = ""; - callback(CmdUtils.makeSugg(result.title, undefined, result)); - } - }, - suggest: function(fragment, html, callback) { - var self = this; - this._getHistoryLinks( - fragment, - function(controller) { - self._onSearchComplete(controller, callback); - }); - return [CmdUtils.makeSugg(fragment)]; - } -}; - CmdUtils.CreateCommand( {name: "go", - takes: { - "search terms": noun_type_url - }, - preview: function(pblock, theWords) { - if (theWords.text.length == 0) { + takes: {"search terms": /.*/}, + preview: function(pblock, dobj) { + if (dobj.text.length == 0) { pblock.innerHTML = "Please enter a search term"; return; } - var result = ""; - if (theWords.data) { - if (theWords.data.image) - result += (" "); - if (theWords.data.title != theWords.data.url) - result += ("" + - Utils.escapeHtml(theWords.data.title) + - ""); - result += ("

" + - Utils.escapeHtml(theWords.data.url) + - "

"); - } else - result = "Takes you to " + Utils.escapeHtml(theWords.text) + "."; - pblock.innerHTML = result; + + var history = Cc["@mozilla.org/autocomplete/search;1?name=history"] + .createInstance(Ci.nsIAutoCompleteSearch); + + var observer = { + onSearchResult: function onSearchResult(search, result) { + if (result.searchResult == result.RESULT_SUCCESS || + result.searchResult == result.RESULT_SUCCESS_ONGOING) { + var html = ""; + for (var i = 0; i < result.matchCount; i++) { + var image = result.getImageAt(i); + var title = result.getCommentAt(i); + var url = result.getValueAt(i); + + if (!title) + title = url; + + if (image.indexOf("moz-anno:favicon:") == 0) + image = image.slice("moz-anno:favicon:".length); + else + image = ""; + + html += '
'; + if (image) + html += (' '); + html += ('' + + Utils.escapeHtml(title) + + ""); + html += ('
' + Utils.escapeHtml(url) + + '