@@ -4,11 +4,9 @@ import {displayError} from './common.js';
4
4
5
5
const { mermaidMaxSourceCharacters} = window . config ;
6
6
7
- const iframeCss = `
8
- :root {color-scheme: normal}
9
- body {margin: 0; padding: 0; overflow: hidden}
10
- #mermaid {display: block; margin: 0 auto}
11
- ` ;
7
+ const iframeCss = `:root {color-scheme: normal}
8
+ body {margin: 0; padding: 0; overflow: hidden}
9
+ #mermaid {display: block; margin: 0 auto}` ;
12
10
13
11
export async function renderMermaid ( ) {
14
12
const els = document . querySelectorAll ( '.markup code.language-mermaid' ) ;
@@ -45,23 +43,28 @@ export async function renderMermaid() {
45
43
const { svg} = await mermaid . render ( 'mermaid' , source ) ;
46
44
47
45
const iframe = document . createElement ( 'iframe' ) ;
48
- iframe . classList . add ( 'markup-render' ) ;
49
- iframe . sandbox = 'allow-scripts allow-same-origin' ;
46
+ iframe . classList . add ( 'markup-render' , 'gt-invisible' ) ;
50
47
iframe . srcdoc = `<html><head><style>${ iframeCss } </style></head><body>${ svg } </body></html>` ;
51
- iframe . addEventListener ( 'load' , ( ) => {
52
- const height = iframe . contentWindow . document . body . clientHeight ;
53
- iframe . style . height = `${ height } px` ;
54
- } ) ;
55
48
56
49
const mermaidBlock = document . createElement ( 'div' ) ;
57
- mermaidBlock . classList . add ( 'mermaid-block' ) ;
50
+ mermaidBlock . classList . add ( 'mermaid-block' , 'is-loading' , 'gt-hidden' ) ;
58
51
mermaidBlock . append ( iframe ) ;
59
52
60
53
const btn = makeCodeCopyButton ( ) ;
61
54
btn . setAttribute ( 'data-clipboard-text' , source ) ;
62
-
63
55
mermaidBlock . append ( btn ) ;
64
- pre . replaceWith ( mermaidBlock ) ;
56
+
57
+ iframe . addEventListener ( 'load' , ( ) => {
58
+ pre . replaceWith ( mermaidBlock ) ;
59
+ mermaidBlock . classList . remove ( 'gt-hidden' ) ;
60
+ iframe . style . height = `${ iframe . contentWindow . document . body . clientHeight } px` ;
61
+ setTimeout ( ( ) => { // avoid flash of iframe background
62
+ mermaidBlock . classList . remove ( 'is-loading' ) ;
63
+ iframe . classList . remove ( 'gt-invisible' ) ;
64
+ } , 0 ) ;
65
+ } ) ;
66
+
67
+ document . body . append ( mermaidBlock ) ;
65
68
} catch ( err ) {
66
69
displayError ( pre , err ) ;
67
70
}
0 commit comments