import { inject, injectable } from "tsyringe"; import NavigateClient from "../clients/NavigateClient"; import TabPresenter from "../presenters/TabPresenter"; @injectable() export default class NavigateUseCase { constructor( @inject("TabPresenter") private tabPresenter: TabPresenter, private navigateClient: NavigateClient ) {} async openHistoryNext(): Promise { const tab = await this.tabPresenter.getCurrent(); await this.navigateClient.historyNext(tab.id!); } async openHistoryPrev(): Promise { const tab = await this.tabPresenter.getCurrent(); await this.navigateClient.historyPrev(tab.id!); } async openLinkNext(): Promise { const tab = await this.tabPresenter.getCurrent(); await this.navigateClient.linkNext(tab.id!); } async openLinkPrev(): Promise { const tab = await this.tabPresenter.getCurrent(); await this.navigateClient.linkPrev(tab.id!); } async openParent(): Promise { const tab = await this.tabPresenter.getCurrent(); const url = new URL(tab.url!); if (url.hash.length > 0) { url.hash = ""; } else if (url.search.length > 0) { url.search = ""; } else { const basenamePattern = /\/[^/]+$/; const lastDirPattern = /\/[^/]+\/$/; if (basenamePattern.test(url.pathname)) { url.pathname = url.pathname.replace(basenamePattern, "/"); } else if (lastDirPattern.test(url.pathname)) { url.pathname = url.pathname.replace(lastDirPattern, "/"); } } await this.tabPresenter.open(url.href); } async openRoot(): Promise { const tab = await this.tabPresenter.getCurrent(); const url = new URL(tab.url!); await this.tabPresenter.open(url.origin); } }