mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-03-15 16:33:32 +01:00
Don't muck with search engine aliases unduly.
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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 () {
|
||||||
|
|||||||
Reference in New Issue
Block a user