@@ -14,6 +14,8 @@ import { Text, Time } from '@jupyterlab/coreutils';
14
14
15
15
import { IDocumentManager } from '@jupyterlab/docmanager' ;
16
16
17
+ import { IMainMenu } from '@jupyterlab/mainmenu' ;
18
+
17
19
import { NotebookPanel , INotebookTracker } from '@jupyterlab/notebook' ;
18
20
19
21
import { ISettingRegistry } from '@jupyterlab/settingregistry' ;
@@ -24,7 +26,7 @@ import { IRetroShell } from '@retrolab/application';
24
26
25
27
import { Poll } from '@lumino/polling' ;
26
28
27
- import { Widget } from '@lumino/widgets' ;
29
+ import { Menu , Widget } from '@lumino/widgets' ;
28
30
29
31
/**
30
32
* The class for kernel status errors.
@@ -223,6 +225,43 @@ const kernelStatus: JupyterFrontEndPlugin<void> = {
223
225
}
224
226
} ;
225
227
228
+ /**
229
+ * A plugin to customize notebook related menu entries
230
+ * TODO: switch to settings define menus when fixed upstream: https://github.com/jupyterlab/jupyterlab/issues/11754
231
+ */
232
+ const menuPlugin : JupyterFrontEndPlugin < void > = {
233
+ id : '@retrolab/notebook-extension:menu-plugin' ,
234
+ autoStart : true ,
235
+ requires : [ IMainMenu , ITranslator ] ,
236
+ activate : (
237
+ app : JupyterFrontEnd ,
238
+ mainMenu : IMainMenu ,
239
+ translator : ITranslator
240
+ ) => {
241
+ const { commands } = app ;
242
+ const trans = translator . load ( 'retrolab' ) ;
243
+
244
+ const cellTypeSubmenu = new Menu ( { commands } ) ;
245
+ cellTypeSubmenu . title . label = trans . _p ( 'menu' , 'Cell Type' ) ;
246
+ [
247
+ 'notebook:change-cell-to-code' ,
248
+ 'notebook:change-cell-to-markdown' ,
249
+ 'notebook:change-cell-to-raw'
250
+ ] . forEach ( command => {
251
+ cellTypeSubmenu . addItem ( {
252
+ command
253
+ } ) ;
254
+ } ) ;
255
+
256
+ mainMenu . runMenu . addItem ( { type : 'separator' , rank : 1000 } ) ;
257
+ mainMenu . runMenu . addItem ( {
258
+ type : 'submenu' ,
259
+ submenu : cellTypeSubmenu ,
260
+ rank : 1010
261
+ } ) ;
262
+ }
263
+ } ;
264
+
226
265
/**
227
266
* A plugin to add an extra shortcut to execute a cell in place via Cmd-Enter on Mac.
228
267
* TODO: switch to settings define menus when fixed upstream: https://github.com/jupyterlab/jupyterlab/issues/11754
@@ -341,6 +380,7 @@ const plugins: JupyterFrontEndPlugin<any>[] = [
341
380
checkpoints ,
342
381
kernelLogo ,
343
382
kernelStatus ,
383
+ menuPlugin ,
344
384
runShortcut ,
345
385
scrollOutput
346
386
] ;
0 commit comments