Skip to content

Commit

Permalink
#901 Fixed the issue with multiple calls to bind the click functions.…
Browse files Browse the repository at this point in the history
… Also sanitized the tooltips so that no tags are allowed in them for (#847).
  • Loading branch information
knsv committed Aug 11, 2019
1 parent a6f21c2 commit 7b335fb
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 10 deletions.
23 changes: 23 additions & 0 deletions e2e/platform/click.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Mermaid Quick Test Page</title>
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=">
</head>
<body>
<div id="FirstLine" class="mermaid">
graph TB
FullFirstSquad-->StripedFirstSquad
click FullFirstSquad showFullFirstSquad "show <strong>details</strong>"
</div>
<script src="./mermaid.js"></script>
<script>
function showFullFirstSquad(elemName) {
console.log('show ' + elemName);
}
mermaid.initialize({ startOnLoad: true, securityLevel: 'loose', logLevel: 1 });
</script>
</body>
</html>
8 changes: 4 additions & 4 deletions src/diagrams/flowchart/flowDb.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ let funs = []

const sanitize = text => {
let txt = text
if (config.securityLevel === 'strict') {
if (config.securityLevel !== 'loose') {
txt = txt.replace(/<br>/g, '#br#')
txt = txt.replace(/<br\S*?\/>/g, '#br#')
txt = txt.replace(/</g, '&lt;').replace(/>/g, '&gt;')
Expand Down Expand Up @@ -182,13 +182,13 @@ export const setClass = function (ids, className) {
const setTooltip = function (ids, tooltip) {
ids.split(',').forEach(function (id) {
if (typeof tooltip !== 'undefined') {
tooltips[id] = tooltip
tooltips[id] = sanitize(tooltip)
}
})
}

const setClickFun = function (id, functionName) {
if (config.securityLevel === 'strict') {
if (config.securityLevel !== 'loose') {
return
}
if (typeof functionName === 'undefined') {
Expand All @@ -215,7 +215,7 @@ const setClickFun = function (id, functionName) {
export const setLink = function (ids, linkStr, tooltip) {
ids.split(',').forEach(function (id) {
if (typeof vertices[id] !== 'undefined') {
if (config.securityLevel === 'strict') {
if (config.securityLevel !== 'loose') {
vertices[id].link = sanitizeUrl(linkStr) // .replace(/javascript:.*/g, '')
} else {
vertices[id].link = linkStr
Expand Down
3 changes: 2 additions & 1 deletion src/diagrams/flowchart/flowRenderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ export const addEdges = function (edges, g) {
* @returns {object} classDef styles
*/
export const getClasses = function (text) {
logger.info('Extracting classes')
flowDb.clear()
const parser = flow.parser
parser.yy = flowDb
Expand All @@ -243,7 +244,7 @@ export const getClasses = function (text) {
* @param id
*/
export const draw = function (text, id) {
logger.debug('Drawing flowchart')
logger.info('Drawing flowchart')
flowDb.clear()
const parser = flow.parser
parser.yy = flowDb
Expand Down
4 changes: 2 additions & 2 deletions src/diagrams/gantt/ganttDb.js
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ const compileTasks = function () {
*/
export const setLink = function (ids, _linkStr) {
let linkStr = _linkStr
if (config.securityLevel === 'strict') {
if (config.securityLevel !== 'loose') {
linkStr = sanitizeUrl(_linkStr)
}
ids.split(',').forEach(function (id) {
Expand All @@ -457,7 +457,7 @@ export const setClass = function (ids, className) {
}

const setClickFun = function (id, functionName, functionArgs) {
if (config.securityLevel === 'strict') {
if (config.securityLevel !== 'loose') {
return
}
if (typeof functionName === 'undefined') {
Expand Down
13 changes: 10 additions & 3 deletions src/mermaidAPI.js
Original file line number Diff line number Diff line change
Expand Up @@ -497,10 +497,17 @@ const render = function (id, txt, cb, container) {
svgCode = decodeEntities(svgCode)

if (typeof cb !== 'undefined') {
cb(svgCode, flowDb.bindFunctions)
cb(svgCode, ganttDb.bindFunctions)
switch(graphType) {
case 'flowchart':
cb(svgCode, flowDb.bindFunctions)
break;
case 'gantt':
cb(svgCode, ganttDb.bindFunctions)
break;
default:
}
} else {
logger.warn('CB = undefined!')
logger.debug('CB = undefined!')
}

const node = d3.select('#d' + id).node()
Expand Down

0 comments on commit 7b335fb

Please sign in to comment.