Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/browserView/electron-browser/browserViewActions.ts
4779 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { localize2 } from '../../../../nls.js';
7
import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';
8
import { Action2, registerAction2, MenuId } from '../../../../platform/actions/common/actions.js';
9
import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';
10
import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js';
11
import { KeyMod, KeyCode } from '../../../../base/common/keyCodes.js';
12
import { IEditorService } from '../../../services/editor/common/editorService.js';
13
import { Codicon } from '../../../../base/common/codicons.js';
14
import { 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';
15
import { BrowserViewUri } from '../../../../platform/browserView/common/browserViewUri.js';
16
import { IBrowserViewWorkbenchService } from '../common/browserView.js';
17
import { BrowserViewStorageScope } from '../../../../platform/browserView/common/browserView.js';
18
19
// Context key expression to check if browser editor is active
20
const BROWSER_EDITOR_ACTIVE = ContextKeyExpr.equals('activeEditor', BrowserEditor.ID);
21
22
const BrowserCategory = localize2('browserCategory', "Browser");
23
24
class OpenIntegratedBrowserAction extends Action2 {
25
constructor() {
26
super({
27
id: 'workbench.action.browser.open',
28
title: localize2('browser.openAction', "Open Integrated Browser"),
29
category: BrowserCategory,
30
f1: true
31
});
32
}
33
34
async run(accessor: ServicesAccessor, url?: string): Promise<void> {
35
const editorService = accessor.get(IEditorService);
36
const resource = BrowserViewUri.forUrl(url);
37
38
await editorService.openEditor({ resource });
39
}
40
}
41
42
class GoBackAction extends Action2 {
43
static readonly ID = 'workbench.action.browser.goBack';
44
45
constructor() {
46
super({
47
id: GoBackAction.ID,
48
title: localize2('browser.goBackAction', 'Go Back'),
49
category: BrowserCategory,
50
icon: Codicon.arrowLeft,
51
f1: false,
52
menu: {
53
id: MenuId.BrowserNavigationToolbar,
54
group: 'navigation',
55
order: 1,
56
},
57
precondition: ContextKeyExpr.and(BROWSER_EDITOR_ACTIVE, CONTEXT_BROWSER_CAN_GO_BACK),
58
keybinding: {
59
when: BROWSER_EDITOR_ACTIVE,
60
weight: KeybindingWeight.WorkbenchContrib,
61
primary: KeyMod.Alt | KeyCode.LeftArrow,
62
secondary: [KeyCode.BrowserBack],
63
mac: { primary: KeyMod.CtrlCmd | KeyCode.LeftArrow, secondary: [KeyCode.BrowserBack] }
64
}
65
});
66
}
67
68
async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {
69
if (browserEditor instanceof BrowserEditor) {
70
await browserEditor.goBack();
71
}
72
}
73
}
74
75
class GoForwardAction extends Action2 {
76
static readonly ID = 'workbench.action.browser.goForward';
77
78
constructor() {
79
super({
80
id: GoForwardAction.ID,
81
title: localize2('browser.goForwardAction', 'Go Forward'),
82
category: BrowserCategory,
83
icon: Codicon.arrowRight,
84
f1: false,
85
menu: {
86
id: MenuId.BrowserNavigationToolbar,
87
group: 'navigation',
88
order: 2,
89
when: ContextKeyExpr.and(BROWSER_EDITOR_ACTIVE, CONTEXT_BROWSER_CAN_GO_FORWARD)
90
},
91
precondition: ContextKeyExpr.and(BROWSER_EDITOR_ACTIVE, CONTEXT_BROWSER_CAN_GO_FORWARD),
92
keybinding: {
93
when: BROWSER_EDITOR_ACTIVE,
94
weight: KeybindingWeight.WorkbenchContrib,
95
primary: KeyMod.Alt | KeyCode.RightArrow,
96
secondary: [KeyCode.BrowserForward],
97
mac: { primary: KeyMod.CtrlCmd | KeyCode.RightArrow, secondary: [KeyCode.BrowserForward] }
98
}
99
});
100
}
101
102
async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {
103
if (browserEditor instanceof BrowserEditor) {
104
await browserEditor.goForward();
105
}
106
}
107
}
108
109
class ReloadAction extends Action2 {
110
static readonly ID = 'workbench.action.browser.reload';
111
112
constructor() {
113
super({
114
id: ReloadAction.ID,
115
title: localize2('browser.reloadAction', 'Reload'),
116
category: BrowserCategory,
117
icon: Codicon.refresh,
118
f1: false,
119
menu: {
120
id: MenuId.BrowserNavigationToolbar,
121
group: 'navigation',
122
order: 3,
123
},
124
precondition: BROWSER_EDITOR_ACTIVE,
125
keybinding: {
126
when: CONTEXT_BROWSER_FOCUSED, // Keybinding is only active when focus is within the browser editor
127
weight: KeybindingWeight.WorkbenchContrib + 50, // Priority over debug
128
primary: KeyCode.F5,
129
secondary: [KeyMod.CtrlCmd | KeyCode.KeyR],
130
mac: { primary: KeyCode.F5, secondary: [KeyMod.CtrlCmd | KeyCode.KeyR] }
131
}
132
});
133
}
134
135
async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {
136
if (browserEditor instanceof BrowserEditor) {
137
await browserEditor.reload();
138
}
139
}
140
}
141
142
class ToggleDevToolsAction extends Action2 {
143
static readonly ID = 'workbench.action.browser.toggleDevTools';
144
145
constructor() {
146
super({
147
id: ToggleDevToolsAction.ID,
148
title: localize2('browser.toggleDevToolsAction', 'Toggle Developer Tools'),
149
category: BrowserCategory,
150
icon: Codicon.tools,
151
f1: false,
152
toggled: ContextKeyExpr.equals(CONTEXT_BROWSER_DEVTOOLS_OPEN.key, true),
153
menu: {
154
id: MenuId.BrowserActionsToolbar,
155
group: 'actions',
156
order: 1,
157
when: BROWSER_EDITOR_ACTIVE
158
},
159
precondition: BROWSER_EDITOR_ACTIVE
160
});
161
}
162
163
async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {
164
if (browserEditor instanceof BrowserEditor) {
165
await browserEditor.toggleDevTools();
166
}
167
}
168
}
169
170
class ClearGlobalBrowserStorageAction extends Action2 {
171
static readonly ID = 'workbench.action.browser.clearGlobalStorage';
172
173
constructor() {
174
super({
175
id: ClearGlobalBrowserStorageAction.ID,
176
title: localize2('browser.clearGlobalStorageAction', 'Clear Storage (Global)'),
177
category: BrowserCategory,
178
icon: Codicon.clearAll,
179
f1: true,
180
menu: {
181
id: MenuId.BrowserActionsToolbar,
182
group: 'storage',
183
order: 1,
184
when: ContextKeyExpr.equals(CONTEXT_BROWSER_STORAGE_SCOPE.key, BrowserViewStorageScope.Global)
185
}
186
});
187
}
188
189
async run(accessor: ServicesAccessor): Promise<void> {
190
const browserViewWorkbenchService = accessor.get(IBrowserViewWorkbenchService);
191
await browserViewWorkbenchService.clearGlobalStorage();
192
}
193
}
194
195
class ClearWorkspaceBrowserStorageAction extends Action2 {
196
static readonly ID = 'workbench.action.browser.clearWorkspaceStorage';
197
198
constructor() {
199
super({
200
id: ClearWorkspaceBrowserStorageAction.ID,
201
title: localize2('browser.clearWorkspaceStorageAction', 'Clear Storage (Workspace)'),
202
category: BrowserCategory,
203
icon: Codicon.clearAll,
204
f1: true,
205
menu: {
206
id: MenuId.BrowserActionsToolbar,
207
group: 'storage',
208
order: 2,
209
when: ContextKeyExpr.equals(CONTEXT_BROWSER_STORAGE_SCOPE.key, BrowserViewStorageScope.Workspace)
210
}
211
});
212
}
213
214
async run(accessor: ServicesAccessor): Promise<void> {
215
const browserViewWorkbenchService = accessor.get(IBrowserViewWorkbenchService);
216
await browserViewWorkbenchService.clearWorkspaceStorage();
217
}
218
}
219
220
// Register actions
221
registerAction2(OpenIntegratedBrowserAction);
222
registerAction2(GoBackAction);
223
registerAction2(GoForwardAction);
224
registerAction2(ReloadAction);
225
registerAction2(ToggleDevToolsAction);
226
registerAction2(ClearGlobalBrowserStorageAction);
227
registerAction2(ClearWorkspaceBrowserStorageAction);
228
229