diff options
Diffstat (limited to 'src/console/actions')
-rw-r--r-- | src/console/actions/completion.ts | 243 | ||||
-rw-r--r-- | src/console/actions/console.ts | 299 | ||||
-rw-r--r-- | src/console/actions/index.ts | 80 |
3 files changed, 318 insertions, 304 deletions
diff --git a/src/console/actions/completion.ts b/src/console/actions/completion.ts new file mode 100644 index 0000000..2f6f82f --- /dev/null +++ b/src/console/actions/completion.ts @@ -0,0 +1,243 @@ +import { Command } from "../../shared/Command"; +import CompletionClient from "../clients/CompletionClient"; +import CompletionType from "../../shared/CompletionType"; +import Completions from "../Completions"; +import TabFlag from "../../shared/TabFlag"; + +const completionClient = new CompletionClient(); + +const commandDocs = { + [Command.Set]: "Set a value of the property", + [Command.Open]: "Open a URL or search by keywords in current tab", + [Command.TabOpen]: "Open a URL or search by keywords in new tab", + [Command.WindowOpen]: "Open a URL or search by keywords in new window", + [Command.Buffer]: "Select tabs by matched keywords", + [Command.BufferDelete]: "Close a certain tab matched by keywords", + [Command.BuffersDelete]: "Close all tabs matched by keywords", + [Command.Quit]: "Close the current tab", + [Command.QuitAll]: "Close all tabs", + [Command.AddBookmark]: "Add current page to bookmarks", + [Command.Help]: "Open Vim Vixen help in new tab", +}; + +const propertyDocs: { [key: string]: string } = { + hintchars: "hint characters on follow mode", + smoothscroll: "smooth scroll", + complete: "which are completed at the open page", + colorscheme: "color scheme of the console", +}; + +export const COMPLETION_START_COMPLETION = "console.start.completion"; +export const COMPLETION_SET_COMPLETIONS = "console.set.completions"; +export const COMPLETION_COMPLETION_NEXT = "completion.completion.next"; +export const COMPLETION_COMPLETION_PREV = "completion.completion.prev"; + +export interface CompletionStartCompletionAction { + type: typeof COMPLETION_START_COMPLETION; + completionTypes: CompletionType[]; +} + +export interface SetCompletionsAction { + type: typeof COMPLETION_SET_COMPLETIONS; + completions: Completions; + completionSource: string; +} + +export interface CompletionNextAction { + type: typeof COMPLETION_COMPLETION_NEXT; +} + +export interface CompletionPrevAction { + type: typeof COMPLETION_COMPLETION_PREV; +} + +export type CompletionAction = + | CompletionStartCompletionAction + | SetCompletionsAction + | CompletionNextAction + | CompletionPrevAction; +const startCompletion = async (): Promise<CompletionStartCompletionAction> => { + const completionTypes = await completionClient.getCompletionTypes(); + return { + type: COMPLETION_START_COMPLETION, + completionTypes, + }; +}; + +const getCommandCompletions = (text: string): SetCompletionsAction => { + const items = Object.entries(commandDocs) + .filter(([name]) => name.startsWith(text.trimLeft())) + .map(([name, doc]) => ({ + caption: name, + content: name, + url: doc, + })); + const completions = [ + { + name: "Console Command", + items, + }, + ]; + return { + type: COMPLETION_SET_COMPLETIONS, + completions, + completionSource: text, + }; +}; + +const getOpenCompletions = async ( + types: CompletionType[], + original: string, + command: Command, + query: string +): Promise<SetCompletionsAction> => { + const completions: Completions = []; + for (const type of types) { + switch (type) { + case CompletionType.SearchEngines: { + const items = await completionClient.requestSearchEngines(query); + if (items.length === 0) { + break; + } + completions.push({ + name: "Search Engines", + items: items.map((key) => ({ + caption: key.title, + content: command + " " + key.title, + })), + }); + break; + } + case CompletionType.History: { + const items = await completionClient.requestHistory(query); + if (items.length === 0) { + break; + } + completions.push({ + name: "History", + items: items.map((item) => ({ + caption: item.title, + content: command + " " + item.url, + url: item.url, + })), + }); + break; + } + case CompletionType.Bookmarks: { + const items = await completionClient.requestBookmarks(query); + if (items.length === 0) { + break; + } + completions.push({ + name: "Bookmarks", + items: items.map((item) => ({ + caption: item.title, + content: command + " " + item.url, + url: item.url, + })), + }); + break; + } + } + } + + return { + type: COMPLETION_SET_COMPLETIONS, + completions, + completionSource: original, + }; +}; + +const getTabCompletions = async ( + original: string, + command: Command, + query: string, + excludePinned: boolean +): Promise<SetCompletionsAction> => { + const items = await completionClient.requestTabs(query, excludePinned); + let completions: Completions = []; + if (items.length > 0) { + completions = [ + { + name: "Buffers", + items: items.map((item) => ({ + content: command + " " + item.url, + caption: `${item.index}: ${ + item.flag != TabFlag.None ? item.flag : " " + } ${item.title}`, + url: item.url, + icon: item.faviconUrl, + })), + }, + ]; + } + return { + type: COMPLETION_SET_COMPLETIONS, + completions, + completionSource: original, + }; +}; + +const getPropertyCompletions = async ( + original: string, + command: Command, + query: string +): Promise<SetCompletionsAction> => { + const properties = await completionClient.getProperties(); + const items = properties + .map((item) => { + const desc = propertyDocs[item.name] || ""; + if (item.type === "boolean") { + return [ + { + caption: item.name, + content: command + " " + item.name, + url: "Enable " + desc, + }, + { + caption: "no" + item.name, + content: command + " no" + item.name, + url: "Disable " + desc, + }, + ]; + } else { + return [ + { + caption: item.name, + content: command + " " + item.name, + url: "Set " + desc, + }, + ]; + } + }) + .reduce((acc, val) => acc.concat(val), []) + .filter((item) => item.caption.startsWith(query)); + const completions: Completions = [{ name: "Properties", items }]; + return { + type: COMPLETION_SET_COMPLETIONS, + completions, + completionSource: original, + }; +}; + +const completionNext = (): CompletionNextAction => { + return { + type: COMPLETION_COMPLETION_NEXT, + }; +}; + +const completionPrev = (): CompletionPrevAction => { + return { + type: COMPLETION_COMPLETION_PREV, + }; +}; + +export { + startCompletion, + getCommandCompletions, + getOpenCompletions, + getTabCompletions, + getPropertyCompletions, + completionNext, + completionPrev, +}; diff --git a/src/console/actions/console.ts b/src/console/actions/console.ts index 16d33b3..646cc31 100644 --- a/src/console/actions/console.ts +++ b/src/console/actions/console.ts @@ -1,72 +1,99 @@ import * as messages from "../../shared/messages"; -import * as actions from "./index"; -import { Command } from "../../shared/Command"; -import CompletionClient from "../clients/CompletionClient"; import SettingClient from "../clients/SettingClient"; -import CompletionType from "../../shared/CompletionType"; -import Completions from "../Completions"; -import TabFlag from "../../shared/TabFlag"; +import ColorScheme from "../../shared/ColorScheme"; -const completionClient = new CompletionClient(); const settingClient = new SettingClient(); -const commandDocs = { - [Command.Set]: "Set a value of the property", - [Command.Open]: "Open a URL or search by keywords in current tab", - [Command.TabOpen]: "Open a URL or search by keywords in new tab", - [Command.WindowOpen]: "Open a URL or search by keywords in new window", - [Command.Buffer]: "Select tabs by matched keywords", - [Command.BufferDelete]: "Close a certain tab matched by keywords", - [Command.BuffersDelete]: "Close all tabs matched by keywords", - [Command.Quit]: "Close the current tab", - [Command.QuitAll]: "Close all tabs", - [Command.AddBookmark]: "Add current page to bookmarks", - [Command.Help]: "Open Vim Vixen help in new tab", -}; - -const propertyDocs: { [key: string]: string } = { - hintchars: "hint characters on follow mode", - smoothscroll: "smooth scroll", - complete: "which are completed at the open page", - colorscheme: "color scheme of the console", -}; - -const hide = (): actions.ConsoleAction => { +export const CONSOLE_SHOW_COMMAND = "console.show.command"; +export const CONSOLE_SHOW_ERROR = "console.show.error"; +export const CONSOLE_SHOW_INFO = "console.show.info"; +export const CONSOLE_HIDE_COMMAND = "console.hide.command"; +export const CONSOLE_SET_CONSOLE_TEXT = "console.set.command"; +export const CONSOLE_SHOW_FIND = "console.show.find"; +export const CONSOLE_SET_COLORSCHEME = "completion.set.colorscheme"; +export const CONSOLE_HIDE = "console.hide"; + +export interface HideAction { + type: typeof CONSOLE_HIDE; +} + +export interface ShowCommand { + type: typeof CONSOLE_SHOW_COMMAND; + text: string; +} + +export interface ShowFindAction { + type: typeof CONSOLE_SHOW_FIND; +} + +export interface ShowErrorAction { + type: typeof CONSOLE_SHOW_ERROR; + text: string; +} + +export interface ShowInfoAction { + type: typeof CONSOLE_SHOW_INFO; + text: string; +} + +export interface HideCommandAction { + type: typeof CONSOLE_HIDE_COMMAND; +} + +export interface SetConsoleTextAction { + type: typeof CONSOLE_SET_CONSOLE_TEXT; + consoleText: string; +} + +export interface SetColorSchemeAction { + type: typeof CONSOLE_SET_COLORSCHEME; + colorscheme: ColorScheme; +} + +export type ConsoleAction = + | HideAction + | ShowCommand + | ShowFindAction + | ShowErrorAction + | ShowInfoAction + | HideCommandAction + | SetConsoleTextAction + | SetColorSchemeAction; + +const hide = (): ConsoleAction => { return { - type: actions.CONSOLE_HIDE, + type: CONSOLE_HIDE, }; }; -const showCommand = async (text: string): Promise<actions.ShowCommand> => { - const completionTypes = await completionClient.getCompletionTypes(); +const showCommand = (text: string): ShowCommand => { return { - type: actions.CONSOLE_SHOW_COMMAND, - completionTypes, + type: CONSOLE_SHOW_COMMAND, text, }; }; -const showFind = (): actions.ShowFindAction => { +const showFind = (): ShowFindAction => { return { - type: actions.CONSOLE_SHOW_FIND, + type: CONSOLE_SHOW_FIND, }; }; -const showError = (text: string): actions.ShowErrorAction => { +const showError = (text: string): ShowErrorAction => { return { - type: actions.CONSOLE_SHOW_ERROR, + type: CONSOLE_SHOW_ERROR, text: text, }; }; -const showInfo = (text: string): actions.ShowInfoAction => { +const showInfo = (text: string): ShowInfoAction => { return { - type: actions.CONSOLE_SHOW_INFO, + type: CONSOLE_SHOW_INFO, text: text, }; }; -const hideCommand = (): actions.HideCommandAction => { +const hideCommand = (): HideCommandAction => { window.top.postMessage( JSON.stringify({ type: messages.CONSOLE_UNFOCUS, @@ -74,13 +101,11 @@ const hideCommand = (): actions.HideCommandAction => { "*" ); return { - type: actions.CONSOLE_HIDE_COMMAND, + type: CONSOLE_HIDE_COMMAND, }; }; -const enterCommand = async ( - text: string -): Promise<actions.HideCommandAction> => { +const enterCommand = async (text: string): Promise<HideCommandAction> => { await browser.runtime.sendMessage({ type: messages.CONSOLE_ENTER_COMMAND, text, @@ -88,7 +113,7 @@ const enterCommand = async ( return hideCommand(); }; -const enterFind = (text?: string): actions.HideCommandAction => { +const enterFind = (text?: string): HideCommandAction => { window.top.postMessage( JSON.stringify({ type: messages.CONSOLE_ENTER_FIND, @@ -99,185 +124,17 @@ const enterFind = (text?: string): actions.HideCommandAction => { return hideCommand(); }; -const setConsoleText = (consoleText: string): actions.SetConsoleTextAction => { +const setConsoleText = (consoleText: string): SetConsoleTextAction => { return { - type: actions.CONSOLE_SET_CONSOLE_TEXT, + type: CONSOLE_SET_CONSOLE_TEXT, consoleText, }; }; -const getCommandCompletions = (text: string): actions.SetCompletionsAction => { - const items = Object.entries(commandDocs) - .filter(([name]) => name.startsWith(text.trimLeft())) - .map(([name, doc]) => ({ - caption: name, - content: name, - url: doc, - })); - const completions = [ - { - name: "Console Command", - items, - }, - ]; - return { - type: actions.CONSOLE_SET_COMPLETIONS, - completions, - completionSource: text, - }; -}; - -const getOpenCompletions = async ( - types: CompletionType[], - original: string, - command: Command, - query: string -): Promise<actions.SetCompletionsAction> => { - const completions: Completions = []; - for (const type of types) { - switch (type) { - case CompletionType.SearchEngines: { - const items = await completionClient.requestSearchEngines(query); - if (items.length === 0) { - break; - } - completions.push({ - name: "Search Engines", - items: items.map((key) => ({ - caption: key.title, - content: command + " " + key.title, - })), - }); - break; - } - case CompletionType.History: { - const items = await completionClient.requestHistory(query); - if (items.length === 0) { - break; - } - completions.push({ - name: "History", - items: items.map((item) => ({ - caption: item.title, - content: command + " " + item.url, - url: item.url, - })), - }); - break; - } - case CompletionType.Bookmarks: { - const items = await completionClient.requestBookmarks(query); - if (items.length === 0) { - break; - } - completions.push({ - name: "Bookmarks", - items: items.map((item) => ({ - caption: item.title, - content: command + " " + item.url, - url: item.url, - })), - }); - break; - } - } - } - - return { - type: actions.CONSOLE_SET_COMPLETIONS, - completions, - completionSource: original, - }; -}; - -const getTabCompletions = async ( - original: string, - command: Command, - query: string, - excludePinned: boolean -): Promise<actions.SetCompletionsAction> => { - const items = await completionClient.requestTabs(query, excludePinned); - let completions: Completions = []; - if (items.length > 0) { - completions = [ - { - name: "Buffers", - items: items.map((item) => ({ - content: command + " " + item.url, - caption: `${item.index}: ${ - item.flag != TabFlag.None ? item.flag : " " - } ${item.title}`, - url: item.url, - icon: item.faviconUrl, - })), - }, - ]; - } - return { - type: actions.CONSOLE_SET_COMPLETIONS, - completions, - completionSource: original, - }; -}; - -const getPropertyCompletions = async ( - original: string, - command: Command, - query: string -): Promise<actions.SetCompletionsAction> => { - const properties = await completionClient.getProperties(); - const items = properties - .map((item) => { - const desc = propertyDocs[item.name] || ""; - if (item.type === "boolean") { - return [ - { - caption: item.name, - content: command + " " + item.name, - url: "Enable " + desc, - }, - { - caption: "no" + item.name, - content: command + " no" + item.name, - url: "Disable " + desc, - }, - ]; - } else { - return [ - { - caption: item.name, - content: command + " " + item.name, - url: "Set " + desc, - }, - ]; - } - }) - .reduce((acc, val) => acc.concat(val), []) - .filter((item) => item.caption.startsWith(query)); - const completions: Completions = [{ name: "Properties", items }]; - return { - type: actions.CONSOLE_SET_COMPLETIONS, - completions, - completionSource: original, - }; -}; - -const completionNext = (): actions.CompletionNextAction => { - return { - type: actions.CONSOLE_COMPLETION_NEXT, - }; -}; - -const completionPrev = (): actions.CompletionPrevAction => { - return { - type: actions.CONSOLE_COMPLETION_PREV, - }; -}; - -const setColorScheme = async (): Promise<actions.SetColorSchemeAction> => { +const setColorScheme = async (): Promise<SetColorSchemeAction> => { const scheme = await settingClient.getColorScheme(); return { - type: actions.CONSOLE_SET_COLORSCHEME, + type: CONSOLE_SET_COLORSCHEME, colorscheme: scheme, }; }; @@ -292,11 +149,5 @@ export { setConsoleText, enterCommand, enterFind, - getCommandCompletions, - getOpenCompletions, - getTabCompletions, - getPropertyCompletions, - completionNext, - completionPrev, setColorScheme, }; diff --git a/src/console/actions/index.ts b/src/console/actions/index.ts deleted file mode 100644 index 6c1c759..0000000 --- a/src/console/actions/index.ts +++ /dev/null @@ -1,80 +0,0 @@ -import Completions from "../Completions"; -import CompletionType from "../../shared/CompletionType"; -import ColorScheme from "../../shared/ColorScheme"; - -export const CONSOLE_HIDE = "console.hide"; -export const CONSOLE_SHOW_COMMAND = "console.show.command"; -export const CONSOLE_SHOW_ERROR = "console.show.error"; -export const CONSOLE_SHOW_INFO = "console.show.info"; -export const CONSOLE_HIDE_COMMAND = "console.hide.command"; -export const CONSOLE_SET_CONSOLE_TEXT = "console.set.command"; -export const CONSOLE_SET_COMPLETIONS = "console.set.completions"; -export const CONSOLE_COMPLETION_NEXT = "console.completion.next"; -export const CONSOLE_COMPLETION_PREV = "console.completion.prev"; -export const CONSOLE_SHOW_FIND = "console.show.find"; -export const CONSOLE_SET_COLORSCHEME = "console.set.colorscheme"; - -export interface HideAction { - type: typeof CONSOLE_HIDE; -} - -export interface ShowCommand { - type: typeof CONSOLE_SHOW_COMMAND; - text: string; - completionTypes: CompletionType[]; -} - -export interface ShowFindAction { - type: typeof CONSOLE_SHOW_FIND; -} - -export interface ShowErrorAction { - type: typeof CONSOLE_SHOW_ERROR; - text: string; -} - -export interface ShowInfoAction { - type: typeof CONSOLE_SHOW_INFO; - text: string; -} - -export interface HideCommandAction { - type: typeof CONSOLE_HIDE_COMMAND; -} - -export interface SetConsoleTextAction { - type: typeof CONSOLE_SET_CONSOLE_TEXT; - consoleText: string; -} - -export interface SetCompletionsAction { - type: typeof CONSOLE_SET_COMPLETIONS; - completions: Completions; - completionSource: string; -} - -export interface CompletionNextAction { - type: typeof CONSOLE_COMPLETION_NEXT; -} - -export interface CompletionPrevAction { - type: typeof CONSOLE_COMPLETION_PREV; -} - -export interface SetColorSchemeAction { - type: typeof CONSOLE_SET_COLORSCHEME; - colorscheme: ColorScheme; -} - -export type ConsoleAction = - | HideAction - | ShowCommand - | ShowFindAction - | ShowErrorAction - | ShowInfoAction - | HideCommandAction - | SetConsoleTextAction - | SetCompletionsAction - | CompletionNextAction - | CompletionPrevAction - | SetColorSchemeAction; |