UNPKG

mermaid

Version:

Markdownish syntax for generating flowcharts

87 lines (79 loc) 2.93 kB
/** * Created by knut on 14-11-23. */ /** * Detects the type of the graph text. * @param {string} text The text defining the graph * @param {string} text The second text defining the graph * @returns {string} A graph definition key */ module.exports.detectType = function(text,a){ if(text.match(/^\s*sequenceDiagram/)){ console.log('Detected sequenceDiagram syntax'); return "sequenceDiagram"; } if(text.match(/^\s*sequence/)){ //console.log('Detected sequence syntax'); return "sequence"; } if(text.match(/^\s*digraph/)) { console.log('Detected flow syntax'); return "dotGraph"; } return "graph"; }; /** * Copies all relevant CSS content into the graph SVG. * This allows the SVG to be copied as is while keeping class based styling * @param {element} svg The root element of the SVG * @param {object} Hash table of class definitions from the graph definition */ module.exports.cloneCssStyles = function(svg, classes){ var usedStyles = ""; var sheets = document.styleSheets; for (var i = 0; i < sheets.length; i++) { // Avoid multiple inclusion on pages with multiple graphs if (sheets[i].title !== 'mermaid-svg-internal-css') { var rules = sheets[i].cssRules; if(rules !== null) { for (var j = 0; j < rules.length; j++) { var rule = rules[j]; if (typeof(rule.style) !== 'undefined') { var elems = svg.querySelectorAll(rule.selectorText); if (elems.length > 0) { usedStyles += rule.selectorText + " { " + rule.style.cssText + " }\n"; } } } } } } var defaultStyles = ""; var embeddedStyles = ""; for (var className in classes) { if (classes.hasOwnProperty(className) && typeof(className) != "undefined") { if (className === 'default') { defaultStyles = '.node' + ' { ' + classes[className].styles.join("; ") + '; }\n'; } else { embeddedStyles += '.' + className + ' { ' + classes[className].styles.join("; ") + '; }\n'; } } } if (usedStyles !== "" || defaultStyles !== "" || embeddedStyles !== "") { var s = document.createElement('style'); s.setAttribute('type', 'text/css'); s.setAttribute('title', 'mermaid-svg-internal-css'); s.innerHTML = "/* <![CDATA[ */\n"; if (defaultStyles !== "") { s.innerHTML += defaultStyles; } if (usedStyles !== "") { s.innerHTML += usedStyles; } if (embeddedStyles !== "") { s.innerHTML += embeddedStyles; } s.innerHTML += "/* ]]> */\n"; svg.insertBefore(s, svg.firstChild); } };