Skip to content

Instantly share code, notes, and snippets.

@jadonk
Created January 18, 2009 20:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jadonk/48768 to your computer and use it in GitHub Desktop.
Save jadonk/48768 to your computer and use it in GitHub Desktop.
function addSearch (options)
{
options.author = { name: "Jason Kridner", email: "jkridner@gmail.com"};
options.license = "GPL";
options.arguments = [ { role: 'object', nountype: 'noun_arb_text', label: 'search term'} ];
options.previewDelay = 10;
options.execute = function (directObject, modifiers)
{
var postData = this.search(directObject).postData;
Utils.openUrlInBrowser(this.url, postData);
CmdUtils.setLastResult(this.url);
};
options.preview = function (pblock, directObject, modifiers)
{
var content = this.starttext;
var searchQuery = this.search(directObject);
if (searchQuery.len < 1)
{
pblock.innerHTML = content;
return;
}
content += " for <b>" + searchQuery.query + "</b>";
content += " (" + searchQuery.len + ")";
pblock.innerHTML = content;
pblock.getResults = this.getResults;
pblock.getResult = this.getResult;
var xhr;
function abort ()
{
if (xhr)
xhr.abort();
}
function callback (data)
{
pblock.innerHTML = "Post completed: "; // return;
var results = pblock.getResults(jQuery(data));
if (results)
{
var content = results.header;
content += " (" + results.length + ")<br/>";
for (var i = 0; (i < results.length) && (i < 30); i++)
{
var result = pblock.getResult(results.data[i]);
content += "<b>" + result.title + "</b>";
content += " " + result.entry + "<br/>";
}
pblock.innerHTML = "<small>" + content + "</small>";
}
else
pblock.innerHTML = "No results provided";
}
var cb = CmdUtils.previewCallback(pblock, callback, abort);
xhr = jQuery.post(this.url, searchQuery.postData, cb, "html");
};
CmdUtils.CreateCommand(options);
};
addSearch({
names: ['scrabble-dictionary'],
icon: "http://www.hasbrotoyshop.com/favicon.ico",
homepage: "http://www.hasbro.com/games/adult-games/scrabble/home.cfm?page=home",
description: "Looks up letters in the Scrabble dictionary",
help: "Provide letters to perform lookup",
url: "http://www.hasbro.com/games/adult-games/scrabble/home.cfm?page=Dictionary/dict",
starttext: "Search Hasbro's Scrabble dictionary",
search: function (directObject)
{
var query = directObject.text;
// For some reason, the first entry in the postData has a '?' prepended to it.
var postData = { dummy: "todo-error", type: "wordbuilder", Word: query };
return ({ postData: postData, len: query.length, query: query });
},
getResults: function (retDocument)
{
var results = jQuery("div[id='dict_return']", retDocument).get(0);
var data = jQuery("p", results).get();
var header = data.shift().innerHTML;
var length = data.length;
function sortData (a, b)
{
a_length = jQuery("b", a).text().length;
b_length = jQuery("b", b).text().length;
return (b_length - a_length);
}
data = data.sort(sortData);
return ({ header: header, data: data, length: length });
},
getResult: function (result)
{
var title = jQuery("b", result).text();
//title = title + "(" + title.length + ")";
var entry = jQuery("span", result).text();
return ({ title: title, entry: entry });
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment