Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/browserView/electron-browser/features/browserDevToolsFeature.ts
13405 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 { localize, localize2 } from '../../../../../nls.js';
7
import { DisposableStore } from '../../../../../base/common/lifecycle.js';
8
import { Codicon } from '../../../../../base/common/codicons.js';
9
import { KeyCode } from '../../../../../base/common/keyCodes.js';
10
import { RawContextKey, IContextKey, IContextKeyService, ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js';
11
import { Action2, registerAction2, MenuId } from '../../../../../platform/actions/common/actions.js';
12
import { ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js';
13
import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';
14
import { BrowserViewCommandId } from '../../../../../platform/browserView/common/browserView.js';
15
import { IEditorService } from '../../../../services/editor/common/editorService.js';
16
import { IBrowserViewModel } from '../../common/browserView.js';
17
import { BrowserEditor, BrowserEditorContribution, CONTEXT_BROWSER_HAS_ERROR, CONTEXT_BROWSER_HAS_URL } from '../browserEditor.js';
18
import { BROWSER_EDITOR_ACTIVE, BrowserActionCategory } from '../browserViewActions.js';
19
20
const CONTEXT_BROWSER_DEVTOOLS_OPEN = new RawContextKey<boolean>('browserDevToolsOpen', false, localize('browser.devToolsOpen', "Whether developer tools are open for the current browser view"));
21
22
class BrowserEditorDevToolsContribution extends BrowserEditorContribution {
23
private readonly _devToolsOpenContext: IContextKey<boolean>;
24
25
constructor(
26
editor: BrowserEditor,
27
@IContextKeyService contextKeyService: IContextKeyService,
28
) {
29
super(editor);
30
this._devToolsOpenContext = CONTEXT_BROWSER_DEVTOOLS_OPEN.bindTo(contextKeyService);
31
}
32
33
protected override subscribeToModel(model: IBrowserViewModel, store: DisposableStore): void {
34
this._devToolsOpenContext.set(model.isDevToolsOpen);
35
store.add(model.onDidChangeDevToolsState(e => {
36
this._devToolsOpenContext.set(e.isDevToolsOpen);
37
}));
38
}
39
40
override clear(): void {
41
this._devToolsOpenContext.reset();
42
}
43
}
44
45
BrowserEditor.registerContribution(BrowserEditorDevToolsContribution);
46
47
class ToggleDevToolsAction extends Action2 {
48
static readonly ID = BrowserViewCommandId.ToggleDevTools;
49
50
constructor() {
51
super({
52
id: ToggleDevToolsAction.ID,
53
title: localize2('browser.toggleDevToolsAction', 'Toggle Developer Tools'),
54
category: BrowserActionCategory,
55
icon: Codicon.terminal,
56
f1: true,
57
precondition: ContextKeyExpr.and(BROWSER_EDITOR_ACTIVE, CONTEXT_BROWSER_HAS_URL, CONTEXT_BROWSER_HAS_ERROR.negate()),
58
toggled: ContextKeyExpr.equals(CONTEXT_BROWSER_DEVTOOLS_OPEN.key, true),
59
menu: {
60
id: MenuId.BrowserActionsToolbar,
61
group: 'actions',
62
order: 3,
63
},
64
keybinding: {
65
weight: KeybindingWeight.WorkbenchContrib,
66
primary: KeyCode.F12
67
}
68
});
69
}
70
71
async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {
72
if (browserEditor instanceof BrowserEditor) {
73
await browserEditor.toggleDevTools();
74
}
75
}
76
}
77
78
registerAction2(ToggleDevToolsAction);
79
80