Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/contextview/browser/contextViewService.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { ContextView, ContextViewDOMPosition, IContextViewProvider } from '../../../base/browser/ui/contextview/contextview.js';
7
import { Disposable } from '../../../base/common/lifecycle.js';
8
import { ILayoutService } from '../../layout/browser/layoutService.js';
9
import { IContextViewDelegate, IContextViewService, IOpenContextView } from './contextView.js';
10
import { getWindow } from '../../../base/browser/dom.js';
11
12
export class ContextViewHandler extends Disposable implements IContextViewProvider {
13
14
private openContextView: IOpenContextView | undefined;
15
protected readonly contextView: ContextView;
16
17
constructor(
18
@ILayoutService private readonly layoutService: ILayoutService
19
) {
20
super();
21
22
this.contextView = this._register(new ContextView(this.layoutService.mainContainer, ContextViewDOMPosition.ABSOLUTE));
23
24
this.layout();
25
this._register(layoutService.onDidLayoutContainer(() => this.layout()));
26
}
27
28
// ContextView
29
30
showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IOpenContextView {
31
let domPosition: ContextViewDOMPosition;
32
if (container) {
33
if (container === this.layoutService.getContainer(getWindow(container))) {
34
domPosition = ContextViewDOMPosition.ABSOLUTE;
35
} else if (shadowRoot) {
36
domPosition = ContextViewDOMPosition.FIXED_SHADOW;
37
} else {
38
domPosition = ContextViewDOMPosition.FIXED;
39
}
40
} else {
41
domPosition = ContextViewDOMPosition.ABSOLUTE;
42
}
43
44
this.contextView.setContainer(container ?? this.layoutService.activeContainer, domPosition);
45
46
this.contextView.show(delegate);
47
48
const openContextView: IOpenContextView = {
49
close: () => {
50
if (this.openContextView === openContextView) {
51
this.hideContextView();
52
}
53
}
54
};
55
56
this.openContextView = openContextView;
57
return openContextView;
58
}
59
60
layout(): void {
61
this.contextView.layout();
62
}
63
64
hideContextView(data?: any): void {
65
this.contextView.hide(data);
66
this.openContextView = undefined;
67
}
68
}
69
70
export class ContextViewService extends ContextViewHandler implements IContextViewService {
71
72
declare readonly _serviceBrand: undefined;
73
74
getContextViewElement(): HTMLElement {
75
return this.contextView.getViewElement();
76
}
77
}
78
79