Fix Mermaid diagrams failing when node labels contain line breaks (#37296)

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
pull/37297/head^2
Nicolas 2026-04-19 17:39:40 +02:00 committed by GitHub
parent 2f5b5a9e9c
commit 284298f2a9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 5 additions and 6 deletions

View File

@ -68,7 +68,7 @@ async function initRepoPullRequestMergeForm(box: HTMLElement) {
view.mount(el);
}
function executeScripts(elem: HTMLElement) {
function executeScripts(elem: Element) {
// find any existing nonce value from the current page and apply it to the new script
const scriptNonce = document.querySelector('script[nonce]')!.getAttribute('nonce')!;
for (const oldScript of elem.querySelectorAll('script')) {

View File

@ -1,4 +1,4 @@
import {isDarkTheme, parseDom} from '../utils.ts';
import {isDarkTheme} from '../utils.ts';
import {displayError} from './common.ts';
import {createElementFromAttrs, createElementFromHTML, queryElems} from '../utils/dom.ts';
import {html, htmlRaw} from '../utils/html.ts';
@ -81,7 +81,7 @@ async function loadMermaid(needElkRender: boolean) {
};
}
function initMermaidViewController(viewController: HTMLElement, dragElement: SVGSVGElement) {
function initMermaidViewController(viewController: Element, dragElement: SVGSVGElement) {
let inited = false, isDragging = false;
let currentScale = 1, initLeft = 0, lastLeft = 0, lastTop = 0, lastPageX = 0, lastPageY = 0;
@ -201,8 +201,7 @@ export async function initMarkupCodeMermaid(elMarkup: HTMLElement): Promise<void
try {
// render the mermaid diagram to svg text, and parse it to a DOM node
const {svg: svgText, bindFunctions} = await mermaid.render('mermaid', source, parentContainer);
const svgDoc = parseDom(svgText, 'image/svg+xml');
const svgNode = (svgDoc.documentElement as unknown) as SVGSVGElement;
const svgNode = createElementFromHTML<SVGSVGElement>(svgText);
const viewControllerHtml = html`
<div class="view-controller auto-hide-control flex-text-block">

View File

@ -265,7 +265,7 @@ export function isElemVisible(el: HTMLElement): boolean {
return Boolean(!el.classList.contains('tw-hidden') && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) && el.style.display !== 'none');
}
export function createElementFromHTML<T extends HTMLElement>(htmlString: string): T {
export function createElementFromHTML<T extends Element>(htmlString: string): T {
htmlString = htmlString.trim();
// There is no way to create some elements without a proper parent, jQuery's approach: https://github.com/jquery/jquery/blob/main/src/manipulation/wrapMap.js
// eslint-disable-next-line github/unescaped-html-literal