Mercurial > my-ubiquity-commands
view chromeless-browsing/chromeless.js @ 5:96bb8d08e94a
The 'go' command now uses proper asynchronous suggestions.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Fri, 27 Mar 2009 13:34:14 -0700 |
parents | fd988ee76408 |
children | c89423660272 |
line wrap: on
line source
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) { pblock.innerHTML = "<b>Please enter a search term</b>"; return; } var result = ""; if (theWords.data) { if (theWords.data.image) result += ("<img src=\"" + Utils.escapeHtml(theWords.data.image) + "\"/> "); if (theWords.data.title != theWords.data.url) result += ("<i>" + Utils.escapeHtml(theWords.data.title) + "</i>"); result += ("<p><tt>" + Utils.escapeHtml(theWords.data.url) + "</tt></p>"); } else result = "Takes you to " + Utils.escapeHtml(theWords.text) + "."; pblock.innerHTML = result; }, execute: function(theWords) { Utils.openUrlInBrowser(theWords.text); }} ); function cmd_show_tabs() { var content = context.chromeWindow.document.getElementById("appcontent"); var browser = content.firstChild; var tabs = browser.tabContainer; tabs.style.height = "25px"; tabs.style.marginTop = "0px"; } function cmd_hide_tabs() { var content = context.chromeWindow.document.getElementById("appcontent"); var browser = content.firstChild; var tabs = browser.tabContainer; tabs.style.height = "0px"; tabs.style.marginTop = "-500px"; }