Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
widget: Widget,
options?: DocumentRegistry.IOpenOptions
): void {
if (!widget.id) {
console.error('Widgets added to app shell must have unique id property.');
return;
}
options = options || {};
const dock = this._dockPanel;
const mode = options.mode || 'tab-after';
let ref: Widget | null = this.currentWidget;
if (options.ref) {
ref = find(dock.widgets(), value => value.id === options!.ref!) || null;
}
// Add widget ID to tab so that we can get a handle on the tab's widget
// (for context menu support)
widget.title.dataset = { ...widget.title.dataset, id: widget.id };
dock.addWidget(widget, { mode, ref });
// The dock panel doesn't account for placement information while
// in single document mode, so upon rehydrating any widgets that were
// added will not be in the correct place. Cache the placement information
// here so that we can later rehydrate correctly.
if (dock.mode === 'single-document') {
this._mainOptionsCache.set(widget, options);
}
// Get the node which being focused after this blur.
let focusTarget = event.relatedTarget as HTMLElement;
// If no other node is being focused, clear the active widget.
if (!focusTarget) {
this._setWidgets(this._currentWidget, null);
return;
}
// Bail if the focus widget is not changing.
if (widget.node.contains(focusTarget)) {
return;
}
// If no tracked widget is being focused, clear the active widget.
if (!find(this._widgets, w => w.node.contains(focusTarget))) {
this._setWidgets(this._currentWidget, null);
return;
}
}
getFileTypesForPath(path: string): DocumentRegistry.IFileType[] {
let fts: DocumentRegistry.IFileType[] = [];
let name = PathExt.basename(path);
// Look for a pattern match first.
let ft = find(this._fileTypes, ft => {
return ft.pattern && ft.pattern.match(name) !== null;
});
if (ft) {
fts.push(ft);
}
// Then look by extension name, starting with the longest
let ext = Private.extname(name);
while (ext.length > 1) {
ft = find(this._fileTypes, ft => ft.extensions.indexOf(ext) !== -1);
if (ft) {
fts.push(ft);
}
ext =
'.' +
ext
selectWidget(widget: Widget): void {
// Find the tab bar which contains the widget.
let tabBar = find(this.tabBars(), bar => {
return bar.titles.indexOf(widget.title) !== -1;
});
// Throw an error if no tab bar is found.
if (!tabBar) {
throw new Error('Widget is not contained in the dock panel.');
}
// Ensure the widget is the current widget.
tabBar.currentTitle = widget.title;
}
getFileType(name: string): DocumentRegistry.IFileType | undefined {
name = name.toLowerCase();
return find(this._fileTypes, fileType => {
return fileType.name.toLowerCase() === name;
});
}
private _findWidgetByID(id: string): Widget | null {
let item = find(this._items, value => value.widget.id === id);
return item ? item.widget : null;
}
private _currentTabBar(): TabBar | null {
const current = this._tracker.currentWidget;
if (!current) {
return null;
}
const title = current.title;
const bars = this._dockPanel.tabBars();
return find(bars, bar => bar.titles.indexOf(title) > -1) || null;
}