11import debounce from 'lodash.debounce' ;
2- import { JSItem , type CSSItem } from 'markmap-common' ;
3- import { fillTemplate } from 'markmap-render' ;
2+ import {
3+ buildJSItem ,
4+ mergeAssets ,
5+ type CSSItem ,
6+ type JSItem ,
7+ } from 'markmap-common' ;
8+ import { Transformer , builtInPlugins } from 'markmap-lib' ;
9+ import { baseJsPaths , fillTemplate } from 'markmap-render' ;
410import { type IMarkmapJSONOptions } from 'markmap-view' ;
511import {
612 CustomTextEditorProvider ,
@@ -19,10 +25,10 @@ import {
1925import { Utils } from 'vscode-uri' ;
2026import localImage from './plugins/local-image' ;
2127import {
22- getAssets ,
23- getLocalTransformer ,
24- mergeAssets ,
28+ ASSETS_PREFIX ,
29+ appAssets ,
2530 setExportMode ,
31+ toolbarAssets ,
2632 transformerExport ,
2733} from './util' ;
2834
@@ -69,44 +75,57 @@ class MarkmapEditor implements CustomTextEditorProvider {
6975 webviewPanel . webview . options = {
7076 enableScripts : true ,
7177 } ;
72- const resolveUrl = ( relPath : string ) =>
73- webviewPanel . webview
74- . asWebviewUri ( this . resolveAssetPath ( relPath ) )
75- . toString ( ) ;
76- const transformerLocal = getLocalTransformer ( [
78+ const transformerLocal = new Transformer ( [
79+ ...builtInPlugins ,
7780 localImage ( ( relPath ) =>
7881 webviewPanel . webview
7982 . asWebviewUri ( Utils . joinPath ( Utils . dirname ( document . uri ) , relPath ) )
8083 . toString ( ) ,
8184 ) ,
8285 ] ) ;
83- const { allAssets } = getAssets ( transformerLocal ) ;
84- const resolvedAssets = {
85- ...allAssets ,
86- styles : allAssets . styles ?. map ( ( item ) => {
87- if ( item . type === 'stylesheet' ) {
88- return {
89- ...item ,
90- data : {
91- href : resolveUrl ( item . data . href ) ,
92- } ,
93- } ;
94- }
95- return item ;
96- } ) ,
97- scripts : allAssets . scripts ?. map ( ( item ) => {
98- if ( item . type === 'script' && item . data . src ) {
99- return {
100- ...item ,
101- data : {
102- ...item . data ,
103- src : resolveUrl ( item . data . src ) ,
104- } ,
105- } ;
106- }
107- return item ;
108- } ) ,
109- } ;
86+ const resolveUrl = ( path : string ) =>
87+ webviewPanel . webview . asWebviewUri ( this . resolveAssetPath ( path ) ) . toString ( ) ;
88+ const providerName = 'local' ;
89+ transformerLocal . urlBuilder . providers [ providerName ] = ( path : string ) =>
90+ resolveUrl ( `${ ASSETS_PREFIX } ${ path } ` ) ;
91+ transformerLocal . urlBuilder . provider = providerName ;
92+ const otherAssets = mergeAssets (
93+ {
94+ scripts : baseJsPaths . map ( buildJSItem ) ,
95+ } ,
96+ toolbarAssets ,
97+ ) ;
98+ const resolvedAssets = mergeAssets (
99+ {
100+ styles : otherAssets . styles ?. map ( ( item ) =>
101+ transformerLocal . resolveCSS ( item ) ,
102+ ) ,
103+ scripts : otherAssets . scripts ?. map ( ( item ) =>
104+ transformerLocal . resolveJS ( item ) ,
105+ ) ,
106+ } ,
107+ transformerLocal . getAssets ( ) ,
108+ {
109+ styles : appAssets . styles ?. map ( ( item ) =>
110+ item . type === 'stylesheet'
111+ ? {
112+ ...item ,
113+ data : {
114+ href : resolveUrl ( item . data . href ) ,
115+ } ,
116+ }
117+ : item ,
118+ ) ,
119+ scripts : appAssets . scripts ?. map ( ( item ) =>
120+ item . type === 'script' && item . data . src
121+ ? {
122+ ...item ,
123+ data : { src : resolveUrl ( item . data . src ) } ,
124+ }
125+ : item ,
126+ ) ,
127+ } ,
128+ ) ;
110129 webviewPanel . webview . html = fillTemplate ( undefined , resolvedAssets , {
111130 baseJs : [ ] ,
112131 urlBuilder : transformerLocal . urlBuilder ,
@@ -185,31 +204,46 @@ class MarkmapEditor implements CustomTextEditorProvider {
185204 } ;
186205 const { embedAssets } = jsonOptions as { embedAssets ?: boolean } ;
187206 setExportMode ( embedAssets ) ;
188- let assets = transformerExport . getUsedAssets ( features ) ;
189- const { baseAssets, toolbarAssets } = getAssets ( transformerExport ) ;
190- assets = mergeAssets ( baseAssets , assets , toolbarAssets , {
191- styles : [
192- ...( customCSS
193- ? [
194- {
195- type : 'style' ,
196- data : customCSS ,
197- } as CSSItem ,
198- ]
199- : [ ] ) ,
200- ] ,
201- scripts : [
202- {
203- type : 'iife' ,
204- data : {
205- fn : ( r : typeof renderToolbar ) => {
206- setTimeout ( r ) ;
207+ const otherAssets = mergeAssets (
208+ {
209+ scripts : baseJsPaths . map ( buildJSItem ) ,
210+ } ,
211+ toolbarAssets ,
212+ ) ;
213+ let assets = mergeAssets (
214+ {
215+ styles : otherAssets . styles ?. map ( ( item ) =>
216+ transformerExport . resolveCSS ( item ) ,
217+ ) ,
218+ scripts : otherAssets . scripts ?. map ( ( item ) =>
219+ transformerExport . resolveJS ( item ) ,
220+ ) ,
221+ } ,
222+ transformerExport . getUsedAssets ( features ) ,
223+ {
224+ styles : [
225+ ...( customCSS
226+ ? [
227+ {
228+ type : 'style' ,
229+ data : customCSS ,
230+ } as CSSItem ,
231+ ]
232+ : [ ] ) ,
233+ ] ,
234+ scripts : [
235+ {
236+ type : 'iife' ,
237+ data : {
238+ fn : ( r : typeof renderToolbar ) => {
239+ setTimeout ( r ) ;
240+ } ,
241+ getParams : ( ) => [ renderToolbar ] ,
207242 } ,
208- getParams : ( ) => [ renderToolbar ] ,
209243 } ,
210- } ,
211- ] ,
212- } ) ;
244+ ] ,
245+ } ,
246+ ) ;
213247 if ( embedAssets ) {
214248 const [ styles , scripts ] = await Promise . all ( [
215249 Promise . all (
0 commit comments