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

View File

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