Comments (2)
One of the issues is caused by DOMPurify
sanitizing the mi
tags. Apparently, its removing everything inside the outer mi
. In this example,
<mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi>
is reduced to just
<mi></mi>
So the vdots disappear.
Related cure53/DOMPurify#847
I have not yet looked into the vertical and horizontal lines yet.
from mermaid.
cure53/DOMPurify#673
It looks like a lot more tags are being removed by DOMPurify
, although, I don't think there is much effect on the final render of it. I still couldn't figure out why the rendering of the lines are different for Chrome and Firefox, even though the html output is the same. My guess is that Chrome does not yet support it.
Solution
My suggestion would be to use config.legacyMathML
instead of isMathMLSupported()
for choosing rendering output.
mermaid/packages/mermaid/src/diagrams/common/common.ts
Lines 356 to 361 in 8e95c4d
would become,
katex
.renderToString(c, {
throwOnError: true,
displayMode: true,
output: !config.legacyMathML ? 'mathml' : 'htmlAndMathml',
})
After doing so, the rendering issues are fixed (after also including the KaTeX css as well)
Below picture is my testing on Chrome.
The drawback of this would be if the user instead wanted fallback to htmlAndMathml
, it wouldn't work. Perhaps we can expose isMathMLSupported()
to the user and let them decide?
Or maybe that's not necessary either, since if they wish to support legacy, they will include the css, and at that point its just better to use the legacy to maintain a consistent output on all the platforms.
Alternative (partial) solution
I tried to add a DOMPurify
hook, and if an mi
element had children, delete it and add it to the parent. It works, but not optimal.
DOMPurify.addHook('uponSanitizeElement', (node: Element) => {
if (node.localName === 'mi' && node.childElementCount > 0) {
const parent = node.parentElement;
if (!parent) {
return;
}
node.childNodes.forEach((child) => {
parent.insertBefore(child, node);
});
parent.removeChild(node);
}
});
The dots are very obviously different and there is some weird spacing issues only on Chrome. This, however, does not address the issue of the invisible lines.
Let me know if you'd like me to make a PR.
from mermaid.
Related Issues (20)
- Image not rendering in mermaid live HOT 1
- KaTeX does not render on GitHub HOT 3
- Tag a commit separate from the line defining the commit in gitGraph HOT 1
- Add support for nested namespaces HOT 2
- The diagram renders only once. HOT 1
- How to put URL in timeline ?
- Bad Gantt Chart Will Cause UI to Hang
- Please add data attributes `data-from-id` and `data-to-id` to `g class='edgeLabel'` svg / make it clickable in flowchart HOT 2
- Parsing error when assigning a hex color value to the last attribute of a linkStyle
- Proyecto grabación de pantalla
- Allow linkStyle background-color attribute to override edgeLabel class background-color HOT 1
- Mermaid Chart - Code Editor Constantly Reduces Upwards HOT 4
- 'Graph' keyword in mindmap diagram breaks if elk renderer set for flowchart
- click/hover to Expand or collapse subgraphs/par
- Flowchart interaction docs fail: o[n] is not a function HOT 2
- UPN - Universal Process Notation
- Flowchart edges not found: Diagram db `getEdges` returining edges which aren't drawn on DOM
- Cannot add behaviors to parent composite states
- Failure to load in Safari 14 since 10.5.0-alpha.1 and a solution
- Actor type in sequence diagram has wrong ordering
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mermaid.