aboutsummaryrefslogtreecommitdiff
path: root/src/console/actions
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2020-03-26 22:17:00 +0900
committerShin'ya Ueoka <ueokande@i-beam.org>2020-03-26 22:17:00 +0900
commitb2a37b8fc3e273dd71e1e3558c58be8002aa3789 (patch)
tree9e6f0d354beca92e975dc97462b3860833112f81 /src/console/actions
parent6829e24c62c0291336502b3390905b57b81abd21 (diff)
Query completions on open command by a completion source
Diffstat (limited to 'src/console/actions')
-rw-r--r--src/console/actions/console.ts61
-rw-r--r--src/console/actions/index.ts2
2 files changed, 59 insertions, 4 deletions
diff --git a/src/console/actions/console.ts b/src/console/actions/console.ts
index cef04fe..99e58f7 100644
--- a/src/console/actions/console.ts
+++ b/src/console/actions/console.ts
@@ -1,6 +1,11 @@
import * as messages from '../../shared/messages';
import * as actions from './index';
import { Command } from "../../shared/Command";
+import CompletionClient from "../clients/CompletionClient";
+import CompletionType from "../../shared/CompletionType";
+import Completions from "../Completions";
+
+const completionClient = new CompletionClient();
const commandDocs = {
[Command.Set]: 'Set a value of the property',
@@ -22,10 +27,12 @@ const hide = (): actions.ConsoleAction => {
};
};
-const showCommand = (text: string): actions.ConsoleAction => {
+const showCommand = async (text: string): Promise<actions.ConsoleAction> => {
+ const completionTypes = await completionClient.getCompletionTypes();
return {
type: actions.CONSOLE_SHOW_COMMAND,
- text: text
+ completionTypes,
+ text,
};
};
@@ -102,6 +109,51 @@ const getCommandCompletions = (text: string): actions.ConsoleAction => {
}
};
+const getOpenCompletions = async(types: CompletionType[], original: string, command: Command, query: string): Promise<actions.ConsoleAction> => {
+ const completions: Completions = [];
+ for (const type of types) {
+ switch (type) {
+ case CompletionType.SearchEngines:
+ completions.push({
+ name: 'Search Engines',
+ items: (await completionClient.requestSearchEngines(query))
+ .map(key => ({
+ caption: key.title,
+ content: command + ' ' + key.title,
+ }))
+ });
+ break;
+ case CompletionType.History:
+ completions.push({
+ name: 'History',
+ items: (await completionClient.requestHistory(query))
+ .map(item => ({
+ caption: item.title,
+ content: command + ' ' + item.url,
+ url: item.url
+ })),
+ });
+ break;
+ case CompletionType.Bookmarks:
+ completions.push({
+ name: 'Bookmarks',
+ items: (await completionClient.requestBookmarks(query))
+ .map(item => ({
+ caption: item.title,
+ content: command + ' ' + item.url,
+ url: item.url
+ }))
+ });
+ break;
+ }
+ }
+
+ return {
+ type: actions.CONSOLE_SET_COMPLETIONS,
+ completions,
+ completionSource: original,
+ };
+};
const getCompletions = async(text: string): Promise<actions.ConsoleAction> => {
const completions = await browser.runtime.sendMessage({
@@ -128,6 +180,7 @@ const completionPrev = (): actions.ConsoleAction => {
};
export {
- hide, showCommand, showFind, showError, showInfo, hideCommand, setConsoleText,
- enterCommand, enterFind, getCompletions, getCommandCompletions, completionNext, completionPrev,
+ hide, showCommand, showFind, showError, showInfo, hideCommand, setConsoleText, enterCommand, enterFind,
+ getCompletions, getCommandCompletions, getOpenCompletions,
+ completionNext, completionPrev,
};
diff --git a/src/console/actions/index.ts b/src/console/actions/index.ts
index d36f8cd..8448e04 100644
--- a/src/console/actions/index.ts
+++ b/src/console/actions/index.ts
@@ -1,4 +1,5 @@
import Completions from "../Completions";
+import CompletionType from "../../shared/CompletionType";
export const CONSOLE_HIDE = 'console.hide';
export const CONSOLE_SHOW_COMMAND = 'console.show.command';
@@ -18,6 +19,7 @@ interface HideAction {
interface ShowCommand {
type: typeof CONSOLE_SHOW_COMMAND;
text: string;
+ completionTypes: CompletionType[];
}
interface ShowFindAction {