Path: blob/main/src/vs/workbench/contrib/browserView/electron-browser/features/browserDevToolsFeature.ts
13405 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 { localize, localize2 } from '../../../../../nls.js';6import { DisposableStore } from '../../../../../base/common/lifecycle.js';7import { Codicon } from '../../../../../base/common/codicons.js';8import { KeyCode } from '../../../../../base/common/keyCodes.js';9import { RawContextKey, IContextKey, IContextKeyService, ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js';10import { Action2, registerAction2, MenuId } from '../../../../../platform/actions/common/actions.js';11import { ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js';12import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';13import { BrowserViewCommandId } from '../../../../../platform/browserView/common/browserView.js';14import { IEditorService } from '../../../../services/editor/common/editorService.js';15import { IBrowserViewModel } from '../../common/browserView.js';16import { BrowserEditor, BrowserEditorContribution, CONTEXT_BROWSER_HAS_ERROR, CONTEXT_BROWSER_HAS_URL } from '../browserEditor.js';17import { BROWSER_EDITOR_ACTIVE, BrowserActionCategory } from '../browserViewActions.js';1819const CONTEXT_BROWSER_DEVTOOLS_OPEN = new RawContextKey<boolean>('browserDevToolsOpen', false, localize('browser.devToolsOpen', "Whether developer tools are open for the current browser view"));2021class BrowserEditorDevToolsContribution extends BrowserEditorContribution {22private readonly _devToolsOpenContext: IContextKey<boolean>;2324constructor(25editor: BrowserEditor,26@IContextKeyService contextKeyService: IContextKeyService,27) {28super(editor);29this._devToolsOpenContext = CONTEXT_BROWSER_DEVTOOLS_OPEN.bindTo(contextKeyService);30}3132protected override subscribeToModel(model: IBrowserViewModel, store: DisposableStore): void {33this._devToolsOpenContext.set(model.isDevToolsOpen);34store.add(model.onDidChangeDevToolsState(e => {35this._devToolsOpenContext.set(e.isDevToolsOpen);36}));37}3839override clear(): void {40this._devToolsOpenContext.reset();41}42}4344BrowserEditor.registerContribution(BrowserEditorDevToolsContribution);4546class ToggleDevToolsAction extends Action2 {47static readonly ID = BrowserViewCommandId.ToggleDevTools;4849constructor() {50super({51id: ToggleDevToolsAction.ID,52title: localize2('browser.toggleDevToolsAction', 'Toggle Developer Tools'),53category: BrowserActionCategory,54icon: Codicon.terminal,55f1: true,56precondition: ContextKeyExpr.and(BROWSER_EDITOR_ACTIVE, CONTEXT_BROWSER_HAS_URL, CONTEXT_BROWSER_HAS_ERROR.negate()),57toggled: ContextKeyExpr.equals(CONTEXT_BROWSER_DEVTOOLS_OPEN.key, true),58menu: {59id: MenuId.BrowserActionsToolbar,60group: 'actions',61order: 3,62},63keybinding: {64weight: KeybindingWeight.WorkbenchContrib,65primary: KeyCode.F1266}67});68}6970async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise<void> {71if (browserEditor instanceof BrowserEditor) {72await browserEditor.toggleDevTools();73}74}75}7677registerAction2(ToggleDevToolsAction);787980