diff options
| author | Shin'ya Ueoka <ueokande@i-beam.org> | 2020-12-10 12:52:17 +0000 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-10 12:52:17 +0000 | 
| commit | 5a0444d7bb7eae27fdca5c2be8fc3ec6c36d53bd (patch) | |
| tree | 46d70e19f9720d237f4423c1debfcacdd088ce0b /src/content/usecases | |
| parent | a3c34a309c4b1421eb4914c3fbeba327a5400021 (diff) | |
| parent | d2fb674566393d9a8b88d71dba9f5081786b118c (diff) | |
Merge pull request #917 from ueokande/operation-as-a-operator
refactor: Make each operation as an operator
Diffstat (limited to 'src/content/usecases')
| -rw-r--r-- | src/content/usecases/ClipboardUseCase.ts | 34 | ||||
| -rw-r--r-- | src/content/usecases/FindSlaveUseCase.ts | 17 | ||||
| -rw-r--r-- | src/content/usecases/FocusUseCase.ts | 11 | ||||
| -rw-r--r-- | src/content/usecases/FollowMasterUseCase.ts | 18 | ||||
| -rw-r--r-- | src/content/usecases/HintKeyProducer.ts | 37 | ||||
| -rw-r--r-- | src/content/usecases/MarkKeyUseCase.ts | 8 | ||||
| -rw-r--r-- | src/content/usecases/ScrollUseCase.ts | 51 | 
7 files changed, 8 insertions, 168 deletions
| diff --git a/src/content/usecases/ClipboardUseCase.ts b/src/content/usecases/ClipboardUseCase.ts deleted file mode 100644 index 875fc11..0000000 --- a/src/content/usecases/ClipboardUseCase.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { injectable, inject } from "tsyringe"; -import * as urls from "../../shared/urls"; -import ClipboardRepository from "../repositories/ClipboardRepository"; -import SettingRepository from "../repositories/SettingRepository"; -import ConsoleClient from "../client/ConsoleClient"; -import OperationClient from "../client/OperationClient"; - -@injectable() -export default class ClipboardUseCase { -  constructor( -    @inject("ClipboardRepository") private repository: ClipboardRepository, -    @inject("SettingRepository") private settingRepository: SettingRepository, -    @inject("ConsoleClient") private consoleClient: ConsoleClient, -    @inject("OperationClient") private operationClinet: OperationClient -  ) {} - -  async yankCurrentURL(): Promise<string> { -    const url = window.location.href; -    this.repository.write(url); -    await this.consoleClient.info("Yanked " + url); -    return Promise.resolve(url); -  } - -  async openOrSearch(newTab: boolean): Promise<void> { -    const search = this.settingRepository.get().search; -    const text = this.repository.read(); -    const url = urls.searchUrl(text, search); - -    // TODO: Repeat pasting from clipboard instead of opening a certain url. -    // 'Repeat last' command is implemented in the background script and cannot -    // access to clipboard until Firefox 63. -    await this.operationClinet.internalOpenUrl(url, newTab); -  } -} diff --git a/src/content/usecases/FindSlaveUseCase.ts b/src/content/usecases/FindSlaveUseCase.ts deleted file mode 100644 index 3b8c4b4..0000000 --- a/src/content/usecases/FindSlaveUseCase.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { injectable, inject } from "tsyringe"; -import FindMasterClient from "../client/FindMasterClient"; - -@injectable() -export default class FindSlaveUseCase { -  constructor( -    @inject("FindMasterClient") private findMasterClient: FindMasterClient -  ) {} - -  findNext() { -    this.findMasterClient.findNext(); -  } - -  findPrev() { -    this.findMasterClient.findPrev(); -  } -} diff --git a/src/content/usecases/FocusUseCase.ts b/src/content/usecases/FocusUseCase.ts deleted file mode 100644 index 8c62003..0000000 --- a/src/content/usecases/FocusUseCase.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { injectable, inject } from "tsyringe"; -import FocusPresenter from "../presenters/FocusPresenter"; - -@injectable() -export default class FocusUseCases { -  constructor(@inject("FocusPresenter") private presenter: FocusPresenter) {} - -  focusFirstInput() { -    this.presenter.focusFirstElement(); -  } -} diff --git a/src/content/usecases/FollowMasterUseCase.ts b/src/content/usecases/FollowMasterUseCase.ts index 88c682e..f4705e1 100644 --- a/src/content/usecases/FollowMasterUseCase.ts +++ b/src/content/usecases/FollowMasterUseCase.ts @@ -4,13 +4,10 @@ import FollowMasterRepository from "../repositories/FollowMasterRepository";  import FollowSlaveClient from "../client/FollowSlaveClient";  import FollowSlaveClientFactory from "../client/FollowSlaveClientFactory";  import SettingRepository from "../repositories/SettingRepository"; -import HintKeyProducer from "./HintKeyProducer"; +import HintKeyRepository from "../repositories/HintKeyRepository";  @injectable()  export default class FollowMasterUseCase { -  // TODO Make repository -  private producer: HintKeyProducer | null; -    constructor(      @inject("FollowKeyRepository")      private followKeyRepository: FollowKeyRepository, @@ -22,14 +19,15 @@ export default class FollowMasterUseCase {      private settingRepository: SettingRepository,      @inject("FollowSlaveClientFactory") -    private followSlaveClientFactory: FollowSlaveClientFactory -  ) { -    this.producer = null; -  } +    private followSlaveClientFactory: FollowSlaveClientFactory, + +    @inject("HintKeyRepository") +    private hintKeyRepository: HintKeyRepository +  ) {}    startFollow(newTab: boolean, background: boolean): void {      const hintchars = this.settingRepository.get().properties.hintchars; -    this.producer = new HintKeyProducer(hintchars); +    this.hintKeyRepository.reset(hintchars);      this.followKeyRepository.clearKeys();      this.followMasterRepository.setCurrentFollowMode(newTab, background); @@ -59,7 +57,7 @@ export default class FollowMasterUseCase {    createSlaveHints(count: number, sender: Window): void {      const produced = [];      for (let i = 0; i < count; ++i) { -      const tag = this.producer!.produce(); +      const tag = this.hintKeyRepository.produce();        produced.push(tag);        this.followMasterRepository.addTag(tag);      } diff --git a/src/content/usecases/HintKeyProducer.ts b/src/content/usecases/HintKeyProducer.ts deleted file mode 100644 index a5e2877..0000000 --- a/src/content/usecases/HintKeyProducer.ts +++ /dev/null @@ -1,37 +0,0 @@ -export default class HintKeyProducer { -  private charset: string; - -  private counter: number[]; - -  constructor(charset: string) { -    if (charset.length === 0) { -      throw new TypeError("charset is empty"); -    } - -    this.charset = charset; -    this.counter = []; -  } - -  produce(): string { -    this.increment(); - -    return this.counter.map((x) => this.charset[x]).join(""); -  } - -  private increment(): void { -    const max = this.charset.length - 1; -    if (this.counter.every((x) => x === max)) { -      this.counter = new Array(this.counter.length + 1).fill(0); -      return; -    } - -    this.counter.reverse(); -    const len = this.charset.length; -    let num = this.counter.reduce((x, y, index) => x + y * len ** index) + 1; -    for (let i = 0; i < this.counter.length; ++i) { -      this.counter[i] = num % len; -      num = ~~(num / len); -    } -    this.counter.reverse(); -  } -} diff --git a/src/content/usecases/MarkKeyUseCase.ts b/src/content/usecases/MarkKeyUseCase.ts index b807c74..61ed135 100644 --- a/src/content/usecases/MarkKeyUseCase.ts +++ b/src/content/usecases/MarkKeyUseCase.ts @@ -15,18 +15,10 @@ export default class MarkKeyUseCase {      return this.repository.isJumpMode();    } -  enableSetMode(): void { -    this.repository.enableSetMode(); -  } -    disableSetMode(): void {      this.repository.disabeSetMode();    } -  enableJumpMode(): void { -    this.repository.enableJumpMode(); -  } -    disableJumpMode(): void {      this.repository.disabeJumpMode();    } diff --git a/src/content/usecases/ScrollUseCase.ts b/src/content/usecases/ScrollUseCase.ts deleted file mode 100644 index 319c8b4..0000000 --- a/src/content/usecases/ScrollUseCase.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { injectable, inject } from "tsyringe"; -import ScrollPresenter from "../presenters/ScrollPresenter"; -import SettingRepository from "../repositories/SettingRepository"; - -@injectable() -export default class ScrollUseCase { -  constructor( -    @inject("ScrollPresenter") private presenter: ScrollPresenter, -    @inject("SettingRepository") private settingRepository: SettingRepository -  ) {} - -  scrollVertically(count: number): void { -    const smooth = this.getSmoothScroll(); -    this.presenter.scrollVertically(count, smooth); -  } - -  scrollHorizonally(count: number): void { -    const smooth = this.getSmoothScroll(); -    this.presenter.scrollHorizonally(count, smooth); -  } - -  scrollPages(count: number): void { -    const smooth = this.getSmoothScroll(); -    this.presenter.scrollPages(count, smooth); -  } - -  scrollToTop(): void { -    const smooth = this.getSmoothScroll(); -    this.presenter.scrollToTop(smooth); -  } - -  scrollToBottom(): void { -    const smooth = this.getSmoothScroll(); -    this.presenter.scrollToBottom(smooth); -  } - -  scrollToHome(): void { -    const smooth = this.getSmoothScroll(); -    this.presenter.scrollToHome(smooth); -  } - -  scrollToEnd(): void { -    const smooth = this.getSmoothScroll(); -    this.presenter.scrollToEnd(smooth); -  } - -  private getSmoothScroll(): boolean { -    const settings = this.settingRepository.get(); -    return settings.properties.smoothscroll; -  } -} | 
