|
|
|
@ -313,6 +313,15 @@ define([ |
|
|
|
// finally, find all 'clickable' items and remove the class
|
|
|
|
$el.find('.clickable').removeClass('clickable'); |
|
|
|
}; |
|
|
|
var renderMermaid = function ($el) { |
|
|
|
Mermaid.init(undefined, $el); |
|
|
|
// clickable elements in mermaid don't work well with our sandboxing setup
|
|
|
|
// the function below strips clickable elements but still leaves behind some artifacts
|
|
|
|
// tippy tooltips might still be useful, so they're not removed. It would be
|
|
|
|
// preferable to just support links, but this covers up a rough edge in the meantime
|
|
|
|
removeMermaidClickables($el); |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
DiffMd.apply = function (newHtml, $content, common) { |
|
|
|
var contextMenu = common.importMediaTagMenu(); |
|
|
|
@ -387,8 +396,15 @@ define([ |
|
|
|
var mts = []; |
|
|
|
$content.find('media-tag, pre.mermaid').each(function (i, el) { |
|
|
|
if (el.nodeName.toLowerCase() === "pre") { |
|
|
|
var clone = el.cloneNode(); |
|
|
|
return void mts.push({ |
|
|
|
svg: el.cloneNode(true) |
|
|
|
svg: clone, |
|
|
|
render: function () { |
|
|
|
var $el = $(clone); |
|
|
|
$el.text(clone.getAttribute('mermaid-source')); |
|
|
|
$el.attr('data-processed', ''); |
|
|
|
renderMermaid($el); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
var $el = $(el); |
|
|
|
@ -401,7 +417,7 @@ define([ |
|
|
|
// Find initial position
|
|
|
|
var idx = -1; |
|
|
|
mts.some(function (obj, i) { |
|
|
|
if (isSvg && $mt.find('svg').attr('id') === $(obj.svg).find('svg').attr('id')) { |
|
|
|
if (isSvg && $mt.attr('mermaid-source') === $(obj.svg).attr('mermaid-source')) { |
|
|
|
idx = i; |
|
|
|
return true; |
|
|
|
} |
|
|
|
@ -412,8 +428,15 @@ define([ |
|
|
|
}); |
|
|
|
if (idx === -1) { |
|
|
|
if (isSvg) { |
|
|
|
var clone = $mt[0].cloneNode(); |
|
|
|
mts.unshift({ |
|
|
|
svg: $mt[0].cloneNode(true) |
|
|
|
svg: clone, |
|
|
|
render: function () { |
|
|
|
var $el = $(clone); |
|
|
|
$el.text(clone.getAttribute('mermaid-source')); |
|
|
|
$el.attr('data-processed', ''); |
|
|
|
renderMermaid($el); |
|
|
|
} |
|
|
|
}); |
|
|
|
} else { |
|
|
|
mts.unshift({ |
|
|
|
@ -511,12 +534,7 @@ define([ |
|
|
|
// check if you had cached a pre-rendered instance of the supplied source
|
|
|
|
if (typeof(cached) !== 'object') { |
|
|
|
try { |
|
|
|
Mermaid.init(undefined, $el); |
|
|
|
// clickable elements in mermaid don't work well with our sandboxing setup
|
|
|
|
// the function below strips clickable elements but still leaves behind some artifacts
|
|
|
|
// tippy tooltips might still be useful, so they're not removed. It would be
|
|
|
|
// preferable to just support links, but this covers up a rough edge in the meantime
|
|
|
|
removeMermaidClickables($el); |
|
|
|
renderMermaid($el); |
|
|
|
} catch (e) { console.error(e); } |
|
|
|
return; |
|
|
|
} |
|
|
|
|