diff --git a/src/diagrams/class/classDb.js b/src/diagrams/class/classDb.js index c605734c28..79dca1d1fe 100644 --- a/src/diagrams/class/classDb.js +++ b/src/diagrams/class/classDb.js @@ -217,7 +217,7 @@ const setClickFunc = function(domId, functionName, tooltip) { elem.addEventListener( 'click', function() { - window[functionName](elemId); + utils.runFunc(functionName, elemId); }, false ); diff --git a/src/diagrams/flowchart/flowDb.js b/src/diagrams/flowchart/flowDb.js index c2ed7392e9..0c0098bbb6 100644 --- a/src/diagrams/flowchart/flowDb.js +++ b/src/diagrams/flowchart/flowDb.js @@ -232,7 +232,7 @@ const setClickFun = function(_id, functionName) { elem.addEventListener( 'click', function() { - window[functionName](id); + utils.runFunc(functionName, id); }, false ); diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index 702dc78b68..0c01ab2578 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -2,6 +2,7 @@ import moment from 'moment-mini'; import { sanitizeUrl } from '@braintree/sanitize-url'; import { logger } from '../../logger'; import { getConfig } from '../../config'; +import utils from '../../utils'; const config = getConfig(); let dateFormat = ''; @@ -520,7 +521,7 @@ const setClickFun = function(id, functionName, functionArgs) { let rawTask = findTaskById(id); if (typeof rawTask !== 'undefined') { pushFun(id, () => { - window[functionName](...argList); + utils.runFunc(functionName, ...argList); }); } }; diff --git a/src/utils.js b/src/utils.js index 9c293f49e0..d2066bc23a 100644 --- a/src/utils.js +++ b/src/utils.js @@ -127,6 +127,21 @@ export const formatUrl = (linkStr, config) => { } }; +export const runFunc = (functionName, ...params) => { + var arrPaths = functionName.split('.'); + + var len = arrPaths.length - 1; + var fnName = arrPaths[len]; + + var obj = window; + for (var i = 0; i < len; i++) { + obj = obj[arrPaths[i]]; + if (!obj) return; + } + + obj[fnName](...params); +}; + const distance = (p1, p2) => p1 && p2 ? Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)) : 0; @@ -262,5 +277,6 @@ export default { calcCardinalityPosition, formatUrl, getStylesFromArray, - generateId + generateId, + runFunc };