diff --git a/src/utils.js b/src/utils.js
index bc467c1fd..67d291332 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -59,17 +59,17 @@ module.exports.cloneCssStyles = function(svg, classes){
if (classes.hasOwnProperty(className) && typeof(className) != "undefined") {
if (className === 'default') {
if (classes.default.styles instanceof Array) {
- defaultStyles += '.node' + ' { ' + classes[className].styles.join("; ") + '; }\n';
+ defaultStyles += "#" + svg.id.trim() + ' .node' + ' { ' + classes[className].styles.join("; ") + '; }\n';
}
if (classes.default.nodeLabelStyles instanceof Array) {
- defaultStyles += '.node text ' + ' { ' + classes[className].nodeLabelStyles.join("; ") + '; }\n';
+ defaultStyles += "#" + svg.id.trim() + ' .node text ' + ' { ' + classes[className].nodeLabelStyles.join("; ") + '; }\n';
}
if (classes.default.edgeLabelStyles instanceof Array) {
- defaultStyles += '.edgeLabel text ' + ' { ' + classes[className].edgeLabelStyles.join("; ") + '; }\n';
+ defaultStyles += "#" + svg.id.trim() + ' .edgeLabel text ' + ' { ' + classes[className].edgeLabelStyles.join("; ") + '; }\n';
}
} else {
if (classes[className].styles instanceof Array) {
- embeddedStyles += '.' + className + ' { ' + classes[className].styles.join("; ") + '; }\n';
+ embeddedStyles += "#" + svg.id.trim() + ' .' + className + ' { ' + classes[className].styles.join("; ") + '; }\n';
}
}
}
@@ -81,7 +81,6 @@ module.exports.cloneCssStyles = function(svg, classes){
s.setAttribute('title', 'mermaid-svg-internal-css');
s.innerHTML = "/* */\n";
svg.insertBefore(s, svg.firstChild);
}
};
-
-var equals = function (val, variable){
- if(typeof variable === 'undefined'){
- return false;
- }
- else{
- return (val === variable);
- }
-};
-
-var mermaid_config_exists = function() {
- return (typeof mermaid_config !== 'undefined');
-};
-
-var mermaid_config_item_exists = function(item) {
- return mermaid_config_exists() && (typeof mermaid_config[item] !== 'undefined');
-};
-
-module.exports.config = {};
-
-module.exports.config.startOnLoad = function() {
- if (mermaid_config_item_exists(startOnLoad)) {
- return mermaid_config.startOnLoad === true;
- } else {
- return false;
- }
-};
-
-module.exports.config.labelStyle = function() {
- if (mermaid_config_item_exists(labelStyle)) {
- return mermaid_config.labelStyle === 'html';
- } else {
- return false;
- }
-};
diff --git a/src/utils.spec.js b/src/utils.spec.js
index 414fe3d07..39677f2ea 100644
--- a/src/utils.spec.js
+++ b/src/utils.spec.js
@@ -84,26 +84,23 @@ describe('when cloning CSS ',function() {
return styleArrTrim;
}
- function addStyleToDocument(title) {
+ function addStyleToDocument() {
var styleSheetCount = document.styleSheets.length;
var s = document.createElement('style');
- s.setAttribute('title', title);
s.innerHTML = '.node { stroke:#eee; }\n.node-square { stroke:#bbb; }\n';
document.body.appendChild(s);
- document.styleSheets[styleSheetCount].title = title;
}
- function addSecondStyleToDocument(title) {
+ function addSecondStyleToDocument() {
var styleSheetCount = document.styleSheets.length;
var s = document.createElement('style');
- s.setAttribute('title', title);
s.innerHTML = '.node2 { stroke:#eee; }\n.node-square { stroke:#beb; }\n';
document.body.appendChild(s);
- document.styleSheets[styleSheetCount].title = title;
}
function generateSVG() {
var svg = document.createElement('svg');
+ svg.setAttribute('id', 'mermaid-01');
var g1 = document.createElement('g');
g1.setAttribute('class', 'node');
svg.appendChild(g1);
@@ -113,30 +110,22 @@ describe('when cloning CSS ',function() {
return svg;
}
- function addSVGwithStyleToDocument() {
- var svg = document.createElement('svg');
- var s = document.createElement('style');
- s.innerHTML = '.node2 { stroke:#eee; }\n.node-square { stroke:#bfb; }\n';
- svg.appendChild(s);
- document.body.appendChild(svg);
- }
-
function addMermaidSVGwithStyleToDocument() {
var styleSheetCount = document.styleSheets.length;
var svg = document.createElement('svg');
+ svg.setAttribute('id', 'mermaid-03');
var s = document.createElement('style');
s.setAttribute('type', 'text/css');
s.setAttribute('title', 'mermaid-svg-internal-css');
- s.innerHTML = '.node2 { stroke:#eee; }\n.node-square { stroke:#bfe; }\n';
+ s.innerHTML = '#mermaid-05 .node2 { stroke:#eee; }\n.node-square { stroke:#bfe; }\n';
svg.appendChild(s);
document.body.appendChild(svg);
- // The Mock-browser seems not to support stylesheets title attribute, so we add it manually
- var sheets = document.styleSheets;
- sheets[styleSheetCount].title = "mermaid-svg-internal-css";
+ document.styleSheets[styleSheetCount].title = 'mermaid-svg-internal-css';
}
it('should handle an empty set of classes', function () {
var svg = document.createElement('svg');
+ svg.setAttribute('id', 'mermaid-01');
utils.cloneCssStyles(svg, {});
// Should not create style element if not needed
@@ -145,57 +134,43 @@ describe('when cloning CSS ',function() {
it('should handle a default class', function () {
var svg = document.createElement('svg');
+ svg.setAttribute('id', 'mermaid-01');
utils.cloneCssStyles(svg, { "default": { "styles": ["stroke:#fff","stroke-width:1.5px"] } });
- expect(stylesToArray(svg)).toEqual([ '.node { stroke:#fff; stroke-width:1.5px; }']);
+ expect(stylesToArray(svg)).toEqual([ '#mermaid-01 .node { stroke:#fff; stroke-width:1.5px; }' ]);
// Also verify the elements around the styling
- expect(svg.innerHTML).toBe('');
+ expect(svg.innerHTML).toBe('');
});
it('should handle stylesheet in document with no classes in SVG', function () {
var svg = document.createElement('svg');
+ svg.setAttribute('id', 'mermaid-01');
+
addStyleToDocument('mermaid');
utils.cloneCssStyles(svg, {});
// Should not create style element if not needed
expect(svg.innerHTML).toBe('');
});
- it('should ignore non-mermaid stylesheet in document with classes in SVG', function () {
- var svg = generateSVG();
- addStyleToDocument('non-mermaid');
- utils.cloneCssStyles(svg, {});
- expect(svg.innerHTML).toBe('');
- });
-
it('should handle stylesheet in document with classes in SVG', function () {
var svg = generateSVG();
- addStyleToDocument('mermaid');
+ addStyleToDocument();
utils.cloneCssStyles(svg, {});
expect(stylesToArray(svg)).toEqual([ '.node { stroke: #eee; }', '.node-square { stroke: #bbb; }']);
});
it('should handle multiple stylesheets in document with classes in SVG', function () {
var svg = generateSVG();
- addStyleToDocument('mermaid');
- addSecondStyleToDocument('mermaid');
+ addStyleToDocument();
+ addSecondStyleToDocument();
utils.cloneCssStyles(svg, {});
expect(stylesToArray(svg)).toEqual([ '.node { stroke: #eee; }', '.node-square { stroke: #bbb; }', '.node-square { stroke: #beb; }']);
});
- it('should handle multiple stylesheets + ignore styles in other SVG', function () {
+ it('should handle multiple stylesheets + ignore styles in other mermaid SVG', function () {
var svg = generateSVG();
- addStyleToDocument('mermaid');
- addSecondStyleToDocument('mermaid');
- addSVGwithStyleToDocument();
- utils.cloneCssStyles(svg, {});
- expect(stylesToArray(svg)).toEqual([ '.node { stroke: #eee; }', '.node-square { stroke: #bbb; }', '.node-square { stroke: #beb; }']);
- });
-
- it('should handle multiple stylesheets + ignore styles in mermaid SVG', function () {
- var svg = generateSVG();
- addStyleToDocument('mermaid');
- addSecondStyleToDocument('mermaid');
- addSVGwithStyleToDocument();
+ addStyleToDocument();
+ addSecondStyleToDocument();
addMermaidSVGwithStyleToDocument();
utils.cloneCssStyles(svg, {});
expect(stylesToArray(svg)).toEqual([ '.node { stroke: #eee; }', '.node-square { stroke: #bbb; }', '.node-square { stroke: #beb; }']);
@@ -203,22 +178,23 @@ describe('when cloning CSS ',function() {
it('should handle a default class together with stylesheet in document with classes in SVG', function () {
var svg = generateSVG();
- addStyleToDocument('mermaid');
+ addStyleToDocument();
utils.cloneCssStyles(svg, { "default": { "styles": ["stroke:#fff","stroke-width:1.5px"] } });
- expect(stylesToArray(svg)).toEqual([ '.node { stroke:#fff; stroke-width:1.5px; }', '.node { stroke: #eee; }', '.node-square { stroke: #bbb; }']);
+ expect(stylesToArray(svg)).toEqual([ '#mermaid-01 .node { stroke:#fff; stroke-width:1.5px; }', '.node { stroke: #eee; }', '.node-square { stroke: #bbb; }']);
});
- xit('should handle a default class together with stylesheet in document and classDefs', function () {
+ it('should handle a default class together with stylesheet in document and classDefs', function () {
var svg = generateSVG();
- addStyleToDocument('mermaid');
+ addStyleToDocument();
utils.cloneCssStyles(svg, { "default": { "styles": ["stroke:#fff","stroke-width:1.5px"] },
"node-square": { "styles": ["fill:#eee", "stroke:#aaa"] },
"node-circle": { "styles": ["fill:#444", "stroke:#111"] } });
- expect(stylesToArray(svg)).toEqual([ '.node { stroke:#fff; stroke-width:1.5px; }',
+ expect(stylesToArray(svg)).toEqual([ '#mermaid-01 .node { stroke:#fff; stroke-width:1.5px; }',
'.node { stroke: #eee; }',
'.node-square { stroke: #bbb; }',
- '.node-square { fill:#eee; stroke:#aaa; }',
- '.node-circle { fill:#444; stroke:#111; }' ]);
+ '#mermaid-01 .node-square { fill:#eee; stroke:#aaa; }',
+ '#mermaid-01 .node-circle { fill:#444; stroke:#111; }'
+ ]);
});
});