Added logger for dealing with issue #179

Added markdown files for the documentation.
parseError exposed from the mermaidAPI
This commit is contained in:
knsv 2015-06-30 14:23:32 +02:00
parent 0dc983d04a
commit 6f96b5dd14
32 changed files with 1253 additions and 471 deletions

337
dist/mermaid.js vendored
View File

@ -25049,19 +25049,19 @@ module.exports={
},{}],87:[function(require,module,exports){
/* 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')
@ -25072,10 +25072,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
@ -25530,11 +25530,12 @@ Detailed instructions at http://www.github.com/vijithassar/d3textwrap
}
})();
/* jshint ignore:end */
},{"d3":1}],88:[function(require,module,exports){
/**
* Created by knut on 15-01-14.
*/
var log = require('../../logger').create();
var message = '';
var info = false;
@ -25555,16 +25556,16 @@ exports.getInfo = function(){
};
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
},{}],89:[function(require,module,exports){
},{"../../logger":104}],89:[function(require,module,exports){
/**
* Created by knut on 14-12-11.
*/
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
@ -25602,7 +25603,7 @@ exports.draw = function (txt, id, ver) {
svg.attr("width", 400 );
//svg.attr("viewBox", '0 0 300 150');
};
},{"../../d3":87,"./exampleDb":88,"./parser/example.js":90}],90:[function(require,module,exports){
},{"../../d3":87,"../../logger":104,"./exampleDb":88,"./parser/example.js":90}],90:[function(require,module,exports){
(function (process){
/* parser generated by jison 0.4.15 */
/*
@ -26231,14 +26232,14 @@ if (typeof module !== 'undefined' && require.main === module) {
}).call(this,require("1YiZ5S"))
},{"1YiZ5S":82,"fs":80,"path":81}],91:[function(require,module,exports){
/* 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) {
@ -26247,7 +26248,7 @@ if (!dagreD3) {
module.exports = dagreD3;
},{"dagre-d3":2}],92:[function(require,module,exports){
},{"../../logger":104,"dagre-d3":2}],92:[function(require,module,exports){
/**
* Created by knut on 14-12-11.
*/
@ -26256,6 +26257,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){
@ -26299,7 +26302,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(" ");
@ -26480,7 +26483,7 @@ exports.getClasses = function (text, isDot) {
* @param id
*/
exports.draw = function (text, id,isDot) {
log.debug('Drawing flowchart');
var parser;
graph.clear();
if(isDot){
@ -26533,7 +26536,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;
@ -26544,7 +26547,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);
}
}
@ -26688,7 +26691,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;
@ -26715,11 +26718,11 @@ exports.draw = function (text, id,isDot) {
};
},{"../../d3":87,"./dagre-d3":91,"./graphDb":93,"./parser/dot":94,"./parser/flow":95}],93:[function(require,module,exports){
},{"../../d3":87,"../../logger":104,"./dagre-d3":91,"./graphDb":93,"./parser/dot":94,"./parser/flow":95}],93:[function(require,module,exports){
/**
* Created by knut on 14-11-03.
*/
var log = require('../../logger').create();
var vertices = {};
var edges = [];
var classes = [];
@ -26781,7 +26784,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;
@ -26876,7 +26879,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);
@ -26884,7 +26887,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);
}
});
}
@ -26969,8 +26972,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;
@ -26980,11 +26983,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;
@ -27050,9 +27053,9 @@ exports.getSubGraphs = function (list) {
};
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
},{}],94:[function(require,module,exports){
},{"../../logger":104}],94:[function(require,module,exports){
(function (process){
/* parser generated by jison 0.4.15 */
/*
@ -28720,6 +28723,7 @@ if (typeof module !== 'undefined' && require.main === module) {
* Created by knut on 15-01-14.
*/
var moment = require('moment');
var log = require('../../logger').create();
var dateFormat = '';
var title = '';
@ -28777,8 +28781,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();
@ -28799,9 +28803,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
@ -28948,14 +28952,14 @@ exports.addTask = function(descr,data){
};
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
},{"moment":85}],97:[function(require,module,exports){
},{"../../logger":104,"moment":85}],97:[function(require,module,exports){
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 = {
@ -29318,7 +29322,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 {
@ -29378,7 +29382,7 @@ module.exports.draw = function (text, id) {
return getCounts(arr)[word] || 0;
}
};
},{"../../d3":87,"./ganttDb":96,"./parser/gantt":98,"moment":85}],98:[function(require,module,exports){
},{"../../d3":87,"../../logger":104,"./ganttDb":96,"./parser/gantt":98,"moment":85}],98:[function(require,module,exports){
(function (process){
/* parser generated by jison 0.4.15 */
/*
@ -30783,15 +30787,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});
};
@ -30799,7 +30803,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});
};
@ -30859,7 +30863,7 @@ exports.addNote = function (actor, placement, message){
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
exports.apply = function(param){
@ -30868,7 +30872,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);
@ -30880,7 +30884,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;
@ -30888,7 +30892,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;
@ -30896,7 +30900,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;
@ -30907,11 +30911,9 @@ exports.apply = function(param){
exports.addSignal(undefined, undefined, undefined, param.signalType);
break;
}
// console.log('xxx',param);
}
};
},{}],101:[function(require,module,exports){
},{"../../logger":104}],101:[function(require,module,exports){
/**
* Created by knut on 14-11-23.
*/
@ -30920,6 +30922,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,
@ -31294,7 +31298,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 );
@ -31302,10 +31306,11 @@ module.exports.draw = function (text, id) {
diagram.attr("viewBox", (box.startx-conf.diagramMarginX) + ' -' +conf.diagramMarginY + ' ' + width + ' ' + height);
};
},{"../../d3":87,"./parser/sequenceDiagram":99,"./sequenceDb":100,"./svgDraw":102}],102:[function(require,module,exports){
},{"../../d3":87,"../../logger":104,"./parser/sequenceDiagram":99,"./sequenceDb":100,"./svgDraw":102}],102:[function(require,module,exports){
/**
* 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);
@ -31550,14 +31555,20 @@ exports.getNoteRect = function(){
return rect;
};
},{}],103:[function(require,module,exports){
},{"../../logger":104}],103:[function(require,module,exports){
(function (global){
/**
* 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
@ -31568,21 +31579,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];
}
@ -31596,7 +31605,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;
@ -31605,7 +31614,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});
}
@ -31617,7 +31634,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 {
@ -31637,11 +31654,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
*/
@ -31649,10 +31665,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;
@ -31662,6 +31684,15 @@ var equals = function (val, variable){
}
};
/**
* Global mermaid object. Contains the functions:
* * init
* * initialize
* * version
* * parse
* * parseError
* * render
*/
global.mermaid = {
startOnLoad: true,
htmlLabels: true,
@ -31679,14 +31710,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
@ -31697,7 +31740,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
@ -31706,6 +31748,7 @@ exports.contentLoaded = function(){
}
}
else {
mermaidAPI.initialize({startOnLoad:global.mermaid.startOnLoad});
// No config found, do check API config
config = mermaidAPI.getConfig();
if(config.startOnLoad){
@ -31725,7 +31768,7 @@ exports.contentLoaded = function(){
if(typeof document !== 'undefined'){
/**
/*!
* Wait for document loaded before starting the execution
*/
document.addEventListener('DOMContentLoaded', function(){
@ -31734,7 +31777,104 @@ if(typeof document !== 'undefined'){
}
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"../package.json":86,"./mermaidAPI":104,"he":83}],104:[function(require,module,exports){
},{"../package.json":86,"./logger":104,"./mermaidAPI":105,"he":83}],104:[function(require,module,exports){
(function (process){
/**
* #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);
};
}).call(this,require("1YiZ5S"))
},{"1YiZ5S":82}],105:[function(require,module,exports){
(function (global){
var graph = require('./diagrams/flowchart/graphDb');
var flow = require('./diagrams/flowchart/parser/flow');
@ -31753,6 +31893,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
/**
@ -31972,7 +32113,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]] = {};
@ -31994,20 +32135,43 @@ 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
};
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"../package.json":86,"./d3":87,"./diagrams/example/exampleDb":88,"./diagrams/example/exampleRenderer":89,"./diagrams/example/parser/example":90,"./diagrams/flowchart/flowRenderer":92,"./diagrams/flowchart/graphDb":93,"./diagrams/flowchart/parser/dot":94,"./diagrams/flowchart/parser/flow":95,"./diagrams/gantt/ganttDb":96,"./diagrams/gantt/ganttRenderer":97,"./diagrams/gantt/parser/gantt":98,"./diagrams/sequenceDiagram/parser/sequenceDiagram":99,"./diagrams/sequenceDiagram/sequenceDb":100,"./diagrams/sequenceDiagram/sequenceRenderer":101,"./utils":105}],105:[function(require,module,exports){
},{"../package.json":86,"./d3":87,"./diagrams/example/exampleDb":88,"./diagrams/example/exampleRenderer":89,"./diagrams/example/parser/example":90,"./diagrams/flowchart/flowRenderer":92,"./diagrams/flowchart/graphDb":93,"./diagrams/flowchart/parser/dot":94,"./diagrams/flowchart/parser/flow":95,"./diagrams/gantt/ganttDb":96,"./diagrams/gantt/ganttRenderer":97,"./diagrams/gantt/parser/gantt":98,"./diagrams/sequenceDiagram/parser/sequenceDiagram":99,"./diagrams/sequenceDiagram/sequenceDb":100,"./diagrams/sequenceDiagram/sequenceRenderer":101,"./logger":104,"./utils":106}],106:[function(require,module,exports){
/**
* 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
@ -32018,22 +32182,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";
}
@ -32126,4 +32295,4 @@ module.exports.cloneCssStyles = function(svg, classes){
}
};
},{}]},{},[103])
},{"./logger":104}]},{},[103])

8
dist/mermaid.min.js vendored

File diff suppressed because one or more lines are too long

337
dist/mermaid.slim.js vendored
View File

@ -15833,19 +15833,19 @@ module.exports={
},{}],86:[function(require,module,exports){
/* 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')
@ -15856,10 +15856,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
@ -16314,11 +16314,12 @@ Detailed instructions at http://www.github.com/vijithassar/d3textwrap
}
})();
/* jshint ignore:end */
},{"d3":"tokjIE"}],87:[function(require,module,exports){
/**
* Created by knut on 15-01-14.
*/
var log = require('../../logger').create();
var message = '';
var info = false;
@ -16339,16 +16340,16 @@ exports.getInfo = function(){
};
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
},{}],88:[function(require,module,exports){
},{"../../logger":103}],88:[function(require,module,exports){
/**
* Created by knut on 14-12-11.
*/
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
@ -16386,7 +16387,7 @@ exports.draw = function (txt, id, ver) {
svg.attr("width", 400 );
//svg.attr("viewBox", '0 0 300 150');
};
},{"../../d3":86,"./exampleDb":87,"./parser/example.js":89}],89:[function(require,module,exports){
},{"../../d3":86,"../../logger":103,"./exampleDb":87,"./parser/example.js":89}],89:[function(require,module,exports){
(function (process){
/* parser generated by jison 0.4.15 */
/*
@ -17015,14 +17016,14 @@ if (typeof module !== 'undefined' && require.main === module) {
}).call(this,require("1YiZ5S"))
},{"1YiZ5S":81,"fs":79,"path":80}],90:[function(require,module,exports){
/* 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) {
@ -17031,7 +17032,7 @@ if (!dagreD3) {
module.exports = dagreD3;
},{"dagre-d3":1}],91:[function(require,module,exports){
},{"../../logger":103,"dagre-d3":1}],91:[function(require,module,exports){
/**
* Created by knut on 14-12-11.
*/
@ -17040,6 +17041,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){
@ -17083,7 +17086,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(" ");
@ -17264,7 +17267,7 @@ exports.getClasses = function (text, isDot) {
* @param id
*/
exports.draw = function (text, id,isDot) {
log.debug('Drawing flowchart');
var parser;
graph.clear();
if(isDot){
@ -17317,7 +17320,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;
@ -17328,7 +17331,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);
}
}
@ -17472,7 +17475,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;
@ -17499,11 +17502,11 @@ exports.draw = function (text, id,isDot) {
};
},{"../../d3":86,"./dagre-d3":90,"./graphDb":92,"./parser/dot":93,"./parser/flow":94}],92:[function(require,module,exports){
},{"../../d3":86,"../../logger":103,"./dagre-d3":90,"./graphDb":92,"./parser/dot":93,"./parser/flow":94}],92:[function(require,module,exports){
/**
* Created by knut on 14-11-03.
*/
var log = require('../../logger').create();
var vertices = {};
var edges = [];
var classes = [];
@ -17565,7 +17568,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;
@ -17660,7 +17663,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);
@ -17668,7 +17671,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);
}
});
}
@ -17753,8 +17756,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;
@ -17764,11 +17767,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;
@ -17834,9 +17837,9 @@ exports.getSubGraphs = function (list) {
};
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
},{}],93:[function(require,module,exports){
},{"../../logger":103}],93:[function(require,module,exports){
(function (process){
/* parser generated by jison 0.4.15 */
/*
@ -19504,6 +19507,7 @@ if (typeof module !== 'undefined' && require.main === module) {
* Created by knut on 15-01-14.
*/
var moment = require('moment');
var log = require('../../logger').create();
var dateFormat = '';
var title = '';
@ -19561,8 +19565,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();
@ -19583,9 +19587,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
@ -19732,14 +19736,14 @@ exports.addTask = function(descr,data){
};
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
},{"moment":84}],96:[function(require,module,exports){
},{"../../logger":103,"moment":84}],96:[function(require,module,exports){
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 = {
@ -20102,7 +20106,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 {
@ -20162,7 +20166,7 @@ module.exports.draw = function (text, id) {
return getCounts(arr)[word] || 0;
}
};
},{"../../d3":86,"./ganttDb":95,"./parser/gantt":97,"moment":84}],97:[function(require,module,exports){
},{"../../d3":86,"../../logger":103,"./ganttDb":95,"./parser/gantt":97,"moment":84}],97:[function(require,module,exports){
(function (process){
/* parser generated by jison 0.4.15 */
/*
@ -21567,15 +21571,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});
};
@ -21583,7 +21587,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});
};
@ -21643,7 +21647,7 @@ exports.addNote = function (actor, placement, message){
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
exports.apply = function(param){
@ -21652,7 +21656,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);
@ -21664,7 +21668,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;
@ -21672,7 +21676,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;
@ -21680,7 +21684,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;
@ -21691,11 +21695,9 @@ exports.apply = function(param){
exports.addSignal(undefined, undefined, undefined, param.signalType);
break;
}
// console.log('xxx',param);
}
};
},{}],100:[function(require,module,exports){
},{"../../logger":103}],100:[function(require,module,exports){
/**
* Created by knut on 14-11-23.
*/
@ -21704,6 +21706,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,
@ -22078,7 +22082,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 );
@ -22086,10 +22090,11 @@ module.exports.draw = function (text, id) {
diagram.attr("viewBox", (box.startx-conf.diagramMarginX) + ' -' +conf.diagramMarginY + ' ' + width + ' ' + height);
};
},{"../../d3":86,"./parser/sequenceDiagram":98,"./sequenceDb":99,"./svgDraw":101}],101:[function(require,module,exports){
},{"../../d3":86,"../../logger":103,"./parser/sequenceDiagram":98,"./sequenceDb":99,"./svgDraw":101}],101:[function(require,module,exports){
/**
* 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);
@ -22334,14 +22339,20 @@ exports.getNoteRect = function(){
return rect;
};
},{}],102:[function(require,module,exports){
},{"../../logger":103}],102:[function(require,module,exports){
(function (global){
/**
* 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
@ -22352,21 +22363,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];
}
@ -22380,7 +22389,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;
@ -22389,7 +22398,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});
}
@ -22401,7 +22418,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 {
@ -22421,11 +22438,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
*/
@ -22433,10 +22449,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;
@ -22446,6 +22468,15 @@ var equals = function (val, variable){
}
};
/**
* Global mermaid object. Contains the functions:
* * init
* * initialize
* * version
* * parse
* * parseError
* * render
*/
global.mermaid = {
startOnLoad: true,
htmlLabels: true,
@ -22463,14 +22494,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
@ -22481,7 +22524,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
@ -22490,6 +22532,7 @@ exports.contentLoaded = function(){
}
}
else {
mermaidAPI.initialize({startOnLoad:global.mermaid.startOnLoad});
// No config found, do check API config
config = mermaidAPI.getConfig();
if(config.startOnLoad){
@ -22509,7 +22552,7 @@ exports.contentLoaded = function(){
if(typeof document !== 'undefined'){
/**
/*!
* Wait for document loaded before starting the execution
*/
document.addEventListener('DOMContentLoaded', function(){
@ -22518,7 +22561,104 @@ if(typeof document !== 'undefined'){
}
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"../package.json":85,"./mermaidAPI":103,"he":82}],103:[function(require,module,exports){
},{"../package.json":85,"./logger":103,"./mermaidAPI":104,"he":82}],103:[function(require,module,exports){
(function (process){
/**
* #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);
};
}).call(this,require("1YiZ5S"))
},{"1YiZ5S":81}],104:[function(require,module,exports){
(function (global){
var graph = require('./diagrams/flowchart/graphDb');
var flow = require('./diagrams/flowchart/parser/flow');
@ -22537,6 +22677,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
/**
@ -22756,7 +22897,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]] = {};
@ -22778,20 +22919,43 @@ 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
};
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"../package.json":85,"./d3":86,"./diagrams/example/exampleDb":87,"./diagrams/example/exampleRenderer":88,"./diagrams/example/parser/example":89,"./diagrams/flowchart/flowRenderer":91,"./diagrams/flowchart/graphDb":92,"./diagrams/flowchart/parser/dot":93,"./diagrams/flowchart/parser/flow":94,"./diagrams/gantt/ganttDb":95,"./diagrams/gantt/ganttRenderer":96,"./diagrams/gantt/parser/gantt":97,"./diagrams/sequenceDiagram/parser/sequenceDiagram":98,"./diagrams/sequenceDiagram/sequenceDb":99,"./diagrams/sequenceDiagram/sequenceRenderer":100,"./utils":104}],104:[function(require,module,exports){
},{"../package.json":85,"./d3":86,"./diagrams/example/exampleDb":87,"./diagrams/example/exampleRenderer":88,"./diagrams/example/parser/example":89,"./diagrams/flowchart/flowRenderer":91,"./diagrams/flowchart/graphDb":92,"./diagrams/flowchart/parser/dot":93,"./diagrams/flowchart/parser/flow":94,"./diagrams/gantt/ganttDb":95,"./diagrams/gantt/ganttRenderer":96,"./diagrams/gantt/parser/gantt":97,"./diagrams/sequenceDiagram/parser/sequenceDiagram":98,"./diagrams/sequenceDiagram/sequenceDb":99,"./diagrams/sequenceDiagram/sequenceRenderer":100,"./logger":103,"./utils":105}],105:[function(require,module,exports){
/**
* 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
@ -22802,22 +22966,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";
}
@ -22910,4 +23079,4 @@ module.exports.cloneCssStyles = function(svg, classes){
}
};
},{}]},{},[102])
},{"./logger":103}]},{},[102])

File diff suppressed because one or more lines are too long

261
dist/mermaidAPI.js vendored
View File

@ -24716,19 +24716,19 @@ module.exports={
},{}],86:[function(require,module,exports){
/* 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')
@ -24739,10 +24739,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
@ -25197,11 +25197,12 @@ Detailed instructions at http://www.github.com/vijithassar/d3textwrap
}
})();
/* jshint ignore:end */
},{"d3":1}],87:[function(require,module,exports){
/**
* Created by knut on 15-01-14.
*/
var log = require('../../logger').create();
var message = '';
var info = false;
@ -25222,16 +25223,16 @@ exports.getInfo = function(){
};
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
},{}],88:[function(require,module,exports){
},{"../../logger":103}],88:[function(require,module,exports){
/**
* Created by knut on 14-12-11.
*/
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
@ -25269,7 +25270,7 @@ exports.draw = function (txt, id, ver) {
svg.attr("width", 400 );
//svg.attr("viewBox", '0 0 300 150');
};
},{"../../d3":86,"./exampleDb":87,"./parser/example.js":89}],89:[function(require,module,exports){
},{"../../d3":86,"../../logger":103,"./exampleDb":87,"./parser/example.js":89}],89:[function(require,module,exports){
(function (process){
/* parser generated by jison 0.4.15 */
/*
@ -25898,14 +25899,14 @@ if (typeof module !== 'undefined' && require.main === module) {
}).call(this,require("1YiZ5S"))
},{"1YiZ5S":82,"fs":80,"path":81}],90:[function(require,module,exports){
/* 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) {
@ -25914,7 +25915,7 @@ if (!dagreD3) {
module.exports = dagreD3;
},{"dagre-d3":2}],91:[function(require,module,exports){
},{"../../logger":103,"dagre-d3":2}],91:[function(require,module,exports){
/**
* Created by knut on 14-12-11.
*/
@ -25923,6 +25924,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){
@ -25966,7 +25969,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(" ");
@ -26147,7 +26150,7 @@ exports.getClasses = function (text, isDot) {
* @param id
*/
exports.draw = function (text, id,isDot) {
log.debug('Drawing flowchart');
var parser;
graph.clear();
if(isDot){
@ -26200,7 +26203,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;
@ -26211,7 +26214,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);
}
}
@ -26355,7 +26358,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;
@ -26382,11 +26385,11 @@ exports.draw = function (text, id,isDot) {
};
},{"../../d3":86,"./dagre-d3":90,"./graphDb":92,"./parser/dot":93,"./parser/flow":94}],92:[function(require,module,exports){
},{"../../d3":86,"../../logger":103,"./dagre-d3":90,"./graphDb":92,"./parser/dot":93,"./parser/flow":94}],92:[function(require,module,exports){
/**
* Created by knut on 14-11-03.
*/
var log = require('../../logger').create();
var vertices = {};
var edges = [];
var classes = [];
@ -26448,7 +26451,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;
@ -26543,7 +26546,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);
@ -26551,7 +26554,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);
}
});
}
@ -26636,8 +26639,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;
@ -26647,11 +26650,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;
@ -26717,9 +26720,9 @@ exports.getSubGraphs = function (list) {
};
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
},{}],93:[function(require,module,exports){
},{"../../logger":103}],93:[function(require,module,exports){
(function (process){
/* parser generated by jison 0.4.15 */
/*
@ -28387,6 +28390,7 @@ if (typeof module !== 'undefined' && require.main === module) {
* Created by knut on 15-01-14.
*/
var moment = require('moment');
var log = require('../../logger').create();
var dateFormat = '';
var title = '';
@ -28444,8 +28448,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();
@ -28466,9 +28470,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
@ -28615,14 +28619,14 @@ exports.addTask = function(descr,data){
};
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
},{"moment":84}],96:[function(require,module,exports){
},{"../../logger":103,"moment":84}],96:[function(require,module,exports){
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 = {
@ -28985,7 +28989,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 {
@ -29045,7 +29049,7 @@ module.exports.draw = function (text, id) {
return getCounts(arr)[word] || 0;
}
};
},{"../../d3":86,"./ganttDb":95,"./parser/gantt":97,"moment":84}],97:[function(require,module,exports){
},{"../../d3":86,"../../logger":103,"./ganttDb":95,"./parser/gantt":97,"moment":84}],97:[function(require,module,exports){
(function (process){
/* parser generated by jison 0.4.15 */
/*
@ -30450,15 +30454,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});
};
@ -30466,7 +30470,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});
};
@ -30526,7 +30530,7 @@ exports.addNote = function (actor, placement, message){
exports.parseError = function(err,hash){
mermaid.parseError(err,hash);
mermaidAPI.parseError(err,hash);
};
exports.apply = function(param){
@ -30535,7 +30539,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);
@ -30547,7 +30551,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;
@ -30555,7 +30559,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;
@ -30563,7 +30567,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;
@ -30574,11 +30578,9 @@ exports.apply = function(param){
exports.addSignal(undefined, undefined, undefined, param.signalType);
break;
}
// console.log('xxx',param);
}
};
},{}],100:[function(require,module,exports){
},{"../../logger":103}],100:[function(require,module,exports){
/**
* Created by knut on 14-11-23.
*/
@ -30587,6 +30589,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,
@ -30961,7 +30965,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 );
@ -30969,10 +30973,11 @@ module.exports.draw = function (text, id) {
diagram.attr("viewBox", (box.startx-conf.diagramMarginX) + ' -' +conf.diagramMarginY + ' ' + width + ' ' + height);
};
},{"../../d3":86,"./parser/sequenceDiagram":98,"./sequenceDb":99,"./svgDraw":101}],101:[function(require,module,exports){
},{"../../d3":86,"../../logger":103,"./parser/sequenceDiagram":98,"./sequenceDb":99,"./svgDraw":101}],101:[function(require,module,exports){
/**
* 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);
@ -31217,7 +31222,7 @@ exports.getNoteRect = function(){
return rect;
};
},{}],102:[function(require,module,exports){
},{"../../logger":103}],102:[function(require,module,exports){
(function (global){
var graph = require('./diagrams/flowchart/graphDb');
var flow = require('./diagrams/flowchart/parser/flow');
@ -31236,6 +31241,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
/**
@ -31455,7 +31461,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]] = {};
@ -31477,20 +31483,140 @@ 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
};
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"../package.json":85,"./d3":86,"./diagrams/example/exampleDb":87,"./diagrams/example/exampleRenderer":88,"./diagrams/example/parser/example":89,"./diagrams/flowchart/flowRenderer":91,"./diagrams/flowchart/graphDb":92,"./diagrams/flowchart/parser/dot":93,"./diagrams/flowchart/parser/flow":94,"./diagrams/gantt/ganttDb":95,"./diagrams/gantt/ganttRenderer":96,"./diagrams/gantt/parser/gantt":97,"./diagrams/sequenceDiagram/parser/sequenceDiagram":98,"./diagrams/sequenceDiagram/sequenceDb":99,"./diagrams/sequenceDiagram/sequenceRenderer":100,"./utils":103}],103:[function(require,module,exports){
},{"../package.json":85,"./d3":86,"./diagrams/example/exampleDb":87,"./diagrams/example/exampleRenderer":88,"./diagrams/example/parser/example":89,"./diagrams/flowchart/flowRenderer":91,"./diagrams/flowchart/graphDb":92,"./diagrams/flowchart/parser/dot":93,"./diagrams/flowchart/parser/flow":94,"./diagrams/gantt/ganttDb":95,"./diagrams/gantt/ganttRenderer":96,"./diagrams/gantt/parser/gantt":97,"./diagrams/sequenceDiagram/parser/sequenceDiagram":98,"./diagrams/sequenceDiagram/sequenceDb":99,"./diagrams/sequenceDiagram/sequenceRenderer":100,"./logger":103,"./utils":104}],103:[function(require,module,exports){
(function (process){
/**
* #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);
};
}).call(this,require("1YiZ5S"))
},{"1YiZ5S":82}],104:[function(require,module,exports){
/**
* 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
@ -31501,22 +31627,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";
}
@ -31609,4 +31740,4 @@ module.exports.cloneCssStyles = function(svg, classes){
}
};
},{}]},{},[102])
},{"./logger":103}]},{},[102])

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

17
src/d3.js vendored
View File

@ -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 */

View File

@ -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;
});

View File

@ -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);
};

View File

@ -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

View File

@ -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) {

View File

@ -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;

View File

@ -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);
};

View File

@ -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;');

View File

@ -1,15 +0,0 @@
/* global window */
/*var d3;
if (require) {
try {
d3 = require("d3");
} catch (e) {}
}
if (!d3) {
d3 = window.d3;
}
module.exports = d3;*/

View File

@ -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' +

View File

@ -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);
};

View File

@ -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;
});

View File

@ -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 {

View File

@ -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);
}
};

View File

@ -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;

View File

@ -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 );

View File

@ -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
View 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);
};

View File

@ -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;

View File

@ -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(){

View File

@ -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();
});
});

View File

@ -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
};

View File

@ -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();
});
});
});

View File

@ -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";
}

View File

@ -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 () {