Skip to content

Commit 26c5910

Browse files
authored
Now opens editor and viewer (#83)
* Now opens editor and viewer * Fix lint check * Add split screen * Refactor code
1 parent 32ab7bf commit 26c5910

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

src/index.ts

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,17 @@ const extension: JupyterFrontEndPlugin<void> = {
6363
languageRegistry: IEditorLanguageRegistry
6464
) => {
6565
console.log('JupyterLab extension URDF is activated!');
66-
const { commands } = app;
66+
const { commands, shell } = app;
6767

6868
// Tracker
6969
const namespace = 'jupyterlab-urdf';
7070
const tracker = new WidgetTracker<URDFWidget>({ namespace });
7171

72+
// Track split state
73+
let splitDone = false;
74+
let leftEditorRefId: string | null = null;
75+
let rightViewerRefId: string | null = null;
76+
7277
// State restoration: reopen document if it was open previously
7378
if (restorer) {
7479
restorer.restore(tracker, {
@@ -89,7 +94,7 @@ const extension: JupyterFrontEndPlugin<void> = {
8994
});
9095

9196
// Add widget to tracker when created
92-
widgetFactory.widgetCreated.connect((sender, widget) => {
97+
widgetFactory.widgetCreated.connect(async (sender, widget) => {
9398
widget.title.icon = urdf_icon;
9499
widget.title.iconClass = 'jp-URDFIcon';
95100

@@ -98,6 +103,41 @@ const extension: JupyterFrontEndPlugin<void> = {
98103
tracker.save(widget);
99104
});
100105
tracker.add(widget);
106+
107+
// Reset split state when all widgets are closed
108+
widget.disposed.connect(() => {
109+
if (tracker.size === 0) {
110+
splitDone = false;
111+
leftEditorRefId = null;
112+
rightViewerRefId = null;
113+
}
114+
});
115+
116+
// Split layout on first open, then tab into panels
117+
if (!splitDone) {
118+
const editor = await commands.execute('docmanager:open', {
119+
path: widget.context.path,
120+
factory: 'Editor',
121+
options: { mode: 'split-left', ref: widget.id }
122+
});
123+
splitDone = true;
124+
leftEditorRefId = editor.id;
125+
rightViewerRefId = widget.id;
126+
} else {
127+
if (rightViewerRefId) {
128+
shell.add(widget, 'main', {
129+
mode: 'tab-after',
130+
ref: rightViewerRefId
131+
});
132+
}
133+
if (leftEditorRefId) {
134+
await commands.execute('docmanager:open', {
135+
path: widget.context.path,
136+
factory: 'Editor',
137+
options: { mode: 'tab-after', ref: leftEditorRefId }
138+
});
139+
}
140+
}
101141
});
102142

103143
// Register widget and model factories

0 commit comments

Comments
 (0)