@opensumi/ide-webview 3.4.5-next-1730120479.0 → 3.4.5

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-webview.d.ts.map +1 -1
  11. package/lib/browser/iframe-webview.js +3 -11
  12. package/lib/browser/iframe-webview.js.map +1 -1
  13. package/lib/browser/index.js +2 -2
  14. package/lib/browser/index.js.map +1 -1
  15. package/lib/browser/plain-webview.js.map +1 -1
  16. package/lib/browser/types.js +2 -2
  17. package/lib/browser/types.js.map +1 -1
  18. package/lib/browser/webview-window.js +4 -11
  19. package/lib/browser/webview-window.js.map +1 -1
  20. package/lib/browser/webview.service.d.ts.map +1 -1
  21. package/lib/browser/webview.service.js +9 -17
  22. package/lib/browser/webview.service.js.map +1 -1
  23. package/lib/electron-main/index.js +4 -4
  24. package/lib/electron-main/index.js.map +1 -1
  25. package/lib/electron-webview/host-channel.d.ts +0 -1
  26. package/lib/electron-webview/host-channel.d.ts.map +1 -1
  27. package/lib/electron-webview/host-channel.js +0 -4
  28. package/lib/electron-webview/host-channel.js.map +1 -1
  29. package/lib/webview-host/common.d.ts +0 -1
  30. package/lib/webview-host/common.d.ts.map +1 -1
  31. package/lib/webview-host/common.js +2 -2
  32. package/lib/webview-host/common.js.map +1 -1
  33. package/lib/webview-host/web-preload.d.ts +15 -1
  34. package/lib/webview-host/web-preload.d.ts.map +1 -1
  35. package/lib/webview-host/web-preload.js +63 -3
  36. package/lib/webview-host/web-preload.js.map +1 -1
  37. package/lib/webview-host/webview-manager.d.ts +1 -1
  38. package/lib/webview-host/webview-manager.d.ts.map +1 -1
  39. package/lib/webview-host/webview-manager.js +2 -3
  40. package/lib/webview-host/webview-manager.js.map +1 -1
  41. package/package.json +9 -10
  42. package/src/browser/iframe-webview.ts +1 -11
  43. package/src/browser/webview.service.ts +1 -1
  44. package/src/electron-webview/host-channel.ts +0 -5
  45. package/src/webview-host/common.ts +0 -1
  46. package/src/webview-host/web-preload.ts +73 -2
  47. package/src/webview-host/webview-manager.ts +3 -4
  48. package/lib/browser/iframe/prebuilt.d.ts +0 -2
  49. package/lib/browser/iframe/prebuilt.d.ts.map +0 -1
  50. package/lib/browser/iframe/prebuilt.js +0 -12
  51. package/lib/browser/iframe/prebuilt.js.map +0 -1
  52. package/lib/webview-host/web-iframe-channel.d.ts +0 -19
  53. package/lib/webview-host/web-iframe-channel.d.ts.map +0 -1
  54. package/lib/webview-host/web-iframe-channel.js +0 -83
  55. package/lib/webview-host/web-iframe-channel.js.map +0 -1
  56. package/lib/webview-host/web-preload-builtin.d.ts +0 -2
  57. package/lib/webview-host/web-preload-builtin.d.ts.map +0 -1
  58. package/lib/webview-host/web-preload-builtin.js +0 -7
  59. package/lib/webview-host/web-preload-builtin.js.map +0 -1
  60. package/src/browser/iframe/prebuilt.ts +0 -8
  61. package/src/webview-host/web-iframe-channel.ts +0 -90
  62. package/src/webview-host/web-preload-builtin.ts +0 -9
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=web-preload-builtin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"web-preload-builtin.d.ts","sourceRoot":"","sources":["../../src/webview-host/web-preload-builtin.ts"],"names":[],"mappings":""}
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /* istanbul ignore file */
4
- const web_iframe_channel_1 = require("./web-iframe-channel");
5
- const webview_manager_1 = require("./webview-manager");
6
- new webview_manager_1.WebviewPanelManager(new web_iframe_channel_1.WebIframeChannel(() => window.channelId));
7
- //# sourceMappingURL=web-preload-builtin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"web-preload-builtin.js","sourceRoot":"","sources":["../../src/webview-host/web-preload-builtin.ts"],"names":[],"mappings":";;AAAA,0BAA0B;AAC1B,6DAAwD;AACxD,uDAAwD;AAMxD,IAAI,qCAAmB,CAAC,IAAI,qCAAgB,CAAC,GAAG,EAAE,CAAE,MAAoC,CAAC,SAAS,CAAC,CAAC,CAAC"}
@@ -1,8 +0,0 @@
1
- /* This file is generated by scripts/bundle-webview.mjs */
2
- /* eslint-disable */
3
- /* prettier-ignore */
4
- const htmlContent = "<!DOCTYPE html>\n<html lang=\"en\" style=\"width: 100%; height: 100%\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\n <title>Webview Panel Container</title>\n </head>\n\n <body style=\"margin: 0; overflow: hidden; width: 100%; height: 100%\"></body>\n <script>\n window.channelId = {{channelId}};\n </script>\n <script>\n \"use strict\";(()=>{var u=class{constructor(e){this.getId=e;this.handlers=new Map;this.fakeLoad=!1;this.isInDevelopmentMode=!1;window.addEventListener(\"message\",t=>{if(t.data&&(t.data.command===\"onmessage\"||t.data.command===\"do-update-state\")){this.postMessage(t.data.command,t.data.data);return}let n=t.data.channel,o=this.handlers.get(n);o?o(t,t.data.data):console.log(\"no handler for \",t)}),this.ready=new Promise(t=>{t()}),this.onMessage(\"devtools-opened\",()=>{this.isInDevelopmentMode=!0})}get id(){return this._id||(this._id=this.getId()??\"\"),this._id}get inDev(){return this.isInDevelopmentMode}postMessage(e,t){window.parent!==window&&window.parent.postMessage({target:this.id,channel:e,data:t},\"*\")}onMessage(e,t){this.handlers.set(e,t)}onIframeLoaded(e){}onKeydown(e){e.key===\"s\"&&(e.metaKey||e.ctrlKey)&&e.preventDefault()}};var y=`body {\n background-color: var(--vscode-editor-background);\n color: var(--vscode-editor-foreground);\n font-family: var(--vscode-font-family);\n font-weight: var(--vscode-font-weight);\n font-size: var(--vscode-font-size);\n margin: 0;\n padding: 0 20px;\n}\n\nimg {\n max-width: 100%;\n max-height: 100%;\n}\n\na {\n color: var(--vscode-textLink-foreground);\n}\n\na:hover {\n color: var(--vscode-textLink-activeForeground);\n}\n\na:focus,\ninput:focus,\nselect:focus,\ntextarea:focus {\n outline: 1px solid -webkit-focus-ring-color;\n outline-offset: -1px;\n}\n\ncode {\n color: var(--vscode-textPreformat-foreground);\n}\n\nblockquote {\n background: var(--vscode-textBlockQuote-background);\n border-color: var(--vscode-textBlockQuote-border);\n}\n\n::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n}\n\n::-webkit-scrollbar-thumb {\n background-color: var(--vscode-scrollbarSlider-background);\n}\n::-webkit-scrollbar-thumb:hover {\n background-color: var(--vscode-scrollbarSlider-hoverBackground);\n}\n::-webkit-scrollbar-thumb:active {\n background-color: var(--vscode-scrollbarSlider-activeBackground);\n}\n::-webkit-scrollbar-corner {\n background: transparent;\n}`;function M(l){return(l+\"\").replace(/[\\\\\"']/g,\"\\\\$&\").replace(/\\u0000/g,\"\\\\0\")}function b(l){return`\n const acquireVsCodeApi = (function() {\n const originalPostMessage = window.parent.postMessage.bind(window.parent);\n const targetOrigin = '*';\n let acquired = false;\n\n let state = ${l?`JSON.parse(\"${M(JSON.stringify(l))}\")`:void 0};\n\n return () => {\n if (acquired) {\n throw new Error('An instance of the VS Code API has already been acquired');\n }\n acquired = true;\n return Object.freeze({\n postMessage: function(msg) {\n return originalPostMessage({ command: 'onmessage', data: msg }, targetOrigin);\n },\n setState: function(newState) {\n state = newState;\n originalPostMessage({ command: 'do-update-state', data: JSON.parse(JSON.stringify(newState)) }, targetOrigin);\n return newState;\n },\n getState: function() {\n return state;\n }\n });\n };\n })();\n delete window.parent;\n delete window.top;\n delete window.frameElement;\n window.acquireVsCodeApi = acquireVsCodeApi;\n `}var m=class{constructor(e){this.channel=e;this.activeTheme=\"default\";this.isHandlingScroll=!1;this.updateId=0;this.firstLoad=!0;this.pendingMessages=[];document.addEventListener(\"DOMContentLoaded\",this.init.bind(this))}get ID(){return this.channel.id}init(){document.body&&(this.channel.onMessage(\"styles\",(e,t)=>{this.styles=t.styles,this.activeTheme=t.activeTheme;let n=this.getActiveFrame();n&&n.contentDocument&&this.applyStyles(n.contentDocument,n.contentDocument.body)}),this.channel.onMessage(\"focus\",()=>{let e=this.getActiveFrame();e&&e.contentWindow&&e.contentWindow.focus()}),this.channel.onMessage(\"content\",async(e,t)=>this.setContent(t)),this.channel.onMessage(\"message\",(e,t)=>{if(!this.getPendingFrame()){let o=this.getActiveFrame();if(o){o.contentWindow?.postMessage(t,\"*\");return}}this.pendingMessages.push(t)}),this.trackFocus({onFocus:()=>this.channel.postMessage(\"did-focus\"),onBlur:()=>this.channel.postMessage(\"did-blur\")}),this.channel.postMessage(\"webview-ready\",{}))}async setContent(e){let t=++this.updateId;if(await this.channel.ready,t!==this.updateId)return;let n=e.options,o=this.toContentHtml(e),d=this.getActiveFrame(),c=this.firstLoad,f;if(this.firstLoad)this.firstLoad=!1,f=(s,a)=>{isNaN(this.initialScrollProgress)||a.scrollY===0&&a.scroll(0,s.clientHeight*this.initialScrollProgress)};else{let s=d&&d.contentDocument&&d.contentDocument.body?d.contentWindow?.scrollY:0;f=(a,r)=>{r.scrollY===0&&r.scroll(0,s)}}let g=this.getPendingFrame();g&&(g.setAttribute(\"id\",\"\"),document.body.removeChild(g)),c||(this.pendingMessages=[]);let i=document.createElement(\"iframe\");i.setAttribute(\"id\",\"pending-frame\"),i.setAttribute(\"frameborder\",\"0\"),i.setAttribute(\"allow\",\"autoplay; clipboard-read; clipboard-write;\");let h=new Set([\"allow-same-origin\",\"allow-pointer-lock\"]);n.allowScripts&&(h.add(\"allow-scripts\"),h.add(\"allow-downloads\")),n.allowForms&&h.add(\"allow-forms\"),i.setAttribute(\"sandbox\",Array.from(h).join(\" \")),this.channel.fakeLoad&&(i.src=`./fake.html?id=${this.ID}`),i.style.cssText=\"display: block; margin: 0; overflow: hidden; position: absolute; width: 100%; height: 100%; visibility: hidden\",document.body.appendChild(i),this.channel.fakeLoad||i.contentDocument?.open(),i.contentWindow?.addEventListener(\"keydown\",this.handleInnerKeydown.bind(this)),i.contentWindow?.addEventListener(\"DOMContentLoaded\",s=>{this.channel.fakeLoad&&(i.contentDocument?.open(),i.contentDocument?.write(o),i.contentDocument?.close(),v(i));let a=s.target?s.target:void 0;a&&this.applyStyles(a,a.body)});let p=(s,a)=>{s&&s.body&&f(s.body,a);let r=this.getPendingFrame();if(r&&r.contentDocument&&r.contentDocument===s){let w=this.getActiveFrame();w&&document.body.removeChild(w),this.applyStyles(r.contentDocument,r.contentDocument.body),r.setAttribute(\"id\",\"active-frame\"),r.style.visibility=\"visible\",this.channel.focusIframeOnCreate&&r.contentWindow?.focus(),a.addEventListener(\"scroll\",this.handleInnerScroll.bind(this)),this.pendingMessages.forEach(k=>{a.postMessage(k,\"*\")}),this.pendingMessages=[]}},v=s=>{clearTimeout(this.loadTimeout),this.loadTimeout=void 0,this.loadTimeout=setTimeout(()=>{clearTimeout(this.loadTimeout),this.loadTimeout=void 0,p(s.contentDocument,s.contentWindow)},1e3);let a=this;s.contentWindow.addEventListener(\"load\",function(r){a.loadTimeout&&(clearTimeout(a.loadTimeout),a.loadTimeout=void 0,p(r.target,this))}),s.contentWindow.addEventListener(\"click\",this.handleInnerClick.bind(this)),this.channel.onIframeLoaded&&this.channel.onIframeLoaded(s)};this.channel.fakeLoad||v(i),this.channel.fakeLoad||(i.contentDocument?.write(o),i.contentDocument?.close()),this.channel.postMessage(\"did-set-content\",void 0)}trackFocus({onFocus:e,onBlur:t}){let o=document.hasFocus();setInterval(()=>{let d=document.hasFocus();d!==o&&(o=d,d?e():t())},50)}getActiveFrame(){return document.getElementById(\"active-frame\")}getPendingFrame(){return document.getElementById(\"pending-frame\")}get defaultCssRules(){return y}applyStyles(e,t){if(e&&(t&&(t.classList.remove(\"vscode-light\",\"vscode-dark\",\"vscode-high-contrast\"),t.classList.add(this.activeTheme)),this.styles))for(let n of Object.keys(this.styles))e.documentElement.style.setProperty(`--${n}`,this.styles[n])}handleInnerClick(e){if(!e||!e.view||!e.view.document)return;let t=e.view.document.getElementsByTagName(\"base\")[0],n=e.target;for(;n;){if(n.tagName&&n.tagName.toLowerCase()===\"a\"&&n.href){if(n.getAttribute(\"href\")===\"#\")e.view.scrollTo(0,0);else if(n.hash&&(n.getAttribute(\"href\")===n.hash||t&&n.href.indexOf(t.href)>=0)){let o=e.view.document.getElementById(n.hash.substr(1,n.hash.length-1));o&&o.scrollIntoView()}else this.channel.postMessage(\"did-click-link\",n.href.baseVal||n.href);e.preventDefault();break}n=n.parentNode}}handleInnerKeydown(e){this.channel.postMessage(\"did-keydown\",{key:e.key,keyCode:e.keyCode,code:e.code,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,repeat:e.repeat}),this.channel.onKeydown&&this.channel.onKeydown(e)}handleInnerScroll(e){if(!e.target||!e.target.body||this.isHandlingScroll)return;let t=e.currentTarget.scrollY/e.target.body.clientHeight;isNaN(t)||(this.isHandlingScroll=!0,window.requestAnimationFrame(()=>{try{this.channel.postMessage(\"did-scroll\",t)}catch{}this.isHandlingScroll=!1}))}toContentHtml(e){let t=e.options,n=e.contents,o=new DOMParser().parseFromString(n,\"text/html\");if(o.querySelectorAll(\"a\").forEach(c=>{c.title||(c.title=c.getAttribute(\"href\"))}),t.allowScripts){let c=o.createElement(\"script\");c.textContent=b(e.state),o.head.prepend(c)}let d=o.createElement(\"style\");return d.id=\"_defaultStyles\",d.innerHTML=this.defaultCssRules,o.head.prepend(d),this.applyStyles(o,o.body),`<!DOCTYPE html>\n`+o.documentElement.outerHTML}};new m(new u(()=>window.channelId));})();\n\n </script>\n</html>\n";
5
-
6
- export const createHTML = (channelId: string) => {
7
- return htmlContent.replace('{{channelId}}', JSON.stringify(channelId));
8
- };
@@ -1,90 +0,0 @@
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
- }
@@ -1,9 +0,0 @@
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));