@opensumi/ide-webview 2.12.1-next-079c1930

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.
Files changed (72) hide show
  1. package/lib/browser/abstract-webview.d.ts +57 -0
  2. package/lib/browser/abstract-webview.d.ts.map +1 -0
  3. package/lib/browser/abstract-webview.js +167 -0
  4. package/lib/browser/abstract-webview.js.map +1 -0
  5. package/lib/browser/contribution.d.ts +11 -0
  6. package/lib/browser/contribution.d.ts.map +1 -0
  7. package/lib/browser/contribution.js +85 -0
  8. package/lib/browser/contribution.js.map +1 -0
  9. package/lib/browser/editor-webview.d.ts +24 -0
  10. package/lib/browser/editor-webview.d.ts.map +1 -0
  11. package/lib/browser/editor-webview.js +167 -0
  12. package/lib/browser/editor-webview.js.map +1 -0
  13. package/lib/browser/electron-webview-webview.d.ts +21 -0
  14. package/lib/browser/electron-webview-webview.d.ts.map +1 -0
  15. package/lib/browser/electron-webview-webview.js +137 -0
  16. package/lib/browser/electron-webview-webview.js.map +1 -0
  17. package/lib/browser/iframe-webview.d.ts +21 -0
  18. package/lib/browser/iframe-webview.d.ts.map +1 -0
  19. package/lib/browser/iframe-webview.js +118 -0
  20. package/lib/browser/iframe-webview.js.map +1 -0
  21. package/lib/browser/index.d.ts +8 -0
  22. package/lib/browser/index.d.ts.map +1 -0
  23. package/lib/browser/index.js +29 -0
  24. package/lib/browser/index.js.map +1 -0
  25. package/lib/browser/plain-webview.d.ts +45 -0
  26. package/lib/browser/plain-webview.d.ts.map +1 -0
  27. package/lib/browser/plain-webview.js +199 -0
  28. package/lib/browser/plain-webview.js.map +1 -0
  29. package/lib/browser/types.d.ts +171 -0
  30. package/lib/browser/types.d.ts.map +1 -0
  31. package/lib/browser/types.js +10 -0
  32. package/lib/browser/types.js.map +1 -0
  33. package/lib/browser/webview-window.d.ts +33 -0
  34. package/lib/browser/webview-window.d.ts.map +1 -0
  35. package/lib/browser/webview-window.js +104 -0
  36. package/lib/browser/webview-window.js.map +1 -0
  37. package/lib/browser/webview.service.d.ts +76 -0
  38. package/lib/browser/webview.service.d.ts.map +1 -0
  39. package/lib/browser/webview.service.js +380 -0
  40. package/lib/browser/webview.service.js.map +1 -0
  41. package/lib/common/index.d.ts +2 -0
  42. package/lib/common/index.d.ts.map +1 -0
  43. package/lib/common/index.js +5 -0
  44. package/lib/common/index.js.map +1 -0
  45. package/lib/electron-main/index.d.ts +9 -0
  46. package/lib/electron-main/index.d.ts.map +1 -0
  47. package/lib/electron-main/index.js +41 -0
  48. package/lib/electron-main/index.js.map +1 -0
  49. package/lib/electron-webview/host-channel.d.ts +13 -0
  50. package/lib/electron-webview/host-channel.d.ts.map +1 -0
  51. package/lib/electron-webview/host-channel.js +57 -0
  52. package/lib/electron-webview/host-channel.js.map +1 -0
  53. package/lib/electron-webview/host-preload.js +2 -0
  54. package/lib/electron-webview/plain-preload.js +55 -0
  55. package/lib/index.d.ts +2 -0
  56. package/lib/index.d.ts.map +1 -0
  57. package/lib/index.js +5 -0
  58. package/lib/index.js.map +1 -0
  59. package/lib/webview-host/common.d.ts +12 -0
  60. package/lib/webview-host/common.d.ts.map +1 -0
  61. package/lib/webview-host/common.js +97 -0
  62. package/lib/webview-host/common.js.map +1 -0
  63. package/lib/webview-host/web-preload.d.ts +16 -0
  64. package/lib/webview-host/web-preload.d.ts.map +1 -0
  65. package/lib/webview-host/web-preload.js +69 -0
  66. package/lib/webview-host/web-preload.js.map +1 -0
  67. package/lib/webview-host/webview-manager.d.ts +26 -0
  68. package/lib/webview-host/webview-manager.d.ts.map +1 -0
  69. package/lib/webview-host/webview-manager.js +314 -0
  70. package/lib/webview-host/webview-manager.js.map +1 -0
  71. package/lib/webview-host/webview.html +14 -0
  72. package/package.json +35 -0
@@ -0,0 +1,57 @@
1
+ import { IWebview, IWebviewContentOptions, IWebviewContentScrollPosition, IWebviewService } from './types';
2
+ import { Event, URI, Disposable, IDisposable, Emitter, IEventBus, MaybeNull } from '@opensumi/ide-core-browser';
3
+ import { IThemeService } from '@opensumi/ide-theme';
4
+ import { StaticResourceService } from '@opensumi/ide-static-resource/lib/browser';
5
+ export declare abstract class AbstractWebviewPanel extends Disposable implements IWebview {
6
+ readonly id: string;
7
+ protected _html: string;
8
+ protected _options: IWebviewContentOptions;
9
+ initialScrollProgress: number;
10
+ state: any;
11
+ _onDidFocus: Emitter<void>;
12
+ onDidFocus: Event<void>;
13
+ _onDidBlur: Emitter<void>;
14
+ onDidBlur: Event<void>;
15
+ _onDidClickLink: Emitter<URI>;
16
+ onDidClickLink: Event<URI>;
17
+ _onDidScroll: Emitter<IWebviewContentScrollPosition>;
18
+ onDidScroll: Event<IWebviewContentScrollPosition>;
19
+ _onDidUpdateState: Emitter<any>;
20
+ onDidUpdateState: Event<any>;
21
+ _onRemove: Emitter<void>;
22
+ onRemove: Event<void>;
23
+ protected _isListening: boolean;
24
+ private _focused;
25
+ protected _ready: Promise<void>;
26
+ webviewService: IWebviewService;
27
+ themeService: IThemeService;
28
+ eventBus: IEventBus;
29
+ staticResourceService: StaticResourceService;
30
+ protected _keybindingDomTarget: HTMLElement | undefined;
31
+ setKeybindingDomTarget(target: any): void;
32
+ constructor(id: string, options?: IWebviewContentOptions);
33
+ init(): void;
34
+ postMessage(message: any): Promise<void>;
35
+ get options(): IWebviewContentOptions;
36
+ onMessage(listener: (message: any) => any): IDisposable;
37
+ protected initEvents(): void;
38
+ protected updateStyle(): void;
39
+ getContent(): string;
40
+ setContent(html: string): Promise<void>;
41
+ protected preprocessHtml(html: string): string;
42
+ protected doUpdateContent(): any;
43
+ abstract appendTo(container: HTMLElement): any;
44
+ protected abstract _sendToWebview(channel: string, data: any): any;
45
+ protected abstract _onWebviewMessage(channel: string, listener: (data: any) => any): IDisposable;
46
+ updateOptions(options: IWebviewContentOptions): void;
47
+ layout(): void;
48
+ focus(): void;
49
+ reload(): void;
50
+ protected handleFocusChange(isFocused: boolean): void;
51
+ private style;
52
+ setListenMessages(listening: boolean): void;
53
+ abstract prepareContainer(): any;
54
+ abstract getDomNode(): MaybeNull<HTMLElement>;
55
+ abstract remove(): void;
56
+ }
57
+ //# sourceMappingURL=abstract-webview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-webview.d.ts","sourceRoot":"","sources":["../../src/browser/abstract-webview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractWebviewPanel = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const types_1 = require("./types");
6
+ const ide_core_browser_1 = require("@opensumi/ide-core-browser");
7
+ const ide_theme_1 = require("@opensumi/ide-theme");
8
+ const di_1 = require("@opensumi/di");
9
+ const event_1 = require("@opensumi/ide-theme/lib/common/event");
10
+ const browser_1 = require("@opensumi/ide-static-resource/lib/browser");
11
+ let AbstractWebviewPanel = class AbstractWebviewPanel extends ide_core_browser_1.Disposable {
12
+ constructor(id, options = {}) {
13
+ super();
14
+ this.id = id;
15
+ this._html = '';
16
+ this._onDidFocus = new ide_core_browser_1.Emitter();
17
+ this.onDidFocus = this._onDidFocus.event;
18
+ this._onDidBlur = new ide_core_browser_1.Emitter();
19
+ this.onDidBlur = this._onDidFocus.event;
20
+ this._onDidClickLink = new ide_core_browser_1.Emitter();
21
+ this.onDidClickLink = this._onDidClickLink.event;
22
+ this._onDidScroll = new ide_core_browser_1.Emitter();
23
+ this.onDidScroll = this._onDidScroll.event;
24
+ this._onDidUpdateState = new ide_core_browser_1.Emitter();
25
+ this.onDidUpdateState = this._onDidUpdateState.event;
26
+ this._onRemove = new ide_core_browser_1.Emitter();
27
+ this.onRemove = this._onRemove.event;
28
+ this._isListening = true;
29
+ this._focused = false;
30
+ this._keybindingDomTarget = undefined;
31
+ this._options = options;
32
+ }
33
+ setKeybindingDomTarget(target) {
34
+ this._keybindingDomTarget = target;
35
+ }
36
+ init() {
37
+ this.prepareContainer();
38
+ this.initEvents();
39
+ }
40
+ async postMessage(message) {
41
+ return this._sendToWebview('message', message);
42
+ }
43
+ get options() {
44
+ return this._options;
45
+ }
46
+ onMessage(listener) {
47
+ return this._onWebviewMessage('onmessage', listener);
48
+ }
49
+ initEvents() {
50
+ this._onWebviewMessage('did-click-link', (data) => {
51
+ this._onDidClickLink.fire(new ide_core_browser_1.URI(data));
52
+ });
53
+ this._onWebviewMessage('did-scroll', (data) => {
54
+ this._onDidScroll.fire(data);
55
+ });
56
+ this._onWebviewMessage('do-reload', () => {
57
+ this.doUpdateContent();
58
+ });
59
+ this._onWebviewMessage('load-resource', () => {
60
+ // TODO: 资源相关
61
+ });
62
+ this._onWebviewMessage('load-localhost', () => {
63
+ // TODO: 好像是消息转发
64
+ });
65
+ this._onWebviewMessage('did-focus', () => {
66
+ this.handleFocusChange(true);
67
+ });
68
+ this._onWebviewMessage('did-blur', () => {
69
+ this.handleFocusChange(false);
70
+ });
71
+ this._onWebviewMessage('do-update-state', (state) => {
72
+ this.state = state;
73
+ this._onDidUpdateState.fire(state);
74
+ });
75
+ this._onWebviewMessage('did-keydown', (event) => {
76
+ // Create a fake KeyboardEvent from the data provided
77
+ const emulatedKeyboardEvent = new KeyboardEvent('keydown', event);
78
+ // Force override the target
79
+ Object.defineProperty(emulatedKeyboardEvent, 'target', {
80
+ get: () => {
81
+ return this._keybindingDomTarget || this.getDomNode();
82
+ },
83
+ });
84
+ // And re-dispatch
85
+ window.dispatchEvent(emulatedKeyboardEvent);
86
+ });
87
+ this.updateStyle();
88
+ }
89
+ updateStyle() {
90
+ this.style(this.themeService.getCurrentThemeSync());
91
+ this.addDispose(this.eventBus.on(event_1.ThemeChangedEvent, (e) => {
92
+ this.style(e.payload.theme);
93
+ }));
94
+ }
95
+ getContent() {
96
+ return this._html;
97
+ }
98
+ async setContent(html) {
99
+ this._html = html;
100
+ await this.doUpdateContent();
101
+ }
102
+ preprocessHtml(html) {
103
+ if ((0, ide_core_browser_1.isElectronRenderer)()) {
104
+ // 将vscode-resource:/User/xxx 转换为 vscode-resource:///User/xxx
105
+ return html.replace(/(["'])vscode-resource:(\/\/|)([^\s'"]+?)(["'])/gi, (_, startQuote, slash, path, endQuote) => `${startQuote}vscode-resource://${path}${endQuote}`);
106
+ }
107
+ return html.replace(/(["'])vscode-resource:([^\s'"]+?)(["'])/gi, (_, startQuote, path, endQuote) => `${startQuote}${this.staticResourceService.resolveStaticResource(ide_core_browser_1.URI.file(path))}${endQuote}`);
108
+ }
109
+ doUpdateContent() {
110
+ return this._sendToWebview('content', {
111
+ contents: this.preprocessHtml(this._html),
112
+ options: this._options,
113
+ state: this.state,
114
+ });
115
+ }
116
+ updateOptions(options) {
117
+ this._options = Object.assign(this._options, options);
118
+ this.doUpdateContent();
119
+ }
120
+ layout() {
121
+ throw new Error('Method not implemented.');
122
+ }
123
+ focus() {
124
+ throw new Error('Method not implemented.');
125
+ }
126
+ reload() {
127
+ throw new Error('Method not implemented.');
128
+ }
129
+ handleFocusChange(isFocused) {
130
+ this._focused = isFocused;
131
+ if (this._focused) {
132
+ this._onDidFocus.fire();
133
+ }
134
+ else {
135
+ this._onDidBlur.fire();
136
+ }
137
+ }
138
+ style(theme) {
139
+ const { styles, activeTheme } = this.webviewService.getWebviewThemeData(theme);
140
+ this._sendToWebview('styles', { styles, activeTheme });
141
+ }
142
+ setListenMessages(listening) {
143
+ this._isListening = listening;
144
+ }
145
+ };
146
+ (0, tslib_1.__decorate)([
147
+ (0, di_1.Autowired)(types_1.IWebviewService),
148
+ (0, tslib_1.__metadata)("design:type", Object)
149
+ ], AbstractWebviewPanel.prototype, "webviewService", void 0);
150
+ (0, tslib_1.__decorate)([
151
+ (0, di_1.Autowired)(ide_theme_1.IThemeService),
152
+ (0, tslib_1.__metadata)("design:type", Object)
153
+ ], AbstractWebviewPanel.prototype, "themeService", void 0);
154
+ (0, tslib_1.__decorate)([
155
+ (0, di_1.Autowired)(ide_core_browser_1.IEventBus),
156
+ (0, tslib_1.__metadata)("design:type", Object)
157
+ ], AbstractWebviewPanel.prototype, "eventBus", void 0);
158
+ (0, tslib_1.__decorate)([
159
+ (0, di_1.Autowired)(browser_1.StaticResourceService),
160
+ (0, tslib_1.__metadata)("design:type", browser_1.StaticResourceService)
161
+ ], AbstractWebviewPanel.prototype, "staticResourceService", void 0);
162
+ AbstractWebviewPanel = (0, tslib_1.__decorate)([
163
+ (0, di_1.Injectable)({ multiple: true }),
164
+ (0, tslib_1.__metadata)("design:paramtypes", [String, Object])
165
+ ], AbstractWebviewPanel);
166
+ exports.AbstractWebviewPanel = AbstractWebviewPanel;
167
+ //# sourceMappingURL=abstract-webview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-webview.js","sourceRoot":"","sources":["../../src/browser/abstract-webview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { BrowserEditorContribution, EditorComponentRegistry } from '@opensumi/ide-editor/lib/browser';
2
+ import { CommandContribution, CommandRegistry } from '@opensumi/ide-core-browser';
3
+ import { ResourceService } from '@opensumi/ide-editor';
4
+ import { WebviewServiceImpl } from './webview.service';
5
+ export declare class WebviewModuleContribution implements BrowserEditorContribution, CommandContribution {
6
+ webviewService: WebviewServiceImpl;
7
+ editorComponentRegistry: EditorComponentRegistry;
8
+ registerResource(resourceService: ResourceService): void;
9
+ registerCommands(commandRegistry: CommandRegistry): void;
10
+ }
11
+ //# sourceMappingURL=contribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contribution.d.ts","sourceRoot":"","sources":["../../src/browser/contribution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,EAAe,mBAAmB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE/F,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAOvD,qBACa,yBAA0B,YAAW,yBAAyB,EAAE,mBAAmB;IAG9F,cAAc,EAAE,kBAAkB,CAAC;IAGnC,uBAAuB,EAAE,uBAAuB,CAAC;IAEjD,gBAAgB,CAAC,eAAe,EAAE,eAAe;IAqCjD,gBAAgB,CAAC,eAAe,EAAE,eAAe;CAkBlD"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebviewModuleContribution = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /* istanbul ignore file */
6
+ const browser_1 = require("@opensumi/ide-editor/lib/browser");
7
+ const ide_core_browser_1 = require("@opensumi/ide-core-browser");
8
+ const ide_core_common_1 = require("@opensumi/ide-core-common");
9
+ const types_1 = require("./types");
10
+ const di_1 = require("@opensumi/di");
11
+ const webview_service_1 = require("./webview.service");
12
+ const WEBVIEW_DEVTOOLS_COMMAND = {
13
+ id: 'workbench.action.webview.openDeveloperTools',
14
+ label: (0, ide_core_common_1.localize)('openToolsLabel', 'Open Webview Developer Tools'),
15
+ };
16
+ let WebviewModuleContribution = class WebviewModuleContribution {
17
+ registerResource(resourceService) {
18
+ resourceService.registerResourceProvider({
19
+ scheme: types_1.EDITOR_WEBVIEW_SCHEME,
20
+ provideResource: async (uri) => {
21
+ const existingComponent = this.webviewService.editorWebviewComponents.get(uri.path.toString());
22
+ if (existingComponent) {
23
+ return existingComponent.resource;
24
+ }
25
+ else {
26
+ // try revive, 如果无法恢复,会抛错
27
+ await this.webviewService.tryRestoredWebviewComponent(uri.path.toString());
28
+ return this.webviewService.editorWebviewComponents.get(uri.path.toString()).resource;
29
+ }
30
+ },
31
+ shouldCloseResource: (resource, openedResources) => {
32
+ let count = 0;
33
+ for (const resources of openedResources) {
34
+ for (const r of resources) {
35
+ if (r.uri.scheme === types_1.EDITOR_WEBVIEW_SCHEME && r.uri.toString() === resource.uri.toString()) {
36
+ count++;
37
+ }
38
+ if (count > 1) {
39
+ return true;
40
+ }
41
+ }
42
+ }
43
+ const component = this.webviewService.editorWebviewComponents.get(resource.uri.path.toString());
44
+ if ((0, types_1.isWebview)(component === null || component === void 0 ? void 0 : component.webview)) {
45
+ // 只对类 vscode webview 进行 dispose,
46
+ // loadUrl 的 plainWebview 必须手动 dispose
47
+ this.webviewService.editorWebviewComponents.get(resource.uri.path.toString()).clear();
48
+ }
49
+ return true;
50
+ },
51
+ });
52
+ }
53
+ registerCommands(commandRegistry) {
54
+ commandRegistry.registerCommand(WEBVIEW_DEVTOOLS_COMMAND, {
55
+ execute: () => {
56
+ const elements = document.querySelectorAll('webview');
57
+ // tslint:disable-next-line: prefer-for-of
58
+ for (let i = 0; i < elements.length; i += 1) {
59
+ try {
60
+ elements[i].openDevTools();
61
+ }
62
+ catch (e) {
63
+ // noop
64
+ }
65
+ }
66
+ },
67
+ isEnabled: () => {
68
+ return (0, ide_core_common_1.isElectronRenderer)();
69
+ },
70
+ });
71
+ }
72
+ };
73
+ (0, tslib_1.__decorate)([
74
+ (0, di_1.Autowired)(types_1.IWebviewService),
75
+ (0, tslib_1.__metadata)("design:type", webview_service_1.WebviewServiceImpl)
76
+ ], WebviewModuleContribution.prototype, "webviewService", void 0);
77
+ (0, tslib_1.__decorate)([
78
+ (0, di_1.Autowired)(browser_1.EditorComponentRegistry),
79
+ (0, tslib_1.__metadata)("design:type", browser_1.EditorComponentRegistry)
80
+ ], WebviewModuleContribution.prototype, "editorComponentRegistry", void 0);
81
+ WebviewModuleContribution = (0, tslib_1.__decorate)([
82
+ (0, ide_core_browser_1.Domain)(browser_1.BrowserEditorContribution, ide_core_browser_1.CommandContribution)
83
+ ], WebviewModuleContribution);
84
+ exports.WebviewModuleContribution = WebviewModuleContribution;
85
+ //# sourceMappingURL=contribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contribution.js","sourceRoot":"","sources":["../../src/browser/contribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { ReactEditorComponent } from '@opensumi/ide-editor/lib/browser';
3
+ import { IWebview, IPlainWebview, IEditorWebviewMetaData } from './types';
4
+ import { Disposable } from '@opensumi/ide-core-browser';
5
+ export declare const EditorWebviewComponentView: ReactEditorComponent<IEditorWebviewMetaData>;
6
+ /**
7
+ * 同一个ID创建的webview会保存在内存以便重复使用,不要使用这个组件进行大量不同webview的创建
8
+ */
9
+ export declare const PlainWebview: React.ComponentType<{
10
+ id: string;
11
+ renderRoot?: HTMLElement;
12
+ appendToChild?: boolean;
13
+ }>;
14
+ export declare class WebviewMounter extends Disposable {
15
+ private webview;
16
+ private container;
17
+ private renderRoot;
18
+ private mounting;
19
+ private _container;
20
+ constructor(webview: IWebview | IPlainWebview, container: HTMLElement, mutationRoot: HTMLElement, renderRoot?: HTMLElement);
21
+ doMount(): void;
22
+ getWebviewRealContainer(): HTMLElement;
23
+ }
24
+ //# sourceMappingURL=editor-webview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-webview.d.ts","sourceRoot":"","sources":["../../src/browser/editor-webview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,sBAAsB,EAA8B,MAAM,SAAS,CAAC;AACtG,OAAO,EAAE,UAAU,EAA8B,MAAM,4BAA4B,CAAC;AAMpF,eAAO,MAAM,0BAA0B,EAAE,oBAAoB,CAAC,sBAAsB,CAoBnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAwB9G,CAAC;AAIF,qBAAa,cAAe,SAAQ,UAAU;IAMhC,OAAO,CAAC,OAAO;IAA4B,OAAO,CAAC,SAAS;IAA0C,OAAO,CAAC,UAAU;IAJpI,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,UAAU,CAAqB;gBAEnB,OAAO,EAAE,QAAQ,GAAG,aAAa,EAAU,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAU,UAAU,GAAE,WAA2B;IAkEjK,OAAO;IA6BP,uBAAuB;CAmBxB"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebviewMounter = exports.PlainWebview = exports.EditorWebviewComponentView = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = (0, tslib_1.__importDefault)(require("react"));
6
+ const types_1 = require("./types");
7
+ const ide_core_browser_1 = require("@opensumi/ide-core-browser");
8
+ const EditorWebviewComponentView = ({ resource }) => {
9
+ var _a;
10
+ const webviewService = (0, ide_core_browser_1.useInjectable)(types_1.IWebviewService);
11
+ const webview = (_a = webviewService.editorWebviewComponents.get(resource.metadata.id)) === null || _a === void 0 ? void 0 : _a.webview;
12
+ let container = null;
13
+ react_1.default.useEffect(() => {
14
+ if (webview && container) {
15
+ const mounter = new WebviewMounter(webview, container, document.getElementById('workbench-editor'), document.getElementById('workbench-editor'));
16
+ webview.onRemove(() => {
17
+ mounter.dispose();
18
+ });
19
+ return () => {
20
+ webview.remove();
21
+ };
22
+ }
23
+ });
24
+ return react_1.default.createElement("div", { style: { height: '100%', width: '100%', position: 'relative' }, className: 'editor-webview-webview-component', ref: (el) => container = el });
25
+ };
26
+ exports.EditorWebviewComponentView = EditorWebviewComponentView;
27
+ /**
28
+ * 同一个ID创建的webview会保存在内存以便重复使用,不要使用这个组件进行大量不同webview的创建
29
+ */
30
+ const PlainWebview = ({ id, renderRoot = document.body, appendToChild }) => {
31
+ let container = null;
32
+ const webviewService = (0, ide_core_browser_1.useInjectable)(types_1.IWebviewService);
33
+ react_1.default.useEffect(() => {
34
+ const component = webviewService.getOrCreatePlainWebviewComponent(id);
35
+ if (component && container) {
36
+ if (appendToChild) {
37
+ component.webview.appendTo(container);
38
+ }
39
+ else {
40
+ const mounter = new WebviewMounter(component.webview, container, document.getElementById('workbench-editor'), renderRoot);
41
+ component.webview.onRemove(() => {
42
+ mounter.dispose();
43
+ });
44
+ }
45
+ return () => {
46
+ component.webview.remove();
47
+ };
48
+ }
49
+ }, []);
50
+ return react_1.default.createElement("div", { style: { height: '100%', width: '100%', position: 'relative' }, ref: (el) => container = el });
51
+ };
52
+ exports.PlainWebview = PlainWebview;
53
+ // 将iframe挂载在一个固定的位置,以overlay的形式覆盖在container中,
54
+ // 防止它在DOM树改变时被重载
55
+ class WebviewMounter extends ide_core_browser_1.Disposable {
56
+ constructor(webview, container, mutationRoot, renderRoot = document.body) {
57
+ super();
58
+ this.webview = webview;
59
+ this.container = container;
60
+ this.renderRoot = renderRoot;
61
+ if (!this.webview.getDomNode()) {
62
+ return;
63
+ }
64
+ this.webview.appendTo(this.getWebviewRealContainer());
65
+ if ((0, types_1.isWebview)(this.webview)) {
66
+ this.webview.setKeybindingDomTarget(container);
67
+ }
68
+ const resizeObserver = new ResizeObserver(this.doMount.bind(this));
69
+ const mutationObserver = new MutationObserver((mutations) => {
70
+ const ancestors = new Set();
71
+ let ancestor = this.container;
72
+ while (ancestor && ancestor !== mutationRoot) {
73
+ ancestors.add(ancestor);
74
+ ancestor = ancestor.parentElement;
75
+ }
76
+ for (const { addedNodes, removedNodes } of mutations) {
77
+ for (const node of addedNodes) {
78
+ if (ancestors.has(node)) {
79
+ this.doMount();
80
+ return;
81
+ }
82
+ }
83
+ for (const node of removedNodes) {
84
+ if (ancestors.has(node)) {
85
+ this.doMount();
86
+ return;
87
+ }
88
+ }
89
+ }
90
+ });
91
+ resizeObserver.observe(container);
92
+ mutationObserver.observe(mutationRoot, { childList: true, subtree: true });
93
+ this.doMount();
94
+ this.addDispose({
95
+ dispose: () => {
96
+ if (this._container) {
97
+ this._container.remove();
98
+ this._container = null;
99
+ this.webview = null;
100
+ this.container = null;
101
+ }
102
+ resizeObserver.disconnect();
103
+ mutationObserver.disconnect();
104
+ },
105
+ });
106
+ this.addDispose(new ide_core_browser_1.DomListener(window, 'resize', () => {
107
+ this.doMount();
108
+ }));
109
+ // 监听滚动
110
+ let parent = container.parentElement;
111
+ while (parent) {
112
+ this.addDispose(new ide_core_browser_1.DomListener(parent, 'scroll', () => {
113
+ this.doMount();
114
+ }));
115
+ parent = parent.parentElement;
116
+ }
117
+ }
118
+ doMount() {
119
+ if (this.mounting) {
120
+ window.cancelAnimationFrame(this.mounting);
121
+ }
122
+ this.mounting = window.requestAnimationFrame(() => {
123
+ if (!this.webview.getDomNode()) {
124
+ return;
125
+ }
126
+ const rect = this.container.getBoundingClientRect();
127
+ if (rect.height === 0 || rect.width === 0) {
128
+ this.webview.getDomNode().style.display = 'none';
129
+ if ((0, types_1.isWebview)(this.webview) && !this.webview.options.longLive) {
130
+ this.webview.setListenMessages(false);
131
+ }
132
+ }
133
+ else {
134
+ this.webview.getDomNode().style.display = '';
135
+ if ((0, types_1.isWebview)(this.webview)) {
136
+ this.webview.setListenMessages(true);
137
+ }
138
+ }
139
+ const renderRootRects = this.renderRoot.getBoundingClientRect();
140
+ this.webview.getDomNode().style.top = (rect.top - renderRootRects.top) + 'px';
141
+ this.webview.getDomNode().style.left = (rect.left - renderRootRects.left) + 'px';
142
+ this.webview.getDomNode().style.height = rect.height + 'px';
143
+ this.webview.getDomNode().style.width = rect.width + 'px';
144
+ this.mounting = 0;
145
+ });
146
+ }
147
+ getWebviewRealContainer() {
148
+ if (this._container) {
149
+ return this._container;
150
+ }
151
+ let mountContainer = this.renderRoot.querySelector(':scope > div[data-webview-container=true]');
152
+ if (!mountContainer) {
153
+ const container = document.createElement('div');
154
+ container.style.zIndex = '2';
155
+ container.style.position = 'absolute';
156
+ container.setAttribute('data-webview-container', 'true');
157
+ container.style.top = '0';
158
+ this.renderRoot.appendChild(container);
159
+ mountContainer = container;
160
+ }
161
+ this._container = document.createElement('div');
162
+ mountContainer.appendChild(this._container);
163
+ return this._container;
164
+ }
165
+ }
166
+ exports.WebviewMounter = WebviewMounter;
167
+ //# sourceMappingURL=editor-webview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-webview.js","sourceRoot":"","sources":["../../src/browser/editor-webview.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { IWebview, IWebviewContentOptions } from './types';
2
+ import { IDisposable, AppConfig } from '@opensumi/ide-core-browser';
3
+ import { AbstractWebviewPanel } from './abstract-webview';
4
+ export declare class ElectronWebviewWebviewPanel extends AbstractWebviewPanel implements IWebview {
5
+ readonly id: string;
6
+ private webview;
7
+ private _needReload;
8
+ private _iframeDisposer;
9
+ private _isReady;
10
+ config: AppConfig;
11
+ constructor(id: string, options?: IWebviewContentOptions);
12
+ prepareContainer(): void;
13
+ getDomNode(): Electron.WebviewTag;
14
+ protected _sendToWebview(channel: string, data: any): void;
15
+ protected _onWebviewMessage(channel: string, listener: (data: any) => any): IDisposable;
16
+ appendTo(container: HTMLElement): void;
17
+ remove(): void;
18
+ clear(): void;
19
+ dispose(): void;
20
+ }
21
+ //# sourceMappingURL=electron-webview-webview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electron-webview-webview.d.ts","sourceRoot":"","sources":["../../src/browser/electron-webview-webview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAA2C,WAAW,EAAE,SAAS,EAAe,MAAM,4BAA4B,CAAC;AAC1H,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,qBACa,2BAA4B,SAAQ,oBAAqB,YAAW,QAAQ;aAa3D,EAAE,EAAE,MAAM;IAXtC,OAAO,CAAC,OAAO,CAAsB;IAErC,OAAO,CAAC,WAAW,CAAkB;IAErC,OAAO,CAAC,eAAe,CAAuC;IAE9D,OAAO,CAAC,QAAQ,CAAU;IAG1B,MAAM,EAAE,SAAS,CAAC;gBAEU,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B;IAc5E,gBAAgB;IAoBhB,UAAU;IAIV,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;IAcnD,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,WAAW;IAcvF,QAAQ,CAAC,SAAS,EAAE,WAAW;IAc/B,MAAM;IAWN,KAAK;IAQL,OAAO;CAOR"}