|
|
|
// Hide console; or cancel some user actions
|
|
|
|
export const CANCEL = 'cancel';
|
|
|
|
|
|
|
|
// Addons
|
|
|
|
export const ADDON_ENABLE = 'addon.enable';
|
|
|
|
export const ADDON_DISABLE = 'addon.disable';
|
|
|
|
export const ADDON_TOGGLE_ENABLED = 'addon.toggle.enabled';
|
|
|
|
|
|
|
|
// Command
|
|
|
|
export const COMMAND_SHOW = 'command.show';
|
|
|
|
export const COMMAND_SHOW_OPEN = 'command.show.open';
|
|
|
|
export const COMMAND_SHOW_TABOPEN = 'command.show.tabopen';
|
|
|
|
export const COMMAND_SHOW_WINOPEN = 'command.show.winopen';
|
|
|
|
export const COMMAND_SHOW_BUFFER = 'command.show.buffer';
|
|
|
|
export const COMMAND_SHOW_ADDBOOKMARK = 'command.show.addbookmark';
|
|
|
|
|
|
|
|
// Scrolls
|
|
|
|
export const SCROLL_VERTICALLY = 'scroll.vertically';
|
|
|
|
export const SCROLL_HORIZONALLY = 'scroll.horizonally';
|
|
|
|
export const SCROLL_PAGES = 'scroll.pages';
|
|
|
|
export const SCROLL_TOP = 'scroll.top';
|
|
|
|
export const SCROLL_BOTTOM = 'scroll.bottom';
|
|
|
|
export const SCROLL_HOME = 'scroll.home';
|
|
|
|
export const SCROLL_END = 'scroll.end';
|
|
|
|
|
|
|
|
// Follows
|
|
|
|
export const FOLLOW_START = 'follow.start';
|
|
|
|
|
|
|
|
// Navigations
|
|
|
|
export const NAVIGATE_HISTORY_PREV = 'navigate.history.prev';
|
|
|
|
export const NAVIGATE_HISTORY_NEXT = 'navigate.history.next';
|
|
|
|
export const NAVIGATE_LINK_PREV = 'navigate.link.prev';
|
|
|
|
export const NAVIGATE_LINK_NEXT = 'navigate.link.next';
|
|
|
|
export const NAVIGATE_PARENT = 'navigate.parent';
|
|
|
|
export const NAVIGATE_ROOT = 'navigate.root';
|
|
|
|
|
|
|
|
// Focus
|
|
|
|
export const FOCUS_INPUT = 'focus.input';
|
|
|
|
|
|
|
|
// Page
|
|
|
|
export const PAGE_SOURCE = 'page.source';
|
|
|
|
export const PAGE_HOME = 'page.home';
|
|
|
|
|
|
|
|
// Tabs
|
|
|
|
export const TAB_CLOSE = 'tabs.close';
|
|
|
|
export const TAB_CLOSE_FORCE = 'tabs.close.force';
|
|
|
|
export const TAB_CLOSE_RIGHT = 'tabs.close.right';
|
|
|
|
export const TAB_REOPEN = 'tabs.reopen';
|
|
|
|
export const TAB_PREV = 'tabs.prev';
|
|
|
|
export const TAB_NEXT = 'tabs.next';
|
|
|
|
export const TAB_FIRST = 'tabs.first';
|
|
|
|
export const TAB_LAST = 'tabs.last';
|
|
|
|
export const TAB_PREV_SEL = 'tabs.prevsel';
|
|
|
|
export const TAB_RELOAD = 'tabs.reload';
|
|
|
|
export const TAB_PIN = 'tabs.pin';
|
|
|
|
export const TAB_UNPIN = 'tabs.unpin';
|
|
|
|
export const TAB_TOGGLE_PINNED = 'tabs.pin.toggle';
|
|
|
|
export const TAB_DUPLICATE = 'tabs.duplicate';
|
|
|
|
|
|
|
|
// Zooms
|
|
|
|
export const ZOOM_IN = 'zoom.in';
|
|
|
|
export const ZOOM_OUT = 'zoom.out';
|
|
|
|
export const ZOOM_NEUTRAL = 'zoom.neutral';
|
|
|
|
|
|
|
|
// Url yank/paste
|
|
|
|
export const URLS_YANK = 'urls.yank';
|
|
|
|
export const URLS_PASTE = 'urls.paste';
|
|
|
|
|
|
|
|
// Find
|
|
|
|
export const FIND_START = 'find.start';
|
|
|
|
export const FIND_NEXT = 'find.next';
|
|
|
|
export const FIND_PREV = 'find.prev';
|
|
|
|
|
|
|
|
// Mark
|
|
|
|
export const MARK_SET_PREFIX = 'mark.set.prefix';
|
|
|
|
export const MARK_JUMP_PREFIX = 'mark.jump.prefix';
|
|
|
|
|
|
|
|
// Repeat
|
|
|
|
export const REPEAT_LAST = 'repeat.last';
|
|
|
|
|
|
|
|
// Internal
|
|
|
|
export const INTERNAL_OPEN_URL = 'internal.open.url';
|
|
|
|
|
|
|
|
export interface CancelOperation {
|
|
|
|
type: typeof CANCEL;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface AddonEnableOperation {
|
|
|
|
type: typeof ADDON_ENABLE;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface AddonDisableOperation {
|
|
|
|
type: typeof ADDON_DISABLE;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface AddonToggleEnabledOperation {
|
|
|
|
type: typeof ADDON_TOGGLE_ENABLED;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CommandShowOperation {
|
|
|
|
type: typeof COMMAND_SHOW;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CommandShowOpenOperation {
|
|
|
|
type: typeof COMMAND_SHOW_OPEN;
|
|
|
|
alter: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CommandShowTabopenOperation {
|
|
|
|
type: typeof COMMAND_SHOW_TABOPEN;
|
|
|
|
alter: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CommandShowWinopenOperation {
|
|
|
|
type: typeof COMMAND_SHOW_WINOPEN;
|
|
|
|
alter: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CommandShowBufferOperation {
|
|
|
|
type: typeof COMMAND_SHOW_BUFFER;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CommandShowAddbookmarkOperation {
|
|
|
|
type: typeof COMMAND_SHOW_ADDBOOKMARK;
|
|
|
|
alter: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ScrollVerticallyOperation {
|
|
|
|
type: typeof SCROLL_VERTICALLY;
|
|
|
|
count: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ScrollHorizonallyOperation {
|
|
|
|
type: typeof SCROLL_HORIZONALLY;
|
|
|
|
count: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ScrollPagesOperation {
|
|
|
|
type: typeof SCROLL_PAGES;
|
|
|
|
count: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ScrollTopOperation {
|
|
|
|
type: typeof SCROLL_TOP;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ScrollBottomOperation {
|
|
|
|
type: typeof SCROLL_BOTTOM;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ScrollHomeOperation {
|
|
|
|
type: typeof SCROLL_HOME;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ScrollEndOperation {
|
|
|
|
type: typeof SCROLL_END;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface FollowStartOperation {
|
|
|
|
type: typeof FOLLOW_START;
|
|
|
|
newTab: boolean;
|
|
|
|
background: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface NavigateHistoryPrevOperation {
|
|
|
|
type: typeof NAVIGATE_HISTORY_PREV;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface NavigateHistoryNextOperation {
|
|
|
|
type: typeof NAVIGATE_HISTORY_NEXT;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface NavigateLinkPrevOperation {
|
|
|
|
type: typeof NAVIGATE_LINK_PREV;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface NavigateLinkNextOperation {
|
|
|
|
type: typeof NAVIGATE_LINK_NEXT;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface NavigateParentOperation {
|
|
|
|
type: typeof NAVIGATE_PARENT;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface NavigateRootOperation {
|
|
|
|
type: typeof NAVIGATE_ROOT;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface FocusInputOperation {
|
|
|
|
type: typeof FOCUS_INPUT;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface PageSourceOperation {
|
|
|
|
type: typeof PAGE_SOURCE;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface PageHomeOperation {
|
|
|
|
type: typeof PAGE_HOME;
|
|
|
|
newTab: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabCloseOperation {
|
|
|
|
type: typeof TAB_CLOSE;
|
|
|
|
select?: 'left' | 'right';
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabCloseForceOperation {
|
|
|
|
type: typeof TAB_CLOSE_FORCE;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabCloseRightOperation {
|
|
|
|
type: typeof TAB_CLOSE_RIGHT;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabReopenOperation {
|
|
|
|
type: typeof TAB_REOPEN;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabPrevOperation {
|
|
|
|
type: typeof TAB_PREV;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabNextOperation {
|
|
|
|
type: typeof TAB_NEXT;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabFirstOperation {
|
|
|
|
type: typeof TAB_FIRST;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabLastOperation {
|
|
|
|
type: typeof TAB_LAST;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabPrevSelOperation {
|
|
|
|
type: typeof TAB_PREV_SEL;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabReloadOperation {
|
|
|
|
type: typeof TAB_RELOAD;
|
|
|
|
cache: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabPinOperation {
|
|
|
|
type: typeof TAB_PIN;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabUnpinOperation {
|
|
|
|
type: typeof TAB_UNPIN;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabTogglePinnedOperation {
|
|
|
|
type: typeof TAB_TOGGLE_PINNED;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TabDuplicateOperation {
|
|
|
|
type: typeof TAB_DUPLICATE;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ZoomInOperation {
|
|
|
|
type: typeof ZOOM_IN;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ZoomOutOperation {
|
|
|
|
type: typeof ZOOM_OUT;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ZoomNeutralOperation {
|
|
|
|
type: typeof ZOOM_NEUTRAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface UrlsYankOperation {
|
|
|
|
type: typeof URLS_YANK;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface UrlsPasteOperation {
|
|
|
|
type: typeof URLS_PASTE;
|
|
|
|
newTab: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface FindStartOperation {
|
|
|
|
type: typeof FIND_START;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface FindNextOperation {
|
|
|
|
type: typeof FIND_NEXT;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface FindPrevOperation {
|
|
|
|
type: typeof FIND_PREV;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface MarkSetPrefixOperation {
|
|
|
|
type: typeof MARK_SET_PREFIX;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface MarkJumpPrefixOperation {
|
|
|
|
type: typeof MARK_JUMP_PREFIX;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface RepeatLastOperation {
|
|
|
|
type: typeof REPEAT_LAST;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface InternalOpenUrl {
|
|
|
|
type: typeof INTERNAL_OPEN_URL;
|
|
|
|
url: string;
|
|
|
|
newTab?: boolean;
|
|
|
|
newWindow?: boolean;
|
|
|
|
background?: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export type Operation =
|
|
|
|
CancelOperation |
|
|
|
|
AddonEnableOperation |
|
|
|
|
AddonDisableOperation |
|
|
|
|
AddonToggleEnabledOperation |
|
|
|
|
CommandShowOperation |
|
|
|
|
CommandShowOpenOperation |
|
|
|
|
CommandShowTabopenOperation |
|
|
|
|
CommandShowWinopenOperation |
|
|
|
|
CommandShowBufferOperation |
|
|
|
|
CommandShowAddbookmarkOperation |
|
|
|
|
ScrollVerticallyOperation |
|
|
|
|
ScrollHorizonallyOperation |
|
|
|
|
ScrollPagesOperation |
|
|
|
|
ScrollTopOperation |
|
|
|
|
ScrollBottomOperation |
|
|
|
|
ScrollHomeOperation |
|
|
|
|
ScrollEndOperation |
|
|
|
|
FollowStartOperation |
|
|
|
|
NavigateHistoryPrevOperation |
|
|
|
|
NavigateHistoryNextOperation |
|
|
|
|
NavigateLinkPrevOperation |
|
|
|
|
NavigateLinkNextOperation |
|
|
|
|
NavigateParentOperation |
|
|
|
|
NavigateRootOperation |
|
|
|
|
FocusInputOperation |
|
|
|
|
PageSourceOperation |
|
|
|
|
PageHomeOperation |
|
|
|
|
TabCloseOperation |
|
|
|
|
TabCloseForceOperation |
|
|
|
|
TabCloseRightOperation |
|
|
|
|
TabReopenOperation |
|
|
|
|
TabPrevOperation |
|
|
|
|
TabNextOperation |
|
|
|
|
TabFirstOperation |
|
|
|
|
TabLastOperation |
|
|
|
|
TabPrevSelOperation |
|
|
|
|
TabReloadOperation |
|
|
|
|
TabPinOperation |
|
|
|
|
TabUnpinOperation |
|
|
|
|
TabTogglePinnedOperation |
|
|
|
|
TabDuplicateOperation |
|
|
|
|
ZoomInOperation |
|
|
|
|
ZoomOutOperation |
|
|
|
|
ZoomNeutralOperation |
|
|
|
|
UrlsYankOperation |
|
|
|
|
UrlsPasteOperation |
|
|
|
|
FindStartOperation |
|
|
|
|
FindNextOperation |
|
|
|
|
FindPrevOperation |
|
|
|
|
MarkSetPrefixOperation |
|
|
|
|
MarkJumpPrefixOperation |
|
|
|
|
RepeatLastOperation |
|
|
|
|
InternalOpenUrl;
|
|
|
|
|
|
|
|
const assertOptionalBoolean = (obj: any, name: string) => {
|
|
|
|
if (Object.prototype.hasOwnProperty.call(obj, name) &&
|
|
|
|
typeof obj[name] !== 'boolean') {
|
|
|
|
throw new TypeError(
|
|
|
|
`Not a boolean parameter: '${name} (${typeof obj[name]})'`,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const assertOptionalString = (obj: any, name: string, values?: string[]) => {
|
|
|
|
if (Object.prototype.hasOwnProperty.call(obj, name)) {
|
|
|
|
let value = obj[name];
|
|
|
|
if (typeof value !== 'string') {
|
|
|
|
throw new TypeError(
|
|
|
|
`Not a string parameter: '${name}' (${typeof value})`,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
if (values && values.length && values.indexOf(value) === -1) {
|
|
|
|
// eslint-disable-next-line max-len
|
|
|
|
throw new TypeError(`Invalid parameter for '${name}': '${value}'`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const assertRequiredNumber = (obj: any, name: string) => {
|
|
|
|
if (!Object.prototype.hasOwnProperty.call(obj, name) ||
|
|
|
|
typeof obj[name] !== 'number') {
|
|
|
|
throw new TypeError(`Missing number parameter: '${name}`);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const assertRequiredString = (obj: any, name: string) => {
|
|
|
|
if (!Object.prototype.hasOwnProperty.call(obj, name) ||
|
|
|
|
typeof obj[name] !== 'string') {
|
|
|
|
throw new TypeError(`Missing string parameter: '${name}`);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// eslint-disable-next-line complexity, max-lines-per-function
|
|
|
|
export const valueOf = (o: any): Operation => {
|
|
|
|
if (!Object.prototype.hasOwnProperty.call(o, 'type')) {
|
|
|
|
throw new TypeError(`Missing 'type' field`);
|
|
|
|
}
|
|
|
|
switch (o.type) {
|
|
|
|
case COMMAND_SHOW_OPEN:
|
|
|
|
case COMMAND_SHOW_TABOPEN:
|
|
|
|
case COMMAND_SHOW_WINOPEN:
|
|
|
|
case COMMAND_SHOW_ADDBOOKMARK:
|
|
|
|
assertOptionalBoolean(o, 'alter');
|
|
|
|
return { type: o.type, alter: Boolean(o.alter) };
|
|
|
|
case SCROLL_VERTICALLY:
|
|
|
|
case SCROLL_HORIZONALLY:
|
|
|
|
case SCROLL_PAGES:
|
|
|
|
assertRequiredNumber(o, 'count');
|
|
|
|
return { type: o.type, count: Number(o.count) };
|
|
|
|
case FOLLOW_START:
|
|
|
|
assertOptionalBoolean(o, 'newTab');
|
|
|
|
assertOptionalBoolean(o, 'background');
|
|
|
|
return {
|
|
|
|
type: FOLLOW_START,
|
|
|
|
newTab: Boolean(typeof o.newTab === 'undefined' ? false : o.newTab),
|
|
|
|
background: Boolean(typeof o.background === 'undefined' ? true : o.background), // eslint-disable-line max-len
|
|
|
|
};
|
|
|
|
case PAGE_HOME:
|
|
|
|
assertOptionalBoolean(o, 'newTab');
|
|
|
|
return {
|
|
|
|
type: PAGE_HOME,
|
|
|
|
newTab: Boolean(typeof o.newTab === 'undefined' ? false : o.newTab),
|
|
|
|
};
|
|
|
|
case TAB_CLOSE:
|
|
|
|
assertOptionalString(o, 'select', ['left', 'right']);
|
|
|
|
return {
|
|
|
|
type: TAB_CLOSE,
|
|
|
|
select: (typeof o.select === 'undefined' ? 'right' : o.select),
|
|
|
|
};
|
|
|
|
case TAB_RELOAD:
|
|
|
|
assertOptionalBoolean(o, 'cache');
|
|
|
|
return {
|
|
|
|
type: TAB_RELOAD,
|
|
|
|
cache: Boolean(typeof o.cache === 'undefined' ? false : o.cache),
|
|
|
|
};
|
|
|
|
case URLS_PASTE:
|
|
|
|
assertOptionalBoolean(o, 'newTab');
|
|
|
|
return {
|
|
|
|
type: URLS_PASTE,
|
|
|
|
newTab: Boolean(typeof o.newTab === 'undefined' ? false : o.newTab),
|
|
|
|
};
|
|
|
|
case INTERNAL_OPEN_URL:
|
|
|
|
assertOptionalBoolean(o, 'newTab');
|
|
|
|
assertOptionalBoolean(o, 'newWindow');
|
|
|
|
assertOptionalBoolean(o, 'background');
|
|
|
|
assertRequiredString(o, 'url');
|
|
|
|
return {
|
|
|
|
type: INTERNAL_OPEN_URL,
|
|
|
|
url: o.url,
|
|
|
|
newTab: Boolean(typeof o.newTab === 'undefined' ? false : o.newTab),
|
|
|
|
newWindow: Boolean(typeof o.newWindow === 'undefined' ? false : o.newWindow), // eslint-disable-line max-len
|
|
|
|
background: Boolean(typeof o.background === 'undefined' ? true : o.background), // eslint-disable-line max-len
|
|
|
|
};
|
|
|
|
case CANCEL:
|
|
|
|
case ADDON_ENABLE:
|
|
|
|
case ADDON_DISABLE:
|
|
|
|
case ADDON_TOGGLE_ENABLED:
|
|
|
|
case COMMAND_SHOW:
|
|
|
|
case COMMAND_SHOW_BUFFER:
|
|
|
|
case SCROLL_TOP:
|
|
|
|
case SCROLL_BOTTOM:
|
|
|
|
case SCROLL_HOME:
|
|
|
|
case SCROLL_END:
|
|
|
|
case NAVIGATE_HISTORY_PREV:
|
|
|
|
case NAVIGATE_HISTORY_NEXT:
|
|
|
|
case NAVIGATE_LINK_PREV:
|
|
|
|
case NAVIGATE_LINK_NEXT:
|
|
|
|
case NAVIGATE_PARENT:
|
|
|
|
case NAVIGATE_ROOT:
|
|
|
|
case FOCUS_INPUT:
|
|
|
|
case PAGE_SOURCE:
|
|
|
|
case TAB_CLOSE_FORCE:
|
|
|
|
case TAB_CLOSE_RIGHT:
|
|
|
|
case TAB_REOPEN:
|
|
|
|
case TAB_PREV:
|
|
|
|
case TAB_NEXT:
|
|
|
|
case TAB_FIRST:
|
|
|
|
case TAB_LAST:
|
|
|
|
case TAB_PREV_SEL:
|
|
|
|
case TAB_PIN:
|
|
|
|
case TAB_UNPIN:
|
|
|
|
case TAB_TOGGLE_PINNED:
|
|
|
|
case TAB_DUPLICATE:
|
|
|
|
case ZOOM_IN:
|
|
|
|
case ZOOM_OUT:
|
|
|
|
case ZOOM_NEUTRAL:
|
|
|
|
case URLS_YANK:
|
|
|
|
case FIND_START:
|
|
|
|
case FIND_NEXT:
|
|
|
|
case FIND_PREV:
|
|
|
|
case MARK_SET_PREFIX:
|
|
|
|
case MARK_JUMP_PREFIX:
|
|
|
|
case REPEAT_LAST:
|
|
|
|
return { type: o.type };
|
|
|
|
}
|
|
|
|
throw new TypeError('Unknown operation type: ' + o.type);
|
|
|
|
};
|