Skip to content

Commit 897f62a

Browse files
authored
update to mermaid 11.10.0 (#2224)
1 parent 0713b1c commit 897f62a

File tree

5 files changed

+307
-5
lines changed

5 files changed

+307
-5
lines changed

.github/workflows/tests.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ jobs:
9797
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
9898
- uses: jupyterlab/maintainer-tools/.github/actions/check-links@v1
9999
with:
100-
ignore_links: "https://ipywidgets.readthedocs.io/en/latest/examples/Output"
100+
ignore_links:
101+
^https://ipywidgets.readthedocs.io/en/latest/examples/Output
102+
^https://nbviewer.jupyter.org
101103

102104
test_minimum_versions:
103105
name: Test Minimum Versions

nbconvert/exporters/html.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,23 @@ class HTMLExporter(TemplateExporter):
124124
).tag(config=True)
125125

126126
mermaid_js_url = Unicode(
127-
"https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs",
127+
"https://cdnjs.cloudflare.com/ajax/libs/mermaid/11.10.0/mermaid.esm.min.mjs",
128128
help="""
129129
URL to load MermaidJS from.
130130
131131
Defaults to loading from cdnjs.
132132
""",
133133
)
134134

135+
mermaid_layout_elk_js_url = Unicode(
136+
"https://cdnjs.cloudflare.com/ajax/libs/mermaid-layout-elk/0.1.9/mermaid-layout-elk.esm.min.mjs",
137+
help="""
138+
URL to load MermaidJS ELK layout from.
139+
140+
Defaults to loading from cdnjs.
141+
""",
142+
)
143+
135144
jquery_url = Unicode(
136145
"https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js",
137146
help="""
@@ -362,6 +371,7 @@ def resources_include_url(name):
362371
resources["require_js_url"] = self.require_js_url
363372
resources["mathjax_url"] = self.mathjax_url
364373
resources["mermaid_js_url"] = self.mermaid_js_url
374+
resources["mermaid_layout_elk_js_url"] = self.mermaid_layout_elk_js_url
365375
resources["jquery_url"] = self.jquery_url
366376
resources["jupyter_widgets_base_url"] = self.jupyter_widgets_base_url
367377
resources["widget_renderer_url"] = self.widget_renderer_url

share/templates/classic/index.html.j2

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
{%- block html_head_js_mermaidjs -%}
2323
<script type="module">
2424
import mermaid from '{{ resources.mermaid_js_url }}';
25+
{% if resources.mermaid_js_elk_url %}
26+
import elkLayouts from '{{ resources.mermaid_js_elk_url }}';
27+
mermaid.registerLayoutLoaders(elkLayouts);
28+
{% endif %}
2529
mermaid.initialize({ startOnLoad: true });
2630
</script>
2731
{%- endblock html_head_js_mermaidjs -%}

share/templates/lab/index.html.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ a.anchor-link {
109109
{%- endblock html_head_js_mathjax -%}
110110

111111
{%- block html_head_js_mermaidjs -%}
112-
{{ mermaid_js(resources.mermaid_js_url) }}
112+
{{ mermaid_js(resources.mermaid_js_url, resources.mermaid_layout_elk_js_url) }}
113113
{%- endblock html_head_js_mermaidjs -%}
114114

115115
{%- block html_head_css -%}

share/templates/lab/mermaidjs.html.j2

Lines changed: 288 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{%- macro mermaid_js(
2-
url="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs"
2+
url="https://cdnjs.cloudflare.com/ajax/libs/mermaid/11.10.0/mermaid.esm.min.mjs",
3+
elk_url="https://cdnjs.cloudflare.com/ajax/libs/mermaid-layout-elk/0.1.9/mermaid-layout-elk.esm.min.mjs"
34
) -%}
45
<script type="module">
56
document.addEventListener("DOMContentLoaded", async () => {
@@ -9,6 +10,11 @@ url="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs"
910
return;
1011
}
1112
const mermaid = (await import("{{ url }}")).default;
13+
const elkUrl = "{{ elk_url | default('') }}";
14+
if(elkUrl) {
15+
const elkLayouts = (await import(elkUrl)).default;
16+
mermaid.registerLayoutLoaders(elkLayouts);
17+
}
1218
const parser = new DOMParser();
1319
1420
mermaid.initialize({
@@ -105,7 +111,8 @@ url="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs"
105111
* Post-process to ensure mermaid diagrams contain only valid SVG and XHTML.
106112
*/
107113
function cleanMermaidSvg(svg) {
108-
return svg.replace(RE_VOID_ELEMENT, replaceVoidElement);
114+
svg = svg.replace(RE_VOID_ELEMENT, replaceVoidElement);
115+
return `${SVG_XML_HEADER}${svg}`;
109116
}
110117
111118
@@ -132,6 +139,285 @@ url="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs"
132139
return `<${tag} ${rest}>`;
133140
}
134141
142+
143+
/**
144+
* Named HTML entities with their decimal equivalent codes.
145+
*
146+
* @see https://www.w3.org/TR/WD-html40-970708/sgml/entities.html
147+
* */
148+
const HTML_ENTITIES = `<!ENTITY Aacute "&#193;">
149+
<!ENTITY aacute "&#225;">
150+
<!ENTITY Acirc "&#194;">
151+
<!ENTITY acirc "&#226;">
152+
<!ENTITY acute "&#180;">
153+
<!ENTITY AElig "&#198;">
154+
<!ENTITY aelig "&#230;">
155+
<!ENTITY Agrave "&#192;">
156+
<!ENTITY agrave "&#224;">
157+
<!ENTITY alefsym "&#8501;">
158+
<!ENTITY Alpha "&#913;">
159+
<!ENTITY alpha "&#945;">
160+
<!ENTITY amp "&#38;">
161+
<!ENTITY and "&#8869;">
162+
<!ENTITY ang "&#8736;">
163+
<!ENTITY Aring "&#197;">
164+
<!ENTITY aring "&#229;">
165+
<!ENTITY asymp "&#8776;">
166+
<!ENTITY Atilde "&#195;">
167+
<!ENTITY atilde "&#227;">
168+
<!ENTITY Auml "&#196;">
169+
<!ENTITY auml "&#228;">
170+
<!ENTITY bdquo "&#8222;">
171+
<!ENTITY Beta "&#914;">
172+
<!ENTITY beta "&#946;">
173+
<!ENTITY brvbar "&#166;">
174+
<!ENTITY bull "&#8226;">
175+
<!ENTITY cap "&#8745;">
176+
<!ENTITY Ccedil "&#199;">
177+
<!ENTITY ccedil "&#231;">
178+
<!ENTITY cedil "&#184;">
179+
<!ENTITY cent "&#162;">
180+
<!ENTITY Chi "&#935;">
181+
<!ENTITY chi "&#967;">
182+
<!ENTITY circ "&#710;">
183+
<!ENTITY clubs "&#9827;">
184+
<!ENTITY cong "&#8773;">
185+
<!ENTITY copy "&#169;">
186+
<!ENTITY crarr "&#8629;">
187+
<!ENTITY cup "&#8746;">
188+
<!ENTITY curren "&#164;">
189+
<!ENTITY dagger "&#8224;">
190+
<!ENTITY Dagger "&#8225;">
191+
<!ENTITY darr "&#8595;">
192+
<!ENTITY dArr "&#8659;">
193+
<!ENTITY deg "&#176;">
194+
<!ENTITY Delta "&#916;">
195+
<!ENTITY delta "&#948;">
196+
<!ENTITY diams "&#9830;">
197+
<!ENTITY divide "&#247;">
198+
<!ENTITY Eacute "&#201;">
199+
<!ENTITY eacute "&#233;">
200+
<!ENTITY Ecirc "&#202;">
201+
<!ENTITY ecirc "&#234;">
202+
<!ENTITY Egrave "&#200;">
203+
<!ENTITY egrave "&#232;">
204+
<!ENTITY empty "&#8709;">
205+
<!ENTITY emsp "&#8195;">
206+
<!ENTITY ensp "&#8194;">
207+
<!ENTITY epsilon "&#949;">
208+
<!ENTITY Epsilon "&#917;">
209+
<!ENTITY equiv "&#8801;">
210+
<!ENTITY Eta "&#919;">
211+
<!ENTITY eta "&#951;">
212+
<!ENTITY ETH "&#208;">
213+
<!ENTITY eth "&#240;">
214+
<!ENTITY Euml "&#203;">
215+
<!ENTITY euml "&#235;">
216+
<!ENTITY exist "&#8707;">
217+
<!ENTITY fnof "&#402;">
218+
<!ENTITY forall "&#8704;">
219+
<!ENTITY frac12 "&#189;">
220+
<!ENTITY frac14 "&#188;">
221+
<!ENTITY frac34 "&#190;">
222+
<!ENTITY frasl "&#8260;">
223+
<!ENTITY Gamma "&#915;">
224+
<!ENTITY gamma "&#947;">
225+
<!ENTITY ge "&#8805;">
226+
<!ENTITY gt "&#62;">
227+
<!ENTITY harr "&#8596;">
228+
<!ENTITY hArr "&#8660;">
229+
<!ENTITY hearts "&#9829;">
230+
<!ENTITY hellip "&#8230;">
231+
<!ENTITY Iacute "&#205;">
232+
<!ENTITY iacute "&#237;">
233+
<!ENTITY Icirc "&#206;">
234+
<!ENTITY icirc "&#238;">
235+
<!ENTITY iexcl "&#161;">
236+
<!ENTITY Igrave "&#204;">
237+
<!ENTITY igrave "&#236;">
238+
<!ENTITY image "&#8465;">
239+
<!ENTITY infin "&#8734;">
240+
<!ENTITY int "&#8747;">
241+
<!ENTITY Iota "&#921;">
242+
<!ENTITY iota "&#953;">
243+
<!ENTITY iquest "&#191;">
244+
<!ENTITY isin "&#8712;">
245+
<!ENTITY Iuml "&#207;">
246+
<!ENTITY iuml "&#239;">
247+
<!ENTITY Kappa "&#922;">
248+
<!ENTITY kappa "&#954;">
249+
<!ENTITY Lambda "&#923;">
250+
<!ENTITY lambda "&#955;">
251+
<!ENTITY lang "&#9001;">
252+
<!ENTITY laquo "&#171;">
253+
<!ENTITY larr "&#8592;">
254+
<!ENTITY lArr "&#8656;">
255+
<!ENTITY lceil "&#8968;">
256+
<!ENTITY ldquo "&#8220;">
257+
<!ENTITY le "&#8804;">
258+
<!ENTITY lfloor "&#8970;">
259+
<!ENTITY lowast "&#8727;">
260+
<!ENTITY loz "&#9674;">
261+
<!ENTITY lrm "&#8206;">
262+
<!ENTITY lsaquo "&#8249;">
263+
<!ENTITY lsquo "&#8216;">
264+
<!ENTITY lt "&#60;">
265+
<!ENTITY macr "&#175;">
266+
<!ENTITY mdash "&#8212;">
267+
<!ENTITY micro "&#181;">
268+
<!ENTITY middot "&#183;">
269+
<!ENTITY minus "&#8722;">
270+
<!ENTITY Mu "&#924;">
271+
<!ENTITY mu "&#956;">
272+
<!ENTITY nabla "&#8711;">
273+
<!ENTITY nbsp "&#160;">
274+
<!ENTITY ndash "&#8211;">
275+
<!ENTITY ne "&#8800;">
276+
<!ENTITY ni "&#8715;">
277+
<!ENTITY not "&#172;">
278+
<!ENTITY notin "&#8713;">
279+
<!ENTITY nsub "&#8836;">
280+
<!ENTITY Ntilde "&#209;">
281+
<!ENTITY ntilde "&#241;">
282+
<!ENTITY Nu "&#925;">
283+
<!ENTITY nu "&#957;">
284+
<!ENTITY Oacute "&#211;">
285+
<!ENTITY oacute "&#243;">
286+
<!ENTITY Ocirc "&#212;">
287+
<!ENTITY ocirc "&#244;">
288+
<!ENTITY OElig "&#338;">
289+
<!ENTITY oelig "&#339;">
290+
<!ENTITY Ograve "&#210;">
291+
<!ENTITY ograve "&#242;">
292+
<!ENTITY oline "&#8254;">
293+
<!ENTITY Omega "&#937;">
294+
<!ENTITY omega "&#969;">
295+
<!ENTITY Omicron "&#927;">
296+
<!ENTITY omicron "&#959;">
297+
<!ENTITY oplus "&#8853;">
298+
<!ENTITY or "&#8870;">
299+
<!ENTITY ordf "&#170;">
300+
<!ENTITY ordm "&#186;">
301+
<!ENTITY Oslash "&#216;">
302+
<!ENTITY oslash "&#248;">
303+
<!ENTITY Otilde "&#213;">
304+
<!ENTITY otilde "&#245;">
305+
<!ENTITY otimes "&#8855;">
306+
<!ENTITY Ouml "&#214;">
307+
<!ENTITY ouml "&#246;">
308+
<!ENTITY para "&#182;">
309+
<!ENTITY part "&#8706;">
310+
<!ENTITY permil "&#8240;">
311+
<!ENTITY perp "&#8869;">
312+
<!ENTITY Phi "&#934;">
313+
<!ENTITY phi "&#966;">
314+
<!ENTITY Pi "&#928;">
315+
<!ENTITY pi "&#960;">
316+
<!ENTITY piv "&#982;">
317+
<!ENTITY plusmn "&#177;">
318+
<!ENTITY pound "&#163;">
319+
<!ENTITY prime "&#8242;">
320+
<!ENTITY Prime "&#8243;">
321+
<!ENTITY prod "&#8719;">
322+
<!ENTITY prop "&#8733;">
323+
<!ENTITY Psi "&#936;">
324+
<!ENTITY psi "&#968;">
325+
<!ENTITY quot "&#34;">
326+
<!ENTITY radic "&#8730;">
327+
<!ENTITY rang "&#9002;">
328+
<!ENTITY raquo "&#187;">
329+
<!ENTITY rarr "&#8594;">
330+
<!ENTITY rArr "&#8658;">
331+
<!ENTITY rceil "&#8969;">
332+
<!ENTITY rdquo "&#8221;">
333+
<!ENTITY real "&#8476;">
334+
<!ENTITY reg "&#174;">
335+
<!ENTITY rfloor "&#8971;">
336+
<!ENTITY Rho "&#929;">
337+
<!ENTITY rho "&#961;">
338+
<!ENTITY rlm "&#8207;">
339+
<!ENTITY rsaquo "&#8250;">
340+
<!ENTITY rsquo "&#8217;">
341+
<!ENTITY sbquo "&#8218;">
342+
<!ENTITY Scaron "&#352;">
343+
<!ENTITY scaron "&#353;">
344+
<!ENTITY sdot "&#8901;">
345+
<!ENTITY sect "&#167;">
346+
<!ENTITY shy "&#173;">
347+
<!ENTITY Sigma "&#931;">
348+
<!ENTITY sigma "&#963;">
349+
<!ENTITY sigmaf "&#962;">
350+
<!ENTITY sim "&#8764;">
351+
<!ENTITY spades "&#9824;">
352+
<!ENTITY sub "&#8834;">
353+
<!ENTITY sube "&#8838;">
354+
<!ENTITY sum "&#8721;">
355+
<!ENTITY sup "&#8835;">
356+
<!ENTITY sup1 "&#185;">
357+
<!ENTITY sup2 "&#178;">
358+
<!ENTITY sup3 "&#179;">
359+
<!ENTITY supe "&#8839;">
360+
<!ENTITY szlig "&#223;">
361+
<!ENTITY Tau "&#932;">
362+
<!ENTITY tau "&#964;">
363+
<!ENTITY there4 "&#8756;">
364+
<!ENTITY Theta "&#920;">
365+
<!ENTITY theta "&#952;">
366+
<!ENTITY thetasym "&#977;">
367+
<!ENTITY thinsp "&#8201;">
368+
<!ENTITY THORN "&#222;">
369+
<!ENTITY thorn "&#254;">
370+
<!ENTITY tilde "&#732;">
371+
<!ENTITY times "&#215;">
372+
<!ENTITY trade "&#8482;">
373+
<!ENTITY Uacute "&#218;">
374+
<!ENTITY uacute "&#250;">
375+
<!ENTITY uarr "&#8593;">
376+
<!ENTITY uArr "&#8657;">
377+
<!ENTITY Ucirc "&#219;">
378+
<!ENTITY ucirc "&#251;">
379+
<!ENTITY Ugrave "&#217;">
380+
<!ENTITY ugrave "&#249;">
381+
<!ENTITY uml "&#168;">
382+
<!ENTITY upsih "&#978;">
383+
<!ENTITY Upsilon "&#933;">
384+
<!ENTITY upsilon "&#965;">
385+
<!ENTITY Uuml "&#220;">
386+
<!ENTITY uuml "&#252;">
387+
<!ENTITY weierp "&#8472;">
388+
<!ENTITY Xi "&#926;">
389+
<!ENTITY xi "&#958;">
390+
<!ENTITY Yacute "&#221;">
391+
<!ENTITY yacute "&#253;">
392+
<!ENTITY yen "&#165;">
393+
<!ENTITY Yuml "&#376;">
394+
<!ENTITY yuml "&#255;">
395+
<!ENTITY Zeta "&#918;">
396+
<!ENTITY zeta "&#950;">
397+
<!ENTITY zwj "&#8205;">
398+
<!ENTITY zwnj "&#8204;">`.replace(/\n/g, ' ');
399+
400+
/**
401+
* A reasonably strict xml declaration.
402+
*/
403+
const XML_DECL = '<?xml version="1.0" standalone="no"?>';
404+
405+
/**
406+
* The beginning of the XML doctype declaration.
407+
*/
408+
const DOCTYPE_START = `<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [`;
409+
410+
/**
411+
* The end of the XML docype declaration.
412+
*/
413+
const DOCTYPE_END = ']>';
414+
415+
/**
416+
* A full header for an SVG XML document.
417+
*/
418+
const SVG_XML_HEADER = `${XML_DECL}
419+
${DOCTYPE_START}${HTML_ENTITIES}${DOCTYPE_END}`;
420+
135421
void Promise.all([...diagrams].map(renderOneMarmaid));
136422
});
137423
</script>

0 commit comments

Comments
 (0)