[Ubiquity] Go 3.0 script – the power of nouns in ubiquity
Many many thanks to fern on #ubiquity. With this version, you can view all the URL’s as you type them and view the preview at the same time as well. Basically fern’s code generates a list of URL’s which are available as nouns to Ubiquity and Ubiquity displays them as suggestions. Take a Look how simple the command itself is now as compared to the previous version/
Here’s the screenshot:
Here’s the code:
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 = Components.classes["@mozilla.org/autocomplete/controller;1"].getService(Components.interfaces.nsIAutoCompleteController);
var input = new AutoCompleteInput(["history"]);
controller.input = input;
input.onSearchComplete = function() {
onSearchComplete(controller);
};
controller.startSearch(partialSearch);
},
suggestions: [],
_onSearchComplete: function(controller) {
suggs = [];
var max_suggs = 5;
for (var i = 0; i < controller.matchCount && i <= max_suggs; i++) {
var url = controller.getValueAt(i);
suggs.push(CmdUtils.makeSugg(url));
}
noun_type_url.suggestions = suggs;
},
suggest: function(fragment) {
this._getHistoryLinks(fragment, this._onSearchComplete);
var regexp = /(ftp|http|https):\/\/(\w+:{01}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
// Magic words "page" or "url" result in the URL of the current page
if (fragment == "page" || fragment == "url") {
var url = Application.activeWindow.activeTab.document.URL;
this.suggestions.push(CmdUtils.makeSugg(url));
}
// If it's a valid URL, suggest it back
if (regexp.test(fragment)) {
this.suggestions.push(CmdUtils.makeSugg(fragment));
} else if (regexp.test("http://" + fragment)) {
this.suggestions.push(CmdUtils.makeSugg("http://" + fragment));
}
return this.suggestions;
}
};
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 msg = "<iframe src='" + theWords.text + "' width=400 height=400/>";
pblock.innerHTML = msg;
},
execute: function(theWords) {
Utils.openUrlInBrowser(theWords.text);
},
})

Very nice. I’m loving the not-built-in commands that developers have created.
Here is a collection of the best of them: http://aceonlineschools.com/not-built-in-ubiquity-commands/
John
September 9, 2008 at 1:43 pm
Very good, now this command is complete!
Thanks a lot
**Juanito**
September 15, 2008 at 4:47 pm
how do i install this script to ubiquity?
pvinis
December 6, 2008 at 9:47 pm
This is fantastic — I can finally get rid of the navigation bar! Unfortunately, though, the preview causes Firefox to break when using the “go” command with Gmail.
Az
March 8, 2009 at 3:35 pm
Fantastic article:D Hope to come back soon
imiguergiecof
May 20, 2009 at 3:12 pm