mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-11-14 17:54:13 +01:00
Added logger for dealing with issue #179
Added markdown files for the documentation. parseError exposed from the mermaidAPI
This commit is contained in:
17
src/d3.js
vendored
17
src/d3.js
vendored
@@ -1,17 +1,17 @@
|
||||
/* global window */
|
||||
//console.log('Setting up d3');
|
||||
//log.debug('Setting up d3');
|
||||
var d3;
|
||||
|
||||
if (require) {
|
||||
try {
|
||||
d3 = require("d3");
|
||||
} catch (e) {
|
||||
console.log('Exception ... but ok');
|
||||
//console.log(e);
|
||||
//log.debug('Exception ... but ok');
|
||||
//log.debug(e);
|
||||
}
|
||||
}
|
||||
|
||||
//console.log(d3);
|
||||
//log.debug(d3);
|
||||
|
||||
if (!d3) {
|
||||
//if(typeof window !== 'undefined')
|
||||
@@ -22,10 +22,10 @@ if (!d3) {
|
||||
// window = {};
|
||||
// window.d3 = d3;
|
||||
//}
|
||||
//console.log('window');
|
||||
//console.log(window);
|
||||
//log.debug('window');
|
||||
//log.debug(window);
|
||||
module.exports = d3;
|
||||
|
||||
/* jshint ignore:start */
|
||||
/*
|
||||
|
||||
D3 Text Wrap
|
||||
@@ -479,4 +479,5 @@ Detailed instructions at http://www.github.com/vijithassar/d3textwrap
|
||||
|
||||
}
|
||||
|
||||
})();
|
||||
})();
|
||||
/* jshint ignore:end */
|
||||
@@ -7,7 +7,7 @@ describe('when parsing an info graph it',function() {
|
||||
ex = require('./parser/example').parser;
|
||||
ex.yy = require('./exampleDb');
|
||||
parseError = function(err, hash) {
|
||||
console.log('Syntax error:' + err);
|
||||
log.debug('Syntax error:' + err);
|
||||
};
|
||||
//ex.yy.parseError = parseError;
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Created by knut on 15-01-14.
|
||||
*/
|
||||
|
||||
var log = require('../../logger').create();
|
||||
var message = '';
|
||||
var info = false;
|
||||
|
||||
@@ -22,5 +22,5 @@ exports.getInfo = function(){
|
||||
};
|
||||
|
||||
exports.parseError = function(err,hash){
|
||||
mermaid.parseError(err,hash);
|
||||
mermaidAPI.parseError(err,hash);
|
||||
};
|
||||
@@ -4,7 +4,7 @@
|
||||
var db = require('./exampleDb');
|
||||
var exampleParser = require('./parser/example.js');
|
||||
var d3 = require('../../d3');
|
||||
|
||||
var log = require('../../logger').create();
|
||||
/**
|
||||
* Draws a an info picture in the tag with id: id based on the graph definition in text.
|
||||
* @param text
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/* global window */
|
||||
|
||||
var log = require('../../logger').create();
|
||||
var dagreD3;
|
||||
//console.log('setting up dagre-d3');
|
||||
//log.debug('setting up dagre-d3');
|
||||
if (require) {
|
||||
try {
|
||||
dagreD3 = require("dagre-d3");
|
||||
//console.log('Got it (dagre-d3)');
|
||||
} catch (e) {console.log('Could not load dagre-d3');}
|
||||
//log.debug('Got it (dagre-d3)');
|
||||
} catch (e) {log.debug('Could not load dagre-d3');}
|
||||
}
|
||||
|
||||
if (!dagreD3) {
|
||||
|
||||
@@ -6,6 +6,8 @@ var flow = require('./parser/flow');
|
||||
var dot = require('./parser/dot');
|
||||
var d3 = require('../../d3');
|
||||
var dagreD3 = require('./dagre-d3');
|
||||
var log = require('../../logger').create();
|
||||
|
||||
var conf = {
|
||||
};
|
||||
module.exports.setConf = function(cnf){
|
||||
@@ -49,7 +51,7 @@ exports.addVertices = function (vert, g) {
|
||||
*/
|
||||
var classStr = '';
|
||||
|
||||
//console.log(vertice.classes);
|
||||
//log.debug(vertice.classes);
|
||||
|
||||
if(vertice.classes.length >0){
|
||||
classStr = vertice.classes.join(" ");
|
||||
@@ -230,7 +232,7 @@ exports.getClasses = function (text, isDot) {
|
||||
* @param id
|
||||
*/
|
||||
exports.draw = function (text, id,isDot) {
|
||||
|
||||
log.debug('Drawing flowchart');
|
||||
var parser;
|
||||
graph.clear();
|
||||
if(isDot){
|
||||
@@ -283,7 +285,7 @@ exports.draw = function (text, id,isDot) {
|
||||
// Fetch the verices/nodes and edges/links from the parsed graph definition
|
||||
var vert = graph.getVertices();
|
||||
|
||||
//console.log(vert);
|
||||
//log.debug(vert);
|
||||
var edges = graph.getEdges();
|
||||
|
||||
i = 0;
|
||||
@@ -294,7 +296,7 @@ exports.draw = function (text, id,isDot) {
|
||||
d3.selectAll('cluster').append('text');
|
||||
|
||||
for(j=0;j<subG.nodes.length;j++){
|
||||
//console.log('Setting node',subG.nodes[j],' to subgraph '+id);
|
||||
//log.debug('Setting node',subG.nodes[j],' to subgraph '+id);
|
||||
g.setParent(subG.nodes[j],subG.id);
|
||||
}
|
||||
}
|
||||
@@ -438,7 +440,7 @@ exports.draw = function (text, id,isDot) {
|
||||
|
||||
if (subG.title !== 'undefined') {
|
||||
var clusterRects = document.querySelectorAll('#' + id + ' #' + subG.id + ' rect');
|
||||
//console.log('looking up: #' + id + ' #' + subG.id)
|
||||
//log.debug('looking up: #' + id + ' #' + subG.id)
|
||||
var clusterEl = document.querySelectorAll('#' + id + ' #' + subG.id);
|
||||
|
||||
var xPos = clusterRects[0].x.baseVal.value;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Created by knut on 14-11-03.
|
||||
*/
|
||||
|
||||
var log = require('../../logger').create();
|
||||
var vertices = {};
|
||||
var edges = [];
|
||||
var classes = [];
|
||||
@@ -63,7 +63,7 @@ exports.addVertex = function (id, text, type, style) {
|
||||
* @param linktext
|
||||
*/
|
||||
exports.addLink = function (start, end, type, linktext) {
|
||||
//console.log('Got edge', start, end);
|
||||
//log.debug('Got edge', start, end);
|
||||
var edge = {start: start, end: end, type: undefined, text: ''};
|
||||
linktext = type.text;
|
||||
|
||||
@@ -158,7 +158,7 @@ exports.setClickEvent = function (id,functionName) {
|
||||
}
|
||||
});
|
||||
}else{
|
||||
//console.log('Checking now for ::'+id);
|
||||
//log.debug('Checking now for ::'+id);
|
||||
if(typeof vertices[id] !== 'undefined'){
|
||||
funs.push(function(){
|
||||
var elem = document.getElementById(id);
|
||||
@@ -166,7 +166,7 @@ exports.setClickEvent = function (id,functionName) {
|
||||
elem.onclick = function(){eval(functionName+'(\'' + id + '\')');}; // jshint ignore:line
|
||||
}
|
||||
else{
|
||||
//console.log('id was null: '+id);
|
||||
//log.debug('id was null: '+id);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -251,8 +251,8 @@ exports.addSubGraph = function (list, title) {
|
||||
|
||||
|
||||
var subGraph = {id:'subGraph'+subCount, nodes:nodeList,title:title};
|
||||
//console.log('subGraph:' + subGraph.title + subGraph.id);
|
||||
//console.log(subGraph.nodes);
|
||||
//log.debug('subGraph:' + subGraph.title + subGraph.id);
|
||||
//log.debug(subGraph.nodes);
|
||||
subGraphs.push(subGraph);
|
||||
subCount = subCount + 1;
|
||||
return subGraph.id;
|
||||
@@ -262,11 +262,11 @@ var getPosForId = function(id){
|
||||
var i;
|
||||
for(i=0;i<subGraphs.length;i++){
|
||||
if(subGraphs[i].id===id){
|
||||
//console.log('Found pos for ',id,' ',i);
|
||||
//log.debug('Found pos for ',id,' ',i);
|
||||
return i;
|
||||
}
|
||||
}
|
||||
//console.log('No pos found for ',id,' ',i);
|
||||
//log.debug('No pos found for ',id,' ',i);
|
||||
return -1;
|
||||
};
|
||||
var secCount = -1;
|
||||
@@ -332,5 +332,5 @@ exports.getSubGraphs = function (list) {
|
||||
};
|
||||
|
||||
exports.parseError = function(err,hash){
|
||||
mermaid.parseError(err,hash);
|
||||
mermaidAPI.parseError(err,hash);
|
||||
};
|
||||
@@ -10,7 +10,7 @@ describe('when parsing ',function(){
|
||||
flow.parser.yy = require('../graphDb');
|
||||
flow.parser.yy.clear();
|
||||
/*flow.parser.parse.parseError= function parseError(str, hash) {
|
||||
console.logconsole.log(str);
|
||||
log.debugconsole.log(str);
|
||||
}*/
|
||||
});
|
||||
|
||||
@@ -1054,7 +1054,7 @@ describe('when parsing ',function(){
|
||||
expect(edges.length).toBe(0);
|
||||
expect(vert['i-d'].styles.length).toBe(0);
|
||||
});
|
||||
//console.log(flow.parser.parse('graph TD;style Q background:#fff;'));
|
||||
//log.debug(flow.parser.parse('graph TD;style Q background:#fff;'));
|
||||
it('should handle styles for vertices',function(){
|
||||
var res = flow.parser.parse('graph TD;style Q background:#fff;');
|
||||
|
||||
@@ -1067,7 +1067,7 @@ describe('when parsing ',function(){
|
||||
expect(vert['Q'].styles[0]).toBe('background:#fff');
|
||||
});
|
||||
|
||||
//console.log(flow.parser.parse('graph TD;style Q background:#fff;'));
|
||||
//log.debug(flow.parser.parse('graph TD;style Q background:#fff;'));
|
||||
it('should handle styles for edges',function(){
|
||||
var res = flow.parser.parse('graph TD;a-->b;\nstyle #0 stroke: #f66;');
|
||||
|
||||
|
||||
15
src/diagrams/gantt/d3.js
vendored
15
src/diagrams/gantt/d3.js
vendored
@@ -1,15 +0,0 @@
|
||||
/* global window */
|
||||
|
||||
/*var d3;
|
||||
|
||||
if (require) {
|
||||
try {
|
||||
d3 = require("d3");
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
if (!d3) {
|
||||
d3 = window.d3;
|
||||
}
|
||||
|
||||
module.exports = d3;*/
|
||||
@@ -7,7 +7,7 @@ describe('when parsing a gantt diagram it',function() {
|
||||
gantt = require('./parser/gantt').parser;
|
||||
gantt.yy = require('./ganttDb');
|
||||
parseError = function(err, hash) {
|
||||
console.log('Syntax error:' + err);
|
||||
log.debug('Syntax error:' + err);
|
||||
};
|
||||
//ex.yy.parseError = parseError;
|
||||
});
|
||||
@@ -32,6 +32,17 @@ describe('when parsing a gantt diagram it',function() {
|
||||
|
||||
gantt.parse(str);
|
||||
});
|
||||
/**
|
||||
* Beslutsflöde inligt nedan. Obs bla bla bla
|
||||
* ```
|
||||
* graph TD
|
||||
* A[Hard pledge] -- text on link -->B(Round edge)
|
||||
* B --> C{to do or not to do}
|
||||
* C -->|Too| D[Result one]
|
||||
* C -->|Doo| E[Result two]
|
||||
```
|
||||
* params bapa - a unique bapap
|
||||
*/
|
||||
it('should handle a task definition', function () {
|
||||
var str = 'gantt\n' +
|
||||
'dateFormat yyyy-mm-dd\n' +
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
* Created by knut on 15-01-14.
|
||||
*/
|
||||
var moment = require('moment');
|
||||
var log = require('../../logger').create();
|
||||
|
||||
var dateFormat = '';
|
||||
var title = '';
|
||||
@@ -59,8 +60,8 @@ exports.getTasks=function(){
|
||||
|
||||
|
||||
var getStartDate = function(prevTime, dateFormat, str){
|
||||
//console.log('Deciding start date:'+str);
|
||||
//console.log('with dateformat:'+dateFormat);
|
||||
//log.debug('Deciding start date:'+str);
|
||||
//log.debug('with dateformat:'+dateFormat);
|
||||
|
||||
str = str.trim();
|
||||
|
||||
@@ -81,9 +82,9 @@ var getStartDate = function(prevTime, dateFormat, str){
|
||||
if(moment(str,dateFormat.trim(),true).isValid()){
|
||||
return moment(str,dateFormat.trim(),true).toDate();
|
||||
}else{
|
||||
console.log('Invalid date:'+str);
|
||||
console.log('With date format:'+dateFormat.trim());
|
||||
//console.log('----');
|
||||
log.debug('Invalid date:'+str);
|
||||
log.debug('With date format:'+dateFormat.trim());
|
||||
//log.debug('----');
|
||||
}
|
||||
|
||||
// Default date - now
|
||||
@@ -230,5 +231,5 @@ exports.addTask = function(descr,data){
|
||||
};
|
||||
|
||||
exports.parseError = function(err,hash){
|
||||
mermaid.parseError(err,hash);
|
||||
mermaidAPI.parseError(err,hash);
|
||||
};
|
||||
@@ -1,6 +1,7 @@
|
||||
/**
|
||||
* Created by knut on 14-11-18.
|
||||
*/
|
||||
var log = require('../../logger').create();
|
||||
describe('when using the ganttDb',function() {
|
||||
var parseError, gantt;
|
||||
var moment = require('moment');
|
||||
@@ -11,7 +12,7 @@ describe('when using the ganttDb',function() {
|
||||
gDb = require('./ganttDb');
|
||||
gDb.clear();
|
||||
parseError = function(err, hash) {
|
||||
console.log('Syntax error:' + err);
|
||||
log.debug('Syntax error:' + err);
|
||||
};
|
||||
//ex.yy.parseError = parseError;
|
||||
});
|
||||
|
||||
@@ -2,7 +2,7 @@ var gantt = require('./parser/gantt').parser;
|
||||
gantt.yy = require('./ganttDb');
|
||||
var d3 = require('../../d3');
|
||||
var moment = require('moment');
|
||||
|
||||
var log = require('../../logger').create();
|
||||
|
||||
var daysInChart;
|
||||
var conf = {
|
||||
@@ -365,7 +365,7 @@ module.exports.draw = function (text, id) {
|
||||
if (i > 0) {
|
||||
for (var j = 0; j < i; j++) {
|
||||
prevGap += numOccurances[i - 1][1];
|
||||
// console.log(prevGap);
|
||||
// log.debug(prevGap);
|
||||
return d[1] * theGap / 2 + prevGap * theGap + theTopPad;
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -5,15 +5,15 @@ var actors = {};
|
||||
var actorKeys = [];
|
||||
var messages = [];
|
||||
var notes = [];
|
||||
var log = require('../../logger').create();
|
||||
|
||||
|
||||
exports.addActor = function(id,name,description){
|
||||
//console.log('Adding actor: '+id);
|
||||
actors[id] = {name:name, description:description};
|
||||
actorKeys.push(id);
|
||||
};
|
||||
|
||||
exports.addMessage = function(idFrom, idTo, message, answer){
|
||||
//console.log('Adding message from='+idFrom+' to='+idTo+' message='+message+' answer='+answer);
|
||||
messages.push({from:idFrom, to:idTo, message:message, answer:answer});
|
||||
};
|
||||
|
||||
@@ -21,7 +21,7 @@ exports.addMessage = function(idFrom, idTo, message, answer){
|
||||
*
|
||||
*/
|
||||
exports.addSignal = function(idFrom, idTo, message, messageType){
|
||||
//console.log('Adding message from='+idFrom+' to='+idTo+' message='+message+' answer='+answer);
|
||||
log.debug('Adding message from='+idFrom+' to='+idTo+' message='+message+' type='+messageType);
|
||||
messages.push({from:idFrom, to:idTo, message:message, type:messageType});
|
||||
};
|
||||
|
||||
@@ -81,7 +81,7 @@ exports.addNote = function (actor, placement, message){
|
||||
|
||||
|
||||
exports.parseError = function(err,hash){
|
||||
mermaid.parseError(err,hash);
|
||||
mermaidAPI.parseError(err,hash);
|
||||
};
|
||||
|
||||
exports.apply = function(param){
|
||||
@@ -90,7 +90,7 @@ exports.apply = function(param){
|
||||
exports.apply(item);
|
||||
});
|
||||
} else {
|
||||
// console.log(param);
|
||||
// log.debug(param);
|
||||
switch(param.type){
|
||||
case 'addActor':
|
||||
exports.addActor(param.actor, param.actor, param.actor);
|
||||
@@ -102,7 +102,7 @@ exports.apply = function(param){
|
||||
exports.addSignal(param.from, param.to, param.msg, param.signalType);
|
||||
break;
|
||||
case 'loopStart':
|
||||
//console.log('Loop text: ',param.loopText);
|
||||
//log.debug('Loop text: ',param.loopText);
|
||||
exports.addSignal(undefined, undefined, param.loopText, param.signalType);
|
||||
//yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START);
|
||||
break;
|
||||
@@ -110,7 +110,7 @@ exports.apply = function(param){
|
||||
exports.addSignal(undefined, undefined, undefined, param.signalType);
|
||||
break;
|
||||
case 'optStart':
|
||||
//console.log('Loop text: ',param.loopText);
|
||||
//log.debug('Loop text: ',param.loopText);
|
||||
exports.addSignal(undefined, undefined, param.optText, param.signalType);
|
||||
//yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START);
|
||||
break;
|
||||
@@ -118,7 +118,7 @@ exports.apply = function(param){
|
||||
exports.addSignal(undefined, undefined, undefined, param.signalType);
|
||||
break;
|
||||
case 'altStart':
|
||||
//console.log('Loop text: ',param.loopText);
|
||||
//log.debug('Loop text: ',param.loopText);
|
||||
exports.addSignal(undefined, undefined, param.altText, param.signalType);
|
||||
//yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START);
|
||||
break;
|
||||
@@ -129,7 +129,5 @@ exports.apply = function(param){
|
||||
exports.addSignal(undefined, undefined, undefined, param.signalType);
|
||||
break;
|
||||
}
|
||||
|
||||
// console.log('xxx',param);
|
||||
}
|
||||
};
|
||||
@@ -2,7 +2,7 @@
|
||||
* Created by knut on 14-11-18.
|
||||
*/
|
||||
var proxyquire = require('proxyquire');
|
||||
|
||||
var log = require('../../logger').create();
|
||||
|
||||
var sq = require('./parser/sequenceDiagram').parser;
|
||||
var newD3;
|
||||
@@ -22,8 +22,8 @@ describe('when parsing a sequenceDiagram',function() {
|
||||
sq.yy = require('./sequenceDb');
|
||||
sq.yy.clear();
|
||||
parseError = function(err, hash) {
|
||||
console.log('Syntax error:' + err);
|
||||
console.log(hash);
|
||||
log.debug('Syntax error:' + err);
|
||||
log.debug(hash);
|
||||
};
|
||||
sq.yy.parseError = parseError;
|
||||
});
|
||||
@@ -69,7 +69,7 @@ describe('when parsing a sequenceDiagram',function() {
|
||||
|
||||
sq.parse(str);
|
||||
var actors = sq.yy.getActors();
|
||||
//console.log(actors);
|
||||
//log.debug(actors);
|
||||
expect(actors.Alice.description).toBe('Alice');
|
||||
expect(actors.Bob.description).toBe('Bob');
|
||||
|
||||
@@ -86,7 +86,7 @@ describe('when parsing a sequenceDiagram',function() {
|
||||
|
||||
sq.parse(str);
|
||||
var actors = sq.yy.getActors();
|
||||
//console.log(actors);
|
||||
//log.debug(actors);
|
||||
expect(actors.Alice.description).toBe('Alice');
|
||||
expect(actors.Bob.description).toBe('Bob');
|
||||
|
||||
@@ -107,7 +107,7 @@ describe('when parsing a sequenceDiagram',function() {
|
||||
expect(actors.Bob.description).toBe('Bob');
|
||||
|
||||
var messages = sq.yy.getMessages();
|
||||
//console.log(messages);
|
||||
//log.debug(messages);
|
||||
|
||||
|
||||
expect(messages.length).toBe(1);
|
||||
@@ -124,7 +124,7 @@ describe('when parsing a sequenceDiagram',function() {
|
||||
expect(actors.Bob.description).toBe('Bob');
|
||||
|
||||
var messages = sq.yy.getMessages();
|
||||
//console.log(messages);
|
||||
//log.debug(messages);
|
||||
|
||||
|
||||
expect(messages.length).toBe(1);
|
||||
@@ -246,12 +246,12 @@ describe('when parsing a sequenceDiagram',function() {
|
||||
|
||||
sq.parse(str);
|
||||
var actors = sq.yy.getActors();
|
||||
//console.log(actors);
|
||||
//log.debug(actors);
|
||||
expect(actors.Alice.description).toBe('Alice');
|
||||
actors.Bob.description = 'Bob';
|
||||
|
||||
var messages = sq.yy.getMessages();
|
||||
//console.log(messages);
|
||||
//log.debug(messages);
|
||||
|
||||
expect(messages.length).toBe(5);
|
||||
expect(messages[0].from).toBe('Alice');
|
||||
@@ -271,12 +271,12 @@ describe('when parsing a sequenceDiagram',function() {
|
||||
|
||||
sq.parse(str);
|
||||
var actors = sq.yy.getActors();
|
||||
//console.log(actors);
|
||||
//log.debug(actors);
|
||||
expect(actors.Alice.description).toBe('Alice');
|
||||
actors.Bob.description = 'Bob';
|
||||
|
||||
var messages = sq.yy.getMessages();
|
||||
//console.log(messages);
|
||||
//log.debug(messages);
|
||||
|
||||
expect(messages.length).toBe(5);
|
||||
expect(messages[0].from).toBe('Alice');
|
||||
@@ -289,12 +289,12 @@ describe('when parsing a sequenceDiagram',function() {
|
||||
|
||||
sq.parse(str);
|
||||
var actors = sq.yy.getActors();
|
||||
//console.log(actors);
|
||||
//log.debug(actors);
|
||||
expect(actors.Alice.description).toBe('Alice');
|
||||
actors.Bob.description = 'Bob';
|
||||
|
||||
var messages = sq.yy.getMessages();
|
||||
//console.log(messages);
|
||||
//log.debug(messages);
|
||||
|
||||
expect(messages.length).toBe(4);
|
||||
expect(messages[0].from).toBe('Alice');
|
||||
@@ -322,7 +322,7 @@ describe('when parsing a sequenceDiagram',function() {
|
||||
actors.Bob.description = 'Bob';
|
||||
|
||||
var messages = sq.yy.getMessages();
|
||||
//console.log(messages);
|
||||
//log.debug(messages);
|
||||
|
||||
expect(messages.length).toBe(7);
|
||||
expect(messages[0].from).toBe('Alice');
|
||||
@@ -337,8 +337,8 @@ describe('when checking the bounds in a sequenceDiagram',function() {
|
||||
sq.yy = require('./sequenceDb');
|
||||
sq.yy.clear();
|
||||
parseError = function(err, hash) {
|
||||
console.log('Syntax error:' + err);
|
||||
console.log(hash);
|
||||
log.debug('Syntax error:' + err);
|
||||
log.debug(hash);
|
||||
};
|
||||
sq.yy.parseError = parseError;
|
||||
|
||||
@@ -487,8 +487,8 @@ describe('when rendering a sequenceDiagram',function() {
|
||||
sq.yy = require('./sequenceDb');
|
||||
sq.yy.clear();
|
||||
parseError = function(err, hash) {
|
||||
console.log('Syntax error:' + err);
|
||||
console.log(hash);
|
||||
log.debug('Syntax error:' + err);
|
||||
log.debug(hash);
|
||||
};
|
||||
sq.yy.parseError = parseError;
|
||||
|
||||
@@ -682,8 +682,8 @@ describe('when rendering a sequenceDiagram with actor mirror activated',function
|
||||
sq.yy = require('./sequenceDb');
|
||||
sq.yy.clear();
|
||||
parseError = function(err, hash) {
|
||||
console.log('Syntax error:' + err);
|
||||
console.log(hash);
|
||||
log.debug('Syntax error:' + err);
|
||||
log.debug(hash);
|
||||
};
|
||||
sq.yy.parseError = parseError;
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ var sq = require('./parser/sequenceDiagram').parser;
|
||||
sq.yy = require('./sequenceDb');
|
||||
var svgDraw = require('./svgDraw');
|
||||
var d3 = require('../../d3');
|
||||
var log = require('../../logger').create();
|
||||
|
||||
var conf = {
|
||||
|
||||
diagramMarginX:50,
|
||||
@@ -380,7 +382,7 @@ module.exports.draw = function (text, id) {
|
||||
if(conf.useMaxWidth) {
|
||||
diagram.attr("height", '100%');
|
||||
diagram.attr("width", '100%');
|
||||
diagram.attr('style', 'max-width:' + (width) + 'px;')
|
||||
diagram.attr('style', 'max-width:' + (width) + 'px;');
|
||||
}else{
|
||||
diagram.attr("height",height);
|
||||
diagram.attr("width", width );
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/**
|
||||
* Created by knut on 14-12-20.
|
||||
*/
|
||||
var log = require('../../logger').create();
|
||||
exports.drawRect = function(elem , rectData){
|
||||
var rectElem = elem.append("rect");
|
||||
rectElem.attr("x", rectData.x);
|
||||
|
||||
94
src/logger.js
Normal file
94
src/logger.js
Normal file
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* #logger
|
||||
* logger = require('logger').create()
|
||||
* logger.info("blah")
|
||||
* => [2011-3-3T20:24:4.810 info (5021)] blah
|
||||
* logger.debug("boom")
|
||||
* =>
|
||||
* logger.level = Logger.levels.debug
|
||||
* logger.debug(function() { return "booom" })
|
||||
* => [2011-3-3T20:24:4.810 error (5021)] booom
|
||||
*/
|
||||
var Logger;
|
||||
|
||||
Logger = (function() {
|
||||
function Logger(options) {
|
||||
var level, num, ref;
|
||||
this.options = options || {};
|
||||
this.level = this.options.level || Logger.levels.default;
|
||||
ref = Logger.levels;
|
||||
for (level in ref) {
|
||||
num = ref[level];
|
||||
Logger.define(this, level);
|
||||
}
|
||||
}
|
||||
|
||||
Logger.prototype.add = function(level, message, callback) {
|
||||
if (this.level > (Logger.levels[level] || 5)) {
|
||||
return;
|
||||
}
|
||||
if (callback) {
|
||||
message = callback();
|
||||
} else if (typeof message === 'function') {
|
||||
message = message();
|
||||
}
|
||||
return this.write({
|
||||
timestamp: new Date,
|
||||
severity: level,
|
||||
message: message,
|
||||
pid: process.pid
|
||||
});
|
||||
};
|
||||
|
||||
function formatTime(timestamp){
|
||||
var hh = timestamp.getUTCHours();
|
||||
var mm = timestamp.getUTCMinutes();
|
||||
var ss = timestamp.getSeconds();
|
||||
var ms = timestamp.getMilliseconds();
|
||||
// If you were building a timestamp instead of a duration, you would uncomment the following line to get 12-hour (not 24) time
|
||||
// if (hh > 12) {hh = hh % 12;}
|
||||
// These lines ensure you have two-digits
|
||||
if (hh < 10) {hh = "0"+hh;}
|
||||
if (mm < 10) {mm = "0"+mm;}
|
||||
if (ss < 10) {ss = "0"+ss;}
|
||||
if (ms < 100){ms = "0"+ms;}
|
||||
if (ms < 10) {ms = "00"+ms;}
|
||||
// This formats your string to HH:MM:SS
|
||||
var t = hh+":"+mm+":"+ss +' ('+ms+')';
|
||||
return t;
|
||||
}
|
||||
|
||||
Logger.prototype.write = function(options) {
|
||||
if(typeof console !== 'undefined'){
|
||||
if(typeof log.debug !== 'undefined'){
|
||||
return log.debug(this.build_message(options));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Logger.prototype.build_message = function(options) {
|
||||
return "[" + formatTime(options.timestamp) + "] " + options.message;
|
||||
};
|
||||
|
||||
return Logger;
|
||||
|
||||
})();
|
||||
|
||||
Logger.define = function(logger, level) {
|
||||
return logger[level] = function(message, callback) {
|
||||
return this.add(level, message, callback);
|
||||
};
|
||||
};
|
||||
|
||||
Logger.levels = {
|
||||
debug: 1,
|
||||
info: 2,
|
||||
warn: 3,
|
||||
error: 4,
|
||||
fatal: 5,
|
||||
default:3
|
||||
};
|
||||
|
||||
exports.create = function(type, options) {
|
||||
return new Logger(options);
|
||||
};
|
||||
27
src/main.js
27
src/main.js
@@ -16,6 +16,7 @@ var ganttParser = require('./diagrams/gantt/parser/gantt');
|
||||
var ganttDb = require('./diagrams/gantt/ganttDb');
|
||||
var d3 = require('./d3');
|
||||
var nextId = 0;
|
||||
var log = require('./logger').create();
|
||||
|
||||
/**
|
||||
* Function that parses a mermaid diagram defintion. If parsing fails the parseError callback is called and an error is
|
||||
@@ -102,7 +103,7 @@ var init = function () {
|
||||
|
||||
var i;
|
||||
|
||||
console.log('Found ',nodes.length,' nodes');
|
||||
log.debug('Found ',nodes.length,' nodes');
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
var element = nodes[i];
|
||||
|
||||
@@ -210,7 +211,7 @@ var render = function(id, txt,cb){
|
||||
|
||||
|
||||
|
||||
console.log(d3.select('#d'+id).node().innerHTML);
|
||||
log.debug(d3.select('#d'+id).node().innerHTML);
|
||||
var element = d3.select('#d'+id).node();
|
||||
var graphType = utils.detectType(txt);
|
||||
var classes = {};
|
||||
@@ -250,7 +251,7 @@ var render = function(id, txt,cb){
|
||||
utils.cloneCssStyles(element.firstChild, []);
|
||||
break;
|
||||
}
|
||||
//console.log(document.body.innerHTML);
|
||||
//log.debug(document.body.innerHTML);
|
||||
cb(d3.select('#d'+id).node().innerHTML);
|
||||
|
||||
d3.select('#d'+id).node().remove();
|
||||
@@ -260,12 +261,12 @@ var render = function(id, txt,cb){
|
||||
exports.render = function(id, text){
|
||||
|
||||
var callback = function(svgText){
|
||||
console.log(svgText);
|
||||
log.debug(svgText);
|
||||
};
|
||||
|
||||
if(typeof document === 'undefined'){
|
||||
//jsdom = require('jsdom').jsdom;
|
||||
//console.log(jsdom);
|
||||
//log.debug(jsdom);
|
||||
|
||||
//htmlStub = '<html><head></head><body><div class="mermaid">'+text+'</div><script src="dist/mermaid.full.js"></script><script>var mermaid_config = {startOnLoad:true}</script></body></html>';
|
||||
htmlStub = '<html><head></head><body></body></html>';
|
||||
@@ -279,7 +280,7 @@ exports.render = function(id, text){
|
||||
// process the html document, like if we were at client side
|
||||
// code to generate the dataviz and process the resulting html file to be added here
|
||||
//var d3 = require('d3');
|
||||
//console.log('Here we go: '+JSON.stringify(d3));
|
||||
//log.debug('Here we go: '+JSON.stringify(d3));
|
||||
|
||||
global.document = win.document;
|
||||
global.window = win;
|
||||
@@ -287,9 +288,9 @@ exports.render = function(id, text){
|
||||
var element = win.document.createElement('div');
|
||||
element.setAttribute('id','did');
|
||||
//document.
|
||||
console.log(document.body.innerHTML);
|
||||
//console.log('Element:',element);
|
||||
//console.log(win);
|
||||
log.debug(document.body.innerHTML);
|
||||
//log.debug('Element:',element);
|
||||
//log.debug(win);
|
||||
//mermaid.init();
|
||||
//render(win.document, 'myId', text, callback);
|
||||
|
||||
@@ -330,8 +331,8 @@ global.mermaid = {
|
||||
return parse(text);
|
||||
},
|
||||
parseError: function(err, hash) {
|
||||
console.log('Mermaid Syntax error:');
|
||||
console.log(err);
|
||||
log.debug('Mermaid Syntax error:');
|
||||
log.debug(err);
|
||||
},
|
||||
render:function(id, text){
|
||||
return exports.render(id, text);
|
||||
@@ -340,8 +341,8 @@ global.mermaid = {
|
||||
|
||||
exports.contentLoaded = function(){
|
||||
// Check state of start config mermaid namespace
|
||||
//console.log('global.mermaid.startOnLoad',global.mermaid.startOnLoad);
|
||||
//console.log('mermaid_config',mermaid_config);
|
||||
//log.debug('global.mermaid.startOnLoad',global.mermaid.startOnLoad);
|
||||
//log.debug('mermaid_config',mermaid_config);
|
||||
if (typeof mermaid_config !== 'undefined') {
|
||||
if (equals(false, mermaid_config.htmlLabels)) {
|
||||
global.mermaid.htmlLabels = false;
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
/**
|
||||
* Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid functionality and to render
|
||||
* the diagrams to svg code.
|
||||
*/
|
||||
var he = require('he');
|
||||
var mermaidAPI = require('./mermaidAPI');
|
||||
var nextId = 0;
|
||||
var log = require('./logger').create();
|
||||
|
||||
module.exports.mermaidAPI = mermaidAPI;
|
||||
/**
|
||||
* ## init
|
||||
* Function that goes through the document to find the chart definitions in there and render them.
|
||||
*
|
||||
* The function tags the processed attributes with the attribute data-processed and ignores found elements with the
|
||||
@@ -14,21 +20,19 @@ module.exports.mermaidAPI = mermaidAPI;
|
||||
* - an array of DOM nodes (as would come from a jQuery selector)
|
||||
* - a W3C selector, a la `.mermaid`
|
||||
*
|
||||
* ```
|
||||
* ```mermaid
|
||||
* graph LR;
|
||||
* a(Find elements)-->b{Processed};
|
||||
* b-->|Yes|c(Leave element);
|
||||
* c-->|No |d(Transform);
|
||||
* a(Find elements)-->b{Processed}
|
||||
* b-->|Yes|c(Leave element)
|
||||
* b-->|No |d(Transform)
|
||||
* ```
|
||||
*/
|
||||
/**
|
||||
* Renders the mermaid diagrams
|
||||
* @* param nodes- a css selector or an array of nodes
|
||||
* @param nodes a css selector or an array of nodes
|
||||
*/
|
||||
var init = function () {
|
||||
var nodes;
|
||||
if(arguments.length === 2){
|
||||
// sequence config was passed as #1
|
||||
/*! sequence config was passed as #1 */
|
||||
if(typeof arguments[0] !== 'undefined'){
|
||||
mermaid.sequenceConfig = arguments[0];
|
||||
}
|
||||
@@ -42,7 +46,7 @@ var init = function () {
|
||||
nodes = nodes === undefined ? document.querySelectorAll('.mermaid')
|
||||
: typeof nodes === "string" ? document.querySelectorAll(nodes)
|
||||
: nodes instanceof Node ? [nodes]
|
||||
// Last case - sequence config was passed pick next
|
||||
/*! Last case - sequence config was passed pick next */
|
||||
: nodes;
|
||||
|
||||
var i;
|
||||
@@ -51,7 +55,15 @@ var init = function () {
|
||||
mermaidAPI.initialize(mermaid_config);
|
||||
|
||||
}
|
||||
|
||||
|
||||
log.debug('STar On Load (0): '+mermaid.startOnLoad);
|
||||
if(typeof mermaid.startOnLoad !== 'undefined'){
|
||||
log.debug('STar On Load: '+mermaid.startOnLoad);
|
||||
mermaidAPI.initialize({startOnLoad:mermaid.startOnLoad});
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(typeof mermaid.ganttConfig !== 'undefined'){
|
||||
mermaidAPI.initialize({gantt:mermaid.ganttConfig});
|
||||
}
|
||||
@@ -63,7 +75,7 @@ var init = function () {
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
var element = nodes[i];
|
||||
|
||||
// Check if previously processed
|
||||
/*! Check if previously processed */
|
||||
if(!element.getAttribute("data-processed")) {
|
||||
element.setAttribute("data-processed", true);
|
||||
} else {
|
||||
@@ -83,11 +95,10 @@ var init = function () {
|
||||
|
||||
};
|
||||
|
||||
exports.tester = function(){};
|
||||
|
||||
exports.init = init;
|
||||
|
||||
exports.parse = mermaidAPI.parse;
|
||||
/**
|
||||
* ## version
|
||||
* Function returning version information
|
||||
* @returns {string} A string containing the version info
|
||||
*/
|
||||
@@ -95,10 +106,16 @@ exports.version = function(){
|
||||
return 'v'+require('../package.json').version;
|
||||
};
|
||||
|
||||
/**
|
||||
* ## initialize
|
||||
* This function overrides the default configuration.
|
||||
* @param config
|
||||
*/
|
||||
exports.initialize = function(config){
|
||||
mermaidAPI.initialize(config);
|
||||
};
|
||||
|
||||
|
||||
var equals = function (val, variable){
|
||||
if(typeof variable === 'undefined'){
|
||||
return false;
|
||||
@@ -108,6 +125,15 @@ var equals = function (val, variable){
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Global mermaid object. Contains the functions:
|
||||
* * init
|
||||
* * initialize
|
||||
* * version
|
||||
* * parse
|
||||
* * parseError
|
||||
* * render
|
||||
*/
|
||||
global.mermaid = {
|
||||
startOnLoad: true,
|
||||
htmlLabels: true,
|
||||
@@ -125,14 +151,26 @@ global.mermaid = {
|
||||
return mermaidAPI.parse(text);
|
||||
},
|
||||
parseError: function(err, hash) {
|
||||
console.log('Mermaid Syntax error:');
|
||||
console.log(err);
|
||||
log.debug('Mermaid Syntax error:');
|
||||
log.debug(err);
|
||||
},
|
||||
render:function(id, text,callback, element){
|
||||
return mermaidAPI.render(id, text,callback, element);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ## parseError
|
||||
* This function overrides the default configuration.
|
||||
* @param config
|
||||
*/
|
||||
exports.parseError = global.mermaid.parseError;
|
||||
|
||||
/**
|
||||
* ##contentLoaded
|
||||
* Callback function that is called when page is loaded. This functions fetches configuration for mermaid rendering and
|
||||
* calls init for rendering the mermaid diagrams on the page.
|
||||
*/
|
||||
exports.contentLoaded = function(){
|
||||
var config;
|
||||
// Check state of start config mermaid namespace
|
||||
@@ -143,7 +181,6 @@ exports.contentLoaded = function(){
|
||||
}
|
||||
|
||||
if(global.mermaid.startOnLoad) {
|
||||
|
||||
// For backwards compatability reasons also check mermaid_config variable
|
||||
if (typeof mermaid_config !== 'undefined') {
|
||||
// Check if property startOnLoad is set
|
||||
@@ -152,6 +189,7 @@ exports.contentLoaded = function(){
|
||||
}
|
||||
}
|
||||
else {
|
||||
mermaidAPI.initialize({startOnLoad:global.mermaid.startOnLoad});
|
||||
// No config found, do check API config
|
||||
config = mermaidAPI.getConfig();
|
||||
if(config.startOnLoad){
|
||||
@@ -171,7 +209,7 @@ exports.contentLoaded = function(){
|
||||
|
||||
|
||||
if(typeof document !== 'undefined'){
|
||||
/**
|
||||
/*!
|
||||
* Wait for document loaded before starting the execution
|
||||
*/
|
||||
document.addEventListener('DOMContentLoaded', function(){
|
||||
|
||||
@@ -6,11 +6,12 @@
|
||||
*/
|
||||
var rewire = require("rewire");
|
||||
var utils = require("./utils");
|
||||
var main = require("./main");
|
||||
var mermaid = require("./mermaid");
|
||||
var log = require('./logger').create();
|
||||
|
||||
describe('when using main and ',function() {
|
||||
describe('when using mermaid and ',function() {
|
||||
describe('when detecting chart type ',function() {
|
||||
//var main;
|
||||
//var mermaid;
|
||||
//var document;
|
||||
//var window;
|
||||
beforeEach(function () {
|
||||
@@ -25,58 +26,58 @@ describe('when using main and ',function() {
|
||||
});
|
||||
|
||||
it('should not start rendering with mermaid_config.startOnLoad set to false', function () {
|
||||
main = rewire('./main');
|
||||
mermaid = rewire('./mermaid');
|
||||
mermaid_config ={startOnLoad : false};
|
||||
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
//console.log(main);
|
||||
main.contentLoaded();
|
||||
//log.debug(mermaid);
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should not start rendering with mermaid.startOnLoad set to false', function () {
|
||||
main = rewire('./main');
|
||||
mermaid.startOnLoad = false;
|
||||
mermaid = rewire('./mermaid');
|
||||
global.mermaid.startOnLoad = false;
|
||||
mermaid_config ={startOnLoad : true};
|
||||
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
main.contentLoaded();
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should start rendering with both startOnLoad set', function () {
|
||||
main = rewire('./main');
|
||||
mermaid.startOnLoad = true;
|
||||
mermaid = rewire('./mermaid');
|
||||
global.mermaid.startOnLoad = true;
|
||||
mermaid_config ={startOnLoad : true};
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
main.contentLoaded();
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should start rendering with mermaid.startOnLoad set and no mermaid_config defined', function () {
|
||||
main = rewire('./main');
|
||||
mermaid.startOnLoad = true;
|
||||
mermaid = rewire('./mermaid');
|
||||
global.mermaid.startOnLoad = true;
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
main.contentLoaded();
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should start rendering as a default with no changes performed', function () {
|
||||
main = rewire('./main');
|
||||
mermaid = rewire('./mermaid');
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
main.contentLoaded();
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('when calling addEdges ',function() {
|
||||
var main;
|
||||
var mermaid;
|
||||
var graph = require('./diagrams/flowchart/graphDb');
|
||||
var flow = require('./diagrams/flowchart/parser/flow');
|
||||
var flowRend = require('./diagrams/flowchart/flowRenderer');
|
||||
@@ -88,7 +89,7 @@ describe('when using main and ',function() {
|
||||
flow.parser.yy =graph;
|
||||
graph.clear();
|
||||
document = mock.getDocument();
|
||||
main = rewire('./main');
|
||||
mermaid = rewire('./mermaid');
|
||||
});
|
||||
it('it should handle edges with text', function () {
|
||||
var res = flow.parser.parse('graph TD;A-->|text ex|B;');
|
||||
@@ -177,30 +178,30 @@ describe('when using main and ',function() {
|
||||
|
||||
describe('checking validity of input ', function(){
|
||||
it('it should return false for an invalid definiton',function(){
|
||||
spyOn(mermaid,'parseError');
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('this is not a mermaid diagram definition');
|
||||
|
||||
expect(res).toBe(false);
|
||||
expect(mermaid.parseError).toHaveBeenCalled();
|
||||
expect(global.mermaid.parseError).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('it should return true for a valid flow definition',function(){
|
||||
spyOn(mermaid,'parseError');
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('graph TD;A--x|text including URL space|B;');
|
||||
|
||||
expect(res).toBe(true);
|
||||
expect(mermaid.parseError).not.toHaveBeenCalled();
|
||||
expect(global.mermaid.parseError).not.toHaveBeenCalled();
|
||||
});
|
||||
it('it should return false for an invalid flow definition',function(){
|
||||
spyOn(mermaid,'parseError');
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('graph TQ;A--x|text including URL space|B;');
|
||||
|
||||
expect(res).toBe(false);
|
||||
expect(mermaid.parseError).toHaveBeenCalled();
|
||||
expect(global.mermaid.parseError).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('it should return true for a valid sequenceDiagram definition',function(){
|
||||
spyOn(mermaid,'parseError');
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var str = 'sequenceDiagram\n' +
|
||||
'Alice->Bob: Hello Bob, how are you?\n\n' +
|
||||
'%% Comment\n' +
|
||||
@@ -213,11 +214,11 @@ describe('when using main and ',function() {
|
||||
var res = mermaid.parse(str);
|
||||
|
||||
expect(res).toBe(true);
|
||||
expect(mermaid.parseError).not.toHaveBeenCalled();
|
||||
expect(global.mermaid.parseError).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('it should return false for an invalid sequenceDiagram definition',function(){
|
||||
spyOn(mermaid,'parseError');
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var str = 'sequenceDiagram\n' +
|
||||
'Alice:->Bob: Hello Bob, how are you?\n\n' +
|
||||
'%% Comment\n' +
|
||||
@@ -230,11 +231,11 @@ describe('when using main and ',function() {
|
||||
var res = mermaid.parse(str);
|
||||
|
||||
expect(res).toBe(false);
|
||||
expect(mermaid.parseError).toHaveBeenCalled();
|
||||
expect(global.mermaid.parseError).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('it should return true for a valid dot definition',function(){
|
||||
spyOn(mermaid,'parseError');
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('digraph\n' +
|
||||
'{\n' +
|
||||
' a -> b -> c -- d -> e;\n' +
|
||||
@@ -242,10 +243,10 @@ describe('when using main and ',function() {
|
||||
'}');
|
||||
|
||||
expect(res).toBe(true);
|
||||
expect(mermaid.parseError).not.toHaveBeenCalled();
|
||||
expect(global.mermaid.parseError).not.toHaveBeenCalled();
|
||||
});
|
||||
it('it should return false for an invalid dot definition',function(){
|
||||
spyOn(mermaid,'parseError');
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('digraph\n' +
|
||||
'{\n' +
|
||||
'a -:> b -> c -- d -> e;\n' +
|
||||
@@ -253,7 +254,7 @@ describe('when using main and ',function() {
|
||||
'}');
|
||||
|
||||
expect(res).toBe(false);
|
||||
expect(mermaid.parseError).toHaveBeenCalled();
|
||||
expect(global.mermaid.parseError).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -15,6 +15,7 @@ var ganttParser = require('./diagrams/gantt/parser/gantt');
|
||||
var ganttDb = require('./diagrams/gantt/ganttDb');
|
||||
var d3 = require('./d3');
|
||||
var nextId = 0;
|
||||
var log = require('./logger').create();
|
||||
|
||||
// Default options, can be overridden at initialization time
|
||||
/**
|
||||
@@ -234,7 +235,7 @@ var setConf = function(cnf){
|
||||
|
||||
var j;
|
||||
for(j=0;j<lvl2Keys.length;j++) {
|
||||
//console.log('Setting conf ',lvl1Keys[i],'-',lvl2Keys[j]);
|
||||
//log.debug('Setting conf ',lvl1Keys[i],'-',lvl2Keys[j]);
|
||||
if(typeof config[lvl1Keys[i]] === 'undefined'){
|
||||
|
||||
config[lvl1Keys[i]] = {};
|
||||
@@ -256,9 +257,19 @@ exports.initialize = function(options){
|
||||
exports.getConfig = function(){
|
||||
return config;
|
||||
};
|
||||
|
||||
exports.parseError = function(err, hash) {
|
||||
if(typeof mermaid !== 'undefined') {
|
||||
mermaid.parseError(err,hash);
|
||||
}else{
|
||||
log.debug('Mermaid Syntax error:');
|
||||
log.debug(err);
|
||||
}
|
||||
};
|
||||
global.mermaidAPI = {
|
||||
render : exports.render,
|
||||
parse : exports.parse,
|
||||
initialize : exports.initialize,
|
||||
detectType : utils.detectType
|
||||
detectType : utils.detectType,
|
||||
parseError : exports.parseError
|
||||
};
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* Created by knut on 14-11-23.
|
||||
*/
|
||||
var api = require('./mermaidAPI.js');
|
||||
var log = require('./logger').create();
|
||||
|
||||
describe('when using mermaidAPI and ',function() {
|
||||
describe('doing initialize ',function() {
|
||||
@@ -52,4 +53,20 @@ describe('when using mermaidAPI and ',function() {
|
||||
});
|
||||
|
||||
});
|
||||
describe('checking validity of input ', function(){
|
||||
it('it should return false for an invalid definiton',function(){
|
||||
spyOn(global.mermaidAPI,'parseError');
|
||||
var res = api.parse('this is not a mermaid diagram definition');
|
||||
|
||||
expect(res).toBe(false);
|
||||
expect(global.mermaidAPI.parseError).toHaveBeenCalled();
|
||||
});
|
||||
it('it should return true for a valid definiton',function(){
|
||||
spyOn(global.mermaidAPI,'parseError');
|
||||
var res = mermaid.parse('graph TD;A--x|text including URL space|B;');
|
||||
|
||||
expect(res).toBe(true);
|
||||
expect(global.mermaidAPI.parseError).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
26
src/utils.js
26
src/utils.js
@@ -1,8 +1,21 @@
|
||||
/**
|
||||
* Created by knut on 14-11-23.
|
||||
*/
|
||||
var log = require('./logger').create();
|
||||
/**
|
||||
* @function detectType
|
||||
* Detects the type of the graph text.
|
||||
* ```mermaid
|
||||
* graph LR
|
||||
* a-->b
|
||||
* b-->c
|
||||
* c-->d
|
||||
* d-->e
|
||||
* e-->f
|
||||
* f-->g
|
||||
* g-->h
|
||||
* ```
|
||||
*
|
||||
* @param {string} text The text defining the graph
|
||||
* @param {string} text The second text defining the graph
|
||||
* @returns {string} A graph definition key
|
||||
@@ -13,22 +26,27 @@ module.exports.detectType = function(text,a){
|
||||
}
|
||||
|
||||
if(text.match(/^\s*sequence/)){
|
||||
//console.log('Detected sequence syntax');
|
||||
/* ```mermaid
|
||||
graph TB
|
||||
a-->b
|
||||
b-->c
|
||||
```
|
||||
*/
|
||||
return "sequence";
|
||||
}
|
||||
|
||||
if(text.match(/^\s*digraph/)) {
|
||||
//console.log('Detected dot syntax');
|
||||
//log.debug('Detected dot syntax');
|
||||
return "dotGraph";
|
||||
}
|
||||
|
||||
if(text.match(/^\s*info/)) {
|
||||
//console.log('Detected info syntax');
|
||||
//log.debug('Detected info syntax');
|
||||
return "info";
|
||||
}
|
||||
|
||||
if(text.match(/^\s*gantt/)) {
|
||||
//console.log('Detected info syntax');
|
||||
//log.debug('Detected info syntax');
|
||||
return "gantt";
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Created by knut on 14-11-23.
|
||||
*/
|
||||
|
||||
var log = require('./logger').create();
|
||||
describe('when detecting chart type ',function() {
|
||||
var utils = require('./utils');
|
||||
beforeEach(function () {
|
||||
|
||||
Reference in New Issue
Block a user