@opensumi/ide-webview 3.4.5-next-1730102270.0 → 3.4.5-next-1730118482.0

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 (62) hide show
  1. package/lib/browser/abstract-webview.js +2 -2
  2. package/lib/browser/abstract-webview.js.map +1 -1
  3. package/lib/browser/contribution.js +2 -2
  4. package/lib/browser/contribution.js.map +1 -1
  5. package/lib/browser/editor-webview.js.map +1 -1
  6. package/lib/browser/electron-webview-webview.js +2 -2
  7. package/lib/browser/electron-webview-webview.js.map +1 -1
  8. package/lib/browser/electron.contribution.js +2 -2
  9. package/lib/browser/electron.contribution.js.map +1 -1
  10. package/lib/browser/iframe/prebuilt.d.ts +2 -0
  11. package/lib/browser/iframe/prebuilt.d.ts.map +1 -0
  12. package/lib/browser/iframe/prebuilt.js +12 -0
  13. package/lib/browser/iframe/prebuilt.js.map +1 -0
  14. package/lib/browser/iframe-webview.d.ts.map +1 -1
  15. package/lib/browser/iframe-webview.js +11 -3
  16. package/lib/browser/iframe-webview.js.map +1 -1
  17. package/lib/browser/index.js +2 -2
  18. package/lib/browser/index.js.map +1 -1
  19. package/lib/browser/plain-webview.js.map +1 -1
  20. package/lib/browser/types.js +2 -2
  21. package/lib/browser/types.js.map +1 -1
  22. package/lib/browser/webview-window.js +11 -4
  23. package/lib/browser/webview-window.js.map +1 -1
  24. package/lib/browser/webview.service.d.ts.map +1 -1
  25. package/lib/browser/webview.service.js +17 -9
  26. package/lib/browser/webview.service.js.map +1 -1
  27. package/lib/electron-main/index.js +4 -4
  28. package/lib/electron-main/index.js.map +1 -1
  29. package/lib/electron-webview/host-channel.d.ts +1 -0
  30. package/lib/electron-webview/host-channel.d.ts.map +1 -1
  31. package/lib/electron-webview/host-channel.js +4 -0
  32. package/lib/electron-webview/host-channel.js.map +1 -1
  33. package/lib/webview-host/common.d.ts +1 -0
  34. package/lib/webview-host/common.d.ts.map +1 -1
  35. package/lib/webview-host/common.js +2 -2
  36. package/lib/webview-host/common.js.map +1 -1
  37. package/lib/webview-host/web-iframe-channel.d.ts +19 -0
  38. package/lib/webview-host/web-iframe-channel.d.ts.map +1 -0
  39. package/lib/webview-host/web-iframe-channel.js +83 -0
  40. package/lib/webview-host/web-iframe-channel.js.map +1 -0
  41. package/lib/webview-host/web-preload-builtin.d.ts +2 -0
  42. package/lib/webview-host/web-preload-builtin.d.ts.map +1 -0
  43. package/lib/webview-host/web-preload-builtin.js +7 -0
  44. package/lib/webview-host/web-preload-builtin.js.map +1 -0
  45. package/lib/webview-host/web-preload.d.ts +1 -15
  46. package/lib/webview-host/web-preload.d.ts.map +1 -1
  47. package/lib/webview-host/web-preload.js +3 -63
  48. package/lib/webview-host/web-preload.js.map +1 -1
  49. package/lib/webview-host/webview-manager.d.ts +1 -1
  50. package/lib/webview-host/webview-manager.d.ts.map +1 -1
  51. package/lib/webview-host/webview-manager.js +3 -2
  52. package/lib/webview-host/webview-manager.js.map +1 -1
  53. package/package.json +10 -9
  54. package/src/browser/iframe/prebuilt.ts +8 -0
  55. package/src/browser/iframe-webview.ts +11 -1
  56. package/src/browser/webview.service.ts +1 -1
  57. package/src/electron-webview/host-channel.ts +5 -0
  58. package/src/webview-host/common.ts +1 -0
  59. package/src/webview-host/web-iframe-channel.ts +90 -0
  60. package/src/webview-host/web-preload-builtin.ts +9 -0
  61. package/src/webview-host/web-preload.ts +2 -73
  62. package/src/webview-host/webview-manager.ts +4 -3
@@ -243,7 +243,7 @@ export class WebviewServiceImpl implements IWebviewService {
243
243
 
244
244
  getWebviewThemeData(theme: ITheme): IWebviewThemeData {
245
245
  const editorFontFamily = this.editorPreferences['editor.fontFamily'];
246
- const editorFontWeight = this.editorPreferences['editor.fontFamily'];
246
+ const editorFontWeight = this.editorPreferences['editor.fontWeight'];
247
247
  const editorFontSize = this.editorPreferences['editor.fontSize'];
248
248
 
249
249
  const exportedColors = getColorRegistry()
@@ -1,6 +1,7 @@
1
1
  import { ipcRenderer } from 'electron';
2
2
 
3
3
  import { IWebviewChannel } from '../webview-host/common';
4
+ import { getIdFromSearch } from '../webview-host/web-iframe-channel';
4
5
  import { WebviewPanelManager } from '../webview-host/webview-manager';
5
6
 
6
7
  export class ElectronWebviewChannel implements IWebviewChannel {
@@ -11,6 +12,10 @@ export class ElectronWebviewChannel implements IWebviewChannel {
11
12
 
12
13
  public isInDevelopmentMode = false;
13
14
 
15
+ get id() {
16
+ return getIdFromSearch();
17
+ }
18
+
14
19
  constructor() {
15
20
  window.addEventListener('message', (e) => {
16
21
  if (e.data && (e.data.command === 'onmessage' || e.data.command === 'do-update-state')) {
@@ -63,6 +63,7 @@ export interface IWebviewChannel {
63
63
  ready?: Promise<void>;
64
64
  onIframeLoaded?: (iframe: HTMLIFrameElement) => void;
65
65
  fakeLoad: boolean;
66
+ id: string;
66
67
  onKeydown?: (event: KeyboardEvent) => void;
67
68
  }
68
69
 
@@ -0,0 +1,90 @@
1
+ /* istanbul ignore file */
2
+ import { IWebviewChannel } from './common';
3
+
4
+ export const getIdFromSearch = () => {
5
+ const params = new URLSearchParams(document.location.search);
6
+ const id = params.get('id');
7
+ if (id) {
8
+ return id;
9
+ } else {
10
+ throw new Error('Missing "id" parameter in URL');
11
+ }
12
+ };
13
+
14
+ export class WebIframeChannel implements IWebviewChannel {
15
+ private handlers = new Map();
16
+ focusIframeOnCreate?: boolean;
17
+ ready?: Promise<void>;
18
+ fakeLoad = false;
19
+ private isInDevelopmentMode = false;
20
+
21
+ private _id: string;
22
+ get id() {
23
+ if (!this._id) {
24
+ this._id = this.getId() ?? '';
25
+ }
26
+ return this._id;
27
+ }
28
+
29
+ constructor(protected getId: () => string) {
30
+ window.addEventListener('message', (e) => {
31
+ if (e.data && (e.data.command === 'onmessage' || e.data.command === 'do-update-state')) {
32
+ // Came from inner iframe
33
+ this.postMessage(e.data.command, e.data.data);
34
+ return;
35
+ }
36
+
37
+ const channel = e.data.channel;
38
+ const handler = this.handlers.get(channel);
39
+ if (handler) {
40
+ handler(e, e.data.data);
41
+ } else {
42
+ // eslint-disable-next-line no-console
43
+ console.log('no handler for ', e);
44
+ }
45
+ });
46
+
47
+ this.ready = new Promise<void>((resolve) => {
48
+ // TODO 等待service worker完成 未来资源使用service worker时需要加入
49
+ resolve();
50
+ });
51
+
52
+ this.onMessage('devtools-opened', () => {
53
+ this.isInDevelopmentMode = true;
54
+ });
55
+ }
56
+
57
+ get inDev() {
58
+ return this.isInDevelopmentMode;
59
+ }
60
+
61
+ postMessage(channel, data?) {
62
+ if (window.parent !== window) {
63
+ window.parent.postMessage({ target: this.id, channel, data }, '*');
64
+ }
65
+ }
66
+
67
+ onMessage(channel, handler) {
68
+ this.handlers.set(channel, handler);
69
+ }
70
+
71
+ onIframeLoaded(newFrame) {
72
+ // newFrame.contentWindow.onbeforeunload = () => {
73
+ // if (this.isInDevelopmentMode) { // Allow reloads while developing a webview
74
+ // this.postMessage('do-reload');
75
+ // return false;
76
+ // }
77
+ // // Block navigation when not in development mode
78
+ // console.log('prevented webview navigation');
79
+ // return false;
80
+ // };
81
+ }
82
+
83
+ onKeydown(event: KeyboardEvent) {
84
+ // 在浏览器上,需要阻止一些默认的keydown快捷键
85
+ if (event.key === 's' && (event.metaKey || event.ctrlKey)) {
86
+ // 阻止保存
87
+ event.preventDefault();
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,9 @@
1
+ /* istanbul ignore file */
2
+ import { WebIframeChannel } from './web-iframe-channel';
3
+ import { WebviewPanelManager } from './webview-manager';
4
+
5
+ interface ExtendedWindow extends Window {
6
+ channelId: string;
7
+ }
8
+
9
+ new WebviewPanelManager(new WebIframeChannel(() => (window as unknown as ExtendedWindow).channelId));
@@ -1,76 +1,5 @@
1
1
  /* istanbul ignore file */
2
- import { IWebviewChannel } from './common';
2
+ import { WebIframeChannel, getIdFromSearch } from './web-iframe-channel';
3
3
  import { WebviewPanelManager } from './webview-manager';
4
4
 
5
- export class WebIframeChannel implements IWebviewChannel {
6
- private handlers = new Map();
7
- focusIframeOnCreate?: boolean | undefined;
8
- ready?: Promise<void> | undefined;
9
- fakeLoad = false;
10
- private isInDevelopmentMode = false;
11
- private id = document!.location!.search!.match(/\bid=([\w-]+)/)![1];
12
-
13
- constructor() {
14
- window.addEventListener('message', (e) => {
15
- if (e.data && (e.data.command === 'onmessage' || e.data.command === 'do-update-state')) {
16
- // Came from inner iframe
17
- this.postMessage(e.data.command, e.data.data);
18
- return;
19
- }
20
-
21
- const channel = e.data.channel;
22
- const handler = this.handlers.get(channel);
23
- if (handler) {
24
- handler(e, e.data.data);
25
- } else {
26
- // eslint-disable-next-line no-console
27
- console.log('no handler for ', e);
28
- }
29
- });
30
-
31
- this.ready = new Promise<void>(async (resolve) => {
32
- // TODO 等待service worker完成 未来资源使用service worker时需要加入
33
- resolve();
34
- });
35
-
36
- this.onMessage('devtools-opened', () => {
37
- this.isInDevelopmentMode = true;
38
- });
39
- }
40
-
41
- get inDev() {
42
- return this.isInDevelopmentMode;
43
- }
44
-
45
- postMessage(channel, data?) {
46
- if (window.parent !== window) {
47
- window.parent.postMessage({ target: this.id, channel, data }, '*');
48
- }
49
- }
50
-
51
- onMessage(channel, handler) {
52
- this.handlers.set(channel, handler);
53
- }
54
-
55
- onIframeLoaded(newFrame) {
56
- // newFrame.contentWindow.onbeforeunload = () => {
57
- // if (this.isInDevelopmentMode) { // Allow reloads while developing a webview
58
- // this.postMessage('do-reload');
59
- // return false;
60
- // }
61
- // // Block navigation when not in development mode
62
- // console.log('prevented webview navigation');
63
- // return false;
64
- // };
65
- }
66
-
67
- onKeydown(event: KeyboardEvent) {
68
- // 在浏览器上,需要阻止一些默认的keydown快捷键
69
- if (event.key === 's' && (event.metaKey || event.ctrlKey)) {
70
- // 阻止保存
71
- event.preventDefault();
72
- }
73
- }
74
- }
75
-
76
- new WebviewPanelManager(new WebIframeChannel());
5
+ new WebviewPanelManager(new WebIframeChannel(getIdFromSearch));
@@ -9,15 +9,16 @@ export class WebviewPanelManager {
9
9
  private loadTimeout;
10
10
  private pendingMessages: any[] = [];
11
11
  private initialScrollProgress: number;
12
- private ID: string | undefined;
12
+
13
+ get ID() {
14
+ return this.channel.id;
15
+ }
13
16
 
14
17
  constructor(private channel: IWebviewChannel) {
15
18
  document.addEventListener('DOMContentLoaded', this.init.bind(this));
16
19
  }
17
20
 
18
21
  private init() {
19
- const idMatch = document.location.search.match(/\bid=([\w-]+)/);
20
- this.ID = idMatch ? idMatch[1] : undefined;
21
22
  if (!document.body) {
22
23
  return;
23
24
  }