1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-02-05 11:15:46 +01:00

Don't muck with search engine aliases unduly.

This commit is contained in:
Kris Maglione
2010-11-09 16:26:39 -05:00
parent da1d2457ec
commit ce679ddae0
2 changed files with 23 additions and 34 deletions

View File

@@ -135,12 +135,14 @@ const Bookmarks = Module("bookmarks", {
}
},
// TODO: add filtering
// also ensures that each search engine has a Dactyl-friendly alias
getSearchEngines: function getSearchEngines() {
getSearchEngine: function getSearchEngine(alias)
this.searchEngines.filter(function (e) e.alias === alias)[0],
getSearchEngines: deprecated("Please use bookmarks.searchEngines instead", function getSearchEngines() this.searchEngines),
get searchEngines() {
let searchEngines = [];
let aliases = {};
for (let [, engine] in Iterator(services.get("browserSearch").getVisibleEngines({}))) {
return services.get("browserSearch").getVisibleEngines({}).map(function (engine) {
let alias = engine.alias;
if (!alias || !/^[a-z_-]+$/.test(alias))
alias = engine.name.replace(/^\W*([a-zA-Z_-]+).*/, "$1").toLowerCase();
@@ -151,19 +153,15 @@ const Bookmarks = Module("bookmarks", {
alias += ++aliases[alias];
else
aliases[alias] = 0;
if (engine.alias != alias)
engine.alias = alias;
searchEngines.push({ keyword: engine.alias, title: engine.description, icon: engine.iconURI && engine.iconURI.spec });
}
return searchEngines;
return { keyword: alias, __proto__: engine, title: engine.description, icon: engine.iconURI && engine.iconURI.spec };
});
},
getSuggestions: function getSuggestions(engineName, query, callback) {
const responseType = "application/x-suggestions+json";
let engine = services.get("browserSearch").getEngineByAlias(engineName);
let engine = this.getSearchEngine(engineName);
if (engine && engine.supportsResponseType(responseType))
var queryURI = engine.getSubmission(query, responseType).uri.spec;
if (!queryURI)
@@ -172,27 +170,24 @@ const Bookmarks = Module("bookmarks", {
function process(resp) {
let results = [];
try {
results = services.get("json").decode(resp.responseText)[1];
results = [[item, ""] for ([k, item] in Iterator(results)) if (typeof item == "string")];
results = JSON.parse(resp.responseText)[1].filter(isString);
}
catch (e) {}
if (!callback)
return results;
return callback(results);
if (callback)
return callback(results);
return results;
}
let resp = util.httpGet(queryURI, callback && process);
if (!callback)
return process(resp);
return null;
if (callback)
return null;
return process(resp);
},
// TODO: add filtering
// format of returned array:
// [keyword, helptext, url]
getKeywords: function getKeywords() {
return bookmarkcache.keywords;
},
getKeywords: function getKeywords() bookmarkcache.keywords,
// full search string including engine name as first word in @param text
// if @param useDefSearch is true, it uses the default search engine
@@ -201,10 +196,6 @@ const Bookmarks = Module("bookmarks", {
getSearchURL: function getSearchURL(text, useDefsearch) {
let searchString = (useDefsearch ? options["defsearch"] + " " : "") + text;
// we need to make sure our custom alias have been set, even if the user
// did not :open <tab> once before
this.getSearchEngines();
// ripped from Firefox
function getShortcutOrURI(url) {
var keyword = url;
@@ -489,16 +480,14 @@ const Bookmarks = Module("bookmarks", {
{
completer: function completer(context) {
completion.search(context, true);
context.completions = [["", "Don't perform searches by default"]].concat(context.completions);
context.completions = [{ keyword: "", title: "Don't perform searches by default" }].concat(context.completions);
}
});
options.add(["suggestengines"],
"Engine Alias which has a feature of suggest",
"Engine alias which provide search suggestions",
"stringlist", "google",
{
completer: function completer(context) completion.searchEngine(context, true),
});
{ completer: function completer(context) completion.searchEngine(context, true), });
},
completion: function () {
@@ -516,7 +505,7 @@ const Bookmarks = Module("bookmarks", {
completion.search = function search(context, noSuggest) {
let [, keyword, space, args] = context.filter.match(/^\s*(\S*)(\s*)(.*)$/);
let keywords = bookmarks.getKeywords();
let engines = bookmarks.getSearchEngines();
let engines = bookmarks.searchEngines;
context.title = ["Search Keywords"];
context.completions = array(values(keywords)).concat(engines).array;
@@ -579,6 +568,7 @@ const Bookmarks = Module("bookmarks", {
let ctxt = context.fork(name, 0);
ctxt.title = [engine.description + " Suggestions"];
ctxt.keys = { text: util.identity, description: function () "" };
ctxt.compare = CompletionContext.Sort.unsorted;
ctxt.incomplete = true;
bookmarks.getSuggestions(name, ctxt.filter, function (compl) {

View File

@@ -531,8 +531,7 @@ const Mappings = Module("mappings", {
completion.userMapping = function userMapping(context, modes) {
// FIXME: have we decided on a 'standard' way to handle this clash? --djk
modes = modes || [modules.modes.NORMAL];
let maps = [[m.names[0], ""] for (m in mappings.getUserIterator(modes))];
context.completions = maps;
context.completions = [[m.names[0], ""] for (m in mappings.getUserIterator(modes))];
};
},
javascript: function () {