@jupyterlab/mainmenu 4.0.0-alpha.2 → 4.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/mainmenu.d.ts +1 -1
- package/lib/mainmenu.js +3 -2
- package/lib/mainmenu.js.map +1 -1
- package/lib/tokens.d.ts +5 -1
- package/lib/tokens.js +0 -1
- package/lib/tokens.js.map +1 -1
- package/package.json +14 -15
- package/src/edit.ts +99 -0
- package/src/file.ts +84 -0
- package/src/help.ts +43 -0
- package/src/index.ts +25 -0
- package/src/kernel.ts +82 -0
- package/src/mainmenu.ts +374 -0
- package/src/run.ts +61 -0
- package/src/settings.ts +21 -0
- package/src/tabs.ts +21 -0
- package/src/tokens.ts +93 -0
- package/src/view.ts +63 -0
package/lib/mainmenu.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export declare class MainMenu extends MenuBar implements IMainMenu {
|
|
|
54
54
|
/**
|
|
55
55
|
* Add a new menu to the main menu bar.
|
|
56
56
|
*/
|
|
57
|
-
addMenu(menu: Menu, options?: IMainMenu.IAddOptions): void;
|
|
57
|
+
addMenu(menu: Menu, update?: boolean, options?: IMainMenu.IAddOptions): void;
|
|
58
58
|
/**
|
|
59
59
|
* Dispose of the resources held by the menu bar.
|
|
60
60
|
*/
|
package/lib/mainmenu.js
CHANGED
|
@@ -19,7 +19,8 @@ export class MainMenu extends MenuBar {
|
|
|
19
19
|
* Construct the main menu bar.
|
|
20
20
|
*/
|
|
21
21
|
constructor(commands) {
|
|
22
|
-
|
|
22
|
+
let options = { forceItemsPosition: { forceX: false, forceY: true } };
|
|
23
|
+
super(options);
|
|
23
24
|
this._items = [];
|
|
24
25
|
this._commands = commands;
|
|
25
26
|
}
|
|
@@ -130,7 +131,7 @@ export class MainMenu extends MenuBar {
|
|
|
130
131
|
/**
|
|
131
132
|
* Add a new menu to the main menu bar.
|
|
132
133
|
*/
|
|
133
|
-
addMenu(menu, options = {}) {
|
|
134
|
+
addMenu(menu, update = true, options = {}) {
|
|
134
135
|
if (ArrayExt.firstIndexOf(this.menus, menu) > -1) {
|
|
135
136
|
return;
|
|
136
137
|
}
|
package/lib/mainmenu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mainmenu.js","sourceRoot":"","sources":["../src/mainmenu.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAG3D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAQ,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,OAAO;IACnC;;OAEG;IACH,YAAY,QAAyB;QACnC,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"mainmenu.js","sourceRoot":"","sources":["../src/mainmenu.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAG3D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAQ,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,OAAO;IACnC;;OAEG;IACH,YAAY,QAAyB;QACnC,IAAI,OAAO,GAAG,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACtE,KAAK,CAAC,OAAO,CAAC,CAAC;QAsTT,WAAM,GAAwB,EAAE,CAAC;QArTvC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,OAAO,CAAC,eAAe;aAClC,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,OAAO,CAAC,eAAe;aAClC,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,OAAO,CAAC,eAAe;aAClC,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAC;gBAChC,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,OAAO,CAAC,eAAe;aAClC,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC;gBAC1B,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,OAAO,CAAC,eAAe;aAClC,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,CAAC;gBACpC,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,OAAO,CAAC,eAAe;aAClC,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,OAAO,CAAC,eAAe;aAClC,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,OAAO,CAAC,eAAe;aAClC,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,OAAO,CACL,IAAU,EACV,SAAkB,IAAI,EACtB,UAAiC,EAAE;QAEnC,IAAI,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YAChD,OAAO;SACR;QAED,yDAAyD;QACzD,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,IAAI,GACR,MAAM,IAAI,OAAO;YACf,CAAC,CAAC,OAAO,CAAC,IAAI;YACd,CAAC,CAAC,MAAM,IAAI,IAAI;gBAChB,CAAC,CAAE,IAAY,CAAC,IAAI;gBACpB,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;QAC/B,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAE1E,yDAAyD;QACzD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAElD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9C;;WAEG;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE7B,mGAAmG;QACnG,QAAQ,IAAI,CAAC,EAAE,EAAE;YACf,KAAK,kBAAkB;gBACrB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,YAAY,QAAQ,EAAE;oBAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;iBACvB;gBACD,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,YAAY,QAAQ,EAAE;oBAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;iBACvB;gBACD,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,YAAY,QAAQ,EAAE;oBAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;iBACvB;gBACD,MAAM;YACR,KAAK,iBAAiB;gBACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,YAAY,OAAO,EAAE;oBAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;iBACtB;gBACD,MAAM;YACR,KAAK,oBAAoB;gBACvB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,YAAY,UAAU,EAAE;oBACnD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;iBACzB;gBACD,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,YAAY,QAAQ,EAAE;oBAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;iBACvB;gBACD,MAAM;YACR,KAAK,sBAAsB;gBACzB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,YAAY,YAAY,EAAE;oBACvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;iBAC3B;gBACD,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,YAAY,QAAQ,EAAE;oBAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;iBACvB;gBACD,MAAM;SACT;IACH,CAAC;IAED;;OAEG;IACH,OAAO;;QACL,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,EAAE,CAAC;QAC1B,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,EAAE,CAAC;QAC1B,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,EAAE,CAAC;QAC1B,MAAA,IAAI,CAAC,WAAW,0CAAE,OAAO,EAAE,CAAC;QAC5B,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,EAAE,CAAC;QACzB,MAAA,IAAI,CAAC,aAAa,0CAAE,OAAO,EAAE,CAAC;QAC9B,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,EAAE,CAAC;QAC1B,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,EAAE,CAAC;QAC1B,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CACjB,QAAyB,EACzB,OAA+B,EAC/B,KAAwB;QAExB,IAAI,IAAgB,CAAC;QACrB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACpC,QAAQ,EAAE,EAAE;YACV,KAAK,kBAAkB;gBACrB,IAAI,GAAG,IAAI,QAAQ,CAAC;oBAClB,QAAQ;oBACR,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,eAAe;iBAClC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,GAAG,IAAI,QAAQ,CAAC;oBAClB,QAAQ;oBACR,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,eAAe;iBAClC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,GAAG,IAAI,QAAQ,CAAC;oBAClB,QAAQ;oBACR,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,eAAe;iBAClC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,iBAAiB;gBACpB,IAAI,GAAG,IAAI,OAAO,CAAC;oBACjB,QAAQ;oBACR,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,eAAe;iBAClC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,oBAAoB;gBACvB,IAAI,GAAG,IAAI,UAAU,CAAC;oBACpB,QAAQ;oBACR,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,eAAe;iBAClC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,GAAG,IAAI,QAAQ,CAAC;oBAClB,QAAQ;oBACR,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,eAAe;iBAClC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,sBAAsB;gBACzB,IAAI,GAAG,IAAI,YAAY,CAAC;oBACtB,QAAQ;oBACR,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,eAAe;iBAClC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,GAAG,IAAI,QAAQ,CAAC;oBAClB,QAAQ;oBACR,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,eAAe;iBAClC,CAAC,CAAC;gBACH,MAAM;YACR;gBACE,IAAI,GAAG,IAAI,UAAU,CAAC;oBACpB,QAAQ;oBACR,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,eAAe;iBAClC,CAAC,CAAC;SACN;QAED,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC5C;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,IAAU;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CACnC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAC3B,CAAC;QACF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SACvC;IACH,CAAC;CAYF;AAED;;GAEG;AACH,IAAU,OAAO,CAsBhB;AAtBD,WAAU,OAAO;IAgBf;;OAEG;IACH,SAAgB,OAAO,CAAC,KAAgB,EAAE,MAAiB;QACzD,OAAO,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAClC,CAAC;IAFe,eAAO,UAEtB,CAAA;AACH,CAAC,EAtBS,OAAO,KAAP,OAAO,QAsBhB"}
|
package/lib/tokens.d.ts
CHANGED
|
@@ -19,8 +19,12 @@ export declare const IMainMenu: Token<IMainMenu>;
|
|
|
19
19
|
export interface IMainMenu {
|
|
20
20
|
/**
|
|
21
21
|
* Add a new menu to the main menu bar.
|
|
22
|
+
*
|
|
23
|
+
* @param menu The menu to add
|
|
24
|
+
* @param update Whether to update the menu bar or not
|
|
25
|
+
* @param options Options for adding the menu
|
|
22
26
|
*/
|
|
23
|
-
addMenu(menu: Menu, options?: IMainMenu.IAddOptions): void;
|
|
27
|
+
addMenu(menu: Menu, update?: boolean, options?: IMainMenu.IAddOptions): void;
|
|
24
28
|
/**
|
|
25
29
|
* The application "File" menu.
|
|
26
30
|
*/
|
package/lib/tokens.js
CHANGED
package/lib/tokens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAG3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAW1C
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAG3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAW1C;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAY,gCAAgC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlab/mainmenu",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.20",
|
|
4
4
|
"description": "JupyterLab - Main Menu",
|
|
5
5
|
"homepage": "https://github.com/jupyterlab/jupyterlab",
|
|
6
6
|
"bugs": {
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"lib/*.js.map",
|
|
28
28
|
"lib/*.js",
|
|
29
29
|
"style/**/*.css",
|
|
30
|
-
"style/index.js"
|
|
30
|
+
"style/index.js",
|
|
31
|
+
"src/**/*.{ts,tsx}"
|
|
31
32
|
],
|
|
32
33
|
"scripts": {
|
|
33
34
|
"build": "tsc -b",
|
|
@@ -41,22 +42,20 @@
|
|
|
41
42
|
"watch": "tsc -b --watch"
|
|
42
43
|
},
|
|
43
44
|
"dependencies": {
|
|
44
|
-
"@jupyterlab/apputils": "^4.0.0-alpha.
|
|
45
|
-
"@jupyterlab/translation": "^4.0.0-alpha.
|
|
46
|
-
"@jupyterlab/ui-components": "^4.0.0-alpha.
|
|
47
|
-
"@lumino/algorithm": "^
|
|
48
|
-
"@lumino/commands": "^
|
|
49
|
-
"@lumino/coreutils": "^
|
|
50
|
-
"@lumino/widgets": "^
|
|
45
|
+
"@jupyterlab/apputils": "^4.0.0-alpha.20",
|
|
46
|
+
"@jupyterlab/translation": "^4.0.0-alpha.20",
|
|
47
|
+
"@jupyterlab/ui-components": "^4.0.0-alpha.35",
|
|
48
|
+
"@lumino/algorithm": "^2.0.0-rc.0",
|
|
49
|
+
"@lumino/commands": "^2.0.0-rc.0",
|
|
50
|
+
"@lumino/coreutils": "^2.0.0-rc.0",
|
|
51
|
+
"@lumino/widgets": "^2.0.0-rc.0"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|
|
53
|
-
"@jupyterlab/
|
|
54
|
-
"@types/jest": "^
|
|
55
|
-
"jest": "^26.4.2",
|
|
54
|
+
"@jupyterlab/testing": "^4.0.0-alpha.20",
|
|
55
|
+
"@types/jest": "^29.2.0",
|
|
56
56
|
"rimraf": "~3.0.0",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"typescript": "~4.5.2"
|
|
57
|
+
"typedoc": "~0.23.25",
|
|
58
|
+
"typescript": "~5.0.0-beta"
|
|
60
59
|
},
|
|
61
60
|
"publishConfig": {
|
|
62
61
|
"access": "public"
|
package/src/edit.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { IRankedMenu, RankedMenu } from '@jupyterlab/ui-components';
|
|
5
|
+
import { SemanticCommand } from '@jupyterlab/apputils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* An interface for an Edit menu.
|
|
9
|
+
*/
|
|
10
|
+
export interface IEditMenu extends IRankedMenu {
|
|
11
|
+
/**
|
|
12
|
+
* Semantic commands IUndoers for the Edit menu.
|
|
13
|
+
*/
|
|
14
|
+
readonly undoers: IEditMenu.IUndoer;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Semantic commands IClearers for the Edit menu.
|
|
18
|
+
*/
|
|
19
|
+
readonly clearers: IEditMenu.IClearer;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Semantic commands IGoToLiners for the Edit menu.
|
|
23
|
+
*/
|
|
24
|
+
readonly goToLiners: SemanticCommand;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* An extensible Edit menu for the application.
|
|
29
|
+
*/
|
|
30
|
+
export class EditMenu extends RankedMenu implements IEditMenu {
|
|
31
|
+
/**
|
|
32
|
+
* Construct the edit menu.
|
|
33
|
+
*/
|
|
34
|
+
constructor(options: IRankedMenu.IOptions) {
|
|
35
|
+
super(options);
|
|
36
|
+
|
|
37
|
+
this.undoers = {
|
|
38
|
+
redo: new SemanticCommand(),
|
|
39
|
+
undo: new SemanticCommand()
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
this.clearers = {
|
|
43
|
+
clearAll: new SemanticCommand(),
|
|
44
|
+
clearCurrent: new SemanticCommand()
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
this.goToLiners = new SemanticCommand();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Semantic commands IUndoers for the Edit menu.
|
|
52
|
+
*/
|
|
53
|
+
readonly undoers: IEditMenu.IUndoer;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Semantic commands IClearers for the Edit menu.
|
|
57
|
+
*/
|
|
58
|
+
readonly clearers: IEditMenu.IClearer;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Semantic commands IGoToLiners for the Edit menu.
|
|
62
|
+
*/
|
|
63
|
+
readonly goToLiners: SemanticCommand;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Namespace for IEditMenu
|
|
68
|
+
*/
|
|
69
|
+
export namespace IEditMenu {
|
|
70
|
+
/**
|
|
71
|
+
* Interface for an activity that uses Undo/Redo.
|
|
72
|
+
*/
|
|
73
|
+
export interface IUndoer {
|
|
74
|
+
/**
|
|
75
|
+
* A semantic command to execute an undo command for the activity.
|
|
76
|
+
*/
|
|
77
|
+
undo: SemanticCommand;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* A semantic command to execute a redo command for the activity.
|
|
81
|
+
*/
|
|
82
|
+
redo: SemanticCommand;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Interface for an activity that wants to register a 'Clear...' menu item
|
|
87
|
+
*/
|
|
88
|
+
export interface IClearer {
|
|
89
|
+
/**
|
|
90
|
+
* A semantic command to clear the currently portion of activity.
|
|
91
|
+
*/
|
|
92
|
+
clearCurrent: SemanticCommand;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* A semantic command to clear all of an activity.
|
|
96
|
+
*/
|
|
97
|
+
clearAll: SemanticCommand;
|
|
98
|
+
}
|
|
99
|
+
}
|
package/src/file.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { IRankedMenu, RankedMenu } from '@jupyterlab/ui-components';
|
|
5
|
+
import { find } from '@lumino/algorithm';
|
|
6
|
+
import { SemanticCommand } from '@jupyterlab/apputils';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* An interface for a File menu.
|
|
10
|
+
*/
|
|
11
|
+
export interface IFileMenu extends IRankedMenu {
|
|
12
|
+
/**
|
|
13
|
+
* Option to add a `Quit` entry in the File menu
|
|
14
|
+
*/
|
|
15
|
+
quitEntry: boolean;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A submenu for creating new files/launching new activities.
|
|
19
|
+
*/
|
|
20
|
+
readonly newMenu: IRankedMenu;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The close and cleanup semantic command.
|
|
24
|
+
*/
|
|
25
|
+
readonly closeAndCleaners: SemanticCommand;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The console creator semantic command.
|
|
29
|
+
*/
|
|
30
|
+
readonly consoleCreators: SemanticCommand;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* An extensible FileMenu for the application.
|
|
35
|
+
*/
|
|
36
|
+
export class FileMenu extends RankedMenu implements IFileMenu {
|
|
37
|
+
constructor(options: IRankedMenu.IOptions) {
|
|
38
|
+
super(options);
|
|
39
|
+
this.quitEntry = false;
|
|
40
|
+
|
|
41
|
+
this.closeAndCleaners = new SemanticCommand();
|
|
42
|
+
this.consoleCreators = new SemanticCommand();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The New submenu.
|
|
47
|
+
*/
|
|
48
|
+
get newMenu(): RankedMenu {
|
|
49
|
+
if (!this._newMenu) {
|
|
50
|
+
this._newMenu =
|
|
51
|
+
(find(this.items, menu => menu.submenu?.id === 'jp-mainmenu-file-new')
|
|
52
|
+
?.submenu as RankedMenu) ??
|
|
53
|
+
new RankedMenu({
|
|
54
|
+
commands: this.commands
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return this._newMenu;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The close and cleanup semantic command.
|
|
62
|
+
*/
|
|
63
|
+
readonly closeAndCleaners: SemanticCommand;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The console creator semantic command.
|
|
67
|
+
*/
|
|
68
|
+
readonly consoleCreators: SemanticCommand;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Dispose of the resources held by the file menu.
|
|
72
|
+
*/
|
|
73
|
+
dispose(): void {
|
|
74
|
+
this._newMenu?.dispose();
|
|
75
|
+
super.dispose();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Option to add a `Quit` entry in File menu
|
|
80
|
+
*/
|
|
81
|
+
public quitEntry: boolean;
|
|
82
|
+
|
|
83
|
+
private _newMenu: RankedMenu;
|
|
84
|
+
}
|
package/src/help.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { IRankedMenu, RankedMenu } from '@jupyterlab/ui-components';
|
|
5
|
+
import { SemanticCommand } from '@jupyterlab/apputils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* An interface for a Help menu.
|
|
9
|
+
*/
|
|
10
|
+
export interface IHelpMenu extends IRankedMenu {
|
|
11
|
+
/**
|
|
12
|
+
* A semantic command to get the kernel for the help menu.
|
|
13
|
+
* This is used to populate additional help
|
|
14
|
+
* links provided by the kernel of a widget.
|
|
15
|
+
*
|
|
16
|
+
* #### Note
|
|
17
|
+
* The command must return a Kernel.IKernelConnection object
|
|
18
|
+
*/
|
|
19
|
+
readonly getKernel: SemanticCommand;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* An extensible Help menu for the application.
|
|
24
|
+
*/
|
|
25
|
+
export class HelpMenu extends RankedMenu implements IHelpMenu {
|
|
26
|
+
/**
|
|
27
|
+
* Construct the help menu.
|
|
28
|
+
*/
|
|
29
|
+
constructor(options: IRankedMenu.IOptions) {
|
|
30
|
+
super(options);
|
|
31
|
+
this.getKernel = new SemanticCommand();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A semantic command to get the kernel for the help menu.
|
|
36
|
+
* This is used to populate additional help
|
|
37
|
+
* links provided by the kernel of a widget.
|
|
38
|
+
*
|
|
39
|
+
* #### Note
|
|
40
|
+
* The command must return a Kernel.IKernelConnection object
|
|
41
|
+
*/
|
|
42
|
+
readonly getKernel: SemanticCommand;
|
|
43
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
/**
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module mainmenu
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export * from './mainmenu';
|
|
9
|
+
export * from './edit';
|
|
10
|
+
export * from './file';
|
|
11
|
+
export * from './help';
|
|
12
|
+
export * from './kernel';
|
|
13
|
+
export * from './run';
|
|
14
|
+
export * from './settings';
|
|
15
|
+
export * from './view';
|
|
16
|
+
export * from './tabs';
|
|
17
|
+
export * from './tokens';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated since version 3.1
|
|
21
|
+
*/
|
|
22
|
+
export {
|
|
23
|
+
IRankedMenu as IJupyterLabMenu,
|
|
24
|
+
RankedMenu as JupyterLabMenu
|
|
25
|
+
} from '@jupyterlab/ui-components';
|
package/src/kernel.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { IRankedMenu, RankedMenu } from '@jupyterlab/ui-components';
|
|
5
|
+
import { SemanticCommand } from '@jupyterlab/apputils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* An interface for a Kernel menu.
|
|
9
|
+
*/
|
|
10
|
+
export interface IKernelMenu extends IRankedMenu {
|
|
11
|
+
/**
|
|
12
|
+
* Semantic commands IKernelUsers for the Kernel menu.
|
|
13
|
+
*/
|
|
14
|
+
readonly kernelUsers: IKernelMenu.IKernelUser;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* An extensible Kernel menu for the application.
|
|
19
|
+
*/
|
|
20
|
+
export class KernelMenu extends RankedMenu implements IKernelMenu {
|
|
21
|
+
/**
|
|
22
|
+
* Construct the kernel menu.
|
|
23
|
+
*/
|
|
24
|
+
constructor(options: IRankedMenu.IOptions) {
|
|
25
|
+
super(options);
|
|
26
|
+
this.kernelUsers = {
|
|
27
|
+
changeKernel: new SemanticCommand(),
|
|
28
|
+
clearWidget: new SemanticCommand(),
|
|
29
|
+
interruptKernel: new SemanticCommand(),
|
|
30
|
+
reconnectToKernel: new SemanticCommand(),
|
|
31
|
+
restartKernel: new SemanticCommand(),
|
|
32
|
+
shutdownKernel: new SemanticCommand()
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Semantic commands IKernelUsers for the Kernel menu.
|
|
38
|
+
*/
|
|
39
|
+
readonly kernelUsers: IKernelMenu.IKernelUser;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Namespace for IKernelMenu
|
|
44
|
+
*/
|
|
45
|
+
export namespace IKernelMenu {
|
|
46
|
+
/**
|
|
47
|
+
* Interface for a Kernel user to register itself
|
|
48
|
+
* with the IKernelMenu's semantic extension points.
|
|
49
|
+
*/
|
|
50
|
+
export interface IKernelUser {
|
|
51
|
+
/**
|
|
52
|
+
* A semantic command to interrupt the kernel.
|
|
53
|
+
*/
|
|
54
|
+
interruptKernel: SemanticCommand;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* A semantic command to reconnect to the kernel
|
|
58
|
+
*/
|
|
59
|
+
reconnectToKernel: SemanticCommand;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A semantic command to restart the kernel, which
|
|
63
|
+
* returns a promise of whether the kernel was restarted.
|
|
64
|
+
*/
|
|
65
|
+
restartKernel: SemanticCommand;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* A semantic command to clear the widget.
|
|
69
|
+
*/
|
|
70
|
+
clearWidget: SemanticCommand;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* A semantic command to change the kernel.
|
|
74
|
+
*/
|
|
75
|
+
changeKernel: SemanticCommand;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* A semantic command to shut down the kernel.
|
|
79
|
+
*/
|
|
80
|
+
shutdownKernel: SemanticCommand;
|
|
81
|
+
}
|
|
82
|
+
}
|
package/src/mainmenu.ts
ADDED
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { TranslationBundle } from '@jupyterlab/translation';
|
|
5
|
+
import { IRankedMenu, MenuSvg, RankedMenu } from '@jupyterlab/ui-components';
|
|
6
|
+
import { ArrayExt } from '@lumino/algorithm';
|
|
7
|
+
import { CommandRegistry } from '@lumino/commands';
|
|
8
|
+
import { Menu, MenuBar } from '@lumino/widgets';
|
|
9
|
+
import { EditMenu } from './edit';
|
|
10
|
+
import { FileMenu } from './file';
|
|
11
|
+
import { HelpMenu } from './help';
|
|
12
|
+
import { KernelMenu } from './kernel';
|
|
13
|
+
import { RunMenu } from './run';
|
|
14
|
+
import { SettingsMenu } from './settings';
|
|
15
|
+
import { TabsMenu } from './tabs';
|
|
16
|
+
import { IMainMenu } from './tokens';
|
|
17
|
+
import { ViewMenu } from './view';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The main menu class. It is intended to be used as a singleton.
|
|
21
|
+
*/
|
|
22
|
+
export class MainMenu extends MenuBar implements IMainMenu {
|
|
23
|
+
/**
|
|
24
|
+
* Construct the main menu bar.
|
|
25
|
+
*/
|
|
26
|
+
constructor(commands: CommandRegistry) {
|
|
27
|
+
let options = { forceItemsPosition: { forceX: false, forceY: true } };
|
|
28
|
+
super(options);
|
|
29
|
+
this._commands = commands;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The application "Edit" menu.
|
|
34
|
+
*/
|
|
35
|
+
get editMenu(): EditMenu {
|
|
36
|
+
if (!this._editMenu) {
|
|
37
|
+
this._editMenu = new EditMenu({
|
|
38
|
+
commands: this._commands,
|
|
39
|
+
rank: 2,
|
|
40
|
+
renderer: MenuSvg.defaultRenderer
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return this._editMenu;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The application "File" menu.
|
|
48
|
+
*/
|
|
49
|
+
get fileMenu(): FileMenu {
|
|
50
|
+
if (!this._fileMenu) {
|
|
51
|
+
this._fileMenu = new FileMenu({
|
|
52
|
+
commands: this._commands,
|
|
53
|
+
rank: 1,
|
|
54
|
+
renderer: MenuSvg.defaultRenderer
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return this._fileMenu;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The application "Help" menu.
|
|
62
|
+
*/
|
|
63
|
+
get helpMenu(): HelpMenu {
|
|
64
|
+
if (!this._helpMenu) {
|
|
65
|
+
this._helpMenu = new HelpMenu({
|
|
66
|
+
commands: this._commands,
|
|
67
|
+
rank: 1000,
|
|
68
|
+
renderer: MenuSvg.defaultRenderer
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return this._helpMenu;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The application "Kernel" menu.
|
|
76
|
+
*/
|
|
77
|
+
get kernelMenu(): KernelMenu {
|
|
78
|
+
if (!this._kernelMenu) {
|
|
79
|
+
this._kernelMenu = new KernelMenu({
|
|
80
|
+
commands: this._commands,
|
|
81
|
+
rank: 5,
|
|
82
|
+
renderer: MenuSvg.defaultRenderer
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return this._kernelMenu;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The application "Run" menu.
|
|
90
|
+
*/
|
|
91
|
+
get runMenu(): RunMenu {
|
|
92
|
+
if (!this._runMenu) {
|
|
93
|
+
this._runMenu = new RunMenu({
|
|
94
|
+
commands: this._commands,
|
|
95
|
+
rank: 4,
|
|
96
|
+
renderer: MenuSvg.defaultRenderer
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return this._runMenu;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* The application "Settings" menu.
|
|
104
|
+
*/
|
|
105
|
+
get settingsMenu(): SettingsMenu {
|
|
106
|
+
if (!this._settingsMenu) {
|
|
107
|
+
this._settingsMenu = new SettingsMenu({
|
|
108
|
+
commands: this._commands,
|
|
109
|
+
rank: 999,
|
|
110
|
+
renderer: MenuSvg.defaultRenderer
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return this._settingsMenu;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* The application "View" menu.
|
|
118
|
+
*/
|
|
119
|
+
get viewMenu(): ViewMenu {
|
|
120
|
+
if (!this._viewMenu) {
|
|
121
|
+
this._viewMenu = new ViewMenu({
|
|
122
|
+
commands: this._commands,
|
|
123
|
+
rank: 3,
|
|
124
|
+
renderer: MenuSvg.defaultRenderer
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return this._viewMenu;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* The application "Tabs" menu.
|
|
132
|
+
*/
|
|
133
|
+
get tabsMenu(): TabsMenu {
|
|
134
|
+
if (!this._tabsMenu) {
|
|
135
|
+
this._tabsMenu = new TabsMenu({
|
|
136
|
+
commands: this._commands,
|
|
137
|
+
rank: 500,
|
|
138
|
+
renderer: MenuSvg.defaultRenderer
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return this._tabsMenu;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Add a new menu to the main menu bar.
|
|
146
|
+
*/
|
|
147
|
+
addMenu(
|
|
148
|
+
menu: Menu,
|
|
149
|
+
update: boolean = true,
|
|
150
|
+
options: IMainMenu.IAddOptions = {}
|
|
151
|
+
): void {
|
|
152
|
+
if (ArrayExt.firstIndexOf(this.menus, menu) > -1) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// override default renderer with svg-supporting renderer
|
|
157
|
+
MenuSvg.overrideDefaultRenderer(menu);
|
|
158
|
+
|
|
159
|
+
const rank =
|
|
160
|
+
'rank' in options
|
|
161
|
+
? options.rank
|
|
162
|
+
: 'rank' in menu
|
|
163
|
+
? (menu as any).rank
|
|
164
|
+
: IRankedMenu.DEFAULT_RANK;
|
|
165
|
+
const rankItem = { menu, rank };
|
|
166
|
+
const index = ArrayExt.upperBound(this._items, rankItem, Private.itemCmp);
|
|
167
|
+
|
|
168
|
+
// Upon disposal, remove the menu and its rank reference.
|
|
169
|
+
menu.disposed.connect(this._onMenuDisposed, this);
|
|
170
|
+
|
|
171
|
+
ArrayExt.insert(this._items, index, rankItem);
|
|
172
|
+
/**
|
|
173
|
+
* Create a new menu.
|
|
174
|
+
*/
|
|
175
|
+
this.insertMenu(index, menu);
|
|
176
|
+
|
|
177
|
+
// Link the menu to the API - backward compatibility when switching to menu description in settings
|
|
178
|
+
switch (menu.id) {
|
|
179
|
+
case 'jp-mainmenu-file':
|
|
180
|
+
if (!this._fileMenu && menu instanceof FileMenu) {
|
|
181
|
+
this._fileMenu = menu;
|
|
182
|
+
}
|
|
183
|
+
break;
|
|
184
|
+
case 'jp-mainmenu-edit':
|
|
185
|
+
if (!this._editMenu && menu instanceof EditMenu) {
|
|
186
|
+
this._editMenu = menu;
|
|
187
|
+
}
|
|
188
|
+
break;
|
|
189
|
+
case 'jp-mainmenu-view':
|
|
190
|
+
if (!this._viewMenu && menu instanceof ViewMenu) {
|
|
191
|
+
this._viewMenu = menu;
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
194
|
+
case 'jp-mainmenu-run':
|
|
195
|
+
if (!this._runMenu && menu instanceof RunMenu) {
|
|
196
|
+
this._runMenu = menu;
|
|
197
|
+
}
|
|
198
|
+
break;
|
|
199
|
+
case 'jp-mainmenu-kernel':
|
|
200
|
+
if (!this._kernelMenu && menu instanceof KernelMenu) {
|
|
201
|
+
this._kernelMenu = menu;
|
|
202
|
+
}
|
|
203
|
+
break;
|
|
204
|
+
case 'jp-mainmenu-tabs':
|
|
205
|
+
if (!this._tabsMenu && menu instanceof TabsMenu) {
|
|
206
|
+
this._tabsMenu = menu;
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
case 'jp-mainmenu-settings':
|
|
210
|
+
if (!this._settingsMenu && menu instanceof SettingsMenu) {
|
|
211
|
+
this._settingsMenu = menu;
|
|
212
|
+
}
|
|
213
|
+
break;
|
|
214
|
+
case 'jp-mainmenu-help':
|
|
215
|
+
if (!this._helpMenu && menu instanceof HelpMenu) {
|
|
216
|
+
this._helpMenu = menu;
|
|
217
|
+
}
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Dispose of the resources held by the menu bar.
|
|
224
|
+
*/
|
|
225
|
+
dispose(): void {
|
|
226
|
+
this._editMenu?.dispose();
|
|
227
|
+
this._fileMenu?.dispose();
|
|
228
|
+
this._helpMenu?.dispose();
|
|
229
|
+
this._kernelMenu?.dispose();
|
|
230
|
+
this._runMenu?.dispose();
|
|
231
|
+
this._settingsMenu?.dispose();
|
|
232
|
+
this._viewMenu?.dispose();
|
|
233
|
+
this._tabsMenu?.dispose();
|
|
234
|
+
super.dispose();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Generate the menu.
|
|
239
|
+
*
|
|
240
|
+
* @param commands The command registry
|
|
241
|
+
* @param options The main menu options.
|
|
242
|
+
* @param trans - The application language translator.
|
|
243
|
+
*/
|
|
244
|
+
static generateMenu(
|
|
245
|
+
commands: CommandRegistry,
|
|
246
|
+
options: IMainMenu.IMenuOptions,
|
|
247
|
+
trans: TranslationBundle
|
|
248
|
+
): RankedMenu {
|
|
249
|
+
let menu: RankedMenu;
|
|
250
|
+
const { id, label, rank } = options;
|
|
251
|
+
switch (id) {
|
|
252
|
+
case 'jp-mainmenu-file':
|
|
253
|
+
menu = new FileMenu({
|
|
254
|
+
commands,
|
|
255
|
+
rank,
|
|
256
|
+
renderer: MenuSvg.defaultRenderer
|
|
257
|
+
});
|
|
258
|
+
break;
|
|
259
|
+
case 'jp-mainmenu-edit':
|
|
260
|
+
menu = new EditMenu({
|
|
261
|
+
commands,
|
|
262
|
+
rank,
|
|
263
|
+
renderer: MenuSvg.defaultRenderer
|
|
264
|
+
});
|
|
265
|
+
break;
|
|
266
|
+
case 'jp-mainmenu-view':
|
|
267
|
+
menu = new ViewMenu({
|
|
268
|
+
commands,
|
|
269
|
+
rank,
|
|
270
|
+
renderer: MenuSvg.defaultRenderer
|
|
271
|
+
});
|
|
272
|
+
break;
|
|
273
|
+
case 'jp-mainmenu-run':
|
|
274
|
+
menu = new RunMenu({
|
|
275
|
+
commands,
|
|
276
|
+
rank,
|
|
277
|
+
renderer: MenuSvg.defaultRenderer
|
|
278
|
+
});
|
|
279
|
+
break;
|
|
280
|
+
case 'jp-mainmenu-kernel':
|
|
281
|
+
menu = new KernelMenu({
|
|
282
|
+
commands,
|
|
283
|
+
rank,
|
|
284
|
+
renderer: MenuSvg.defaultRenderer
|
|
285
|
+
});
|
|
286
|
+
break;
|
|
287
|
+
case 'jp-mainmenu-tabs':
|
|
288
|
+
menu = new TabsMenu({
|
|
289
|
+
commands,
|
|
290
|
+
rank,
|
|
291
|
+
renderer: MenuSvg.defaultRenderer
|
|
292
|
+
});
|
|
293
|
+
break;
|
|
294
|
+
case 'jp-mainmenu-settings':
|
|
295
|
+
menu = new SettingsMenu({
|
|
296
|
+
commands,
|
|
297
|
+
rank,
|
|
298
|
+
renderer: MenuSvg.defaultRenderer
|
|
299
|
+
});
|
|
300
|
+
break;
|
|
301
|
+
case 'jp-mainmenu-help':
|
|
302
|
+
menu = new HelpMenu({
|
|
303
|
+
commands,
|
|
304
|
+
rank,
|
|
305
|
+
renderer: MenuSvg.defaultRenderer
|
|
306
|
+
});
|
|
307
|
+
break;
|
|
308
|
+
default:
|
|
309
|
+
menu = new RankedMenu({
|
|
310
|
+
commands,
|
|
311
|
+
rank,
|
|
312
|
+
renderer: MenuSvg.defaultRenderer
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (label) {
|
|
317
|
+
menu.title.label = trans._p('menu', label);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return menu;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Handle the disposal of a menu.
|
|
325
|
+
*/
|
|
326
|
+
private _onMenuDisposed(menu: Menu): void {
|
|
327
|
+
this.removeMenu(menu);
|
|
328
|
+
const index = ArrayExt.findFirstIndex(
|
|
329
|
+
this._items,
|
|
330
|
+
item => item.menu === menu
|
|
331
|
+
);
|
|
332
|
+
if (index !== -1) {
|
|
333
|
+
ArrayExt.removeAt(this._items, index);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
private _commands: CommandRegistry;
|
|
338
|
+
private _items: Private.IRankItem[] = [];
|
|
339
|
+
private _editMenu: EditMenu;
|
|
340
|
+
private _fileMenu: FileMenu;
|
|
341
|
+
private _helpMenu: HelpMenu;
|
|
342
|
+
private _kernelMenu: KernelMenu;
|
|
343
|
+
private _runMenu: RunMenu;
|
|
344
|
+
private _settingsMenu: SettingsMenu;
|
|
345
|
+
private _viewMenu: ViewMenu;
|
|
346
|
+
private _tabsMenu: TabsMenu;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* A namespace for private data.
|
|
351
|
+
*/
|
|
352
|
+
namespace Private {
|
|
353
|
+
/**
|
|
354
|
+
* An object which holds a menu and its sort rank.
|
|
355
|
+
*/
|
|
356
|
+
export interface IRankItem {
|
|
357
|
+
/**
|
|
358
|
+
* The menu for the item.
|
|
359
|
+
*/
|
|
360
|
+
menu: Menu;
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* The sort rank of the menu.
|
|
364
|
+
*/
|
|
365
|
+
rank: number;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* A comparator function for menu rank items.
|
|
370
|
+
*/
|
|
371
|
+
export function itemCmp(first: IRankItem, second: IRankItem): number {
|
|
372
|
+
return first.rank - second.rank;
|
|
373
|
+
}
|
|
374
|
+
}
|
package/src/run.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { IRankedMenu, RankedMenu } from '@jupyterlab/ui-components';
|
|
5
|
+
import { SemanticCommand } from '@jupyterlab/apputils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* An interface for a Run menu.
|
|
9
|
+
*/
|
|
10
|
+
export interface IRunMenu extends IRankedMenu {
|
|
11
|
+
/**
|
|
12
|
+
* Semantic commands ICodeRunner for the Run menu.
|
|
13
|
+
*/
|
|
14
|
+
readonly codeRunners: IRunMenu.ICodeRunner;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* An extensible Run menu for the application.
|
|
19
|
+
*/
|
|
20
|
+
export class RunMenu extends RankedMenu implements IRunMenu {
|
|
21
|
+
/**
|
|
22
|
+
* Construct the run menu.
|
|
23
|
+
*/
|
|
24
|
+
constructor(options: IRankedMenu.IOptions) {
|
|
25
|
+
super(options);
|
|
26
|
+
this.codeRunners = {
|
|
27
|
+
restart: new SemanticCommand(),
|
|
28
|
+
run: new SemanticCommand(),
|
|
29
|
+
runAll: new SemanticCommand()
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Semantic commands ICodeRunner for the Run menu.
|
|
35
|
+
*/
|
|
36
|
+
readonly codeRunners: IRunMenu.ICodeRunner;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A namespace for RunMenu statics.
|
|
41
|
+
*/
|
|
42
|
+
export namespace IRunMenu {
|
|
43
|
+
/**
|
|
44
|
+
* An object that runs code, which may be
|
|
45
|
+
* registered with the Run menu.
|
|
46
|
+
*/
|
|
47
|
+
export interface ICodeRunner {
|
|
48
|
+
/**
|
|
49
|
+
* A semantic command to run a subpart of a document.
|
|
50
|
+
*/
|
|
51
|
+
run: SemanticCommand;
|
|
52
|
+
/**
|
|
53
|
+
* A semantic command to run a whole document
|
|
54
|
+
*/
|
|
55
|
+
runAll: SemanticCommand;
|
|
56
|
+
/**
|
|
57
|
+
* A semantic command to restart a kernel
|
|
58
|
+
*/
|
|
59
|
+
restart: SemanticCommand;
|
|
60
|
+
}
|
|
61
|
+
}
|
package/src/settings.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { IRankedMenu, RankedMenu } from '@jupyterlab/ui-components';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* An interface for a Settings menu.
|
|
8
|
+
*/
|
|
9
|
+
export interface ISettingsMenu extends IRankedMenu {}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* An extensible Settings menu for the application.
|
|
13
|
+
*/
|
|
14
|
+
export class SettingsMenu extends RankedMenu implements ISettingsMenu {
|
|
15
|
+
/**
|
|
16
|
+
* Construct the settings menu.
|
|
17
|
+
*/
|
|
18
|
+
constructor(options: IRankedMenu.IOptions) {
|
|
19
|
+
super(options);
|
|
20
|
+
}
|
|
21
|
+
}
|
package/src/tabs.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { IRankedMenu, RankedMenu } from '@jupyterlab/ui-components';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* An interface for a Tabs menu.
|
|
8
|
+
*/
|
|
9
|
+
export interface ITabsMenu extends IRankedMenu {}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* An extensible Tabs menu for the application.
|
|
13
|
+
*/
|
|
14
|
+
export class TabsMenu extends RankedMenu implements ITabsMenu {
|
|
15
|
+
/**
|
|
16
|
+
* Construct the tabs menu.
|
|
17
|
+
*/
|
|
18
|
+
constructor(options: IRankedMenu.IOptions) {
|
|
19
|
+
super(options);
|
|
20
|
+
}
|
|
21
|
+
}
|
package/src/tokens.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { MenuFactory } from '@jupyterlab/apputils';
|
|
5
|
+
import { Token } from '@lumino/coreutils';
|
|
6
|
+
import { Menu } from '@lumino/widgets';
|
|
7
|
+
import { IEditMenu } from './edit';
|
|
8
|
+
import { IFileMenu } from './file';
|
|
9
|
+
import { IHelpMenu } from './help';
|
|
10
|
+
import { IKernelMenu } from './kernel';
|
|
11
|
+
import { IRunMenu } from './run';
|
|
12
|
+
import { ISettingsMenu } from './settings';
|
|
13
|
+
import { ITabsMenu } from './tabs';
|
|
14
|
+
import { IViewMenu } from './view';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The main menu token.
|
|
18
|
+
*/
|
|
19
|
+
export const IMainMenu = new Token<IMainMenu>('@jupyterlab/mainmenu:IMainMenu');
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The main menu interface.
|
|
23
|
+
*/
|
|
24
|
+
export interface IMainMenu {
|
|
25
|
+
/**
|
|
26
|
+
* Add a new menu to the main menu bar.
|
|
27
|
+
*
|
|
28
|
+
* @param menu The menu to add
|
|
29
|
+
* @param update Whether to update the menu bar or not
|
|
30
|
+
* @param options Options for adding the menu
|
|
31
|
+
*/
|
|
32
|
+
addMenu(menu: Menu, update?: boolean, options?: IMainMenu.IAddOptions): void;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The application "File" menu.
|
|
36
|
+
*/
|
|
37
|
+
readonly fileMenu: IFileMenu;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The application "Edit" menu.
|
|
41
|
+
*/
|
|
42
|
+
readonly editMenu: IEditMenu;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The application "View" menu.
|
|
46
|
+
*/
|
|
47
|
+
readonly viewMenu: IViewMenu;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The application "Help" menu.
|
|
51
|
+
*/
|
|
52
|
+
readonly helpMenu: IHelpMenu;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The application "Kernel" menu.
|
|
56
|
+
*/
|
|
57
|
+
readonly kernelMenu: IKernelMenu;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The application "Run" menu.
|
|
61
|
+
*/
|
|
62
|
+
readonly runMenu: IRunMenu;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The application "Settings" menu.
|
|
66
|
+
*/
|
|
67
|
+
readonly settingsMenu: ISettingsMenu;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The application "Tabs" menu.
|
|
71
|
+
*/
|
|
72
|
+
readonly tabsMenu: ITabsMenu;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The namespace for IMainMenu attached interfaces.
|
|
77
|
+
*/
|
|
78
|
+
export namespace IMainMenu {
|
|
79
|
+
/**
|
|
80
|
+
* The options used to add a menu to the main menu.
|
|
81
|
+
*/
|
|
82
|
+
export interface IAddOptions {
|
|
83
|
+
/**
|
|
84
|
+
* The rank order of the menu among its siblings.
|
|
85
|
+
*/
|
|
86
|
+
rank?: number;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The instantiation options for an IMainMenu.
|
|
91
|
+
*/
|
|
92
|
+
export interface IMenuOptions extends MenuFactory.IMenuOptions {}
|
|
93
|
+
}
|
package/src/view.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
import { IRankedMenu, RankedMenu } from '@jupyterlab/ui-components';
|
|
5
|
+
import { SemanticCommand } from '@jupyterlab/apputils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* An interface for a View menu.
|
|
9
|
+
*/
|
|
10
|
+
export interface IViewMenu extends IRankedMenu {
|
|
11
|
+
/**
|
|
12
|
+
* Semantic commands IEditorViewer for the View menu.
|
|
13
|
+
*/
|
|
14
|
+
readonly editorViewers: IViewMenu.IEditorViewer;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* An extensible View menu for the application.
|
|
19
|
+
*/
|
|
20
|
+
export class ViewMenu extends RankedMenu implements IViewMenu {
|
|
21
|
+
/**
|
|
22
|
+
* Construct the view menu.
|
|
23
|
+
*/
|
|
24
|
+
constructor(options: IRankedMenu.IOptions) {
|
|
25
|
+
super(options);
|
|
26
|
+
this.editorViewers = {
|
|
27
|
+
toggleLineNumbers: new SemanticCommand(),
|
|
28
|
+
toggleMatchBrackets: new SemanticCommand(),
|
|
29
|
+
toggleWordWrap: new SemanticCommand()
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Semantic commands IEditorViewer for the View menu.
|
|
35
|
+
*/
|
|
36
|
+
readonly editorViewers: IViewMenu.IEditorViewer;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Namespace for IViewMenu.
|
|
41
|
+
*/
|
|
42
|
+
export namespace IViewMenu {
|
|
43
|
+
/**
|
|
44
|
+
* Interface for a text editor viewer to register
|
|
45
|
+
* itself with the text editor semantic commands.
|
|
46
|
+
*/
|
|
47
|
+
export interface IEditorViewer {
|
|
48
|
+
/**
|
|
49
|
+
* A semantic command to show line numbers in the editor.
|
|
50
|
+
*/
|
|
51
|
+
toggleLineNumbers: SemanticCommand;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* A semantic command to word-wrap the editor.
|
|
55
|
+
*/
|
|
56
|
+
toggleWordWrap: SemanticCommand;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* A semantic command to match brackets in the editor.
|
|
60
|
+
*/
|
|
61
|
+
toggleMatchBrackets: SemanticCommand;
|
|
62
|
+
}
|
|
63
|
+
}
|