@@ -25,16 +25,24 @@ async function sendDoM(storybookUrl, stories, storybookConfig, options) {
2525 const browserless = await browser . createContext ( )
2626 const html = await browserless . html ( storyInfo . url )
2727
28- dom = new JSDOM ( html ) ;
29- for ( element of dom . window . document . querySelectorAll ( 'img' ) ) {
28+ dom = new JSDOM ( html , {
29+ url : storybookUrl ,
30+ resources : 'usable'
31+ } ) ;
32+ clone = new JSDOM ( html ) ;
33+
34+ // Serialize DOM
35+ for ( element of clone . window . document . querySelectorAll ( 'img' ) ) {
3036 let image = new URL ( element . getAttribute ( 'src' ) , storybookUrl ) . href ;
3137 let format = path . extname ( image ) . replace ( / ^ ./ , '' ) ;
3238 format = format === 'svg' ? 'svg+xml' : format
3339 let imageAsBase64 = await getBase64 ( image ) ;
3440 element . setAttribute ( 'src' , 'data:image/' + format + ';base64,' + imageAsBase64 ) ;
3541 }
42+ await serializeCSSOM ( dom , clone ) ;
43+
3644 try {
37- fs . writeFileSync ( 'doms/' + storyId + '.html' , dom . serialize ( ) ) ;
45+ fs . writeFileSync ( 'doms/' + storyId + '.html' , clone . serialize ( ) ) ;
3846 } catch ( err ) {
3947 console . error ( err ) ;
4048 }
@@ -164,4 +172,20 @@ function getBase64(url) {
164172 } ) ;
165173}
166174
175+ async function serializeCSSOM ( dom , clone ) {
176+ return new Promise ( resolve => {
177+ dom . window . addEventListener ( "load" , ( ) => {
178+ console . log ( dom . window . document . styleSheets . length ) ;
179+ for ( let styleSheet of dom . window . document . styleSheets ) {
180+ let style = clone . window . document . createElement ( 'style' ) ;
181+ style . type = 'text/css' ;
182+ style . innerHTML = Array . from ( styleSheet . cssRules )
183+ . map ( cssRule => cssRule . cssText ) . join ( '\n' ) ;
184+ clone . window . document . head . appendChild ( style ) ;
185+ }
186+ resolve ( ) ;
187+ } ) ;
188+ } ) ;
189+ }
190+
167191module . exports = { sendDoM } ;
0 commit comments