Use TSyringe on background script
This commit is contained in:
parent
c7803e7c29
commit
cdfd54ed99
37 changed files with 212 additions and 202 deletions
35
src/background/Application.ts
Normal file
35
src/background/Application.ts
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
|
import ContentMessageListener from './infrastructures/ContentMessageListener';
|
||||||
|
import SettingController from './controllers/SettingController';
|
||||||
|
import VersionController from './controllers/VersionController';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
|
export default class Application {
|
||||||
|
constructor(
|
||||||
|
private contentMessageListener: ContentMessageListener,
|
||||||
|
private settingController: SettingController,
|
||||||
|
private versionController: VersionController,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
run() {
|
||||||
|
this.settingController.reload();
|
||||||
|
|
||||||
|
browser.runtime.onInstalled.addListener((details) => {
|
||||||
|
if (details.reason !== 'install' && details.reason !== 'update') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.versionController.notify();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.contentMessageListener.run();
|
||||||
|
browser.storage.onChanged.addListener((changes, area) => {
|
||||||
|
if (area !== 'local') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (changes.settings) {
|
||||||
|
this.settingController.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,12 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import AddonEnabledUseCase from '../usecases/AddonEnabledUseCase';
|
import AddonEnabledUseCase from '../usecases/AddonEnabledUseCase';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class AddonEnabledController {
|
export default class AddonEnabledController {
|
||||||
private addonEnabledUseCase: AddonEnabledUseCase;
|
|
||||||
|
|
||||||
constructor() {
|
constructor(
|
||||||
this.addonEnabledUseCase = new AddonEnabledUseCase();
|
private addonEnabledUseCase: AddonEnabledUseCase,
|
||||||
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
indicate(enabled: boolean): Promise<any> {
|
indicate(enabled: boolean): Promise<any> {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import CompletionsUseCase from '../usecases/CompletionsUseCase';
|
import CompletionsUseCase from '../usecases/CompletionsUseCase';
|
||||||
import CommandUseCase from '../usecases/CommandUseCase';
|
import CommandUseCase from '../usecases/CommandUseCase';
|
||||||
import CompletionGroup from '../domains/CompletionGroup';
|
import CompletionGroup from '../domains/CompletionGroup';
|
||||||
|
@ -7,14 +8,12 @@ const trimStart = (str: string): string => {
|
||||||
return str.replace(/^\s+/, '');
|
return str.replace(/^\s+/, '');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class CommandController {
|
export default class CommandController {
|
||||||
private completionsUseCase: CompletionsUseCase;
|
constructor(
|
||||||
|
private completionsUseCase: CompletionsUseCase,
|
||||||
private commandIndicator: CommandUseCase;
|
private commandIndicator: CommandUseCase,
|
||||||
|
) {
|
||||||
constructor() {
|
|
||||||
this.completionsUseCase = new CompletionsUseCase();
|
|
||||||
this.commandIndicator = new CommandUseCase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getCompletions(line: string): Promise<CompletionGroup[]> {
|
getCompletions(line: string): Promise<CompletionGroup[]> {
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import FindUseCase from '../usecases/FindUseCase';
|
import FindUseCase from '../usecases/FindUseCase';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class FindController {
|
export default class FindController {
|
||||||
private findUseCase: FindUseCase;
|
constructor(
|
||||||
|
private findUseCase: FindUseCase,
|
||||||
constructor() {
|
) {
|
||||||
this.findUseCase = new FindUseCase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getKeyword(): Promise<string> {
|
getKeyword(): Promise<string> {
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import LinkUseCase from '../usecases/LinkUseCase';
|
import LinkUseCase from '../usecases/LinkUseCase';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class LinkController {
|
export default class LinkController {
|
||||||
private linkUseCase: LinkUseCase;
|
constructor(
|
||||||
|
private linkUseCase: LinkUseCase,
|
||||||
constructor() {
|
) {
|
||||||
this.linkUseCase = new LinkUseCase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
openToTab(url: string, tabId: number): Promise<void> {
|
openToTab(url: string, tabId: number): Promise<void> {
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import MarkUseCase from '../usecases/MarkUseCase';
|
import MarkUseCase from '../usecases/MarkUseCase';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class MarkController {
|
export default class MarkController {
|
||||||
private markUseCase: MarkUseCase;
|
constructor(
|
||||||
|
private markUseCase: MarkUseCase,
|
||||||
constructor() {
|
) {
|
||||||
this.markUseCase = new MarkUseCase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setGlobal(key: string, x: number, y: number): Promise<any> {
|
setGlobal(key: string, x: number, y: number): Promise<any> {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import * as operations from '../../shared/operations';
|
import * as operations from '../../shared/operations';
|
||||||
import FindUseCase from '../usecases/FindUseCase';
|
import FindUseCase from '../usecases/FindUseCase';
|
||||||
import ConsoleUseCase from '../usecases/ConsoleUseCase';
|
import ConsoleUseCase from '../usecases/ConsoleUseCase';
|
||||||
|
@ -5,23 +6,15 @@ import TabUseCase from '../usecases/TabUseCase';
|
||||||
import TabSelectUseCase from '../usecases/TabSelectUseCase';
|
import TabSelectUseCase from '../usecases/TabSelectUseCase';
|
||||||
import ZoomUseCase from '../usecases/ZoomUseCase';
|
import ZoomUseCase from '../usecases/ZoomUseCase';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class OperationController {
|
export default class OperationController {
|
||||||
private findUseCase: FindUseCase;
|
constructor(
|
||||||
|
private findUseCase: FindUseCase,
|
||||||
private consoleUseCase: ConsoleUseCase;
|
private consoleUseCase: ConsoleUseCase,
|
||||||
|
private tabUseCase: TabUseCase,
|
||||||
private tabUseCase: TabUseCase;
|
private tabSelectUseCase: TabSelectUseCase,
|
||||||
|
private zoomUseCase: ZoomUseCase,
|
||||||
private tabSelectUseCase: TabSelectUseCase;
|
) {
|
||||||
|
|
||||||
private zoomUseCase: ZoomUseCase;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.findUseCase = new FindUseCase();
|
|
||||||
this.consoleUseCase = new ConsoleUseCase();
|
|
||||||
this.tabUseCase = new TabUseCase();
|
|
||||||
this.tabSelectUseCase = new TabSelectUseCase();
|
|
||||||
this.zoomUseCase = new ZoomUseCase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line complexity, max-lines-per-function
|
// eslint-disable-next-line complexity, max-lines-per-function
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import SettingUseCase from '../usecases/SettingUseCase';
|
import SettingUseCase from '../usecases/SettingUseCase';
|
||||||
import ContentMessageClient from '../infrastructures/ContentMessageClient';
|
import ContentMessageClient from '../infrastructures/ContentMessageClient';
|
||||||
import Settings from '../../shared/Settings';
|
import Settings from '../../shared/Settings';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class SettingController {
|
export default class SettingController {
|
||||||
private settingUseCase: SettingUseCase;
|
constructor(
|
||||||
|
private settingUseCase: SettingUseCase,
|
||||||
private contentMessageClient: ContentMessageClient;
|
private contentMessageClient: ContentMessageClient,
|
||||||
|
) {
|
||||||
constructor() {
|
|
||||||
this.settingUseCase = new SettingUseCase();
|
|
||||||
this.contentMessageClient = new ContentMessageClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getSetting(): Promise<Settings> {
|
getSetting(): Promise<Settings> {
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import VersionUseCase from '../usecases/VersionUseCase';
|
import VersionUseCase from '../usecases/VersionUseCase';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class VersionController {
|
export default class VersionController {
|
||||||
private versionUseCase: VersionUseCase;
|
constructor(
|
||||||
|
private versionUseCase: VersionUseCase,
|
||||||
constructor() {
|
) {
|
||||||
this.versionUseCase = new VersionUseCase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
notify(): Promise<void> {
|
notify(): Promise<void> {
|
||||||
|
|
|
@ -1,23 +1,6 @@
|
||||||
import ContentMessageListener from './infrastructures/ContentMessageListener';
|
import 'reflect-metadata';
|
||||||
import SettingController from './controllers/SettingController';
|
import { container } from 'tsyringe';
|
||||||
import VersionController from './controllers/VersionController';
|
import Application from './Application';
|
||||||
|
|
||||||
let settingController = new SettingController();
|
let app = container.resolve(Application);
|
||||||
settingController.reload();
|
app.run();
|
||||||
|
|
||||||
browser.runtime.onInstalled.addListener((details) => {
|
|
||||||
if (details.reason !== 'install' && details.reason !== 'update') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
new VersionController().notify();
|
|
||||||
});
|
|
||||||
|
|
||||||
new ContentMessageListener().run();
|
|
||||||
browser.storage.onChanged.addListener((changes, area) => {
|
|
||||||
if (area !== 'local') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (changes.settings) {
|
|
||||||
settingController.reload();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import * as messages from '../../shared/messages';
|
import * as messages from '../../shared/messages';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class ConsoleClient {
|
export default class ConsoleClient {
|
||||||
showCommand(tabId: number, command: string): Promise<any> {
|
showCommand(tabId: number, command: string): Promise<any> {
|
||||||
return browser.tabs.sendMessage(tabId, {
|
return browser.tabs.sendMessage(tabId, {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import * as messages from '../../shared/messages';
|
import * as messages from '../../shared/messages';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class ContentMessageClient {
|
export default class ContentMessageClient {
|
||||||
async broadcastSettingsChanged(): Promise<void> {
|
async broadcastSettingsChanged(): Promise<void> {
|
||||||
let tabs = await browser.tabs.query({});
|
let tabs = await browser.tabs.query({});
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import * as messages from '../../shared/messages';
|
import * as messages from '../../shared/messages';
|
||||||
import CompletionGroup from '../domains/CompletionGroup';
|
import CompletionGroup from '../domains/CompletionGroup';
|
||||||
import CommandController from '../controllers/CommandController';
|
import CommandController from '../controllers/CommandController';
|
||||||
|
@ -8,32 +9,19 @@ import LinkController from '../controllers/LinkController';
|
||||||
import OperationController from '../controllers/OperationController';
|
import OperationController from '../controllers/OperationController';
|
||||||
import MarkController from '../controllers/MarkController';
|
import MarkController from '../controllers/MarkController';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class ContentMessageListener {
|
export default class ContentMessageListener {
|
||||||
private settingController: SettingController;
|
|
||||||
|
|
||||||
private commandController: CommandController;
|
|
||||||
|
|
||||||
private findController: FindController;
|
|
||||||
|
|
||||||
private addonEnabledController: AddonEnabledController;
|
|
||||||
|
|
||||||
private linkController: LinkController;
|
|
||||||
|
|
||||||
private backgroundOperationController: OperationController;
|
|
||||||
|
|
||||||
private markController: MarkController;
|
|
||||||
|
|
||||||
private consolePorts: {[tabId: number]: browser.runtime.Port};
|
private consolePorts: {[tabId: number]: browser.runtime.Port};
|
||||||
|
|
||||||
constructor() {
|
constructor(
|
||||||
this.settingController = new SettingController();
|
private settingController: SettingController,
|
||||||
this.commandController = new CommandController();
|
private commandController: CommandController,
|
||||||
this.findController = new FindController();
|
private findController: FindController,
|
||||||
this.addonEnabledController = new AddonEnabledController();
|
private addonEnabledController: AddonEnabledController,
|
||||||
this.linkController = new LinkController();
|
private linkController: LinkController,
|
||||||
this.backgroundOperationController = new OperationController();
|
private backgroundOperationController: OperationController,
|
||||||
this.markController = new MarkController();
|
private markController: MarkController,
|
||||||
|
) {
|
||||||
this.consolePorts = {};
|
this.consolePorts = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class IndicatorPresenter {
|
export default class IndicatorPresenter {
|
||||||
indicate(enabled: boolean): Promise<void> {
|
indicate(enabled: boolean): Promise<void> {
|
||||||
let path = enabled
|
let path = enabled
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
|
|
||||||
const NOTIFICATION_ID = 'vimvixen-update';
|
const NOTIFICATION_ID = 'vimvixen-update';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class NotifyPresenter {
|
export default class NotifyPresenter {
|
||||||
async notify(
|
async notify(
|
||||||
title: string,
|
title: string,
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import MemoryStorage from '../infrastructures/MemoryStorage';
|
import MemoryStorage from '../infrastructures/MemoryStorage';
|
||||||
|
|
||||||
const CURRENT_SELECTED_KEY = 'tabs.current.selected';
|
const CURRENT_SELECTED_KEY = 'tabs.current.selected';
|
||||||
|
@ -5,6 +6,7 @@ const LAST_SELECTED_KEY = 'tabs.last.selected';
|
||||||
|
|
||||||
type Tab = browser.tabs.Tab;
|
type Tab = browser.tabs.Tab;
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class TabPresenter {
|
export default class TabPresenter {
|
||||||
open(url: string, tabId?: number): Promise<Tab> {
|
open(url: string, tabId?: number): Promise<Tab> {
|
||||||
return browser.tabs.update(tabId, { url });
|
return browser.tabs.update(tabId, { url });
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class WindowPresenter {
|
export default class WindowPresenter {
|
||||||
create(url: string): Promise<browser.windows.Window> {
|
create(url: string): Promise<browser.windows.Window> {
|
||||||
return browser.windows.create({ url });
|
return browser.windows.create({ url });
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class BookmarkRepository {
|
export default class BookmarkRepository {
|
||||||
async create(
|
async create(
|
||||||
title: string, url: string
|
title: string, url: string
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import * as urls from '../../shared/urls';
|
import * as urls from '../../shared/urls';
|
||||||
|
|
||||||
declare namespace browser.browserSettings.homepageOverride {
|
declare namespace browser.browserSettings.homepageOverride {
|
||||||
|
@ -16,6 +17,7 @@ declare namespace browser.browserSettings.homepageOverride {
|
||||||
function get(param: object): Promise<BrowserSettings>;
|
function get(param: object): Promise<BrowserSettings>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class BrowserSettingRepository {
|
export default class BrowserSettingRepository {
|
||||||
async getHomepageUrls(): Promise<string[]> {
|
async getHomepageUrls(): Promise<string[]> {
|
||||||
let { value } = await browser.browserSettings.homepageOverride.get({});
|
let { value } = await browser.browserSettings.homepageOverride.get({});
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
|
|
||||||
type Tab = browser.tabs.Tab;
|
type Tab = browser.tabs.Tab;
|
||||||
type BookmarkTreeNode = browser.bookmarks.BookmarkTreeNode;
|
type BookmarkTreeNode = browser.bookmarks.BookmarkTreeNode;
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class CompletionsRepository {
|
export default class CompletionsRepository {
|
||||||
async queryBookmarks(keywords: string): Promise<BookmarkTreeNode[]> {
|
async queryBookmarks(keywords: string): Promise<BookmarkTreeNode[]> {
|
||||||
let items = await browser.bookmarks.search({ query: keywords });
|
let items = await browser.bookmarks.search({ query: keywords });
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import MemoryStorage from '../infrastructures/MemoryStorage';
|
import MemoryStorage from '../infrastructures/MemoryStorage';
|
||||||
|
|
||||||
const FIND_KEYWORD_KEY = 'find-keyword';
|
const FIND_KEYWORD_KEY = 'find-keyword';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class FindRepository {
|
export default class FindRepository {
|
||||||
private cache: MemoryStorage;
|
private cache: MemoryStorage;
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import MemoryStorage from '../infrastructures/MemoryStorage';
|
import MemoryStorage from '../infrastructures/MemoryStorage';
|
||||||
import GlobalMark from '../domains/GlobalMark';
|
import GlobalMark from '../domains/GlobalMark';
|
||||||
|
|
||||||
const MARK_KEY = 'mark';
|
const MARK_KEY = 'mark';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class MarkRepository {
|
export default class MarkRepository {
|
||||||
private cache: MemoryStorage;
|
private cache: MemoryStorage;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import SettingData from '../../shared/SettingData';
|
import SettingData from '../../shared/SettingData';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class SettingRepository {
|
export default class SettingRepository {
|
||||||
async load(): Promise<SettingData | null> {
|
async load(): Promise<SettingData | null> {
|
||||||
let { settings } = await browser.storage.local.get('settings');
|
let { settings } = await browser.storage.local.get('settings');
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import MemoryStorage from '../infrastructures/MemoryStorage';
|
import MemoryStorage from '../infrastructures/MemoryStorage';
|
||||||
import Settings from '../../shared/Settings';
|
import Settings from '../../shared/Settings';
|
||||||
import * as PropertyDefs from '../../shared/property-defs';
|
import * as PropertyDefs from '../../shared/property-defs';
|
||||||
|
|
||||||
const CACHED_SETTING_KEY = 'setting';
|
const CACHED_SETTING_KEY = 'setting';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class SettingRepository {
|
export default class SettingRepository {
|
||||||
private cache: MemoryStorage;
|
private cache: MemoryStorage;
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,21 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import IndicatorPresenter from '../presenters/IndicatorPresenter';
|
import IndicatorPresenter from '../presenters/IndicatorPresenter';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
import ContentMessageClient from '../infrastructures/ContentMessageClient';
|
import ContentMessageClient from '../infrastructures/ContentMessageClient';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class AddonEnabledUseCase {
|
export default class AddonEnabledUseCase {
|
||||||
private indicatorPresentor: IndicatorPresenter;
|
constructor(
|
||||||
|
private indicatorPresentor: IndicatorPresenter,
|
||||||
private tabPresenter: TabPresenter;
|
private tabPresenter: TabPresenter,
|
||||||
|
private contentMessageClient: ContentMessageClient,
|
||||||
private contentMessageClient: ContentMessageClient;
|
) {
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.indicatorPresentor = new IndicatorPresenter();
|
|
||||||
|
|
||||||
this.indicatorPresentor.onClick((tab) => {
|
this.indicatorPresentor.onClick((tab) => {
|
||||||
if (tab.id) {
|
if (tab.id) {
|
||||||
this.onIndicatorClick(tab.id);
|
this.onIndicatorClick(tab.id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
this.tabPresenter.onSelected(info => this.onTabSelected(info.tabId));
|
this.tabPresenter.onSelected(info => this.onTabSelected(info.tabId));
|
||||||
|
|
||||||
this.contentMessageClient = new ContentMessageClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
indicate(enabled: boolean): Promise<void> {
|
indicate(enabled: boolean): Promise<void> {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import * as parsers from './parsers';
|
import * as parsers from './parsers';
|
||||||
import * as urls from '../../shared/urls';
|
import * as urls from '../../shared/urls';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
|
@ -7,27 +8,16 @@ import BookmarkRepository from '../repositories/BookmarkRepository';
|
||||||
import ConsoleClient from '../infrastructures/ConsoleClient';
|
import ConsoleClient from '../infrastructures/ConsoleClient';
|
||||||
import ContentMessageClient from '../infrastructures/ContentMessageClient';
|
import ContentMessageClient from '../infrastructures/ContentMessageClient';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class CommandIndicator {
|
export default class CommandIndicator {
|
||||||
private tabPresenter: TabPresenter;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
private windowPresenter: WindowPresenter;
|
private windowPresenter: WindowPresenter,
|
||||||
|
private settingRepository: SettingRepository,
|
||||||
private settingRepository: SettingRepository;
|
private bookmarkRepository: BookmarkRepository,
|
||||||
|
private consoleClient: ConsoleClient,
|
||||||
private bookmarkRepository: BookmarkRepository;
|
private contentMessageClient: ContentMessageClient,
|
||||||
|
) {
|
||||||
private consoleClient: ConsoleClient;
|
|
||||||
|
|
||||||
private contentMessageClient: ContentMessageClient;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
this.windowPresenter = new WindowPresenter();
|
|
||||||
this.settingRepository = new SettingRepository();
|
|
||||||
this.bookmarkRepository = new BookmarkRepository();
|
|
||||||
this.consoleClient = new ConsoleClient();
|
|
||||||
|
|
||||||
this.contentMessageClient = new ContentMessageClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async open(keywords: string): Promise<browser.tabs.Tab> {
|
async open(keywords: string): Promise<browser.tabs.Tab> {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import CompletionGroup from '../domains/CompletionGroup';
|
import CompletionGroup from '../domains/CompletionGroup';
|
||||||
import CommandDocs from '../domains/CommandDocs';
|
import CommandDocs from '../domains/CommandDocs';
|
||||||
import CompletionsRepository from '../repositories/CompletionsRepository';
|
import CompletionsRepository from '../repositories/CompletionsRepository';
|
||||||
|
@ -11,17 +12,13 @@ const COMPLETION_ITEM_LIMIT = 10;
|
||||||
type Tab = browser.tabs.Tab;
|
type Tab = browser.tabs.Tab;
|
||||||
type HistoryItem = browser.history.HistoryItem;
|
type HistoryItem = browser.history.HistoryItem;
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class CompletionsUseCase {
|
export default class CompletionsUseCase {
|
||||||
private tabPresenter: TabPresenter;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
private completionsRepository: CompletionsRepository;
|
private completionsRepository: CompletionsRepository,
|
||||||
|
private settingRepository: SettingRepository,
|
||||||
private settingRepository: SettingRepository;
|
) {
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
this.completionsRepository = new CompletionsRepository();
|
|
||||||
this.settingRepository = new SettingRepository();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
queryConsoleCommand(prefix: string): Promise<CompletionGroup[]> {
|
queryConsoleCommand(prefix: string): Promise<CompletionGroup[]> {
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
import ConsoleClient from '../infrastructures/ConsoleClient';
|
import ConsoleClient from '../infrastructures/ConsoleClient';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class ConsoleUseCase {
|
export default class ConsoleUseCase {
|
||||||
private tabPresenter: TabPresenter;
|
|
||||||
|
|
||||||
private consoleClient: ConsoleClient;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
constructor() {
|
private consoleClient: ConsoleClient,
|
||||||
this.tabPresenter = new TabPresenter();
|
) {
|
||||||
this.consoleClient = new ConsoleClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async showCommand(): Promise<any> {
|
async showCommand(): Promise<any> {
|
||||||
|
|
|
@ -1,18 +1,15 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import FindRepository from '../repositories/FindRepository';
|
import FindRepository from '../repositories/FindRepository';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
import ConsoleClient from '../infrastructures/ConsoleClient';
|
import ConsoleClient from '../infrastructures/ConsoleClient';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class FindUseCase {
|
export default class FindUseCase {
|
||||||
private tabPresenter: TabPresenter;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
private findRepository: FindRepository;
|
private findRepository: FindRepository,
|
||||||
|
private consoleClient: ConsoleClient,
|
||||||
private consoleClient: ConsoleClient;
|
) {
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
this.findRepository = new FindRepository();
|
|
||||||
this.consoleClient = new ConsoleClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getKeyword(): Promise<string> {
|
getKeyword(): Promise<string> {
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class LinkUseCase {
|
export default class LinkUseCase {
|
||||||
private tabPresenter: TabPresenter;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
constructor() {
|
) {
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
openToTab(url: string, tabId: number): Promise<any> {
|
openToTab(url: string, tabId: number): Promise<any> {
|
||||||
|
|
|
@ -1,22 +1,17 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
import MarkRepository from '../repositories/MarkRepository';
|
import MarkRepository from '../repositories/MarkRepository';
|
||||||
import ConsoleClient from '../infrastructures/ConsoleClient';
|
import ConsoleClient from '../infrastructures/ConsoleClient';
|
||||||
import ContentMessageClient from '../infrastructures/ContentMessageClient';
|
import ContentMessageClient from '../infrastructures/ContentMessageClient';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class MarkUseCase {
|
export default class MarkUseCase {
|
||||||
private tabPresenter: TabPresenter;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
private markRepository: MarkRepository;
|
private markRepository: MarkRepository,
|
||||||
|
private consoleClient: ConsoleClient,
|
||||||
private consoleClient: ConsoleClient;
|
private contentMessageClient: ContentMessageClient,
|
||||||
|
) {
|
||||||
private contentMessageClient: ContentMessageClient;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
this.markRepository = new MarkRepository();
|
|
||||||
this.consoleClient = new ConsoleClient();
|
|
||||||
this.contentMessageClient = new ContentMessageClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async setGlobal(key: string, x: number, y: number): Promise<any> {
|
async setGlobal(key: string, x: number, y: number): Promise<any> {
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
// eslint-disable-next-line max-len
|
import { injectable } from 'tsyringe';
|
||||||
import PersistentSettingRepository from '../repositories/PersistentSettingRepository';
|
import PersistentSettingRepository
|
||||||
|
from '../repositories/PersistentSettingRepository';
|
||||||
import SettingRepository from '../repositories/SettingRepository';
|
import SettingRepository from '../repositories/SettingRepository';
|
||||||
import { DefaultSettingData } from '../../shared/SettingData';
|
import { DefaultSettingData } from '../../shared/SettingData';
|
||||||
import Settings from '../../shared/Settings';
|
import Settings from '../../shared/Settings';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class SettingUseCase {
|
export default class SettingUseCase {
|
||||||
private persistentSettingRepository: PersistentSettingRepository;
|
|
||||||
|
|
||||||
private settingRepository: SettingRepository;
|
constructor(
|
||||||
|
private persistentSettingRepository: PersistentSettingRepository,
|
||||||
constructor() {
|
private settingRepository: SettingRepository,
|
||||||
this.persistentSettingRepository = new PersistentSettingRepository();
|
) {
|
||||||
this.settingRepository = new SettingRepository();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get(): Promise<Settings> {
|
get(): Promise<Settings> {
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class TabSelectUseCase {
|
export default class TabSelectUseCase {
|
||||||
private tabPresenter: TabPresenter;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
constructor() {
|
) {
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async selectPrev(count: number): Promise<any> {
|
async selectPrev(count: number): Promise<any> {
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
import BrowserSettingRepository from '../repositories/BrowserSettingRepository';
|
import BrowserSettingRepository from '../repositories/BrowserSettingRepository';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class TabUseCase {
|
export default class TabUseCase {
|
||||||
private tabPresenter: TabPresenter;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
private browserSettingRepository: BrowserSettingRepository;
|
private browserSettingRepository: BrowserSettingRepository,
|
||||||
|
) {
|
||||||
constructor() {
|
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
this.browserSettingRepository = new BrowserSettingRepository();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async close(force: boolean): Promise<any> {
|
async close(force: boolean): Promise<any> {
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
import NotifyPresenter from '../presenters/NotifyPresenter';
|
import NotifyPresenter from '../presenters/NotifyPresenter';
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class VersionUseCase {
|
export default class VersionUseCase {
|
||||||
private tabPresenter: TabPresenter;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
private notifyPresenter: NotifyPresenter;
|
private notifyPresenter: NotifyPresenter,
|
||||||
|
) {
|
||||||
constructor() {
|
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
this.notifyPresenter = new NotifyPresenter();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
notify(): Promise<void> {
|
notify(): Promise<void> {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { injectable } from 'tsyringe';
|
||||||
import TabPresenter from '../presenters/TabPresenter';
|
import TabPresenter from '../presenters/TabPresenter';
|
||||||
|
|
||||||
const ZOOM_SETTINGS: number[] = [
|
const ZOOM_SETTINGS: number[] = [
|
||||||
|
@ -5,11 +6,11 @@ const ZOOM_SETTINGS: number[] = [
|
||||||
1.10, 1.25, 1.50, 1.75, 2.00, 2.50, 3.00
|
1.10, 1.25, 1.50, 1.75, 2.00, 2.50, 3.00
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@injectable()
|
||||||
export default class ZoomUseCase {
|
export default class ZoomUseCase {
|
||||||
private tabPresenter: TabPresenter;
|
constructor(
|
||||||
|
private tabPresenter: TabPresenter,
|
||||||
constructor() {
|
) {
|
||||||
this.tabPresenter = new TabPresenter();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async zoomIn(): Promise<any> {
|
async zoomIn(): Promise<any> {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import chai from 'chai';
|
import 'reflect-metadata';
|
||||||
|
import { expect } from 'chai';
|
||||||
|
|
||||||
const browserFake = require('webextensions-api-fake');
|
const browserFake = require('webextensions-api-fake');
|
||||||
const browser = browserFake();
|
const browser = browserFake();
|
||||||
|
|
||||||
global.expect = chai.expect;
|
global.expect = expect;
|
||||||
global.browser = browser;
|
global.browser = browser;
|
||||||
|
|
Reference in a new issue