Path: blob/main/src/vs/workbench/contrib/browserView/electron-browser/browserViewActions.ts
4779 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { localize2 } from '../../../../nls.js';6import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';7import { Action2, registerAction2, MenuId } from '../../../../platform/actions/common/actions.js';8import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';9import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js';10import { KeyMod, KeyCode } from '../../../../base/common/keyCodes.js';11import { IEditorService } from '../../../services/editor/common/editorService.js';12import { Codicon } from '../../../../base/common/codicons.js';13import { BrowserEditor, CONTEXT_BROWSER_CAN_GO_BACK, CONTEXT_BROWSER_CAN_GO_FORWARD, CONTEXT_BROWSER_DEVTOOLS_OPEN, CONTEXT_BROWSER_FOCUSED, CONTEXT_BROWSER_STORAGE_SCOPE } from './browserEditor.js';14import { BrowserViewUri } from '../../../../platform/browserView/common/browserViewUri.js';15import { IBrowserViewWorkbenchService } from '../common/browserView.js';16import { BrowserViewStorageScope } from '../../../../platform/browserView/common/browserView.js';1718// Context key expression to check if browser editor is active19const BROWSER_EDITOR_ACTIVE = ContextKeyExpr.equals('activeEditor', BrowserEditor.ID);2021const BrowserCategory = localize2('browserCategory', "Browser");2223class OpenIntegratedBrowserAction extends Action2 {24constructor() {25super({26id: 'workbench.action.browser.open',27title: localize2('browser.openAction', "Open Integrated Browser"),28category: BrowserCategory,29f1: true30});31}3233async run(accessor: ServicesAccessor, url?: string): Promise<void> {34const editorService = accessor.get(IEditorService);35const resource = BrowserViewUri.forUrl(url);3637await editorService.openEditor({ resource });38}39}4041class GoBackAction extends Action2 {42static readonly ID = 'workbench.action.browser.goBack';4344constructor() {45super({46id: GoBackAction.ID,47title: localize2('browser.goBackAction', 'Go Back'),48category: BrowserCategory,49icon: Codicon.arrowLeft,50f1: false,51menu: {52id: MenuId.BrowserNavigationToolbar,53group: 'navigation',54order: 1,55},56precondition: ContextKeyExpr.and(BROWSER_EDITOR_ACTIVE, CONTEXT_BROWSER_CAN_GO_BACK),57keybinding: {58when: BROWSER_EDITOR_ACTIVE,59weight: KeybindingWeight.WorkbenchContrib,60primary: KeyMod.Alt | KeyCode.LeftArrow,61secondary: [KeyCode.BrowserBack],62mac: { primary: KeyMod.CtrlCmd | KeyCode.LeftArrow, secondary: [KeyCode.BrowserBack] }63}64});65}6667async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {68if (browserEditor instanceof BrowserEditor) {69await browserEditor.goBack();70}71}72}7374class GoForwardAction extends Action2 {75static readonly ID = 'workbench.action.browser.goForward';7677constructor() {78super({79id: GoForwardAction.ID,80title: localize2('browser.goForwardAction', 'Go Forward'),81category: BrowserCategory,82icon: Codicon.arrowRight,83f1: false,84menu: {85id: MenuId.BrowserNavigationToolbar,86group: 'navigation',87order: 2,88when: ContextKeyExpr.and(BROWSER_EDITOR_ACTIVE, CONTEXT_BROWSER_CAN_GO_FORWARD)89},90precondition: ContextKeyExpr.and(BROWSER_EDITOR_ACTIVE, CONTEXT_BROWSER_CAN_GO_FORWARD),91keybinding: {92when: BROWSER_EDITOR_ACTIVE,93weight: KeybindingWeight.WorkbenchContrib,94primary: KeyMod.Alt | KeyCode.RightArrow,95secondary: [KeyCode.BrowserForward],96mac: { primary: KeyMod.CtrlCmd | KeyCode.RightArrow, secondary: [KeyCode.BrowserForward] }97}98});99}100101async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {102if (browserEditor instanceof BrowserEditor) {103await browserEditor.goForward();104}105}106}107108class ReloadAction extends Action2 {109static readonly ID = 'workbench.action.browser.reload';110111constructor() {112super({113id: ReloadAction.ID,114title: localize2('browser.reloadAction', 'Reload'),115category: BrowserCategory,116icon: Codicon.refresh,117f1: false,118menu: {119id: MenuId.BrowserNavigationToolbar,120group: 'navigation',121order: 3,122},123precondition: BROWSER_EDITOR_ACTIVE,124keybinding: {125when: CONTEXT_BROWSER_FOCUSED, // Keybinding is only active when focus is within the browser editor126weight: KeybindingWeight.WorkbenchContrib + 50, // Priority over debug127primary: KeyCode.F5,128secondary: [KeyMod.CtrlCmd | KeyCode.KeyR],129mac: { primary: KeyCode.F5, secondary: [KeyMod.CtrlCmd | KeyCode.KeyR] }130}131});132}133134async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {135if (browserEditor instanceof BrowserEditor) {136await browserEditor.reload();137}138}139}140141class ToggleDevToolsAction extends Action2 {142static readonly ID = 'workbench.action.browser.toggleDevTools';143144constructor() {145super({146id: ToggleDevToolsAction.ID,147title: localize2('browser.toggleDevToolsAction', 'Toggle Developer Tools'),148category: BrowserCategory,149icon: Codicon.tools,150f1: false,151toggled: ContextKeyExpr.equals(CONTEXT_BROWSER_DEVTOOLS_OPEN.key, true),152menu: {153id: MenuId.BrowserActionsToolbar,154group: 'actions',155order: 1,156when: BROWSER_EDITOR_ACTIVE157},158precondition: BROWSER_EDITOR_ACTIVE159});160}161162async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {163if (browserEditor instanceof BrowserEditor) {164await browserEditor.toggleDevTools();165}166}167}168169class ClearGlobalBrowserStorageAction extends Action2 {170static readonly ID = 'workbench.action.browser.clearGlobalStorage';171172constructor() {173super({174id: ClearGlobalBrowserStorageAction.ID,175title: localize2('browser.clearGlobalStorageAction', 'Clear Storage (Global)'),176category: BrowserCategory,177icon: Codicon.clearAll,178f1: true,179menu: {180id: MenuId.BrowserActionsToolbar,181group: 'storage',182order: 1,183when: ContextKeyExpr.equals(CONTEXT_BROWSER_STORAGE_SCOPE.key, BrowserViewStorageScope.Global)184}185});186}187188async run(accessor: ServicesAccessor): Promise<void> {189const browserViewWorkbenchService = accessor.get(IBrowserViewWorkbenchService);190await browserViewWorkbenchService.clearGlobalStorage();191}192}193194class ClearWorkspaceBrowserStorageAction extends Action2 {195static readonly ID = 'workbench.action.browser.clearWorkspaceStorage';196197constructor() {198super({199id: ClearWorkspaceBrowserStorageAction.ID,200title: localize2('browser.clearWorkspaceStorageAction', 'Clear Storage (Workspace)'),201category: BrowserCategory,202icon: Codicon.clearAll,203f1: true,204menu: {205id: MenuId.BrowserActionsToolbar,206group: 'storage',207order: 2,208when: ContextKeyExpr.equals(CONTEXT_BROWSER_STORAGE_SCOPE.key, BrowserViewStorageScope.Workspace)209}210});211}212213async run(accessor: ServicesAccessor): Promise<void> {214const browserViewWorkbenchService = accessor.get(IBrowserViewWorkbenchService);215await browserViewWorkbenchService.clearWorkspaceStorage();216}217}218219// Register actions220registerAction2(OpenIntegratedBrowserAction);221registerAction2(GoBackAction);222registerAction2(GoForwardAction);223registerAction2(ReloadAction);224registerAction2(ToggleDevToolsAction);225registerAction2(ClearGlobalBrowserStorageAction);226registerAction2(ClearWorkspaceBrowserStorageAction);227228229