|
709 | 709 | return /\.drawio\.png(?:[?#]|$)/i.test(target || '') ? 'xmlpng' : 'xmlsvg'; |
710 | 710 | } |
711 | 711 |
|
| 712 | + // Export request for saving an editable image link. theme sets the colors |
| 713 | + // of the svg (hediet.vscode-drawio.svgAppearance); draw.io ignores it for png. |
| 714 | + function linkExportRequest(target) { |
| 715 | + return JSON.stringify({ action: 'export', format: linkExportFormat(target), theme: svgAppearance }); |
| 716 | + } |
| 717 | + |
712 | 718 | // Forward intercepted VS Code shortcuts from draw.io iframes. |
713 | 719 | // This is a dedicated listener that doesn't depend on iframe source |
714 | 720 | // matching, because VS Code's webview iframe nesting can make |
|
807 | 813 | var isDark = document.body.classList.contains('vscode-dark'); |
808 | 814 | var minimalUI = true; |
809 | 815 | var diagramPadding = 28; |
| 816 | + var svgAppearance = 'light'; // colors of saved .drawio.svg links; set via setSvgAppearance |
810 | 817 |
|
811 | 818 | var imageBaseUri = ''; |
812 | 819 | var diagramBlocks = []; |
|
2051 | 2058 | case 'setDiagramPadding': |
2052 | 2059 | diagramPadding = msg.padding; |
2053 | 2060 | break; |
| 2061 | + case 'setSvgAppearance': |
| 2062 | + svgAppearance = msg.appearance; |
| 2063 | + break; |
2054 | 2064 | case 'sourceConverted': |
2055 | 2065 | handleSourceConverted(msg); |
2056 | 2066 | break; |
|
2401 | 2411 | if (overlayState.linkTarget) { |
2402 | 2412 | overlayState._pendingLinkSave = true; |
2403 | 2413 | state._linkSaveQuietUntil = Date.now() + 2000; |
2404 | | - overlayFrame.contentWindow.postMessage(JSON.stringify({ action: 'export', format: linkExportFormat(overlayState.linkTarget) }), '*'); |
| 2414 | + overlayFrame.contentWindow.postMessage(linkExportRequest(overlayState.linkTarget), '*'); |
2405 | 2415 | } |
2406 | 2416 | else { |
2407 | 2417 | vscode.postMessage({ |
|
3423 | 3433 | if (linkSec && linkSec.linkTarget) { |
3424 | 3434 | if (state.iframe && state.initialized) { |
3425 | 3435 | state._pendingLinkSave = true; |
3426 | | - state.iframe.contentWindow.postMessage(JSON.stringify({ action: 'export', format: linkExportFormat(linkSec.linkTarget) }), '*'); |
| 3436 | + state.iframe.contentWindow.postMessage(linkExportRequest(linkSec.linkTarget), '*'); |
3427 | 3437 | } |
3428 | 3438 | return; |
3429 | 3439 | } |
|
3441 | 3451 | if (overlayState.active && overlayState.dirty) { |
3442 | 3452 | if (overlayState.linkTarget) { |
3443 | 3453 | overlayState._pendingLinkSave = true; |
3444 | | - overlayFrame.contentWindow.postMessage(JSON.stringify({ action: 'export', format: linkExportFormat(overlayState.linkTarget) }), '*'); |
| 3454 | + overlayFrame.contentWindow.postMessage(linkExportRequest(overlayState.linkTarget), '*'); |
3445 | 3455 | } |
3446 | 3456 | else { |
3447 | 3457 | vscode.postMessage({ |
|
0 commit comments