UNPKG

chrome-devtools-frontend

Version:
170 lines (155 loc) • 5.23 kB
// Copyright 2023 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import * as i18n from '../../core/i18n/i18n.js'; import * as UI from '../../ui/legacy/legacy.js'; // eslint-disable-next-line rulesdir/es_modules_import import type * as Recorder from './recorder.js'; import * as Actions from './recorder-actions.js'; const UIStrings = { /** *@description Title of the Recorder Panel */ recorder: 'Recorder', /** *@description Title of the Recorder Panel */ showRecorder: 'Show Recorder', /** *@description Title of start/stop recording action in command menu */ startStopRecording: 'Start/Stop recording', /** *@description Title of create a new recording action in command menu */ createRecording: 'Create a new recording', /** *@description Title of start a new recording action in command menu */ replayRecording: 'Replay recording', /** * @description Title for toggling code action in command menu */ toggleCode: 'Toggle code view', }; // TODO: (crbug.com/1181019) const RecorderCategory = 'Recorder'; const str_ = i18n.i18n.registerUIStrings( 'panels/recorder/recorder-meta.ts', UIStrings, ); const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind( undefined, str_, ); let loadedRecorderModule: typeof Recorder|undefined; async function loadRecorderModule(): Promise<typeof Recorder> { if (!loadedRecorderModule) { loadedRecorderModule = await import('./recorder.js'); } return loadedRecorderModule; } function maybeRetrieveContextTypes<T = unknown>( getClassCallBack: (loadedRecorderModule: typeof Recorder) => T[], actionId: string, ): T[] { if (loadedRecorderModule === undefined) { return []; } if (actionId && loadedRecorderModule.RecorderPanel.RecorderPanel.instance().isActionPossible( actionId as Actions.RecorderActions, )) { return getClassCallBack(loadedRecorderModule); } return []; } (UI.ViewManager.defaultOptionsForTabs as {[key: string]: boolean}).chrome_recorder = true; UI.ViewManager.registerViewExtension({ location: UI.ViewManager.ViewLocationValues.PANEL, id: 'chrome_recorder', commandPrompt: i18nLazyString(UIStrings.showRecorder), title: i18nLazyString(UIStrings.recorder), order: 90, persistence: UI.ViewManager.ViewPersistence.CLOSEABLE, isPreviewFeature: true, async loadView() { const Recorder = await loadRecorderModule(); return Recorder.RecorderPanel.RecorderPanel.instance(); }, }); UI.ActionRegistration.registerActionExtension({ category: RecorderCategory as UI.ActionRegistration.ActionCategory, actionId: Actions.RecorderActions.CreateRecording, title: i18nLazyString(UIStrings.createRecording), async loadActionDelegate() { const Recorder = await loadRecorderModule(); return Recorder.RecorderPanel.ActionDelegate.instance(); }, }); UI.ActionRegistration.registerActionExtension({ category: RecorderCategory as UI.ActionRegistration.ActionCategory, actionId: Actions.RecorderActions.StartRecording, title: i18nLazyString(UIStrings.startStopRecording), contextTypes() { return maybeRetrieveContextTypes( Recorder => [Recorder.RecorderPanel.RecorderPanel], Actions.RecorderActions.StartRecording, ); }, async loadActionDelegate() { const Recorder = await loadRecorderModule(); return Recorder.RecorderPanel.ActionDelegate.instance(); }, bindings: [ { shortcut: 'Ctrl+E', platform: UI.ActionRegistration.Platforms.WindowsLinux, }, {shortcut: 'Meta+E', platform: UI.ActionRegistration.Platforms.Mac}, ], }); UI.ActionRegistration.registerActionExtension({ category: RecorderCategory as UI.ActionRegistration.ActionCategory, actionId: Actions.RecorderActions.ReplayRecording, title: i18nLazyString(UIStrings.replayRecording), contextTypes() { return maybeRetrieveContextTypes( Recorder => [Recorder.RecorderPanel.RecorderPanel], Actions.RecorderActions.ReplayRecording, ); }, async loadActionDelegate() { const Recorder = await loadRecorderModule(); return Recorder.RecorderPanel.ActionDelegate.instance(); }, bindings: [ { shortcut: 'Ctrl+Enter', platform: UI.ActionRegistration.Platforms.WindowsLinux, }, {shortcut: 'Meta+Enter', platform: UI.ActionRegistration.Platforms.Mac}, ], }); UI.ActionRegistration.registerActionExtension({ category: RecorderCategory as UI.ActionRegistration.ActionCategory, actionId: Actions.RecorderActions.ToggleCodeView, title: i18nLazyString(UIStrings.toggleCode), contextTypes() { return maybeRetrieveContextTypes( Recorder => [Recorder.RecorderPanel.RecorderPanel], Actions.RecorderActions.ToggleCodeView, ); }, async loadActionDelegate() { const Recorder = await loadRecorderModule(); return Recorder.RecorderPanel.ActionDelegate.instance(); }, bindings: [ { shortcut: 'Ctrl+B', platform: UI.ActionRegistration.Platforms.WindowsLinux, }, {shortcut: 'Meta+B', platform: UI.ActionRegistration.Platforms.Mac}, ], });