Added option for embedding plantuml diagram as an object tag

pull/7178/head
piotr.suwala 2 years ago
parent 1238d614e1
commit 20547ce555

@ -13,6 +13,7 @@ module.exports = {
const closeChar = closeMarker.charCodeAt(0)
const imageFormat = opts.imageFormat || 'svg'
const server = opts.server || 'https://plantuml.requarks.io'
const renderSvgAsObject = opts.renderSvgAsObject || false
md.block.ruler.before('fence', 'uml_diagram', (state, startLine, endLine, silent) => {
let nextLine
@ -114,6 +115,17 @@ module.exports = {
var zippedCode = encode64(pako.deflate('@startuml\n' + contents + '\n@enduml', { to: 'string' }))
if (renderSvgAsObject && imageFormat === 'svg') {
token = state.push('uml_diagram', 'object', 0)
// alt is constructed from children. No point in populating it here.
token.attrs = [['data', `${server}/${imageFormat}/${zippedCode}`], ['alt', ''], ['type', 'image/svg+xml'], ['class', 'uml-diagram']]
token.block = true
token.children = []
token.info = params
token.map = [startLine, nextLine]
token.markup = markup
state.line = nextLine + (autoClosed ? 1 : 0)
} else {
token = state.push('uml_diagram', 'img', 0)
// alt is constructed from children. No point in populating it here.
token.attrs = [['src', `${server}/${imageFormat}/${zippedCode}`], ['alt', ''], ['class', 'uml-diagram']]
@ -122,8 +134,8 @@ module.exports = {
token.info = params
token.map = [startLine, nextLine]
token.markup = markup
state.line = nextLine + (autoClosed ? 1 : 0)
}
return true
}, {
@ -134,7 +146,8 @@ module.exports = {
openMarker: conf.openMarker,
closeMarker: conf.closeMarker,
imageFormat: conf.imageFormat,
server: conf.server
server: conf.server,
renderSvgAsObject: conf.renderSvgAsObject
})
}
}

@ -39,3 +39,10 @@ props:
- ascii
order: 4
public: true
renderSvgAsObject:
type: Boolean
default: false
title: Render svg as object tag instead of img tag
hint: Allows for interactive content like links in plantuml graphs - it may have security implications
order: 5
public: true

@ -13,6 +13,7 @@ module.exports = {
const closeChar = closeMarker.charCodeAt(0)
const imageFormat = opts.imageFormat || 'svg'
const server = opts.server || 'https://plantuml.requarks.io'
const renderSvgAsObject = opts.renderSvgAsObject || false
md.block.ruler.before('fence', 'uml_diagram', (state, startLine, endLine, silent) => {
let nextLine
@ -114,6 +115,17 @@ module.exports = {
const zippedCode = encode64(zlib.deflateRawSync('@startuml\n' + contents + '\n@enduml').toString('binary'))
if (renderSvgAsObject && imageFormat === 'svg') {
token = state.push('uml_diagram', 'object', 0)
// alt is constructed from children. No point in populating it here.
token.attrs = [['data', `${server}/${imageFormat}/${zippedCode}`], ['alt', ''], ['type', 'image/svg+xml'], ['class', 'uml-diagram prefetch-candidate']]
token.block = true
token.children = []
token.info = params
token.map = [startLine, nextLine]
token.markup = markup
state.line = nextLine + (autoClosed ? 1 : 0)
} else {
token = state.push('uml_diagram', 'img', 0)
// alt is constructed from children. No point in populating it here.
token.attrs = [['src', `${server}/${imageFormat}/${zippedCode}`], ['alt', ''], ['class', 'uml-diagram prefetch-candidate']]
@ -122,8 +134,8 @@ module.exports = {
token.info = params
token.map = [startLine, nextLine]
token.markup = markup
state.line = nextLine + (autoClosed ? 1 : 0)
}
return true
}, {
@ -134,7 +146,8 @@ module.exports = {
openMarker: conf.openMarker,
closeMarker: conf.closeMarker,
imageFormat: conf.imageFormat,
server: conf.server
server: conf.server,
renderSvgAsObject: conf.renderSvgAsObject
})
}
}

Loading…
Cancel
Save